PDP-1 Character Display routine, 1964

Ref: https://archive.computerhistory.org/resources/text/DEC/pdp-1/DEC.pdp_1.102636251.pdf

Note: Lower and upper case!

 

Source Code

This is an entire screen editing system including a pointer (=>).
Instruction “adm” and the note "XR lost" indicate PDP-1X.

MIT Macro assembler.
(An opening brace denotes a constant expression, a memory location will be assigned by the assembler.)

Annotations in italics reproduce notes in handwriting.
"(???)" marks lines with what should be illegal code. (Probably PDP-1X specific extensions.)

/character display

cd,     0
        and (77
        sal 1
        add cds
        dap cd4-1
        cla
        dap cd6 2
        law cd5-1
        dap cd4
        xct cd4-1
        spa
        jmp c9d
cd1,    and (376000
        TAXA            /(???) "CAxA"
        lio cdy
cd2,    A+XX            /(???) "A+XX>"
        jmp cd3
        lac cdx
        dpy-i 200
cd3,    law 1000
        A+II            /(???) "ral 8s" (to be inserted below)
        lac (376000
        A⋀XXA=          /(???)
        jmp cd2
        law 1000
        adm cdx
        idx cd4
        lac .
cd4,    xct.
        jmp cd1
        idx cd4-1
        xct cd4-1
        rcr 4s
        jmp cd1

cd5,    ral 7s
        TAI|            /(???)
        ral 3s
        rar 8s
        jmp cd6

cd6,    law 2000
        adm cdx
        law .
        adm cdy
        jmp i cd

cd7,    lac (77777      /tab
        ior cdx
        add (7001
        dac cdx
        jmp i cd

cdc,    ZAP             /lower case  (???)
        law 200         /upper case
        add (cd9
        dac cds
        jmp i cd


cds,    cd9
cdx,    507000
cdy,    300000

c9d,    sas (add
        jmp c8d
        idx cd4-1
        dap . 1
        jmp .

c8d,    law 3000
        dap cd6 2
        cma
        adm cdy
        xct cd4-1
        jmp cd1

cd8,    lac (-14000     /c.r.
        adm cdy
        lac (507000
        dac cdx
        jmp i cd

ini,    lac (300000     /16 - initialize
        dac cdy
        jmp cd8+2


cd9,    0               0               /space
        27              740000          /1
        305214          462306          /2
        105014          462266          /3
        36100           437610          /4
        137114          462261          /5
        175114          462262          /6
        3610            441203          /7
        155114          462266          /8
        15114           452236          /9
        add             jmp i cd
        add             jmp i cd        /stop
        51253           305010          /pointer (=>)
        add             jmp i cd
        add             jmp ini         /initialize
        add             jmp i cd

        175014          60276           /0
        100200          401002          / /
        221245          211000          /s
        10764           211000          /t
        171004          37000           /u
        70404           10034           /v
        171003          20074           /w
        210501          12104           /x
        417104          417600          /y
        211445          223104          /z
        add             jmp i cd
        500200          0               /,
        add             jmp i cd
        add             jmp i cd
        add             jmp cd7         /tab
        add             jmp i cd

        0               400000          /·
        501004          217200          /j
        376202          421000          /k
        1774            0               /l
        370047          401170          /m
        370040          236000          /n
        161044          216000          /o
        776110          441400          /p
        414110          477640          /q
        370040          202000          /r
        add             jmp i cd
        add             jmp i cd
        20100           402010          /-
        1012            107000          /)
        2010            40201           /¯
        342             120200          /(

        add             jmp i cd
        161044          237100          /a
        377104          414000          /b
        161044          212000          /c
        161044          237600          /d
        161245          226000          /e
        21760           440400          /f
        415114          457600          /g
        376100          434000          /h
        7               500000          /i
        add             jmp cdc
        4               0               /.
        add             jmp cdc 1
        add             jmp i cd
        add             jmp i cd
        add             jmp cd8

        0               0               /space
        30              600             /"
        0               140000          /'
        4010            40401           /~
        104422          110434          /⊃
        70402           10034           /∨
        70020           100434          /∧
        20242           120200          /<
        1012            105010          />
        10027           740404          /↑
        add             jmp i cd
        add             jmp i cd        /stop
        51253           305010          /pointer (=>)
        add             jmp i cd
        add             jmp ini         /initialize
        add             jmp i cd
        20102           507010          /→
        4015            42206           /?
        115114          462262          /S
        2017            740201          /T
        177004          20077           /U
        76404           10037           /V
        177003          20077           /W
        306240          405143          /X
        6047            401003          /Y
        303214          461303          /Z
        add             jmp i cd
        50241           205024          /=
        add             jmp i cd
        add             jmp i cd
        add             jmp cd7         /tab
        add             jmp i cd

        601004          20100           /_
        101004          20077           /J
        376101          210501          /K
        377004          20100           /L
        376020          200577          /M
        376040          404177          /N
        175014          60276           /O
        376110          442206          /P
        175015          50336           /Q
        376111          452306          /R
        add             jmp i cd
        add             jmp i cd
        20103           702010          /+
        1014            77600           /]
        7               740000          /|
        1774            60200           /[

        add             jmp i cd
        370221          44574           /A
        377114          462266          /B
        175014          60242           /C
        377014          60276           /D
        377114          462301          /E
        376110          442201          /F
        175015          64262           /G
        376100          402177          /H
        1017            760200          /I
        add             jmp cdc
        104240          405042          /×
        add             jmp cdc 1
        add             jmp i cd
        add             jmp i cd
        add             jmp cd8

variab
consta
start


///// handwritten annotation

Upper and lower case character display
jda cd, character in AC[12-17]  AC, IO, XR lost
16: reset pointer to upper left corner of scope
14: pointer ( => )

codeword format:

        L7  : L14 | R3  : R10 : R17
        ...........................
        L6  : L13 | R7  : R9  : R16
        ...........................
        L5  : L12 | R1  : R8  : R15
        ...........................
        L4  : L11 | R0  : R7  : R14
        ..........-------..........
        L3  : L10 : L17 | R6  : R13
        ...........................
        L2  : L9  : L16 | R5  : R12
        ...........................
        L1  : L8  : L15 | R4  : R11
        

        L0: move character down 3 points (should be: 2 points)