Line | Address | Object Code
| Label | F1 | N1 | B | F2 | N2 | Comments | Check
|
---|
1 | 0 | | ; tape1.d/packword.t2 |
|
2 | 0 | | ;-------------------- |
|
3 | 0 | | =380 | |
|
4 | 380 | | ; get next char, multiple return via 387 |
|
5 | 380 | | ; |
|
6 | 380 | | getchar:: | ; | |
|
7 | 380 | 0000000000000 | currchar: | +0 | ; | @380
|
8 | 381 | 0000000000000 | ipshift: | +0 | ; 0/32 depending on shift |
|
9 | 382 | 0000000000011 | ident: | +9 | ; | @382
|
10 | 383 | 0000000000000 | decscale: | +0 | ; |
|
11 | 384 | 0000000000010 | token: | +8 | ; | @384
|
12 | 385 | 0000000000000 | | +0 | ; |
|
13 | 386 | 0000000000000 | incomment: | +0 | ; | @386
|
14 | 387 | | =388 | |
|
15 | 388 | | ; |
|
16 | 388 | | .ent: | ; | |
|
17 | 388 | 0140000 | | cla | 0 | | | | ;clear acc | @388
|
18 | 388+ | | .0: | ; | |
|
19 | 388+ | 1620000 | | inp | 0 | | | | ;input next character |
|
20 | 389 | | getchara.ent: | ; | |
|
21 | 389 | 2002763000615 | | sto | currchar | / | jmp | .sw | ;switch (modified below) | @389
|
22 | 390 | | ; |
|
23 | 390 | | ; letter shift, set modifier and switch |
|
24 | 390 | | ; |
|
25 | 390 | 0600614 | .ls: | lod | K32 | | | | ;=32 | @390
|
26 | 390+ | 0400575 | | sto | ipshift | | | | ;store modifier |
|
27 | 391 | 0600613 | | lod | .lsw | | | | ;letters switch | @391
|
28 | 391+ | | .1: | ; | |
|
29 | 391+ | 0400605 | | sto | getchara.ent | | | | ;modify switch instn |
|
30 | 392 | 1000604 | | jmp | .ent | | | | ;back for next char | @392
|
31 | 392+ | | ; |
|
32 | 392+ | | ; figure shift, clear modifer, reset switch |
|
33 | 392+ | | ; |
|
34 | 392+ | 0540575 | .fs: | cls | ipshift | | | | ;modifier = 0 |
|
35 | 393 | 0600612 | | lod | .fsw | | | | ;figures switch | @393
|
36 | 393+ | 1100607 | | jmp | .1 | | | | ; |
|
37 | 394 | | ; |
|
38 | 394 | | ; switch instructions for above |
|
39 | 394 | | ;W394: |
|
40 | 394 | 2002763000615 | .fsw: | sto | currchar | / | jmp | .sw | ;for figures | @394
|
41 | 395 | 2002763100615 | .lsw: | sto | currchar | / | jmp | .sw# | ;for letters |
|
42 | 396 | 0000000000040 | K32: | +32 | ;modifier for letters | @396
|
43 | 397 | | ; |
|
44 | 397 | | ; jump table - 32 entries, one per character |
|
45 | 397 | | .sw: | ; | |
|
46 | 397 | 4403021100604 | | jmp | .0 | : | jmp | .0 | ;null - back for more | @397
|
47 | 398 | 4003275000655 | | jmp | .d | : | jmp | .l | ; 1 A |
|
48 | 399 | 4003275000655 | | jmp | .d | : | jmp | .l | ; 2 B |
|
49 | 400 | 4003271000655 | | jmp | .p1 | : | jmp | .l | ; * C |
|
50 | 401 | 4003275000655 | | jmp | .d | : | jmp | .l | ; 4 D |
|
51 | 402 | 4042545000655 | | jmp | .dol | : | jmp | .l | ; $ E |
|
52 | 403 | 4003271000655 | | jmp | .p1 | : | jmp | .l | ; = F |
|
53 | 404 | 4003275000655 | | jmp | .d | : | jmp | .l | ; 7 G |
|
54 | 405 | 4003275000655 | | jmp | .d | : | jmp | .l | ; 8 H |
|
55 | 406 | 4003305000655 | | jmp | .p2 | : | jmp | .l | ; ' I |
|
56 | 407 | 4003271000655 | | jmp | .p1 | : | jmp | .l | ; , J |
|
57 | 408 | 4003305000655 | | jmp | .p2 | : | jmp | .l | ; + K |
|
58 | 409 | 4003271000655 | | jmp | .p1 | : | jmp | .l | ; : L |
|
59 | 410 | 4003305000655 | | jmp | .p2 | : | jmp | .l | ; - M |
|
60 | 411 | 4403321000655 | | jmp | .np | : | jmp | .l | ; . N |
|
61 | 412 | 4003271000655 | | jmp | .p1 | : | jmp | .l | ; % O |
|
62 | 413 | 4003275000655 | | jmp | .d | : | jmp | .l | ; 0 P |
|
63 | 414 | 4003305000655 | | jmp | .p2 | : | jmp | .l | ; ( Q |
|
64 | 415 | 4003305000655 | | jmp | .p2 | : | jmp | .l | ; ) R |
|
65 | 416 | 4003275000655 | | jmp | .d | : | jmp | .l | ; 3 S |
|
66 | 417 | 4003271000655 | | jmp | .p1 | : | jmp | .l | ; ? T |
|
67 | 418 | 4003275000655 | | jmp | .d | : | jmp | .l | ; 5 U |
|
68 | 419 | 4003275000655 | | jmp | .d | : | jmp | .l | ; 6 V |
|
69 | 420 | 4003271000655 | | jmp | .p1 | : | jmp | .l | ; / W |
|
70 | 421 | 4403321000655 | | jmp | .np | : | jmp | .l | ; @ X |
|
71 | 422 | 4003275000655 | | jmp | .d | : | jmp | .l | ; 9 Y |
|
72 | 423 | 4003305000655 | | jmp | .p2 | : | jmp | .l | ; # Z |
|
73 | 424 | 4403041100610 | | jmp | .fs | : | jmp | .fs | ; FS |
|
74 | 425 | 4003311000662 | | jmp | .lay | : | jmp | .lay | ; SP |
|
75 | 426 | 4003311000662 | | jmp | .lay | : | jmp | .lay | ; CR |
|
76 | 427 | 4003311000662 | | jmp | .lay | : | jmp | .lay | ; LF |
|
77 | 428 | 4003031000606 | | jmp | .ls | : | jmp | .ls | ; LS |
|
78 | 429 | | ; |
|
79 | 429 | | ; 387 contains return address |
|
80 | 429 | | ; |
|
81 | 429 | 0003017000001 | .l: | o00 | .lnk | / | jmp | 1 | ;letters ret1 | @429
|
82 | 430 | 0003017100001 | .p1: | o00 | .lnk | / | jmp | 1# | ; ; = , : % ? / ret1a | @430
|
83 | 431 | 0003017000002 | .d: | o00 | .lnk | / | jmp | 2 | ;digits ret2 | @431
|
84 | 432 | 0003017100002 | .nr: | o00 | .lnk | / | jmp | 2# | ; @. ret2a @432 |
|
85 | 433 | 0003017000003 | .p2: | o00 | .lnk | / | jmp | 3 | ; ' + - ( ) £ ret3 | @433
|
86 | 434 | 0003017100003 | .lay: | o00 | .lnk | / | jmp | 3# | ; SP, CR, LF ret3a | @434
|
87 | 435 | | ;-----patch moved inline |
|
88 | 435 | | =4441 | |
|
89 | 4441 | | ; from switch 397[5] ; '$' |
|
90 | 4441 | | .dol: | ; | |
|
91 | 4441 | 0600603 | | lod | .lnk | | | | ; return address | @4441
|
92 | 4441+ | 0130533 | | sub | .addr | | | | ; check against call |
|
93 | 4442 | 0062222 | | and | K8191 | | | | ;=8191 ignore top end rubbish | @4442
|
94 | 4442+ | 1040655 | | jz | .l | | | | ; treat as for letters |
|
95 | 4443 | 1000663 | | jmp | .cont | | | | ; pseudo-no-op | @4443
|
96 | 4443+ | | ; |
|
97 | 4443+ | 0006771 | .addr: | 00 | W3577 | | | | ; address used above |
|
98 | 4444 | | ; |
|
99 | 4444 | | =435 | |
|
100 | 435 | | ; from 4443 ($ patch) |
|
101 | 435 | | .cont: | ; | |
|
102 | 435 | | | call | | | | | ; | @435
|
102+1 | 435 | 7304221001107 | | lnk | L583.lnk | : | jmp | L583.ent | |
|
103 | 436 | 1000604 | | jmp | .ent | | | | ;re-enter get next char | @436
|
104 | 436+ | | ; |
|
105 | 436+ | | .np: | ; | |
|
106 | 436+ | 0600602 | | lod | incomment | | | | ; @ . scanning comment @436+ |
|
107 | 437 | 1040660 | | jz | .nr | | | | ;yes, -> | @437
|
108 | 437+ | 1000604 | | jmp | .ent | | | | ; | @437+
|
109 | 438 | | ; |
|
110 | 438 | | ; |
|
111 | 438 | | =4465 | |
|
112 | 4465 | | getchar2.ent: | ; | |
|
113 | 4465 | 0600574 | | lod | currchar | | | | ;get previous character | @4465
|
114 | 4465+ | 1000605 | | jmp | getchara.ent | | | | ;re-process character type |
|
115 | 4466 | | ;-------------------------------------------------------------------- |
|
116 | 4466 | | =4525 | |
|
117 | 4525 | | .ipnorm: | ; | |
|
118 | 4525 | 0600001620000 | | cla | 0 | : | inp | 0 | ; planted in getchar | @4525
|
119 | 4526 | | .iptrace: | ; | |
|
120 | 4526 | 0600001110657 | | cla | 0 | : | jmp | .tracer | ; also planted in getchar | @4526
|
121 | 4527 | | | pad | | | | | ; above jumps to following: |
|
121+1 | 4527 | 0000000 | | 00 | 0 | | | | |
|
122 | 4527+ | | ; |
|
123 | 4527+ | | .tracer: | ; | |
|
124 | 4527+ | 1620000 | | inp | 0 | | | | ; input next character |
|
125 | 4528 | 2002763714000 | | sto | currchar | / | otp | TP | ; punch to tty | @4528
|
126 | 4529 | 1000605 | | jmp | getchara.ent | | | | ; and back to getchar |
|
127 | 4529+ | | ; |
|
128 | 4529+ | | ;---------------------------------------------------------------------- |
|
129 | 4529+ | | ; ep=439 lnk=438 mult return? |
|
130 | 4529+ | | ; pack up to 6 chars into word |
|
131 | 4529+ | | ; |
|
132 | 4529+ | | =439 | |
|
133 | 439 | | packword:: | ; | |
|
134 | 439 | | ; |
|
135 | 439 | | .ent: | ; | |
|
136 | 439 | 1100671 | | jmp | .2 | | | | ;-> | @439
|
137 | 439+ | | ; |
|
138 | 439+ | | ; from 458+ |
|
139 | 439+ | | =441+ | |
|
140 | 441+ | | .2: | ; | |
|
141 | 441+ | 0600574 | | lod | currchar | | | | ;get held char |
|
142 | 442 | | | call | | | | | ; | @442
|
142+1 | 442 | 7303015000605 | | lnk | getchara.lnk | : | jmp | getchara.ent | |
|
143 | 443 | 1000712 | | jmp | .id1 | | | | ; letters |
|
144 | 443+ | 1000700 | | jmp | .pn1 | | | | ; ; = , : % ? / |
|
145 | 444 | 1001110 | | jmp | .number | | | | ; digits | @444
|
146 | 444+ | 1001161 | | jmp | .fpp | | | | ; @. punctuation in reals |
|
147 | 445 | 1000676 | | jmp | .pn2 | | | | ; ' + - ( ) £ |
|
148 | 445+ | 1000604 | | jmp | getchar.ent | | | | ;getchar: SP, CR, LF |
|
149 | 446 | | ; |
|
150 | 446 | | ; ; punct 2 |
|
151 | 446 | | .pn2: | ; | |
|
152 | 446 | 0540574 | | cls | currchar | | | | ;clear curr char | @446
|
153 | 446+ | 0400576 | | sto | ident | | | | ;store in ident |
|
154 | 447 | 0003333000003 | | 00 | .lnk | / | jmp | 3 | ; return+3 | @447
|
155 | 448 | | ; |
|
156 | 448 | | ; ; punct 1 |
|
157 | 448 | | .pn1: | ; | |
|
158 | 448 | 0400576 | | sto | ident | | | | ;store in ident | @448
|
159 | 448+ | | | clo | | | | | ;clear oflo |
|
159+1 | 448+ | 1060701 | | jo | .1 | | | | |
|
159+2 | 449 | | .1: | ; | |
|
160 | 449 | | | call | | | | | ; | @449
|
160+1 | 449 | 7303015000604 | | lnk | getchar.lnk | : | jmp | getchar.ent | |
|
161 | 450 | 1000710 | | jmp | .op1 | | | | ;letter | @450
|
162 | 450+ | 1000705 | | jmp | .op2 | | | | ;punct1 |
|
163 | 451 | 1000710 | | jmp | .op1 | | | | ;digit | @451
|
164 | 451+ | 1000710 | | jmp | .op1 | | | | ;@. |
|
165 | 452 | 1000710 | | jmp | .op1 | | | | ;punct2 | @452
|
166 | 452+ | 1000604 | | jmp | getchar.ent | | | | ;getchar: layout |
|
167 | 453 | | ; |
|
168 | 453 | | ; multi-char operator, pack up into ident |
|
169 | 453 | | .op2: | ; | |
|
170 | 453 | 0600576 | | lod | ident | | | | ;punct1+punct1, get ident | @453
|
171 | 453+ | 1320006 | | sll | 6 | | | | ; shift left |
|
172 | 454 | | | clo | | | | | ;clear oflo | @454
|
172+1 | 454 | 1160706 | | jo | .1 | | | | |
|
172+2 | 454+ | | .1: | ; | |
|
173 | 454+ | 0100574 | | add | currchar | | | | ;add new char |
|
174 | 455 | 0400576 | | sto | ident | | | | ;store ident | @455
|
175 | 455+ | 1000604 | | jmp | getchar.ent | | | | |
|
176 | 456 | | ; |
|
177 | 456 | | ; multi-char followed by something else, return |
|
178 | 456 | | .op1: | ; | |
|
179 | 456 | 0600576 | | lod | ident | | | | ;letter,digit,???,punct2 | @456
|
180 | 456+ | | | pad | | | | | ; no-op |
|
180+1 | 456+ | 0000000 | | 00 | 0 | | | | |
|
181 | 457 | 0003333100001 | | 00 | .lnk | / | jmp | 1# | ; return +1+ |
|
182 | 458 | | ; |
|
183 | 458 | | ; starting letter, pack identifier/keyword |
|
184 | 458 | | .id1: | ; | |
|
185 | 458 | 0100614 | | add | K32 | | | | ;=32 - convert to 6-bit form | @458
|
186 | 458+ | 1100667 | | jmp | .id2 | | | | ;-> store ident, clr oflo... |
|
187 | 459 | | =439+ | |
|
188 | 439+ | | .id2: | ; | |
|
189 | 439+ | 0400576 | | sto | ident | | | | ; store ident | @439+
|
190 | 440 | 1060713 | | jo | .id3 | | | | ;clear overflow |
|
191 | 440+ | 1000713 | | jmp | .id3 | | | | ;-> |
|
192 | 441 | | | pad | | | | | ; | @441
|
192+1 | 441 | 0000000 | | 00 | 0 | | | | |
|
193 | 441+ | | =459 | |
|
194 | 459 | | .id3: | ; | |
|
195 | 459 | | | call | | | | | ;get subsequent chars of ident | @459
|
195+1 | 459 | 7303015000604 | | lnk | getchar.lnk | : | jmp | getchar.ent | |
|
196 | 460 | 1000717 | | jmp | .id4 | | | | ;letter | @460
|
197 | 460+ | 1100722 | | o44 | .id5 | | | | ;punct1 |
|
198 | 461 | 1000717 | | jmp | .id4 | | | | ;digit | @461
|
199 | 461+ | 1100722 | | o44 | .id5 | | | | ;@. |
|
200 | 462 | 1100722 | | o44 | .id5 | | | | ;punct2 | @462
|
201 | 462+ | 1100722 | | o44 | .id5 | | | | ;layout |
|
202 | 463 | | ; |
|
203 | 463 | | ; letters or digits following letter - pack identifier/keyword |
|
204 | 463 | | .id4: | ; | |
|
205 | 463 | 0600576 | | lod | ident | | | | ;ident | @463
|
206 | 463+ | 1320006 | | sll | 6 | | | | ;shift left for packing |
|
207 | 464 | 1060604 | | jo | getchar.ent | | | | ; oflo -> getchar |
|
208 | 464+ | 0100574 | | add | currchar | | | | ;currchar |
|
209 | 465 | 0100575 | | add | ipshift | | | | ;add shift |
|
210 | 465+ | 0400576 | | sto | ident | | | | ;store updated word |
|
211 | 466 | 1000604 | | jmp | getchar.ent | | | | ;continue |
|
212 | 466+ | | ; |
|
213 | 466+ | | ; anything else terminates identifier |
|
214 | 466+ | | .id5: | ; | |
|
215 | 466+ | 0600576 | | lod | ident | | | | ;pass packed word | @466+
|
216 | 467 | 0003333000001 | | 00 | .lnk | / | jmp | 1 | ;return+1 |
|
217 | 468 | | =584 | |
|
218 | 584 | | ; |
|
219 | 584 | | ; get digit in packword |
|
220 | 584 | | ; |
|
221 | 584 | | .number: | ; | |
|
222 | 584 | 0541206 | | cls | num | | | | ;clear working variables | @584
|
223 | 584+ | 0541207 | | cls | decptf | | | | ; |
|
224 | 585 | 0541210 | | cls | expsign | | | | ; |
|
225 | 585+ | 0541213 | | cls | SPflg | | | | ; |
|
226 | 586 | 0540577 | | cls | decscale | | | | ;reset real scale | @586
|
227 | 586+ | 0041215 | | o02 | K10 | | | | ;=10+1=>11 |
|
228 | 587 | 0421212 | | stn | dct2 | | | | ;digitcount=-11 |
|
229 | 587+ | 0601120 | | lod | .big | | | | ;large negative number |
|
230 | 588 | 0401211 | | sto | dct1 | | | | ;? | @588
|
231 | 588+ | | | clo | | | | | ;clr oflo |
|
231+1 | 588+ | 1061115 | | jo | .1 | | | | |
|
231+2 | 589 | | .1: | ; | |
|
232 | 589 | 0600574 | | lod | currchar | | | | ;currchar |
|
233 | 589+ | | | pad | | | | | ; |
|
233+1 | 589+ | 0000000 | | 00 | 0 | | | | |
|
234 | 590 | | | call | | | | | ;re-classify current char |
|
234+1 | 590 | 7303015000605 | | lnk | getchara.lnk | : | jmp | getchara.ent | |
|
235 | 591 | 1101122 | | jmp | .term | | | | ;letters | @591
|
236 | 591+ | 1101122 | | jmp | .term | | | | ;punct1 |
|
237 | 592 | 1001146 | .big: | jmp | .dig | | | | ;digit | @592
|
238 | 592+ | 1101166 | | jmp | .fpp2 | | | | ;@. modify to FP |
|
239 | 593 | 1101122 | | jmp | .term | | | | ;punct2 |
|
240 | 593+ | 0641213 | | lis | SPflg | | | | ;layout |
|
241 | 594 | 1040604 | | jz | getchar.ent | | | | ;getchar not terminator | @594
|
242 | 594+ | | ; |
|
243 | 594+ | | ; terminate number |
|
244 | 594+ | | ; |
|
245 | 594+ | 0601211 | .term: | lod | dct1 | | | | ; | @594+
|
246 | 595 | 1021144 | | jn | .fixpt | | | | ;->no decimal point |
|
247 | 595+ | 1041205 | | jz | _err01 | | | | ;->no digits after point |
|
248 | 596 | | .term2: | ; | |
|
249 | 596 | 0601212 | | lod | dct2 | | | | ;digitct | @596
|
250 | 596+ | 1021145 | | jn | .fltpt | | | | ;->OK |
|
251 | 597 | 0121211 | | sub | dct1 | | | | ;digits after point |
|
252 | 597+ | | .term3: | ; | |
|
253 | 597+ | 0500577 | | ads | decscale | | | | ;add to scale factor |
|
254 | 598 | 0741206 | | lzs | num | | | | ;fetch num, and zero it | @598
|
255 | 598+ | 0400576 | | sto | ident | | | | ;store in ident |
|
256 | 599 | 0601207 | | lod | decptf | | | | ;was there an '@'? @599 |
|
257 | 599+ | | | jnn | | | | | ;no, finished |
|
257+1 | 599+ | 1121130 | | jn | .1 | | | | |
|
257+2 | 600 | 1001200 | | jmp | packword.finish | | | | |
|
257+3 | 600+ | | .1: | ; | |
|
258 | 600+ | | .getexp: | ; | |
|
259 | 600+ | 0041216 | | o02 | K2 | | | | ;=2+1=>3 | @600+
|
260 | 601 | 0421212 | | stn | dct2 | | | | ;-3=>digitct |
|
261 | 601+ | 0601120 | | lod | .big | | | | ;big negative number? |
|
262 | 602 | 0401211 | | sto | dct1 | | | | ;otherct | @602
|
263 | 602+ | 0541213 | | cls | SPflg | | | | ; |
|
264 | 603 | | | call | | | | | ; |
|
264+1 | 603 | 7303015000604 | | lnk | getchar.lnk | : | jmp | getchar.ent | |
|
265 | 604 | 1101137 | | jmp | .expt | | | | ;letters | @604
|
266 | 604+ | 1101137 | | jmp | .expt | | | | ;punct1 |
|
267 | 605 | 1001146 | | jmp | .dig | | | | ;digit |
|
268 | 605+ | 1001205 | | jmp | _err01 | | | | ;@.->error |
|
269 | 606 | 1101172 | | jmp | .expp | | | | ;punct2 - may be + or - |
|
270 | 606+ | 0641213 | | lis | SPflg | | | | ;layout |
|
271 | 607 | 1040604 | | jz | getchar.ent | | | | ; | @607
|
272 | 607+ | | ; |
|
273 | 607+ | | ; end of exponent |
|
274 | 607+ | | .expt: | ; | |
|
275 | 607+ | 0601120 | | lod | .big | | | | ;big negative number |
|
276 | 608 | 0121211 | | sub | dct1 | | | | ;otherct | @608
|
277 | 608+ | 1041205 | | jz | _err01 | | | | ;->error: no digits in exponent |
|
278 | 609 | 0601210 | | lod | expsign | | | | ;expsign |
|
279 | 609+ | 1141142 | | jz | .exp1 | | | | ;zero, positive exponent |
|
280 | 610 | 0621206 | | lcs | num | | | | ;negate num | @610
|
281 | 610+ | | .exp1: | ; | |
|
282 | 610+ | 0601206 | | lod | num | | | | ;fetch num |
|
283 | 611 | 0500577 | | ads | decscale | | | | ;add to scale factor |
|
284 | 611+ | 1001201 | | jmp | .ret2 | | | | ; |
|
285 | 612 | | ; |
|
286 | 612 | | ;integer number |
|
287 | 612 | | ; |
|
288 | 612 | | .fixpt: | ; | |
|
289 | 612 | 0541211 | | cls | dct1 | | | | ; | @612
|
290 | 612+ | 1001124 | | jmp | .term2 | | | | ; |
|
291 | 613 | | ; |
|
292 | 613 | | ; real number |
|
293 | 613 | | ; |
|
294 | 613 | | .fltpt: | ; | |
|
295 | 613 | 0221211 | | o11 | dct1 | | | | ; |
|
296 | 613+ | 1101125 | | jmp | .term3 | | | | ; |
|
297 | 614 | | ; |
|
298 | 614 | | ; digits come here |
|
299 | 614 | 0441211 | .dig: | inc | dct1 | | | | ;increment ?? | @614
|
300 | 614+ | 0601206 | | lod | num | | | | ;num |
|
301 | 615 | 1141157 | | jz | .numz | | | | ;->bypass if first digit |
|
302 | 615+ | 0641212 | | lis | dct2 | | | | ;increment digitct |
|
303 | 616 | 1021151 | | jn | .digOK | | | | ;->still negative, OK | @616
|
304 | 616+ | 1101155 | | jmp | .dignext | | | | ;too many digits, ignore |
|
305 | 617 | | ; |
|
306 | 617 | | .digOK: | ; | |
|
307 | 617 | 0601217 | | lod | K15 | | | | ;=15 |
|
308 | 617+ | 0460574 | | ans | currchar | | | | ;currchar |
|
309 | 618 | 0601206 | | lod | num | | | | ;num |
|
310 | 618+ | 0500574 | | ads | currchar | | | | ;\ |
|
311 | 619 | 0500574 | | ads | currchar | | | | ; \ | @619
|
312 | 619+ | 1320003 | | sll | 3 | | | | ; \ |
|
313 | 620 | 0100574 | | add | currchar | | | | ; num;10+currchar | @620
|
314 | 620+ | 1161156 | | jo | .oflow | | | | ;test for overflow |
|
315 | 621 | | ; |
|
316 | 621 | | .numOK: | ; | |
|
317 | 621 | 0401206 | | sto | num | | | | ;ok, store num |
|
318 | 621+ | | .dignext: | ; | |
|
319 | 621+ | 0541213 | | cls | SPflg | | | | ;clear flag |
|
320 | 622 | 1000604 | | jmp | getchar.ent | | | | ;getchar (previous return) | @622
|
321 | 622+ | | ; |
|
322 | 622+ | | .oflow: | ; | |
|
323 | 622+ | 0440577 | | inc | decscale | | | | ;set indicator |
|
324 | 623 | 1101155 | | jmp | .dignext | | | | ;continue |
|
325 | 623+ | | ; |
|
326 | 623+ | | ; first non-zero digit (optimisation) |
|
327 | 623+ | | ; |
|
328 | 623+ | 0600574 | .numz: | lod | currchar | | | | ;currchar |
|
329 | 624 | 0061217 | | and | K15 | | | | ;=15 | @624
|
330 | 624+ | 1001155 | | jmp | .numOK | | | | ;-> store num |
|
331 | 625 | | ; |
|
332 | 625 | | ; @ or . read before digits |
|
333 | 625 | | .fpp: | ; | |
|
334 | 625 | 0040574 | | o02 | currchar | | | | ;currchar+1 |
|
335 | 625+ | 0121217 | | sub | K15 | | | | ;=15 ('.'+1) |
|
336 | 626 | 1041110 | | jz | .number | | | | ;-> decimal point enter readnum | @626
|
337 | 626+ | | ; @ before digits |
|
338 | 626+ | 0040000 | | o02 | 0 | | | | ;=1 | @626+
|
339 | 627 | 0400576 | | sto | ident | | | | ;set exponent flag |
|
340 | 627+ | 0540577 | | cls | decscale | | | | ;clear scale factor |
|
341 | 628 | 0421207 | | stn | decptf | | | | ;-1=>647 | @628
|
342 | 628+ | 0541206 | | cls | num | | | | ;0=>num |
|
343 | 629 | 0541210 | | cls | expsign | | | | ;0=>expsign | @629
|
344 | 629+ | | | clo | | | | | ;clr oflo |
|
344+1 | 629+ | 1061166 | | jo | .1 | | | | |
|
344+2 | 630 | | .1: | ; | |
|
345 | 630 | 1101130 | | jmp | .getexp | | | | ;-> | @630
|
346 | 630+ | | ; |
|
347 | 630+ | | ; @ or . in number |
|
348 | 630+ | | ; |
|
349 | 630+ | 0040574 | .fpp2: | o02 | currchar | | | | ;currchar+1 |
|
350 | 631 | 0121217 | | sub | K15 | | | | ;=15 ('.'+1) |
|
351 | 631+ | 1041204 | | jz | .decpt | | | | ;-> decimal point |
|
352 | 632 | 0421207 | | stn | decptf | | | | ;(should be 10: '@'-'.') @632 |
|
353 | 632+ | 1101122 | | jmp | .term | | | | ;->back to process exponent |
|
354 | 633 | | ; |
|
355 | 633 | | .decpt1: | ; | |
|
356 | 633 | 0201211 | | exa | dct1 | | | | ;check for previous '.' |
|
357 | 633+ | 1121155 | | jn | .dignext | | | | ;->OK |
|
358 | 634 | 1001205 | | jmp | _err01 | | | | ;-> report error in number | @634
|
359 | 634+ | | ; |
|
360 | 634+ | | ; punct2 in exponent, possible sign |
|
361 | 634+ | 0601206 | .expp: | lod | num | | | | ;digits in exponent? |
|
362 | 635 | | | jnz | | | | | ;yes, treat as terminator |
|
362+1 | 635 | 1041174 | | jz | .1 | | | | |
|
362+2 | 635+ | 1101137 | | jmp | packword.expt | | | | |
|
362+3 | 636 | | .1: | ; | |
|
363 | 636 | 0600574 | | lod | currchar | | | | ;currchar | @636
|
364 | 636+ | 0121220 | | sub | K13 | | | | ;=13 '-' |
|
365 | 637 | 1041177 | | jz | .expneg | | | | ;negative exponent |
|
366 | 637+ | 0101216 | | add | K2 | | | | ;=2 '+' |
|
367 | 638 | 1141155 | | jz | .dignext | | | | ;positive | @638
|
368 | 638+ | 1101137 | | jmp | .expt | | | | ;otherwise terminator |
|
369 | 639 | | ; |
|
370 | 639 | | .expneg: | ; | |
|
371 | 639 | 1661210 | | lnk | expsign | | | | ;set expsign non-zero |
|
372 | 639+ | 1101155 | | jmp | .dignext | | | | ;continue |
|
373 | 640 | | ; |
|
374 | 640 | | .finish: | ; | |
|
375 | 640 | 0600577 | | lod | decscale | | | | ;get scale factor | @640
|
376 | 640+ | 1041202 | | jz | .ret1 | | | | ;none set, check decptf |
|
377 | 641 | | .ret2: | ; | |
|
378 | 641 | 0003333100002 | | o00 | .lnk | / | jmp | 2# | ;return +2+, flpt number |
|
379 | 642 | | ;----------------- |
|
380 | 642 | | ; |
|
381 | 642 | | .ret1: | ; | |
|
382 | 642 | 0221207 | | o11 | decptf | | | | ;clear decptf, load prev value | @642
|
383 | 642+ | 1021201 | | jn | .ret2 | | | | ;exponent seen, ret 2# |
|
384 | 643 | 0003333000002 | | o00 | .lnk | / | jmp | 2 | ;return +2, fixed pt number |
|
385 | 644 | | ;----------------- |
|
386 | 644 | | ; |
|
387 | 644 | | ; decimal point in number |
|
388 | 644 | | .decpt: | ; | |
|
389 | 644 | 0441207 | | inc | decptf | | | | ;increment decpt flag | @644
|
390 | 644+ | 1001171 | | jmp | .decpt1 | | | | ;-> |
|
391 | 645 | | ;----------------- |
|
392 | 645 | | ; error in number, call error recovery |
|
393 | 645 | | _err01: | ; | |
|
394 | 645 | 1661044 | | lnk | errlnk | | | | ;error 1: number of impremissable form |
|
395 | 645+ | 1004772 | | jmp | error2 | | | | ; |
|
396 | 646 | | ; |
|
397 | 646 | 0000000000000 | num: | +0 | ;number being produced | @646
|
398 | 647 | 0000000000000 | decptf: | +0 | ;'.' count, <0 if exponent | @647
|
399 | 648 | | expsign: | ; | |
|
400 | 648 | 0000000000000 | | +0 | ;expsign | @648
|
401 | 649 | 7777777777765 | dct1: | -11 | ;otherct | @649
|
402 | 650 | 7777777777765 | dct2: | -11 | ;digitct | @650
|
403 | 651 | 0000000000000 | SPflg: | +0 | ;used to ignore single spaces | @651
|
404 | 652 | 0000000000000 | | +0 | ;no refs | @652
|
405 | 653 | 0000000000012 | K10: | +10 | |
|
406 | 654 | 0000000000002 | K2: | +2 | |
|
407 | 655 | 0000000000017 | K15: | +15 | |
|
408 | 656 | 0000000000015 | K13: | +13 | |
|
409 | 657 | | ; |
|
410 | 657 | | ;------------------------------------------------------------------- |
|