/ P?S/8 NON-SYSTEM DSD-240-8 HANDLERS / LAST EDIT: 22-APR-1986 09:00:00 CJL / MAY BE ASSEMBLED WITH '/J' SWITCH SET. XLIST OFF IFNDEF OFF IFNDEF ON XLIST ON / P?S/8 NON-SYSTEM HANDLERS FOR DSD-240-8 CONTROLLER WITH WESTERN DYNEX / FIXED/REMOVABLE DRIVE. / THESE ARE CO-RESIDENT HANDLERS FOR THE UPPER (REMOVABLE) AND LOWER (REMOVABLE) / UNITS OF ANY ONE DRIVE. EACH ENTRY POINT ADDRESSES EIGHT LOGICAL UNITS. /CALLING SEQUENCE: / CDF MYFLD /SET CALLER'S DATA FIELD / CIF HNDFLD /SET HANDLER'S INSTRUCTION FIELD / JMS I (HANDLER) /DSDUP FOR UPPER UNITS, DSDOWN FOR LOWER UNITS / PARAM /PARAMETER POINTER / ERRORRETURN /RETURNS HERE WITH DISK STATUS IN AC IF ERROR / GOODRETURN /RETURNS HERE WITH CLEAR AC IF I/O OK / ON ERROR RETURN, AC CONTAINS RETURNED DISK STATUS. / SUCCESSFUL RETURN CLEARS THE AC. PAGE /START ON A GOOD BOUNDARY HERE= . /REMEMBER ASSEMBLY ADDRESS / DSD-240-8 DEFINITIONS. DCLF= 6622 /CLEAR DONE FLAG DCON= 6627 /LOAD DRIVE CONTROL DEXC= 6624 /EXECUTE DISK COMMAND DLBP= 6625 /LOAD COMMAND BUFFER POINTER DRDS= 6626 /READ STATUS IFNDEF DRIVE /DEFAULT IS TO DRIVE ZERO DSBY= 6623 /SKIP ON BUSY FLAG DSKF= 6621 /SKIP ON DONE FLAG DTST= 6620 /LOAD AC WITH TEST STATUS BITS / MISCELLANEOUS DEFINITIONS. DLENGTH=6260 /LENGTH OF ONE LOGICAL UNIT XLIST OFF IFNDEF DSDOWN IFNDEF DSDUP XLIST ON NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 NL2000= CLA CLL CML RTR /LOAD AC WITH 2000 NL4000= CLA CLL CML RAR /LOAD AC WITH 4000 NL7775= CLA CLL CMA RTL /LOAD AC WITH 7775 NL7777= CLA CMA /LOAD AC WITH 7777 REVISIO="A&77 /REVISION OF HANDLER(S) / DEVICE HANDLER HEADER BLOCK. *"D&177;*"S&177;*"U&177+DRIVE /GROUP NAME *-2 /GROUP COUNT *"D&177;*"S&177;*"U&177+DRIVE /DEVICE NAME *DSDUP&177 /RELATIVE ENTRY POINT *DLENGTH-1 /LENGTH (HIGHEST BLOCK) *REVISION /REVISION OF HANDLER *"D&177;*"S&177;*"L&177+DRIVE /DEVICE NAME *DSDOWN&177 /RELATIVE ENTRY POINT *DLENGTH-1 /LENGTH (HIGHEST BLOCK) *REVISION /REVISION OF HANDLER *HERE /RESET ORIGIN DSWAP, .-. /COMMAND SWAP ROUTINE TAD TADCB0/(TAD CBUF0) /GET "TAD CBUF0" INSTRUCTION DCA SWPLUP /RESET INSTRUCTION DS300, TAD DS7760/(7760) /SETUP DCA DSDOWN /POINTING COUNTER SWPLUP, TAD CBUF0 /WILL BE "TAD CBUF" DCA SWPTMP /SAVE WORD NL2000 /TAD (DCA-TAD) /GET "DCA"-"TAD" TAD SWPLUP /NOW HAVE "DCA CBUF" DCA SWPSTR /PUT IN-LINE TAD I DSDOWN /GET A WORD SWPSTR, DCA CBUF0 /WILL BE "DCA CBUF" TAD SWPTMP /GET COMMAND WORD DCA I DSDOWN /PUT INTO BOOTSTRAP ISZ SWPLUP /BUMP INSTRUCTION ISZ DSDOWN /ALL DONE? JMP SWPLUP /NO, GO BACK JMP I DSWAP /RETURN CB1TMP, .-. /COMMAND TEMPORARY DSERCT, .-. /DISK ERROR RETRY COUNTER DS6203, CIF CDF 00 /CIF CDF CONSTANT SWPTMP, .-. /SWAP TEMPORARY IFNZRO .&177-26 DSDOWN, .-. /LOWER DISK ENTRY POINT DS7600, CLA!400 /CLEAN UP TAD DSDOWN /GET CALLER DCA DSDUP /MOVE TO OTHER ENTRY DS4077, JMP DSCOMN /CONTINUE THERE DSWAIT, .-. /WAIT ROUTINE DCA CBUF1 /SETUP PASSED FUNCTION CDF 00 /SWAPPING WITH FIELD ZERO NL7775 /SETUP THE DISK DCA DSERCT /ERROR RETRY COUNT IFNZRO .&177-40 DS7, 7 /CONSTANT 0007 DSAGN, JMS DSWAP /SWAP COMMAND DEXC /EXECUTE COMMAND DSBY /DONE YET? JMP .-1 /NO, WAIT FOR IT JMS DSWAP /SWAP IT BACK TAD CBUF7 /GET STATUS AND DS4077/(4077) /JUST ERROR BITS SNA /SKIP IF ANY ERRORS JMP I DSWAIT /RETURN IF OK ISZ DSERCT /TOO MANY ERRORS? JMP CALTST /NO, CHECK FURTHER JMP DSKERR /GO COMPLAIN CALTST, AND DS40/(40) /RECALIBRATE NEEDED? SNA CLA /SKIP IF SO JMP DSAGN /TRY, TRY AGAIN TAD DS300/(300) /GET RECALIBRATE FUNCTION JMS DSWAIT /RESET DRIVE JMP RETRY /TRY, TRY AGAIN / IMAGE OF COMMAND STORED HERE; SWAPPED INTO 07760 WHEN NEEDED. CBUF0, .-. /CYLINDER ADDRESS CBUF1, .-. /FUNCTION CBUF2, .-. /WORD COUNT CBUF3, .-. /CURRENT ADDRESS DS1454, 1454 /CONSTANT 1454; UNCHANGED EVEN AFTER SWAPPING! DSTMP1, .-. /TEMPORARY DSTMP2, .-. /TEMPORARY CBUF7, .-. /RETURNED STATUS DS4070, 4070 /CONSTANT 4070 DS6000, 6000 /CONSTANT 6000 DSDUP, .-. /UPPER DISK ENTRY POINT NL4000 /INDICATE UPPER IFNZRO .&177-77 DSCOMN, DCA CBUF0 /OR LOWER TAD DRIVNO /INCLUDE DRIVE NUMBER DCON /SETUP DRIVE NL0002 /SET FILE MODE BITS TAD DS7760/(7760) /ADD ON BUFFER POINTER DLBP /SETUP COMMAND POINTER DS7760, SMA SZA SNL CLA /ALWAYS SKIPS DRIVNO, DRIVE /DRIVE NUMBER RDF /GET CALLING FIELD TAD DS6203/(CIF CDF)/NOW HAVE RETURN INSTRUCTION DCA DSEXIT /SAVE FOR LATER TAD I DSDUP /GET PARAMETER ADDRESS DCA DSDOWN /SAVE IT NL7777 /BACKUP TAD I DSDOWN /GET CORE ADDRESS-1 DCA CBUF3 /SAVE AS CURRENT ADDRESS ISZ DSDOWN /BUMP TO FUNCTION WORD TAD I DSDOWN /GET FUNCTION WORD DCA DSWAP /SAVE IT FOR LATER ISZ DSDOWN /BUMP TO BLOCK TAD DSWAP /GET FUNCTION WORD RAL /MOVE UP AND DS7600/(7600) /ISOLATE PAGE BITS CIA /INVERT DCA CBUF2 /SAVE AS WORD COUNT TAD I DSDOWN /GET BLOCK NUMBER CLL RAR;CLL RAR;CLL RAR /%8 TAD CBUF0 /ADD ON UPPER/LOWER BIT DCA CBUF0 /SAVE IT BACK DS40, TAD DS7/(7) /SETUP LOW-ORDER MASK DS626, AND I DSDOWN /GET CBUF1-ONLY SECTOR BITS DCA DSTMP1 /SAVE THEM TAD DSWAP /GET FUNCTION WORD AGAIN RAR;CLA RAR /MOVE LOW-ORDER UNIT BIT TO AC[0] DCA DSTMP2 /SAVE IT FOR LATER TAD DSWAP /L WPP PPP FFF UUU AND DS4070/(4070) /L W00 000 FFF 000 SPA /MOVE WRITE BIT OVER TAD DS6000/(6000) /L 0W0 000 FFF 000 TAD DSTMP2 /L UW0 000 FFF 000 CLL RAL /U W00 00F FF0 000 TAD DSTMP1 /U W00 00F FF0 SSS RTR;RTR /0 SSS UW0 000 FFF DCA CB1TMP /SAVE IN CASE OF RECALIBRATION TAD DSWAP /GET FUNCTION WORD AGAIN RTR;RAR /MOVE HIGH-ORDER UNIT BITS TO LINK, AC[0] SPA CLA /LOW ORDER UNIT? TAD DS626/(626) /YES SZL /HIGH ORDER UNIT? TAD DS1454/(1454) /YES TADCB0, TAD CBUF0 /ADD ON OTHER BITS DCA CBUF0 /SAVE COMPLETED CYLINDER WORD RETRY, TAD CB1TMP /GET DISK FUNCTION JMS DSWAIT /GO DO IT ISZ DSDUP /BUMP EXTRA TIME DSKERR, ISZ DSDUP /BUMP PAST ERROR RETURN (MAYBE) DSEXIT, CIF CDF 00 /TO CALLING FIELD JMP I DSDUP /RETURN $ /THAT'S ALL FOLK!