| Line | Address | Object Code
| Label | F1 | N1 | B | F2 | N2 | Comments | Check
|
|---|
| 1 | 0 | | ; tape2/strio.t2 |
|
| 2 | 0 | | ;--------------- |
|
| 3 | 0 | | ; OutString(a, n) |
|
| 4 | 0 | | ; output string stored in array a, starting at index n (call by name) |
|
| 5 | 0 | | ; |
|
| 6 | 0 | | StringInOut:: | ; | |
|
| 7 | 0 | | =7241 | |
|
| 8 | 7241 | 0000000000000 | | +0 | ; | @7241
|
| 9 | 7242 | 0000000000000 | | +0 | ; | @7242
|
| 10 | 7243 | 0000000000000 | | +0 | ; | @7243
|
| 11 | 7244 | 0000000000000 | .ptrn: | +0 | ; | @7244
|
| 12 | 7245 | 0000000000000 | .work1: | +0 | ; | @7245
|
| 13 | 7246 | 0000000000000 | .array: | +0 | ; | @7246
|
| 14 | 7247 | 0000000000000 | .link1: | +0 | ;return address for readchar | @7247
|
| 15 | 7248 | | .wdslft: | ; | |
|
| 16 | 7248 | 0000000000000 | | +0 | ;space left in array | @7248
|
| 17 | 7249 | 0000000000000 | .inflg: | +0 | ;inner string flag | @7249
|
| 18 | 7250 | 0000000000000 | .chcnt: | +0 | ;count of chars in pword | @7250
|
| 19 | 7251 | 0000000000000 | .pword: | +0 | ;packed character word | @7251
|
| 20 | 7252 | | | ; | |
|
| 21 | 7252 | | =7590 | |
|
| 22 | 7590 | | OutString: | ; | |
|
| 23 | 7590 | 0600016 | | lod | arg1 | | | | ; | @7590
|
| 24 | 7590+ | 0416116 | | sto | .array | | | | ;array address |
|
| 25 | 7591 | 0000077660000 | | o00 | arg2 | / | lnk | 0 | ;call thunk for n | @7591
|
| 26 | 7592 | 1000017 | | jmp | arg2 | | | | ; | @7592
|
| 27 | 7592+ | 0416114 | | sto | .ptrn | | | | ;store address of n |
|
| 28 | 7593 | 0000072577777 | | o00 | arg1 | / | lod | -1 | ;array dope vector address | @7593
|
| 29 | 7594 | 2000022600001 | | sto | 4 | / | lod | 1 | ;load lower bound | @7594
|
| 30 | 7595 | 0070462160000 | | o00 | .ptrn | / | bus | 0 | ;subtract from index | @7595
|
| 31 | 7596 | 1120011 | | jn | SubOflo | | | | ;index too low | @7596
|
| 32 | 7596+ | 0516116 | | ads | .array | | | | ;add to base |
|
| 33 | 7597 | 0000022120002 | | o00 | 4 | / | sub | 2 | ;check range | @7597
|
| 34 | 7598 | 1036657 | | jn | .OS1 | | | | ;ok, skip | @7598
|
| 35 | 7598+ | 1100011 | | jmp | SubOflo | | | | ;index too high |
|
| 36 | 7599 | | ; |
|
| 37 | 7599 | | .OS1: | ; | |
|
| 38 | 7599 | 0070472600000 | | o00 | .array | / | lod | 0 | ;load first word of string | @7599
|
| 39 | 7600 | 1136662 | | jn | .OS2 | | | | ;negative, last word | @7600
|
| 40 | 7600+ | 0075163 | | and | W6771 | | | | ;=02000000000000 |
|
| 41 | 7601 | 1156662 | | jz | .OS2 | | | | ;OK, | @7601
|
| 42 | 7601+ | 0616574 | | lod | Msg15 | | | | ;'STRING ERROR' |
|
| 43 | 7602 | 1016673 | | jmp | .err | | | | ;report error | @7602
|
| 44 | 7602+ | | ; |
|
| 45 | 7602+ | | .OS2: | ; | |
|
| 46 | 7602+ | 0600015 | | lod | Link1 | | | | ;save linkage over call to OutStr |
|
| 47 | 7603 | 0416115 | | sto | .work1 | | | | ; | @7603
|
| 48 | 7603+ | 0616116 | | lod | .array | | | | ;get address of string |
|
| 49 | 7604 | | | calln | , | | | | ;output to punch/printer | @7604
|
| 49+1 | 7604 | 7300005100012 | | lnk | T2Link | : | jmp | OutStr | |
|
| 50 | 7605 | 0616115 | | lod | .work1 | | | | ;restore return address | @7605
|
| 51 | 7605+ | 0400015 | | sto | Link1 | | | | ; |
|
| 52 | 7606 | 0616116 | | lod | .array | | | | ;get string address | @7606
|
| 53 | 7606+ | | .OS3: | ; | |
|
| 54 | 7606+ | 0175121 | | bus | W6737 | | | | ;subtract from address of final word+1 |
|
| 55 | 7607 | 0070462500000 | | o00 | .ptrn | / | ads | 0 | ;add to index | @7607
|
| 56 | 7608 | 2200136600000 | | inc | stkpt | / | lod | 0 | ;tidy up call by name | @7608
|
| 57 | 7609 | 0415127 | | sto | DLink | | | | ; | @7609
|
| 58 | 7609+ | 0540112 | | cls | W6729 | | | | ; |
|
| 59 | 7610 | 0540117 | | cls | W6734 | | | | ; | @7610
|
| 60 | 7610+ | 1016043 | | jmp | RetClr | | | | ;and return |
|
| 61 | 7611 | | ; |
|
| 62 | 7611 | | ; report error |
|
| 63 | 7611 | | ; |
|
| 64 | 7611 | | .err: | ; | |
|
| 65 | 7611 | | ;L7611: |
|
| 66 | 7611 | 0400004 | | sto | 4 | | | | ; | @7611
|
| 67 | 7611+ | 0540117 | | cls | W6734 | | | | ; |
|
| 68 | 7612 | 2200136600000 | | inc | stkpt | / | lod | 0 | ; | @7612
|
| 69 | 7613 | 0415127 | | sto | DLink | | | | ; | @7613
|
| 70 | 7613+ | 0540112 | | cls | W6729 | | | | ; |
|
| 71 | 7614 | 0600004 | | lod | 4 | | | | ; | @7614
|
| 72 | 7614+ | 1016165 | | jmp | outerror0 | | | | ; |
|
| 73 | 7615 | | ;-------------------------------------------------------------------- |
|
| 74 | 7615 | | ; read char from current input tape and |
|
| 75 | 7615 | | ; convert to 6-bit format |
|
| 76 | 7615 | | ; |
|
| 77 | 7615 | | ReadChar: | ; | |
|
| 78 | 7615 | 0600127620000 | | cla | indev | / | inp | 0 | ; | @7615
|
| 79 | 7616 | 1056677 | | jz | ReadChar | | | | ;ignore blanks | @7616
|
| 80 | 7616+ | 0216115 | | exa | .work1 | | | | ; |
|
| 81 | 7617 | 0400004 | | sto | 4 | | | | ; | @7617
|
| 82 | 7617+ | 0616115 | | lod | .work1 | | | | ; |
|
| 83 | 7618 | 0135144 | | sub | W6756 | | | | ;=27 [FS] | @7618
|
| 84 | 7618+ | 1157002 | | jz | .fs | | | | ; handle figure shift |
|
| 85 | 7619 | 0136223 | | sub | K4 | | | | ;=4 =>[LS] | @7619
|
| 86 | 7619+ | 1057002 | | jz | .ls | | | | ; handle letter shift |
|
| 87 | 7620 | 0600004 | | lod | 4 | | | | ; | @7620
|
| 88 | 7620+ | 0216115 | | exa | .work1 | | | | ; |
|
| 89 | 7621 | 0116115 | | add | .work1 | | | | ; | @7621
|
| 90 | 7621+ | 0416116 | | sto | .array | | | | ; |
|
| 91 | 7622 | 0070477000001 | | o00 | .link1 | / | jmp | 1 | ; | @7622
|
| 92 | 7623 | | =7682 | |
|
| 93 | 7682 | | .ls: | ; | |
|
| 94 | 7682 | 0115150 | | add | K32a | | | | ;=32 | @7682
|
| 95 | 7682+ | | .fs: | ; | |
|
| 96 | 7682+ | 0416115 | | sto | .work1 | | | | ;store shift |
|
| 97 | 7683 | 1016677 | | jmp | ReadChar | | | | ;and get next char | @7683
|
| 98 | 7683+ | | ; |
|
| 99 | 7683+ | 0000000 | | o00 | 0 | | | | ; |
|
| 100 | 7684 | | ;-------------------------------------------------------------------- |
|
| 101 | 7684 | | ; PackChar: add character to packed string |
|
| 102 | 7684 | | ; current word in .pword, char count in .chcnt |
|
| 103 | 7684 | | ; |
|
| 104 | 7684 | | =7623 | |
|
| 105 | 7623 | | ;PackChar:: |
|
| 106 | 7623 | | PackChar: | ; | |
|
| 107 | 7623 | 0656122 | | lis | .chcnt | | | | ;bump count, test | @7623
|
| 108 | 7623+ | 1156712 | | jz | .full | | | | ;zero, word full |
|
| 109 | 7624 | 0616123 | | lod | .pword | | | | ;load word | @7624
|
| 110 | 7624+ | 1320006 | | sll | 6 | | | | ;shift left |
|
| 111 | 7625 | 0116116 | | add | .array | | | | ;and add character | @7625
|
| 112 | 7625+ | 0416123 | | sto | .pword | | | | ;store back |
|
| 113 | 7626 | 1016677 | | jmp | ReadChar | | | | ;and get another word | @7626
|
| 114 | 7626+ | | ; |
|
| 115 | 7626+ | | ; word full, transfer into array |
|
| 116 | 7626+ | | ; |
|
| 117 | 7626+ | | .full: | ; | |
|
| 118 | 7626+ | 0616123 | | lod | .pword | | | | ;get word |
|
| 119 | 7627 | 1056716 | | jz | .skip | | | | ;all zero, skip | @7627
|
| 120 | 7627+ | 0656120 | | lis | .wdslft | | | | ;bump words left count |
|
| 121 | 7628 | 1140011 | | jz | SubOflo | | | | ;all gone, error | @7628
|
| 122 | 7628+ | 0756123 | | lzs | .pword | | | | ;get word |
|
| 123 | 7629 | 2264506377777 | | inc | W6737 | / | sto | -1 | ;bump ptr, and store word | @7629
|
| 124 | 7630 | | .skip: | ; | |
|
| 125 | 7630 | 0055146 | | o02 | W6758 | | | | ;=5+1=>6 | @7630
|
| 126 | 7630+ | 0436122 | | stn | .chcnt | | | | ;store char count |
|
| 127 | 7631 | 1016707 | | jmp | PackChar | | | | ; | @7631
|
| 128 | 7631+ | | ;-------------------------------------------------------------------- |
|
| 129 | 7631+ | | ; Instring(arr, n) |
|
| 130 | 7631+ | | ; read string into arr at index given by n |
|
| 131 | 7631+ | | ; |
|
| 132 | 7631+ | | ;InString:: |
|
| 133 | 7631+ | | InString: | ; | |
|
| 134 | 7631+ | 0556123 | | cls | .pword | | | | ; |
|
| 135 | 7632 | 0000077660000 | | o00 | arg2 | / | lnk | 0 | ; | @7632
|
| 136 | 7633 | 1000017 | | jmp | arg2 | | | | ;call thunk for n | @7633
|
| 137 | 7633+ | 0416114 | | sto | .ptrn | | | | ;store address for n |
|
| 138 | 7634 | 0000072577777 | | o00 | arg1 | / | lod | -1 | ;load dope vector address | @7634
|
| 139 | 7635 | 2000022600001 | | sto | 4 | / | lod | 1 | ;fetch lowbound(a,1) | @7635
|
| 140 | 7636 | 0070462160000 | | o00 | .ptrn | / | bus | 0 | ;subtract from n | @7636
|
| 141 | 7637 | 1120011 | | jn | SubOflo | | | | ; | @7637
|
| 142 | 7637+ | 1016760 | | jmp | .IS9 | | | | ;ok, search for start |
|
| 143 | 7638 | | ; |
|
| 144 | 7638 | | .IS1: | ; | |
|
| 145 | 7638 | | ;L7638: |
|
| 146 | 7638 | 0000022120002 | | o00 | 4 | / | sub | 2 | ;get upper limit | @7638
|
| 147 | 7639 | 0416120 | | sto | .wdslft | | | | ;save for checking | @7639
|
| 148 | 7639+ | 0556122 | | cls | .chcnt | | | | ; |
|
| 149 | 7640 | 1036731 | | jn | .IS2 | | | | ;ok, skip | @7640
|
| 150 | 7640+ | 1100011 | | jmp | SubOflo | | | | ; |
|
| 151 | 7641 | | ; |
|
| 152 | 7641 | | .IS2: | ; | |
|
| 153 | 7641 | 0600025 | | lod | indev | | | | ;get reader number | @7641
|
| 154 | 7641+ | 1220013 | | srl | 11 | | | | ;shift to normal place |
|
| 155 | 7642 | 2000022740100 | | sto | 4 | / | lzs | RdBuff | ;get buffered character | @7642
|
| 156 | 7643 | 1676117 | | lnk | .link1 | | | | ;set retn address for readchar | @7643
|
| 157 | 7643+ | 1676121 | | lnk | .inflg | | | | ; |
|
| 158 | 7644 | 0416115 | | sto | .work1 | | | | ;save character | @7644
|
| 159 | 7644+ | 1056677 | | jz | ReadChar | | | | ;zero, buffer empty, read next |
|
| 160 | 7645 | 0075150 | | and | K32a | | | | ;=32 | @7645
|
| 161 | 7645+ | 0216115 | | exa | .work1 | | | | ;save shift, load char |
|
| 162 | 7646 | 0175152 | | bus | W6762 | | | | ;=26 | @7646
|
| 163 | 7646+ | 1036677 | | jn | ReadChar | | | | ;ignore layout, letters |
|
| 164 | 7647 | 0136214 | | sub | K13 | | | | ;=13 | @7647
|
| 165 | 7647+ | 1016762 | | jmp | .IS10 | | | | ; |
|
| 166 | 7648 | | ; |
|
| 167 | 7648 | | ; found digit, +,-,.,@ |
|
| 168 | 7648 | | ; |
|
| 169 | 7648 | | .ISerr: | ; | |
|
| 170 | 7648 | 0616575 | | lod | Msg16 | | | | ;'READ ERROR' | @7648
|
| 171 | 7648+ | 1016673 | | jmp | .err | | | | ; |
|
| 172 | 7649 | | ; |
|
| 173 | 7649 | | ; found the # character |
|
| 174 | 7649 | | ; |
|
| 175 | 7649 | | .IS3: | ; | |
|
| 176 | 7649 | | | calln | , | | | | ; | @7649
|
| 176+1 | 7649 | 7370475016677 | | lnk | StringInOut.link1 | : | jmp | ReadChar | |
|
| 177 | 7650 | 0135152 | | sub | W6762 | | | | ;=26 '#' inner string | @7650
|
| 178 | 7650+ | 1156744 | | jz | .IS4 | | | | ;->note and check |
|
| 179 | 7651 | 0136231 | | sub | N6 | | | | ;=-6 '?' end string | @7651
|
| 180 | 7651+ | 1156746 | | jz | .IS5 | | | | ;->note and check |
|
| 181 | 7652 | 1016707 | | jmp | PackChar | | | | ;pack and continue | @7652
|
| 182 | 7652+ | | ; |
|
| 183 | 7652+ | | ; note inner string |
|
| 184 | 7652+ | | ; |
|
| 185 | 7652+ | | .IS4: | ; | |
|
| 186 | 7652+ | 0756121 | | lzs | .inflg | | | | ;test flag and clear |
|
| 187 | 7653 | 1056740 | | jz | .ISerr | | | | ;already insidr inner string | @7653
|
| 188 | 7653+ | 0615140 | | lod | W6752 | | | | ;=63 (special inner string mark) |
|
| 189 | 7654 | 1017001 | | jmp | .IS11 | | | | ;pack it | @7654
|
| 190 | 7654+ | | ; |
|
| 191 | 7654+ | | ; closing quote, check outer/inner |
|
| 192 | 7654+ | | ; |
|
| 193 | 7654+ | | .IS5: | ; | |
|
| 194 | 7654+ | 0656121 | | lis | .inflg | | | | ;get marker (and set) |
|
| 195 | 7655 | 1056750 | | jz | .IS6 | | | | ;inside inner string | @7655
|
| 196 | 7655+ | 1016751 | | jmp | .IS7 | | | | ;end of outer string |
|
| 197 | 7656 | | ; |
|
| 198 | 7656 | | ; end of inner string |
|
| 199 | 7656 | | ; |
|
| 200 | 7656 | | .IS6: | ; | |
|
| 201 | 7656 | 0615144 | | lod | W6756 | | | | ;=27 end of inner string mark | @7656
|
| 202 | 7656+ | 1017001 | | jmp | .IS11 | | | | ;pack it in |
|
| 203 | 7657 | | ; |
|
| 204 | 7657 | | ; end of outer string, tidy up and return |
|
| 205 | 7657 | | ; |
|
| 206 | 7657 | | .IS7: | ; | |
|
| 207 | 7657 | 0656122 | | lis | .chcnt | | | | ;is word full? | @7657
|
| 208 | 7657+ | 1056754 | | jz | .IS8 | | | | ;yes, skip |
|
| 209 | 7658 | 0616123 | | lod | .pword | | | | ;load current word | @7658
|
| 210 | 7658+ | 1320006 | | sll | 6 | | | | ;shift up 1 byte |
|
| 211 | 7659 | 0416123 | | sto | .pword | | | | ;save | @7659
|
| 212 | 7659+ | 1016751 | | jmp | .IS7 | | | | ;and try again |
|
| 213 | 7660 | | ; |
|
| 214 | 7660 | | ; current word now full |
|
| 215 | 7660 | | ; |
|
| 216 | 7660 | | .IS8: | ; | |
|
| 217 | 7660 | 0656120 | | lis | .wdslft | | | | ;check room for last word | @7660
|
| 218 | 7660+ | 1140011 | | jz | SubOflo | | | | ;overflow if over the top |
|
| 219 | 7661 | 0615142 | | lod | TopBit | | | | ;sign bit | @7661
|
| 220 | 7661+ | 0116123 | | add | .pword | | | | ;add to final word |
|
| 221 | 7662 | 2264506377777 | | inc | W6737 | / | sto | -1 | ;store in array | @7662
|
| 222 | 7663 | 0600016 | | lod | arg1 | | | | ;get array address | @7663
|
| 223 | 7663+ | 1116666 | | jmp | .OS3 | | | | ;join with outstring to update n |
|
| 224 | 7664 | | ; |
|
| 225 | 7664 | | ; initial setup continued |
|
| 226 | 7664 | | ; |
|
| 227 | 7664 | | .IS9: | ; | |
|
| 228 | 7664 | 0300016 | | o14 | arg1 | | | | ;add array base | @7664
|
| 229 | 7664+ | 0415121 | | sto | W6737 | | | | ;save it |
|
| 230 | 7665 | 0200016 | | exa | arg1 | | | | ;swap | @7665
|
| 231 | 7665+ | 1016726 | | jmp | .IS1 | | | | ;back for string |
|
| 232 | 7666 | | ; |
|
| 233 | 7666 | | ; check for errors prior to string start |
|
| 234 | 7666 | | ; |
|
| 235 | 7666 | | .IS10: | ; | |
|
| 236 | 7666 | 2000023137001 | | sto | 4 | / | jn | .SW+13# | ; | @7666
|
| 237 | 7667 | 0000023016764 | | o00 | 4 | / | jmp | .SW | ; | @7667
|
| 238 | 7668 | | ; |
|
| 239 | 7668 | | .SW: | ; | |
|
| 240 | 7668 | 4073601016741 | | jmp | .ISerr | : | jmp | .IS3 | ;+13 - +26 # | @7668
|
| 241 | 7669 | 4073375016740 | | jmp | ReadChar | : | jmp | .ISerr | ;+12 : +25 9 | @7669
|
| 242 | 7670 | 4073601016740 | | jmp | .ISerr | : | jmp | .ISerr | ;+11 + +24 @ @7670 |
|
| 243 | 7671 | 4073375016677 | | jmp | ReadChar | : | jmp | ReadChar | ;+10 , +23 / | @7671
|
| 244 | 7672 | 4073375016740 | | jmp | ReadChar | : | jmp | .ISerr | ;+09 ' +22 6 | @7672
|
| 245 | 7673 | 4073601016740 | | jmp | .ISerr | : | jmp | .ISerr | ;+08 8 +21 5 | @7673
|
| 246 | 7674 | 4073601016677 | | jmp | .ISerr | : | jmp | ReadChar | ;+07 7 +20 ? | @7674
|
| 247 | 7675 | 4073375016740 | | jmp | ReadChar | : | jmp | .ISerr | ;+06 = +19 3 | @7675
|
| 248 | 7676 | 4073375016677 | | jmp | ReadChar | : | jmp | ReadChar | ;+05 $ +18 ) | @7676
|
| 249 | 7677 | 4073601016677 | | jmp | .ISerr | : | jmp | ReadChar | ;+04 4 +17 ( | @7677
|
| 250 | 7678 | 4073375016740 | | jmp | ReadChar | : | jmp | .ISerr | ;+03 * +16 0 | @7678
|
| 251 | 7679 | 4073601016677 | | jmp | .ISerr | : | jmp | ReadChar | ;+02 2 +15 % | @7679
|
| 252 | 7680 | 4073601016740 | | jmp | .ISerr | : | jmp | .ISerr | ;+01 1 +14 . | @7680
|
| 253 | 7681 | | ; |
|
| 254 | 7681 | | ; store character and pack |
|
| 255 | 7681 | | ; |
|
| 256 | 7681 | | .IS11: | ; | |
|
| 257 | 7681 | 0416116 | | sto | .array | | | | ; | @7681
|
| 258 | 7681+ | 1016707 | | jmp | PackChar | | | | ; |
|
| 259 | 7682 | | ; |
|