PAGE /DCIO /21AU69TH OCTAL DCIO, 00 ION CLA CLL TAD DCBSY SZA CLA JMP .-2 TAD DCBSY-5 DCA DCBSY TAD .-1 DCA .+4 TAD I DCIO ISZ DCIO ISZ .+1 DCIO2, 00 ISZ DCBSY JMP .-5 TAD DCBSY+4 RTR SNL CLA STA TAD DCIO DCA DCIO IOF ISZ DCBSY JMS DCSERV ION JMP I DCIO / 0006 -5 0002 7751 7750 3000 DCBSY, 00 00 00 00 00 00 / DCSERV, 00 CLA CLL TAD DCBSY SNA JMP DCIO5 SMA CLA JMP DCIO4 DFSC JMP I DCSERV DEAC DFSE DCA DCIO2 CLA CLL TAD DCIO2 SNA JMP DCIO3 AND DCBSY-6 SZA CLA JMP .+3 ISZ DCBSY JMP DCIO4+2 DCIO3, TAD DCBSY+4 AND DCBSY-4 SNA CLA JMP DCIO6+4 TAD DCIO2 JMS I DCBSY+5 SNA CLA JMP DCIO6 DCIO4, TAD DCBSY-5 DCA DCBSY STA TAD DCBSY+1 DCA I DCBSY-3 TAD DCBSY+2 CIA DCA I DCBSY-2 TAD I DCBSY-2 CMA CLL TAD DCBSY+3 CLA RTR RTR RTR SZA JMS DCIO8 JMS DCIO8 TAD DCBSY+4 RAR CLA TAD DCBSY+3 SZL DMAR SNL DMAW DFSE DEAC DCA DCIO2 CLA CLL JMP I DCSERV DCIO5, DEAC RTR SNL CLA JMP DCIO6 DEAC TAD DCBSY-1 DEAL DCIO6, CLA CLL DCA DCBSY DCMA JMP I DCSERV TAD DCIO2 SNA JMP DCIO6 HLT CLA CLL JMP DCIO4 / DCIO8, 00 TAD DCBSY+4 DEAL DCMA DFSE SKP CLA DEAC DCA DCIO2 TAD DCIO2 RTR SZL CLA JMP DCIO3 JMP I DCIO8 /DCIO, 1 PAGE PAGE /DCNI /21AU69TH OCTAL 0006 0005 00 00 00 00 0002 -5 7750 7751 DCNI, 00 IOF CLA CLL TAD DCNI2+6 RIF DCA DCNI7+1 TAD DCNI-3 DCA DCNI-5 DCNI2, TAD DCNI DCA DCNI-6 JMS DCNI7 STA TAD I DCNI-6 ISZ DCNI-6 CDF DCA I DCNI-1 JMS DCNI7 TAD I DCNI-6 ISZ DCNI-6 CIA CDF DCA I DCNI-2 TAD I DCNI-2 CMA CLL JMS DCNI7 TAD I DCNI-6 CLA TAD I DCNI-6 ISZ DCNI-6 DCA DCNI-10 RTR RTR RTR SZA JMS DCNI7+3 JMS DCNI7+3 TAD I DCNI-6 RAR CLA TAD DCNI-10 SZL DMAR SNL DMAW DFSE DEAC DCA DCNI-7 DFSC JMP .-1 DEAC DFSE DCA DCNI-7 CLA CLL TAD I DCNI-6 DEAL DCMA CLA CLL TAD DCNI-7 SNA JMP DCNI7-3 AND DCNI-12 SZA CLA JMP .+3 ISZ DCNI-5 JMP DCNI2 DCNI6, TAD I DCNI-6 AND DCNI-4 SZA CLA JMP DCNI7-3 TAD DCNI-7 HLT JMP DCNI+2 TAD DCNI-7 ISZ DCNI-6 JMP I DCNI-6 / DCNI7, 00 00 JMP I DCNI7 / 00 TAD I DCNI-6 DEAL DCMA DEAC AND DCNI-11 SZA CLA JMP .+3 DFSE SKP CLA DEAC DCA DCNI-7 TAD DCNI-7 RTR SZL CLA JMP DCNI6 JMP I DCNI7+3 /DCNI, 105 WDS /DCSERV (RUMP VERS.) /21AU69TH 3000 DCSERV, 00 DEAC RTR SNL CLA JMP .+4 DEAC TAD DCSERV-1 DEAL CLA CLL DCMA JMP I DCSERV /DCSERV, 12 WDS PAGE /***************************** /DCIO /INTERRUPT-ENABLED DF32 DISC ROUTINE /21AU69TH OCTAL DCIO, 00 /CALLING ENTRY POINT ION /ENABLE TO CLEAR PREVIOUS FLAGS CLA CLL TAD DCBSY SZA CLA JMP .-2 /HOLD TILL DISC NOT BUSY TAD DCBSY-5 DCA DCBSY /USE 'DCBSY' TO COUNT ARGUMENTS TAD .-1 DCA .+4 TAD I DCIO /GET ARGUMENT ISZ DCIO ISZ .+1 /STORE ARGUMENTS FOLLOWING 'DCBSY' DCIO2, 00 /DISC EMA IF ERROR, ZERO FOR NO ERROR ISZ DCBSY JMP .-5 TAD DCBSY+4 RTR /LINK = 1 IFF CONCLUSION ROUTINE SNL CLA STA TAD DCIO /IF NO CONCLUSION ROUTINE, BACK UP DCA DCIO / RETURN ADDRESS IOF /SUPPRESS INTERRUPTS AND REQUEST INITIAL ISZ DCBSY / START FROM INTERRUPT SERVICE ROUTINE JMS DCSERV ION /RE-ENABLE INTERRUPTS AND RETURN TO JMP I DCIO / CALLING PROGRAM / 0006 /-6 MASK FOR TIMING, WRITE LOCK -5 /-5 ARGUMENT COUNT, RETRY COUNT 0002 /-4 MASK FOR AC BIT 10 7751 /-3 DISC CURRENT ADDRESS 7750 /-2 DISC WORD COUNT 3000 /-1 USED TO CORRECT NON-DISC FLAG DCBSY, 00 / NEG WHILE DISC BUSY, ZERO WHEN DONE 00 /+1 STARTING CORE ADDRESS 00 /+2 POSITIVE WORD COUNT 00 /+3 LOW-ORDER DISC ADDRESS 00 /+4 DISC EMA, BIT 11 = READ, BIT 10 = 00 /+5 USER'S CONCLUSION ROUTINE (IF ANY) / DCSERV, 00 /DISC INTERRUPT SERVICE CLA CLL TAD DCBSY SNA JMP DCIO5 /BRANCH IF INTERRUPT BUT DISC NOT BUSY SMA CLA JMP DCIO4 /BRANCH IF INITIAL START REQUEST DFSC JMP I DCSERV /EXIT IF DISC BUSY BUT NOT COMPLETE DEAC /READ EMA FOR ERROR DFSE /SKIP IF PARITY, WRITE LOCK, TIMING OK DCA DCIO2 /DEPOSIT EMA IF ERROR CLA CLL TAD DCIO2 SNA JMP DCIO3 /BRANCH IF OK, AC = 0, L = 0 AND DCBSY-6 SZA CLA JMP .+3 /BRANCH UNLESS PARITY ERROR ONLY ISZ DCBSY /COUNT ERROR JMP DCIO4+2 /BRANCH TO RETRY UNLESS 5TH ATTEMPT DCIO3, TAD DCBSY+4 AND DCBSY-4 /AC = 2 IFF USER CONCLUSION ROUTINE SNA CLA JMP DCIO6+4 /BRANCH IF NO USER ROUTINE TAD DCIO2 /GET ERROR WORD, 0 IF OK JMS I DCBSY+5 /CALL USER, AC = ERROR WORD SNA CLA /RESTART IF AC = +- JMP DCIO6 /TERMINATE IF AC = 0 DCIO4, TAD DCBSY-5 /MARK BUSY AND INITIALIZE ERROR COUNT DCA DCBSY STA TAD DCBSY+1 /SET UP DISC CURRENT ADDRESS DCA I DCBSY-3 TAD DCBSY+2 CIA /SET UP DISC WORD COUNT DCA I DCBSY-2 TAD I DCBSY-2 CMA CLL /AC = -1 + WORD COUNT, 4095 IF ZERO TAD DCBSY+3 /AC = LOW-ORDER ADDRESS OF LAST WORD CLA RTR RTR RTR SZA /SKIP IF ALL WORDS HAVE SAME DISC EMA JMS DCIO8 /CHECK ADDRESS OF LAST WORD JMS DCIO8 /CHECK ADDRESS OF FIRST WORD, SET EMA TAD DCBSY+4 RAR /LINK = 1 IFF READ CLA TAD DCBSY+3 /AC = DISC LOW-ORDER ADDRESS SZL DMAR SNL /START DISC, CLEAR AC DMAW DFSE /SKIP IF NO ERROR DEAC /READ EMA FOR ERROR DCA DCIO2 /DEPOSIT EMA IF WRITE LOCK, 0 IF OK CLA CLL JMP I DCSERV /EXIT, INTERRUPTS PENDING DCIO5, DEAC /WHEN DISC NOT BUSY, CHECK FOR RTR / NON-DISC INTERRUPT SNL CLA JMP DCIO6 /BRANCH IF DISC EMA OK DEAC TAD DCBSY-1 /CHANGE TO DIFFERENT DISC, IF NO SUCH DEAL / DISC, INTERRUPT WILL COME BACK DCIO6, CLA CLL /GENERAL NOT-BUSY INTERRUPT TERMINATION DCA DCBSY DCMA /CLEAR BUSY INDICATOR AND FLAGS AND EXIT JMP I DCSERV TAD DCIO2 /INTERNAL ERROR SERVICE, NO USER ROUTINE SNA JMP DCIO6 /CLEAR AND EXIT IF NO ERROR HLT /INTERNAL ERROR HALT, AC = DISC EMA CLA CLL JMP DCIO4 /RESTART DISC / DCIO8, 00 /SUBR, LOAD AND CHECK DISC EMA REG TAD DCBSY+4 /ADD USER'S CONTROL WORD DEAL /LOAD EMA DCMA /KILL SPURIOUS NON-DISC IF NO DISC 0 DFSE SKP CLA /SKIP IF WRITE LOCK, ADDRESS IS VALID DEAC /CHECK EMA AND NON-DISC BIT DCA DCIO2 /STORE FOR ERROR WORD IF NEEDED TAD DCIO2 RTR SZL CLA JMP DCIO3 /BRANCH IF NON-DISC ERROR, LINK = 1 JMP I DCIO8 /RETURN IF OK /DCIO, 1 PAGE PAGE /***************************** /DCNI /INTERRUPT-DISABLED DF32 DISC ROUTINE /21AU69TH OCTAL 0006 /-12 MASK FOR TIMING, WRITE LOCK 0005 /-11 MASK FOR PARITY, TIMING ERRORS 00 /-10 LOW-ORDER DISC ADDRESS 00 /-7 ERROR WORD, 0 = OK 00 /-6 ARGUMENT POINTER, RETURN ADDRESS 00 /-5 RETRY COUNTER 0002 /-4 MASK FOR AC BIT 10 -5 /-3 RETRY COUNT FOR ERRORS 7750 /-2 DISC WORD COUNT 7751 /-1 DISC CURRENT ADDRESS DCNI, 00 /ENTRY POINT IOF /NON-INTERRUPT SUBROUTINE CLA CLL /RESTART POINT TAD DCNI2+6 /AC = DF RIF DCA DCNI7+1 /DEPOSIT CDF FOR CURRENT FIELD TAD DCNI-3 /SET UP RETRY COUNT DCA DCNI-5 DCNI2, TAD DCNI /RETRY POINT, SET UP ARGUMENT POINTER DCA DCNI-6 JMS DCNI7 /SET DF = IF TO GET ARGUMENT STA TAD I DCNI-6 /AC = -1 + CORE ADDRESS ISZ DCNI-6 CDF /DEPOSIT INITIAL CURRENT ADDRESS IN DCA I DCNI-1 / FIELD 0 JMS DCNI7 TAD I DCNI-6 /AC = WORD COUNT (+) ISZ DCNI-6 CIA CDF DCA I DCNI-2 /STORE NEGATIVE WORD COUNT TAD I DCNI-2 CMA CLL /AC & L = -1 + WORD COUNT (+) JMS DCNI7 TAD I DCNI-6 /AC = DISC LOW-ADDRESS OF LAST WORD CLA /LINK = 1 IFF CARRY INTO EMA TAD I DCNI-6 /AC = DISC LOW-ADDRESS OF FIRST WORD ISZ DCNI-6 DCA DCNI-10 RTR RTR RTR SZA /SKIP IF SAME EMA FOR FIRST AND LAST JMS DCNI7+3 /CHECK ADDRESS OF LAST WORD JMS DCNI7+3 /SET AND CHECK EMA FOR FIRST WORD TAD I DCNI-6 /GET CONTROL WORD FOR BIT 11 RAR CLA /LINK = 1 IFF READ OPERATION TAD DCNI-10 /AC = LOW-ORDER DISC ADDRESS SZL DMAR SNL /START DISC OPERATION DMAW DFSE DEAC /DEPOSIT DISC EMA IF WRITE LOCK ERROR, DCA DCNI-7 / 0 IF OK DFSC JMP .-1 /HOLD TILL DONE DEAC DFSE /DEPOSIT DISC EMA IF PARITY, WRITE LOCK, DCA DCNI-7 / OR TIMING ERROR CLA CLL /LINK = 0 FOR POST-OPERATIVE ERROR TAD I DCNI-6 DEAL /RE-ESTABLISH VALID ADDRESS IF NEEDED DCMA /CLEAR FLAGS CLA CLL TAD DCNI-7 /AC = 0 IF OK, EMA IF ERROR SNA JMP DCNI7-3 /EXIT, AC = 0, L = 0 IF NO ERROR AND DCNI-12 SZA CLA JMP .+3 /BRANCH UNLESS PARITY ERROR ONLY ISZ DCNI-5 JMP DCNI2 /TRY PARITY 5 TIMES DCNI6, TAD I DCNI-6 /ERROR SERVICE POINT AND DCNI-4 SZA CLA JMP DCNI7-3 /BRANCH IF ERROR RETURN REQUESTED TAD DCNI-7 HLT /INTERNAL ERROR HALT JMP DCNI+2 /RESTART 'DCNI' TAD DCNI-7 /RETURN POINT, GET ERROR WORD ISZ DCNI-6 JMP I DCNI-6 /RETURN FROM 'DCNI' / DCNI7, 00 /SUBR, SET DF = IF 00 /= CDF FOR CURRENT INSTRUCTION FIELD JMP I DCNI7 / 00 /SUBR, SET DISC EMA, CHECK FOR NON-DISC TAD I DCNI-6 /GET CONTROL WORD FOR EMA & EA DEAL /LOAD DCMA /CLEAR PREVIOUS FLAGS DEAC AND DCNI-11 SZA CLA /IF DCMA DID NOT CLEAR PARITY AND TIMING JMP .+3 / FLAGS, ADDRESS IS INVALID DFSE SKP CLA /SKIP IF WRITE LOCK, ADDRESS IS VALID DEAC /READ EMA FOR NON-DISC BIT DCA DCNI-7 /STORE FOR ERROR WORD IF NEEDED TAD DCNI-7 RTR SZL CLA /BRANCH TO ERROR SERVICE IF NON-DISC, JMP DCNI6 / LINK = 1 FOR PRE-OPERATIVE ERROR JMP I DCNI7+3 /RETURN IF ADDRESS OK /DCNI, 105 WDS /DCSERV (RUMP VERS.) /21AU69TH 3000 DCSERV, 00 /ENTRY POINT, DISC INTERRUPT SERVICE, DEAC / NOT-BUSY ONLY RTR SNL CLA JMP .+4 /BRANCH IF NO NON-DISC DEAC TAD DCSERV-1 /CHANGE TO DIFFERENT DISC DEAL CLA CLL DCMA /CLEAR FLAGS AND EXIT JMP I DCSERV /DCSERV, 12 WDS