January 28, 2013
I went through a nostalgic streak in the last few months and wrote an emulator for my first computer, a TRS-80 Model III. I wrote the emulator in Go, which turned out to be a great language to write an emulator in.
The emulator supports keyboard, screen, read-only floppy, and read-only cassette. I wrote a Z80 emulator, but later replaced it with Andrea Fazzi's Z80 library because his runs faster and is slightly more accurate in its instruction timing.
I still have cassettes from my early days. It was lovely to import those to a WAV file using my PC and then run the programs on my emulator. I was a bit surprised how bad my code was even two years after I had started coding, but I had nice splash screens:
One of the innovative aspects of the emulator is that the interface is entirely through a web browser. The web page is served by the emulator and communicates with it using web sockets. The page shows the computer's screen and a few buttons for booting and resetting the computer and changing the contents of the floppy drives and cassette recorder. This is only possible because the Model III had no graphics mode. I only need to send characters over a web socket.
The code and build instructions are on GitHub: TRS-80 Model III Emulator.