| 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 | ; | |
| |