* This program is the ugliest thing ever created by mankind. It's * probably not correct. Email me at s@ricketyspace.net if you would * like to look at Knuth's version of this program. INST EQU 1000 GOOD EQU 1001 BAD EQU 1002 TABLE EQU 200 ORIG 0 START LD1 INST(5:5) CMP1 =63= JG BAD LD1 INST(5:5) Load C field into I1. LD1 TABLE,1 JMP 0,1 * Start switching table. ORIG 300 * A, I, F field validation groups. G01 JMP VFIELD G02 LDA INST(4:4) CMPA =2= JG BAD JMP GOOD G03 LDA INST(4:4) CMPA =5= JG BAD LDA INST(0:2) # Load M JAN BAD JMP GOOD G04 JMP VMEM G05 JMP VFIELD G06 LDA INST(4:4) CMPA =20= JG BAD JMP VMEM G07 LDA INST(4:4) CMPA =20= JG BAD JMP GOOD G08 LDA INST(4:4) CMPA =20= JG BAD JMP VMEM G09 LDA INST(4:4) CMPA =9= JG BAD JMP VMEM G10 LDA INST(4:4) CMPA =5= JG BAD JMP VMEM G11 LDA INST(4:4) CMPA =3= JG BAD JMP GOOD G12 JMP VFIELD VFIELD ADD INST(4:4) Load INST's F field to A. CMPA =45= JG BAD SRC 5 DIV =8= STX TMP Store remainder in memory. CMPA TMP Compare quotient and remainder. JG BAD VMEM LD1 INST(3:3) Load I field of instruction. CMP1 =6= JG BAD CMP1 =0= JG GOOD LD1 INST(0:2) Load AA field of instruction. J1N BAD CMP1 =3999= JG BAD JMP GOOD HLT ORIG 200 * EXX -> Entry for instruction with C = XX. E00 CON GOOD E01 CON G01 E02 CON G01 E03 CON G01 E04 CON G01 E05 CON G02 E06 CON G03 E07 CON G04 E08 CON G05 E09 CON G05 E10 CON G05 E11 CON G05 E12 CON G05 E13 CON G05 E14 CON G05 E15 CON G05 E16 CON G05 E17 CON G05 E18 CON G05 E19 CON G05 E20 CON G05 E21 CON G05 E22 CON G05 E23 CON G05 E24 CON G05 E25 CON G05 E26 CON G05 E27 CON G05 E28 CON G05 E29 CON G05 E30 CON G05 E31 CON G05 E32 CON G05 E33 CON G05 E34 CON G06 E35 CON G07 E36 CON G08 E37 CON G08 E38 CON G08 E39 CON G09 E40 CON G10 E41 CON G10 E42 CON G10 E43 CON G10 E44 CON G10 E45 CON G10 E46 CON G10 E47 CON G10 E48 CON G11 E49 CON G11 E50 CON G11 E51 CON G11 E52 CON G11 E53 CON G11 E54 CON G11 E55 CON G11 E56 CON G12 E57 CON G12 E58 CON G12 E59 CON G12 E60 CON G12 E61 CON G12 E62 CON G12 E63 CON G12 ORIG 1000 LDA 4000,1(4:3) LD2 =42= LD3 =69= TMP NOP 00 Used to store temporary values. HLT END START