File: tape.t2

For general comments see here
LineAddressObject Code LabelF1N1BF2N2CommentsCheck
1 0  ; tape2/tape.t2
2 0  ;--------------
3 0  ; binary tape read/punch routines
4 0  ;
5 0  =8051 
6 8051  L8051:; 
7 8051 0617574 lod W8060   ; @8051
8 8051+0417656 sto W8110   ;
9 8052 0077575 and W8061   ; @8052
10 8052+0137574 sub W8060   ;
11 8053 1057566 jz L8054   ; @8053
12 8053+1014760 jmp L6640   ;
13 8054  ;
14 8054  L8054:; 
15 8054   calln ,   ; @8054
15+18054 7377275017660 lnk W8111:jmp PunchAddr 
16 8055 0617575 lod W8061   ; @8055
17 8055+0417656 sto W8110   ;
18 8056   calln ,   ; @8056
18+18056 7377275017660 lnk W8111:jmp PunchAddr 
19 8057  L8057:; 
20 8057 1600000 kbd 0   ; @8057
21 8057+1037571 jn L8057   ;
22 8058  L8058:; 
23 8058 0076773020001 o00 W8062/jn 1; @8058
24 8059 1600000W8059:kbd 0   ; @8059
25 8059+1017572 jmp L8058   ;
26 8060  ;--------------------------------------------------------------------
27 8060 0000000000000W8060:+0 
28 8061 0000000000000W8061:+0 
29 8062 0000000000000W8062:+0 
30 8063  ;
31 8063  L8063:; 
32 8063 0617644 lod W8100   ; @8063
33 8063+0414776 sto BootEnd   ;
34 8064 0077706 and DumpSub.3   ;=8191 @8064
35 8064+0354731 stc W6617   ;
36 8065 0554770 cls W6648   ; @8065
37 8065+0554752 cls W6634   ;
38 8066 0557777 cls W8191   ; @8066
39 8066+0617645 lod W8101   ;
40 8067 1017605 jmp L8069   ; @8067
41 8067+ ;
42 8067+ L8067P:; 
43 8067+1677777 lnk W8191   ;
44 8068   calln ,   ; @8068
44+18068 7377275017640 lnk W8111:jmp L8096 
45 8069  L8069:; 
46 8069 0417653 sto W8107   ; @8069
47 8069+0417655 sto W8109   ;
48 8070 0614766 lod W6646   ;=<00 0:77 8191> @8070
49 8070+0677655 lns W8109   ;
50 8071 1220024 srl 20   ; @8071
51 8071+0337655 o15 W8109   ;
52 8072 0357654 stc W8108   ; @8072
53 8072+0000000 o00 0   ;
54 8073  L8073:; 
55 8073 2277266577777 inc W8109/o27 W8191; @8073
56 8074 0517653 ads W8107   ; @8074
57 8074+0357575 stc W8061   ;
58 8075 1077614 jo L8076   ; @8075
59 8075+ L8075P:; 
60 8075+1320005 sll 5   ;
61 8076  L8076:; 
62 8076 1620000 inp 0   ; @8076
63 8076+1177615 jo L8077P   ;
64 8077 1117613 jmp L8075P   ; @8077
65 8077+ ;
66 8077+ L8077P:; 
67 8077+0417574 sto W8060   ;
68 8078 0137575 sub W8061   ; @8078
69 8078+1057620 jz L8080   ;
70 8079   calln ,   ; @8079
70+18079 7376771017563 lnk W8062:jmp L8051 
71 8080  L8080:; 
72 8080 0657654 lis W8108   ; @8080
73 8080+1037611 jn L8073   ;
74 8081 0757777 lzs W8191   ; @8081
75 8081+1157603 jz L8067P   ;
76 8082 0617653 lod W8107   ; @8082
77 8082+0417575 sto W8061   ;
78 8083   calln ,   ; @8083
78+18083 7377275017640 lnk W8111:jmp L8096 
79 8084 0417574 sto W8060   ; @8084
80 8084+0137575 sub W8061   ;
81 8085 1057627 jz L8087   ; @8085
82 8085+0000000 o00 0   ;
83 8086   calln ,   ; @8086
83+18086 7376771017563 lnk W8062:jmp L8051 
84 8087  L8087:; 
85 8087   calln ,   ; @8087
85+18087 7377275017640 lnk W8111:jmp L8096 
86 8088 0417574 sto W8060   ; @8088
87 8088+0137650 sub W8104   ;
88 8089 1157603 jz L8067P   ; @8089
89 8089+0617574 lod W8060   ;
90 8090 0137651 sub L8105   ; @8090
91 8090+ L8090P:; 
92 8090+1157632 jz L8090P   ;
93 8091 0617562 lod W8050   ; @8091
94 8091+0074766 and W6646   ;=<00 0:77 8191>
95 8092 0417575 sto W8061   ; @8092
96 8092+0137574 sub W8060   ;
97 8093 0077573040001 o00 W8158/jz 1; @8093
98 8094   calln ,   ; @8094
98+18094 7376771017563 lnk W8062:jmp L8051 
99 8095  L8095:; 
100 8095 1017637 jmp L8095   ; @8095
101 8095+ ;
102 8095+0000000 o00 0   ;
103 8096  ;
104 8096  L8096:; 
105 8096 0140000 cla 0   ; @8096
106 8096+1177641 jo L8097P   ;
107 8097  L8097:; 
108 8097 1320005 sll 5   ; @8097
109 8097+ L8097P:; 
110 8097+1620000 inp 0   ;
111 8098 1077676 jo DumpPunch.6   ; @8098
112 8098+1017641 jmp L8097    
113 8099  ;--------------------------------------------------------------------
114 8099 0000000000143W8099:+99; @8099
115 8100 0000000457734W8100:o00 0:inc BootBase-4; @8100
116 8101 0063544014776W8101:00 BootStrap:00 BootEnd;00 6617 : 00 6654 @8101
117 8102 7700000000000W8102:+07700000000000;o77 0 : o00 0 @8102
118 8103 0000000000020W8103:+16; @8103
119 8104 0000001017740W8104:o00 0:jmp BootBase;0000001017740 @8104
120 8105 0000000000022L8105:+18; @8105
121 8106  ;--------------------------------------------------------------------
122 8106 0000000000000W8106:+0; @8106
123 8107 0000000000000W8107:+0; @8107
124 8108 0000000000000W8108:+0; @8108
125 8109 0000000000000W8109:+0; @8109
126 8110 0000000000000W8110:+0; @8110
127 8111 0000000000000W8111:+0; @8111
128 8112  ;;=8112
129 8112  ;
130 8112  ; output blanks and load address to paper tape
131 8112  ;
132 8112  DumpPunch::; 
133 8112  ;
134 8112  ; output load address for bootstrap
135 8112  ; W8110 contains address/instruction to be output
136 8112  ;
137 8112  PunchAddr:; 
138 8112 0617651 lod L8105   ;=18 @8112
139 8112+0437652 stn W8106   ;
140 8113  .1:; 
141 8113 1700000 otp 0   ;output 18 blanks @8113
142 8113+0657652 lis W8106   ;
143 8114 1037661 jn .1   ; @8114
144 8114+0617656 lod W8110   ;load address
145 8115 1117667 jmp .3   ;jump in to output address @8115
146 8115+ ; ; count already zero so we'll return
147 8115+ ;
148 8115+ ; output block of memory to paper tape punch
149 8115+ ; W8109 contains
150 8115+ ;
151 8115+ PunchBlock:; 
152 8115+0614766 lod W6646   ;=<00 0:77 8191>
153 8116 0677655 lns W8109   ;mask end address in store, load start address @8116
154 8116+1220024 srl 20   ;shift start address down
155 8117 0337655 o15 W8109   ;swap, subtract end from start @8117
156 8117+0417652 sto W8106   ;store negated word count
157 8118  .2:; 
158 8118 2277266577777 inc W8109/lod -1;load next word @8118
159 8119 0517653 ads W8107   ;add to checksum @8119
160 8119+ .3:; 
161 8119+1200043 sra 35   ;shift into AR
162 8120 0117647 add W8103   ;add top bit to force oflo... @8120
163 8120+  clo     ;when word complete, clear oflo
163+18120+1077671 jo .1    
163+28121  .1:; 
164 8121  .4:; 
165 8121 0417656 sto W8110   ;save word @8121
166 8121+0077675 and .mask31   ;=31
167 8122 1077273700000 exa W8110/otp 0;output 1 byte, reload word @8122
168 8123 1177674 jo .5   ;word done @8123
169 8123+1300005 sla 5   ;shift next byte out of AR
170 8124 1017671 jmp .4   ;and punch that @8124
171 8124+ ;
172 8124+ .5:; 
173 8124+0657652 lis W8106   ;word done, bump count
174 8125  .mask31:; 
175 8125 1037666 jn .2   ;still <0, repeat @8125
176 8125+0000037 00 +31   ;
177 8126  .6:; 
178 8126 0077277000001 00 W8111/jmp 1; @8126
179 8127  ;
180 8127  ;--------------------------------------------------------------------
181 8127  DumpSub::; 
182 8127  .ret:; 
183 8127 0077573000001 o00 W8158/jmp 1; @8127
184 8128  ;--------------------------------------------------------------------
185 8128  ; DumpSub: parameter (in Acc): < xx y : ww z > where
186 8128  ; xx is a function code:
187 8128  ; 40 - output bootstrap then block of data
188 8128  ; 20 - output further block of data
189 8128  ; 10 - output bottstrap trigger
190 8128  ; y & z are start and end of block to be punched (40/20)
191 8128  ; ww & z are trigger instruction (10)
192 8128  ;
193 8128  DumpSub:; 
194 8128 0000000 o00 0   ; @8128
195 8128+0557652 cls W8106   ;
196 8129  .1:; 
197 8129 0000000 o00 0   ; @8129
198 8129+0417654 sto W8108   ;
199 8130 0077646 and W8102   ;=07700000000000 @8130
200 8130+1057701 jz .1   ;loop stop?
201 8131 0557653 cls W8107   ; @8131
202 8131+0577654 o27 W8108   ;
203 8132  .2:; 
204 8132 1037706 jn .3   ;convert bit to int @8132
205 8132+1320001 sll 1   ; 40 = 0, 20 = 1, 10 = 2, 04 = 3
206 8133 0457653 inc W8107   ; @8133
207 8133+1017704 jmp .2   ;
208 8134  ;
209 8134  .3:; 
210 8134 0140000 cla 0   ; @8134
211 8134+0017777 o00 +8191   ;in-line constant
212 8135 0077257157710 o00 W8107/jz .SW;switch on @8135
213 8136 1017706 jmp .3   ;loop stop? @8136
214 8136+ ;
215 8136+ .SW:; 
216 8136+ ; entry 40:
217 8136+0617643 lod W8099   ;+0 =99
218 8137 1117717 jmp .sw0   ; @8137
219 8137+ ; entry 20:
220 8137+0617650 lod W8104   ;+1
221 8138 1117714 jmp .sw1   ; @8138
222 8138+ ; entry 10:
223 8138+0617651 lod L8105   ;+2
224 8139 1017714 jmp .sw2   ; @8139
225 8139+ ; entry 04:
226 8139+0617654 lod W8108   ;+3
227 8140  .sw2:; output bootstrap trigger 
228 8140 0557653 cls W8107   ;reset flag @8140
229 8140+ .sw1:; output block of data 
230 8140+0417656 sto W8110   ;store address
231 8141   calln ,   ; punch address first @8141
231+18141 7377275017660 lnk W8111:jmp PunchAddr 
232 8142 0617653 lod W8107   ;trigger flag? @8142
233 8142+1057677 jz .ret   ;return +1
234 8143 1017727 jmp .5   ;now do block of data @8143
235 8143+ ;
236 8143+ .sw0:; 
237 8143+0437652 stn W8106   ;
238 8144  .4:; 
239 8144 1700000 otp 0   ;punch 100 blanks @8144
240 8144+0657652 lis W8106   ;
241 8145 1037720 jn .4   ;repeat loop @8145
242 8145+0617644 lod W8100   ;trigger into bootstrap
243 8146 0000000 o00 0   ; @8146
244 8146+0077706 and .3   ;=8191 mask out trigger address
245 8147 0354731 stc W6617   ;save trigger address, zero acc @8147
246 8147+0214771 exa W6649   ;no other refs!
247 8148 0554770 cls W6648   ;??? other ref also cls @8148
248 8148+0554752 cls W6634   ;word in middle of bootstrap code
249 8149 0617645 lod W8101   ;=<00 BootStart:00 BootEnd> @8149
250 8149+0417655 sto W8109   ;store block address
251 8150   calln ,   ;punch out bootstrap @8150
251+18150 7377275117663 lnk W8111:jmp PunchBlock 
252 8151  ;
253 8151  ; bootstrap now punched, follow up with block of code
254 8151  ;
255 8151  .5:; 
256 8151 0617654 lod W8108   ; @8151
257 8151+0417656 sto W8110   ;boot load address
258 8152 0417653 sto W8107   ;clear sumcheck @8152
259 8152+0417655 sto W8109   ;store block address
260 8153   calln ,   ;output load address @8153
260+18153 7377275017660 lnk W8111:jmp PunchAddr 
261 8154   calln ,   ;and data block @8154
261+18154 7377275117663 lnk W8111:jmp PunchBlock 
262 8155 0617653 lod W8107   ; @8155
263 8155+0000000 o00 0   ;
264 8156   calln ,   ;output sumcheck @8156
264+18156 7377275117667 lnk W8111:jmp DumpPunch.3 
265 8157 1017677L8157:jmp .ret   ;return +1 @8157
266 8157+ ;
267 8157+0000000 o00 0   ;
268 8158 0000000000000W8158:+0; @8158
269 8159  ;
270 8159  ; symbols used by bootstrap
271 8159  ;
272 8159  =8188 
273 8188 0000000000000W8188:+0; = 8188
274 8189 0000000000000W8189:+0; = 8189
275 8190 0000000000000W8190:+0; = 8190
276 8191 0000000000000W8191:+0; = 8191
277 8192  ;