Added start address thing.
[h316.git] / programs / tools / src / binal.asm
index 57a97e1c6ac5407c25365e9ccf37e1934a3277c7..4e383f932a4b57cc33646d89edf4422fb1a52962 100644 (file)
@@ -1,12 +1,68 @@
-* 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    BINAL,ANF
+       SUBR    LSTART,BO3S     BEGINNING OF THIRD STAGE LOADER 
 *
        REL             RELOCATABLE MODE
        ORG     0
 *
-       STA     STRT
+ANF    STA     STRT    SAVE AUTO START LOCATION
+       CRA
        HLT             
        STA     ALOC    FIRST LOCATION TO PUNCH
+       CRA
        HLT
        STA     ELOC    LAST LOCATION TO PUNCH
 *
+* FIRST SOME PREPARATIONS FOR THE SECOND AND THIRD STAGE LOADERS
+*      CRA
+       STA     PTR2    CLEAR PTR2, SO KEY-IN LOADER WILL STOP THERE.
+       STA     PAUS    TERMINATOR FOR THIRD STAGE LOADER
+*
+* BUT HERE WE GO
        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
@@ -114,19 +205,7 @@ BEND       LDA     BCNT
        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
@@ -158,12 +237,12 @@ GBLK      DAC     **
 ******************
 * MAKE A START ADDRESS BLOCK
 ABLK   DAC     **
-       STA     CNT     SAVE THE ADDRESS
+       STA     CNT2    SAVE THE ADDRESS
        LDA     BSTA    START CHARACTER
        ICA
        ADD     TSAD    BLOCK TYPE
        JST     SWRD    PUNCH THAT
-       LDA     CNT
+       LDA     CNT2
        JST     SWRD
        JST     SWRD
        JMP*    ABLK        
@@ -172,7 +251,7 @@ ABLK        DAC     **
 *******************
 * MAKE ZERO BLOCK
 ZBLK   DAC     **      PRODUCE A ZERO BLOCK
-       STA     CNT     STORE SIZE OF BLOCK
+       STA     CNT2    STORE SIZE OF BLOCK
        LDA     BSTA    START CHARACTER
        ICA
        ADD     TZER    BLOCK TYPE
@@ -180,12 +259,12 @@ ZBLK      DAC     **      PRODUCE A ZERO BLOCK
        LDA     ALOC    LOAD START ADDRESS
        JST     SWRD    PUNCH START ADDRESS
        STA     CSUM    INIT CHECKSUM
-       LDA     CNT     LOAD SIZE
+       LDA     CNT2    LOAD SIZE
        JST     SWRD    PUNCH SIZE
        ADD     CSUM    ADD CHECKSUM
        JST     SWRD    PUNCH OUT CHECKSUM
        LDA     ALOC    RELOAD POINTER
-       ADD     CNT     CALCULATE NEW POINTER
+       ADD     CNT2    CALCULATE NEW POINTER
        STA     ALOC    UPDATE ALOC
        JMP*    ZBLK    END
 *
@@ -193,7 +272,7 @@ ZBLK        DAC     **      PRODUCE A ZERO BLOCK
 ********************
 * MAKE DATA BLOCK
 DBLK   DAC     **
-       STA     CNT     SAVE SIZE
+       STA     CNT2    SAVE SIZE
 *
        LDA     BSTA    START CHARACTER
        ICA
@@ -204,21 +283,21 @@ DBLK      DAC     **
        JST     SWRD    PUNCH IT
        STA     CSUM    INIT CHECKSUM
 *
-       LDA     CNT     PACKET SIZE
+       LDA     CNT2    PACKET SIZE
        JST     SWRD    PUNCH IT
        ADD     CSUM    
        STA     CSUM    UPDATE CHECKSUM
 *
-       LDA     CNT
+       LDA     CNT2
        TCA
-       STA     CNT     NOW WE USE IT AS NEG COUNTER
+       STA     CNT2    NOW WE USE IT AS NEG COUNTER
 *
 DDLP   LDA*    ALOC    LOAD DATA
        JST     SWRD    PUNCH DATA
        ADD     CSUM    
        STA     CSUM    UPDATE CHECKSUM
        IRS     ALOC
-       IRS     CNT
+       IRS     CNT2
        JMP     DDLP    LOOP IT
        JST     SWRD    PUNCH CHECKSUM
        JMP*    DBLK    BLOCK DONE
