A PDP-8 in your browser

Folke Will has written SoCDP-8, an in-browser emulator of the PDP-8, with an assembler for writing short programs, and a functional front panel - also an emulated teletype, in case you want more I/O than just blinking lights. And tape, paper tape, and disk.

There seems to be a promise that you can run OS/8 on this although I’m not quite sure what the procedure is.

In the same post, an offer of an assembler for bigger projects:

In case you need a quick development cycle, I developed a new PDP-8 assembler called Yamas that is completely compatible to PAL-8 and MACRO8: GitHub - fpw/yamas: Yamas: Yet Another Macro Assembler (for the PDP-8)

(From the PiDP-8 mail list)

5 Likes

Looks very neat and well made!

Something I’ve been wondering, regarding emulated blinken-lights: is it more common to sample the current state at display update, or is this rather “true” down sampling to the update frequency?

(E.g., if the emulated machine is running at 500Hz and I’m displaying at 60Hz, there is a huge chance of missing activity. With down sampling, If a light is on 3 times during a display interval – 1 display update at every 8.3 emulation frames in our example – , this would give you 0.36 illumination…)

I haven’t found a manual and it’s unclear what format files have to be (upload dump).
I tried a bin and bn file, working on other emulators.
Toggled in the start address of 200. Load ADDR and start.
I tried the bin loader via load snippet (start 7777). And load a paper tape file.
There’s an ASCII title displayed in the paper tape row, I haven’t seen before.

Blinkenlights, but I never have any text output.

There are OS/8 loaders in the snippets, one must have disks in RF08 or DECTape format and toggle the start address.

I think Hi-Speed papertape readers have a different address.

Or does it only work with an FPGA?
" The project currently only targets the Zynq board".
Or does it need a terminal window?

The simple blinker code seems to work.
I also will check Yamas.

I’ve tested a lot and I got OS/8 working.

Probably the best source of OS/8 is this, has images and can also show and download individual files

http://www.pdp8online.com/images/images/misc_dectapes.shtml

1st file is a bootable OS/8 DECTape image.
Upload file to TC08 image 0.
Load snippet TC08 os/8 loader, toggle 7613 in the switch register (left to start switch 111110001011, 1=up)
push load adress and start.
The DECTape should also show the tape and select should be yellow. Maybe load again the snippet.
In the PT08 window I’ve chosen 19200 Baud and VT100 style.
The promt (.) appears. type DIR and it shows the directory.

It’s a bit slow.
Disk files have a limit. I tried to upload advent.rk05 (3.2 MB). The limit is 524K

1 Like

Well done! (Somewhere nearby I saw a cylon display program - massively simpler than an OS but pretty!)

It’s a bit slow.
Disk files have a limit. I tried to upload advent.rk05 (3.2 MB). The limit is 524K

The game is really slow.
SBC6120 PDP8 / IDE drive, I had once,
I wonder how quick the PDP 10 Version is?
Ben.
As off topic, Steam has graphic version of this adventure.
“Colossal Cave Adventure” version #2

The edited cylon program (src) I found on this Google PIDP8 group (I haven’t found the original cylon.pal or script but I think these need to be run under OS/8)
https://groups.google.com/g/pidp-8/c/IMgDRRcnVwU/m/hw7vQ0-zAgAJ

Another cylon program is here
https://www.cs.drexel.edu/~bls96/museum/pdp8.html
But there are many test programs, one is even included in the snippets.

BTW The emulator doesn’t work in private browsing.
I don’t like it. It’s for those who like it very close to the original or need switch registers or LEDs. I prefer modern ones with debugging, memory display etc. and without limits like SIMH. Who wants both, there’s the Mac emu. Or the online aconit emu (latter one still missing disk units).

I still don’t know why the papertape doesn’t work. I rarely use the switch registers, RIM/BIN loaders etc. as modern emulators has them built in.
Most DEC software had manuals like when to push what switch and especially the start address. I think the BIN loader has to be first loaded by a RIM loader? (I had a thread: a loader that loads a loader…)

Yamas doesn’t work. I had a java script syntax error: Unexpected token ‘.’ (?.). Might work somehow in HTML but not in js.

1 Like

Here is my own Larson scanner for anyone who wants to try it - it’s not too hard to type in the octal:

https://unicorn.drogon.net/larson.pal

and

https://unicorn.drogon.net/larson.lst.txt

Demonstration of it running on a PDP-8/f vs. my PiDP8

