Pobtastic / Skoolkit / What Next?

Created Tue, 19 Aug 2025 12:30:50 +0000 Modified Wed, 20 Aug 2025 22:05:19 +0000
449 Words 3 min

Sudoku-ish

Maybe this is a bad analogy, but the rest of the disassembly work is kind of like “Sudoku” (to me anyway!) You find a routine, it seems to reference some data - just go ahead and label it now. If you’re wrong about what it does, you can just change it later. It’s like how in Sudoku, you pencil in a number to check out if it’ll “work” and then erase it when you can confirm it. It’s only when you’re sure that you write the number out in pen.

Other Tricks

Find Strings

Most often, unless it’s an adventure game where compression has been used, text data is just stored as ASCII. You can easily just output all the addresses/ hex/ ASCII with either SkoolKit or in an emulator - and then write it all out in the disassembly.

I try to do this early on, mainly as … once you have the addresses for text messaging you gain some very important context. If you see a routine point to text data which says “DEFINE KEYS” well, you already then know what the routine is doing so you can go ahead and label it.

The way text data sits in data can vary quite a lot, sometimes the calling routine knows the length of the string in advance, sometimes the string data is terminated with $FF and sometimes, bit 7 is set (+$80) to indicate the last character in a string has been reached.

Search For POKEs!

For much of the early parts of writing a disassembly, you’ll be desperately trying to find “context” - of both data and routines. For most games, certainly popular ones, there will be POKEs published for them. They’re not always 100% helpful, but at least you’ll get some context when you find a POKE for say, “infinite lives” or “collect less objects” etc. This will instantly unlock a whole set of context around a certain routine being called, or when data at a certain address is changed and for what it represents in the game.

Use An Emulator

I’m a big fan of the debug version of Retro Virtual Machine (v2.0.0), it massively helps to be able to set a breakpoint and then step through the code. It allows you to skip over entire subroutines too (which is handy if you already know what something does!)

The other thing which it makes easy, is POKE-ing - i.e. changing data in RAM on-the-fly, to see what’ll happen. If you strongly believe that you’ve worked out that a byte represents something - there’s an easy way to prove it! Change it in the game and see that it has the effect you’re expecting!