@@ -245,16 +324,16 @@ CZER      DAC     **
 *      
 COUN   DAC     **      COUNT FILLED OR EMPTY LOCATIONS
        CRA     
-       STA     CNT     INITIALIZE COUNTER
+       STA     CNT2    INITIALIZE COUNTER
 CLOP   LDA*    PTR
 DISC   SZE             WILL BE DYNAMICALLY OVERWRITTEN
        JMP     ZFIN    NOW OTHER KIND OF DATA
-       IRS     CNT     NOTE DOWN THE FIND
+       IRS     CNT2    NOTE DOWN THE FIND
        IRS     PTR     POINT TO NEXT LOCATION TO BE TESTED
        SKP             
        JMP     ZFIN    ADDRESS OVERFLOW MUST STOP COUNTING
        JMP     CLOP    COUNT ON
-ZFIN   LDA     CNT
+ZFIN   LDA     CNT2
        JMP*    COUN
 *      
 *
@@ -276,9 +355,9 @@ PS3 DAC     **      PUNCH OUT SECOND STAGE LOADER
 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
 *
@@ -288,11 +367,11 @@ L23       LDA*    PTR
 PLDR   DAC     **      PUNCH LEADER
        LDA     LDRL    LOAD LEADER LENGTH
        TCA             COMPLEMENT IT
-       STA     CNT     STORE TO LEADER COUNTER
+       STA     CNT2    STORE TO LEADER COUNTER
        CRA             LEADER IS ZERO
 LLP    OTA     2
        JMP     *-1
-       IRS     CNT
+       IRS     CNT2
        JMP     LLP
        JMP*    PLDR
 *      
@@ -313,8 +392,6 @@ B2AD        DAC     BO2S    START ADDRESS OF SECOND STAGE LOADER
 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
 *
@@ -322,55 +399,50 @@ SNZ       SNZ             INSTRUCTION FOR FILL IN
 ************************************************************************
 * THIS IST THE SECOND STAGE LOADER
 *
-       ORG     '317    ONLY FOR DEVELOPMENT!
-BO2S   OCT     '20     START ADDRESS
+* IT IS IMPORTANT THAT THERE ARE NO ZERO WORDS IN THIS CODE BECAUSE THE
+* KEY-IN LOADER WORKS ONLY UNTIL IT DETECTS A ZERO WORD.
+*
+BO2S   DAC     '20     START ADDRESS, ALWAYS '20
        JMP     '10     JUMP BACK INTO KEY-IN LOADER
 *
 *S21   OCP     '001    THIS IS THE JUMP-IN LOCATION, WILL GO TO '21
 *      
-       INA     '1001
-       JMP     '17-BO2S+*-1
+       INA     '1001           READ FROM PAPER TAPE
+       JMP     '17-BO2S+*-1    WAIT
        SUB     '17-BO2S+S3SC   STAGE 3 START CHARACTER
        SZE
        JMP     '17-BO2S+*-4    EAT UP ALL JUNK
 *
-       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
-*      JMP     '776
-*
-       LDA     '17-BO2S+CNT    WHERE TO LOAD NOW?
-       STA     '17-BO2S+PTR    INIT POINTER
+       INA     '1001           READ FROM PAPER TAPE
+       JMP     '17-BO2S+*-1    WAIT
+       ICA                     OTHER CHARACTER
+       INA     '001            READ FROM TAPE WITHOUT CLEARING A
+       JMP     '17-BO2S+*-1    WAIT
+*
+       STA     '17-BO2S+CNT2   STORE START ADDRESS OF THIRD STAGE
+*      LDA     '57             LOOK FOR DEPOSITED OTHER BOOT ADDRESS
+*      SZE                     OK, IF WE FIND SOMETHING THERE...
+*      STA     '17-BO2S+CNT2   OVERWRITE DEFAULT VALUE 
+       LDA     '17-BO2S+CNT2   RELOAD START ADDRESS
+       STA*    '17-BO2S+CNT2   STORE THAT ADDRESS INTO ITSELF  
+       IRS     '17-BO2S+CNT2   CORRECT STOLEN WORD     
+       LDA     '17-BO2S+CNT2   WHERE TO LOAD NOW?
+       STA     '17-BO2S+PTR2   INIT WRITE POINTER
 *      
