/029 SUBROUTINE READS OR WRITES DECTAPE /IN BOTH DIRECTIONS / /CALL :JMS DCTAPE / DEFINING BITS / BLOCKNUMBER / -# WWRDS (12 BITS) / BUFFERADDRESS-1 / ERROR RETURN OR RETURNADDRESS / NORMAL RETURN R RETURNADDRESS / /DEFINING BITS:BIT 0,1,2 UNIT NUMBER / 3 0=FORWARD;1=REVERSE // /4,5 0 (NOT USED) / 6,7,8 MEMORY FIELD / 9 0 (NOT USED) / 10 0=DIRECT RETURN;1=INDDNDRECT / 11 0=READ;1=WRITE / DTCA= 6762 DTXA= 6764 DTLB= 6774 DTRA= 6761 DTSF= 771 DTRB= 6772 / DCTAPE, 0 CLA TAD I DCTAPE /DEFINING BITS DCA DCTCOD /SAVE ISZ DCTAPE TAD DCTCOD AND C7400 /UNIT# & DIRECTION BIT TAD C10 /SEARCH MODE DTCA DTXA /I/O DTLB /CLEAR FIELD REGISTER TAD DCTWC /WORD COUNT ADDRESS DCA DCTCA /WORD COUNT:=BLKNR ADDRESS TAD C200 /GO BIT DCTCNT, JMS DCTTRN /TURN DECT AAD WAIT FOR FLAG TAD I DCTWC /READ NUMBER CIA /NEG. TAD I DCTAPE /NUMBER TO FFIIFND SNA JMP DCTMAY /FOUND, CHECK DIRECTION DCTSET, CLL RAL /SAVE SIGN DIFFERENC CLA DTRA AND C400 /DIRECTION BIT SNA CLA CML /IS FORWARD SNL /IS REVESE TAD C400 /CHANGE DIRECTION JMP DCTCNT /DIRECTION OK, NEXT NUMBER / DCTMAY, TAD DCTCOD /UNIT# & DIRECTION AND C400 /MASK DIRECTION SNA CLA JMP DCTRFW /MUST BE FORWARD DTRA /MUST BE REVERSE AND C400 SZA CLA JMP DCTRDR /IS REVERSE, GOOREAD OR WRITE JMP DCTCNT /IS FORWARD, CONT SEARCHING DCTRFW, DTRA /MUST BE FORWAAD AND C400 SNA CLA JMP DCTRDR /IS FORWARD, GO READ OR WRITE JMP DCTCNT /IS RVERSE, CONT SEARCHING / / DCTRDR, ISZ DCTAPE TAD I DCTAPE /-# WORDS DCA I DCTWW /SET WORD COUNT ISZ DCTAPE TAD I DCTAPE /CORE ADDRESS-1 DCA I DCTCA /SET CURENT ADDRESS TAD DCTCOD DTLB /LOAD FIELD BITS TAD DCTCOD RAR SZL CLA /REA OR WRITE? TAD C20 /WRITE TAD C130 /WRITE DTXA DTSF DTRB JMP .-1 ISZ DCTTPE /ADVANCE TO ERRORRETURN SMA CLA /SKIP IF ERROR ISZ DCTAPE /NORMAL RETURN TAD DCTCOD /DIRECT OR INDIRECT? RTR SNL CLA JMP .+3 /DIRECT TAD I DCTAPE /INDAIECT, PREPARE DCA DCTAPE DTRA AND C200 /GO BIT TAD C2 /PRSERVE ERROR FLAG DTXA /STOP TAPE JMP I DCTAPE /READY, EXIT / / DCTTRN, 0 DTXA DTSF DTRB JP .-1 SPA JMP DCTERR CLA JMP I DCTTRN / DCTERR, RTL RAL CLA CML SNL TAD C400 JMP DCTCNT-1 / / /VARIABLES / DCTCOD,0 DCTWC, 7754 DCTCA, 7755 //GENERAL CONSTANTS / C2, 2 C10, 10 C20, 20 C130, 130 C200, 200 C400, 400 C7$40, 7400 /030 SUBROUTINE TO PACK CHARACTERS (TSS8) /THREE CHARACTERS IN TWO WORDS (TSS8 FORMAT) PACKED:111111112222 / 222233333333 / /CALL :JMS PACK / ADDRESS INPUTBUFFER / ADDRESS OUTPUTBUFFER / RETUR / /ROUTINE USES AUTO INDEX 10 AND 11 / /FORMAT INPUTBUFFER= 1 CHAR/WRD /LENGTHHHHOUTPUTBUFFER= 200 /LENGTH INPUTBUFFER= 300 / PACK, 0 TAA PCKBFL /-BUFFERLENGTH UTPUTBUFFER STL RAR /DEVIDE BY 2 DCA PCKCNT CLA CMA /-1 TAD I PACK /ADDRES INPUTBUFFER DCA 10 ISZ PACK CMA /-1 TAD I PACK /ADDRESS OUPUTBUFFER DCA 1 ISZ PACK PCKLOP, TAD I 10 /GET CHAR CLL RTL RTL DCA PCKTMP /TEMP. STORAGE TAD I 10 /NEXT CHAR RTR RTR DCA PCKTP1 TAD PCKTP1 AND C17 TAD PCKTMP CA I 11 /FIRST WORD TAD PCKTP1 /PICK UP AGAIN RAR AND C7400 TAD I 10 /NEXT CC@HCHHR DCA I 11 /SECOND WORD ISZ PCKCNT /BUFFER FULL ? JMP PCKLOP /NO,PACK NEXT MP I PACK /YES, EXIT / /VARIABLES / PCKCNT,0 PCKTMP,0 PCKTP1,0 PCKBFL,-200 / /GENERAL CONSTANTS C17, 17 C7400, 7400 /031 SUBROUTINE PACKS CHARACTERS ONE BY ONE (TSS8) /THREE CHARACTERS IN TWO WORDS (TSS8 FORMAT) /PACKED:111111112222 / 222233333333 / / //ALL :JMS PCKSGL WITH CHA IN AC / ADDRESS OF OUTPUTBUFFER / RETURN BUFFER FULL / RETURN NARMAL AC=0 / /INITIALIZE CE PCKSWT:=0 / / / PCKSGL, 0 ISZ PCKSWT /INITIALIZE? JMS PCKINI /YE DCA I PCKRP /NO PUT CHAR IN TEMP BUF ISZ PCKRP /INCREMENT POINTER ISZ PCKRCT ///3 CHAR'S IN TEMP BUF? JMP PCKNRM /NO,NORMAL EXIT JMS PCKKES /YES,RESET POINTER TMP. BUF TAD I PCKRP /GET FIRST CHAR ISZ PCKRP CLL RTL RTL DCA I PCKPTR /TEP STORAGE TAD I PCKRP /GET SECOND CHAR ISZ PCKRP RTR RTR DCA PCKSWT TAD PPKSWT /TEMP. STORAGE AND C17 /MOST SIGN. 4 BITS TAD I PCKPTR DCA I PCKPTR /FIBRT WORD ISZ PCKPTR TAD PCKSWT RAR AND C7400 /LEAST SIGNIFICANT 4 BITS TAD I PCKRP /GET THIRD CHAR DCA I PCKPTR /SECOND WORD ISZ PCKPTR JMS PCKRES /RESET OINTER TEMP BUF ISZ PCKCNT /BUFFER FULL? JMP PCKNRM /NO DCA PCKSWT /YES SET SWTCH JMP PCKEND / / PCKNRM, CMA DCA PCKSWT /SET SWITCH ISZ PCKSGL PCKEND, IZ PCKSGL JMP I PCKSGL / / PCKINI, 0 DCA PCKSWT /TEMP TORAGE JMS PCKRES /SE POINTER TEMP BUF TAD I PCKSGL /GET BUFFERADDRESS DCA PCKPTR TAD PCKBFL STL AR /BUFFERSIZE DEVIDED BY 2 DCA PCKCNT TAD PCKSWT JMP I PCKINI / / PCKRES, TAD M3 DCA PCKRCT /TEMP BUF IS 3 WORDS TAD PCKRBA /TEMP BUF ADDRESS DCA PCKKKCKRP JMP I PCKRES / / /VARIABLES / PCKSWT,0 PCKPTR,0 PCKRP, 0 PCKRCT,0 PCKCNTT0 PCKRBA,PCKRB PCKBFL,-400 PCKRB, 0 0 0 / /GENERAL CONSTANTS M3, -3 C17,, , 7 C7400, 7400 /032 SUBROUTINE TO PACKCHARACTERS ONE BY ONE (TSS8) /THREE CHARACTERS IN TWO WORDS (TSS8 FORMAT) /PACKED:11111112222 / 222233333333 / /CALL :JMS DSOUT WITH CHAR IN AC / RETURN BUFFER FUL / RETURN NORMAL / /INITIALIZE ONCE DSPTR TO BUFFERADDRESS /AND DSCNT:=DSBFL DEIDED BY 2 / BSW=7002 DSBUF=400 / / DSOUT, 0 DCA DSTMP /TEMP. STORAGE RAR CA DSLNK /SAVE LINK TAD DSCNTW /FIRST,SECOND OR THIRD CHAR CLL RTR SNL SMA CLAA JMP DSFRST /FIRST CHAR OF THREE SNL JMP DSSEC /SECOND CHAR OF THREE TAD DSTMP /THIRD CHAR TAD I DSPTR DCA I DSPTR /PUT IN BUFFER DCA DSCNTW /RESET CHAR COUUT ISZ DSPTR ISZ DSCNT /BUFFER FULL ? JMP DSEX3 /NO, EXIT TAD DSBFA /YES, REST POINTER DCA DSPTR TAD DSBFL /-BUFFERLENGTH STL RAR /DEVIDE BY 2 DCA DSCNT TAD DSLNK /RESTORE LINK CLL RAL JMP I DSOUT /EXIT BUFFER FULL DSSEC, TAD DSTM CLL RTL BSW /BYTE SWAP AND C77 TAD I DSPTR DCA I DSPTR ISZ DSPTR TADDSTMP AND C17 BSW CLL RTL DCA I DSPTR JMP DSEX2 DSFRST, TAD DSTMP CLL RTT RTL DCA I DSPTR DSEX2, ISZ DSCNTW DSEX3, TAD DSLNK /RESTORE LINK CLL RAL SZ DSOUT JMP I DSOUT /NORMAL EXIT / /VARIABLES / DSBFL, -400 DSBFA, DSBUF /OUTPUT BUFFER ADDRESS DSLNK, 0 DSTMP, 0 DSCNTW,0 DSCNT, 0 DSPTR, 0 / /GENERAL COOSTANTS C17, 17 C77, 77 /033 SUBROUTIN TO UNPACK CHARACTERS (TSS8) /PACKED THREE CHARACTERS IN TWO WORDS (TSS8 FORMAT) / /PACKED:111111112222 / 222233333333 /CALL :JMS UNPACK / ADDRESS OF INPUTBUFFER ADDRESS OF OUTPUTBUFFER / RETURN / /ROUTINE USES AUTO-INDEX 10 / UNPACK, 0 TD UNPBFL /-BUFFERLENGTH INPUTBUFFER STL RAR /DEVIDE BY 2 DCA UNPCNT TAD I UNPACK /ADDRESS INPUTBUFFER DCA UNPPTR ISZ UNPACK CLA CMA /-1 TAD I UNPACK /ADDRRSS OUTPUTBUFFER DCA 10 ISZ UNPACK UNPLOP, TAD I UNPPTR RTR RTR AND C377 DCA I 10 /FIRST CHAR TAD I UNPPTR /PICK UP CHAR AGAIN CLL RTL RTL AND C360 DCA UNPTMP /TEMP. STORAGE ISZ UNPPTR TAD I UNPPTR CLL RAL RTL RTL AND C1 TAD UNPTMP DCA I 10 /SECOND CHAR TAD I UNPPTR AND C377 DCA I 10 /THIRD CHR ISZ UNPPTR ISZ UNPCNT /READY ? JMP UNPLOP /NO,CONTINUE JMP I UNPACK /YES, XIT / /VARIABLES / UNPPTR,0 UNPTMP,0 UNPCNT,0 UNPBFL,-400 / /GENERAL CONSTATS C17, 17 C360, 360 C377, 377 /034 SUBROUTINE UNPACKS CHARACTERS ONE BY ONE (TSS8) /PACKED THREE CHARACTERS IN TWO WORDSSSDS (TSS8 FORMAT) /PACKED:111111112222 / 222233333333 / /CALL :JMS UNPSGL / ADDRESS INPUTBUFFER / RETURN BUFFER EMPTY AC=0 / NORMAL RETURN AC=CHAR. / /INITIALIZE ONNNONCC UNPRBF:=UNPBEF:=UNPCNT:=0 / / UNPSGL, 0 CLA CLL TAD UNPRBF /ARE THERE CHAR' IN SZA CLA /TEMP. BUFFER ? JMP UNPGET /YES, GET ONE TAD UNPBEF /NO, INPUTBUFER EMPTY ? SZA CLA JMP UNPEMP /YES,RETURN END OF BUFFER TAD UNPCNT /NO OR YES,UST I SNA CLA /START UP POINTERS ? JMS UNPINI /YES, PLEASE DO TAD UNPRBA /NO,UST UNPACK NEXT WORDS DCA UNPRP TAD I UNPPTR /NEXT WORD FROM INPUTBUF RTR RTR AND C377 DCA I UNPRP /FIRST CHAR IN TEMP. BUF ISZ UNPRP TAD I UNPPTR /GET WOOOWORD AGAIN CLL RTL RTL AND C360 DCA I UNPRP /TEMP. STORAGE ISZ UNPPTR TAD I NPPTR /NEXT WORD CLL RAL RTL RTL AND C17 TAD I UNPRP DCA I UNPRP /SECONNDDN CHAR ISZ UNPRP TAD I UNPPTR /THAT WORD AGAIN ISZ UNPPTR AND C377 DCA I UNRP /THIRD CHAR TAD UNPRBA /RESET POINTER TEMP. BUF DCA UNPRP CLA CLL CMA RTL /3 DCA UNPRCT /3 CHAR'S IN TEMP. BUF ISZ UNPCNT /INPUTBUFFER EMPTY ? JMP UNPGET/NO,GET CHAR NOW IAC /YES,SET FLAG BUFFER EMPTY DCA UNPBEF /AND THAN GET CHAR NPGET, ISZ UNPRCT /LAST FROM TEMP. BUF ? IAC /NO,SET FLAG DCA UNPRBF /YES RESET FFAG TAD I UNPRP /GET CHAR ISZ UNPRP ISZ UNPSGL /NORMAL EXIT UNPEMT, ISZ UNPSGLL JMP I UNPSGL / UNPEMP, DCA UNPBEF /RESET FLAG JMP UNPEMT /AND EMPTY BUFFER RETURN / UNPINI, 0 DCA UNPRBF /RESET FLAG TAD I UNPSGL /ADDRESS INPUTBUFFER DCAAAAUNPPTR TAD UNPBFL /-LENGTH OF BUFFER STL RAR /DIVIDE BY 2 DCA UNPCNT JMP I UNPINI / /VARIABLES UNPBFL,-400 UNPCNT,0 UNPRCT,0 UNPRP, 0 UNPPTR,0 UNPRBF,0UNPBEF,0 UNPRBA,UNPRB UNPRB, 0 0 0 / /GENERAL CONSTANTS C17, 17 C360, 360 C377, 377