For demo, a "Hello world" program was written in MACRO-11 and assembled. The listing contains the memory dump (click to enlarge):
When started, the program prints the "Hello..." text on serial console, then wait for a key press, then print the text again and so on.
It is position-independent and occupies 26 words, so we need two ROM pages.
Working with some form of "syntax highlighting", the bit matrix shows
- opcodes in white
- branch opcodes in yellow
- constant data in green
- 8-bit data on upper half of a 16 bit word in blue
This helps to sync jumper bit arrays and MACRO-11 listing file.
Page 0 has words 000 to 036:
Page 1 has words 040 to 076:
The Human Chip Programmer
We have 162 "One"-bits in the ROM. Setting this amount of jumpers by hand is tedious ... you understand why we have electronic chip programmers today. But I think core rope programming was worse.
Running programs from Diode ROM
The ROM base address can be set to any place in the UNIBUS/QBUS IO-Page, this is octal:
- 760000 for all UNIBUS machines,
- 160000 for 16bit LSI11/03,
- 760000 for 18bit 11/23,
- 17760000 for 22bit 11/23+, or /53,/73,/83,/93
The ROM occupies 64 words with relative addresses 000..176. So address selection works in multiples of octal 200 .
You can EXAM memory content, as well as run programs from the ROM.
And you can change bit jumpers at *any* time, changing "memory content" jumpers even for running programs.
That's DMA as it should be!
To execute the program on a QBUS PDP-11/23:
PDP-11/23 is a 18-bit machine, so the start sequence is:
Set HALT, release HALT, then at the ODT console do
To execute the program in single-step mode, you set HALT, then
Watch the data accesses to ROM via LEDs. They are in sync with ODT display.
Interestingly, this works not well on later PDP-11s with a J-11-based CPU board.
- the J-11 is optimizing. You can see it prefetching already the next memory word while decoding the current opcode. This disturbes the display.
- high-end PDP-11 CPUs (also like 11/44 or 11/70) have an onboard cache. So after the first loop, the CPU does not fetching data from ROM any more, because all code and text is already loaded into cache. The ROM displays seems stuck.