include "hdr1.html"; ?>
| 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 | ;------------------------------------------------------------------- | ||||||||