I wrote my own PDP-8 emulator for the PiDP8 system - made it as cycle accurate as I could on a Pi Zero @ 1GHz then added in the “ILS” or Incandescent Lamp Simulator which everyone was seemingly after.

One day I’ll find the time & energy to tidy it all up and release it, but not today.

-Gordon

1 Like

No rush, real PDP 8 hardware is still around.
Intersil IM6100’s can still be found on ebay, not as cheap as PI however.

Which is for some modern Web APIs not being available in private mode (and no fallback solution being implemented).

Regarding RIM and BIN loaders: I see these often used ambiguously and/or synonymously.
I’m personally more familiar with the earlier PDP-1, which has an actual RIM mode. This “Read Into Memory” mode runs automatically and reads alternating instructions from paper tape for setting addresses and loading values into these locations, until a jump instruction is encountered, to which the control is transferred, thus exiting RIM mode. As may be seen, this is a very basic and slow routine. This is, where BIN loaders for reading blocks of binary payloads and check sums come in. The one used by DEC seems to have originated on the TX/0 (but I wouldn’t be surprised if there had been prehistory on Whirlwind.) The important difference is that RIM mode is implemented in hardware and a binary loader is yet another program (usually located at the very top of the core memory, where it may survive multiple loading and start cycles, as programs tend to respectfully stay away from this memory region, if possible).

To provide a little variety, binary images of programs using the standard binary loader are found both with “.rim” and “.bin” extensions, while being the same thing. This is really, because these tapes usually start with the binary loader and are to be loaded using RIM mode (which is a hardware console switch) – and probably also, where the confusion arises from. And much of this carries over to later DEC models.

The PDP-8 doesn’t have a RIM mode in the strict sense, which is also the great hour of the toggle switches for toggling in the binary loader, with the operator featuring as RIM mode.
So, on a PDP-8 RIM and BIN loaders should be the same thing.
However, there may be cases, where the usual binary loader may be used to load an even more sophisticated loader, as there’s never a definitive end to this.
(Notably, there are also variants of the standard BIN loader, depending on the kind of media used to read the program from.)

1 Like

Not a RIM mode as such, but the RIM loader is built-in - It was printed on the front panel for you to key into your fresh PDP-8… In the image above, see the list of octal numbers to the left - that’s the RIM loader…

In a lot of cases as it was core memory it would stay there for life - of-course some programs would crash and scramble core then you’d need to key it in again and in the day memorising those instructions wasn’t hard. The BIN loader was much longer and no-one really wanted to key it in, so keying in RIM, then running that to load BIN was a thing, and again, unless your application really needed all the RAM then the BIN loader would often stay in core for a long time.

I owned a PDP-8/a for a while and used it to test my emulated PDP-8/i on the PiDP8 hardware, although the 8a has a keypad rather than toggle switches it was still a nice taste of the past and with real core memory power cycling it wasn’t an issue - the RIM loader was there time after time…

(It also had a ROM with the loader but for fun times I disabled it)

-Gordon

2 Likes

@drogon You’re right, the loader on the front panel is actually just the equivalent of the hardware RIM mode of the PDP-1. So the operations are much the same as described for the PDP-1.

I was somehow under the impression that this is already the BIN loader. What contributed to this is the program lengths: on the PDP-1, the BIN loader is just 21 instructions long, while the RIM loader on the PDP-8 is already 16, and the BIN loader on the PDP-8 is much more complex, coping with data and instruction fields, etc.

PS, if interested in the details, the various versions of the PDP-8 loaders (and notes on their operation) can be found here: https://bitsavers.org/pdf/dec/pdp8/software/DEC-8I-RZPA-D_cmnUsedRtn_71.pdf

And, if really, really interested, the PDP-1 BIN loader can be found here: https://masswerk.at/spacewar/inside/insidespacewar-spacewar2bsa5.html#loader

1 Like

There are different RIM, BIN and HELP loaders. And each for Low-Speed and High Speed Readers (different addresses). Low-Speed readers and Help reader missing in that manual.

http://bitsavers.trailing-edge.com/pdf/dec/pdp8/software/DEC-08-NGCC-D_PaperTapeSW.pdf

Yes, they might kept in memory, but in our cases the memory is empty.

The later CMOS models don’t have them as they don’t have a switch register.
The emulator missing a low-speed reader.
And usually emulators have them implemented.
But I think usually most tapes were in BIN format. But I think you always need the RIM loader first.
Maybe most using OS/8 disk or magnetic tape images and not paper tapes.

Here’s a direct comparison. Paper tapes can also be in ASCII.