X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;f=programs%2Ftools%2Fsrc%2Fbinal.asm;h=250fa6ad361b539669d88e3396c08c0ce4edf873;hb=047c458fe956cb5142870d3095ae22215c55a100;hp=57a97e1c6ac5407c25365e9ccf37e1934a3277c7;hpb=cf7fb3faa9fd90fd8c366d5e7d207cc403fee986;p=h316.git diff --git a/programs/tools/src/binal.asm b/programs/tools/src/binal.asm index 57a97e1..250fa6a 100644 --- a/programs/tools/src/binal.asm +++ b/programs/tools/src/binal.asm @@ -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. @@ -39,41 +95,76 @@ * 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 THAT'S IT, ENJOY! +