1 * BINAL - BINARY PUNCH AND LOAD PROGRAM (REV. 1.0)
6 * BINAL - A PAL-AP DROP-IN REPLACEMENT.
15 * 1.0 (24.04.2006) - INITIAL VERSION
24 * NO 4/6/6 FORMAT, DIRECT BINARY DATA
27 * SUPPORTS ONLY HIGH SPEED PAPER TAPE PUNCH
31 * FIRST LOAD THE OBJECT TAPE INTO ANY SECTOR 'XX000 IN MEMORY.
32 * TO PUNCH A SELF LOADING TAPE DO THE FOLLOWING:
35 * -IF LOAD AND GO IS DESIRED, PUT PROGRAM'S START ADDRESS INTO A
37 * -ENTER THE FIRST ADDRESS TO BE PUNCHED INTO A
39 * -ENTER THE LAST ADDRESS TO BE PUNCHED INTO A
40 * -PRESS START, BINAL PUNCHES YOUR SYSTEM TAPE
42 * TO MAKE A BINAL SLST TAPE
43 * USE 'XX000 THAT AS FIRST LOCATION TO BE PUNCHED.
44 * THE LAST LOCATION TO BE PUNCHED IS 'XX577, THE REST OF THE SECTOR IS
45 * ALWAYS AND AUTOMATICALLY PUNCHED OUT.
48 * SIMPLY MOUNT THE GENERATED TAPE ON THE HIGH SPEED PAPER TAPE READER
49 * AND LOAD WITH THE STANDARD KEY-IN LOADER.
50 * THE CONTENTS OF THE TAPE GO TO WHERE THEY COME FROM. THE THIRD STAGE
51 * LOADER GOES TO 'XX600. THIS LOCATION CAN BE ALTERED BY ENTERING AN
52 * ADDRESS INTO A BEFORE STARTING THE KEY-IN LOADER.
53 * IT IS ALSO POSSIBLE TO ALTER THE THIRD-STAGE LOADER ADDRESS BEFORE
54 * PUNCHING BY DEPOSITING ANOTHER ADDRESS INTO 'XX600.
56 * SPECIAL MODES OF OPERATION
57 * IT IS POSSIBLE TO COLLECT THE OUTPUT OF MULTIPLE RUNS OF BINAL INTO
58 * ONE SYSTEM TAPE. THIS IS DONE BY SENSE SWITCH SETTINGS:
59 * SSW1 SET - DON'T PUNCH OUT SECOND AND THIRD STAGE LOADERS
60 * SSW2 SET - DON'T PUNCH OUT DATA
61 * SSW3 SET - DON'T PUNCH OUT END OF TAPE/GO BLOCK
62 * SSW4 SET - PUNCH ONLY A GO BLOCK
65 * THE TAPE CONTAINS HIGE DATA BLOCKS.
66 * EVERY BLOCK IS PREPENDED WITH THE BLOCK START CHARACTER
67 * AND THE BLOCK TYPE BYTE.
68 * THEN FOLLOWS THE BLOCK DATA IN 16BIT BIG ENDIAN FORMAT.
73 * THE DATA BLOCK CONTAINS USER DATA AND A CHECKSUM.
81 * ZERO BLOCK IS USED TO REPRESENT ZERO CORE LOCATIONS
88 * A BLOCK TO SET THE START LOCATION AFTER LOAD
94 * THIS BLOCK STOPS LOADING AND JUMPS TO THE START LOCATION.
95 * IF NO START LOCATION HAS BEEN CODED THE LOADER WILL
99 * THIS BLOCK TELLS THE LOADER THAT IT SHALL STOP NOW.
101 * NO BODY AT ALL, ONLY BLOCK START AND BLOCK TYPE :-)
103 ************************************************************************
105 SUBR LSTART,BO3S BEGINNING OF THIRD STAGE LOADER
110 STA STRT SAVE AUTO START LOCATION
112 STA ALOC FIRST LOCATION TO PUNCH
114 STA ELOC LAST LOCATION TO PUNCH
116 OCP '0002 START PUNCH (NOT NECESSARY ON MY H316)
118 SR1 SKIP IF SSW 1 RESET
119 JMP NOBO NO BOOT CODE
120 JST PLDR PUNCH OUT LEADER
121 JST PS2 PUNCH SECOND STAGE LOADER
122 JST PS3 PUNCH THIRD STAGE LOADER
124 NOBO SS2 SKIP IF SSW 2 SET
125 JST PDAT PUNCH OUT DATA
127 LDA STRT START ADDRESS
129 JST ABLK MAKE ADRESS-BLOCK
131 SR3 SKIP IF SSW3 RESET
132 JMP NOGO NO GO/STOP BLOCK
136 JST GBLK MAKE GO BLOCK
139 JST SBLK MAKE STOP BLOCK
141 NOGO JST PLDR END OF TAPE HAS COME.
146 **********************
147 * PUNCH THE DESIRED DATA
154 STA AVAL AVAILABLE NUMBER OF WORDS
156 JMP* PDAT END OF DATA, WE ARE HAPPY, RETURN
158 * TRY TO MAKE A ZERO BLOCK
160 JST CZER COUNT ZERO LOCATIONS - IF ANY
161 CAS ZMIN COMPARE WITH MINIMUM FOR ZERO BLOCK
162 JMP MKZE GO TO MAKE A ZERO BLOCK
163 JMP MKZE GO FOR THE ZERO BLOCK AS WELL
164 JMP FILL PREPARE CONVETIONAL BLOCK
165 MKZE CAS AVAL BLOCK TOO BIG??
166 LDA AVAL YES, LIMIT BLOCK SIZE
168 JST ZBLK PRODUCE THE THE BLOCK
169 JMP LOOP CONTINUE IN THE MAIN LOOP
170 FILL CRA STUFF A PACKET
171 STA BCNT CLEAR BLOCK SIZE
174 ADD BCNT CALCULATE NEW POSITION TO LOOK AT
175 JST CFIL DETERMINE AMOUNT OF CONTIGUOUS DATA
176 ADD BCNT ADD ACTUAL BLOCK SIZE
177 CAS AVAL COMPARE THAT WITH AVAILABLE DATA
178 LDA AVAL TOO MUCH, LIMIT AND GO
181 JST DBLK PRODUCE BLOCK
182 JMP LOOP RETURN TO MAIN LOOP
184 FIL2 STA BCNT UPDATE BLOCK SIZE
185 ADD ALOC MAKE NEW STARTING LOCATION
186 JST CZER COUNT FOLLOWING ZEROS
187 CAS ZMIN COMPARE WITH MINIMUM FOR A ZERO BLOCK
188 JMP BEND OK, THERE ARE ENOUGH ZEROS. BLOCK SHALL BE GOOD.
190 * NO, WE CONTINUE LOOKING
191 ADD BCNT ADD CURRENT BLOCK SIZE
192 STA BCNT AND UPDATE IT
196 JST DBLK PUNCH THE BLOCK
197 JMP LOOP BACK TO MAIN LOOP
199 **************************
201 AVAL DEC 0 AVAILABLE DATA SIZE
202 IPTR DEC 0 IMAGINARY POINTER
203 BCNT DEC 0 PACKET SIZE COUNTER
204 ZMIN DEC 8 MIN AMOUNT OF ZEROS FOR A BLOCK BREAK
205 STRT DEC 0 ADDRESS FOR AUTO-START
211 LDA BSTA START CHARACTER
221 LDA BSTA START CHARACTER
229 * MAKE A START ADDRESS BLOCK
231 STA CNT SAVE THE ADDRESS
232 LDA BSTA START CHARACTER
244 ZBLK DAC ** PRODUCE A ZERO BLOCK
245 STA CNT STORE SIZE OF BLOCK
246 LDA BSTA START CHARACTER
250 LDA ALOC LOAD START ADDRESS
251 JST SWRD PUNCH START ADDRESS
252 STA CSUM INIT CHECKSUM
255 ADD CSUM ADD CHECKSUM
256 JST SWRD PUNCH OUT CHECKSUM
257 LDA ALOC RELOAD POINTER
258 ADD CNT CALCULATE NEW POINTER
268 LDA BSTA START CHARACTER
270 ADD TDAT DATA BLOCK TYPE
273 LDA ALOC START ADDRESS
275 STA CSUM INIT CHECKSUM
280 STA CSUM UPDATE CHECKSUM
284 STA CNT NOW WE USE IT AS NEG COUNTER
286 DDLP LDA* ALOC LOAD DATA
289 STA CSUM UPDATE CHECKSUM
293 JST SWRD PUNCH CHECKSUM
299 * COUNT FILLED LOCATIONS
301 STA PTR STORE ADDRESS TO POINTER
302 LDA SNZ LOAD DISCRIMINATOR OPERATION
303 STA DISC STORE INTO COUNT ROUTINE
304 JST COUN GO AND COUNT IT
308 * COUNT ZERO LOCATIONS
310 STA PTR STORE ADDRESS TO POINTER
316 COUN DAC ** COUNT FILLED OR EMPTY LOCATIONS
318 STA CNT INITIALIZE COUNTER
320 DISC SZE WILL BE DYNAMICALLY OVERWRITTEN
321 JMP ZFIN NOW OTHER KIND OF DATA
322 IRS CNT NOTE DOWN THE FIND
323 IRS PTR POINT TO NEXT LOCATION TO BE TESTED
325 JMP ZFIN ADDRESS OVERFLOW MUST STOP COUNTING
331 ***********************
333 PS2 DAC ** PUNCH OUT SECOND STAGE LOADER
334 LDA B2AD LOAD START ADDRESS OF SECOND STAGE LOADER
335 JST P23 CALL PUNCH23 ROUTINE
338 PS3 DAC ** PUNCH OUT SECOND STAGE LOADER
339 LDA S3SC LOAD START CHARACTER
340 OTA 2 PUNCH START CHARACTER
342 LDA B3AD LOAD START ADDRESS OF SECOND STAGE LOADER
343 JST P23 CALL PUNCH23 ROUTINE
346 P23 DAC ** PUNCH OUT A LOADER
349 JST SWRD PUNCH OUT CURRENT WORD
352 IRS PTR INCREMENT POINTER
356 **********************
358 PLDR DAC ** PUNCH LEADER
359 LDA LDRL LOAD LEADER LENGTH
361 STA CNT STORE TO LEADER COUNTER
370 *********************
371 * PUNCH ONE WORD OF DATA
382 B2AD DAC BO2S START ADDRESS OF SECOND STAGE LOADER
383 B3AD DAC BO3S START ADDRESS OF THIRD STAGE LOADER
385 LDRL DEC 100 LEADER LENGTH
386 SZE SZE INSTRUCTION FOR FILL IN
387 SNZ SNZ INSTRUCTION FOR FILL IN
390 ************************************************************************
391 * THIS IST THE SECOND STAGE LOADER
393 ORG '317 ONLY FOR DEVELOPMENT!
394 BO2S OCT '20 START ADDRESS
395 JMP '10 JUMP BACK INTO KEY-IN LOADER
397 *S21 OCP '001 THIS IS THE JUMP-IN LOCATION, WILL GO TO '21
401 SUB '17-BO2S+S3SC STAGE 3 START CHARACTER
403 JMP '17-BO2S+*-4 EAT UP ALL JUNK
405 INA '1001 READ WITH CLEAR
408 INA '001 READ WITHOUT CLEAR
411 STA '17-BO2S+CNT2 STORE START ADDRESS
412 STA* '17-BO2S+CNT2 STORE START IN START
413 * LDA '57 LOOK FOR DEPOSITED OTHER BOOT ADDRESS
414 * SZE OK, IF WE FIND SOMETHING THERE...
415 * STA '17-BO2S+CNT2 OVERWRITE DEFAULT VALUE
416 IRS '17-BO2S+CNT2 CORRECT STOLEN WORD
420 LDA '17-BO2S+CNT2 WHERE TO LOAD NOW?
421 STA '17-BO2S+PTR2 INIT POINTER
423 LOP INA '1001 READ IN CHARACTER
426 INA '001 READ OTHER CHARACTER
429 JMP* '17-BO2S+CNT2 JUMP INTO THIRD STAGE LOADER
431 STA* '17-BO2S+PTR2 STORE DATA
432 IRS '17-BO2S+PTR2 MOVE ON
433 JMP '17-BO2S+LOP FETCH MORE DATA
435 S3SC OCT '301 START CHARACTER TO RECOGNIZE STAGE3
436 PTR2 DAC ** GENERAL PURPOSE MEMORY POINTER
437 CNT2 DAC ** WHERE TO LOAD? CAN BE CHANGED.
438 BO2E OCT 10600 ZERO-TERMINATOR
441 ************************************************************************
442 * HERE COMES THE THIRD STAGE LOADER
445 BO3S DAC * THAT IS FOR THE SECOND STAGE LOADER
448 LDA PJ1 COMPLETE THE PAUS ROUTINE
451 STA JH ENSURE HALT INSTRUCTION
453 OCP 1 READER ON (UNNECESSARY?)
454 SLOP INA '1001 CRA AND READ
456 SUB BSTA BLOCK START?
458 JMP SLOP BACK TO SEARCH LOOP
459 INA '1001 READ BLOCK TYPE
461 STA BTYP STORE BLOCK TYPE FOR LATER USE
462 CAS TSAD START ADDRESS BLOCK?
464 JMP RSAD READ START ADDRESS BLOCK
468 JMP RGO PROCESS GO BLOCK
472 JMP RBLK READ DATA BLOCK
476 JMP RBLK READ ZERO BLOCK
480 JMP RSTP PROCESS STOP BLOCK
482 LDA ='125252 ERROR BLOCK TYPE
484 JMP SLOP SEARCH FOR NEW BLOCK
488 * START ADDRESS BLOCK
494 JMP CERR CHECKSUM ERROR!
495 JMP SLOP LOOK FOR NEW BLOCK!
500 *********************
501 * READ DATA OR ZERO BLOCK
503 STA PTR START ADDRESS
508 TCA TWO'S COMPLEMENT BACK
518 ADD CSUM ADD TO CHECKSUM
520 EL IRS PTR POINT TO NEXT LOCATION
523 IRS LEN INCREMENT NEG COUNTER
526 JST LWRD NOW READ IN THE CHECKSUM
530 CERR CRA CHECKSUM ERROR HALT
532 JMP SLOP TRY A NEW BLOCK
536 JMP EL USE END OF LOOP ABOVE
539 RSTP LDA BO3S FOR SHOW
541 JMP* RESA JUMP TO RESTART LOCATION
544 **********************
547 RESA DAC SLOP RESTART ADDRESS
548 BSTA DEC 129 BLOCK START CHARACTER
559 INA '1001 CLEAR A AND INPUT
566 FIN WRITE OUT LITERALS - IF ANY
568 * THE ATTIC OF THE THIRD STAGE LOADER
569 PJ1 JMP* PAUS LAST LOCATION THAT WILL BE LOADED FROM TAPE!
571 JH HLT THIS WILL STAY A HALT
572 J1 DAC ** WILL BE: JMP* PAUS
576 LEN OCT 66 LENGTH TO GO
577 BTYP OCT 66 BLOCK TYPE
580 * VARIABLES OF THE MAIN PROGRAM
581 ALOC *** ** NEXT WORD TO BE PUNCHED OUT
582 ELOC *** ** LAST WORD TO BE PUNCHED OUT
583 PTR DAC ** GENERAL PURPOSE MEMORY POINTER
584 CNT DAC ** WHERE TO LOAD? CAN BE CHANGED.
586 ************************************************************