-LOP    INA     '1001   READ IN CHARACTER
-       JMP     '17-BO2S+*-1
-       ICA
-       INA     '001    READ OTHER CHARACTER
-       JMP     '17-BO2S+*-1
-       SNZ
-       JMP*    '17-BO2S+CNT    JUMP INTO THIRD STAGE LOADER
-*      JMP     '665
-       STA*    '17-BO2S+PTR    STORE DATA
-       IRS     '17-BO2S+PTR    MOVE ON
+LOP    INA     '1001           READ IN CHARACTER
+       JMP     '17-BO2S+*-1    WAIT
+       ICA                     OTHER CHARACTER
+       INA     '001            READ FROM TAPE WITHOUT CLEARING A
+       JMP     '17-BO2S+*-1    WAIT
+       SNZ                     DID WE LOAD A ZERO?
+       JMP*    '17-BO2S+CNT2   JUMP INTO THIRD STAGE LOADER
+       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.
-BO2E   OCT     10600   ZERO-TERMINATOR
+PTR2   DAC     **      MEMORY POINTER
+CNT2   DAC     **      LOAD ADDRESS
 *
 *
 ************************************************************************
@@ -378,7 +450,18 @@ BO2E       OCT     10600   ZERO-TERMINATOR
 *
        ORG     '600
 BO3S   DAC     *       THAT IS FOR THE SECOND STAGE LOADER
-       OCP     1       READER ON (UNNECESSARY?)
+*********
+* COMPLETE THE PAUS ROUTINE
+       LDA     PJ1     
+       STA     J1
+       LDA     PJ2     
+       STA     J2
+       CRA
+       STA     PAUS
+       STA     JH
+*
+* START LOADING        
+       OCP     1       READER ON
 SLOP   INA     '1001   CRA AND READ
        JMP     *-1
        SUB     BSTA    BLOCK START?
@@ -407,10 +490,8 @@ SLOP       INA     '1001   CRA AND READ
        JMP     *+2
        JMP     RSTP    PROCESS STOP BLOCK
        NOP
-       LDA     '125252 ERROR BLOCK TYPE
-       CRA
-       STA     *+1
-       OCT     66      THE HALT TRICK
+       LDA     EBT     ERROR BLOCK TYPE
+       JST     PAUS    PAUSE
        JMP     SLOP    SEARCH FOR NEW BLOCK
 *
 ********************
@@ -457,8 +538,7 @@ EL  IRS     PTR     POINT TO NEXT LOCATION
        SNZ
        JMP     SLOP
 CERR   CRA             CHECKSUM ERROR HALT
-       STA     *+1
-       OCT     66
+       JST     PAUS
        JMP     SLOP    TRY A NEW BLOCK
 *
 RZER   CRA
@@ -466,18 +546,17 @@ 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
+EBT    OCT     '125252         ERROR MESSAGE FOR A REG
 *
 * BLOCK TYPES:
 TSAD   OCT     '33
@@ -487,7 +566,7 @@ TSTP        OCT     '66
 TDAT   OCT     '11
 *
 *
-LWRD   OCT     66
+LWRD   OCT     66      CAN'T BE INITIALLY ZERO!
        INA     '1001   CLEAR A AND INPUT
        JMP     *-1
        ICA
@@ -496,7 +575,24 @@ LWRD       OCT     66
        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!
+PJ2    OCP     '101    STOP READER
+PAUS   DAC     **      WILL BE INITIALIZED TO ZERO BEFORE PUNCHING
+J2     DAC     **      BECOMES OCP '101 ON START OF LOAD
+JH     HLT             BECOMES CLEARED ON START OF LOAD
+J1     DAC     **      BECOMES JMP* PAUS ON START OF LOAD
+*
+***** VARIABLES
+CSUM   DAC     **      CHECKSUM
+LEN    DAC     **      LENGTH COUNTER
+BTYP   DAC     **      BLOCK TYPE
+ALOC   ***     **      CURRENT LOCATION TO PUNCH
+ELOC   ***     **      LAST LOCATION TO PUNCH
+PTR    DAC     **      MEMORY POINTER
+CNT    DAC     **      WHERE TO LOAD? CAN BE CHANGED.
 *
 ************************************************************
-       END
+       END     ANF     THAT'S IT, ENJOY!
+