*** empty log message ***
[h316.git] / programs / tools / src / binal.asm
index 57a97e1c6ac5407c25365e9ccf37e1934a3277c7..e913652a7db97b5a41fa7df5a05fdb45e2ed661c 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:
 *
 *  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.
 *  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!
 *     
 *       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 :-)
 *       
 ************************************************************************
 *
 *       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
 *
 *
        REL             RELOCATABLE MODE
        ORG     0
 *
-       STA     STRT
+       STA     STRT    SAVE AUTO START LOCATION
+       CRA
        HLT             
        STA     ALOC    FIRST LOCATION TO PUNCH
        HLT             
        STA     ALOC    FIRST LOCATION TO PUNCH
+       CRA
        HLT
        STA     ELOC    LAST LOCATION TO PUNCH
 *
        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)
        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     PS2     PUNCH SECOND STAGE LOADER
-       JST     PLDR    PUNCH OUT LEADER
        JST     PS3     PUNCH THIRD STAGE LOADER
        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
 *
 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
        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
        LDA     ALOC
        JST     CZER    COUNT ZERO LOCATIONS - IF ANY
        CAS     ZMIN    COMPARE WITH MINIMUM FOR ZERO BLOCK
@@ -114,19 +204,7 @@ BEND       LDA     BCNT
        JST     DBLK    PUNCH THE BLOCK
        JMP     LOOP    BACK TO MAIN LOOP
 *
        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
 *
 AVAL   DEC     0       AVAILABLE DATA SIZE
 IPTR   DEC     0       IMAGINARY POINTER
@@ -158,12 +236,12 @@ GBLK      DAC     **
 ******************
 * MAKE A START ADDRESS BLOCK
 ABLK   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     BSTA    START CHARACTER
        ICA
        ADD     TSAD    BLOCK TYPE
        JST     SWRD    PUNCH THAT
-       LDA     CNT
+       LDA     CNT2
        JST     SWRD
        JST     SWRD
        JMP*    ABLK        
        JST     SWRD
        JST     SWRD
        JMP*    ABLK        
@@ -172,7 +250,7 @@ ABLK        DAC     **
 *******************
 * MAKE ZERO BLOCK
 ZBLK   DAC     **      PRODUCE A ZERO BLOCK
 *******************
 * 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
        LDA     BSTA    START CHARACTER
        ICA
        ADD     TZER    BLOCK TYPE
@@ -180,12 +258,12 @@ ZBLK      DAC     **      PRODUCE A ZERO BLOCK
        LDA     ALOC    LOAD START ADDRESS
        JST     SWRD    PUNCH START ADDRESS
        STA     CSUM    INIT CHECKSUM
        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
        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
 *
        STA     ALOC    UPDATE ALOC
        JMP*    ZBLK    END
 *
@@ -193,7 +271,7 @@ ZBLK        DAC     **      PRODUCE A ZERO BLOCK
 ********************
 * MAKE DATA BLOCK
 DBLK   DAC     **
 ********************
 * MAKE DATA BLOCK
 DBLK   DAC     **
-       STA     CNT     SAVE SIZE
+       STA     CNT2    SAVE SIZE
 *
        LDA     BSTA    START CHARACTER
        ICA
 *
        LDA     BSTA    START CHARACTER
        ICA
@@ -204,21 +282,21 @@ DBLK      DAC     **
        JST     SWRD    PUNCH IT
        STA     CSUM    INIT CHECKSUM
 *
        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
 *
        JST     SWRD    PUNCH IT
        ADD     CSUM    
        STA     CSUM    UPDATE CHECKSUM
 *
-       LDA     CNT
+       LDA     CNT2
        TCA
        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
 *
 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
        JMP     DDLP    LOOP IT
        JST     SWRD    PUNCH CHECKSUM
        JMP*    DBLK    BLOCK DONE
@@ -245,16 +323,16 @@ CZER      DAC     **
 *      
 COUN   DAC     **      COUNT FILLED OR EMPTY LOCATIONS
        CRA     
 *      
 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
 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
        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
 *      
 *
        JMP*    COUN
 *      
 *
@@ -276,9 +354,9 @@ PS3 DAC     **      PUNCH OUT SECOND STAGE LOADER
 P23    DAC     **      PUNCH OUT A LOADER
        STA     PTR     SAVE POINTER
 L23    LDA*    PTR
 P23    DAC     **      PUNCH OUT A LOADER
        STA     PTR     SAVE POINTER
 L23    LDA*    PTR
