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