File: SIDK.PA of Tape: Sources/RTS/s3
(Source file text)
/SI DISK DRIVER FOR RTS/8 /ACCEPTS STANDARD MASS-STORAGE MESSAGE FORMAT TASK= SIDK INIWT= 0 CUR= 0 DSDD= 6501 /SKIP ON D/D DLCR= 6502 /LOAD CON.REG. DCSR= 6504 /CLEAR STATUS DRSR= 6505 /READ STATUS DSDE= 6511 /SKIP ON D/E DLSR= 6512 /LOAD SECT.REG. DLTR= 6514 /LOAD TR.ADR.REG./READ DLTW= 6515 /LOAD TR.ADR.REG./WRITE DWCA= 6517 /WCCA SEQUENCE FIELD CUR%10 *3400 TMP, START, CAL DONEFG, SKPINS TRYCT, INTRPT LOOP, CAL RECEIV /GET A MESSAGE ADDR, 0 DCA FLD AC7775 DCA TRYCT /TRY 3 TIMES INIT, ISZ DONEFG /INITIALIZE EVENT FLAG CMA CLL /** AC MAY BE 3 HERE ** TAD ADDR DCA ADDR /ADDRESS OF PARAMETER BLOCK -1 IN AC JMS GET AND (7 /CLEAR ALL HIGH-ORDER BITS DCA PAGCNT /STORE UNIT JMS GET AND (7770 /GET FUNCTION WORD, TAD PAGCNT /COMBINE WITH UNIT NUMBER DCA PAGCNT /AND STORE IT AWAY TAD PAGCNT AND (3700 CLL RAL DCA WCT /STORE WORD COUNT JMS GET /AND DCA WCT+1 /PUT STARTING TRANSFER ADDRESS /IN DMA LOCATIONS TAD (CUR^100/SET FIELD FOR DMA ACCESS DLCR /AND CLEAR REST OF COMREG DCSR /CLEAR STATUS AC0000 TAD (WCT DWCA /MAKE DMA TRANSFER AC0001 AND PAGCNT SZA CLA /"UNIT" = DRIVE*4+DISK*2+HALF /CHECK WHICH HALF TAD (6300 /SECOND HALF - ADD BLOCK NUMBER OFFSET JMS GET /TO BLOCK NUMBER DLSR /LOAD 4 BITS IN SECTOR AND (7760 DCA REC /SAVE REST IN LOW ORDER /HIGH ORDER IN LINK!! IAC IAC /MAKE 2 AND LEAVE LINK AND PAGCNT /PLATTER BIT TAD REC RTR RTR DCA REC /LOW ORDER TO LOW AND PLATTER TO BIT 1 TAD (DLTR DCA DKIOU /SET GO TO READ TAD PAGCNT SPA ISZ DKIOU /IF WRITE CHANGE READ TO WRITE AND (70 /ISOLATE BUFFER FIELD IAC /ADD INTENA BIT BSW DCA TMP AC0004 AND PAGCNT /GET DRIVE NUMBER RAL /INTO BIT 8 TAD TMP /ADD IN FIELD AND INTENA IOF /INTERRUPTS OFF WHILE LOADING REGISTERS! DLCR /LOAD COMREG AC0000 TAD REC DKIOU, HLT /R/W AND GO AC0000 TAD (FSTINT CDF CUR ION /** NOTE THE "DCA IDISP" MUST BE NEXT DCA IDISP /INITIALIZE INTERRUPT DISPATCH CAL WAITE PDONFG, DONEFG /WAIT FOR COMPLETION AC0003 /LOAD CONSTANT FOR BACKING UP ADDR ISZ RTRYFG /DID EVENT FLAG SIGNIFY ERROR OR COMPLETION? JMP INIT /ERROR OR PWR FAIL - RETRY ENTIRE OPERATION JMS GET /THIS JUST SETS THE DF AND ADDR AC0000 TAD STATUS DCA I ADDR TAD FLD DCA PFLD TAD ADDR TAD (-7 /GET POINTER TO MESSAGE EVENT FLAG CAL POST STATUS, PFLD, HLT JMP LOOP /GET ANOTHER MESSAGE RTRYFG, 0 /RETRY FLAG WCT, 0 /THIS LOC. AND NEXT FOR DMA REC, /LOW-ORDER BLOCK NUMBER GET, 0 FLD, HLT ISZ ADDR TAD I ADDR JMP I GET PAGCNT, 0 /PAGE COUNT FOR TRANSFER FSTINT, DSDE JMP DKOVER DKERR, DRSR ISZ TRYCT JMP TRYAGN DKOVER, DCA STATUS AC7777 TRYAGN, DCA RTRYFG TAD (DONEFG IGNORE, DCSR CIF 0 POSTDS INTRPT, 0;0 DSDD JMP I INTRPT CDF CIF CUR JMP I .+1 IDISP, IGNORE $$