davidb wrote:I thought you were more focused on hardware projects. Should we expect a Midge processor in an FPGA at some point?

I like a lot of things

Still meaning to do a CPLD expansion for the 1MHz bus, so I can do a fast serial port / SD card interface like what I have hacked together using one of my Elk PiTubeDirect cartridges, but otherwise I'm taking a break from hardware for now, to indulge my current obsession with decoding the runtime for this adventure game that I loved as a kid.
Some notes so far on VoLS:
V1E (&B00-10CF) is the runtime; this is all assembly code. It loads instructions from a table starting at &10D4 (inside V2E, which is loaded at &10D0) and executes them. The instruction code is in bits 7-4 of the first byte, and the rest is instruction-dependent. Instructions are 1-3 bytes long (there's a lookup table to get the instruction length at &0F09), and the address of the code to handle each instruction comes from two tables: low bytes at &0F19 and high bytes at &0F29. Instruction B0 just calls JSR with the address in the next two bytes, and B1 is an indirect JSR -- it looks up the target address from the location in the next two bytes. 90 and 98 are relative jumps. Everything else is complicated. I'm slowly digging through it all to figure out what it does -- there's some weird CRC-like calculations going on (perhaps decompression?) and tons of table lookups.
I'm guessing that V2E is all bytecode and V3E is the actual adventure data. V4E is something I don't understand yet.