April Fools’ Day may have passed, but we really had to check the calendar on this hack. [Damian Peckett] has implemented an Apple ][, its 6502 processor, and a cassette port, all on an Arduino Uno. If that wasn’t enough, he also uses a PS/2 keyboard for input and outputs analog VGA. [Damian] is doing all this with very few additional components. A couple of resistors, a capacitor and some very clever hacking were all [Damian] needed to convince an Arduino Uno that it was an Apple.
Making all this work boiled down to a case of resource management. The original Apple ][ had 4KB of RAM and 8KB of ROM. The ATmega328 has only 2KB of RAM, but 32KB of Flash. The only way to make this hack work would be to keep as much of the emulation and other routines in Flash, using as little RAM as possible.
The core of this hack starts with the MOS 6502, the processor used in the Apple. [Damian] wrote a simple assembler which translates the 6502 opcodes and address modes to instructions which can be executed by the Arduino’s ATmega328. To keep everything in ROM and make the emulator portable, [Damian] used two large switch statements. One for address modes, and a 352 line switch statement for the opcodes themselves.
A CPU alone is not an Apple though. [Damian] still needed input, output, and the ROM which made the Apple so special. Input was through a PS/2 keyboard. The PS/2 synchronous serial clock is easy to interface with an Arduino. Output was through a custom VGA implementation, which is a hack all its own. [Damian] used the lowly ATmega16u2 to generate the video timing. The 16u2 is normally used as the Arduino Uno’s USB interface. The only external hardware needed is a single 120 ohm resistor.
The original Apples had cassette and speaker interfaces. So does this emulated Apple. [Woz’s] original cassette and speaker interface accurate loops to generate and measure frequencies. One of the trade-offs [Damian] accepted in his 6502 was cycle accuracy, so he couldn’t use the original routines. Not a problem though, as he was able to write simple functions to replace these routines and drop them in place of the Apple’s own ROM calls.
The Apple ][ ROM itself is handled as one giant character array. This includes the system monitor, Mini-Assembler, Sweet-16, and [Woz’s] own Integer Basic. [Damian] caps off this incredible project by booting his new computer, loading a Mandelbrot set program from cassette -or in this case an audio file stored on his cell phone, and running it. The well-known fractal is displayed in all its glory on a modern LCD monitor, driven by a microcontroller, emulating a computer from nearly 40 years ago.




[Dirk] has some great documentation to go with his computer. He started with a classic MOS 6502 processor. He surrounded the processor with a number of support chips correct for the early 80’s period. RAM is easy-to -use static RAM, while ROM is handled by UV erasable EPROM. A pair of MOS 6522 Versatile Interface Adapter (VIA) chips connect the keyboard, LCD, and any other peripherals to the CPU. Sound is of course provided by the 6581 SID chip. All this made for a heck of a lot of wires when built up on a breadboard. The only thing missing from this build is a way to store software written on the machine. [Dirk] already is looking into ways to add an SD card interface to the machine.
The home building didn’t stop there though. [Dirk] designed and etched his own printed circuit board (PCB) for his computer. DIY PCBs with surface mount components are easy these days, but things are a heck of a lot harder with older through hole components. Every through hole pin and via had to be drilled, and soldered to the top and bottom layers of the board. Not to mention the fact that both layers had to line up perfectly to avoid missing holes! To say this was a lot of work would be an understatement.
[Dirk] designed a custom 3D printed case for his computer and printed it out on his Ultimaker. To make things fit, he created his design in halves, and glued the case once printing was complete.
