tandy put their sound chip on the 1A interrupt?
-
replied to Foone🏳️⚧️ last edited by
@foone this sounds like a job for whatever scripting the debugger supports?
-
replied to a kilo of saucepans (rakslice) last edited by
@rakslice
new side project: add scripting to this debugger -
replied to Foone🏳️⚧️ last edited by
wait is this image format vertically interlaced!?
-
replied to Foone🏳️⚧️ last edited by
It loads the half-width version, then a few functions later, it's been replaced with a full-width version.
Strange! -
replied to Foone🏳️⚧️ last edited by
wait no, the colors are wrong... I bet I'm seeing it decompress the binary, but that's using the full width of the bytes. it then gets expanded out to a 16-color image.
-
replied to Foone🏳️⚧️ last edited by
well the good news is that I think I've found the decompress_image function. the bad news is that now I have to reverse engineer it
-
replied to Foone🏳️⚧️ last edited by
it's currently doing the obvious thing for a decompressor to do:
write the byte 04 every 69 bytes -
replied to Foone🏳️⚧️ last edited by
oh sweet jesus, that's the left two pixels of the image.
it's loading the image vertically!at least it's top to bottom.
-
replied to Foone🏳️⚧️ last edited by
yeah, doom did that too, but Doom was a 2.5D image that had to do pseudo-raycasting.
THIS GAME DOES NOT
-
replied to Foone🏳️⚧️ last edited by
@foone it's the most efficient way to render images in planar EGA/VGA video modes. So clearly that's what you need to use for a game that's mostly static screens
-
replied to Niko (lethal_guitar) last edited by
@lethal_guitar yeah. I guess it's faster to draw, but given that it's static scenes... The disk access is gonna take longer!
-
replied to Foone🏳️⚧️ last edited by
it allocates a 1024 byte buffer, then makes a pointer to the end of it, minus -0x42?
why would you need a link to the end of a new, freshly cleared buffer, minus 62?
-
replied to Foone🏳️⚧️ last edited by
I think the memory allocation system here is that every malloc returns 2 extra bytes, which is a pointer to the previous block.
unless it's an odd number, in which case it's a free block. and pointer to the previous block, once you make it even again -
replied to Foone🏳️⚧️ last edited by
I hate dealing with the internals of memory allocation systems. I prefer to leave that to smarter people than me
-
replied to Foone🏳️⚧️ last edited by
You see this little About dialog box? Guess how many times the DrawText function is called?
Once! and just to draw "Where in the World is Carmen Sandiego?".
The rest of the text is draw elsewhere, and I have no idea why. -
replied to Foone🏳️⚧️ last edited by
correction: it calls it once to draw "Where in the World is Carmen Sandiego?" but that's unrelated to the one on screen WHAT?
-
replied to Foone🏳️⚧️ last edited by
Ahh, it's using a different version of the DrawFont call: DrawFontN
-
replied to Foone🏳️⚧️ last edited by
the only problem with using Ghidra to hack children's games instead of, like, Serious Things like firmwares or malware or whatever, is sometimes you have to make a label named NUM_MOUNTAIN_CLIMBING_HINTS
-
replied to Foone🏳️⚧️ last edited by
(the number of mountain climbing hints is 3, by the way)
-
replied to Foone🏳️⚧️ last edited by
I think I accidentally hacked my debugger