+       JST     SWRD    PUNCH OUT CURRENT WORD  
        SNZ     
        JMP*    P23     RETURN
        SNZ     
        JMP*    P23     RETURN
-       JST     SWRD    PUNCH OUT CURRENT WORD
        IRS     PTR     INCREMENT POINTER
        JMP     L23     LOOP AGAIN
 *
        IRS     PTR     INCREMENT POINTER
        JMP     L23     LOOP AGAIN
 *
@@ -288,11 +366,11 @@ L23       LDA*    PTR
 PLDR   DAC     **      PUNCH LEADER
        LDA     LDRL    LOAD LEADER LENGTH
        TCA             COMPLEMENT IT
 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
        CRA             LEADER IS ZERO
 LLP    OTA     2
        JMP     *-1
-       IRS     CNT
+       IRS     CNT2
        JMP     LLP
        JMP*    PLDR
 *      
        JMP     LLP
        JMP*    PLDR
 *      
@@ -312,9 +390,7 @@ SWRD        DAC     **
 B2AD   DAC     BO2S    START ADDRESS OF SECOND STAGE LOADER
 B3AD   DAC     BO3S    START ADDRESS OF THIRD STAGE LOADER
 *
 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
+LDRL   DEC     300     LEADER LENGTH
 SZE    SZE             INSTRUCTION FOR FILL IN
 SNZ    SNZ             INSTRUCTION FOR FILL IN
 *
 SZE    SZE             INSTRUCTION FOR FILL IN
 SNZ    SNZ             INSTRUCTION FOR FILL IN
 *
@@ -322,55 +398,50 @@ SNZ       SNZ             INSTRUCTION FOR FILL IN
 ************************************************************************
 * THIS IST THE SECOND STAGE LOADER
 *
 ************************************************************************
 * 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
 *      
        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
 *
        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
        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 +449,16 @@ BO2E       OCT     10600   ZERO-TERMINATOR
 *
        ORG     '600
 BO3S   DAC     *       THAT IS FOR THE SECOND STAGE LOADER
 *
        ORG     '600
 BO3S   DAC     *       THAT IS FOR THE SECOND STAGE LOADER
-       OCP     1       READER ON (UNNECESSARY?)
+*********
+* COMPLETE THE PAUS ROUTINE
+       LDA     PJ1     
+       STA     J1
+       CRA
+       STA     PAUS
+       STA     JH
+*
+* START LOADING        
+       OCP     1       READER ON
 SLOP   INA     '1001   CRA AND READ
        JMP     *-1
        SUB     BSTA    BLOCK START?
 SLOP   INA     '1001   CRA AND READ
        JMP     *-1
        SUB     BSTA    BLOCK START?
@@ -407,10 +487,8 @@ SLOP       INA     '1001   CRA AND READ
        JMP     *+2
        JMP     RSTP    PROCESS STOP BLOCK
        NOP
        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
 *
 ********************
        JMP     SLOP    SEARCH FOR NEW BLOCK
 *
 ********************
@@ -457,8 +535,7 @@ EL  IRS     PTR     POINT TO NEXT LOCATION
        SNZ
        JMP     SLOP
 CERR   CRA             CHECKSUM ERROR HALT
        SNZ
        JMP     SLOP
 CERR   CRA             CHECKSUM ERROR HALT
-       STA     *+1
-       OCT     66
+       JST     PAUS
        JMP     SLOP    TRY A NEW BLOCK
 *
 RZER   CRA
        JMP     SLOP    TRY A NEW BLOCK
 *
 RZER   CRA
@@ -466,18 +543,17 @@ RZER      CRA
        JMP     EL      USE END OF LOOP ABOVE
 *******
 * STOP BLOCK
        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
 *
        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
 BSTA   DEC     129     BLOCK START CHARACTER
+EBT    OCT     '125252         ERROR MESSAGE FOR A REG
 *
 * BLOCK TYPES:
 TSAD   OCT     '33
 *
 * BLOCK TYPES:
 TSAD   OCT     '33
@@ -496,7 +572,22 @@ LWRD       OCT     66
        JMP*    LWRD
 *      
        FIN             WRITE OUT LITERALS - IF ANY
        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     **      WILL BE INITIALIZED TO ZERO BEFORE PUNCHING
+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             THAT'S IT, ENJOY!
+