Line | Address | Object Code
| Label | F1 | N1 | B | F2 | N2 | Comments | Check
|
---|
1 | 0 | | ; tape2/loader.t2 |
|
2 | 0 | | ; |
|
3 | 0 | | ; working storage for loader |
|
4 | 0 | | numbits: | ; | |
|
5 | 0 | 0000000000000 | | +0 | ;0000000000000 | @17
|
6 | 1 | | bitsheld: | ; | |
|
7 | 1 | 0000000000000 | | +0 | ;0000000000000 | @18
|
8 | 2 | | ocdop: | ; | |
|
9 | 2 | 0000000000000 | | +0 | ;0000000000000 | @19
|
10 | 3 | | newchar: | ; | |
|
11 | 3 | 0000000000000 | | +0 | ;0000000000000 | @20
|
12 | 4 | | sumchk: | ; | |
|
13 | 4 | 0000000000000 | | +0 | ;0000000000000 | @21
|
14 | 5 | 0000000000000 | W22: | +0 | ;0000000000000 | @22
|
15 | 6 | 0000000000000 | lnk2: | +0 | ;0000000000000 | @23
|
16 | 7 | 0000000000000 | codept: | +0 | ;0000000000000 | @24
|
17 | 8 | 0000000000000 | W25: | +0 | ;0000000000000 | @25
|
18 | 9 | 0000000000000 | contop: | +0 | ;0000000000000 | @26
|
19 | 10 | 0000000000000 | conlim: | +0 | ;0000000000000 | @27
|
20 | 11 | 0000000000000 | W28: | +0 | ;0000000000000 | @28
|
21 | 12 | 0000000000000 | lnk1: | +0 | ;0000000000000 | @29
|
22 | 13 | 0000000000000 | W30: | +0 | ;0000000000000 | @30
|
23 | 14 | 0000000000000 | W31: | +0 | ;0000000000000 | @31
|
24 | 15 | 0000000000000 | tmp1: | +0 | ;0000000000000 | @32
|
25 | 16 | 0000000000000 | W33: | +0 | ;0000000000000 | @33
|
26 | 17 | 0000000000005 | N5: | +5 | ;0000000000005 | @34
|
27 | 18 | 0000000000001 | K1: | +1 | ;0000000000001 | @35
|
28 | 19 | 0000000000003 | K3: | +3 | ;0000000000003 | @36
|
29 | 20 | 0000000000005 | K5: | +5 | ;0000000000005 | @37
|
30 | 21 | 0000000000017 | K15: | +15 | ;0000000000017 | @38
|
31 | 22 | 0000000000047 | K39: | +39 | ;0000000000047 | @39
|
32 | 23 | 0000000000010 | K8: | +8 | ;0000000000010 | @40
|
33 | 24 | | signbit: | ; | |
|
34 | 24 | 4000000000000 | | +04000000000000 | ; | @41
|
35 | 25 | 3777777700001 | W42: | +03777777700001 | ; | @42
|
36 | 26 | 0000002000000 | Bbit: | +00000002000000 | ; | @43
|
37 | 27 | 0000000000014 | K12: | +12 | ;0000000000014 | @44
|
38 | 28 | 0000000010000 | K4K: | +4096 | ;0000000010000 | @45
|
39 | 29 | 0000000000416 | lowmem: | +Lomem | ;0000000000416 | @46
|
40 | 30 | 0000000000023 | K19: | +19 | ;0000000000023 | @47
|
41 | 31 | | ;W48: |
|
42 | 31 | 0000000000000 | | +0 | ;0000000000000 | @48
|
43 | 32 | | ep6skel: | ; | |
|
44 | 32 | 4000041000000 | | jmp | ResetEnt | : | jmp | 0 | ;4064035000000 | @49
|
45 | 33 | 0000000000013 | K11: | +11 | ;0000000000013 | @50
|
46 | 34 | 0000000000037 | K31: | +31 | ;0000000000037 | @51
|
47 | 35 | 4000001100000 | W52: | jmp | 0 | : | jmp | 0# | ;4000001100000 | @52
|
48 | 36 | 0000000000045 | fsmsgp: | +fsmsg | ;0000000000066 | @53
|
49 | 37 | 0757646624545 | fsmsg: | '\75\76FREE' | ;0757646624545 | @54
|
50 | 38 | 4746364576245 | | +SIGN+'\74STORE' | ;4746364576245 | @55
|
51 | 39 | | ;------------------------------------------------------------------ |
|
52 | 39 | | ; owncode loader |
|
53 | 39 | | ; |
|
54 | 39 | | ; getchunk: extract N bits (where N is in ACC at call) and return |
|
55 | 39 | | ; return address in 29 |
|
56 | 39 | | ; |
|
57 | 39 | | getchunk:: | ; | |
|
58 | 39 | | getchunk: | ; | |
|
59 | 39 | 0560000 | | o27 | numbits | | | | ;subtract N from numbits | @56
|
60 | 39+ | 0600000 | | lod | numbits | | | | ;get numbits |
|
61 | 40 | 1040056 | | jz | .1 | | | | ;zero, just right | @57
|
62 | 40+ | 1020057 | | jn | .2 | | | | ;negative, not enough |
|
63 | 41 | | ; |
|
64 | 41 | | ; there are more than N bits available, remove N from bitsheld |
|
65 | 41 | 0040000 | | o02 | 0 | | | | ;=1 | @58
|
66 | 41+ | | | nop | | | | | ; |
|
66+1 | 41+ | 1000052 | | jmp | .1 | | | | |
|
66+2 | 42 | | .1: | ; | |
|
67 | 42 | 0000003320000 | | o00 | numbits | / | sll | 0 | ;shift left n places | @59
|
68 | 43 | 0120022 | | sub | K1 | | | | ;=1, less one to give mask | @60
|
69 | 43+ | 0660001 | | lns | bitsheld | | | | ;exchange, mask with store |
|
70 | 44 | 0000003220000 | | o00 | numbits | / | srl | 0 | ;shift into place | @61
|
71 | 45 | | .ret: | ; | |
|
72 | 45 | 0000063000001 | | o00 | lnk1 | / | jmp | 1 | ;and return | @62
|
73 | 46 | | ; exactly N bits left, return them |
|
74 | 46 | | .1: | ; | |
|
75 | 46 | 0740001 | | lzs | bitsheld | | | | ;get bitsheld, and zero | @63
|
76 | 46+ | 1000055 | | jmp | .ret | | | | ;and return |
|
77 | 47 | | ; |
|
78 | 47 | | ; less than N bits, need to get more |
|
79 | 47 | | ; |
|
80 | 47 | | .2: | ; | |
|
81 | 47 | 0140000 | | cla | 0 | | | | ; | @64
|
82 | 47+ | 1620000 | | inp | 0 | | | | ;get next character |
|
83 | 48 | 0560004 | | o27 | sumchk | | | | ;subtract from sumcheck | @65
|
84 | 48+ | 0400003 | | sto | newchar | | | | ;store new character |
|
85 | 49 | 0600024 | | lod | K5 | | | | ;=5 (number of bits in char) | @66
|
86 | 49+ | 0500000 | | ads | numbits | | | | ;bump numbits |
|
87 | 50 | 0600000 | | lod | numbits | | | | ;see if this is enough | @67
|
88 | 50+ | 1040073 | | jz | .3 | | | | ;just right |
|
89 | 51 | 1020075 | | jn | .4 | | | | ;not enough | @68
|
90 | 51+ | | ; |
|
91 | 51+ | | ; more than enough |
|
92 | 51+ | 0420017 | | stn | tmp1 | | | | ;save = -m |
|
93 | 52 | 0040000 | | o02 | 0 | | | | ;=1 | @69
|
94 | 52+ | | | nop | | | | | ;padding |
|
94+1 | 52+ | 1000065 | | jmp | .1 | | | | |
|
94+2 | 53 | | .1: | ; | |
|
95 | 53 | 0000003320000 | | o00 | numbits | / | sll | 0 | ;shift left | @70
|
96 | 54 | 0120022 | | sub | K1 | | | | ;less one for mask | @71
|
97 | 54+ | 0660003 | | lns | newchar | | | | ;new character |
|
98 | 55 | 0000003220000 | | o00 | numbits | / | srl | 0 | ;align with bitsheld | @72
|
99 | 56 | 0200003 | | exa | newchar | | | | ;exchange | @73
|
100 | 56+ | 0200001 | | exa | bitsheld | | | | ;likewise |
|
101 | 57 | 0000077320005 | | o00 | tmp1 | / | sll | 5 | ;re-align bitsheld | @74
|
102 | 58 | 0100003 | | add | newchar | | | | ;and add the new bits | @75
|
103 | 58+ | 1000055 | | jmp | .ret | | | | ;and return |
|
104 | 59 | | ; |
|
105 | 59 | | ; just enough combine with bitsheld and return |
|
106 | 59 | | ; |
|
107 | 59 | | .3: | ; | |
|
108 | 59 | 0740001 | | lzs | bitsheld | | | | ;get held bits | @76
|
109 | 59+ | 1320005 | | sll | 5 | | | | ;re-align |
|
110 | 60 | 0100003 | | add | newchar | | | | ;add new bits | @77
|
111 | 60+ | 1000055 | | jmp | .ret | | | | ;and return |
|
112 | 61 | | ; |
|
113 | 61 | | ; not enough still, pack with bitsheld and repeat |
|
114 | 61 | | ; |
|
115 | 61 | | .4: | ; | |
|
116 | 61 | 0600001 | | lod | bitsheld | | | | ;held bits | @78
|
117 | 61+ | 1320005 | | sll | 5 | | | | ;shift left |
|
118 | 62 | 0100003 | | add | newchar | | | | ;add new bits | @79
|
119 | 62+ | 0400001 | | sto | bitsheld | | | | ;store result |
|
120 | 63 | 1000057 | | jmp | .2 | | | | ;back for more | @80
|
121 | 63+ | | ; |
|
122 | 63+ | 0000000 | | o00 | 0 | | | | ; |
|
123 | 64 | | ;------------------------------------------------------------------ |
|
124 | 64 | | ; come here after skipping tape headers etc. |
|
125 | 64 | | ; |
|
126 | 64 | | Loader:: | ; | |
|
127 | 64 | | Loader: | ; | |
|
128 | 64 | 0540000 | | cls | numbits | | | | ; | @81
|
129 | 64+ | 0540001 | | cls | bitsheld | | | | ; |
|
130 | 65 | | | calln | , | | | | ; | @82
|
130+1 | 65 | 7300061000047 | | lnk | lnk1 | : | jmp | getchunk | |
|
131 | 66 | | | nop | | | | | ; | @83
|
131+1 | 66 | 1100102 | | jmp | .1 | | | | |
|
131+2 | 66+ | | .1: | ; | |
|
132 | 66+ | | .a: | ; | |
|
133 | 66+ | 0600021 | | lod | N5 | | | | ;=5 |
|
134 | 67 | | | calln | , | | | | ; | @84
|
134+1 | 67 | 7300061000047 | | lnk | lnk1 | : | jmp | getchunk | |
|
135 | 68 | 0400002 | | sto | ocdop | | | | ; | @85
|
136 | 68+ | 0060025 | | and | K15 | | | | ;=15 |
|
137 | 69 | 1700013040107 | | o17 | ocdop | / | jz | .SW88 | ;switch with 0-15 | @86
|
138 | 70 | 0600013100107 | | cla | ocdop | / | jmp | .SW88# | ;switch with 16-31 | @87
|
139 | 71 | | .SW88: | ; | |
|
140 | 71 | 1000330 | | jmp | .lderr | | | | ;+0 | @88
|
141 | 71+ | 1000127 | | jmp | .lod16 | | | | ;+16 |
|
142 | 72 | 1100247 | | jmp | .lod01 | | | | ;+1 | @89
|
143 | 72+ | 1000357 | | jmp | .lod17 | | | | ;+17 |
|
144 | 73 | 1100216 | | jmp | .lod02 | | | | ;+2 | @90
|
145 | 73+ | 1100165 | | jmp | .lod18 | | | | ;+18 |
|
146 | 74 | 1100237 | | jmp | .lod03 | | | | ;+3 | @91
|
147 | 74+ | 1000226 | | jmp | .lod19 | | | | ;+19 |
|
148 | 75 | 1100235 | | jmp | .lod04 | | | | ;+4 | @92
|
149 | 75+ | 1000330 | | jmp | .lderr | | | | ;+20 |
|
150 | 76 | 1100274 | | jmp | .lod05 | | | | ;+5 | @93
|
151 | 76+ | 1000330 | | jmp | .lderr | | | | ;+21 |
|
152 | 77 | 1100267 | | jmp | .lod06 | | | | ;+6 | @94
|
153 | 77+ | 1100325 | | jmp | .lod22 | | | | ;+22 |
|
154 | 78 | 1000266 | | jmp | .lod07 | | | | ;+7 | @95
|
155 | 78+ | 1100312 | | jmp | .lod23 | | | | ;+23 |
|
156 | 79 | 1000225 | | jmp | .lod08 | | | | ;+8 | @96
|
157 | 79+ | 1100254 | | jmp | .lod24 | | | | ;+24 |
|
158 | 80 | 1000213 | | jmp | .lod09 | | | | ;+9 | @97
|
159 | 80+ | 1000227 | | jmp | .lod25 | | | | ;+25 |
|
160 | 81 | 1000244 | | jmp | .lod10 | | | | ;+10 | @98
|
161 | 81+ | 1000320 | | jmp | .lod26 | | | | ;+26 |
|
162 | 82 | 1100304 | | jmp | .lod11 | | | | ;+11 | @99
|
163 | 82+ | 1000330 | | jmp | .lderr | | | | ;+27 |
|
164 | 83 | 1000230 | | jmp | .lod12 | | | | ;+12 | @100
|
165 | 83+ | 1000330 | | jmp | .lderr | | | | ;+28 |
|
166 | 84 | 1000331 | | jmp | .lod13 | | | | ;+13 | @101
|
167 | 84+ | 1000330 | | jmp | .lderr | | | | ;+29 |
|
168 | 85 | 1000330 | | jmp | .lderr | | | | ;+14 | @102
|
169 | 85+ | 1000330 | | jmp | .lderr | | | | ;+30 |
|
170 | 86 | 1000333 | | jmp | .lod15 | | | | ;+15 | @103
|
171 | 86+ | 1000330 | | jmp | .lderr | | | | ;+31 |
|
172 | 87 | | ; |
|
173 | 87 | | ; type 16 entry, set load point, then loop storing instructions |
|
174 | 87 | | ; |
|
175 | 87 | | .lod16: | ; | |
|
176 | 87 | | | calln | , | | | | ;recursive call | @104
|
176+1 | 87 | 7300031100102 | | lnk | lnk2 | : | jmp | Loader.a | |
|
177 | 88 | 1000330 | | jmp | .lderr | | | | ;direct return - illegal | @105
|
178 | 88+ | 0400007 | | sto | codept | | | | ;skip return, save code address |
|
179 | 89 | | .l16a: | ; | |
|
180 | 89 | | | calln | , | | | | ;recursive call | @106
|
180+1 | 89 | 7300031100102 | | lnk | lnk2 | : | jmp | Loader.a | |
|
181 | 90 | 1100163 | | jmp | .l16e | | | | ;direct return - add B-bit | @107
|
182 | 90+ | | .l16b: | ;skip return, normal instn | |
|
183 | 90+ | 0400010 | | sto | W25 | | | | ;save result |
|
184 | 91 | 0600030 | | lod | signbit | | | | ;=04000000000000 | @108
|
185 | 91+ | 0700007 | | las | codept | | | | ;add to codept, get prev value |
|
186 | 92 | 1020160 | | jn | .l16d | | | | ;odd address - top half | @109
|
187 | 92+ | 1000174 | | jmp | .l16f | | | | ;even address |
|
188 | 93 | | ; patch moved in-line |
|
189 | 93 | | =124 | |
|
190 | 124 | | .l16f: | ; | |
|
191 | 124 | 0600010 | | lod | W25 | | | | ;reload half-word | @124
|
192 | 124+ | 1000156 | | jmp | .l16c | | | | ;end of patch |
|
193 | 125 | | ; |
|
194 | 125 | | =110 | |
|
195 | 110 | | .l16c: | ; | |
|
196 | 110 | 0000036400000 | | o00 | codept | / | sto | 0 | ;store in bottom half | @110
|
197 | 111 | 1000131 | | jmp | .l16a | | | | ;continue | @111
|
198 | 111+ | | ; |
|
199 | 111+ | 0000000 | | o00 | 0 | | | | ; |
|
200 | 112 | | .l16d: | ; | |
|
201 | 112 | 0040000 | | o02 | 0 | | | | ;=1 | @112
|
202 | 112+ | 0560007 | | o27 | codept | | | | ;decrement code pointer |
|
203 | 113 | 0600010 | | lod | W25 | | | | ;reload half-word | @113
|
204 | 113+ | 1320024 | | sll | 20 | | | | ;shift to top end |
|
205 | 114 | 0000036500001 | | o00 | codept | / | ads | 1 | ;and add to current word | @114
|
206 | 115 | 1000131 | | jmp | .l16a | | | | ;continue | @115
|
207 | 115+ | | ; |
|
208 | 115+ | | .l16e: | ; | |
|
209 | 115+ | 0600032 | | lod | Bbit | | | | ;00 0/00 0 |
|
210 | 116 | 0000036500000 | | o00 | codept | / | ads | 0 | ;add in B bit | @116
|
211 | 117 | 1000131 | | jmp | .l16a | | | | ;continue | @117
|
212 | 117+ | | ; |
|
213 | 117+ | | ; type 18 entry, set base address, 8 bits of data, plus arbitrary value |
|
214 | 117+ | | ; |
|
215 | 117+ | | .lod18: | ; | |
|
216 | 117+ | 0600027 | | lod | K8 | | | | ;=8 |
|
217 | 118 | | | calln | , | | | | ;get base number | @118
|
217+1 | 118 | 7300061000047 | | lnk | lnk1 | : | jmp | getchunk | |
|
218 | 119 | 0100015 | | add | W30 | | | | ;display base | @119
|
219 | 119+ | 0400016 | | sto | W31 | | | | ;save while reading value |
|
220 | 120 | | | calln | , | | | | ;recursive call | @120
|
220+1 | 120 | 7300031100102 | | lnk | lnk2 | : | jmp | Loader.a | |
|
221 | 121 | 1000330 | | jmp | .lderr | | | | ;error return | @121
|
222 | 121+ | | | nop | | | | | ;base address now in acc |
|
222+1 | 121+ | 1000172 | | jmp | .1 | | | | |
|
222+2 | 122 | | .1: | ; | |
|
223 | 122 | 0000072400000 | | o00 | W31 | / | sto | 0 | ;store display address for block | @122
|
224 | 123 | 1000131 | | jmp | .l16a | | | | ;continue loading | @123
|
225 | 123+ | | ; |
|
226 | 123+ | 0000000 | | o00 | 0 | | | | ;padding |
|
227 | 124 | | ;------------------------------------------------------------------- |
|
228 | 124 | | =139 | |
|
229 | 139 | | ; |
|
230 | 139 | | ; type 9 entry, else jump?, swap patch to current address, store previous value |
|
231 | 139 | | ; |
|
232 | 139 | | .lod09: | ; | |
|
233 | 139 | 0600007 | | lod | codept | | | | ;code pointer | @139
|
234 | 139+ | 1120214 | | jn | .l9a | | | | ; |
|
235 | 140 | 0100031 | | add | W42 | | | | ;=03777777700001 | @140
|
236 | 140+ | | .l9a: | ; | |
|
237 | 140+ | 0100043 | | add | W52 | | | | ;=04000001100000 |
|
238 | 141 | 0000026177777 | | o00 | W22 | / | exa | -1 | ;exchange with patch list top | @141
|
239 | 142 | 1100132 | | jmp | .l16b | | | | ;store as normal instn | @142
|
240 | 142+ | | ; |
|
241 | 142+ | | ; type 2 entry, large relocatable instruction, |
|
242 | 142+ | | ; 6 bits op + 13 bits address + 3 bits relocation |
|
243 | 142+ | | ; |
|
244 | 142+ | | .lod02: | ; | |
|
245 | 142+ | 0600023 | | lod | K3 | | | | ;=3 set relocation size |
|
246 | 143 | | .l2a: | ; | |
|
247 | 143 | 0400020 | | sto | W33 | | | | ;save temporarily | @143
|
248 | 143+ | 0600036 | | lod | K19 | | | | ;=19 |
|
249 | 144 | | | calln | , | | | | ;get fn+address | @144
|
249+1 | 144 | 7300061000047 | | lnk | lnk1 | : | jmp | getchunk | |
|
250 | 145 | 0200020 | | exa | W33 | | | | ;save instruction | @145
|
251 | 145+ | | | nop | | | | | ; |
|
251+1 | 145+ | 1000222 | | jmp | .1 | | | | |
|
251+2 | 146 | | .1: | ; | |
|
252 | 146 | | .l2b: | ; | |
|
253 | 146 | | | calln | , | | | | ;get reloc number | @146
|
253+1 | 146 | 7300061000047 | | lnk | lnk1 | : | jmp | getchunk | |
|
254 | 147 | 0100015 | | add | W30 | | | | ;add base address | @147
|
255 | 147+ | 0200020 | | exa | W33 | | | | ;exchange instn |
|
256 | 148 | 0000102100000 | | o00 | W33 | / | add | 0 | ;add relocation term | @148
|
257 | 149 | | ; |
|
258 | 149 | | ; type 8 entry, return NULL instruction (acc=0) to outer sequence |
|
259 | 149 | | ; |
|
260 | 149 | | .lod08: | ; | |
|
261 | 149 | 0000033100001 | | o00 | lnk2 | / | jmp | 1# | ;skip return, skipping one inst | @149
|
262 | 150 | | ; |
|
263 | 150 | | ; type 19 entry, extra large instruction, 6 bits opcode + 13 bits address |
|
264 | 150 | | ; plus 8 bits relocation. |
|
265 | 150 | | ; |
|
266 | 150 | | .lod19: | ; | |
|
267 | 150 | 0600027 | | lod | K8 | | | | ;=8 | @150
|
268 | 150+ | 1000217 | | jmp | .l2a | | | | ; |
|
269 | 151 | | ; |
|
270 | 151 | | ; type 25 entry, give direct return to indicate B-bit modification |
|
271 | 151 | | ; |
|
272 | 151 | | .lod25: | ; | |
|
273 | 151 | 0000033000001 | | o00 | lnk2 | / | jmp | 1 | ;direct return, | @151
|
274 | 152 | | ; |
|
275 | 152 | | ; type 12 entry, patch jump instruction into switch list |
|
276 | 152 | | ; |
|
277 | 152 | | .lod12: | ; | |
|
278 | 152 | | | calln | , | | | | ;recursive call | @152
|
278+1 | 152 | 7300031100102 | | lnk | lnk2 | : | jmp | Loader.a | |
|
279 | 153 | 1000330 | | jmp | .lderr | | | | ; | @153
|
280 | 153+ | 0400002 | | sto | ocdop | | | | ;address where to patch |
|
281 | 154 | 0600007 | | lod | codept | | | | ;test code pointer | @154
|
282 | 154+ | 1120233 | | jn | .l12a | | | | ;adjust for alignment |
|
283 | 155 | 0100031 | | add | W42 | | | | ;=03777777700001 | @155
|
284 | 155+ | | .l12a: | ; | |
|
285 | 155+ | 0100043 | | add | W52 | | | | ;=04000001100000 jump instn |
|
286 | 156 | 0000012400000 | | o00 | ocdop | / | sto | 0 | ;patch jump into sw list | @156
|
287 | 157 | 1000131 | | jmp | .l16a | | | | ;continue | @157
|
288 | 157+ | | ; |
|
289 | 157+ | | ; type 4 entry, 19 bit value to be returned |
|
290 | 157+ | | ; as for type 2, but no relocation |
|
291 | 157+ | | ; |
|
292 | 157+ | | .lod04: | ; | |
|
293 | 157+ | 0600036 | | lod | K19 | | | | ;=19 |
|
294 | 158 | | | calln | , | | | | ;get the data | @158
|
294+1 | 158 | 7300061000047 | | lnk | lnk1 | : | jmp | getchunk | |
|
295 | 159 | 1000225 | | jmp | .lod08 | | | | ;and return it | @159
|
296 | 159+ | | ; |
|
297 | 159+ | | ; type 3 entry, 11 bit entry, fiddle with it and return |
|
298 | 159+ | | ; as for type 1, but no relocation |
|
299 | 159+ | | ; |
|
300 | 159+ | | .lod03: | ; | |
|
301 | 159+ | 0600041 | | lod | K11 | | | | ;=11 |
|
302 | 160 | | | calln | , | | | | ;get all 11 bits in one go | @160
|
302+1 | 160 | 7300061000047 | | lnk | lnk1 | : | jmp | getchunk | |
|
303 | 161 | 0400020 | | sto | W33 | | | | ;temp save | @161
|
304 | 161+ | 0060042 | | and | K31 | | | | ;=31 mask address part |
|
305 | 162 | 0360020 | | o17 | W33 | | | | ;store address, load fn | @162
|
306 | 162+ | 1320010 | | sll | 8 | | | | ;shift up to right place |
|
307 | 163 | 0100020 | | add | W33 | | | | ;add address | @163
|
308 | 163+ | 1000225 | | jmp | .lod08 | | | | ;normal return |
|
309 | 164 | | ; |
|
310 | 164 | | ; type 10 entry |
|
311 | 164 | | ; plant jump to codept in patchup list |
|
312 | 164 | | ; |
|
313 | 164 | | .lod10: | ; | |
|
314 | 164 | 0600007 | | lod | codept | | | | ;get code pointer | @164
|
315 | 164+ | 1120245 | | jn | .l10a | | | | ;adjust alignment |
|
316 | 165 | 0100031 | | add | W42 | | | | ;=03777777700001 | @165
|
317 | 165+ | | .l10a: | ; | |
|
318 | 165+ | 0100043 | | add | W52 | | | | ;=04000001100000 |
|
319 | 166 | 2200026377777 | | inc | W22 | / | sto | -1 | ;plant in patchup list | @166
|
320 | 167 | 1100102 | | jmp | Loader.a | | | | ;and continue | @167
|
321 | 167+ | | ; |
|
322 | 167+ | | ; type 1 entry, 6 bits fn, 5 bits address, 3 bits relocation |
|
323 | 167+ | | ; |
|
324 | 167+ | | .lod01: | ; | |
|
325 | 167+ | 0600041 | | lod | K11 | | | | ;=11 size of fn+address |
|
326 | 168 | | | calln | , | | | | ;get fn+address in one go | @168
|
326+1 | 168 | 7300061000047 | | lnk | lnk1 | : | jmp | getchunk | |
|
327 | 169 | 0400020 | | sto | W33 | | | | ;temp save | @169
|
328 | 169+ | 0060042 | | and | K31 | | | | ;=31, mask off address part (5 bits) |
|
329 | 170 | 0360020 | | o17 | W33 | | | | ;subtract from original | @170
|
330 | 170+ | 1320010 | | sll | 8 | | | | ;shift op-code into F2 position |
|
331 | 171 | 0500020 | | ads | W33 | | | | ;add address part | @171
|
332 | 171+ | 0600023 | | lod | K3 | | | | ;=3 |
|
333 | 172 | 1000222 | | jmp | .l2b | | | | ;join up with type 2 | @172
|
334 | 172+ | | ; |
|
335 | 172+ | | ; type 24 entry, instruction ref, 6 bits opcode, followed by two recursive |
|
336 | 172+ | | ; sequences which are combined into an instruction pair. |
|
337 | 172+ | | ; store in constant table, combine address of constant with opcode |
|
338 | 172+ | | ; and store that as normal instruction |
|
339 | 172+ | | ; |
|
340 | 172+ | | .lod24: | ; | |
|
341 | 172+ | 0040021 | | o02 | N5 | | | | ;=5+1=>6 bits needed |
|
342 | 173 | | | calln | , | | | | ;get opcode | @173
|
342+1 | 173 | 7300061000047 | | lnk | lnk1 | : | jmp | getchunk | |
|
343 | 174 | 1320015 | | sll | 13 | | | | ;shift left 13 | @174
|
344 | 174+ | 0400010 | | sto | W25 | | | | ;save it |
|
345 | 175 | | | calln | , | | | | ;recursive call - F2N2 | @175
|
345+1 | 175 | 7300031100102 | | lnk | lnk2 | : | jmp | Loader.a | |
|
346 | 176 | 1000303 | | jmp | .l24b | | | | ;direct return set B-bit? | @176
|
347 | 176+ | 0400016 | | sto | W31 | | | | ;skip, save result |
|
348 | 177 | | .l24a: | ; | |
|
349 | 177 | | | calln | , | | | | ;recursive calln - F1N1 part | @177
|
349+1 | 177 | 7300031100102 | | lnk | lnk2 | : | jmp | Loader.a | |
|
350 | 178 | 1000303 | | jmp | .l24b | | | | ;direct return, add B-bit | @178
|
351 | 178+ | 1320024 | | sll | 20 | | | | ;skip return, align top half |
|
352 | 179 | 0100016 | | add | W31 | | | | ;and add F2N2 | @179
|
353 | 179+ | 0000000 | | o00 | 0 | | | | ; |
|
354 | 180 | | | calln | , | | | | ;put result into constant table | @180
|
354+1 | 180 | 7300061000176 | | lnk | lnk1 | : | jmp | storeconst | |
|
355 | 181 | 0100010 | | add | W25 | | | | ;and add opcode to for instn | @181
|
356 | 181+ | 1100132 | | jmp | .l16b | | | | ;store as normal instn |
|
357 | 182 | | ; |
|
358 | 182 | | ; type 7 entry, cond jump, 2-bit modifier to change jump type, |
|
359 | 182 | | ; get jump instruction from patch list, modify and store as |
|
360 | 182 | | ; normal instruction. Don't pop patch list! |
|
361 | 182 | | ; |
|
362 | 182 | | .lod07: | ; | |
|
363 | 182 | 0000026577777 | | o00 | W22 | / | lod | -1 | ;load instruction from list | @182
|
364 | 183 | 1000271 | | jmp | .l6a | | | | ;and joint type 6 code | @183
|
365 | 183+ | | ; |
|
366 | 183+ | | ; type 6 entry, unstack most recent patch, add condition, and add to code. |
|
367 | 183+ | | ; As for type 7, except we pop the list. |
|
368 | 183+ | | ; |
|
369 | 183+ | | .lod06: | ; | |
|
370 | 183+ | 0040000 | | o02 | 0 | | | | ;=1 |
|
371 | 184 | 2700026600000 | | o27 | W22 | / | lod | 0 | ;decrement ptr and fetch | @184
|
372 | 185 | | .l6a: | ; | |
|
373 | 185 | 0400020 | | sto | W33 | | | | ;save the jump | @185
|
374 | 185+ | 0040022 | | o02 | K1 | | | | ;=1+1=>2 bits modifier |
|
375 | 186 | | | calln | , | | | | ;get jump modifier 0-3 | @186
|
375+1 | 186 | 7300061000047 | | lnk | lnk1 | : | jmp | getchunk | |
|
376 | 187 | 1320015 | | sll | 13 | | | | ;shift up appropriately | @187
|
377 | 187+ | 0100020 | | add | W33 | | | | ;and add to jump |
|
378 | 188 | 1100132 | | jmp | .l16b | | | | ;continue as normal instn | @188
|
379 | 188+ | | ; |
|
380 | 188+ | | ; type 5 entry, 6 bit opcode + 39 bit constant, store constant |
|
381 | 188+ | | ; and combine address with opcode to return instruction |
|
382 | 188+ | | ; |
|
383 | 188+ | | .lod05: | ; | |
|
384 | 188+ | 0040021 | | o02 | N5 | | | | ;=5+1=>6 |
|
385 | 189 | | | calln | , | | | | ;get 6 bits of data | @189
|
385+1 | 189 | 7300061000047 | | lnk | lnk1 | : | jmp | getchunk | |
|
386 | 190 | 1320015 | | sll | 13 | | | | ;shift up for opcode | @190
|
387 | 190+ | 0400020 | | sto | W33 | | | | ;and save temporarily |
|
388 | 191 | 0600026 | | lod | K39 | | | | ;=39, full word | @191
|
389 | 191+ | | | nop | | | | | ; |
|
389+1 | 191+ | 1000300 | | jmp | .1 | | | | |
|
389+2 | 192 | | .1: | ; | |
|
390 | 192 | | | calln | , | | | | ;get data word | @192
|
390+1 | 192 | 7300061000047 | | lnk | lnk1 | : | jmp | getchunk | |
|
391 | 193 | | | calln | , | | | | ;add to constant area if needed | @193
|
391+1 | 193 | 7300061000176 | | lnk | lnk1 | : | jmp | storeconst | |
|
392 | 194 | 0100020 | | add | W33 | | | | ;plus opcode | @194
|
393 | 194+ | 1000225 | | jmp | .lod08 | | | | ;return completed instruction |
|
394 | 195 | | ; |
|
395 | 195 | | .l24b: | ; | |
|
396 | 195 | 0600032 | | lod | Bbit | | | | ;00 0/00 0 | @195
|
397 | 195+ | 0500016 | | ads | W31 | | | | ; |
|
398 | 196 | 1000261 | | jmp | .l24a | | | | ; | @196
|
399 | 196+ | | ; |
|
400 | 196+ | | ; type 11 entry, 8-bit data (N), followed by N 39-bit constants |
|
401 | 196+ | | ; to be stored in constant table. |
|
402 | 196+ | | ; |
|
403 | 196+ | | .lod11: | ; | |
|
404 | 196+ | 0600027 | | lod | K8 | | | | ;=8 |
|
405 | 197 | | | calln | , | | | | ;get the number of consts | @197
|
405+1 | 197 | 7300061000047 | | lnk | lnk1 | : | jmp | getchunk | |
|
406 | 198 | 0420020 | | stn | W33 | | | | ;save it (negated) | @198
|
407 | 198+ | | .l11a: | ; | |
|
408 | 198+ | 0640020 | | lis | W33 | | | | ;load and increment count |
|
409 | 199 | 1140102 | | jz | Loader.a | | | | ;continue loading if finished | @199
|
410 | 199+ | 0600026 | | lod | K39 | | | | ;=39 |
|
411 | 200 | | | calln | , | | | | ;get full-word constant | @200
|
411+1 | 200 | 7300061000047 | | lnk | lnk1 | : | jmp | getchunk | |
|
412 | 201 | | | calln | , | | | | ;put it into constant area | @201
|
412+1 | 201 | 7300061000175 | | lnk | lnk1 | : | jmp | addconst | |
|
413 | 202 | 1100306 | | jmp | .l11a | | | | ;and repeat until done | @202
|
414 | 202+ | | ; |
|
415 | 202+ | | ; type 23 entry, 6-bit opcode, address from table loaded by type 11 |
|
416 | 202+ | | ; |
|
417 | 202+ | | .lod23: | ; | |
|
418 | 202+ | 0040021 | | o02 | N5 | | | | ;=5+1=>6 |
|
419 | 203 | | | calln | , | | | | ;get opcode | @203
|
419+1 | 203 | 7300061000047 | | lnk | lnk1 | : | jmp | getchunk | |
|
420 | 204 | 1320015 | | sll | 13 | | | | ;shift into place | @204
|
421 | 204+ | 0400020 | | sto | W33 | | | | ;save temporarily |
|
422 | 205 | 0040012 | | o02 | conlim | | | | ;address of last entry stored | @205
|
423 | 205+ | 0000000 | | o00 | 0 | | | | ; |
|
424 | 206 | | | calln | , | | | | ;add that to table | @206
|
424+1 | 206 | 7300061000176 | | lnk | lnk1 | : | jmp | storeconst | |
|
425 | 207 | 0100020 | | add | W33 | | | | ;add address to opcode | @207
|
426 | 207+ | 1000225 | | jmp | .lod08 | | | | ;and return that |
|
427 | 208 | | ; |
|
428 | 208 | | ; type 26 entry, two recursive items: address and fullword value |
|
429 | 208 | | ; patch address with value |
|
430 | 208 | | ; |
|
431 | 208 | | .lod26: | ; | |
|
432 | 208 | | | calln | , | | | | ;recursive call, get address | @208
|
432+1 | 208 | 7300031100102 | | lnk | lnk2 | : | jmp | Loader.a | |
|
433 | 209 | 1000330 | | jmp | .lderr | | | | ;error, crash | @209
|
434 | 209+ | 0400010 | | sto | W25 | | | | ;save address |
|
435 | 210 | | | calln | , | | | | ;recursive call, get value | @210
|
435+1 | 210 | 7300031100102 | | lnk | lnk2 | : | jmp | Loader.a | |
|
436 | 211 | 1000330 | | jmp | .lderr | | | | ;error, crash | @211
|
437 | 211+ | | | nop | | | | | ; |
|
437+1 | 211+ | 1000324 | | jmp | .1 | | | | |
|
437+2 | 212 | | .1: | ; | |
|
438 | 212 | 0000042400000 | | o00 | W25 | / | sto | 0 | ;store in previous address | @212
|
439 | 213 | 1000131 | | jmp | .l16a | | | | ;and continue | @213
|
440 | 213+ | | ; |
|
441 | 213+ | | ; type 22 entry, set sumchk value (39 bits) |
|
442 | 213+ | | ; |
|
443 | 213+ | | .lod22: | ; | |
|
444 | 213+ | 0600026 | | lod | K39 | | | | ;=39 |
|
445 | 214 | | | calln | , | | | | ;get 39 bit value | @214
|
445+1 | 214 | 7300061000047 | | lnk | lnk1 | : | jmp | getchunk | |
|
446 | 215 | 0400004 | | sto | sumchk | | | | ;save as sumcheck | @215
|
447 | 215+ | 1100102 | | jmp | Loader.a | | | | ;back for more entries |
|
448 | 216 | | ; |
|
449 | 216 | | ; error in owncode, invalid opcode or other item |
|
450 | 216 | | ; |
|
451 | 216 | | .lderr: | ; | |
|
452 | 216 | 1700001 | | otp | 1 | | | | ;error indicator | @216
|
453 | 216+ | 1000330 | | jmp | .lderr | | | | ;loop, punching 1's |
|
454 | 217 | | ; |
|
455 | 217 | | ; type 13 entry, test sumcheck |
|
456 | 217 | | ; |
|
457 | 217 | | .lod13: | ; | |
|
458 | 217 | 0600004 | | lod | sumchk | | | | ;test sumcheck, should be zero | @217
|
459 | 217+ | 1140102 | | jz | Loader.a | | | | ;OK< continue loading |
|
460 | 218 | | .lderr2: | ; | |
|
461 | 218 | 1700002 | | otp | 2 | | | | ;error indicator | @218
|
462 | 218+ | 1000332 | | jmp | .lderr2 | | | | ;loop, punching 2's |
|
463 | 219 | | ; |
|
464 | 219 | | ; type 15 entry, end of program, tidy up and quit. |
|
465 | 219 | | ; |
|
466 | 219 | | .lod15: | ; | |
|
467 | 219 | 0040011 | | o02 | contop | | | | ;start of program | @219
|
468 | 219+ | 0100040 | | add | ep6skel | | | | ;=
| 469 | 220 | 0400006 | | sto | ep6 | | | | ;set entry point jump | @220
| 470 | 220+ | 0040023 | | o02 | K3 | | | | ;=3+1=>4 |
| 471 | 221 | 0400075 | | sto | Ndigits | | | | ;digits(4) | @221
| 472 | 221+ | | | clo | | | | | ;reset overflow (just in case) |
| 472+1 | 221+ | 1060336 | | jo | .1 | | | | |
| 472+2 | 222 | | .1: | ; | |
| 473 | 222 | 1100352 | | jmp | L234P | | | | ;jump to patch | @222
| 474 | 222+ | | =234+ | |
| 475 | 234+ | | L234P: | ;patch moved in-line | |
| 476 | 234+ | 0600356 | | lod | .TPdev | | | | ; |
| 477 | 235 | 0400077 | | sto | outdev | | | | ;set output device=printer | @235
| 478 | 235+ | 0600355 | | lod | W237 | | | | ; |
| 479 | 236 | 0400076 | | sto | prtfmt | | | | ;set format for printing | @236
| 480 | 236+ | 1100336 | | jmp | L222P | | | | ;end of patch |
| 481 | 237 | | ; |
| 482 | 237 | | =222+ | |
| 483 | 222+ | | L222P: | ;resume normal flow | |
| 484 | 222+ | 0600044 | | lod | fsmsgp | | | | ; 'free store ' |
| 485 | 223 | | | calln | , | | | | ;output string | @223
| 485+1 | 223 | 7300005100012 | | lnk | T2Link | : | jmp | OutStr | |
| 486 | 224 | 1714033 | | otp | TP+FS | | | | ; | @224
| 487 | 224+ | 1714006 | | otp | TP+'=' | | | | ; |
| 488 | 225 | 0600035 | | lod | lowmem | | | | ;=Lomem | @225
| 489 | 225+ | 0400031 | | sto | lomem | | | | ; |
| 490 | 226 | | | calln | , | | | | ;print integer | @226
| 490+1 | 226 | 7300005100022 | | lnk | T2Link | : | jmp | OutInt | |
| 491 | 227 | 1714015 | | otp | TP+'-' | | | | ; | @227
| 492 | 227+ | 0600012 | | lod | conlim | | | | ; |
| 493 | 228 | 0400033 | | sto | himem | | | | ;2064150000000 | @228
| 494 | 228+ | 0000000 | | o00 | 0 | | | | ; |
| 495 | 229 | | | calln | , | | | | ;print integer | @229
| 495+1 | 229 | 7300005100022 | | lnk | T2Link | : | jmp | OutInt | |
| 496 | 230 | 0600033 | | lod | K12 | | | | ;=12 | @230
| 497 | 230+ | 0420006 | | stn | lnk2 | | | | ; |
| 498 | 231 | | L231: | ; | |
| 499 | 231 | 1714036 | | otp | TP+LF | | | | ;output 12 line feeds | @231
| 500 | 231+ | 0640006 | | lis | lnk2 | | | | ; |
| 501 | 232 | 1020347 | | jn | L231 | | | | ; | @232
| 502 | 232+ | 1714035 | | otp | TP+CR | | | | ; add carriage return |
| 503 | 233 | | | calln | , | | | | ;warbling pause | @233
| 503+1 | 233 | 7300005000035 | | lnk | T2Link | : | jmp | DWaitEnt | |
| 504 | 234 | 1000006 | | jmp | ep6 | | | | ;run program? | @234
| 505 | 234+ | | ; |
| 506 | 234+ | | =237 | |
| 507 | 237 | 0000004000000 | W237: | +0000004000000 | ;00 1:00 0 print format | @237
| 508 | 238 | 0000000014000 | .TPdev: | +TP | ; | @238
| 509 | 239 | | ; |
| 510 | 239 | | ; type 17 entry, define dimensions of program and tables |
| 511 | 239 | | ; |
| 512 | 239 | | .lod17: | ; | |
| 513 | 239 | 0600035 | | lod | lowmem | | | | ;=Lomem | @239
| 514 | 239+ | 0120022 | | sub | K1 | | | | ;=1 |
| 515 | 240 | 0400015 | | sto | W30 | | | | ;base pointer | @240
| 516 | 240+ | 0040033 | | o02 | K12 | | | | ;=12+1=>13 |
| 517 | 241 | | | calln | , | | | | ;getchunk(13) -> code size | @241
| 517+1 | 241 | 7300061000047 | | lnk | lnk1 | : | jmp | getchunk | |
| 518 | 242 | 0400016 | | sto | W31 | | | | ;store code size | @242
| 519 | 242+ | 0040033 | | o02 | K12 | | | | ;=12+1=>13 |
| 520 | 243 | | | calln | , | | | | ;getchunk(13) -> vars size | @243
| 520+1 | 243 | 7300061000047 | | lnk | lnk1 | : | jmp | getchunk | |
| 521 | 244 | 0400020 | | sto | W33 | | | | ;store vars size | @244
| 522 | 244+ | 0600034 | | lod | K4K | | | | ;=4096 |
| 523 | 245 | 0430000 | | stn | ExtMem | | | | ;1st word of extended memory | @245
| 524 | 245+ | 0610000 | | lod | ExtMem | | | | ;for 4K m/c, 0; for 8K m/c -4K |
| 525 | 246 | 1000414 | | jmp | .268 | | | | ;patch, | @246
| 526 | 246+ | | ; |
| 527 | 246+ | | ; patch moved in-line |
| 528 | 246+ | | ExtMem= ëÿ¿P/@hëÿ¿hX@Ø ôÿ¿ÿ4096 | ; start of extended memory | |
| 529 | 246+ | | =268 | |
| 530 | 268 | | .268: | ; | |
| 531 | 268 | 0100034 | | add | K4K | | | | ;get adjustment, 0K / 4K | @268
| 532 | 268+ | 0160013 | | bus | Memtop | | | | ;=memtop : top of free area - adjustment |
| 533 | 269 | 1100366 | | jmp | .246P | | | | ;return from patch | @269
| 534 | 269+ | | ; |
| 535 | 269+ | | ; resume original code |
| 536 | 269+ | | =246+ | |
| 537 | 246+ | | .246P: | ; | |
| 538 | 246+ | 0120020 | | sub | W33 | | | | ;less vars size |
| 539 | 247 | 0000066400002 | | o00 | W30 | / | sto | 2 | ;variables base | @247
| 540 | 248 | 0120016 | | sub | W31 | | | | ;less code size | @248
| 541 | 248+ | | | nop | | | | | ; |
| 541+1 | 248+ | 1000371 | | jmp | .1 | | | | |
| 541+2 | 249 | | .1: | ; | |
| 542 | 249 | 0000066400001 | | o00 | W30 | / | sto | 1 | ;code base address | @249
| 543 | 250 | 0120022 | | sub | K1 | | | | ;code base - 1 | @250
| 544 | 250+ | 0400011 | | sto | contop | | | | ;top of constant table |
| 545 | 251 | 2000052540000 | | sto | conlim | / | cls | 0 | ;constant pointer, set entry zero | @251
| 546 | 252 | 0600012 | | lod | T2BASE | | | | ;tape2 base address | @252
| 547 | 252+ | 0000000 | | o00 | 0 | | | | ; |
| 548 | 253 | 0000066400004 | | o00 | W30 | / | sto | 4 | ;run-time support base | @253
| 549 | 254 | | | nop | | | | | ; | @254
| 549+1 | 254 | 1100376 | | jmp | .1 | | | | |
| 549+2 | 254+ | | .1: | ; | |
| 550 | 254+ | 0600027 | | lod | K8 | | | | ;=8 |
| 551 | 255 | | | calln | , | | | | ;getchunk(8) size of display area | @255
| 551+1 | 255 | 7300061000047 | | lnk | lnk1 | : | jmp | getchunk | |
| 552 | 256 | 0100035 | | add | lowmem | | | | ;=Lomem bottom of free memory | @256
| 553 | 256+ | 0400005 | | sto | W22 | | | | ;address of 1st base area |
| 554 | 257 | 0440005 | | inc | W22 | | | | ;+1 | @257
| 555 | 257+ | 0600027 | | lod | K8 | | | | ;=8 |
| 556 | 258 | | | calln | , | | | | ;getchunk(8) size of second base area | @258
| 556+1 | 258 | 7300061000047 | | lnk | lnk1 | : | jmp | getchunk | |
| 557 | 259 | 0100005 | | add | W22 | | | | ;+first base address | @259
| 558 | 259+ | 0400013 | | sto | W28 | | | | ;address of second base area |
| 559 | 260 | 0120012 | | sub | conlim | | | | ;check against top-down area | @260
| 560 | 260+ | 1120102 | | jn | Loader.a | | | | ;ok, continue |
| 561 | 261 | 1000014 | | jmp | SpaceOflo | | | | ;space oflo? | @261
| 562 | 261+ | | ; |
| 563 | 261+ | 0000000 | | o00 | 0 | | | | ; |
| 564 | 262 | | ; |
| 565 | 262 | | ; loader entry point |
| 566 | 262 | | ; |
| 567 | 262 | | Loadit:: | ; | |
| 568 | 262 | | Loadit: | ; | |
| 569 | 262 | 1620000 | | inp | 0 | | | | ; read tape | @262
| 570 | 262+ | 1040406 | | jz | Loadit | | | | ; skip leading blanks |
| 571 | 263 | | .1: | ; | |
| 572 | 263 | 1600023714000 | | stc | 4 | / | otp | TP | ; copy heading | @263
| 573 | 264 | 1620000 | | inp | 0 | | | | ; get next char | @264
| 574 | 264+ | | | jnz | | | | | ; repeat loop until null |
| 574+1 | 264+ | 1140411 | | jz | .1 | | | | |
| 574+2 | 265 | 1000407 | | jmp | Loadit.1 | | | | |
| 574+3 | 265+ | | .1: | ; | |
| 575 | 265+ | | ; |
| 576 | 265+ | | ; heading copied, skip more blanks |
| 577 | 265+ | | .2: | ; | |
| 578 | 265+ | 1620000 | | inp | 0 | | | | ; read tape |
| 579 | 266 | 1140411 | | jz | .2 | | | | ; skip more blanks | @266
| 580 | 266+ | 0140000 | | cla | 0 | | | | ; clear acc |
| 581 | 267 | 1620000 | | inp | 0 | | | | ; read next char | @267
| 582 | 267+ | 1000100 | | jmp | Loader | | | | ;-> |
| 583 | 268 | | ;------------------------------------------------------------------- |
| 584 | 268 | | ; addconst |
| 585 | 268 | | ; add item to constant area, regardless |
| 586 | 268 | | ; |
| 587 | 268 | | =125 | |
| 588 | 125 | | addconst: | ; | |
| 589 | 125 | 0400002 | | sto | ocdop | | | | ;store item | @125
| 590 | 125+ | 1000204 | | jmp | storeconst.2 | | | | ;branch into storeconst after scan |
| 591 | 126 | | ;------------------------------------------------------------------- |
| 592 | 126 | | ; storeconst |
| 593 | 126 | | ; see if const (in ACC) is already in table, if so return address, |
| 594 | 126 | | ; otherwise add to table, checking for space oflo. return address |
| 595 | 126 | | ; of new item. |
| 596 | 126 | | ; |
| 597 | 126 | | storeconst:: | ; | |
| 598 | 126 | | storeconst: | ; | |
| 599 | 126 | 0400002 | | sto | ocdop | | | | ;temp store for value | @126
| 600 | 126+ | 0040000 | | o02 | 0 | | | | ;=1 |
| 601 | 127 | 0160011 | | bus | contop | | | | ;top of constant area | @127
| 602 | 127+ | 0400003 | | sto | newchar | | | | ;working pointer |
| 603 | 128 | | .1: | ; | |
| 604 | 128 | 0000016600001 | | o00 | newchar | / | lod | 1 | ;check existing entries | @128
| 605 | 129 | 0120002 | | sub | ocdop | | | | ;matching entry? | @129
| 606 | 129+ | 1140211 | | jz | .3 | | | | ;yes, ->return address of match |
| 607 | 130 | 0040000 | | o02 | 0 | | | | ;=1 | @130
| 608 | 130+ | 0760003 | | o37 | newchar | | | | ;decrement ptr |
| 609 | 131 | 0160012 | | bus | conlim | | | | ;start of table | @131
| 610 | 131+ | 1020200 | | jn | .1 | | | | ;no, continue loop |
| 611 | 132 | | .2: | ; | |
| 612 | 132 | 0040000 | | o02 | 0 | | | | ;=1 | @132
| 613 | 132+ | 0760012 | | o37 | conlim | | | | ;extend table down |
| 614 | 133 | 0120013 | | sub | W28 | | | | ;check for overlap | @133
| 615 | 133+ | 1020014 | | jn | SpaceOflo | | | | ;space oflo? |
| 616 | 134 | 0600002 | | lod | ocdop | | | | ;get new item | @134
| 617 | 134+ | 0000000 | | o00 | 0 | | | | |
| 618 | 135 | 0000052400001 | | o00 | conlim | / | sto | 1 | ;store in table | @135
| 619 | 136 | 0040012 | | o02 | conlim | | | | ;table address+1 | @136
| 620 | 136+ | 1000212 | | jmp | .4 | | | | ;return |
| 621 | 137 | | ; |
| 622 | 137 | 0000000 | | o00 | 0 | | | | ; | @137
| 623 | 137+ | | ; |
| 624 | 137+ | | .3: | ; | |
| 625 | 137+ | 0040003 | | o02 | newchar | | | | ;table pointer+1 |
| 626 | 138 | | .4: | ; | |
| 627 | 138 | 0000063000001 | | o00 | lnk1 | / | jmp | 1 | ;and return | @138
| 628 | 139 | | ;------------------------------------------------------------------- |
| 629 | 139 | | ; end of loader, define bottom of free area: |
| 630 | 139 | | ; |
| 631 | 139 | | Lomem= ëÿ¿P/@hëÿ¿hX@Ø ôÿ¿ÿ270 | ; | |
| |