/ P?S/8 PDP-12 NON-SYSTEM HANDLER / P?S/8 LINCTAPE NON-SYSTEM HANDLER FOR THE PDP-12. / LAST EDIT: 17-APR-1986 10:00:00 CJL / MAY BE ASSEMBLED WITH '/J' SWITCH SET. / FEATURES: / 1) SUPPORT OF EIGHT UNITS (0-7). / 2) PARITY ERROR DETECTION AND RETRY (WITH COUNTER). / 3) NOT READY OR WRITE LOCK DETECTION AND RETRY (WITH COUNTER). / 4) WAITS IN PDP-8 MODE, THUS ALLOWING INTERRUPTS. XLIST OFF IFNDEF OFF IFNDEF ON IFNDEF BLKSIZE XLIST OFF IFZERO BLKSIZE-400 < XLIST ON; IFZERO 1 < / 5) SUPPORTS 256 OR 257 WORDS/BLOCK LINCTAPES AS A NON-STANDARD / FEATURE OF THIS PROGRAM. > XLIST OFF > IFZERO BLKSIZE-200 < XLIST ON; IFZERO 1 < / 5) SUPPORTS 128 OR 129 WORDS/BLOCK LINCTAPES. > XLIST OFF > XLIST ON PAGE /START ON A GOOD BOUNDARY HERE= . /WHERE WE ARE / DEFINITIONS. AXO= 0001 /LOAD EXTENDED OPERATIONS BUFFER XLIST OFF IFZERO BLKSIZE-200 < XLIST ON BLKSIZE=0200 /128 WORDS/BLOCK (ALSO ALLOWS 129) XLIST OFF > IFZERO BLKSIZE-400 < XLIST ON BLKSIZE=0400 /256 WORDS/BLOCK (ALSO ALLOWS 257) XLIST OFF > XLIST ON LDA= 1000 /LOAD ACCUMULATOR LINC= 6141 /GOTO LINC MODE XLIST OFF IFNDEF LINCTAPE XLIST ON LMR= 6151 /LOAD MAINTENANCE REGISTER LTLENGT=4000 /LINCTAPE BLOCK COUNT NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 NL4000= CLA CLL CML RAR /LOAD AC WITH 4000 NL7775= CLA CLL CMA RTL /LOAD AC WITH 7775 PDP= 0002 /GOTO PDP-8 MODE RDE= 0702 /READ A TAPE BLOCK REVISIO="B&77 /REVISION OF HANDLER TAC= 0003 /TAPE ACCUMULATOR TO ACCUMULATOR TMA= 0023 /LOAD TAPE MEMORY ADDRESS REGISTER TRC= 6152 /TAPE REGISTER CLOCK XFR= 6154 /TRANSFER SELECTED REGISTER TO ACCUMULATOR / DEVICE HANDLER HEADER BLOCK. XLIST OFF IFZERO BLKSIZE-200 < XLIST ON *"L&177;*"T&177;*"A&177 /GROUP NAME *-1 /GROUP COUNT *"L&177;*"T&177;*"A&177 /DEVICE NAME XLIST OFF > IFZERO BLKSIZE-400 < XLIST ON *"L&177;*"T&177;*"D&177 /GROUP NAME *-1 /GROUP COUNT *"L&177;*"T&177;*"D&177 /DEVICE NAME XLIST OFF > XLIST ON *LINCTAPE&177 /ENTRY POINT *LTLENGTH-1 /LENGTH EXPRESSED AS HIGHEST BLOCK *REVISION /REVISION OF HANDLER *HERE /RESET ORIGIN LINCTAP,.-. /ENTRY POINT NL0002 /SET INSTRUCTION FIELD BIT RDF /NOW HAVE CALLING FIELD TAD (CDF) /MAKE RETURN CIF CDF INSTRUCTION DCA LTEXIT /STORE IN-LINE FOR EXIT LATER TAD I LINCTAPE /GET PARAMETER POINTER DCA LTBLOCK /STASH IT ISZ LINCTAPE /BUMP TO ERROR RETURN TAD I LTBLOCK /GET TRANSFER ADDRESS DCA LTCORE /STASH IT ISZ LTBLOCK /BUMP TO NEXT TAD I LTBLOCK /GET FUNCTION WORD AND (70) /JUST TRANSFER FIELD TAD (CDF) /MAKE INTO CDF TRANSFER FIELD INSTRUCTION DCA LTSVFLD /STORE IN-LINE FOR LATER TAD I LTBLOCK /GET FUNCTION WORD AGAIN RAR /LOW-ORDER UNIT BIT TO LINK AND LT3/(3) /ISOLATE HIGH-ORDER UNIT BITS DCA LTEMP /SAVE FOR LATER TAD I LTBLOCK /U2 RW P0 P1 P2 P3 P4 F0 F1 F2 U0 U1 U2 RTL /P0 P1 P2 P3 P4 F0 F1 F2 U0 U1 U2 U2 RW AND LT3/(3) /P0 0 0 0 0 0 0 0 0 0 0 U2 RW CLL RTL /0 0 0 0 0 0 0 0 0 U2 RW 0 0 TAD (RDE) /0 0 0 0 1 1 1 0 0 U2 RW 1 0 DCA LTAPINST /SAVE "RDE" OR "WRI" OR "RDE U" OR "WRI U" IN-LINE TAD LTAPINST /GET TAPE INSTRUCTION BACK DCA LTAPTST /SAVE IN-LINE FOR TESTING ALSO TAD I LTBLOCK /GET FUNCTION WORD AGAIN RAL /MOVE UP AND XLIST OFF IFZERO BLKSIZE-400 < XLIST ON AND (7400) /ISOLATE PAGE BITS XLIST OFF > IFZERO BLKSIZE-200 < XLIST ON AND LT7600/(7600) /ISOLATE PAGE BITS XLIST OFF > XLIST ON DCA LTPAGCT /SAVE FOR COUNTING TAD LTSVFLD /RW 1 1 0 0 1 0 F0 F1 F2 0 0 1 AND (70) /RW 0 0 0 0 0 0 F0 F1 F2 0 0 0 CLL RTL /0 0 0 0 0 F0 F1 F2 0 0 0 0 0 STL IAC RTL /0 0 0 F0 F1 F2 0 0 0 0 1 1 0 RTL /0 F0 F1 F2 0 0 0 0 1 1 0 0 0 TAD LTEMP /0 F0 F1 F2 0 0 0 0 1 1 0 U0 U1 DCA LTAXO /STORE FIELD, NOPAUSE, EXTENDED ADDRESSING, /HIGH-ORDER UNIT BITS IN-LINE FOR LATER ISZ LTBLOCK /BUMP TO BLOCK NUMBER TAD I LTBLOCK /GET THE BLOCK NUMBER DCA LTBLOCK /STASH IT FOR LATER RIF /GET OUR FIELD TAD (CIF) /MAKE INTO CIF OUR FIELD INSTRUCTION DCA LTINHBT /STORE IN-LINE TO TEMPORARILY PREVENT /INTERRUPTS AS THE CODE GOES INTO LINC MODE TAD LTINHBT /GET CIF OUR FIELD INSTRUCTION BACK DCA LTINH2 /STORE IN-LINE AS BEFORE NL7775 /SETUP THE DCA LTRYCNT /ERROR RETRY COUNTER LTNEXT, TAD LTCORE /GET TRANSFER ADDRESS LTINH2, .-. /WILL BE CIF OUR FIELD TO INHIBIT INTERRUPTS LINC /GOTO LINC MODE TMA /LOAD TAPE MEMORY ADDRESS SETUP REGISTER LDA!20 /LOAD ACCUMULATOR WITH LTAXO, .-. /EXTENDED ADDRESSING, NOPAUSE, FIELD /AND HIGH-ORDER UNIT BITS AXO /LOAD EXTENDED OPERATIONS BUFFER LTAPTST,.-. /WILL BE "RDE" OR "WRI" OR "RDE U" OR "WRI U" 0 /MUST USE BLOCK ZERO! LDA!20; 5000 /GET REGISTER SETTING BITS PDP /BACK TO PDP-8 MODE LMR /LOAD MAINTENANCE REGISTER XFR /GET DRIVE STATUS BACK RTR /DRIVE OK TO LINK SNL CLA /SKIP IF DRIVE OK JMP LTERR /JUMP IF NOT LINC /GOTO LINC MODE LTAPINS,.-. /WILL BE "RDE" OR "WRI" OR "RDE U" OR "WRI U" LTBLOCK,.-. /WILL BE DESIRED BLOCK NUMBER PDP /BACK TO PDP-8 MODE TAD LTCORE /GET TRANSFER ADDRESS TAD (BLKSIZE) /NOW HAVE ENDANGERED WORD'S ADDRESS DCA LTEMP /SAVE IT LTSVFLD,.-. /WILL BE CDF TRANSFER FIELD TAD I LTEMP /GET ENDANGERED WORD DCA LTSAVIT /SAVE IT TAD (100) /GET TEST BIT LMR /LOAD MAINTENANCE REGISTER JMP .-1 /WILL SKIP WHEN TAPE IS DONE LT7600, CLA!400 /CLEAN UP TAD LTSAVIT /GET ENDANGERED WORD DCA I LTEMP /RESTORE IT LTINHBT,.-. /WILL BE CIF OUR FIELD INSTRUCTION LINC /GOTO LINC MODE LT3, TAC /GET TAPE ACCUMULATOR PDP /BACK TO PDP-8 MODE CLL IAC /LINK IS SET IF NO PARITY ERRORS IF /READING, GARBAGE VALUE IF WRITING CLA IAC RTL /FORM (WRI&4)+(RDE&2&(NO PARITY ERROR)) AND LTAPINS /AC=4 (IF WRITING) OR AC=2 (IF READING /AND NO PARITY ERROR) SNA CLA /SKIP IF WRITING OR NO PARITY ERROR WHILE READING JMP LTERR /JUMP ON READ PARITY ERROR TAD LTEMP /GET PROTECTED ADDRESS DCA LTCORE /USE NEXT TIME FOR TRANSFER ADDRESS ISZ LTBLOCK /BUMP TO NEXT BLOCK TAD LTPAGCT /GET THE PAGE COUNT XLIST OFF IFZERO BLKSIZE-400 < XLIST ON TAD (-BLKSIZE) /ACCOUNT FOR LATEST TRANSFER XLIST OFF > IFZERO BLKSIZE-200 < XLIST ON TAD LT7600/(-200) /ACCOUNT FOR LATEST TRANSFER XLIST OFF > XLIST ON SNA /ANY LEFT TO DO? JMP LTDONE /NO, RETURN TO CALLER DCA LTPAGCT /YES, SAVE FOR NEXT TIME JMP LTNEXT /GO DO NEXT BLOCK LTERR, ISZ LTRYCNT /TOO MANY ERRORS? JMP LTNEXT /NO, GO READ IT AGAIN NL4000 /GET PRESET BIT TRC /RESET THE TAPE CONTROLLER SKP /FORGET IT LTDONE, ISZ LINCTAPE /BUMP TO SUCCESSFUL RETURN LTEXIT, .-. /WILL BE CIF CDF RETURN FIELD JMP I LINCTAPE /RETURN TO CALLER LTCORE, .-. /TRANSFER ADDRESS LTEMP, .-. /TEMPORARY LTPAGCT,.-. /PAGE COUNTER LTRYCNT,.-. /RETRY COUNTER LTSAVIT,.-. /TEMPORARY PAGE $ /THAT'S ALL FOLK!