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
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
70 STA AVAL DETERMINED AVAILABLE DATA
72 JMP EDAT END OF DATA, WE ARE HAPPY
74 * FIRST TRY TO ESABLISH A ZERO BLOCK
76 JST CZER COUNT ZERO LOCATIONS - IF ANY
77 CAS ZMIN COMPARE WITH MINIMUM FOR ZERO BLOCK
78 JMP MKZE GO TO MAKE A ZERO BLOCK
79 JMP MKZE GO FOR THE ZERO BLOCK AS WELL
80 JMP FILL PREPARE CONVETIONAL BLOCK
81 MKZE CAS AVAL BLOCK TOO BIG??
82 LDA AVAL YES, LIMIT BLOCK SIZE
84 JST ZBLK PRODUCE THE THE BLOCK
85 JMP LOOP CONTINUE IN THE MAIN LOOP
86 FILL CRA STUFF A PACKET
87 STA BCNT CLEAR BLOCK SIZE
90 ADD BCNT CALCULATE NEW POSITION TO LOOK AT
91 JST CFIL DETERMINE AMOUNT OF CONTIGUOUS DATA
92 ADD BCNT ADD ACTUAL BLOCK SIZE
93 CAS AVAL COMPARE THAT WITH AVAILABLE DATA
94 LDA AVAL TOO MUCH, LIMIT AND GO
97 JST DBLK PRODUCE BLOCK
98 JMP LOOP RETURN TO MAIN LOOP
100 FIL2 STA BCNT UPDATE BLOCK SIZE
101 ADD ALOC MAKE NEW STARTING LOCATION
102 JST CZER COUNT FOLLOWING ZEROS
103 CAS ZMIN COMPARE WITH MINIMUM FOR A ZERO BLOCK
104 JMP BEND OK, THERE ARE ENOUGH ZEROS. BLOCK SHALL BE GOOD.
106 * NO, WE CONTINUE LOOKING
107 ADD BCNT ADD CURRENT BLOCK SIZE
108 STA BCNT AND UPDATE IT
112 JST DBLK PUNCH THE BLOCK
113 JMP LOOP BACK TO MAIN LOOP
120 JST SBLK MAKE STOP BLOCK
122 AUTO JST ABLK MAKE ADRESS-BLOCK
123 JST GBLK MAKE GO-BLOCK
124 EOT JST PLDR END OF JOB HAS COME.
129 AVAL DEC 0 AVAILABLE DATA SIZE
130 IPTR DEC 0 IMAGINARY POINTER
131 BCNT DEC 0 PACKET SIZE COUNTER
132 ZMIN DEC 8 MIN AMOUNT OF ZEROS FOR A BLOCK BREAK
133 STRT DEC 0 ADDRESS FOR AUTO-START
139 LDA BSTA START CHARACTER
149 LDA BSTA START CHARACTER
157 * MAKE A START ADDRESS BLOCK
159 STA CNT SAVE THE ADDRESS
160 LDA BSTA START CHARACTER
172 ZBLK DAC ** PRODUCE A ZERO BLOCK
173 STA CNT STORE SIZE OF BLOCK
174 LDA BSTA START CHARACTER
178 LDA ALOC LOAD START ADDRESS
179 JST SWRD PUNCH START ADDRESS
180 STA CSUM INIT CHECKSUM
183 ADD CSUM ADD CHECKSUM
184 JST SWRD PUNCH OUT CHECKSUM
185 LDA ALOC RELOAD POINTER
186 ADD CNT CALCULATE NEW POINTER
196 LDA BSTA START CHARACTER
198 ADD TDAT DATA BLOCK TYPE
201 LDA ALOC START ADDRESS
203 STA CSUM INIT CHECKSUM
208 STA CSUM UPDATE CHECKSUM
212 STA CNT NOW WE USE IT AS NEG COUNTER
214 DDLP LDA* ALOC LOAD DATA
217 STA CSUM UPDATE CHECKSUM
221 JST SWRD PUNCH CHECKSUM
227 * COUNT FILLED LOCATIONS
229 STA PTR STORE ADDRESS TO POINTER
230 LDA SNZ LOAD DISCRIMINATOR OPERATION
231 STA DISC STORE INTO COUNT ROUTINE
232 JST COUN GO AND COUNT IT
236 * COUNT ZERO LOCATIONS
238 STA PTR STORE ADDRESS TO POINTER
244 COUN DAC ** COUNT FILLED OR EMPTY LOCATIONS
246 STA CNT INITIALIZE COUNTER
248 DISC SZE WILL BE DYNAMICALLY OVERWRITTEN
249 JMP ZFIN NOW OTHER KIND OF DATA
250 IRS CNT NOTE DOWN THE FIND
251 IRS PTR POINT TO NEXT LOCATION TO BE TESTED
253 JMP ZFIN ADDRESS OVERFLOW MUST STOP COUNTING
259 ***********************
261 PS2 DAC ** PUNCH OUT SECOND STAGE LOADER
262 LDA B2AD LOAD START ADDRESS OF SECOND STAGE LOADER
263 JST P23 CALL PUNCH23 ROUTINE
266 PS3 DAC ** PUNCH OUT SECOND STAGE LOADER
267 LDA S3SC LOAD START CHARACTER
268 OTA 2 PUNCH START CHARACTER
270 LDA B3AD LOAD START ADDRESS OF SECOND STAGE LOADER
271 JST P23 CALL PUNCH23 ROUTINE
274 P23 DAC ** PUNCH OUT A LOADER
277 JST SWRD PUNCH OUT CURRENT WORD
280 IRS PTR INCREMENT POINTER
284 **********************
286 PLDR DAC ** PUNCH LEADER
287 LDA LDRL LOAD LEADER LENGTH
289 STA CNT STORE TO LEADER COUNTER
298 *********************
299 * PUNCH ONE WORD OF DATA
310 B2AD DAC BO2S START ADDRESS OF SECOND STAGE LOADER
311 B3AD DAC BO3S START ADDRESS OF THIRD STAGE LOADER
313 LDRL DEC 100 LEADER LENGTH
314 SZE SZE INSTRUCTION FOR FILL IN
315 SNZ SNZ INSTRUCTION FOR FILL IN
318 ************************************************************************
319 * THIS IST THE SECOND STAGE LOADER
321 ORG '317 ONLY FOR DEVELOPMENT!
322 BO2S OCT '20 START ADDRESS
323 JMP '10 JUMP BACK INTO KEY-IN LOADER
325 *S21 OCP '001 THIS IS THE JUMP-IN LOCATION, WILL GO TO '21
329 SUB '17-BO2S+S3SC STAGE 3 START CHARACTER
331 JMP '17-BO2S+*-4 EAT UP ALL JUNK
333 INA '1001 READ WITH CLEAR
336 INA '001 READ WITHOUT CLEAR
339 STA '17-BO2S+CNT2 STORE START ADDRESS
340 STA* '17-BO2S+CNT2 STORE START IN START
341 * LDA '57 LOOK FOR DEPOSITED OTHER BOOT ADDRESS
342 * SZE OK, IF WE FIND SOMETHING THERE...
343 * STA '17-BO2S+CNT2 OVERWRITE DEFAULT VALUE
344 IRS '17-BO2S+CNT2 CORRECT STOLEN WORD
348 LDA '17-BO2S+CNT2 WHERE TO LOAD NOW?
349 STA '17-BO2S+PTR2 INIT POINTER
351 LOP INA '1001 READ IN CHARACTER
354 INA '001 READ OTHER CHARACTER
357 JMP* '17-BO2S+CNT2 JUMP INTO THIRD STAGE LOADER
359 STA* '17-BO2S+PTR2 STORE DATA
360 IRS '17-BO2S+PTR2 MOVE ON
361 JMP '17-BO2S+LOP FETCH MORE DATA
363 S3SC OCT '301 START CHARACTER TO RECOGNIZE STAGE3
364 PTR2 DAC ** GENERAL PURPOSE MEMORY POINTER
365 CNT2 DAC ** WHERE TO LOAD? CAN BE CHANGED.
366 BO2E OCT 10600 ZERO-TERMINATOR
369 ************************************************************************
370 * HERE COMES THE THIRD STAGE LOADER
373 BO3S DAC * THAT IS FOR THE SECOND STAGE LOADER
376 LDA PJ1 COMPLETE THE PAUS ROUTINE
379 STA JH ENSURE HALT INSTRUCTION
381 OCP 1 READER ON (UNNECESSARY?)
382 SLOP INA '1001 CRA AND READ
384 SUB BSTA BLOCK START?
386 JMP SLOP BACK TO SEARCH LOOP
387 INA '1001 READ BLOCK TYPE
389 STA BTYP STORE BLOCK TYPE FOR LATER USE
390 CAS TSAD START ADDRESS BLOCK?
392 JMP RSAD READ START ADDRESS BLOCK
396 JMP RGO PROCESS GO BLOCK
400 JMP RBLK READ DATA BLOCK
404 JMP RBLK READ ZERO BLOCK
408 JMP RSTP PROCESS STOP BLOCK
410 LDA ='125252 ERROR BLOCK TYPE
412 JMP SLOP SEARCH FOR NEW BLOCK
416 * START ADDRESS BLOCK
422 JMP CERR CHECKSUM ERROR!
423 JMP SLOP LOOK FOR NEW BLOCK!
428 *********************
429 * READ DATA OR ZERO BLOCK
431 STA PTR START ADDRESS
436 TCA TWO'S COMPLEMENT BACK
446 ADD CSUM ADD TO CHECKSUM
448 EL IRS PTR POINT TO NEXT LOCATION
451 IRS LEN INCREMENT NEG COUNTER
454 JST LWRD NOW READ IN THE CHECKSUM
458 CERR CRA CHECKSUM ERROR HALT
460 JMP SLOP TRY A NEW BLOCK
464 JMP EL USE END OF LOOP ABOVE
467 RSTP LDA BO3S FOR SHOW
469 JMP* RESA JUMP TO RESTART LOCATION
472 **********************
475 RESA DAC SLOP RESTART ADDRESS
476 BSTA DEC 129 BLOCK START CHARACTER
487 INA '1001 CLEAR A AND INPUT
494 FIN WRITE OUT LITERALS - IF ANY
496 * THE ATTIC OF THE THIRD STAGE LOADER
497 PJ1 JMP* PAUS LAST LOCATION THAT WILL BE LOADED FROM TAPE!
499 JH HLT THIS WILL STAY A HALT
500 J1 DAC ** WILL BE: JMP* PAUS
504 LEN OCT 66 LENGTH TO GO
505 BTYP OCT 66 BLOCK TYPE
508 * VARIABLES OF THE MAIN PROGRAM
509 ALOC *** ** NEXT WORD TO BE PUNCHED OUT
510 ELOC *** ** LAST WORD TO BE PUNCHED OUT
511 PTR DAC ** GENERAL PURPOSE MEMORY POINTER
512 CNT DAC ** WHERE TO LOAD? CAN BE CHANGED.
514 ************************************************************