WNCHESTER DISK NON SYSTEM HANDLER /VERSION 00.13 DW0A.PA / /COMPUTER EXTENSION SYSTEMS INC. 2-DEC-83 /DANTE A MARCUCCIO / /THIS HANDLER WILL DRIVE A 5 1/4 INCH WINCHESTER DISK THRU EITHER THE MDC8 / OR THE SBC8 / /THE HANDLER SEPERATES THE DISK INTO 2 MEGABYTE SEGMENTS CALLED / W00,W01,W02,W03, FOR THE FIRST 8 MEGABYTES OF DISK 0 / W04,W05,W06,W07, FOR THE NEXT 8 MEGABYTES OF DISK 0 / W10,W11,W12,W13, FOR THE FIRST 8 MEGABYTES OF DISK 1 / W14,W15,W16,W17, FOR THE NEXT 8 MEGABYTES OF DISK 1 / / EACH ASSEMBLY OF THE HANDLER WILL DRIVE 8 MEGABYTES ONLY / /THE FOLLOWING PARAMETERS MUST BE ASSIGNED AT ASSEMBLY TIME / / UNIT= 0 FOR DRIVE 0 1 FOR DRIVE 1 / OFST= 0 FOR IST 8 MBYTES OF DISK 10 FOR 2ND 8 MBYTES / / FOR UNIT 0 FIRST 8 MBYTES / UNIT=0 OFST=0 / *0 -4 /NUMBER OF HANDLERS IN THIS GROUP IFZERO UNIT+OFST < DEVICE DW0A;DEVICE W00;4600;WA&177;ZBLOCK 2 DEVICE DW0A;DEVICE W01;4600;WB&177;ZBLOCK 2 DEVICE DW0A;DEVICE W02;4600;WC&177;ZBLOCK 2 DEVICE DW0A;DEVICE W03;4600;WD&177;ZBLOCK 2 > IFZERO UNIT+OFST-10 < DEVICE DW0B;DEVICE W04;4600;WA&177;ZBLOCK 2 DEVICE DW0B;DEVICE W05;4600;WB&177;ZBLOCK 2 DEVICE DW0B;DEVICE W06;4600;WC&177;ZBLOCK 2 DEVICE DW0B;DEVICE W07;4600;WD&177;ZBLOCK 2 > IFZERO UNIT+OFST-1 < DEVICE DW1A;DEVICE W10;4600;WA&177;ZBLOCK 2 DEVICE DW1A;DEVICE W11;4600;WB&177;ZBLOCK 2 DEVICE DW1A;DEVICE W12;4600;WC&177;ZBLOCK 2 DEVICE DW1A;DEVICE W13;4600;WD&177;ZBLOCK 2 > IFZERO UNIT+OFST-11 < DEVICE DW1B;DEVICE W14;4600;WA&177;ZBLOCK 2 DEVICE DW1B;DEVICE W15;4600;WB&177;ZBLOCK 2 DEVICE DW1B;DEVICE W16;4600;WC&177;ZBLOCK 2 DEVICE DW1B;DEVICE W17;4600;WD&177;ZBLOCK 2 > / / / ASSEMBLY DEFINITIONS / DEV=70 / DSSF=DEV^10+6001 /SKIP ON DONE FLAG DSCD=DEV^10+6002 /CLEAR DONE FLAG DSHI=DEV^10+6003 /LOAD HI ORDER COMM ADD DSLO=DEV^10+6004 /LOAD LO ORDER COMM ADD DSRS=DEV^10+6005 /READ STATUS DSGO=DEV^10+6007 /GO / R3L=7014 /ROTATE 3 LEFT FOR SBC8 PR0=6206 /PANEL REQ 0 FOR SBC8 / / PAGE / COMPTR, TABLE-LOC8 /COMM TABLE POINTER ADJ FACTOR TSTKBD, 0 /ENTRY CLA+400 /CLEAN UP ALSO CONSTANT 7600 KSF /FLAG UP? JMP I TSTKBD /NO GO BACK KRS /READ THE CHAR AND K177 /7 BIT ONLY DCA LOC8 /TEMP STORE CLA CLL CMA RTL /MINUS CONT C TAD LOC8 /ADD BACK CHAR SZA CLA /WAS IT A CONT C? JMP I TSTKBD /NO, GO BACK KCIDF, CIF CDF 00 / JMP I TSTKBD+1 /BACK TO OS8 MONITOR / K3700, 3700 / / MDC, TAD LOC8 /GET ADD OF COMM TABLE DSLO /SEND IT TO MDC8 DSSF /FLAG UP? JMP .-1 /NO, SO WAIT DSCD /YES, SO CLEAR IT DSGO /START IT UP JMS TSTKBD /CHECK FOR CONT C DSSF /TEST FOR DISK DONE JMP .-2 /WAIT FOR ONE OR THE OTHER DSCD /DISK DONE, CLEAR THE FLAG K70, 70 K177, 177 DSRS /GET RETURN STATUS SZA CLA /SKIP IF ALL OK ERR, CLA CLL CML RAR /AC=4000 SMA /SKIP IF ERROR GOOD, ISZ WA /BUMP TO NORM RETURN CALLRET,.-. /STUFFED WITH CIF CDF INST FOR RETURN JMP I WA /BACK TO CALLER / / WD, 0 /ENTRY FOR 4TH UNIT CLA CLL /CLEAN UP TAD WD /GET CALLING ADD DCA WA /STUFF IT IAC /BUMP AC JMP .+5 /GO TO NEXT BUMP / WC, 0 /ENTRY FOR 3RD UNIT CLA CLL /CLEAN UP TAD WC /GET CALLING ADD DCA WA /STUFF IT IAC /BUMP AC JMP .+5 /GO TO NEXT BUMP / WB, 0 /ENTRY FOR 2ND UNIT CLA CLL /CLEAN UP TAD WB /GET CALLING ADD DCA WA /STUFF IT IAC /BUMP AC JMP .+3 /JMP TO COMMON POINT / WA, 0 /ENTRY FOR 1ST UNIT CLA CLL /CLEAN UP RAL /AC=HI ORDER SECT OFFSET FROM 0 TAD OFFSET /AC=HI ORDER ACTUAL OFFSET DCA SECTHI /SET OFFSET SECTOR # DSHI /SEND HI ORDER COMM ADD TO MDC8 (ALWAYS 0) RDF /GET CALLING FIELD TAD KCIDF /BUILD CIDF FOR RETURN DCA CALLRET /STUFF IT FOR EXIT CLA CLL CML RAR /AC=4000 (READ WRITE MASK) AND I WA /GET READ/WRITE BIT CLL IAC RTL /4 IF READ 5 IF WRITE RAL /10 IF READ 12 IF WRITE DCA RWCOM /STUFF IT TAD I WA /GET PAGE BITS AND K3700 /MASK PAGE BITS SNA /SKIP IF NOT MAX CLA CLL CML RAR /USE 40 SECT VALUE BSW DCA SCTCNT /STUFF SECTOR COUNT TAD I WA /GET FUNCTION WORD AND K70 /JUST THE FIELD CLL RTR RAR /TO BITS 9-11 DCA TRFLD /STUFF FIELD (BANK ALWAYS 0) ISZ WA /BUMP POINTER TO TXFER ADD TAD I WA /GET TXFER ADD CLL BSW /HIGH ORDER BITS TO 6-11 DCA TRADHI /STUFF HI TAD I WA /GET IT AGAIN DCA TRADLO /STUFF LO ISZ WA /BUMP POINTER TO RECORD # TAD I WA /GET RECORD # RAL /MAKE IT A SECTOR # CLL BSW /MIDDLE ORDER BITS TO 6-11 DCA SECTMD /STUFF IT TAD I WA /GET IT AGAIN RAL /MAKE IT A SECT # DCA SECTLO /STUFF LEAST SIG SECT# CLA RAL /LINK HAD MSB OF SECT# TAD SECTHI /ADD IN THE OFFSET DCA SECTHI /PUT IT BACK ISZ WA /BUMP TO ERROR RETURN JMS LOC8 /WHERE ARE WE LOC8, .-. /STUFFED WITH OUR VERY OWN PC TAD LOC8 /GET OUR PC TAD COMPTR /ADJUST IT TO COMMAND TABLE DCA LOC8 /SAVE IT (ADD OF COMMAND TABLE) / /ARE WE RUNNING ON SBC8 OR MDC8? / CLA CLL CML RTR /AC=2000 LINK=0 R3L /ROTATE 3 LEFT IF RUNNING ON SBC8 RTR /AC=0 IF RUNNING ON SBC8 SZA CLA /ARE WE ON SBC8? JMP MDC /NO JMS TSTKBD /CHK FOR CONT C BEFORE GOING TO PANEL MEM CDF 00 /DATA FIELD TO HERE CLA CLL CML RTL /AC=2 TAD LOC8 /ADJUST POINTER FOR SBC PR0 /PANEL REQ 0 (GO TO PANEL MEM) JMP ERR /ERROR RETURN CLA CLL /CLEAN UP JMP GOOD /ALL OK / TABLE, 14 /LENGTH OF TABLE COMTYPE,0 /COMMAND TYPE RWCOM, .-. /10 IF READ 12 IF WRITE DRVUNT, UNIT /DRIVE UNIT # DCONTRL,0202 /CONTROL WORD FOR MDC8 SECTHI, .-. /SECTOR HI (6 BITS) SECTMD, .-. /SECTOR MID (6 BITS) SECTLO, .-. /SECTOR LO (6 BITS) SCTCNT, .-. /SECTOR COUNT (1 THRU 40) TRFLD, .-. /TRANSFER FIELD TRADHI, .-. /TRANSFER ADD MS 6 BITS TRADLO, .-. /TRANSFER ADD LS 6 BITS / OFFSET, OFST /SECTOR # OFFSET $ /