summaryrefslogtreecommitdiffstats
path: root/mix/1.3.2/good-bad.mixal
blob: c933d56d73d0052ba7c3db64ecb23b4762c7adff (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
* 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     CMPA    =3=
        JG      BAD
        JMP     GOOD
        JMP     VMEM
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