/ ENIGMA M4 IMPLEMENTATION ON PDP-8
/
/ CONFIGURATION IS ALWAYS DONE THROUGH PDP-8 CONTROL PANEL
/ USE EXAMINE/DEPOSIT TO VERIFY/CHANGE ENIGMA MACHINE CONFIG
/ SEE *0020 BELOW FOR MAP OF OPTIONS
/
/ OPERATION (THERE ARE TWO MODES):
/
/ MINICOMPUTER MODE
/ SET PROGRAM COUNTER TO 0600
/ ENTER LETTER TO ENCIPHER IN SWITCH REGISTER
/ PRESS START OR CONT TO RUN
/ RESULT WILL BE DISPLAYED IN THE ACCUMULATOR
/
/ TELETYPE MODE
/ SET PROGRAM COUNTER TO 0200
/ PRESS START OR CONT TO RUN
/ TYPE CHARACTERS ON TELETYPE AND IT WILL TYPE RESULT
/ ONLY UPPERCASE A-Z WILL BE ACCEPTED
/
/ ALL NUMBERS ARE IN OCTAL UNLESS SPECIFIED OTHERWISE
/ (DECIMAL NUMBERS WILL HAVE A D AFTER THEM LIKE 8D)
/
/ LETTER TO VALUE TABLE:
/ A-01 H-10 O-17 V-26
/ B-02 I-11 P-20 W-27
/ C-03 J-12 Q-21 X-30
/ D-04 K-13 R-22 Y-31
/ E-05 L-14 S-23 Z-32
/ F-06 M-15 T-24
/ G-07 N-16 U-25
/
/
/_PAGES_0,1,2________________________________________________________
/AUTOINCREMENTING POINTER
*0010
PTR1, 0
/ENIGMA M4 MACHINE CONFIGURATION
*0020
INDC1, 01 /ADDRESS 0020 : 01-32 (1D-26D)
INDC2, 01 /ADDRESS 0021 : 01-32 (1D-26D)
INDC3, 01 /ADDRESS 0022 : 01-32 (1D-26D)
INDC4, 01 /ADDRESS 0023 : 01-32 (1D-26D)
ROTR1, 1 /ADDRESS 0024 : 1=BETA, 2=GAMMA
ROTR2, 01 /ADDRESS 0025 : 01-10 (1D-8D)
ROTR3, 02 /ADDRESS 0026 : 01-10 (1D-8D)
ROTR4, 03 /ADDRESS 0027 : 01-10 (1D-8D)
RING1, 01 /ADDRESS 0030 : 01-32 (1D-26D)
RING2, 01 /ADDRESS 0031 : 01-32 (1D-26D)
RING3, 01 /ADDRESS 0032 : 01-32 (1D-26D)
RING4, 01 /ADDRESS 0033 : 01-32 (1D-26D)
REFL, 1 /ADDRESS 0034 : 1=REFL B, 2=REFL C
MODE, 2 /ADDRESS 0035 : 1=MINICOMP, 2=TELETYPE
PLUG1, 00;00 /ADDRESS 0036 : 00 OFF, 01-32 (1D-26D)
PLUG2, 00;00 /ADDRESS 0040 : 00 OFF, 01-32 (1D-26D)
PLUG3, 00;00 /ADDRESS 0042 : 00 OFF, 01-32 (1D-26D)
PLUG4, 00;00 /ADDRESS 0044 : 00 OFF, 01-32 (1D-26D)
PLUG5, 00;00 /ADDRESS 0046 : 00 OFF, 01-32 (1D-26D)
PLUG6, 00;00 /ADDRESS 0050 : 00 OFF, 01-32 (1D-26D)
PLUG7, 00;00 /ADDRESS 0052 : 00 OFF, 01-32 (1D-26D)
PLUG8, 00;00 /ADDRESS 0054 : 00 OFF, 01-32 (1D-26D)
PLUG9, 00;00 /ADDRESS 0056 : 00 OFF, 01-32 (1D-26D)
PLUG10, 00;00 /ADDRESS 0060 : 00 OFF, 01-32 (1D-26D)
PLUG11, 00;00 /ADDRESS 0062 : 00 OFF, 01-32 (1D-26D)
PLUG12, 00;00 /ADDRESS 0064 : 00 OFF, 01-32 (1D-26D)
PLUG13, 00;00 /ADDRESS 0066 : 00 OFF, 01-32 (1D-26D)
/PAGE 0 VARIABLES AND CONSTANTS
CHAR, 0 /HOLDS THE CHARACTER
CINDC, 0 /ROTOR PARAMETER
CROTR, 0 /ROTOR PARAMETER
CRING, 0 /ROTOR PARAMETER
C0032, 0032 /26D
/ROTOR DATA (DO NOT MOVE)
*0107
/"EKMFLGDQVZNTOWYHXUSPAIBRCJ"; ROTOR_1M MILITARY 1
SROTR1, 05;13;15;06;14;07;04;21;26;32;16;24;17;
27;31;10;4030;25;23;20;01;11;02;22;03;12;
/"AJDKSIRUXBLHWTMCQGZNPYFVOE"; ROTOR_2M MILITARY 2
SROTR2, 01;12;04;13;4023;11;22;25;30;02;14;10;27;
24;15;03;21;07;32;16;20;31;06;26;17;05;
/"BDFHJLCPRTXVZNYEIWGAKMUSQO"; ROTOR_3M MILITARY 3
SROTR3, 02;04;06;10;12;14;03;20;22;24;30;26;32;
16;31;05;11;27;07;01;13;4015;25;23;21;17;
/"ESOVPZJAYQUIRHXLNFTGKDCMWB"; ROTOR_4M MILITARY 4
SROTR4, 05;23;17;26;20;32;12;01;31;4021;25;11;22;
10;30;14;16;06;24;07;13;04;03;15;27;02;
/"VZBRGITYUPSDNHLXAWMJQOFECK"; ROTOR_5M MILITARY 5
SROTR5, 26;32;02;22;07;11;24;31;25;20;23;04;16;
10;14;30;01;27;15;12;21;17;06;05;03;4013;
/"JPGVOUMFYQBENHZRDKASXLICTW"; ROTOR_6M MILITARY 6
SROTR6, 12;20;07;26;17;25;15;06;31;21;02;05;4016;
10;32;22;04;13;01;23;30;14;11;03;24;4027;
/"NZJHGRCXMYSWBOUFAIVLPEKQDT"; ROTOR_7M MILITARY 7
SROTR7, 16;32;12;10;07;22;03;30;15;31;23;27;4002;
17;25;06;01;11;26;14;20;05;13;21;04;4024;
/"FKQHTLXOCBJSPDZRAMEWNIUYGV"; ROTOR_8M MILITARY 8
SROTR8, 06;13;21;10;24;14;30;17;03;02;12;23;4020;
04;32;22;01;15;05;27;16;11;25;31;07;4026;
/"LEYJVCNIXWPBQMDRTAKZGFUHOS"; ROTOR_BETA MILITARY M4 BETA
SROTB, 14;05;31;12;26;03;16;11;30;27;20;02;21;
15;04;22;24;01;13;32;07;06;25;10;17;23;
/"FSOKANUERHMBTIYCWLQPZXVGJD"; ROTOR_GAMMA MILITARY M4 GAMMA
SROTG, 06;23;17;13;01;16;25;05;22;10;15;02;24;
11;31;03;27;14;21;20;32;30;26;07;12;04;
/"ENKQAUYWJICOPBLMDXZVFTHRGS", ROTOR_REFL4B MILITARY M4 B REFLECTOR
SREFLB, 05;16;13;21;01;25;31;27;12;11;03;17;20;
02;14;15;04;30;32;26;06;24;10;22;07;23;
/"RDOBJNTKVEHMLFCWZAXGYIPSUQ"; ROTOR_REFL4C MILITARY M4 C REFLECTOR
SREFLC, 22;04;17;02;12;16;24;13;26;05;10;15;14;
06;03;27;32;01;30;07;31;11;20;23;25;21;
*0577
STOP, HLT /FOR MINICOMP MODE THIS HALTS LEAVING
/USER AT ENTRY POINT 0600
/
/
/_PAGE_3_____________________________________________________________
*0600
ENTRY, CLA CLL /GET MODE
TAD MODE
TAD C7777 /SUBTRACT 1
SNA /SKIP NEXT INSTRUCTION IF NON ZERO
JMP MINI /JMP TO MINICOMP MODE
TELE, KSF /SKIP IF READER FLAG SET
JMP .-1 /WAIT FOR KEY
KRB /KBD->ACC, CLEAR FLAG
DCA CHAR /STORE CHAR SO WE CAN TEST IT
TAD CHAR /ALLOW ONLY A-Z (65-90)
TAD C7677 /SUBTRACT 65
SPA CLA /SKIP ON PLUS OR ZERO, CLEAR ACC
JMP TELE /LESS THAN 65, SKIP
TAD CHAR /RESTORE CHAR
TAD C7645 /SUBTRACT 91
SMA CLA /SKIP ON MINUS, CLEAR ACC
JMP TELE /MORE THAN 90, SKIP
CLA CLL /IT IS VALID A-Z, RESTORE CHAR
TAD CHAR
TAD C7700 /SUBTRACT 64 SO A=1 (1 BIASED)
JMS CIPHER /CALL CIPHER
TAD C0100 /ADD 64 SO a=65 (65 BIASED)
TSF /SKIP IF PRINT FLAG SET
JMP .-1 /LOOP UNTIL READY
TLS /PRINT
JMP TELE /WAIT FOR NEXT KEY
MINI, LAS /LOAD AC WITH SWITCH REGISTER
JMS CIPHER /CALL CIPHER
JMP I PSTOP /JMP TO STOP FOR HALT
CIPHER, 0 /SUBROUTINE RETURN ADDRESS STORE HERE
DCA CHAR /STORE ACC IN CHAR
PST, JMS I PSTEP /CALL STEP TO STEP THE ROTORS
PL1, JMS I PSPLUG /CALL PLUGBOARD TO SWAP THE LETTERS
F4, TAD INDC4 /SETUP AND CALL FORWARD ROTOR FOR 4
DCA CINDC
TAD ROTR4
DCA CROTR
TAD RING4
DCA CRING
JMS I PFROTOR
F3, TAD INDC3 /SETUP AND CALL FORWARD ROTOR FOR 3
DCA CINDC
TAD ROTR3
DCA CROTR
TAD RING3
DCA CRING
JMS I PFROTOR
F2, TAD INDC2 /SETUP AND CALL FORWARD ROTOR FOR 2
DCA CINDC
TAD ROTR2
DCA CROTR
TAD RING2
DCA CRING
JMS I PFROTOR
F1, TAD INDC1 /SETUP AND CALL FORWARD ROTOR FOR 1
DCA CINDC
TAD ROTR1
TAD C0010 /BETA/GAMMA ACTUALLY AT 9 AND 10 (+8)
DCA CROTR
TAD RING1
DCA CRING
JMS I PFROTOR
FREFL, CLA CLL IAC /LOAD ACC WITH 1
DCA CINDC
TAD REFL
TAD C0012 /REFLECTOR ACTUALLY AT 11 AND 12 (+10)
DCA CROTR
CLA CLL IAC /LOAD ACC WITH 1
DCA CRING
JMS I PFROTOR /CALL REFLECTOR
R1, TAD INDC1 /SETUP AND CALL REVERSE ROTOR FOR 1
DCA CINDC
TAD ROTR1
TAD C0010 /BETA/GAMMA ACTUALLY AT 9 AND 10 (+8)
DCA CROTR
TAD RING1
DCA CRING
JMS I PRROTOR
R2, TAD INDC2 /SETUP AND CALL REVERSE ROTOR FOR 2
DCA CINDC
TAD ROTR2
DCA CROTR
TAD RING2
DCA CRING
JMS I PRROTOR
R3, TAD INDC3 /SETUP AND CALL REVERSE ROTOR FOR 3
DCA CINDC
TAD ROTR3
DCA CROTR
TAD RING3
DCA CRING
JMS I PRROTOR
R4, TAD INDC4 /SETUP AND CALL REVERSE ROTOR FOR 4
DCA CINDC
TAD ROTR4
DCA CROTR
TAD RING4
DCA CRING
JMS I PRROTOR
PL2, JMS I PSPLUG /CALL PLUGBOARD TO SWAP THE LETTERS
STR1, CLA CLL /LOAD CHAR INTO ACC TO RETURN
TAD CHAR
JMP I CIPHER /RETURN FROM SUBROUTINE
/THIS PAGE VARIABLES AND CONSTANTS
C0010, 0010 /8D
C0012, 0012 /10D
C0100, 0100 /64D
C7700, 7700 /-64D
C7645, 7645 /-91D
C7677, 7677 /-65D
C7777, 7777 /-1D
PSTOP, STOP
PSTEP, STEP
PSPLUG, SPLUG
PFROTOR,FROTOR
PRROTOR,RROTOR
/
/
/_PAGE_4_____________________________________________________________
*1000
SPLUG, 0 /SUBROUTINE RETURN ADDRESS STORED HERE
CLA CLL
TAD PPLUG1 /RESET PLUGBOARD POINTER PTR1
DCA PTR1
TAD COUNT /SETUP COUNT AND INDEX FOR LOOP
CIA /NEGATE (INDEX COUNTS UP TO 0)
DCA INDEX1
LOOP, TAD I PTR1 /CHECK PLUGBOARD PAIR FIRST VALUE
SNA /SKIP NEXT INSTRUCTION IF NON ZERO
JMP DSBL /THIS PLUGBOARD PAIR IS DISABLED
CIA /NOT DISABLED, CONTINUE COMPARING TO OUR CHAR
TAD CHAR /ADD CHARACTER, IF IT MATCHES ACC WILL BE 0
SNA /SKIP NEXT INSTRUCTION IF NON ZERO
JMP MATCH1 /MATCH FIRST VALUE IN PAIR
CLA CLL /NOT ZERO, NO MATCH, CLEAR ACC
TAD I PTR1 /GET SECOND PAIR VALUE
CIA /COMPARE IT TO OUR CHARACTER
TAD CHAR
SNA /SKIP NEXT INSTRUCTION IF NON ZERO
JMP MATCH2 /IT IS ZERO, MATCH SECOND VALUE IN PAIR
LOOP2, CLA CLL /NO MATCH THIS PAIR
ISZ INDEX1
JMP LOOP
JMP I SPLUG /RETURN FROM SUBROUTINE
DSBL, TAD I PTR1 /THIS PAIR IS DISABLED, SKIP OTHER HALF
JMP LOOP2
MATCH1, TAD I PTR1 /FIRST WORD MATCHES, OBTAIN OTHER HALF
DCA CHAR
JMP I SPLUG /RETURN FROM SUBROUTINE
MATCH2, CLA CLL CMA RAL /SECOND WORD MATCHES, ACC=7776 (-2)
TAD PTR1 /ADD PTR1 TO ACC
DCA PTR1 /DEPOSIT PTR1-2 TO GET FIRST VALUE
JMP MATCH1
STEP, 0 /SUBROUTINE RETURN ADDRESS STORED HERE
CLA CLL /IS ROTOR3 IN NOTCH?
TAD ROTR3
JMS I PRPTR /SET ROTOR POINTER TO CORRECT ROTOR
TAD INDC3
DCA TEMP1
TAD I TEMP1
AND C4000 /KEEP ONLY NOTCH BIT
SZA /SKIP ON ZERO
JMP STEP3 /YES - 3 RIGHT ROTORS MOVE
TAD ROTR4 /IS ROTOR4 IN NOTCH?
JMS I PRPTR /SET ROTOR POINTER TO CORRECT ROTOR
TAD INDC4
DCA TEMP1
TAD I TEMP1
AND C4000 /KEEP ONLY NOTCH BIT
SZA /SKIP ON ZERO
JMP STEP2 /YES - 2 RIGHT ROTORS MOVE
JMP STEP1 /NO - 1 RIGHT ROTOR MOVES
STEP3, CLA CLL /STEP ROTOR 2
TAD INDC2
IAC
JMS I PRBACK /IF OVERFLOW ROLL IT BACK TO 1
DCA INDC2
/INTENTIONAL LACK OF JMP STEPS REMAINING
STEP2, CLA CLL /STEP ROTOR 3
TAD INDC3
IAC
JMS I PRBACK /IF OVERFLOW ROLL IT BACK TO 1
DCA INDC3
/INTENTIONAL LACK OF JMP STEPS REMAINING
STEP1, CLA CLL /STEP ROTOR 4
TAD INDC4
IAC
JMS I PRBACK /IF OVERFLOW ROLL IT BACK TO 1
DCA INDC4
/INTENTIONAL LACK OF JMP STEPS REMAINING
STEP0, JMP I STEP /RETURN FROM SUBROUTINE
/THIS PAGE VARIABLES AND CONSTANTS
C4000, 4000 /NOTCH BIT IN ROTORS
COUNT, 15 /13D
INDEX1, 0 /0D
PPLUG1, PLUG1-1 /POINTER TO WORD BEFORE PLUGBOARD
TEMP1, 0
PRPTR, RPTR
PRBACK, RBACK
/
/
/_PAGE_5_____________________________________________________________
*1200
FROTOR, 0
TAD CRING /CINDC+26-CRING+CHAR
CIA
TAD CINDC
TAD C0032
TAD CHAR
JMS RBACK
DCA TEMP2
TAD CROTR
JMS RPTR /SET ROTOR POINTER TO CORRECT ROTOR
TAD TEMP2
DCA TEMP2
TAD I TEMP2
AND C0077
CIA
TAD CINDC
CIA
TAD CRING
TAD C0032
JMS RBACK
DCA CHAR
JMP I FROTOR /RETURN FROM SUBROUTINE
RROTOR, 0
DCA TEMP3 /STORE 0
TAD C0032
CIA /NEGATE (INDEX COUNTS UP TO 0)
DCA INDEX2
LOOP3, ISZ TEMP3
TAD CRING /CINDC+26-CRING+CHAR
CIA
TAD CINDC
TAD C0032
TAD TEMP3
JMS RBACK
DCA TEMP2
TAD CROTR
JMS RPTR /SET ROTOR POINTER TO CORRECT ROTOR
TAD TEMP2
DCA TEMP2
TAD I TEMP2
AND C0077
CIA
TAD CINDC
CIA
TAD CRING
TAD C0032
JMS RBACK
CIA /COMPARE BY NEGATING
TAD CHAR /ADD CHARACTER, IF IT MATCHES ACC WILL BE 0
SNA /SKIP NEXT INSTRUCTION IF NON ZERO
JMP MATCH3 /MATCH FIRST VALUE IN PAIR
ISZ INDEX2
CLA CLL
JMP LOOP3
MATCH3, TAD TEMP3
DCA CHAR
JMP I RROTOR /RETURN FROM SUBROUTINE
RPTR, 0 /CALCULATE ROTOR POINTER
CIA
DCA TEMP4
PTRLP, TAD C0032
ISZ TEMP4
JMP PTRLP
TAD C0054
JMP I RPTR /RETURN FROM SUBROUTINE
RBACK, 0 /IF ACC>32, SUBTRACT 32 UNTIL IT IS
RBACK2, DCA TEMP4
TAD TEMP4
TAD C7746
SMA SZA
JMP RBACK2
CLA CLL
TAD TEMP4
JMP I RBACK /RETURN FROM SUBROUTINE
/THIS PAGE VARIABLES AND CONSTANTS
C0054, 0054 /CONSTANT TO GENERATE ROTOR PTR
C0077, 0077 /63D
C7746, 7746 /-26D
TEMP4, 0
INDEX2, 0
TEMP2, 0
TEMP3, 0
$ENTRY
/ ENIGMA M4 IMPLEMENTATION ON PDP-8
/
/ CONFIGURATION IS ALWAYS DONE THROUGH PDP-8 CONTROL PANEL
/ USE EXAMINE/DEPOSIT TO VERIFY/CHANGE ENIGMA MACHINE CONFIG
/ SEE *0020 BELOW FOR MAP OF OPTIONS
/
/ OPERATION (THERE ARE TWO MODES):
/
/ MINICOMPUTER MODE
/ SET PROGRAM COUNTER TO 0600
/ ENTER LETTER TO ENCIPHER IN SWITCH REGISTER
/ PRESS START OR CONT TO RUN
/ RESULT WILL BE DISPLAYED IN THE ACCUMULATOR
/
/ TELETYPE MODE
/ SET PROGRAM COUNTER TO 0200
/ PRESS START OR CONT TO RUN
/ TYPE CHARACTERS ON TELETYPE AND IT WILL TYPE RESULT
/ ONLY UPPERCASE A-Z WILL BE ACCEPTED
/
/ ALL NUMBERS ARE IN OCTAL UNLESS SPECIFIED OTHERWISE
/ (DECIMAL NUMBERS WILL HAVE A D AFTER THEM LIKE 8D)
/
/ LETTER TO VALUE TABLE:
/ A-01 H-10 O-17 V-26
/ B-02 I-11 P-20 W-27
/ C-03 J-12 Q-21 X-30
/ D-04 K-13 R-22 Y-31
/ E-05 L-14 S-23 Z-32
/ F-06 M-15 T-24
/ G-07 N-16 U-25
/
/
/_PAGES_0,1,2________________________________________________________
/AUTOINCREMENTING POINTER
*0010
0010/0000 PTR1, 0
/ENIGMA M4 MACHINE CONFIGURATION
*0020
0020/0001 INDC1, 01 /ADDRESS 0020 : 01-32 (1D-26D)
0021/0001 INDC2, 01 /ADDRESS 0021 : 01-32 (1D-26D)
0022/0001 INDC3, 01 /ADDRESS 0022 : 01-32 (1D-26D)
0023/0001 INDC4, 01 /ADDRESS 0023 : 01-32 (1D-26D)
0024/0001 ROTR1, 1 /ADDRESS 0024 : 1=BETA, 2=GAMMA
0025/0001 ROTR2, 01 /ADDRESS 0025 : 01-10 (1D-8D)
0026/0002 ROTR3, 02 /ADDRESS 0026 : 01-10 (1D-8D)
0027/0003 ROTR4, 03 /ADDRESS 0027 : 01-10 (1D-8D)
0030/0001 RING1, 01 /ADDRESS 0030 : 01-32 (1D-26D)
0031/0001 RING2, 01 /ADDRESS 0031 : 01-32 (1D-26D)
0032/0001 RING3, 01 /ADDRESS 0032 : 01-32 (1D-26D)
0033/0001 RING4, 01 /ADDRESS 0033 : 01-32 (1D-26D)
0034/0001 REFL, 1 /ADDRESS 0034 : 1=REFL B, 2=REFL C
0035/0002 MODE, 2 /ADDRESS 0035 : 1=MINICOMP, 2=TELETYPE
0036/0000 PLUG1, 00;00 /ADDRESS 0036 : 00 OFF, 01-32 (1D-26D)
0037/0000
0040/0000 PLUG2, 00;00 /ADDRESS 0040 : 00 OFF, 01-32 (1D-26D)
0041/0000
0042/0000 PLUG3, 00;00 /ADDRESS 0042 : 00 OFF, 01-32 (1D-26D)
0043/0000
0044/0000 PLUG4, 00;00 /ADDRESS 0044 : 00 OFF, 01-32 (1D-26D)
0045/0000
0046/0000 PLUG5, 00;00 /ADDRESS 0046 : 00 OFF, 01-32 (1D-26D)
0047/0000
0050/0000 PLUG6, 00;00 /ADDRESS 0050 : 00 OFF, 01-32 (1D-26D)
0051/0000
0052/0000 PLUG7, 00;00 /ADDRESS 0052 : 00 OFF, 01-32 (1D-26D)
0053/0000
0054/0000 PLUG8, 00;00 /ADDRESS 0054 : 00 OFF, 01-32 (1D-26D)
0055/0000
0056/0000 PLUG9, 00;00 /ADDRESS 0056 : 00 OFF, 01-32 (1D-26D)
0057/0000
0060/0000 PLUG10, 00;00 /ADDRESS 0060 : 00 OFF, 01-32 (1D-26D)
0061/0000
0062/0000 PLUG11, 00;00 /ADDRESS 0062 : 00 OFF, 01-32 (1D-26D)
0063/0000
0064/0000 PLUG12, 00;00 /ADDRESS 0064 : 00 OFF, 01-32 (1D-26D)
0065/0000
0066/0000 PLUG13, 00;00 /ADDRESS 0066 : 00 OFF, 01-32 (1D-26D)
0067/0000
/PAGE 0 VARIABLES AND CONSTANTS
0070/0000 CHAR, 0 /HOLDS THE CHARACTER
0071/0000 CINDC, 0 /ROTOR PARAMETER
0072/0000 CROTR, 0 /ROTOR PARAMETER
0073/0000 CRING, 0 /ROTOR PARAMETER
0074/0032 C0032, 0032 /26D
/ROTOR DATA (DO NOT MOVE)
*0107
/"EKMFLGDQVZNTOWYHXUSPAIBRCJ"; ROTOR_1M MILITARY 1
0107/0005 SROTR1, 05;13;15;06;14;07;04;21;26;32;16;24;17;
0110/0013
0111/0015
0112/0006
0113/0014
0114/0007
0115/0004
0116/0021
0117/0026
0120/0032
0121/0016
0122/0024
0123/0017
0124/0027 27;31;10;4030;25;23;20;01;11;02;22;03;12;
0125/0031
0126/0010
0127/4030
0130/0025
0131/0023
0132/0020
0133/0001
0134/0011
0135/0002
0136/0022
0137/0003
0140/0012
/"AJDKSIRUXBLHWTMCQGZNPYFVOE"; ROTOR_2M MILITARY 2
0141/0001 SROTR2, 01;12;04;13;4023;11;22;25;30;02;14;10;27;
0142/0012
0143/0004
0144/0013
0145/4023
0146/0011
0147/0022
0150/0025
0151/0030
0152/0002
0153/0014
0154/0010
0155/0027
0156/0024 24;15;03;21;07;32;16;20;31;06;26;17;05;
0157/0015
0160/0003
0161/0021
0162/0007
0163/0032
0164/0016
0165/0020
0166/0031
0167/0006
0170/0026
0171/0017
0172/0005
/"BDFHJLCPRTXVZNYEIWGAKMUSQO"; ROTOR_3M MILITARY 3
0173/0002 SROTR3, 02;04;06;10;12;14;03;20;22;24;30;26;32;
0174/0004
0175/0006
0176/0010
0177/0012
0200/0014
0201/0003
0202/0020
0203/0022
0204/0024
0205/0030
0206/0026
0207/0032
0210/0016 16;31;05;11;27;07;01;13;4015;25;23;21;17;
0211/0031
0212/0005
0213/0011
0214/0027
0215/0007
0216/0001
0217/0013
0220/4015
0221/0025
0222/0023
0223/0021
0224/0017
/"ESOVPZJAYQUIRHXLNFTGKDCMWB"; ROTOR_4M MILITARY 4
0225/0005 SROTR4, 05;23;17;26;20;32;12;01;31;4021;25;11;22;
0226/0023
0227/0017
0230/0026
0231/0020
0232/0032
0233/0012
0234/0001
0235/0031
0236/4021
0237/0025
0240/0011
0241/0022
0242/0010 10;30;14;16;06;24;07;13;04;03;15;27;02;
0243/0030
0244/0014
0245/0016
0246/0006
0247/0024
0250/0007
0251/0013
0252/0004
0253/0003
0254/0015
0255/0027
0256/0002
/"VZBRGITYUPSDNHLXAWMJQOFECK"; ROTOR_5M MILITARY 5
0257/0026 SROTR5, 26;32;02;22;07;11;24;31;25;20;23;04;16;
0260/0032
0261/0002
0262/0022
0263/0007
0264/0011
0265/0024
0266/0031
0267/0025
0270/0020
0271/0023
0272/0004
0273/0016
0274/0010 10;14;30;01;27;15;12;21;17;06;05;03;4013;
0275/0014
0276/0030
0277/0001
0300/0027
0301/0015
0302/0012
0303/0021
0304/0017
0305/0006
0306/0005
0307/0003
0310/4013
/"JPGVOUMFYQBENHZRDKASXLICTW"; ROTOR_6M MILITARY 6
0311/0012 SROTR6, 12;20;07;26;17;25;15;06;31;21;02;05;4016;
0312/0020
0313/0007
0314/0026
0315/0017
0316/0025
0317/0015
0320/0006
0321/0031
0322/0021
0323/0002
0324/0005
0325/4016
0326/0010 10;32;22;04;13;01;23;30;14;11;03;24;4027;
0327/0032
0330/0022
0331/0004
0332/0013
0333/0001
0334/0023
0335/0030
0336/0014
0337/0011
0340/0003
0341/0024
0342/4027
/"NZJHGRCXMYSWBOUFAIVLPEKQDT"; ROTOR_7M MILITARY 7
0343/0016 SROTR7, 16;32;12;10;07;22;03;30;15;31;23;27;4002;
0344/0032
0345/0012
0346/0010
0347/0007
0350/0022
0351/0003
0352/0030
0353/0015
0354/0031
0355/0023
0356/0027
0357/4002
0360/0017 17;25;06;01;11;26;14;20;05;13;21;04;4024;
0361/0025
0362/0006
0363/0001
0364/0011
0365/0026
0366/0014
0367/0020
0370/0005
0371/0013
0372/0021
0373/0004
0374/4024
/"FKQHTLXOCBJSPDZRAMEWNIUYGV"; ROTOR_8M MILITARY 8
0375/0006 SROTR8, 06;13;21;10;24;14;30;17;03;02;12;23;4020;
0376/0013
0377/0021
0400/0010
0401/0024
0402/0014
0403/0030
0404/0017
0405/0003
0406/0002
0407/0012
0410/0023
0411/4020
0412/0004 04;32;22;01;15;05;27;16;11;25;31;07;4026;
0413/0032
0414/0022
0415/0001
0416/0015
0417/0005
0420/0027
0421/0016
0422/0011
0423/0025
0424/0031
0425/0007
0426/4026
/"LEYJVCNIXWPBQMDRTAKZGFUHOS"; ROTOR_BETA MILITARY M4 BETA
0427/0014 SROTB, 14;05;31;12;26;03;16;11;30;27;20;02;21;
0430/0005
0431/0031
0432/0012
0433/0026
0434/0003
0435/0016
0436/0011
0437/0030
0440/0027
0441/0020
0442/0002
0443/0021
0444/0015 15;04;22;24;01;13;32;07;06;25;10;17;23;
0445/0004
0446/0022
0447/0024
0450/0001
0451/0013
0452/0032
0453/0007
0454/0006
0455/0025
0456/0010
0457/0017
0460/0023
/"FSOKANUERHMBTIYCWLQPZXVGJD"; ROTOR_GAMMA MILITARY M4 GAMMA
0461/0006 SROTG, 06;23;17;13;01;16;25;05;22;10;15;02;24;
0462/0023
0463/0017
0464/0013
0465/0001
0466/0016
0467/0025
0470/0005
0471/0022
0472/0010
0473/0015
0474/0002
0475/0024
0476/0011 11;31;03;27;14;21;20;32;30;26;07;12;04;
0477/0031
0500/0003
0501/0027
0502/0014
0503/0021
0504/0020
0505/0032
0506/0030
0507/0026
0510/0007
0511/0012
0512/0004
/"ENKQAUYWJICOPBLMDXZVFTHRGS", ROTOR_REFL4B MILITARY M4 B REFLECTOR
0513/0005 SREFLB, 05;16;13;21;01;25;31;27;12;11;03;17;20;
0514/0016
0515/0013
0516/0021
0517/0001
0520/0025
0521/0031
0522/0027
0523/0012
0524/0011
0525/0003
0526/0017
0527/0020
0530/0002 02;14;15;04;30;32;26;06;24;10;22;07;23;
0531/0014
0532/0015
0533/0004
0534/0030
0535/0032
0536/0026
0537/0006
0540/0024
0541/0010
0542/0022
0543/0007
0544/0023
/"RDOBJNTKVEHMLFCWZAXGYIPSUQ"; ROTOR_REFL4C MILITARY M4 C REFLECTOR
0545/0022 SREFLC, 22;04;17;02;12;16;24;13;26;05;10;15;14;
0546/0004
0547/0017
0550/0002
0551/0012
0552/0016
0553/0024
0554/0013
0555/0026
0556/0005
0557/0010
0560/0015
0561/0014
0562/0006 06;03;27;32;01;30;07;31;11;20;23;25;21;
0563/0003
0564/0027
0565/0032
0566/0001
0567/0030
0570/0007
0571/0031
0572/0011
0573/0020
0574/0023
0575/0025
0576/0021
*0577
0577/7402 STOP, HLT /FOR MINICOMP MODE THIS HALTS LEAVING
/USER AT ENTRY POINT 0600
/
/
/_PAGE_3_____________________________________________________________
*0600
0600/7300 ENTRY, CLA CLL /GET MODE
0601/1035 TAD MODE
0602/1355 TAD C7777 /SUBTRACT 1
0603/7450 SNA /SKIP NEXT INSTRUCTION IF NON ZERO
0604/5232 JMP MINI /JMP TO MINICOMP MODE
0605/6031 TELE, KSF /SKIP IF READER FLAG SET
0606/5205 JMP .-1 /WAIT FOR KEY
0607/6036 KRB /KBD->ACC, CLEAR FLAG
0610/3070 DCA CHAR /STORE CHAR SO WE CAN TEST IT
0611/1070 TAD CHAR /ALLOW ONLY A-Z (65-90)
0612/1354 TAD C7677 /SUBTRACT 65
0613/7710 SPA CLA /SKIP ON PLUS OR ZERO, CLEAR ACC
0614/5205 JMP TELE /LESS THAN 65, SKIP
0615/1070 TAD CHAR /RESTORE CHAR
0616/1353 TAD C7645 /SUBTRACT 91
0617/7700 SMA CLA /SKIP ON MINUS, CLEAR ACC
0620/5205 JMP TELE /MORE THAN 90, SKIP
0621/7300 CLA CLL /IT IS VALID A-Z, RESTORE CHAR
0622/1070 TAD CHAR
0623/1352 TAD C7700 /SUBTRACT 64 SO A=1 (1 BIASED)
0624/4235 JMS CIPHER /CALL CIPHER
0625/1351 TAD C0100 /ADD 64 SO a=65 (65 BIASED)
0626/6041 TSF /SKIP IF PRINT FLAG SET
0627/5226 JMP .-1 /LOOP UNTIL READY
0630/6046 TLS /PRINT
0631/5205 JMP TELE /WAIT FOR NEXT KEY
0632/7604 MINI, LAS /LOAD AC WITH SWITCH REGISTER
0633/4235 JMS CIPHER /CALL CIPHER
0634/5756 JMP I PSTOP /JMP TO STOP FOR HALT
0635/0000 CIPHER, 0 /SUBROUTINE RETURN ADDRESS STORE HERE
0636/3070 DCA CHAR /STORE ACC IN CHAR
0637/4757 PST, JMS I PSTEP /CALL STEP TO STEP THE ROTORS
0640/4760 PL1, JMS I PSPLUG /CALL PLUGBOARD TO SWAP THE LETTERS
0641/1023 F4, TAD INDC4 /SETUP AND CALL FORWARD ROTOR FOR 4
0642/3071 DCA CINDC
0643/1027 TAD ROTR4
0644/3072 DCA CROTR
0645/1033 TAD RING4
0646/3073 DCA CRING
0647/4761 JMS I PFROTOR
0650/1022 F3, TAD INDC3 /SETUP AND CALL FORWARD ROTOR FOR 3
0651/3071 DCA CINDC
0652/1026 TAD ROTR3
0653/3072 DCA CROTR
0654/1032 TAD RING3
0655/3073 DCA CRING
0656/4761 JMS I PFROTOR
0657/1021 F2, TAD INDC2 /SETUP AND CALL FORWARD ROTOR FOR 2
0660/3071 DCA CINDC
0661/1025 TAD ROTR2
0662/3072 DCA CROTR
0663/1031 TAD RING2
0664/3073 DCA CRING
0665/4761 JMS I PFROTOR
0666/1020 F1, TAD INDC1 /SETUP AND CALL FORWARD ROTOR FOR 1
0667/3071 DCA CINDC
0670/1024 TAD ROTR1
0671/1347 TAD C0010 /BETA/GAMMA ACTUALLY AT 9 AND 10 (+8)
0672/3072 DCA CROTR
0673/1030 TAD RING1
0674/3073 DCA CRING
0675/4761 JMS I PFROTOR
0676/7301 FREFL, CLA CLL IAC /LOAD ACC WITH 1
0677/3071 DCA CINDC
0700/1034 TAD REFL
0701/1350 TAD C0012 /REFLECTOR ACTUALLY AT 11 AND 12 (+10)
0702/3072 DCA CROTR
0703/7301 CLA CLL IAC /LOAD ACC WITH 1
0704/3073 DCA CRING
0705/4761 JMS I PFROTOR /CALL REFLECTOR
0706/1020 R1, TAD INDC1 /SETUP AND CALL REVERSE ROTOR FOR 1
0707/3071 DCA CINDC
0710/1024 TAD ROTR1
0711/1347 TAD C0010 /BETA/GAMMA ACTUALLY AT 9 AND 10 (+8)
0712/3072 DCA CROTR
0713/1030 TAD RING1
0714/3073 DCA CRING
0715/4762 JMS I PRROTOR
0716/1021 R2, TAD INDC2 /SETUP AND CALL REVERSE ROTOR FOR 2
0717/3071 DCA CINDC
0720/1025 TAD ROTR2
0721/3072 DCA CROTR
0722/1031 TAD RING2
0723/3073 DCA CRING
0724/4762 JMS I PRROTOR
0725/1022 R3, TAD INDC3 /SETUP AND CALL REVERSE ROTOR FOR 3
0726/3071 DCA CINDC
0727/1026 TAD ROTR3
0730/3072 DCA CROTR
0731/1032 TAD RING3
0732/3073 DCA CRING
0733/4762 JMS I PRROTOR
0734/1023 R4, TAD INDC4 /SETUP AND CALL REVERSE ROTOR FOR 4
0735/3071 DCA CINDC
0736/1027 TAD ROTR4
0737/3072 DCA CROTR
0740/1033 TAD RING4
0741/3073 DCA CRING
0742/4762 JMS I PRROTOR
0743/4760 PL2, JMS I PSPLUG /CALL PLUGBOARD TO SWAP THE LETTERS
0744/7300 STR1, CLA CLL /LOAD CHAR INTO ACC TO RETURN
0745/1070 TAD CHAR
0746/5635 JMP I CIPHER /RETURN FROM SUBROUTINE
/THIS PAGE VARIABLES AND CONSTANTS
0747/0010 C0010, 0010 /8D
0750/0012 C0012, 0012 /10D
0751/0100 C0100, 0100 /64D
0752/7700 C7700, 7700 /-64D
0753/7645 C7645, 7645 /-91D
0754/7677 C7677, 7677 /-65D
0755/7777 C7777, 7777 /-1D
0756/0577 PSTOP, STOP
0757/1041 PSTEP, STEP
0760/1000 PSPLUG, SPLUG
0761/1200 PFROTOR,FROTOR
0762/1226 PRROTOR,RROTOR
/
/
/_PAGE_4_____________________________________________________________
*1000
1000/0000 SPLUG, 0 /SUBROUTINE RETURN ADDRESS STORED HERE
1001/7300 CLA CLL
1002/1307 TAD PPLUG1 /RESET PLUGBOARD POINTER PTR1
1003/3010 DCA PTR1
1004/1305 TAD COUNT /SETUP COUNT AND INDEX FOR LOOP
1005/7041 CIA /NEGATE (INDEX COUNTS UP TO 0)
1006/3306 DCA INDEX1
1007/1410 LOOP, TAD I PTR1 /CHECK PLUGBOARD PAIR FIRST VALUE
1010/7450 SNA /SKIP NEXT INSTRUCTION IF NON ZERO
1011/5230 JMP DSBL /THIS PLUGBOARD PAIR IS DISABLED
1012/7041 CIA /NOT DISABLED, CONTINUE COMPARING TO OUR CHAR
1013/1070 TAD CHAR /ADD CHARACTER, IF IT MATCHES ACC WILL BE 0
1014/7450 SNA /SKIP NEXT INSTRUCTION IF NON ZERO
1015/5232 JMP MATCH1 /MATCH FIRST VALUE IN PAIR
1016/7300 CLA CLL /NOT ZERO, NO MATCH, CLEAR ACC
1017/1410 TAD I PTR1 /GET SECOND PAIR VALUE
1020/7041 CIA /COMPARE IT TO OUR CHARACTER
1021/1070 TAD CHAR
1022/7450 SNA /SKIP NEXT INSTRUCTION IF NON ZERO
1023/5235 JMP MATCH2 /IT IS ZERO, MATCH SECOND VALUE IN PAIR
1024/7300 LOOP2, CLA CLL /NO MATCH THIS PAIR
1025/2306 ISZ INDEX1
1026/5207 JMP LOOP
1027/5600 JMP I SPLUG /RETURN FROM SUBROUTINE
1030/1410 DSBL, TAD I PTR1 /THIS PAIR IS DISABLED, SKIP OTHER HALF
1031/5224 JMP LOOP2
1032/1410 MATCH1, TAD I PTR1 /FIRST WORD MATCHES, OBTAIN OTHER HALF
1033/3070 DCA CHAR
1034/5600 JMP I SPLUG /RETURN FROM SUBROUTINE
1035/7344 MATCH2, CLA CLL CMA RAL /SECOND WORD MATCHES, ACC=7776 (-2)
1036/1010 TAD PTR1 /ADD PTR1 TO ACC
1037/3010 DCA PTR1 /DEPOSIT PTR1-2 TO GET FIRST VALUE
1040/5232 JMP MATCH1
1041/0000 STEP, 0 /SUBROUTINE RETURN ADDRESS STORED HERE
1042/7300 CLA CLL /IS ROTOR3 IN NOTCH?
1043/1026 TAD ROTR3
1044/4711 JMS I PRPTR /SET ROTOR POINTER TO CORRECT ROTOR
1045/1022 TAD INDC3
1046/3310 DCA TEMP1
1047/1710 TAD I TEMP1
1050/0304 AND C4000 /KEEP ONLY NOTCH BIT
1051/7440 SZA /SKIP ON ZERO
1052/5264 JMP STEP3 /YES - 3 RIGHT ROTORS MOVE
1053/1027 TAD ROTR4 /IS ROTOR4 IN NOTCH?
1054/4711 JMS I PRPTR /SET ROTOR POINTER TO CORRECT ROTOR
1055/1023 TAD INDC4
1056/3310 DCA TEMP1
1057/1710 TAD I TEMP1
1060/0304 AND C4000 /KEEP ONLY NOTCH BIT
1061/7440 SZA /SKIP ON ZERO
1062/5271 JMP STEP2 /YES - 2 RIGHT ROTORS MOVE
1063/5276 JMP STEP1 /NO - 1 RIGHT ROTOR MOVES
1064/7300 STEP3, CLA CLL /STEP ROTOR 2
1065/1021 TAD INDC2
1066/7001 IAC
1067/4712 JMS I PRBACK /IF OVERFLOW ROLL IT BACK TO 1
1070/3021 DCA INDC2
/INTENTIONAL LACK OF JMP STEPS REMAINING
1071/7300 STEP2, CLA CLL /STEP ROTOR 3
1072/1022 TAD INDC3
1073/7001 IAC
1074/4712 JMS I PRBACK /IF OVERFLOW ROLL IT BACK TO 1
1075/3022 DCA INDC3
/INTENTIONAL LACK OF JMP STEPS REMAINING
1076/7300 STEP1, CLA CLL /STEP ROTOR 4
1077/1023 TAD INDC4
1100/7001 IAC
1101/4712 JMS I PRBACK /IF OVERFLOW ROLL IT BACK TO 1
1102/3023 DCA INDC4
/INTENTIONAL LACK OF JMP STEPS REMAINING
1103/5641 STEP0, JMP I STEP /RETURN FROM SUBROUTINE
/THIS PAGE VARIABLES AND CONSTANTS
1104/4000 C4000, 4000 /NOTCH BIT IN ROTORS
1105/0015 COUNT, 15 /13D
1106/0000 INDEX1, 0 /0D
1107/0035 PPLUG1, PLUG1-1 /POINTER TO WORD BEFORE PLUGBOARD
1110/0000 TEMP1, 0
1111/1271 PRPTR, RPTR
1112/1301 PRBACK, RBACK
/
/
/_PAGE_5_____________________________________________________________
*1200
1200/0000 FROTOR, 0
1201/1073 TAD CRING /CINDC+26-CRING+CHAR
1202/7041 CIA
1203/1071 TAD CINDC
1204/1074 TAD C0032
1205/1070 TAD CHAR
1206/4301 JMS RBACK
1207/3317 DCA TEMP2
1210/1072 TAD CROTR
1211/4271 JMS RPTR /SET ROTOR POINTER TO CORRECT ROTOR
1212/1317 TAD TEMP2
1213/3317 DCA TEMP2
1214/1717 TAD I TEMP2
1215/0313 AND C0077
1216/7041 CIA
1217/1071 TAD CINDC
1220/7041 CIA
1221/1073 TAD CRING
1222/1074 TAD C0032
1223/4301 JMS RBACK
1224/3070 DCA CHAR
1225/5600 JMP I FROTOR /RETURN FROM SUBROUTINE
1226/0000 RROTOR, 0
1227/3320 DCA TEMP3 /STORE 0
1230/1074 TAD C0032
1231/7041 CIA /NEGATE (INDEX COUNTS UP TO 0)
1232/3316 DCA INDEX2
1233/2320 LOOP3, ISZ TEMP3
1234/1073 TAD CRING /CINDC+26-CRING+CHAR
1235/7041 CIA
1236/1071 TAD CINDC
1237/1074 TAD C0032
1240/1320 TAD TEMP3
1241/4301 JMS RBACK
1242/3317 DCA TEMP2
1243/1072 TAD CROTR
1244/4271 JMS RPTR /SET ROTOR POINTER TO CORRECT ROTOR
1245/1317 TAD TEMP2
1246/3317 DCA TEMP2
1247/1717 TAD I TEMP2
1250/0313 AND C0077
1251/7041 CIA
1252/1071 TAD CINDC
1253/7041 CIA
1254/1073 TAD CRING
1255/1074 TAD C0032
1256/4301 JMS RBACK
1257/7041 CIA /COMPARE BY NEGATING
1260/1070 TAD CHAR /ADD CHARACTER, IF IT MATCHES ACC WILL BE 0
1261/7450 SNA /SKIP NEXT INSTRUCTION IF NON ZERO
1262/5266 JMP MATCH3 /MATCH FIRST VALUE IN PAIR
1263/2316 ISZ INDEX2
1264/7300 CLA CLL
1265/5233 JMP LOOP3
1266/1320 MATCH3, TAD TEMP3
1267/3070 DCA CHAR
1270/5626 JMP I RROTOR /RETURN FROM SUBROUTINE
1271/0000 RPTR, 0 /CALCULATE ROTOR POINTER
1272/7041 CIA
1273/3315 DCA TEMP4
1274/1074 PTRLP, TAD C0032
1275/2315 ISZ TEMP4
1276/5274 JMP PTRLP
1277/1312 TAD C0054
1300/5671 JMP I RPTR /RETURN FROM SUBROUTINE
1301/0000 RBACK, 0 /IF ACC>32, SUBTRACT 32 UNTIL IT IS
1302/3315 RBACK2, DCA TEMP4
1303/1315 TAD TEMP4
1304/1314 TAD C7746
1305/7540 SMA SZA
1306/5302 JMP RBACK2
1307/7300 CLA CLL
1310/1315 TAD TEMP4
1311/5701 JMP I RBACK /RETURN FROM SUBROUTINE
/THIS PAGE VARIABLES AND CONSTANTS
1312/0054 C0054, 0054 /CONSTANT TO GENERATE ROTOR PTR
1313/0077 C0077, 0077 /63D
1314/7746 C7746, 7746 /-26D
1315/0000 TEMP4, 0
1316/0000 INDEX2, 0
1317/0000 TEMP2, 0
1320/0000 TEMP3, 0
$ENTRY
$0600
User Defined Symbol Table
PTR1 0010
INDC1 0020
INDC2 0021
INDC3 0022
INDC4 0023
ROTR1 0024
ROTR2 0025
ROTR3 0026
ROTR4 0027
RING1 0030
RING2 0031
RING3 0032
RING4 0033
REFL 0034
MODE 0035
PLUG1 0036
PLUG2 0040
PLUG3 0042
PLUG4 0044
PLUG5 0046
PLUG6 0050
PLUG7 0052
PLUG8 0054
PLUG9 0056
PLUG10 0060
PLUG11 0062
PLUG12 0064
PLUG13 0066
CHAR 0070
CINDC 0071
CROTR 0072
CRING 0073
C0032 0074
SROTR1 0107
SROTR2 0141
SROTR3 0173
SROTR4 0225
SROTR5 0257
SROTR6 0311
SROTR7 0343
SROTR8 0375
SROTB 0427
SROTG 0461
SREFLB 0513
SREFLC 0545
STOP 0577
ENTRY 0600
TELE 0605
MINI 0632
CIPHER 0635
PST 0637
PL1 0640
F4 0641
F3 0650
F2 0657
F1 0666
FREFL 0676
R1 0706
R2 0716
R3 0725
R4 0734
PL2 0743
STR1 0744
C0010 0747
C0012 0750
C0100 0751
C7700 0752
C7645 0753
C7677 0754
C7777 0755
PSTOP 0756
PSTEP 0757
PSPLUG 0760
PFROTOR 0761
PRROTOR 0762
SPLUG 1000
LOOP 1007
LOOP2 1024
DSBL 1030
MATCH1 1032
MATCH2 1035
STEP 1041
STEP3 1064
STEP2 1071
STEP1 1076
STEP0 1103
C4000 1104
COUNT 1105
INDEX1 1106
PPLUG1 1107
TEMP1 1110
PRPTR 1111
PRBACK 1112
FROTOR 1200
RROTOR 1226
LOOP3 1233
MATCH3 1266
RPTR 1271
PTRLP 1274
RBACK 1301
RBACK2 1302
C0054 1312
C0077 1313
C7746 1314
TEMP4 1315
INDEX2 1316
TEMP2 1317
TEMP3 1320
Great program, but I have no idea how to compile it. Do you have some tutorial? (I'm a dec pdp newbie here...)