1 * BINARY PUNCH AND LOAD PROGRAM
5 * FIRST LOC TO A, LAST LOC TO B
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.
17 * THE DATA BLOCK CONTAINS USER DATA AND A CHECKSUM.
25 * ZERO BLOCK IS USED TO REPRESENT ZERO CORE LOCATIONS
32 * A BLOCK TO SET THE START LOCATION AFTER LOAD
38 * THIS BLOCK STOPS LOADING AND JUMPS TO THE START LOCATION.
39 * IF NO START LOCATION HAS BEEN CODED THE LOADER WILL
43 * THIS BLOCK TELLS THE LOADER THAT IT SHALL STOP NOW.
45 * NO BODY AT ALL, ONLY BLOCK START AND BLOCK TYPE :-)
47 ************************************************************************
49 SUBR LSTART,BO3S LOADER START IS GOOD TO KNOW
54 STA STRT SAVE AUTO-START ADDRESS
56 STA ALOC FIRST LOCATION TO PUNCH
58 STA ELOC LAST LOCATION TO PUNCH
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 PS3 PUNCH THIRD STAGE LOADER
64 JST PDAT PUNCH OUT DATA
69 JST SBLK MAKE STOP BLOCK
71 AUTO JST ABLK MAKE ADRESS-BLOCK
72 JST GBLK MAKE GO-BLOCK
73 EOT JST PLDR END OF JOB HAS COME.
77 **********************
78 * PUNCH THE DESIRED DATA
85 STA AVAL DETERMINED AVAILABLE DATA
87 JMP* PDAT END OF DATA, WE ARE HAPPY, RETURN
89 * FIRST TRY TO ESABLISH A ZERO BLOCK
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
96 MKZE CAS AVAL BLOCK TOO BIG??
97 LDA AVAL YES, LIMIT BLOCK SIZE
99 JST ZBLK PRODUCE THE THE BLOCK
100 JMP LOOP CONTINUE IN THE MAIN LOOP
101 FILL CRA STUFF A PACKET
102 STA BCNT CLEAR BLOCK SIZE
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
112 JST DBLK PRODUCE BLOCK
113 JMP LOOP RETURN TO MAIN LOOP
115 FIL2 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.
121 * NO, WE CONTINUE LOOKING
122 ADD BCNT ADD CURRENT BLOCK SIZE
123 STA BCNT AND UPDATE IT
127 JST DBLK PUNCH THE BLOCK
128 JMP LOOP BACK TO MAIN LOOP
130 **************************
132 AVAL DEC 0 AVAILABLE DATA SIZE
133 IPTR DEC 0 IMAGINARY POINTER
134 BCNT DEC 0 PACKET SIZE COUNTER
135 ZMIN DEC 8 MIN AMOUNT OF ZEROS FOR A BLOCK BREAK
136 STRT DEC 0 ADDRESS FOR AUTO-START
142 LDA BSTA START CHARACTER
152 LDA BSTA START CHARACTER
160 * MAKE A START ADDRESS BLOCK
162 STA CNT SAVE THE ADDRESS
163 LDA BSTA START CHARACTER
175 ZBLK DAC ** PRODUCE A ZERO BLOCK
176 STA CNT STORE SIZE OF BLOCK
177 LDA BSTA START CHARACTER
181 LDA ALOC LOAD START ADDRESS
182 JST SWRD PUNCH START ADDRESS
183 STA CSUM INIT CHECKSUM
186 ADD CSUM ADD CHECKSUM
187 JST SWRD PUNCH OUT CHECKSUM
188 LDA ALOC RELOAD POINTER
189 ADD CNT CALCULATE NEW POINTER
199 LDA BSTA START CHARACTER
201 ADD TDAT DATA BLOCK TYPE
204 LDA ALOC START ADDRESS
206 STA CSUM INIT CHECKSUM
211 STA CSUM UPDATE CHECKSUM
215 STA CNT NOW WE USE IT AS NEG COUNTER
217 DDLP LDA* ALOC LOAD DATA
220 STA CSUM UPDATE CHECKSUM
224 JST SWRD PUNCH CHECKSUM
230 * COUNT FILLED LOCATIONS
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
239 * COUNT ZERO LOCATIONS
241 STA PTR STORE ADDRESS TO POINTER
247 COUN DAC ** COUNT FILLED OR EMPTY LOCATIONS
249 STA CNT INITIALIZE COUNTER
251 DISC 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
256 JMP ZFIN ADDRESS OVERFLOW MUST STOP COUNTING
262 ***********************
264 PS2 DAC ** PUNCH OUT SECOND STAGE LOADER
265 LDA B2AD LOAD START ADDRESS OF SECOND STAGE LOADER
266 JST P23 CALL PUNCH23 ROUTINE
269 PS3 DAC ** PUNCH OUT SECOND STAGE LOADER
270 LDA S3SC LOAD START CHARACTER
271 OTA 2 PUNCH START CHARACTER
273 LDA B3AD LOAD START ADDRESS OF SECOND STAGE LOADER
274 JST P23 CALL PUNCH23 ROUTINE
277 P23 DAC ** PUNCH OUT A LOADER
280 JST SWRD PUNCH OUT CURRENT WORD
283 IRS PTR INCREMENT POINTER
287 **********************
289 PLDR DAC ** PUNCH LEADER
290 LDA LDRL LOAD LEADER LENGTH
292 STA CNT STORE TO LEADER COUNTER
301 *********************
302 * PUNCH ONE WORD OF DATA
313 B2AD DAC BO2S START ADDRESS OF SECOND STAGE LOADER
314 B3AD DAC BO3S START ADDRESS OF THIRD STAGE LOADER
316 LDRL DEC 100 LEADER LENGTH
317 SZE SZE INSTRUCTION FOR FILL IN
318 SNZ SNZ INSTRUCTION FOR FILL IN
321 ************************************************************************
322 * THIS IST THE SECOND STAGE LOADER
324 ORG '317 ONLY FOR DEVELOPMENT!
325 BO2S OCT '20 START ADDRESS
326 JMP '10 JUMP BACK INTO KEY-IN LOADER
328 *S21 OCP '001 THIS IS THE JUMP-IN LOCATION, WILL GO TO '21
332 SUB '17-BO2S+S3SC STAGE 3 START CHARACTER
334 JMP '17-BO2S+*-4 EAT UP ALL JUNK
336 INA '1001 READ WITH CLEAR
339 INA '001 READ WITHOUT CLEAR
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
351 LDA '17-BO2S+CNT2 WHERE TO LOAD NOW?
352 STA '17-BO2S+PTR2 INIT POINTER
354 LOP INA '1001 READ IN CHARACTER
357 INA '001 READ OTHER CHARACTER
360 JMP* '17-BO2S+CNT2 JUMP INTO THIRD STAGE LOADER
362 STA* '17-BO2S+PTR2 STORE DATA
363 IRS '17-BO2S+PTR2 MOVE ON
364 JMP '17-BO2S+LOP FETCH MORE DATA
366 S3SC OCT '301 START CHARACTER TO RECOGNIZE STAGE3
367 PTR2 DAC ** GENERAL PURPOSE MEMORY POINTER
368 CNT2 DAC ** WHERE TO LOAD? CAN BE CHANGED.
369 BO2E OCT 10600 ZERO-TERMINATOR
372 ************************************************************************
373 * HERE COMES THE THIRD STAGE LOADER
376 BO3S DAC * THAT IS FOR THE SECOND STAGE LOADER
379 LDA PJ1 COMPLETE THE PAUS ROUTINE
382 STA JH ENSURE HALT INSTRUCTION
384 OCP 1 READER ON (UNNECESSARY?)
385 SLOP INA '1001 CRA AND READ
387 SUB BSTA BLOCK START?
389 JMP SLOP BACK TO SEARCH LOOP
390 INA '1001 READ BLOCK TYPE
392 STA BTYP STORE BLOCK TYPE FOR LATER USE
393 CAS TSAD START ADDRESS BLOCK?
395 JMP RSAD READ START ADDRESS BLOCK
399 JMP RGO PROCESS GO BLOCK
403 JMP RBLK READ DATA BLOCK
407 JMP RBLK READ ZERO BLOCK
411 JMP RSTP PROCESS STOP BLOCK
413 LDA ='125252 ERROR BLOCK TYPE
415 JMP SLOP SEARCH FOR NEW BLOCK
419 * START ADDRESS BLOCK
425 JMP CERR CHECKSUM ERROR!
426 JMP SLOP LOOK FOR NEW BLOCK!
431 *********************
432 * READ DATA OR ZERO BLOCK
434 STA PTR START ADDRESS
439 TCA TWO'S COMPLEMENT BACK
449 ADD CSUM ADD TO CHECKSUM
451 EL IRS PTR POINT TO NEXT LOCATION
454 IRS LEN INCREMENT NEG COUNTER
457 JST LWRD NOW READ IN THE CHECKSUM
461 CERR CRA CHECKSUM ERROR HALT
463 JMP SLOP TRY A NEW BLOCK
467 JMP EL USE END OF LOOP ABOVE
470 RSTP LDA BO3S FOR SHOW
472 JMP* RESA JUMP TO RESTART LOCATION
475 **********************
478 RESA DAC SLOP RESTART ADDRESS
479 BSTA DEC 129 BLOCK START CHARACTER
490 INA '1001 CLEAR A AND INPUT
497 FIN WRITE OUT LITERALS - IF ANY
499 * THE ATTIC OF THE THIRD STAGE LOADER
500 PJ1 JMP* PAUS LAST LOCATION THAT WILL BE LOADED FROM TAPE!
502 JH HLT THIS WILL STAY A HALT
503 J1 DAC ** WILL BE: JMP* PAUS
507 LEN OCT 66 LENGTH TO GO
508 BTYP OCT 66 BLOCK TYPE
511 * VARIABLES OF THE MAIN PROGRAM
512 ALOC *** ** NEXT WORD TO BE PUNCHED OUT
513 ELOC *** ** LAST WORD TO BE PUNCHED OUT
514 PTR DAC ** GENERAL PURPOSE MEMORY POINTER
515 CNT DAC ** WHERE TO LOAD? CAN BE CHANGED.
517 ************************************************************