/ P?S/8 WINCHESTER HANDLER / P?S/8 NON-SYSTEM HANDLER FOR ANY (FIXED OR REMOVABLE) DISKS. / LAST EDIT: 02-DEC-89 15:00:00 CJL / COPYRIGHT (C) 1989 CHARLES LASNER ASSOCIATES. / THIS IS THE 128 WORD/BLOCK NON-SYSTEM HANDLER FOR HARD DISKS ATTACHED TO THE / MDC8. THE DISK STORAGE IS PARTITIONED INTO NAMED GROUPS OF 65,536 BLOCKS EACH / OF WHICH IS CONTROLLED BY TWO HANDLERS. HANDLER DETERMINATION IS CONTROLLED / BY A HANDLER SET BIT WHICH INDICATES WHICH HANDLER IS IN EFFECT (0=LOWER / HANDLER, 1=UPPER HANDLER). EACH HANDLER IS RESPONSIBLE FOR 32,768 BLOCKS / BROKEN DOWN INTO 8 UNITS OF 4,096 BLOCKS EACH, WHICH IS THE P?S/8 LIMIT FOR / MINIMUM GRANULARITY HANDLERS. THIS IS COMPATIBLE WITH NORMAL P?S/8 SYSTEM / HANDLER REQUIREMENTS. / NON-SYSTEM HANDLERS ARE NORMALLY CONFIGURED TO ADDRESS THE SAME DISK / AREA AS THE CORRESPONDING SYSTEM HANDLER, OR POSSIBLY A DIFFERENT DISK AREA / THAN THE ONE ASSIGNED TO THE RUNNING SYSTEM ITSELF (SUCH AS AN ALTERNATE / SYSTEM CONFIGURATION OR FOREIGN SYSTEM RESIDING ON THE SAME DEVICE) AS / NECESSARY. THE USE OF MULTIPLE NON-SYSTEM HANDLERS SUITABLY DEFINED ALLOWS / DATA EXCHANGE, BACKUP/RESTORE, ETC. BETWEEN VARIOUS SYSTEMS RESIDENT ON THE / SAME OR OTHER DEVICES. / SUPPORTED HARDWARE: / 1) CESI SCSI HOST ADAPTER (MINIMUM FIRMWARE REVISION 02). ONE ADAPTER IS / REQUIRED PER SYSTEM ATTACHED TO AS MANY AS EIGHT CONTROLLERS. / 2A) OMTI 20-C, 20-D, OR COMPATIBLE SCSI CONTROLLER (5X00 SERIES) WITH / PROPER DRIVES ATTACHED. / 2B) SYQUEST 555 REMOVABLE CARTRIDGE (SQ400 TYPE) WITH IMBEDDED SCSI / CONTROLLER. / OMTI 20-C, 20-D AND 5X00 (5100, 5200, 5300, 5400) SERIES CONTROLLERS EACH / SUPPORT UP TO TWO ST-506-COMPATIBLE DRIVES. / REQUIRES PDP-8/I PROCESSOR (OR BETTER). / THIS ASSEMBLY PRODUCES A NON-SYSTEM HANDLER WHICH CAN BE CONFIGURED FOR A / SPECIFIC HANDLER SET WITHIN ANY NAMED GROUP ON ANY PHYSICAL DRIVE ON ANY / CONTROLLER ADDRESS (ID). THE HANDLER WILL ADDRESS 32,768 LOGICAL BLOCKS OF / CONTIGUOUS STORAGE ON THE DEVICE AS EIGHT UNITS OF 4,096 BLOCKS EACH. / CONFIGURATION CONSIDERATIONS. / THIS ASSEMBLY SHOULD BE CONFIGURED FOR THE INTENDED HANDLER REQUIRED BY THE / USER'S SYSTEM. THE FOLLOWING ARE PARAMETERS FOR CONSIDERATION: / A) GROUP - THE HANDLER CREATED BY THIS ASSEMBLY ADDRESSES HALF OF A / DESIGNATED REGION OF 65,536 CONTIGUOUS BLOCKS WHICH IS KNOWN AS A GROUP. ANY / GROUP SUPPORTS 8 MWORDS (8,388,608 WORDS) OR 16 MBYTES (16,777,216 BYTES). / EACH HANDLER SUPPORTS 32,768 BLOCKS OF 128 WORDS AS EIGHT HANDLER UNITS OF / 4,096 BLOCKS PER UNIT. EACH UNIT THUS SUPPORTS .5 MWORDS (524,288 WORDS) OR 1 / MBYTES (1,048,576 BYTES). TOTAL HANDLER SUPPORT IS 4 MWORDS (4,194,304 WORDS) / OR 8 MBYTES (8,388,608 BYTES). THIS IS THE UPPER LIMIT OF ADDRESSABILITY OF / ANY INDIVIDUAL P?S/8 HANDLER COMPATIBLE WITH THE P?S/8 SYSTEM HANDLERS. / TWO HANDLERS ARE USED TO ADDRESS THE STORAGE GROUP. THE SPECIFIC / GROUP CHOSEN WILL BE IDENTIFIED BY A CHARACTERISTIC LETTER ("A"-"Z") WHICH / WILL DETERMINE WHICH 8 MWORDS IS ADDRESSED BY THE GROUP OUT OF 208 MWORDS / (218,103,808 WORDS) OR 416 MBYTES (436,207,616 BYTES). (THIS METHOD PREVENTS / ACCESS TO THE ADDITIONAL SPACE THEORETICALLY AVAILABLE ON THE DEVICE WHICH IS / HARDWARE-LIMITED TO 256 MWORDS (268,435,456 WORDS) OR 512 MBYTES (536,870,912 / BYTES). THIS HANDLER MUST BE RE-WRITTEN TO ADDRESS THIS STORAGE IF REQUIRED.) / B) HSET - THE HANDLER SET MUST BE INDICATED AS EITHER UPPER (HSET= 1) OR / LOWER (HSET= 0). THE HSET BIT AND LOGICAL UNIT BITS WILL BE USED TOGETHER TO / DETERMINE A PORTION OF THE HANDLER NAME (SEE BELOW). / C) IDNUM - EVERY CONTROLLER WITHIN THIS SYSTEM (KNOWN AS SASI OR SCSI) / REQUIRES AN ID NUMBER OR UNIQUE TARGET DEVICE ADDRESS. THE HANDLER MUST BE / ASSEMBLED FOR A KNOWN ID NUMBER WHICH WILL PARTIALLY DETERMINE THE HANDLER / NAME. UP TO EIGHT ID NUMBERS (0-7) ARE ALLOWED. / D) OFFSET - THE HANDLER CAN BE ASSEMBLED WITH NO OFFSET, I.E., IT WOULD / ADDRESS THE ABSOLUTE BEGINNING OF THE DEVICE (POSSIBLY BIASED BY AN INTEGER / MULTIPLE OF A POWER OF TWO BLOCKS INTO THE DEVICE) AND IS MEANT TO HAVE / INDEPENDENT DOMAIN OVER THE DEVICE. THIS OPTION EXISTS FOR COMPATIBILITY WITH / VARIOUS OBSOLETE MECHANISMS WHICH ARE NOT RECOMMENDED FOR CURRENT / APPLICATIONS. / THE PROPER MANAGEMENT OF DISK DEVICES SUCH AS ARE USUALLY ATTACHED TO / THE MDC8 REQUIRES THAT A DEVICE MAINTAINENCE AREA BE RESERVED ON THE DEVICE / FOR DEFECT MANAGEMENT, ETC. THE MOST COMPREHENSIVE OF THESE IS THE MENU-8 / UTILITY SYSTEM WHICH ALLOWS SUBORDINATE SYSTEMS (SUCH AS P?S/8) TO BE LOADED / INDIRECTLY. PROPER ASSEMBLY OF THE HANDLER FOR THIS ENVIRONMENT REQUIRES / SETTING THE OFFSET PARAMETER. ALL LOGICAL BLOCKS ARE CONVERTED TO PHYSICAL / BLOCKS BY ADDING A SMALL FIXED OFFSET (WHICH PLACES THE AFFECTED BLOCKS PAST A / PROTECTED AREA WHERE THE MENU SYSTEM RESIDES). / E) LOGUNIT - VARIOUS CONTROLLERS ALLOW LOGICAL UNIT VALUES TO BE ASSERTED / FROM 0 THROUGH 7. CERTAIN CONTROLLERS SUPPORT THE UNIT FIELD WITHIN THE I/O / COMMAND, BUT RESTRICT USEFUL ACCESS TO LOGICAL UNIT 0 ONLY. (ON THESE / CONTROLLERS, OTHER LOGICAL UNIT VALUES RETURN "NOT READY", "NOT SELECTED" OR / OTHER SUCH ERRORS.) / THE SUPPORTED OMTI CONTROLLERS ALLOW FOUR LOGICAL UNITS (0-3), AS THE / HIGH-ORDER LOGICAL UNIT BIT IS IGNORED. CONTROLLER CONFIGURATION RULES EITHER / RESTRICT OR RECOMMEND (FOR COMPATIBILITY WITH MORE RESTRICTIVE CONTROLLERS) / THE USE OF LOGICAL UNITS 0 AND 1 FOR WINCHESTER DISK DRIVES. OTHER UNITS MAY / BE ASSIGNED TO OTHER DEVICES SUCH AS DISKETTE DRIVES, ETC.; THE CONTROLLERS / GENERALLY SUPPORT ONLY TWO WINCHESTER DRIVES MAXIMUM. THE OMTI 20 SERIES / CONTROLLERS RESTRICT THE USE OF LOGICAL UNITS 0 AND 1 TO WINCHESTERS ONLY, AND / SPECIFY LOGICAL UNITS 2 AND 3 FOR DISKETTES. / THE SUPPORTED SYQUEST 555 REMOVABLE CARTRIDGE DRIVES (WITH PROPERLY / FORMATTED SQ400 CARTRIDGES) MUST BE ADDRESSED AS LOGICAL UNIT ZERO ONLY, AS / THE SCSI CONTROLLER IS "IMBEDDED" IN THE HARDWARE OF THE PHYSICAL DRIVE, I.E., / IT IS AN INTEGRAL PART OF THE DRIVE ITSELF. THE SCSI ID NUMBER MAY BE / STRAPPED FOR ANY NON-CONFLICTING VALUE FROM 0 THROUGH 7 VIA JUMPERS ON THE / OUTSIDE OF THE DRIVE (SEE SYQUEST DOCUMENTATION ELSEWHERE). / THE LOGICAL UNIT PARAMETER, ALONG WITH THE HANDLER SET PARAMETER WILL / PARTIALLY DETERMINE THE HANDLER NAME (SEE BELOW). / DEVICE NAMING CONSIDERATIONS. / DEVICE GROUP AND HANDLER SET. / ON ANY ONE DRIVE, THE STORAGE IS BROKEN DOWN INTO A COLLECTION OF GROUPS OF / CONTIGUOUS LOGICAL BLOCKS. ANY INDIVIDUAL GROUP CONSISTS OF 65,536 BLOCKS / CONTROLLED BY A SET OF TWO HANDLERS EACH HAVING DOMAIN OVER 32,768 BLOCKS / ADDRESSED AS 8 UNITS OF 4,096 BLOCKS. THE "GROUP" PARAMETER DETERMINES WHICH / 65,536 RECORD GROUP IS SELECTED. THE "HSET" PARAMETER DETERMINES WHICH 32,768 / BLOCK REGION IS ADDRESSES. ASSUMING DRIVE ZERO ON CONTROLLER ID 0, THE DEVICE / NAMES ARE DETERMINED AS FOLLOWS: / GROUP "A", (LOWER LIMIT) / DEVICE NAME LUNIT HSET HANDLER STARTING BLOCK DISK BLOCKS / WAA0: 0 0 0 0000000-0007777 / WAA1: 0 0 4,096 0010000-0017777 / WAA2: 0 0 8,192 0020000-0027777 / WAA3: 0 0 12,288 0030000-0037777 / WAA4: 0 0 16,384 0040000-0047777 / WAA5: 0 0 20,480 0050000-0057777 / WAA6: 0 0 24,576 0060000-0067777 / WAA7: 0 0 28,672 0070000-0077777 / WAB0: 0 1 32,768 0100000-0107777 / WAB1: 0 1 36,864 0110000-0117777 / WAB2: 0 1 40,960 0120000-0127777 / WAB3: 0 1 45,056 0130000-0137777 / WAB4: 0 1 49,152 0140000-0147777 / WAB5: 0 1 53,248 0150000-0157777 / WAB6: 0 1 57,344 0160000-0167777 / WAB7: 0 1 61,440 0170000-0177777 / GROUP "Z", (UPPER LIMIT) / DEVICE NAME LUNIT HSET HANDLER STARTING BLOCK DISK BLOCKS / WZA0: 0 0 1,638,400 6200000-6207777 / WZA1: 0 0 1,642,496 6210000-6217777 / WZA2: 0 0 1,646,592 6220000-6227777 / WZA3: 0 0 1,650,688 6230000-6237777 / WZA4: 0 0 1,654,784 6240000-6247777 / WZA5: 0 0 1,658,880 6250000-6257777 / WZA6: 0 0 1,662,976 6260000-6267777 / WZA7: 0 0 1,667,072 6270000-6277777 / WZB0: 0 1 1,671,168 6300000-6307777 / WZB1: 0 1 1,675,264 6310000-6317777 / WZB2: 0 1 1,679,360 6320000-6327777 / WZB3: 0 1 1,683,456 6330000-6337777 / WZB4: 0 1 1,687,552 6340000-6347777 / WZB5: 0 1 1,691,648 6350000-6357777 / WZB6: 0 1 1,695,744 6360000-6367777 / WZB7: 0 1 1,699,840 6370000-6377777 / LOGICAL UNIT / ASSUMING THE LOWEST GROUP ON THE DEVICE CONNECTED TO CONTROLLER ID 0, THE / FOLLOWING HANDLER NAMES APPLY: / DEVICE NAME LUNIT HSET HANDLER STARTING BLOCK DISK BLOCKS / WAA0: 0 0 0 0000000-0007777 / WAB0: 0 1 32,768 0100000-0107777 / WAC0: 1 0 0 0000000-0007777 / WAD0: 1 1 32,768 0100000-0107777 / WAE0: 2 0 0 0000000-0007777 / WAF0: 2 1 32,768 0100000-0107777 / WAG0: 3 0 0 0000000-0007777 / WAH0: 3 1 32,768 0100000-0107777 / WAI0: 4 0 0 0000000-0007777 / WAJ0: 4 1 32,768 0100000-0107777 / WAK0: 5 0 0 0000000-0007777 / WAL0: 5 1 32,768 0100000-0107777 / WAM0: 6 0 0 0000000-0007777 / WAN0: 6 1 32,768 0100000-0107777 / WAO0: 7 0 0 0000000-0007777 / WAP0: 7 1 32,768 0100000-0107777 / DEVICE ID. / ASSUMING THE LOWEST GROUP ON THE DEVICE, THE FOLLOWING HANDLER NAMES APPLY / (FOR LOGICAL UNITS 0 AND 1): / ID 0 / DEVICE NAME LUNIT HSET HANDLER STARTING BLOCK DISK BLOCKS / WAA0: 0 0 0 0000000-0007777 / WAB0: 0 1 32,768 0100000-0107777 / WAC0: 1 0 0 0000000-0007777 / WAD0: 1 1 32,768 0100000-0107777 / ID 1 / DEVICE NAME LUNIT HSET HANDLER STARTING BLOCK DISK BLOCKS / DAA0: 0 0 0 0000000-0007777 / DAB0: 0 1 32,768 0100000-0107777 / DAC0: 1 0 0 0000000-0007777 / DAD0: 1 1 32,768 0100000-0107777 / ID 2 / DEVICE NAME LUNIT HSET HANDLER STARTING BLOCK DISK BLOCKS / EAA0: 0 0 0 0000000-0007777 / EAB0: 0 1 32,768 0100000-0107777 / EAC0: 1 0 0 0000000-0007777 / EAD0: 1 1 32,768 0100000-0107777 / ID 3 / DEVICE NAME LUNIT HSET HANDLER STARTING BLOCK DISK BLOCKS / FAA0: 0 0 0 0000000-0007777 / FAB0: 0 1 32,768 0100000-0107777 / FAG0: 1 0 0 0000000-0007777 / FAH0: 1 1 32,768 0100000-0107777 / ID 4 / DEVICE NAME LUNIT HSET HANDLER STARTING BLOCK DISK BLOCKS / GAA0: 0 0 0 0000000-0007777 / GAB0: 0 1 32,768 0100000-0107777 / GAC0: 1 0 0 0000000-0007777 / GAD0: 1 1 32,768 0100000-0107777 / ID 5 / DEVICE NAME LUNIT HSET HANDLER STARTING BLOCK DISK BLOCKS / HAA0: 0 0 0 0000000-0007777 / HAB0: 0 1 32,768 0100000-0107777 / HAC0: 1 0 0 0000000-0007777 / HAD0: 1 1 32,768 0100000-0107777 / ID 6 / DEVICE NAME LUNIT HSET HANDLER STARTING BLOCK DISK BLOCKS / IAA0: 0 0 0 0000000-0007777 / IAB0: 0 1 32,768 0100000-0107777 / IAC0: 1 0 0 0000000-0007777 / IAD0: 1 1 32,768 0100000-0107777 / ID 7 / DEVICE NAME LUNIT HSET HANDLER STARTING BLOCK DISK BLOCKS / JAA0: 0 0 0 0000000-0007777 / JAB0: 0 1 32,768 0100000-0107777 / JAC0: 1 0 0 0000000-0007777 / JAD0: 1 1 32,768 0100000-0107777 / CALLING SEQUENCE. / THE CALLING SEQUENCE FOR THE NON-SYSTEM HANDLER IS THE STANDARD P?S/8 CALLING / SEQUENCE FOR 128 WORDS/BLOCK DEVICES. THE HANDLER IS RESPONSIBLE FOR ALL / PARAMETERS BEYOND THE USER-SUPPLIED ARGUMENTS: / CDF MYFLD /SET CALLER'S DATA FIELD / CIF HNDFLD /SET HANDLER'S INSTRUCTION FIELD / JMS I (WINHND) /CALL THE HANDLER / PARAM /PARAMETER POINTER / ERRORRETURN /RETURNS HERE WITH STATUS IN AC IF BAD / GOODRETURN /RETURNS HERE WITH CLEAR AC IF I/O WAS OK / THE PARAMETER LIST MUST BE IN THE SAME FIELD AS THE CALLER: /PARAM, ADDRESS /12-BIT I/O TRANSFER ADDRESS / FUNCTION /FUNCTION WORD / BLOCK /STARTING BLOCK FOR TRANSFER / FUNCTION WORD BREAKDOWN: / BIT[0]: READ IF 0, WRITE IF 1 / BITS[1-5]: PAGE COUNT, 40 IF 0 / BITS[6-8] TRANSFER FIELD / BITS[9-11] LOGICAL UNIT / THE CALLING PROGRAM DETERMINES THE DISPOSITION OF I/O ERRORS. DETAILED ERROR / REPORTS CAN BE CONSTRUCTED BY PROGRAMS AWARE OF THE PARTICULARS OF THE MDC8 / STATUS REGISTER. / ASSEMBLY INSTRUCTIONS: / CHANGE "DEVCODE" TO PROPER DEVICE CODE AS NECESSARY (DEFAULT IS 70). / CHANGE "GROUP" TO "A&37 THROUGH "Z&37 AS NECESSARY TO ADDRESS THE PROPER GROUP / OF HANDLERS (DEFAULT IS "A&37). / CHANGE "IDNUM" TO 0 THROUGH 7 AS NECESSARY TO ADDRESS THE PROPER SCSI PORT / ADDRESS (DEFAULT IS 0). / CHANGE "HSET" TO 0 OR 1 AS NECESSARY TO ADDRESS THE PROPER HALF OF THE / SELECTED GROUP WITH THE PROPER HANDLER SET (DEFAULT IS 0). / CHANGE "LOGUNIT" TO 0 THROUGH 7 AS NECESSARY TO ADDRESS THE PROPER LOGICAL / UNIT (DEFAULT IS 0). / CHANGE "OFFSET" TO 0 OR 1 AS NECESSARY (DEFAULT IS 1; OFFSET=1 DEFINES A / RESERVED BOOT AREA ON THE DISK FOR MENU-8, ETC.). / MAY BE ASSEMBLED WITH '/J' (OS/8 PAL8 '/F') SWITCH SET. PAGE /START ON A NEW PAGE HERE= . /WHERE WE ARE NOW / DEFINITIONS. DMA= 4000 /DMA INDICATOR IFNDEF GROUP /HANDLER GROUP IFNDEF HSET /HANDLER SET IFNDEF IDNUM /SCSI ID IFNDEF LOGUNIT /LOGICAL UNIT NL4000= CLA CLL CML RAR /LOAD AC WITH 4000 IFNDEF OFFSET /DEVICE OFFSET (FOR MENU-8) REVISIO="A&77 /REVISION OF HANDLER XLIST OFF IFNDEF OFF IFNDEF ON IFNDEF WINHND XLIST ON / MDC8 IOT DEFINITIONS. IFNDEF DEVCODE /USES 670X BY DEFAULT DSEI= DEVCODE^10+6000 /INTERRUPT ENABLE/DISABLE PER AC[11] DSSF= DEVCODE^10+6001 /SKIP ON DONE FLAG DSCF= DEVCODE^10+6002 /CLEAR DONE FLAG DSHI= DEVCODE^10+6003 /LOAD HIGH-ORDER COMMAND ADDRESS DSGO= DEVCODE^10+6004 /LOAD LOW-ORDER COMMAND AND GO / = DEVCODE^10+6005 /UNUSED DSRS= DEVCODE^10+6006 /READ STATUS DSIM= DEVCODE^10+6007 /INTERFACE MAINTENANCE INSTRUCTION / DEVICE NAME DEFINITIONS. IFZERO IDNUM < CH1= "W&177 /FIRST DEVICE LETTER > IFNZRO IDNUM < CH1= "C+IDNUM&177 /FIRST DEVICE LETTER > CH2= GROUP+100 /SECOND DEVICE LETTER CH3= LOGUNIT^2+HSET+"A&177 /THIRD DEVICE LETTER / DEVICE HANDLER HEADER BLOCK. *CH1; *CH2; *CH3 /GROUP NAME *-1 /GROUP COUNT *CH1; *CH2; *CH3 /DEVICE NAME *WINHND&177 /ENTRY POINT *0000-1 /HIGHEST BLOCK *REVISION /REVISION OF HANDLER *HERE /RESTORE ORIGIN / ENTRY POINT FOR HANDLER. WINHND, .-. /ACTUAL HANDLER ENTRY POINT CLA /CLEAN UP TAD I WINHND /GET ARGUMENT POINTER DCA WINEXIT /STASH IT TAD I WINEXIT /GET THE TRANSFER ADDRESS DCA TRADDR /STASH IT ISZ WINEXIT /BUMP TO FUNCTION WORD TAD I WINEXIT /GET FUNCTION WORD RTR;RAR /MOVE DOWN AND AND (7) /ISOLATE FIELD BITS DCA TRFLD /STORE (BANK AND) FIELD TAD I WINEXIT /GET FUNCTION WORD AGAIN AND (3700) /ISOLATE PAGE BITS SNA /SKIP IF ANY SET NL4000 /ELSE USE MAXIMUM AMOUNT RTR;RTR;RTR /MOVE PAGE COUNT DOWN DCA SCTCNT /STASH SECTOR COUNT TAD I WINEXIT /GET FUNCTION WORD AGAIN AND (7) /ISOLATE UNIT BITS DCA WAIT /SAVE FOR LATER NL4000 /SET READ/WRITE MASK AND I WINEXIT /GET READ/WRITE BIT CLL IAC RTL;RAL /10 IF READING, 12 IF WRITING DCA RWCOM /STASH COMMAND ISZ WINEXIT /BUMP TO BLOCK NUMBER TAD I WINEXIT /GET THE BLOCK NUMBER TAD WOFF /ADD ON OFFSET DCA SECTLO /STORE AS LOW-ORDER ADDRESS RAL /GET POTENTIAL CARRY OUT TAD WAIT /ADD ON UNIT BITS TAD CONFIG /ADD ON GROUP AND HSET BITS DCA WAIT /SAVE FOR NOW TAD SECTLO /GET LOW-ORDER ADDRESS BACK AND (7400) /JUST HIGHEST 4 BITS CLL RAL /MOVE UP TAD WAIT /NOW HAVE HIGHEST 13 BITS OF ADDRESS RTL;RTL /MOVE DOWN DCA SECTMD /STORE IN MIDDLE ADDRESS TAD SECTMD /GET IT BACK AND (7400) /ISOLATE GROUP BITS RTL;RTL;RAL /MOVE DOWN TAD UNIT /ADD ON UNIT BITS DCA SECTHI /STORE AS HIGH-ORDER ADDRESS RDF /GET CALLING FIELD TAD (CIF) /MAKE IT CIF RETURN FIELD DCA WINEXIT /STORE IN-LINE ISZ WINHND /BUMP PAST ARGUMENT POINTER JMS LOC8 /FIND OUT WHERE WE ARE LOADED LOC8, .-. /WILL BE OUR OWN PC DSRS /GET STATUS SPA CLA /SKIP IF CONTROLLER IS IDLE JMP .-2 /ELSE WE MIGHT AS WELL WAIT RIF /GET OUR FIELD CLL RTR;RAR /MOVE DOWN (BANK AND) FIELD DSHI /SEND HIGH-ORDER COMMAND ADDRESS DSRS /GET STATUS SMA CLA /SKIP IF BUSY JMP .-2 /ELSE KEEP WAITING DSCF /CLEAR DONE FLAG NOW TAD LOC8 /GET OUR PC TAD (TABLE-LOC8) /ADJUST TO COMMAND TABLE DSGO /GO START IT UP JMS WAIT /WAIT FOR COMMAND TO TAKE DSIM /FINISH THE COMMAND JMS WAIT /WAIT FOR COMMAND TO COMPLETE ISZ WINHND /BUMP TO GOOD RETURN WINEXIT,.-. /WILL BE CIF RETURN FIELD JMP I WINHND /RETURN TO CALLER WAIT, .-. /WAIT ROUTINE DSSF /FLAG UP? JMP .-1 /NO, WAIT FOR IT DSCF /YES, CLEAR IT DSRS /GET STATUS NOW CLL RAL /REMOVE BUSY BIT SNA CLA /SKIP IF ANY ERRORS JMP I WAIT /ELSE RETURN DSRS /GET STATUS AGAIN JMP WINEXIT /TAKE ERROR RETURN THERE CONFIG, GROUP-1^2+HSET^10 /GROUP AND HANDLER SET WORD UNIT, LOGUNIT^40 /LOGICAL UNIT WORD WOFF, OFFSET^40 /OFFSET WORD / COMMAND TABLE. TABLE, IDNUM^400+6+DMA /TABLE LENGTH PLUS DMA INDICATOR AND ID RWCOM, .-.&377 /0010 IF READING, 0012 IF WRITING SECTHI, .-.&377 /UNIT BITS AND HIGH-ORDER SECTOR ADDRESS SECTMD, .-.&377 /MIDDLE SECTOR ADDRESS SECTLO, .-.&377 /LOW-ORDER SECTOR ADDRESS SCTCNT, .-.&377 /SECTOR COUNTER (1-40) CONTRL, 0&377 /CONTROL WORD TRFLD, .-.&377 /BANK (0000) AND TRANSFER FIELD (0-7) TRADDR, .-. /TRANSFER ADDRESS PAGE $ /THAT'S ALL FOLK!