*** empty log message ***
[h316.git] / programs / tools / src / binal.asm
CommitLineData
cf7fb3fa 1* BINARY PUNCH AND LOAD PROGRAM
2*
3*
4* LOAD
5* FIRST LOC TO A, LAST LOC TO B
6* RUN IT.
7*
8* TAPE FORMAT:
9* THE TAPE CONTAINS DATA BLOCKS.
10* EVERY BLOCK IS PREPENDED WITH THE BLOCK START CHARACTER
11* AND THE BLOCK TYPE BYTE.
12* THEN FOLLOWS THE BLOCK DATA IN 16BIT BIG ENDIAN FORMAT.
13*
14* BLOCK TYPES
15*
16* DATA BLOCK
17* THE DATA BLOCK CONTAINS USER DATA AND A CHECKSUM.
18* LAYOUT:
19* | START ADDRESS |
20* | DATA LENGTH |
21* | DATA |
22* | BLOCK CHECKSUM |
23*
24* ZERO BLOCK
25* ZERO BLOCK IS USED TO REPRESENT ZERO CORE LOCATIONS
26* LAYOUT:
27* | START ADDRESS |
28* | ZERO LENGTH |
29* | BLOCK CHECKSUM |
30*
31* START LOC BLOCK
32* A BLOCK TO SET THE START LOCATION AFTER LOAD
33* LAYOUT;
34* | START ADDRESS |
35* | CHECKSUM (HAHA)|
36*
37* GO BLOCK
38* THIS BLOCK STOPS LOADING AND JUMPS TO THE START LOCATION.
39* IF NO START LOCATION HAS BEEN CODED THE LOADER WILL
40* CONTIUNE!
41*
42* TAPE END MARK:
43* THIS BLOCK TELLS THE LOADER THAT IT SHALL STOP NOW.
44* LAYOUT:
45* NO BODY AT ALL, ONLY BLOCK START AND BLOCK TYPE :-)
46*
47************************************************************************
48*
49 SUBR LSTART,BO3S LOADER START IS GOOD TO KNOW
50*
51 REL RELOCATABLE MODE
52 ORG 0
53*
54 STA STRT
55 HLT
56 STA ALOC FIRST LOCATION TO PUNCH
57 HLT
58 STA ELOC LAST LOCATION TO PUNCH
59*
60 OCP '0002 START PUNCH (NOT NECESSARY ON MY H316)
61 JST PLDR PUNCH OUT LEADER
62 JST PS2 PUNCH SECOND STAGE LOADER
63 JST PLDR PUNCH OUT LEADER
64 JST PS3 PUNCH THIRD STAGE LOADER
65 JST PLDR PUNCH OUT LEADER
66*
67*
68LOOP CRA MAIN LOOP
69 LDA ELOC
70 SUB ALOC
71 AOA
72 STA AVAL DETERMINED AVAILABLE DATA
73 SNZ
74 JMP EDAT END OF DATA, WE ARE HAPPY
75*
76* FIRST TRY TO ESABLISH A ZERO BLOCK
77 LDA ALOC
78 JST CZER COUNT ZERO LOCATIONS - IF ANY
79 CAS ZMIN COMPARE WITH MINIMUM FOR ZERO BLOCK
80 JMP MKZE GO TO MAKE A ZERO BLOCK
81 JMP MKZE GO FOR THE ZERO BLOCK AS WELL
82 JMP FILL PREPARE CONVETIONAL BLOCK
83MKZE CAS AVAL BLOCK TOO BIG??
84 LDA AVAL YES, LIMIT BLOCK SIZE
85 NOP TIGHT FIT
86 JST ZBLK PRODUCE THE THE BLOCK
87 JMP LOOP CONTINUE IN THE MAIN LOOP
88FILL CRA STUFF A PACKET
89 STA BCNT CLEAR BLOCK SIZE
90*
91STUF LDA ALOC
92 ADD BCNT CALCULATE NEW POSITION TO LOOK AT
93 JST CFIL DETERMINE AMOUNT OF CONTIGUOUS DATA
94 ADD BCNT ADD ACTUAL BLOCK SIZE
95 CAS AVAL COMPARE THAT WITH AVAILABLE DATA
96 LDA AVAL TOO MUCH, LIMIT AND GO
97 SKP A TIGHT FIT
98 JMP FIL2 FILL MORE!
99 JST DBLK PRODUCE BLOCK
100 JMP LOOP RETURN TO MAIN LOOP
101*
102FIL2 STA BCNT UPDATE BLOCK SIZE
103 ADD ALOC MAKE NEW STARTING LOCATION
104 JST CZER COUNT FOLLOWING ZEROS
105 CAS ZMIN COMPARE WITH MINIMUM FOR A ZERO BLOCK
106 JMP BEND OK, THERE ARE ENOUGH ZEROS. BLOCK SHALL BE GOOD.
107 JMP BEND
108* NO, WE CONTINUE LOOKING
109 ADD BCNT ADD CURRENT BLOCK SIZE
110 STA BCNT AND UPDATE IT
111 JMP STUF STUFF MORE
112*
113BEND LDA BCNT
114 JST DBLK PUNCH THE BLOCK
115 JMP LOOP BACK TO MAIN LOOP
116*
117*
118* END OF DATA
119EDAT LDA STRT
120 SZE
121 JMP AUTO
122 JST SBLK MAKE STOP BLOCK
123 JMP EOT
124AUTO JST ABLK MAKE ADRESS-BLOCK
125 JST GBLK MAKE GO-BLOCK
126EOT JST PLDR END OF JOB HAS COME.
127 HLT
128 JMP *-1 NO ESCAPE
129*
130*
131AVAL DEC 0 AVAILABLE DATA SIZE
132IPTR DEC 0 IMAGINARY POINTER
133BCNT DEC 0 PACKET SIZE COUNTER
134ZMIN DEC 8 MIN AMOUNT OF ZEROS FOR A BLOCK BREAK
135STRT DEC 0 ADDRESS FOR AUTO-START
136*
137*
138*******************
139* MAKE A STOP BLOCK
140SBLK DAC **
141 LDA BSTA START CHARACTER
142 ICA
143 ADD TSTP BLOCK TYPE
144 JST SWRD PUNCH THAT
145 JMP* SBLK
146*
147*
148*******************
149* MAKE A GO BLOCK
150GBLK DAC **
151 LDA BSTA START CHARACTER
152 ICA
153 ADD TGO BLOCK TYPE
154 JST SWRD PUNCH THAT
155 JMP* GBLK
156*
157*
158******************
159* MAKE A START ADDRESS BLOCK
160ABLK DAC **
161 STA CNT SAVE THE ADDRESS
162 LDA BSTA START CHARACTER
163 ICA
164 ADD TSAD BLOCK TYPE
165 JST SWRD PUNCH THAT
166 LDA CNT
167 JST SWRD
168 JST SWRD
169 JMP* ABLK
170*
171*
172*******************
173* MAKE ZERO BLOCK
174ZBLK DAC ** PRODUCE A ZERO BLOCK
175 STA CNT STORE SIZE OF BLOCK
176 LDA BSTA START CHARACTER
177 ICA
178 ADD TZER BLOCK TYPE
179 JST SWRD PUNCH THAT
180 LDA ALOC LOAD START ADDRESS
181 JST SWRD PUNCH START ADDRESS
182 STA CSUM INIT CHECKSUM
183 LDA CNT LOAD SIZE
184 JST SWRD PUNCH SIZE
185 ADD CSUM ADD CHECKSUM
186 JST SWRD PUNCH OUT CHECKSUM
187 LDA ALOC RELOAD POINTER
188 ADD CNT CALCULATE NEW POINTER
189 STA ALOC UPDATE ALOC
190 JMP* ZBLK END
191*
192*
193********************
194* MAKE DATA BLOCK
195DBLK DAC **
196 STA CNT SAVE SIZE
197*
198 LDA BSTA START CHARACTER
199 ICA
200 ADD TDAT DATA BLOCK TYPE
201 JST SWRD PUNCH
202*
203 LDA ALOC START ADDRESS
204 JST SWRD PUNCH IT
205 STA CSUM INIT CHECKSUM
206*
207 LDA CNT PACKET SIZE
208 JST SWRD PUNCH IT
209 ADD CSUM
210 STA CSUM UPDATE CHECKSUM
211*
212 LDA CNT
213 TCA
214 STA CNT NOW WE USE IT AS NEG COUNTER
215*
216DDLP LDA* ALOC LOAD DATA
217 JST SWRD PUNCH DATA
218 ADD CSUM
219 STA CSUM UPDATE CHECKSUM
220 IRS ALOC
221 IRS CNT
222 JMP DDLP LOOP IT
223 JST SWRD PUNCH CHECKSUM
224 JMP* DBLK BLOCK DONE
225*
226*
227*
228********************
229* COUNT FILLED LOCATIONS
230CFIL DAC **
231 STA PTR STORE ADDRESS TO POINTER
232 LDA SNZ LOAD DISCRIMINATOR OPERATION
233 STA DISC STORE INTO COUNT ROUTINE
234 JST COUN GO AND COUNT IT
235 JMP* CFIL
236*
237********************
238* COUNT ZERO LOCATIONS
239CZER DAC **
240 STA PTR STORE ADDRESS TO POINTER
241 LDA SZE
242 STA DISC
243 JST COUN
244 JMP* CZER
245*
246COUN DAC ** COUNT FILLED OR EMPTY LOCATIONS
247 CRA
248 STA CNT INITIALIZE COUNTER
249CLOP LDA* PTR
250DISC SZE WILL BE DYNAMICALLY OVERWRITTEN
251 JMP ZFIN NOW OTHER KIND OF DATA
252 IRS CNT NOTE DOWN THE FIND
253 IRS PTR POINT TO NEXT LOCATION TO BE TESTED
254 SKP
255 JMP ZFIN ADDRESS OVERFLOW MUST STOP COUNTING
256 JMP CLOP COUNT ON
257ZFIN LDA CNT
258 JMP* COUN
259*
260*
261***********************
262*
263PS2 DAC ** PUNCH OUT SECOND STAGE LOADER
264 LDA B2AD LOAD START ADDRESS OF SECOND STAGE LOADER
265 JST P23 CALL PUNCH23 ROUTINE
266 JMP* PS2
267*
268PS3 DAC ** PUNCH OUT SECOND STAGE LOADER
269 LDA S3SC LOAD START CHARACTER
270 OTA 2 PUNCH START CHARACTER
271 JMP *-1
272 LDA B3AD LOAD START ADDRESS OF SECOND STAGE LOADER
273 JST P23 CALL PUNCH23 ROUTINE
274 JMP* PS3
275*
276P23 DAC ** PUNCH OUT A LOADER
277 STA PTR SAVE POINTER
278L23 LDA* PTR
279 SNZ
280 JMP* P23 RETURN
281 JST SWRD PUNCH OUT CURRENT WORD
282 IRS PTR INCREMENT POINTER
283 JMP L23 LOOP AGAIN
284*
285*
286**********************
287* PUNCH SOME LEADER
288PLDR DAC ** PUNCH LEADER
289 LDA LDRL LOAD LEADER LENGTH
290 TCA COMPLEMENT IT
291 STA CNT STORE TO LEADER COUNTER
292 CRA LEADER IS ZERO
293LLP OTA 2
294 JMP *-1
295 IRS CNT
296 JMP LLP
297 JMP* PLDR
298*
299*
300*********************
301* PUNCH ONE WORD OF DATA
302SWRD DAC **
303 ICA
304 OTA 2
305 JMP *-1
306 ICA
307 OTA 2
308 JMP *-1 WAIT
309 JMP* SWRD
310*
311*
312B2AD DAC BO2S START ADDRESS OF SECOND STAGE LOADER
313B3AD DAC BO3S START ADDRESS OF THIRD STAGE LOADER
314*
315LDRL DEC 100 LEADER LENGTH
316ALOC *** ** NEXT WORD TO BE PUNCHED OUT
317ELOC *** ** LAST WORD TO BE PUNCHED OUT
318SZE SZE INSTRUCTION FOR FILL IN
319SNZ SNZ INSTRUCTION FOR FILL IN
320*
321*
322************************************************************************
323* THIS IST THE SECOND STAGE LOADER
324*
325 ORG '317 ONLY FOR DEVELOPMENT!
326BO2S OCT '20 START ADDRESS
327 JMP '10 JUMP BACK INTO KEY-IN LOADER
328*
329*S21 OCP '001 THIS IS THE JUMP-IN LOCATION, WILL GO TO '21
330*
331 INA '1001
332 JMP '17-BO2S+*-1
333 SUB '17-BO2S+S3SC STAGE 3 START CHARACTER
334 SZE
335 JMP '17-BO2S+*-4 EAT UP ALL JUNK
336*
337 INA '1001 READ WITH CLEAR
338 JMP '17-BO2S+*-1
339* JMP '17-BO2S+* DEBUG STOP
340 ICA
341 INA '001 READ WITHOUT CLEAR
342 JMP '17-BO2S+*-1
343* JMP '17-BO2S+* DEBUG STOP
344*
345*
346*
347 STA '17-BO2S+CNT STORE START ADDRESS
348* LDA '57 LOOK FOR DEPOSITED OTHER BOOT ADDRESS
349* SZE OK, IF WE FIND SOMETHING THERE...
350* STA '17-BO2S+CNT OVERWRITE DEFAULT VALUE
351 IRS '17-BO2S+CNT CORRECT STOLEN WORD
352 LDA '17-BO2S+CNT
353* JMP '776
354*
355 LDA '17-BO2S+CNT WHERE TO LOAD NOW?
356 STA '17-BO2S+PTR INIT POINTER
357*
358LOP INA '1001 READ IN CHARACTER
359 JMP '17-BO2S+*-1
360 ICA
361 INA '001 READ OTHER CHARACTER
362 JMP '17-BO2S+*-1
363 SNZ
364 JMP* '17-BO2S+CNT JUMP INTO THIRD STAGE LOADER
365* JMP '665
366 STA* '17-BO2S+PTR STORE DATA
367 IRS '17-BO2S+PTR MOVE ON
368 JMP '17-BO2S+LOP FETCH MORE DATA
369*
370S3SC OCT '301 START CHARACTER TO RECOGNIZE STAGE3
371PTR DAC ** GENERAL PURPOSE MEMORY POINTER
372CNT DAC ** WHERE TO LOAD? CAN BE CHANGED.
373BO2E OCT 10600 ZERO-TERMINATOR
374*
375*
376************************************************************************
377* HERE COMES THE THIRD STAGE LOADER
378*
379 ORG '600
380BO3S DAC * THAT IS FOR THE SECOND STAGE LOADER
381 OCP 1 READER ON (UNNECESSARY?)
382SLOP INA '1001 CRA AND READ
383 JMP *-1
384 SUB BSTA BLOCK START?
385 SZE
386 JMP SLOP BACK TO SEARCH LOOP
387 INA '1001 READ BLOCK TYPE
388 JMP *-1
389 STA BTYP STORE BLOCK TYPE FOR LATER USE
390 CAS TSAD START ADDRESS BLOCK?
391 JMP *+2
392 JMP RSAD READ START ADDRESS BLOCK
393 NOP
394 CAS TGO GO BLOCK?
395 JMP *+2
396 JMP RGO PROCESS GO BLOCK
397 NOP
398 CAS TDAT DATA BLOCK?
399 JMP *+2
400 JMP RBLK READ DATA BLOCK
401 NOP
402 CAS TZER ZERO BLOCK?
403 JMP *+2
404 JMP RBLK READ ZERO BLOCK
405 NOP
406 CAS TSTP STOP BLOCK?
407 JMP *+2
408 JMP RSTP PROCESS STOP BLOCK
409 NOP
410 LDA '125252 ERROR BLOCK TYPE
411 CRA
412 STA *+1
413 OCT 66 THE HALT TRICK
414 JMP SLOP SEARCH FOR NEW BLOCK
415*
416********************
417* START ADDRESS BLOCK
418RSAD JST LWRD
419 STA RESA
420 JST LWRD
421 SUB RESA
422 SZE
423 JMP CERR CHECKSUM ERROR!
424 JMP SLOP LOOK FOR NEW BLOCK!
425*
426*
427RGO JMP* RESA
428*
429*********************
430* READ DATA OR ZERO BLOCK
431RBLK JST LWRD
432 STA PTR START ADDRESS
433 STA CSUM
434 JST LWRD
435 TCA TWO'S COMPLEMENT
436 STA LEN GO COUNTER
437 TCA TWO'S COMPLEMENT BACK
438 ADD CSUM
439 STA CSUM
440RLP LDA BTYPE
441 CAS TDAT DATA BLOCK?
442 JMP RZER NO
443 JMP RDAT YES
444 JMP RZER NO, CLEAR A
445RDAT JST LWRD
446 STA* PTR
447 ADD CSUM ADD TO CHECKSUM
448 STA CSUM
449EL IRS PTR POINT TO NEXT LOCATION
450 SKP
451 JMP BO3S OVERFLOW!
452 IRS LEN INCREMENT NEG COUNTER
453 JMP RLP READ ON
454*
455 JST LWRD NOW READ IN THE CHECKSUM
456 SUB CSUM
457 SNZ
458 JMP SLOP
459CERR CRA CHECKSUM ERROR HALT
460 STA *+1
461 OCT 66
462 JMP SLOP TRY A NEW BLOCK
463*
464RZER CRA
465 STA* PTR STORE ZERO
466 JMP EL USE END OF LOOP ABOVE
467*******
468* STOP BLOCK
469RSTP CRA
470 STA *+1
471 OCT 66 A TRICK - HERE WILL BE THE HLT INSTRUCTION
472 JMP* RESA JUMP TO RESTART LOCATION
473*
474***** VARIABLES
475CSUM OCT 66 CHECKSUM
476LEN OCT 66 LENGTH TO GO
477RESA DAC SLOP RESTART ADDRESS
478BTYP OCT 66 BLOCK TYPE
479*
480BSTA DEC 129 BLOCK START CHARACTER
481*
482* BLOCK TYPES:
483TSAD OCT '33
484TGO OCT '44
485TZER OCT '55
486TSTP OCT '66
487TDAT OCT '11
488*
489*
490LWRD OCT 66
491 INA '1001 CLEAR A AND INPUT
492 JMP *-1
493 ICA
494 INA '1 INPUT
495 JMP *-1 WAIT
496 JMP* LWRD
497*
498 FIN WRITE OUT LITERALS - IF ANY
499BO3E DEC 0 ZERO TERMINATOR
500*
501************************************************************
502 END