From: Richard Cornwell Date: Thu, 19 Apr 2018 17:08:49 +0000 (-0400) Subject: Added recovered BINCOM.MAC source. X-Git-Url: http://git.sky-visions.com/cgi-bin/gitweb.cgi/retro-software/dec/tops10/v4.5.git/commitdiff_plain/571bd6213fa4aed12085cb3172d1615ce0209b98 Added recovered BINCOM.MAC source. --- diff --git a/src/bincom.mac b/src/bincom.mac new file mode 100644 index 0000000..3395b06 --- /dev/null +++ b/src/bincom.mac @@ -0,0 +1,359 @@ +TITLE BINCOM V.003 + XALL + LIST + +JOBVER=137 +LOC JOBVER +3 +RELOC + +CTL==0 +IN1==1 +IN2==2 + +ACDEV=1 +ACFILE=2 +ACEXT=3 +ACDEL=4 +ACPNTR=5 +C=7 ;CHARACTER FOR PROCESSING +PP=17 ;PUSH DOWN POINTER +LPDL=20 + +COMP: CLOSE CTL, + RELEAS CTL, + RELEAS IN1, + RELEAS IN2, +COMPGO: RESET + SETZM PPSET ;THIS IS THE ZERO WHICH WILL + ;BE "BLT"ED TO CLEAR STORAGE + MOVE [XWD PPSET,PPSET+1] ;ZERO STORAGE AREA + BLT ENDP-1 + MOVE PP,[IOWD LPDL,PPSET+1] ;SET UP PUSH DOWN LIST + MOVSI (SIXBIT /REL/) + MOVEM INDIR1+1 + MOVEM INDIR2+1 + MOVSI (SIXBIT /TTY/) + MOVEM OUTDEV + SETZM AZD + PUSHJ PP,INITTY + PUSHJ PP,CRFL + MOVEI 10,"*" ;TELL USER WE ARE READY FOR COMMAND + IDPB 10,CTOBUF+1 + OUTPUT CTL, ;OUT GOES THE "*" + INPUT CTL, ;HERE COMES THE COMMAND STRING + PUSHJ PP,NAME1 ;ANALYIZE OUTPUT DEVICE AND NAME + CAIE C,137 + JRST INDEV+1 + JUMPE ACDEV,INDEV + MOVE 13,AZDEV ;GET ASCII NAME OF OUTPUT DEVICE + MOVEM 13,AZD ;SAVE IT SO IT WON'T BE + MOVE 13,AZDEV+1 ;DESTROYED BY INPUT NAMES + MOVEM 13,AZD+1 + MOVEM ACDEV,OUTDEV + MOVEM ACFILE,OUTDIR ;PUT SIXBIT FILE NAME IN + MOVEM ACEXT,OUTDIR+1 ;AND EXTENSION +INDEV: PUSHJ PP,NAME1 ;GET INPUT FROM COMMAND + JUMPN ACDEV,.+4 + HRLI ACDEV,(SIXBIT/DSK/) + MOVE 13,[ASCIZ/DSK/] + MOVEM 13,AZDEV + MOVEM ACDEV,INDEV1 + MOVEM ACDEV,INDEV2 + MOVEM ACFILE,INDIR1 + SKIPE ACEXT + MOVEM ACEXT,INDIR1+1 + INIT IN1,14 +INDEV1: SIXBIT /DSK/ + XWD INBUF1 + JRST ERRI + INBUF IN1,2 ;DO LOOKUP ON FIRST FILE NAME + LOOKUP IN1,INDIR1 + JRST ERRIA ;ERROR RETURN + PUSHJ PP,NAME1 + SKIPN ACDEV + MOVE ACDEV,INDEV1 + MOVEM ACDEV,INDEV2 + MOVEM ACFILE,INDIR2 + SKIPE ACEXT + MOVEM ACEXT,INDIR2+1 + INIT IN2,14 +INDEV2: SIXBIT /DSK/ + XWD INBUF2 + JRST ERRI + INBUF IN2,2 ;LOOKUP ON SECOND FILE NAME + LOOKUP IN2,INDIR2 + JRST ERRIA + MOVE 13,INDEV1 ;GET INPUT DEV + CAME 13,INDEV2 ;SAME FOR BOTH? + JRST .+6 + CALLI 13,4 + AND 13,[200000000000] + HLRZ 13,13 + CAIE 13,200000 + JRST ERRS + INIT CTL,0 +OUTDEV: 0 + XWD CTOBUF,0 + JRST ERRA + MOVE 13,OUTDEV + CALLI 13,4 + TLNN 13,1 + JRST ERRO + ENTER OUTDIR + JRST ERRO + OUTPUT CTL, + MOVEI 16,0 +MAIN: PUSHJ PP,GCHAR1 ;GET NEXT CHARACTER + JRST MAIN1 ;ERROR FINISH + PUSHJ PP,GCHAR2 ;GET SECOND FILE. + JRST MAIN2 + CAME 1,2 ;CHECK IF SAME. + PUSHJ PP,DIFF + AOJA 16,MAIN ;COUNT RECORDS. + +; PRINT OUT DIFFERENCE REPORT. +DIFF: AOS 0,ERRCNT ;CHARACTERS DIFFER, INCREASE COUNT + HRLZ 11,16 ;PRINT OUT LOCATION. + PUSHJ PP,OCTOUT + MOVE 11,1 ;PRINT FIRST ONE + PUSHJ PP,SPTOCT + MOVE 11,2 ;PRINT SECOND ONE + PUSHJ PP,SPTOCT + MOVE 11,1 ;PRINT OUT DIFFERENCE + XOR 11,2 + PUSHJ PP,SPTOCT + JRST CRFL + +; HANDLE END OF FILES. +MAIN1: PUSHJ PP,GCHAR2 ;END OF FILE 1. + JRST MAIN3 + SETZM 1 ;COMPARE TO ZERO + CAME 1,2 + PUSHJ PP,DIFF + AOJA 16,MAIN1 + +MAIN2: SETZM 2 ;END OF FILE 2. + CAME 1,2 ;COMPARE TO ZERO + PUSHJ PP,DIFF + PUSHJ PP,GCHAR1 + JRST MAIN3 + AOJA 16,MAIN2 +MAIN3: SKIPE 0,ERRCNT + JRST COMP + MOVEI 11,[ASCIZ /NO ERRORS ENCOUNTERED/] + JRST ERROUT + + CRFL: MOVEI 10,15 ;OUTPUT A CARRIAGE RETURN-LINE FEED + PUSHJ PP,TYO + MOVEI 10,12 + +TYO: SOSG CTOBUF+2 ;DECREMENT BUFFER COUNT + OUTPUT CTL, ;BUFFER WAS EMPTY +DEP: IDPB 10,CTOBUF+1 ;DEPOSIT CHAR + CAIN 10,12 ;CHECK IF LINE FEED. + OUTPUT CTL, + POPJ PP, + +OCTOUT: MOVEI 12,6 ;NUMBER OF CHARACTERS TO CONVERT + MOVEI 10,0 ;RESULTS + LSHC 10,3 ;DOUBLE SHIFT LEFT, 11. + ADDI 10,"0" + PUSHJ PP,TYO + SOJG 12,.-4 ; UNTIL COUNT REACHED. + POPJ PP, + +SPCOUT: MOVEI 10," " ;TYPE OUT A SPACE + JRST TYO + +TABOUT: MOVEI 10,11 ;TYPE OUT A TAB + JRST TYO + +SPTOCT: PUSHJ PP,TABOUT ;PRINT OUT NUMBER IN SPLIT OCTAL + PUSHJ PP,OCTOUT + PUSHJ PP,SPCOUT + JRST OCTOUT + + ;ROUTINES FOR OUTPUTING ERROR MESSAGES +ERRO: SKIPA 11,[[ASCIZ /?OUTPUT INITIALIZATION ERROR/]] +ERRS: MOVEI 11,[ASCIZ /?FILE BEING COMPARED ON SAME INPUT DEVICE/] +ERROUT: PUSHJ 17,TYPMSG + JRST CARR + +TYPMSG: PUSHJ PP,INITTY ;INITIALIZE TTY + PUSHJ PP,CRFL ;OUTPUT A CARRIAGE RETURN + TLOA 11,(POINT 7,,) ;THIS IS POINTER FOR ERROR MESSAGE +TYPMS1: PUSHJ PP,TYO ;OUTPUT CHAR. + ILDB 10,11 ;LOAD A CHAR. FROM ERROR MESSAGE + JUMPN 10,TYPMS1 ;ALL ERROR MESSAGES END WITH A ZERO + POPJ PP, ;THROUGH WITH ERROR MESSAGE + +CARR: PUSHJ PP,CRFL ;COMMON EXIT FOR ERROR MESSAGES + PUSHJ PP,CRFL + JRST COMP + +;INITIALIZE TTY FOR ERROR MESSAGES +INITTY: CLOSE CTL + RELEAS CTL + INIT CTL,1 + SIXBIT /TTY/ + XWD CTOBUF,CTIBUF + HALT + INBUF CTL,1 + OUTBUF CTL,1 + OUTPUT CTL, + POPJ PP, + + ;ROUTINE TO GET NEXT CHARACTER +GCHAR1: SOSG 0,INBUF1+2 + JRST GCH1FL ;FILL BUFFER IF EMPTY + SKIPN 0,INBUF1+2 + JRST .-2 ; TRY AGAIN + ILDB 1,INBUF1+1 + JRST GCH1OK +GCH1FL: INPUT IN1, ;INPUT FOR FILE 1 + STATO IN1,762000 ;ERRORS OR END OF FILE? + JRST GCHAR1+2 ;NO + STATO IN1,742000 ;YES, EOF? + POPJ PP, + MOVEI 11,[ASCIZ /?FILE 1 READ ERROR/] + JRST ERROUT +GCH1OK: AOS 0,(PP) + POPJ PP, + +GCHAR2: SOSG 0,INBUF2+2 + JRST GCH2FL ;FILL BUFFER IF EMPTY + SKIPN 0,INBUF2+2 + JRST .-2 ; TRY AGAIN + ILDB 2,INBUF2+1 + JRST GCH2OK +GCH2FL: INPUT IN2, + STATO IN2,762000 + JRST GCHAR2+2 + STATO IN2,742000 + POPJ PP, + MOVEI 11,[ASCIZ /?FILE 2 READ ERROR/] + JRST ERROUT +GCH2OK: AOS 0,(PP) + POPJ PP, + + ;THE CODE ON THIS PAGE IS FOR HANDLING INPUT ERRORS +;THERE ARE TWU TYPES OF ERRORS--EITHER THE FILE IS NOT FOUND +;OR THE DEVICE IS NOT AVAILABLE--THE FORMAT FOR THESE MESSAGES +;IS THE SAEM FORMAT USED FOR THE "TECO" MESSAGES. + +ERRA: MOVE 13,AZD + MOVEM 13,AZDEV + MOVE 13,AZD+1 + MOVEM 13,AZDEV+1 + JRST ERRI + +ERRIA: MOVEI 11,[ASCIZ /?INPUT ERROR.../] + PUSHJ PP,TYPMSG ;TYPE FIRST PART OF MESSAGE + MOVEI 11,AZFIL ;ADR. OF ASCII FILE NAME + PUSHJ PP,TYPMS1-1 ;TYPE FILE NAME + SKIPN 0,AZEXT ;IS THERE AN EXTENSION + JRST NOEXT ;NO EXTENSION + MOVEI 10,"." ;FOR EXTENSION + XCT DEP ;THIS PUTS IT IN + MOVEI 11,AZEXT ;GET ADR OF ASCII EXTENSION + PUSHJ PP,TYPMS1-1 +NOEXT: MOVEI 11,[ASCIZ / FILE NOT FOUND/] ;FINISH MESSAGE + PUSHJ PP,TYPMS1-1 + JRST CARR ;THIS WILL OUTPUT TWO C.R. AND EXIT + +ERRI: MOVEI 11,[ASCIZ /?DEVICE /] + PUSHJ PP,TYPMSG ;TYPE BEGINNING OF MESSAGE + MOVEI 11,AZDEV ;ADR OF DEVICE NAME + PUSHJ PP,TYPMS1-1 ;OUTPUT DEVICE NAME + MOVEI 11,[ASCII / NOT AVAILABLE/] + PUSHJ PP,TYPMS1-1 ;TYPE REST OF MESSAGE + JRST CARR ;INSERT CARRIAGE RETURNS AND EXIT + + NAME1: SETZB ACDEV,AZDEV ;ZERO THE REGISTERS WHICH WILL RETURN THE NAMES + SETZB ACDEL,AZFIL + SETZM AZTEM + SETZB ACFILE,AZEXT + SETZB ACEXT,AZTEM+1 + +NAME3: MOVE 16,[POINT 7,AZTEM] ;THIS IS A POINTER FOR DEPOSITING THE + ;ASCII CHARACTERS IN CASE AN INPUT + ;ERROR IS DECTECTED--FOR THEN WE WILL + ;HAVE TO PRINT THESE NAMES OUT + MOVSI ACPNTR,(POINT 6,0) ;SET POINTER + SETZ 13, + MOVEI 0,0 ;THE SIXBIT NAME WILL BE STORED IN THE AC0 + +GETIOC: PUSHJ PP,TTYIN ;GET INPUT CHARACTER + CAIN C,":" ;HAVE WE BEEN GETTING A DEVICE NAME + JRST DEVICE ;YES + CAIN C,"." ;OR A FILE NAME + JRST NAME ;YES + CAIN C,"," ;THIS IS ANOTHER WAY TO GET A FILE NAME + JRST TERM + CAIE C,137 ;ONE KIND OF SEPERATOR + CAIG C,15 ;THIS ALSO MEANS WE HAVE FINISHED A TERM + JRST TERM ;TERM HAAS BEEN READ + SUBI C,40 ;CONVERT TO 6-BIT + TLNE ACPNTR,770000 ;HAVE WE STORED SIX BYTES? + IDPB C,ACPNTR ;NO, STORE IT + ADDI C,40 ;CONVERT BACK TO ASCII FOR ERROR MESSAGES. + IDPB C,16 ;STORE IN AC13 + JRST GETIOC ;GET ANOTHER CHAR. + + DEVICE: MOVE 13,AZTEM + MOVEM 13,AZDEV ;STORE ASCII DEVICE NAME + MOVE 13,AZTEM+1 + MOVEM 13,AZDEV+1 + MOVE ACDEV,0 + JRST .+6 +NAME: MOVE ACFILE,0 ;FILE NAME + MOVE 13,AZTEM + MOVEM 13,AZFIL ;STORE ASCII NAME + MOVE 13,AZTEM+1 + MOVEM 13,AZFIL+1 + SETZM AZTEM + SETZM AZTEM+1 + MOVE ACDEL,C ;SET DELIMITER + JRST NAME3 ;GET NEXT SYMBOL + +TERM: CAIN ACDEL,0 ;IF NO PREVIOUS DELIMITOR, OR + JRST .+3 + CAIE ACDEL,":" ;IF PREVIOUS DELIMITER + JRST TERM1 + MOVE 13,AZTEM + MOVEM 13,AZFIL + MOVE 13,AZTEM+1 + MOVEM 13,AZFIL+1 + SETZM AZTEM + SETZM AZTEM+1 + MOVE ACFILE,0 ;SET FILE +TERM1: CAIE ACDEL,"." ;IF PERIOD, + POPJ PP, + MOVE 13,AZTEM + MOVEM 13,AZEXT ;STORE ASCII EXTENSION + HLLZ ACEXT,0 ;SET EXTENSION + POPJ PP, ;EXIT + +TTYIN: ILDB C,CTIBUF+1 ;GET CHARACTER + CAIE C,40 ;SKIP BLANKS + CAIN C,11 ;AND TABS + JRST TTYIN + POPJ PP, ;NO, EXIT + +PPSET: BLOCK 20 +INDIR1: BLOCK 4 +INDIR2: BLOCK 4 +AZD: BLOCK 2 ;OUTPUT FILE NAME +AZTEM: BLOCK 2 +AZFIL: BLOCK 2 ;FOR ASCII FILE NAME +AZDEV: BLOCK 2 ;FOR ASCII DEVICE NAME +AZEXT: BLOCK 1 ;FOR ASCII EXTENSION +CTIBUF: BLOCK 3 +CTOBUF: BLOCK 3 +INBUF1: BLOCK 3 +INBUF2: BLOCK 3 +ERRCNT: BLOCK 1 +OUTDIR: BLOCK 4 + ENDP: + END COMPGO