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