 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

