Saturday, April 27, 2024

Virtualizing the 6502 on a 6502 with 6o6 (and The Incredible KIMplement goes 1.0)

Okay, promises, promises. Here's the first of my bucket list projects I'm completing which I've intermittently worked on for literally two decades. Now that I've finally shaken out more bugs, tuned it up and cleaned it off, it's time to let people play with the source code.
This is the official 1.0 release of the Incredible KIMplement, an emulator of the one kilobyte, 1MHz MOS/Commodore KIM-1 6502-based single board computer. It provides access to the KIM's built-in TTY support (even through your computer's real serial port) and has expanded RAM with 16K of addressing space, all on an unexpanded stock Commodore 64.

It's almost burying the lede to announce that, though, because the real meat in this entry is how the Commodore 64 manages to emulate a very different 6502-based system. That piece is "6o6," for "6502-on-6502," and is a full virtualized software NMOS 6502 CPU that runs on a 6502 CPU — which I've open-sourced too. It has full control of guest code execution, including trapping undocumented and jam opcodes, and completely abstracts all memory access, making it possible to remap addresses, intercept illegal reads or writes, or even run entirely from virtual memory. On top of that, it's complete enough to not only pass a full functional test but also virtualize itself virtualizing itself:

These GIF screencasts are real-time with no tricks. Here a Commodore 64 and Apple IIe are both running a guest "hello world" payload within 6o6 (stage 1), which is nearly instantaneous, then 6o6 running the payload as a payload within another instance of 6o6 (stage 2), which is a little slower, then 6o6 running 6o6 running 6o6 running the payload (stage 3), which is glacial. But all of it works!

Friday, April 19, 2024

So long, Z80

You can still buy 6502s from Western Design Center and others, but Zilog's getting out of Z80s (PDF), announcing earlier this week that after June 14th you won't be able to buy them anymore (specifically the last-part-standing Z84C00 which comes in various speeds from 6-20 MHz) and what you buy you can't return. This covers the Z84C0006VEG, Z84C0006PEG, Z84C0010PEG, Z84C0008AEG, Z84C0020VEG, Z84C0008PEG, Z84C0010AEG, Z84C0008VEG, Z84C0010VEG, Z84C0010VEG00TR (!), Z84C0020AEG, Z84C0020PEG, and Z84C0006AEG. Get 'em while they're hot. The Z180 and eZ80 are not affected by this announcement.