Computer Graphics on the PDP-1

Leah Neukirchen

blinry’s birthday barcamp 2021

2021-07-07

The DEC Programmable Data Processor-1

  • available as of late 1959, only ~60 were built total
  • 18-bit words, 5MHz clock
  • default memory: 4kw = 9kb

Precision CRT Display Type 30

  • 16-inch random-position, point-plotting cathode ray tube
  • 1024x1024 resolution
  • no frame buffer!
  • single instruction API
dpy  720007  Display One Point

             Clears the light pen status bit and
             displays one point using bits 0
             through 9 of of the AC to represent
             the (signed) X coordinate of the
             point and bits 0 through 9 of the
             IO as the (signed) Y coordinate.
             
             The third lowest nibble (bits 9-11)
             encodes the intensity (brightness)
             in 1's complement, where 3 is the
             brightest, 0 the default intensity,
             and 7 (-0) barely visible.
  • Spacewar! used this display, but we’ll consider a much simpler program

Munching Squares

Demo at Masswerk

The Code: Jackson Wright, 1962

msq, lat           ; Load AC from Test Word switches
     sas msv       ; Skip next instruction if C(AC) = C(Y), msv = 777777
     sza i         ; Skip on ZERO (+0) AC
     law 2345      ; Load the AC with the number N
     add 7         ; Add C(Y) to C(AC)
     dac 7         ; Deposit C(AC) in Y
     rcl 9s        ; Rotate combined AC & IO left  9s = 777
     xor 7         ; Exclusive OR C(Y) with C(AC)
     dpy-i+300     ; Display One Point
     jmp msq       ; Take next instruction from Y
msv, 777777

Later versions for the PDP-10

HAKMEM - Artificial Intelligence Memo No. 239

HAKMEM Item 2:

     DATAI 2
     ADDB 1,2
     ROTC 2,-22
     XOR 1,2
     JRST .-4
HAKMEM Item 3 (Schroeppel):
Munching squares is just views of the graph Y = X XOR T for consecutive values for T = time.

Munching squares in tixy

Munching squares on your Linux computer

% /usr/libexec/xscreensaver/munch

Thank you!

Sources:

// reveal.js plugins