Line | Address | Object Code
| Label | F1 | N1 | B | F2 | N2 | Comments | Check
|
---|
1 | 0 | | ; tape1.d/elliott.t2 |
|
2 | 0 | | ;------------------- |
|
3 | 0 | | ; |
|
4 | 0 | | ; call of ELLIOTT procedure to generate code statements |
|
5 | 0 | | ; |
|
6 | 0 | | =2181 | |
|
7 | 2181 | | Elliott:: | ; | |
|
8 | 2181 | | Elliott: | ; | |
|
9 | 2181 | | | call | | | | | ;get token | @2181
|
9+1 | 2181 | 7322411004503 | | lnk | advance.lnk | : | jmp | advance.ent | |
|
10 | 2182 | 0600600 | | lod | token | | | | ;check it | @2182
|
11 | 2182+ | 0122204 | | sub | K47a | | | | ;=47, [(] |
|
12 | 2183 | 1044210 | | jz | .ok1 | | | | ;OK, |
|
13 | 2183+ | 1004216 | | jmp | _err51 | | | | ;missing '(' |
|
14 | 2184 | | ; |
|
15 | 2184 | | .ok1: | ; | |
|
16 | 2184 | | | call | | | | | ;align to full word | @2184
|
16+1 | 2184 | 7307255001654 | | lnk | putNop.lnk | : | jmp | putNop.ent | |
|
17 | 2185 | | | call | | | | | ;get two-digit opcode |
|
17+1 | 2185 | 7307175004251 | | lnk | GetOpCode.lnk | : | jmp | GetOpCode.ent | |
|
18 | 2186 | 0040600 | | o02 | token | | | | ;token+1 | @2186
|
19 | 2186+ | 0122201 | | sub | K42 | | | | ;=42 [,]+1 |
|
20 | 2187 | 1044214 | | jz | .comma1 | | | | ; |
|
21 | 2187+ | 1004216 | | jmp | _err51 | | | | ; |
|
22 | 2188 | | ; |
|
23 | 2188 | | ; first instruction complete, check for B digit |
|
24 | 2188 | | ; |
|
25 | 2188 | | .comma1: | ; | |
|
26 | 2188 | | | call | | | | | ;get next token | @2188
|
26+1 | 2188 | 7305105001222 | | lnk | gettoken.lnk | : | jmp | gettoken.ent | |
|
27 | 2189 | 0040600 | | o02 | token | | | | ;token+1 |
|
28 | 2189+ | 1024217 | | jn | .ok2 | | | | ;integer constant |
|
29 | 2190 | | _err51: | ; | |
|
30 | 2190 | 1661044 | | lnk | errlnk | | | | ;error 51: error in ELLIOTT call | @2190
|
31 | 2190+ | 1001070 | | jmp | Error | | | | ;call error routine |
|
32 | 2191 | | ; |
|
33 | 2191 | | .ok2: | ; | |
|
34 | 2191 | 0600576 | | lod | ident | | | | ;constant value |
|
35 | 2191+ | 1144222 | | jz | .Bdigit0 | | | | ;B-digit = 0 |
|
36 | 2192 | 0122207 | | sub | K1c | | | | ;=1 | @2192
|
37 | 2192+ | 1144221 | | jz | .Bdigit1 | | | | ;B-digit = 1 |
|
38 | 2193 | 1004216 | | jmp | _err51 | | | | ; |
|
39 | 2193+ | | ; |
|
40 | 2193+ | | .Bdigit1: | ; | |
|
41 | 2193+ | 0602225 | | lod | Bbit | | | | ;=<000/000> |
|
42 | 2194 | 0501423 | | ads | Link9 | | | | ;mark instruction to include it | @2194
|
43 | 2194+ | | .Bdigit0: | ; | |
|
44 | 2194+ | 1004234 | | jmp | .skip1 | | | | ;-->> |
|
45 | 2195 | | =2204 | |
|
46 | 2204 | | .skip1: | ; | |
|
47 | 2204 | | | call | | | | | ;get comma |
|
47+1 | 2204 | 7305105001222 | | lnk | gettoken.lnk | : | jmp | gettoken.ent | |
|
48 | 2205 | 0040600 | | o02 | token | | | | ;token+1 |
|
49 | 2205+ | 0122201 | | sub | K42 | | | | ;=42=>[,]+1 and check it |
|
50 | 2206 | 1044237 | | jz | .comma2 | | | | ;OK, | @2206
|
51 | 2206+ | 1004216 | | jmp | _err51 | | | | ;missing comma |
|
52 | 2207 | | ; |
|
53 | 2207 | | .comma2: | ; | |
|
54 | 2207 | 0601423 | | lod | Link9 | | | | ;load 1st instruction |
|
55 | 2207+ | 1004223 | | jmp | .skip2 | | | | ;-->> |
|
56 | 2208 | | =2195 | |
|
57 | 2195 | | .skip2: | ; | |
|
58 | 2195 | | | call | | | | | ;generate ocode for it |
|
58+1 | 2195 | 7307175001640 | | lnk | GenInst.lnk | : | jmp | GenInst.ent | |
|
59 | 2196 | | | call | | | | | ;get second instruction | @2196
|
59+1 | 2196 | 7307175004251 | | lnk | GetOpCode.lnk | : | jmp | GetOpCode.ent | |
|
60 | 2197 | 0042204 | | o02 | K47a | | | | ;=47+1=>48, [)] |
|
61 | 2197+ | 0120600 | | sub | token | | | | ;check delimiter |
|
62 | 2198 | 1144227 | | jz | .parenOK | | | | ;OK, | @2198
|
63 | 2198+ | 1004216 | | jmp | _err51 | | | | ;missing ')' |
|
64 | 2199 | | ; |
|
65 | 2199 | 0000000 | | o00 | 0 | | | | ; |
|
66 | 2199+ | | ; |
|
67 | 2199+ | | .parenOK: | ; | |
|
68 | 2199+ | 0601423 | | lod | Link9 | | | | ;get second instruction |
|
69 | 2200 | | | call | | | | | ;generate ocode for that | @2200
|
69+1 | 2200 | 7307175001640 | | lnk | GenInst.lnk | : | jmp | GenInst.ent | |
|
70 | 2201 | | | call | | | | | ;discard closing paren, get next |
|
70+1 | 2201 | 7322411004503 | | lnk | advance.lnk | : | jmp | advance.ent | |
|
71 | 2202 | 1003342 | | jmp | L1762 | | | | ;return to statement (proc call) | @2202
|
72 | 2202+ | | ; |
|
73 | 2202+ | 0000000 | | o00 | 0 | | | | ; |
|
74 | 2203 | | ; |
|
75 | 2203 | | elliott: | ; | |
|
76 | 2203 | 0455454515764 | | 'ELLIOT' | ;ELLIOT | @2203
|
77 | 2204 | | ;-------------------------------------------------------------------- |
|
78 | 2204 | | ; get single opcode digit - must be 0-7 and followed by a comma |
|
79 | 2204 | | ; |
|
80 | 2204 | | =2208 | |
|
81 | 2208 | | GetFnDigit:: | ; | |
|
82 | 2208 | | ; |
|
83 | 2208 | | .ent: | ; | |
|
84 | 2208 | | | call | | | | | ; | @2208
|
84+1 | 2208 | 7305105001222 | | lnk | gettoken.lnk | : | jmp | gettoken.ent | |
|
85 | 2209 | 0040600 | | o02 | token | | | | ;token+1 |
|
86 | 2209+ | 1024277 | | jn | .ok1 | | | | ;integer constant |
|
87 | 2210 | 1004216 | | jmp | _err51 | | | | ;error | @2210
|
88 | 2210+ | | ; |
|
89 | 2210+ | | =2239 | |
|
90 | 2239 | | .ok1: | ; | |
|
91 | 2239 | 0600576 | | lod | ident | | | | ;get integer value |
|
92 | 2239+ | 1104242 | | jmp | .skip1 | | | | ;-->> |
|
93 | 2240 | | =2210+ | |
|
94 | 2210+ | | .skip1: | ; | |
|
95 | 2210+ | 0401476 | | sto | putcode.lnk | | | | ;store 1st fn digit | @2210+
|
96 | 2211 | 0061454 | | and | K7 | | | | ;mask to 3 bits |
|
97 | 2211+ | 0120576 | | sub | ident | | | | ;check same value |
|
98 | 2212 | 1044245 | | jz | .ok2 | | | | ; | @2212
|
99 | 2212+ | 1004216 | | jmp | _err51 | | | | ;error |
|
100 | 2213 | | ; |
|
101 | 2213 | | .ok2: | call | | | | | ;get following comma | @2213
|
101+1 | 2213 | 7305105001222 | | lnk | gettoken.lnk | : | jmp | gettoken.ent | |
|
102 | 2214 | 0040600 | | o02 | token | | | | ;token+1 | @2214
|
103 | 2214+ | 0122201 | | sub | K42 | | | | ;=42 => [,]+1 |
|
104 | 2215 | 1044250 | | jz | .comma1 | | | | ; |
|
105 | 2215+ | 1004216 | | jmp | _err51 | | | | ;error |
|
106 | 2216 | | ; |
|
107 | 2216 | | .comma1: | ; | |
|
108 | 2216 | | | ret | | | | | ; |
|
108+1 | 2216 | 0020123000001 | | o00 | GetFnDigit.lnk | / | jmp | 1 | |
|
109 | 2217 | | ;-------------------------------------------------------------------- |
|
110 | 2217 | | ; get opcode (and address) part of Elliott call |
|
111 | 2217 | | ; appears as three argument, first two are opcode digits |
|
112 | 2217 | | ; third is the address part |
|
113 | 2217 | | ; final delimiter not checked, may be comma or closing paren |
|
114 | 2217 | | ; |
|
115 | 2217 | | GetOpCode:: | ; | |
|
116 | 2217 | | ; |
|
117 | 2217 | | .ent: | ; | |
|
118 | 2217 | | | call | | | | | ;get 1st digit | @2217
|
118+1 | 2217 | 7320121004240 | | lnk | GetFnDigit.lnk | : | jmp | GetFnDigit.ent | |
|
119 | 2218 | 0601476 | | lod | putcode.lnk | | | | ;answer saved here | @2218
|
120 | 2218+ | 0401423 | | sto | Link9 | | | | ;save 1st digit |
|
121 | 2219 | | | call | | | | | ;get second digit |
|
121+1 | 2219 | 7320121004240 | | lnk | GetFnDigit.lnk | : | jmp | GetFnDigit.ent | |
|
122 | 2220 | 0601423 | | lod | Link9 | | | | ;reload 1st digit | @2220
|
123 | 2220+ | 1320003 | | sll | 3 | | | | ;shift left 3 bits |
|
124 | 2221 | 0101476 | | add | putcode.lnk | | | | ;and add second digit |
|
125 | 2221+ | 1320015 | | sll | 13 | | | | ;shift result left 13 bits |
|
126 | 2222 | 0102226 | | add | K6 | | | | ;make type 6 entry for putcode | @2222
|
127 | 2222+ | 0401423 | | sto | Link9 | | | | ;save it. |
|
128 | 2223 | | | call | | | | | ;get next token (address) |
|
128+1 | 2223 | 7305105001222 | | lnk | gettoken.lnk | : | jmp | gettoken.ent | |
|
129 | 2224 | 0600600 | | lod | token | | | | ; | @2224
|
130 | 2224+ | 1044263 | | jz | .ident | | | | ;identifier |
|
131 | 2225 | 0102205 | | add | K2a | | | | ;=2 |
|
132 | 2225+ | 1144273 | | jz | .int | | | | ;integer constant |
|
133 | 2226 | 1004216 | | jmp | _err51 | | | | ;error | @2226
|
134 | 2226+ | | ; |
|
135 | 2226+ | | | pad | | | | | ; |
|
135+1 | 2226+ | 0000000 | | 00 | 0 | | | | |
|
136 | 2227 | | ; |
|
137 | 2227 | | .ident: | ; | |
|
138 | 2227 | | | call | | | | | ;process identifier |
|
138+1 | 2227 | 7322411004504 | | lnk | advance2.lnk | : | jmp | advance2.ent | |
|
139 | 2228 | 0603427 | | lod | idptr | | | | ;id information | @2228
|
140 | 2228+ | 0062242 | | and | W1186 | | | | ;=03440000000000 |
|
141 | 2229 | 0122236 | | sub | Bit33 | | | | ;=00100000000000 |
|
142 | 2229+ | 1044216 | | jz | _err51 | | | | ;error |
|
143 | 2230 | 0603427 | | lod | idptr | | | | ; | @2230
|
144 | 2230+ | 0062221 | | and | typbits | | | | ;=03700000000000 |
|
145 | 2231 | 0127032 | | sub | W3610 | | | | ;=00400000000000 |
|
146 | 2231+ | 1044216 | | jz | _err51 | | | | ;error |
|
147 | 2232 | 0603427 | | lod | idptr | | | | ; | @2232
|
148 | 2232+ | 0062232 | | and | procbit | | | | ;=02000000000000 |
|
149 | 2233 | 1044272 | | jz | .nonproc | | | | ;not a procedure name |
|
150 | 2233+ | 1004216 | | jmp | _err51 | | | | ;error |
|
151 | 2234 | | ; |
|
152 | 2234 | | .nonproc: | ; | |
|
153 | 2234 | 0607033 | | lod | W3611 | | | | ;=0000036017777 | @2234
|
154 | 2234+ | 0063427 | | and | idptr | | | | ;mask with id info |
|
155 | 2235 | 1104274 | | jmp | .ok | | | | ;store as address part |
|
156 | 2235+ | | ; |
|
157 | 2235+ | | ; integer constant as address - OK |
|
158 | 2235+ | | ; |
|
159 | 2235+ | 0602225 | .int: | lod | Bbit | | | | ;=<000/000> mark as absolute constant? |
|
160 | 2236 | 0100576 | | add | ident | | | | ; | @2236
|
161 | 2236+ | | .ok: | ; | |
|
162 | 2236+ | 0401422 | | sto | GenAdr | | | | ;save address, |
|
163 | 2237 | | | call | | | | | ;get next token |
|
163+1 | 2237 | 7322411004503 | | lnk | advance.lnk | : | jmp | advance.ent | |
|
164 | 2238 | | | ret | | | | | ;and return | @2238
|
164+1 | 2238 | 0007177000001 | | o00 | GetOpCode.lnk | / | jmp | 1 | |
|
165 | 2239 | | ; |
|
166 | 2239 | | ;-------------------------------------------------------------------- |
|