-* BINARY PUNCH AND LOAD PROGRAM
+* BINAL - BINARY PUNCH AND LOAD PROGRAM (REV. 1.0)
*
*
-* LOAD
-* FIRST LOC TO A, LAST LOC TO B
-* RUN IT.
+*
+*
+* BINAL - A PAL-AP DROP-IN REPLACEMENT.
+*
+*
+*
+* AUTHOR
+* PHILIPP HACHTMANN
+*
+*
+* VERSION
+* 1.0 (24.04.2006) - INITIAL VERSION
+*
+*
+*
+* STORAGE REQUIREMENT
+* ONE SEGMENT
+*
+*
+* FEATURES:
+* NO 4/6/6 FORMAT, DIRECT BINARY DATA
+* BLOCK CHECKSUMS
+* LOAD AND GO CAPABLE
+* SUPPORTS ONLY HIGH SPEED PAPER TAPE PUNCH
+*
+*
+* USAGE
+* FIRST LOAD THE OBJECT TAPE INTO ANY SECTOR 'XX000 IN MEMORY.
+* TO PUNCH A SELF LOADING TAPE DO THE FOLLOWING:
+* -PRESS MSTCLR
+* -SET P TO 'XX000
+* -IF LOAD AND GO IS DESIRED, PUT PROGRAM'S START ADDRESS INTO A
+* -PRESS START
+* -ENTER THE FIRST ADDRESS TO BE PUNCHED INTO A
+* -PRESS START
+* -ENTER THE LAST ADDRESS TO BE PUNCHED INTO A
+* -PRESS START, BINAL PUNCHES YOUR SYSTEM TAPE
+*
+* TO MAKE A BINAL SLST TAPE
+* USE 'XX000 THAT AS FIRST LOCATION TO BE PUNCHED.
+* THE LAST LOCATION TO BE PUNCHED IS 'XX577, THE REST OF THE SECTOR IS
+* ALWAYS AND AUTOMATICALLY PUNCHED OUT.
+*
+* LOADING SLST TAPES
+* SIMPLY MOUNT THE GENERATED TAPE ON THE HIGH SPEED PAPER TAPE READER
+* AND LOAD WITH THE STANDARD KEY-IN LOADER.
+* THE CONTENTS OF THE TAPE GO TO WHERE THEY COME FROM. THE THIRD STAGE
+* LOADER GOES TO 'XX600. THIS LOCATION CAN BE ALTERED BY ENTERING AN
+* ADDRESS INTO A BEFORE STARTING THE KEY-IN LOADER.
+* IT IS ALSO POSSIBLE TO ALTER THE THIRD-STAGE LOADER ADDRESS BEFORE
+* PUNCHING BY DEPOSITING ANOTHER ADDRESS INTO 'XX600.
+*
+* SPECIAL MODES OF OPERATION
+* IT IS POSSIBLE TO COLLECT THE OUTPUT OF MULTIPLE RUNS OF BINAL INTO
+* ONE SYSTEM TAPE. THIS IS DONE BY SENSE SWITCH SETTINGS:
+* SSW1 SET - DON'T PUNCH OUT SECOND AND THIRD STAGE LOADERS
+* SSW2 SET - DON'T PUNCH OUT DATA
+* SSW3 SET - DON'T PUNCH OUT END OF TAPE/GO BLOCK
+* SSW4 SET - PUNCH ONLY A GO BLOCK
*
* TAPE FORMAT:
-* THE TAPE CONTAINS DATA BLOCKS.
+* THE TAPE CONTAINS HIGE DATA BLOCKS.
* EVERY BLOCK IS PREPENDED WITH THE BLOCK START CHARACTER
* AND THE BLOCK TYPE BYTE.
* THEN FOLLOWS THE BLOCK DATA IN 16BIT BIG ENDIAN FORMAT.
* IF NO START LOCATION HAS BEEN CODED THE LOADER WILL
* CONTIUNE!
*
-* TAPE END MARK:
+* STOP BLOCK
* THIS BLOCK TELLS THE LOADER THAT IT SHALL STOP NOW.
* LAYOUT:
* NO BODY AT ALL, ONLY BLOCK START AND BLOCK TYPE :-)
*
************************************************************************
*
- SUBR LSTART,BO3S LOADER START IS GOOD TO KNOW
+ SUBR LSTART,BO3S BEGINNING OF THIRD STAGE LOADER
*
REL RELOCATABLE MODE
ORG 0
*
- STA STRT
+ STA STRT SAVE AUTO START LOCATION
HLT
STA ALOC FIRST LOCATION TO PUNCH
HLT
STA ELOC LAST LOCATION TO PUNCH
*
OCP '0002 START PUNCH (NOT NECESSARY ON MY H316)
+*
+ SR1 SKIP IF SSW 1 RESET
+ JMP NOBO NO BOOT CODE
JST PLDR PUNCH OUT LEADER
JST PS2 PUNCH SECOND STAGE LOADER
- JST PLDR PUNCH OUT LEADER
JST PS3 PUNCH THIRD STAGE LOADER
- JST PLDR PUNCH OUT LEADER
+*
+NOBO SS2 SKIP IF SSW 2 SET
+ JST PDAT PUNCH OUT DATA
+*
+ LDA STRT START ADDRESS
+ SZE SET?
+ JST ABLK MAKE ADRESS-BLOCK
*
+ SR3 SKIP IF SSW3 RESET
+ JMP NOGO NO GO/STOP BLOCK
+*
+ LDA STRT
+ SZE
+ JST GBLK MAKE GO BLOCK
+ LDA STRT
+ SNZ
+ JST SBLK MAKE STOP BLOCK
+*
+NOGO JST PLDR END OF TAPE HAS COME.
+ HLT
+ JMP *-1 NO ESCAPE
+*
+*
+**********************
+* PUNCH THE DESIRED DATA
+PDAT DAC **
*
LOOP CRA MAIN LOOP
LDA ELOC
SUB ALOC
- AOA
- STA AVAL DETERMINED AVAILABLE DATA
+ AOA ONE IS MINIMUM
+ STA AVAL AVAILABLE NUMBER OF WORDS
SNZ
- JMP EDAT END OF DATA, WE ARE HAPPY
+ JMP* PDAT END OF DATA, WE ARE HAPPY, RETURN
*
-* FIRST TRY TO ESABLISH A ZERO BLOCK
+* TRY TO MAKE A ZERO BLOCK
LDA ALOC
JST CZER COUNT ZERO LOCATIONS - IF ANY
CAS ZMIN COMPARE WITH MINIMUM FOR ZERO BLOCK
JST DBLK PUNCH THE BLOCK
JMP LOOP BACK TO MAIN LOOP
*
-*
-* END OF DATA
-EDAT LDA STRT
- SZE
- JMP AUTO
- JST SBLK MAKE STOP BLOCK
- JMP EOT
-AUTO JST ABLK MAKE ADRESS-BLOCK
- JST GBLK MAKE GO-BLOCK
-EOT JST PLDR END OF JOB HAS COME.
- HLT
- JMP *-1 NO ESCAPE
-*
+**************************
*
AVAL DEC 0 AVAILABLE DATA SIZE
IPTR DEC 0 IMAGINARY POINTER
P23 DAC ** PUNCH OUT A LOADER
STA PTR SAVE POINTER
L23 LDA* PTR
+ JST SWRD PUNCH OUT CURRENT WORD
SNZ
JMP* P23 RETURN
- JST SWRD PUNCH OUT CURRENT WORD
IRS PTR INCREMENT POINTER
JMP L23 LOOP AGAIN
*
B3AD DAC BO3S START ADDRESS OF THIRD STAGE LOADER
*
LDRL DEC 100 LEADER LENGTH
-ALOC *** ** NEXT WORD TO BE PUNCHED OUT
-ELOC *** ** LAST WORD TO BE PUNCHED OUT
SZE SZE INSTRUCTION FOR FILL IN
SNZ SNZ INSTRUCTION FOR FILL IN
*
*
INA '1001 READ WITH CLEAR
JMP '17-BO2S+*-1
-* JMP '17-BO2S+* DEBUG STOP
ICA
INA '001 READ WITHOUT CLEAR
JMP '17-BO2S+*-1
-* JMP '17-BO2S+* DEBUG STOP
-*
-*
*
- STA '17-BO2S+CNT STORE START ADDRESS
-* LDA '57 LOOK FOR DEPOSITED OTHER BOOT ADDRESS
-* SZE OK, IF WE FIND SOMETHING THERE...
-* STA '17-BO2S+CNT OVERWRITE DEFAULT VALUE
- IRS '17-BO2S+CNT CORRECT STOLEN WORD
- LDA '17-BO2S+CNT
+ STA '17-BO2S+CNT2 STORE START ADDRESS
+ STA* '17-BO2S+CNT2 STORE START IN START
+* LDA '57 LOOK FOR DEPOSITED OTHER BOOT ADDRESS
+* SZE OK, IF WE FIND SOMETHING THERE...
+* STA '17-BO2S+CNT2 OVERWRITE DEFAULT VALUE
+ IRS '17-BO2S+CNT2 CORRECT STOLEN WORD
+ LDA '17-BO2S+CNT2
* JMP '776
*
- LDA '17-BO2S+CNT WHERE TO LOAD NOW?
- STA '17-BO2S+PTR INIT POINTER
+ LDA '17-BO2S+CNT2 WHERE TO LOAD NOW?
+ STA '17-BO2S+PTR2 INIT POINTER
*
LOP INA '1001 READ IN CHARACTER
JMP '17-BO2S+*-1
INA '001 READ OTHER CHARACTER
JMP '17-BO2S+*-1
SNZ
- JMP* '17-BO2S+CNT JUMP INTO THIRD STAGE LOADER
+ JMP* '17-BO2S+CNT2 JUMP INTO THIRD STAGE LOADER
* JMP '665
- STA* '17-BO2S+PTR STORE DATA
- IRS '17-BO2S+PTR MOVE ON
+ STA* '17-BO2S+PTR2 STORE DATA
+ IRS '17-BO2S+PTR2 MOVE ON
JMP '17-BO2S+LOP FETCH MORE DATA
*
S3SC OCT '301 START CHARACTER TO RECOGNIZE STAGE3
-PTR DAC ** GENERAL PURPOSE MEMORY POINTER
-CNT DAC ** WHERE TO LOAD? CAN BE CHANGED.
+PTR2 DAC ** GENERAL PURPOSE MEMORY POINTER
+CNT2 DAC ** WHERE TO LOAD? CAN BE CHANGED.
BO2E OCT 10600 ZERO-TERMINATOR
*
*
*
ORG '600
BO3S DAC * THAT IS FOR THE SECOND STAGE LOADER
+*********
+* COMPLETE THE ATTIC
+ LDA PJ1 COMPLETE THE PAUS ROUTINE
+ STA J1
+ CRA
+ STA JH ENSURE HALT INSTRUCTION
+*
OCP 1 READER ON (UNNECESSARY?)
SLOP INA '1001 CRA AND READ
JMP *-1
JMP *+2
JMP RSTP PROCESS STOP BLOCK
NOP
- LDA '125252 ERROR BLOCK TYPE
- CRA
- STA *+1
- OCT 66 THE HALT TRICK
+ LDA ='125252 ERROR BLOCK TYPE
+ JST PAUS PAUSE
JMP SLOP SEARCH FOR NEW BLOCK
+ FIN
*
********************
* START ADDRESS BLOCK
SNZ
JMP SLOP
CERR CRA CHECKSUM ERROR HALT
- STA *+1
- OCT 66
+ JST PAUS
JMP SLOP TRY A NEW BLOCK
*
RZER CRA
JMP EL USE END OF LOOP ABOVE
*******
* STOP BLOCK
-RSTP CRA
- STA *+1
- OCT 66 A TRICK - HERE WILL BE THE HLT INSTRUCTION
+RSTP LDA BO3S FOR SHOW
+ JST PAUS
JMP* RESA JUMP TO RESTART LOCATION
*
-***** VARIABLES
-CSUM OCT 66 CHECKSUM
-LEN OCT 66 LENGTH TO GO
-RESA DAC SLOP RESTART ADDRESS
-BTYP OCT 66 BLOCK TYPE
*
+**********************
+* CONSTANTS
+*
+RESA DAC SLOP RESTART ADDRESS
BSTA DEC 129 BLOCK START CHARACTER
*
* BLOCK TYPES:
JMP* LWRD
*
FIN WRITE OUT LITERALS - IF ANY
-BO3E DEC 0 ZERO TERMINATOR
+*******************
+* THE ATTIC OF THE THIRD STAGE LOADER
+PJ1 JMP* PAUS LAST LOCATION THAT WILL BE LOADED FROM TAPE!
+PAUS DAC **
+JH HLT THIS WILL STAY A HALT
+J1 DAC ** WILL BE: JMP* PAUS
+*
+***** VARIABLES
+CSUM OCT 66 CHECKSUM
+LEN OCT 66 LENGTH TO GO
+BTYP OCT 66 BLOCK TYPE
+*
+*******************
+* VARIABLES OF THE MAIN PROGRAM
+ALOC *** ** NEXT WORD TO BE PUNCHED OUT
+ELOC *** ** LAST WORD TO BE PUNCHED OUT
+PTR DAC ** GENERAL PURPOSE MEMORY POINTER
+CNT DAC ** WHERE TO LOAD? CAN BE CHANGED.
*
************************************************************
END