I have a friend named Andrew Jenner. If you’re intimately familiar with PC retrocomputing, you may remember him as the person who thought it would be a good idea to remaster an old game called Digger so that it could be recompiled for modern machines/languages/operating systems. Meaning: He took the original game binary, used DEBUG.COM to dump sections of it out as partially-assembled assembler source, and examined and tweaked it over several months until it could compile back into the original. Then he translated that into C. Then he made the C portable. Then he made the C portable across operating systems. Then he switched out the graphics for higher-resolution ones. The end result is that you can now play this ancient game perfectly on any operating system, even in a Java VM. His actions inspired similar projects by other people, like The Jumpman Project and The Beyond Castle Wolfenstein Project. So that’s what Andrew does for fun. At least, that’s one of the things he does for fun, when he’s not building new electronic music toys for his children, or writing a cycle-exact 8088 emulator, or just generally visiting every single hackerspace in a 200-mile radius to kick down the door and show them who’s boss.
He wrote me recently to let me know he had purchased an XT to do some democoding on it, a shared passion of ours. It came with a monochrome card, but he lacked a suitable monitor; it also lacked a keyboard, and a working disk drive. Did that stop him from using it? Hell no, this is Andrew Fucking Jenner! Step aside, son:
I ordered a CGA card but decided to see if I could jerry-rig something up in the meantime. I programmed my Arduino to pretend to be an XT keyboard and also the “manufacturing test device” that IBM used in their factories to load code onto the machine during early stage POST (it works by returning 65H instead of AAH in response to a keyboard reset). I then used this to reprogram the CRTC of the MDA to CGA frequencies (113 characters of 9 pixels at 16MHz pixel clock for 18 rows (14 displayed) of 14-scanline characters plus an extra 10 scanlines for a total of 262 scanlines). The sources for this are on github.
I had to re-read that a few times to make sure I wasn’t having a seizure. Let’s confirm what happened:
- With no input device or working disk drive, he still managed to load code by reprogramming a microcontroller to emulate a long-forgotten IBM diagnostic protocol, formerly used only in factories by test devices to QA units before they went out the door.
- The code he loaded was to force a monochrome card to output NTSC signals, so that could be connected to a TV. Not dramatic enough for you? How about this: He forced a monochrome card to behave like a color card.
- He made the schematic and source code available, because that’s the kind of guy he is.
You don’t mess with Jenner. You do read his blog, however.