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 PLDR PUNCH OUT LEADER
64 JST PS3 PUNCH THIRD STAGE LOADER
65 JST PLDR PUNCH OUT LEADER
72 STA AVAL DETERMINED AVAILABLE DATA
74 JMP EDAT END OF DATA, WE ARE HAPPY
76 * FIRST TRY TO ESABLISH A ZERO BLOCK
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
83 MKZE CAS AVAL BLOCK TOO BIG??
84 LDA AVAL YES, LIMIT BLOCK SIZE
86 JST ZBLK PRODUCE THE THE BLOCK
87 JMP LOOP CONTINUE IN THE MAIN LOOP
88 FILL CRA STUFF A PACKET
89 STA BCNT CLEAR BLOCK SIZE
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
99 JST DBLK PRODUCE BLOCK
100 JMP LOOP RETURN TO MAIN LOOP
102 FIL2 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.
108 * NO, WE CONTINUE LOOKING
109 ADD BCNT ADD CURRENT BLOCK SIZE
110 STA BCNT AND UPDATE IT
114 JST DBLK PUNCH THE BLOCK
115 JMP LOOP BACK TO MAIN LOOP
122 JST SBLK MAKE STOP BLOCK
124 AUTO JST ABLK MAKE ADRESS-BLOCK
125 JST GBLK MAKE GO-BLOCK
126 EOT JST PLDR END OF JOB HAS COME.
131 AVAL DEC 0 AVAILABLE DATA SIZE
132 IPTR DEC 0 IMAGINARY POINTER
133 BCNT DEC 0 PACKET SIZE COUNTER
134 ZMIN DEC 8 MIN AMOUNT OF ZEROS FOR A BLOCK BREAK
135 STRT DEC 0 ADDRESS FOR AUTO-START
141 LDA BSTA START CHARACTER
151 LDA BSTA START CHARACTER
159 * MAKE A START ADDRESS BLOCK
161 STA CNT SAVE THE ADDRESS
162 LDA BSTA START CHARACTER
174 ZBLK DAC ** PRODUCE A ZERO BLOCK
175 STA CNT STORE SIZE OF BLOCK
176 LDA BSTA START CHARACTER
180 LDA ALOC LOAD START ADDRESS
181 JST SWRD PUNCH START ADDRESS
182 STA CSUM INIT CHECKSUM
185 ADD CSUM ADD CHECKSUM
186 JST SWRD PUNCH OUT CHECKSUM
187 LDA ALOC RELOAD POINTER
188 ADD CNT CALCULATE NEW POINTER
198 LDA BSTA START CHARACTER
200 ADD TDAT DATA BLOCK TYPE
203 LDA ALOC START ADDRESS
205 STA CSUM INIT CHECKSUM
210 STA CSUM UPDATE CHECKSUM
214 STA CNT NOW WE USE IT AS NEG COUNTER
216 DDLP LDA* ALOC LOAD DATA
219 STA CSUM UPDATE CHECKSUM
223 JST SWRD PUNCH CHECKSUM
229 * COUNT FILLED LOCATIONS
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
238 * COUNT ZERO LOCATIONS
240 STA PTR STORE ADDRESS TO POINTER
246 COUN DAC ** COUNT FILLED OR EMPTY LOCATIONS
248 STA CNT INITIALIZE COUNTER
250 DISC 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
255 JMP ZFIN ADDRESS OVERFLOW MUST STOP COUNTING
261 ***********************
263 PS2 DAC ** PUNCH OUT SECOND STAGE LOADER
264 LDA B2AD LOAD START ADDRESS OF SECOND STAGE LOADER
265 JST P23 CALL PUNCH23 ROUTINE
268 PS3 DAC ** PUNCH OUT SECOND STAGE LOADER
269 LDA S3SC LOAD START CHARACTER
270 OTA 2 PUNCH START CHARACTER
272 LDA B3AD LOAD START ADDRESS OF SECOND STAGE LOADER
273 JST P23 CALL PUNCH23 ROUTINE
276 P23 DAC ** PUNCH OUT A LOADER
281 JST SWRD PUNCH OUT CURRENT WORD
282 IRS PTR INCREMENT POINTER
286 **********************
288 PLDR DAC ** PUNCH LEADER
289 LDA LDRL LOAD LEADER LENGTH
291 STA CNT STORE TO LEADER COUNTER
300 *********************
301 * PUNCH ONE WORD OF DATA
312 B2AD DAC BO2S START ADDRESS OF SECOND STAGE LOADER
313 B3AD DAC BO3S START ADDRESS OF THIRD STAGE LOADER
315 LDRL DEC 100 LEADER LENGTH
316 ALOC *** ** NEXT WORD TO BE PUNCHED OUT
317 ELOC *** ** LAST WORD TO BE PUNCHED OUT
318 SZE SZE INSTRUCTION FOR FILL IN
319 SNZ SNZ INSTRUCTION FOR FILL IN
322 ************************************************************************
323 * THIS IST THE SECOND STAGE LOADER
325 ORG '317 ONLY FOR DEVELOPMENT!
326 BO2S OCT '20 START ADDRESS
327 JMP '10 JUMP BACK INTO KEY-IN LOADER
329 *S21 OCP '001 THIS IS THE JUMP-IN LOCATION, WILL GO TO '21
333 SUB '17-BO2S+S3SC STAGE 3 START CHARACTER
335 JMP '17-BO2S+*-4 EAT UP ALL JUNK
337 INA '1001 READ WITH CLEAR
339 * JMP '17-BO2S+* DEBUG STOP
341 INA '001 READ WITHOUT CLEAR
343 * JMP '17-BO2S+* DEBUG STOP
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
355 LDA '17-BO2S+CNT WHERE TO LOAD NOW?
356 STA '17-BO2S+PTR INIT POINTER
358 LOP INA '1001 READ IN CHARACTER
361 INA '001 READ OTHER CHARACTER
364 JMP* '17-BO2S+CNT JUMP INTO THIRD STAGE LOADER
366 STA* '17-BO2S+PTR STORE DATA
367 IRS '17-BO2S+PTR MOVE ON
368 JMP '17-BO2S+LOP FETCH MORE DATA
370 S3SC OCT '301 START CHARACTER TO RECOGNIZE STAGE3
371 PTR DAC ** GENERAL PURPOSE MEMORY POINTER
372 CNT DAC ** WHERE TO LOAD? CAN BE CHANGED.
373 BO2E OCT 10600 ZERO-TERMINATOR
376 ************************************************************************
377 * HERE COMES THE THIRD STAGE LOADER
380 BO3S DAC * THAT IS FOR THE SECOND STAGE LOADER
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
413 OCT 66 THE HALT TRICK
414 JMP SLOP SEARCH FOR NEW BLOCK
417 * START ADDRESS BLOCK
423 JMP CERR CHECKSUM ERROR!
424 JMP SLOP LOOK FOR NEW BLOCK!
429 *********************
430 * READ DATA OR ZERO BLOCK
432 STA PTR START ADDRESS
437 TCA TWO'S COMPLEMENT BACK
447 ADD CSUM ADD TO CHECKSUM
449 EL IRS PTR POINT TO NEXT LOCATION
452 IRS LEN INCREMENT NEG COUNTER
455 JST LWRD NOW READ IN THE CHECKSUM
459 CERR CRA CHECKSUM ERROR HALT
462 JMP SLOP TRY A NEW BLOCK
466 JMP EL USE END OF LOOP ABOVE
471 OCT 66 A TRICK - HERE WILL BE THE HLT INSTRUCTION
472 JMP* RESA JUMP TO RESTART LOCATION
476 LEN OCT 66 LENGTH TO GO
477 RESA DAC SLOP RESTART ADDRESS
478 BTYP OCT 66 BLOCK TYPE
480 BSTA DEC 129 BLOCK START CHARACTER
491 INA '1001 CLEAR A AND INPUT
498 FIN WRITE OUT LITERALS - IF ANY
499 BO3E DEC 0 ZERO TERMINATOR
501 ************************************************************