Thursday, May 30, 2013

Imlac Emulator Progress

I have a bit of downtime from Imlac repair while I wait for parts to arrive for the extender boards, so I've been spending time this week working on the Imlac emulator.  I started this just a bit over a month ago and I've been making slow and steady progress since then. I've based the entire implementation on the documentation sets available on Bitsavers and Tom Uban's site; in particular the "PDS-1D Programming Guide" and the "PDS-1 Technical Manual."  The Imlac has a nice, simple instruction set (both for the main and display processors) and the documentation is quite good, there are very few ambiguities to deal with.
The emulator says "Hi" for the first time

The first "real" program I got it to run (a few weeks back) was the sample program described in the Technical Manual (p. 70 of the PDF), this draws "HELLO" in block letters on the screen and I've been spending my limited spare time working on it ever since. 

At the moment, the emulator (tentatively called "sImlac" because why not) implements the following:
  • PDS-1/1D Data and Display Processor emulation
  • 8KW of Core memory, with 8KW display processor modifications
  • Vector display support (with slow phosphor simulation because I'm a nerd that way)
  • Keyboard emulation
  • Basic PTR-1 (Paper Tape Reader) and TTY-1 (RS232 serial) support, using files on disk as a data source.  (No transmit support for TTY)
  • Interrupt support
  • LVH-1 (Long vector) support
  • SGR-1 (Suppressed Grid) support
  • MDS-1 (Multiply-nested Display Subroutine) support
 I'm gearing up for an initial release, but I have a few bugs I'd like to track down before then.  I thought I'd share a few screenshots since it's now capable of running a bit of actual software.  All of this software is from Tom Uban's archive.  It's thanks to him that there's any software at all that survived!  (Sorry the shots are so indistinct in their thumbnail modes, the vectors don't show up all that well -- click on them to embiggen.)

"Apollo," AKA "Lunar Lander"
The shot above shows "Apollo" ("newapollo" from the archive) running; this is a simple variation of Lunar Lander which also happens to be incredibly difficult since the rate at which the thrust can be changed is very slow.  Not sure if this is intentional or just a bug in the emulator, but at the moment this game's not particularly fun.
How about a nice game of checkers?
Above is "check" a simple Checkers game that pits the player against a computer opponent.  (Or you can have the computer play itself.)  At the moment it's not rendering quite right, as you can see, but it's very reassuring, telling me that I'm doing OK.  Thanks for the vote of support!


Conway's Game Of Life
Here we have Conway's famous cellular automaton brought to life (as it were) by the Imlac.  Using the arrow keys and the "C" key you can place cells, and then run the automaton using the "R" key.  This seems to be working properly.

Quiche eaters need not apply
And for those times when you need to do some debugging, the above program provides rudimentary disassembly support.

Maze War, sort of.
And Maze War!  Almost.  It's not really working yet, since it wants to talk to a host PDP-10 server to regulate the game.  With a bit of hacking I can get it to show the overhead maze display but it's going to take some extra work to get the game running properly.

I'm hoping to release Version 0.0 sometime in the next week or so (including source).  I'll keep y'all posted.  Until then, don't you go changing!


1 comment: