/ WINCHESTER NON-SYSTEM HANDLER / NON-SYSTEM HANDLER FOR ANY (FIXED OR REMOVABLE) WINCHESTER DISKS. / LAST EDIT: 28-NOV-1989 13:00:00 CJL / COPYRIGHT (C) 1985-1989 CHARLES LASNER ASSOCIATES. / SUPPORTED HARDWARE: / 1) CESI MDC8 HOST ADAPTER (MINIMUM FIRMWARE REVISION 02). / 2A) OMTI 20-C, 20-D, OR COMPATIBLE (5X00) WITH PROPER DRIVE(S). / 2B) SYQUEST 555 REMOVABLE DRIVE WITH IMBEDDED 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/E PROCESSOR (OR BETTER). / THIS ASSEMBLY PRODUCES A SET OF CO-RESIDENT HANDLERS WHICH CAN BE CONFIGURED / FOR A VARIETY OF DISK GROUPS ON ANY ONE PHYSICAL DRIVE ON ANY ONE CONTROLLER / ADDRESS (ID). ALL HANDLERS MUST ADDRESS DESIGNATED PORTIONS OF A CONTIGUOUS / GROUP OF LOGICAL BLOCKS ON THE SAME PHYSICAL DRIVE. MULTIPLE ENTRY POINT / OPTIONS EXIST TO PREVENT SYSTEM ANOMALY IN THE CASE WHERE MULTIPLE ASSEMBLY / FILES ARE REQUIRED TO HANDLE NON-CONTIGUOUS AREAS (THIS IS A RESTRICTION OF / OS/8). THE CORRESPONDING SYSTEM HANDLER CAN BE COMPATIBLY CONFIGURED TO / ADDRESS THE LOWEST MEMBER OF THE GROUP AND OPTIONALLY THE TWO ADJACENT REGIONS / IF DESIRED (SEE THE SYSTEM HANDLER ELSEWHERE). / CONFIGURATION CONSIDERATIONS. / THIS ASSEMBLY SHOULD BE CONFIGURED FOR THE INTENDED SET OF DEVICE HANDLERS / REQUIRED ON THE USER'S SYSTEM. THE FOLLOWING ARE THE PARAMETERS FOR / CONSIDERATION: / A) GROUP - ASSEMBLING THE NON-SYSTEM HANDLER PRODUCES A / DESIGNATED GROUP OF EIGHT HANDLERS WHICH ADDRESSES A CONTIGUOUS REGION OF / 65,536 LOGICAL DISK BLOCKS. EACH OF THESE HANDLERS ADDRESSES 8,192 DISK / BLOCKS. (IN TERMS OF OS/8 LOGICAL RECORDS, THIS COMPRISES 4,096 RECORDS SINCE / EACH OS/8 RECORD OCCUPIES TWO PHYSICAL BLOCKS). THIS IS THE UPPER LIMIT OF / ADDRESSABILITY FOR ANY INDIVIDUAL OS/8 HANDLER THUS EACH HANDLER SUPPORTS 1 / MWORDS (1,048,576 WORDS) OR 2 MBYTES (2,097,152 WORDS). AN ENTIRE GROUP OF / HANDLERS SUPPORTS 8 MWORDS (8,388,608 WORDS) OR 16 MBYTES (16,777,216 WORDS). / 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 (AND THE CORRESPONDING NON-SYSTEM / HANDLER) MUST BE REWRITTEN TO ADDRESS THIS STORAGE IF REQUIRED.) / B) 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 IN TURN WILL PARTIALLY DETERMINE THE / GROUP NAME OF THE HANDLER (AND ALSO THE HANDLER GROUP OF THE GROUP OF HANDLERS / WHICH IS THE NAME USED ONLY WITHIN OS/8 BUILD FOR IDENTIFYING THE GROUP OF / HANDLERS WHEN THE SYSTEM IS BEING CONFIGURED). UP TO EIGHT ID NUMBERS (0-7) / ARE ALLOWED. ID 0 HAS CERTAIN ADDITIONAL CONSIDERATIONS (SEE BELOW). / C) 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 RECOMMENDENDED 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 OS/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). / D) LOGUNIT - AS A SOFTWARE RESTRICTION (WHICH GENERALLY FOLLOWS / HARDWARE RESTRICTIONS), ONLY ID 0 IS ALLOWED TO CONSIDER LOGICAL UNITS WITHIN / THE ID. MOST SCSI DEVICES ALLOW LOGICAL UNIT ZERO ONLY (ACTUALLY RETURN ERROR / CODES WHEN ATTEMPTING TO ADDRESS UNITS OTHER THAN ZERO), HOWEVER THE OMTI / CONTROLLERS ALLOW UP TO FOUR LOGICAL UNITS PER CONTROLLER. THIS HANDLER / ASSUMES THE RESTRICTION THAT THE OMTI CONTROLLER (IF PRESENT) IS ID 0 AND THE / WINCHESTER DISK DRIVES ARE STRAPPED AS EITHER 0 OR 1 (OR BOTH) ALLOWING OTHER / LOGICAL UNITS (2 AND 3) TO BE USED FOR OTHER PURPOSES (DISKETTES, ETC.). OMTI / CONTROLLERS ALLOW A MAXIMUM OF TWO WINCHESTER DRIVES PER CONTROLLER AND THE / MANUFACTURER RECOMMENDS STRAPPING THE DRIVES AS 0 OR 1; OTHER LOGICAL UNITS / MAY OR MAY NOT EXIST DEPENDING ON THE CONTROLLER MODEL, ETC. THE HARDWARE OF / THE MDC8 ALSO FOLLOWS THIS RESTRICTION AS THE LOGICAL UNIT IS PART OF THE / SIMPLEST BOOTSTRAP PROVIDED BY THE MDC8, WHICH IS IN TURN RESTRICTED TO ID 0. / ASSUMING ID 0, THE LOGICAL UNIT PARAMETER PARTIALLY DETERMINES THE GROUP NAME / OF THE HANDLER (AND ALSO THE HANDLER GROUP FOR OS/8 BUILD PURPOSES). IF THE / ASSEMBLY IS CONFIGURED FOR IDS OTHER THAN 0, THE LOGUNIT PARAMETER IS IGNORED. / USE OF NON-SYSTEM HANDLERS CAN RESOLVE ALL ANOMALIES REGARDING RECONFIGURED / DRIVES, ETC., AS DISCUSSED IN THE SYSTEM HANDLER SOURCE FILE. (SEE THE SYSTEM / HANDLER FOR FURTHER INFORMATION REGARDING HANDLER ANOMALY.) THE NON-SYSTEM / HANDLERS CREATED BY THIS ASSEMBLY USE THE IDENTICAL NAMING CONVENTION TO THAT / DESIGNATED FOR THE CORRESPONDING SYSTEM HANDLER WITHOUT ANOMALY. WHEN / CHOOSING A HANDLER, THE FOLLOWING TRADEOFF ISSUES SHOULD BE CONSIDERED: / 1) HANDLER NAME ANOMALY IS POSSIBLE IN RECONFIGURABLE / SYSTEMS. ALTHOUGH NOT A CONSIDERATION FOR CERTAIN / SYSTEMS, THE USE OF THE NON-SYSTEM HANDLERS MAY BE / INDICATED TO PREVENT ANOMALY. / 2) NON-SYSTEM HANDLERS SUPPORT <^C> CHECKING; DUE TO / SPACE LIMITATIONS, THE HANDLERS CO-RESIDENT WITH THE / SYSTEM HANDLER CANNOT CHECK FOR <^C> (IN PART BECAUSE / THE SYSTEM HANDLER MUST IGNORE <^C> TO PREVENT / LOOPING). / 3) NON-SYSTEM HANDLERS CANNOT SUPPORT BATCH FILES. ONLY / THE SYSTEM AND OTHER CO-RESIDENT HANDLERS SUPPORT / BATCH FILES. SINCE DEVICE "DSK:" IS USUALLY CHOSEN TO / BE A HANDLER OTHER THAN "SYS:" (FOR EXAMPLE "SYS:" IS / "WNA0:" AND "DSK:" IS "WNA1:"), THEN THE NORMAL / DEFAULT DEVICE CANNOT BE USED (REQUIRING EITHER / LOGICAL ASSIGNMENT OR COMPLETE FILE DESCRIPTION / INCLUDING DEVICE) FOR BATCH FILES UNLESS THE / CO-RESIDENT HANDLERS ARE CHOSEN. / DEVICE NAMING CONSIDERATIONS. / DEVICE GROUP. / 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 / (32,768 OS/8 RECORDS) ADDRESSED BY EIGHT CO-RESIDENT HANDLERS EACH HAVING / DOMAIN OVER 8,192 BLOCKS OR 4,096 OS/8 RECORDS (EACH 4,096 RECORD REGION IS 1 / MWORD). THE NON-SYSTEM HANDLERS ADDRESS ALL OF THE EIGHT REGIONS PER HANDLER / GROUP ALLOWING THE USER TO CHOOSE ANY SUBSET OF THE AVAILABLE STORAGE. THE / "GROUP" PARAMETER DETERMINES WHICH 32,768 RECORD GROUP IS SELECTED. ASSUMING / DRIVE ZERO ON CONTROLLER ID 0, THE DEVICE NAMES ARE DETERMINED AS FOLLOWS: / GROUP "A" (LOWER LIMIT) / DEVICE NAME GROUP STARTING BLOCK REGION OS/8 RECORDS / WNA0: 0 ZERO 0000000-0007777 / WNA1: 65,536 ONE 0010000-0017777 / WNA2: 131,072 TWO 0020000-0027777 / WNA3: 196,608 THREE 0030000-0037777 / WNA4: 262,144 FOUR 0040000-0047777 / WNA5: 327,680 FIVE 0050000-0057777 / WNA6: 393,216 SIX 0060000-0067777 / WNA7: 458,752 SEVEN 0070000-0077777 / GROUP "Z" (UPPER LIMIT) / DEVICE NAME GROUP STARTING BLOCK REGION OS/8 RECORDS / WNZ0: 13,107,200 ZERO 3100000-3107777 / WNZ1: 13,172,736 ONE 3110000-3117777 / WNZ2: 13,238,272 TWO 3120000-3127777 / WNZ3: 13,303,808 THREE 3130000-3137777 / WNZ4: 13,369,344 FOUR 3140000-3147777 / WNZ5: 13,434,880 FIVE 3150000-3157777 / WNZ6: 13,500,416 SIX 3160000-3167777 / WNZ7: 13,565,952 SEVEN 3170000-3177777 / DEVICE ID AND LOGICAL UNIT. / ASSUMING THE LOWEST GROUP ON THE DEVICE, THE FOLLOWING HANDLER NAMES APPLY: / ID 0, LOGICAL UNIT 0 / DEVICE NAME GROUP STARTING BLOCK REGION OS/8 RECORDS / WNA0: 0 ZERO 0000000-0007777 / WNA1: 65,536 ONE 0010000-0017777 / WNA2: 131,072 TWO 0020000-0027777 / WNA3: 196,608 THREE 0030000-0037777 / WNA4: 262,144 FOUR 0040000-0047777 / WNA5: 327,680 FIVE 0050000-0057777 / WNA6: 393,216 SIX 0060000-0067777 / WNA7: 458,752 SEVEN 0070000-0077777 / ID 0, LOGICAL UNIT 1 / DEVICE NAME GROUP STARTING BLOCK REGION OS/8 RECORDS / WUA0: 0 ZERO 0000000-0007777 / WUA1: 65,536 ONE 0010000-0017777 / WUA2: 131,072 TWO 0020000-0027777 / WUA3: 196,608 THREE 0030000-0037777 / WUA4: 262,144 FOUR 0040000-0047777 / WUA5: 327,680 FIVE 0050000-0057777 / WUA6: 393,216 SIX 0060000-0067777 / WUA7: 458,752 SEVEN 0070000-0077777 / ID 1 / DEVICE NAME GROUP STARTING BLOCK REGION OS/8 RECORDS / RDA0: 0 ZERO 0000000-0007777 / RDA1: 65,536 ONE 0010000-0017777 / RDA2: 131,072 TWO 0020000-0027777 / RDA3: 196,608 THREE 0030000-0037777 / RDA4: 262,144 FOUR 0040000-0047777 / RDA5: 327,680 FIVE 0050000-0057777 / RDA6: 393,216 SIX 0060000-0067777 / RDA7: 458,752 SEVEN 0070000-0077777 / ID 2 / DEVICE NAME GROUP STARTING BLOCK REGION OS/8 RECORDS / REA0: 0 ZERO 0000000-0007777 / REA1: 65,536 ONE 0010000-0017777 / REA2: 131,072 TWO 0020000-0027777 / REA3: 196,608 THREE 0030000-0037777 / REA4: 262,144 FOUR 0040000-0047777 / REA5: 327,680 FIVE 0050000-0057777 / REA6: 393,216 SIX 0060000-0067777 / REA7: 458,752 SEVEN 0070000-0077777 / ID 3 / DEVICE NAME GROUP STARTING BLOCK REGION OS/8 RECORDS / RFA0: 0 ZERO 0000000-0007777 / RFA1: 65,536 ONE 0010000-0017777 / RFA2: 131,072 TWO 0020000-0027777 / RFA3: 196,608 THREE 0030000-0037777 / RFA4: 262,144 FOUR 0040000-0047777 / RFA5: 327,680 FIVE 0050000-0057777 / RFA6: 393,216 SIX 0060000-0067777 / RFA7: 458,752 SEVEN 0070000-0077777 / ID 4 / DEVICE NAME GROUP STARTING BLOCK REGION OS/8 RECORDS / RGA0: 0 ZERO 0000000-0007777 / RGA1: 65,536 ONE 0010000-0017777 / RGA2: 131,072 TWO 0020000-0027777 / RGA3: 196,608 THREE 0030000-0037777 / RGA4: 262,144 FOUR 0040000-0047777 / RGA5: 327,680 FIVE 0050000-0057777 / RGA6: 393,216 SIX 0060000-0067777 / RGA7: 458,752 SEVEN 0070000-0077777 / ID 5 / DEVICE NAME GROUP STARTING BLOCK REGION OS/8 RECORDS / RHA0: 0 ZERO 0000000-0007777 / RHA1: 65,536 ONE 0010000-0017777 / RHA2: 131,072 TWO 0020000-0027777 / RHA3: 196,608 THREE 0030000-0037777 / RHA4: 262,144 FOUR 0040000-0047777 / RHA5: 327,680 FIVE 0050000-0057777 / RHA6: 393,216 SIX 0060000-0067777 / RHA7: 458,752 SEVEN 0070000-0077777 / ID 6 / DEVICE NAME GROUP STARTING BLOCK REGION OS/8 RECORDS / RIA0: 0 ZERO 0000000-0007777 / RIA1: 65,536 ONE 0010000-0017777 / RIA2: 131,072 TWO 0020000-0027777 / RIA3: 196,608 THREE 0030000-0037777 / RIA4: 262,144 FOUR 0040000-0047777 / RIA5: 327,680 FIVE 0050000-0057777 / RIA6: 393,216 SIX 0060000-0067777 / RIA7: 458,752 SEVEN 0070000-0077777 / ID 7 / DEVICE NAME GROUP STARTING BLOCK REGION OS/8 RECORDS / RJA0: 0 ZERO 0000000-0007777 / RJA1: 65,536 ONE 0010000-0017777 / RJA2: 131,072 TWO 0020000-0027777 / RJA3: 196,608 THREE 0030000-0037777 / RJA4: 262,144 FOUR 0040000-0047777 / RJA5: 327,680 FIVE 0050000-0057777 / RJA6: 393,216 SIX 0060000-0067777 / RJA7: 458,752 SEVEN 0070000-0077777 / ENTRY POINT CONSIDERATIONS: / SINCE LARGER DISKS WILL REQUIRE ARBITRARY CHOICES OF HANDLERS (POSSIBLY FROM / SEVERAL GROUPS IN DIFFERENT ASSEMBLIES), A CHOICE IS AVAILABLE FOR ENTRY / POINTS TO MINIMIZE ANOMALIES. IT IS THE USER'S RESPONSIBILITY TO ENSURE / UNIQUE ENTRY POINTS WITHIN ANY BUILT OS/8 SYSTEM, AS WELL AS UNIQUE DEVICE / NAMES (WHICH CAN BE ALTERED BY OS/8 BUILD). / DEVICE SIZE CONSIDERATIONS: / ALL HANDLERS ARE PRESUMED TO ADDRESS A REGION OF 4096 RECORDS. (THE EXISTING / OS/8 LIMITATIONS IMPOSE A VALUE OF 4095 MAXIMUM, THUS WASTING ONE RECORD.) / DEPENDING ON THE ACTUAL DEVICE SIZE, THE HIGHEST POSSIBLE IMPLEMENTED REGION / OF THE DISK MAY NOT BE FULL SIZE, REQUIRING SPECIAL DIRECTORY HANDLING. TWO / SOLUTIONS TO THIS ARE: / 1) PATCH PIP SO A SPECIAL VARIANT VERSION CONTAINS THE PROPER LENGTH FOR / THE HIGHEST REGION (ALL LOWER REGIONS ARE IDENTICALLY SET TO 4095 / BLOCKS). / 2) RE-ASSEMBLE THE HANDLER FOR A DIFFERENT DEVICE NUMBER AND INSERT THAT / HANDLER INTO THE SYSTEM (THUS NOT CO-RESIDENT WITH THE OTHER / HANDLERS). IN THIS WAY PIP CAN BE PATCHED TO HAVE BOTH LENGTHS. / ASSEMBLY INSTRUCTIONS: / CHANGE "DEVCODE" TO PROPER DEVICE CODE AS NECESSARY (DEFAULT IS 70). / CHANGE "DEVNUM" TO PROPER OS/8 DEVICE NUMBER AS NECESSARY (DEFAULT IS 63). / CHANGE "ENT30" TO 1 OR 0 TO CREATE ENTRY POINTS 030-037 OR OTHERWISE (DEFAULT / IS 0). / CHANGE "ENT40" TO 1 OR 0 TO CREATE ENTRY POINTS 040-047 OR OTHERWISE (DEFAULT / IS 1). / CHANGE "ENT50" TO 1 OR 0 TO CREATE ENTRY POINTS 050-057 OR OTHERWISE (DEFAULT / IS 0). / 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 "LOGUNIT" TO 0 OR 1 AS NECESSARY TO ADDRESS THE PROPER LOGICAL UNIT / (DEFAULT IS 0). THIS PARAMETER IS ONLY USED IF "IDNUM" IS SET TO 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. / ASSEMBLY DEFINITIONS, ETC. / 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 / OTHER DEFINITIONS. IFNDEF DEVNUM /USE 63 FOR DEFAULT OS/8 DEVICE NUMBER DMA= 4000 /DMA INDICATOR IFNDEF ENT30 /DON'T USE ENTRIES 030-037 BY DEFAULT IFNDEF ENT40 /DON'T USE ENTRIES 040-047 BY DEFAULT IFNDEF ENT50 /DON'T USE ENTRIES 050-057 BY DEFAULT IFZERO ENT30+ENT40+ENT50 < ENT40= 1 /DEFAULT TO USING ENTRIES 040-047 > IFNDEF GROUP /DEFAULT IS GROUP "A" HGROUP= GROUP-1 /ORIGIN 0 FORM OF GROUP IFNDEF IDNUM /DEFAULT IS SCSI ADDRESS 0 IFNDEF LOGUNIT /LOGICAL UNIT (NEEDED IF IDNUM=0 ONLY) NL2000= CLA CLL CML RTR /LOAD AC WITH 2000 NL4000= CLA CLL CML RAR /LOAD AC WITH 4000 IFNDEF OFFSET /DEFAULT IS TO OFFSET PAST BOOT AREA VERSION="J&77 /VERSION NUMBER FOR RESORC / HANDLER NAME DEFINITIONS. IFZERO IDNUM < UO= "U-"N^LOGUNIT /INTER-UNIT NAME OFFSET HN= "W^100+"N-300+UO /MAJOR HANDLER NAME > IFNZRO IDNUM < HN= "R^100+"C-300+IDNUM /MAJOR HANDLER NAME LOGUNIT=0 /LOGICAL UNITS NOT ALLOWED ON EXTENDED ID > / BUILD HEADER, ETC. *0 /THAT'S WHERE BUILD WANTS IT! -10 /8 HANDLERS IN THIS GROUP HN; GROUP^100+"N-300/GROUP NAME HN; GROUP^100+"0-200/PERMANENT NAME DEVNUM^10+4000 /DCB WORD WNA0&177 /ENTRY POINT WORD ZBLOCK 2 /BUILD WANTS IT THIS WAY HN; GROUP^100+"N-300/GROUP NAME HN; GROUP^100+"1-200/PERMANENT NAME DEVNUM^10+4000 /DCB WORD WNA1&177 /ENTRY POINT WORD ZBLOCK 2 /BUILD WANTS IT THIS WAY HN; GROUP^100+"N-300/GROUP NAME HN; GROUP^100+"2-200/PERMANENT NAME DEVNUM^10+4000 /DCB WORD WNA2&177 /ENTRY POINT WORD ZBLOCK 2 /BUILD WANTS IT THIS WAY HN; GROUP^100+"N-300/GROUP NAME HN; GROUP^100+"3-200/PERMANENT NAME DEVNUM^10+4000 /DCB WORD WNA3&177 /ENTRY POINT WORD ZBLOCK 2 /BUILD WANTS IT THIS WAY HN; GROUP^100+"N-300/GROUP NAME HN; GROUP^100+"4-200/PERMANENT NAME DEVNUM^10+4000 /DCB WORD WNA4&177 /ENTRY POINT WORD ZBLOCK 2 /BUILD WANTS IT THIS WAY HN; GROUP^100+"N-300/GROUP NAME HN; GROUP^100+"5-200/PERMANENT NAME DEVNUM^10+4000 /DCB WORD WNA5&177 /ENTRY POINT WORD ZBLOCK 2 /BUILD WANTS IT THIS WAY HN; GROUP^100+"N-300/GROUP NAME HN; GROUP^100+"6-200/PERMANENT NAME DEVNUM^10+4000 /DCB WORD WNA6&177 /ENTRY POINT WORD ZBLOCK 2 /BUILD WANTS IT THIS WAY HN; GROUP^100+"N-300/GROUP NAME HN; GROUP^100+"7-200/PERMANENT NAME DEVNUM^10+4000 /DCB WORD WNA7&177 /ENTRY POINT WORD ZBLOCK 2 /BUILD WANTS IT THIS WAY PAGE IFNZRO .&177 L6575, 6575 /CONSTANT 6575 TSTKBD, .-. /TEST FOR <^C> ROUTINE KSF /FLAG UP? JMP I TSTKBD /NO, RETURN TAD L1200/(1200) /YES, SET PARITY BIT, ETC. KRS /READ IT IN L1200, TAD L6575/(-1203) /COMPARE TO <^C> SZA CLA /SKIP IF IT MATCHES JMP I TSTKBD /ELSE JUST RETURN LCIDF, CIF CDF 00 /BACK TO FIELD 0 JMP I L7600/(SBOOT) /BACK TO OS/8 MONITOR 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 NL4000 /SET ERROR VALUE JMP CALLRETURN /TAKE ERROR RETURN COMPTR, TABLE-LOC8 /COMMAND TABLE POINTER ADJUSTMENT FACTOR ISZCONT,ISZ CONTRL /INSTRUCTION CONSTANT IFNZRO ENT30 < L37, 37 /CONSTANT 0037 > IFZERO ENT30 < / COMMAND TABLE. TABLE, IDNUM^400+6!DMA /TABLE LENGTH WITH DMA INDICATOR AND ID NUMBER RWCOM, .-.&377 /0010 IF READING, 0012 IF WRITING SECTHI, .-.&377 /LOGICAL 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, 000&377 /CONTROL WORD TRFLD, .-.&377 /BANK (0000) AND TRANSFER FIELD (0-7) TRADDR, .-. /TRANSFER ADDRESS > IFNZRO ENT50 < BUTOFFS,20^OFFSET /OFFSET FOR BOOT AREA DGFIXUP,LOGUNIT^40+HGROUP^10-INST /LOGICAL UNIT + GROUP + (FIXUP FOR "DCA WNA0") FIXUP, -INST /FIXUP FOR "DCA WNA0" L37, 37 /CONSTANT 0037 > ZBLOCK .+7&7770-. /EMPTY SPACE TO MAINTAIN ALIGNMENT IFNZRO .&7 WNA0, VERSION /REGION 0 ENTRY POINT WNA1, ISZ CONTRL /REGION 1 ENTRY POINT WNA2, ISZ CONTRL /REGION 2 ENTRY POINT WNA3, ISZ CONTRL /REGION 3 ENTRY POINT WNA4, ISZ CONTRL /REGION 4 ENTRY POINT WNA5, ISZ CONTRL /REGION 5 ENTRY POINT WNA6, ISZ CONTRL /REGION 6 ENTRY POINT WNA7, ISZ CONTRL /REGION 7 ENTRY POINT WNEND= . /END OF HANDLER ENTRY POINT LIST IFNZRO .-WNEND L7600, CLA!400 /CLEAN UP RDF /GET CALLING FIELD TAD LCIDF/(CIF CDF) /MAKE INTO CIF CDF RETURN INSTRUCTION DCA CALLRET /SAVE FOR EXIT LATER TAD CONTRL /GET CALLING UNIT L40, CMA /INVERT SENSE TAD TADWNEND/(TAD WNEND) /MAKE INTO "TAD WNA0+N" INSTRUCTION DCA GETINST /STORE IN-LINE NL2000 /TAD (DCA-TAD) /GET "DCA-TAD" TAD GETINST /FORM "DCA WNA0+N" INSTRUCTION DCA PUTINST /STORE IN-LINE CALLPC, /CALLING ADDRESS STORED HERE GETINST,.-. /WILL BE "TAD WNA0+N" DCA CALLPC /SAVE ACTUAL CALLER TAD ISZCONTRL/(ISZ CONTROL)/GET RESTORING INSTRUCTION PUTINST,.-. /WILL BE "DCA WNA0+N" DCA CONTRL /CLEAR CONTROL WORD NL4000 /SET READ/WRITE MASK AND I CALLPC /GET READ/WRITE BIT CLL IAC RTL /4 IF READING, 5 IF WRITING RAL /10 IF READING, 12 IF WRITING DCA RWCOM /STASH COMMAND TAD I CALLPC /GET FUNCTION WORD BSW /MOVE OVER AND L37/(37) /JUST PAGE BITS SNA /SKIP IF ANY TAD L40/(40) /ELSE USE MAXIMUM DCA SCTCNT /STASH SECTOR COUNT TAD I CALLPC /GET FUNCTION WORD AGAIN RAR /MOVE OVER AND L37/(34) /JUST FIELD BITS (MOSTLY) CLL RTR /MOVE DOWN DCA TRFLD /STORE (BANK AND) FIELD ISZ CALLPC /BUMP TO TRANSFER ADDRESS TAD I CALLPC /GET TRANSFER ADDRESS DCA TRADDRESS /STASH IN COMMAND ISZ CALLPC /BUMP TO RECORD NUMBER TAD I CALLPC /GET RECORD NUMBER CLL /CLEAR LINK NOW TAD BUTOFFSET /ADD ON OFFSET SZL /SKIP IF NO CARRY INTO NEXT REGION ISZ PUTINST /BUMP "DCA WNA0+N" TO NEXT REGION CLL RAL /DOUBLE TO PAGE-SIZE BLOCKS DCA SECTLO /STORE LOW-ORDER SECTOR ADDRESS TADWNEN,TAD L7600/(7400) /SETUP MASK AND SECTLO /GET BACK HIGH-ORDER BITS TAD PUTINST /ADD ON "DCA WNA0+N" TAD FIXUP /REMOVE EXTRANEOUS STUFF CML RTL;RTL;RAL /MOVE UP DCA SECTMD /STORE MIDDLE SECTOR ADDRESS TAD PUTINST /GET "DCA WNA0+N" TAD DGFIXUP /REMOVE EXTRANEOUS STUFF, ADD LOGICAL UNIT AND GROUP CLL RTR;RAR /MOVE DOWN DCA SECTHI /STORE HIGH-ORDER SECTOR ADDRESS AND UNIT JMS TSTKBD /CHECK FOR <^C> DSRS /GET STATUS SPA CLA /SKIP IF CONTROLLER IS IDLE JMP .-3 /ELSE WE MIGHT AS WELL WAIT JMS LOC8 /FIND OUT WHERE WE ARE LOADED LOC8, .-. /WILL BE OUR OWN PC ISZ CALLPC /BUMP TO ERROR RETURN 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 COMPTR/(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 JMS TSTKBD /CHECK FOR <^C> ISZ CALLPC /BUMP RETURN ADDRESS CALLRET,.-. /WILL BE CIF CDF RETURN INSTRUCTION JMP I CALLPC /RETURN TO CALLER IFZERO ENT50 < BUTOFFS,20^OFFSET /OFFSET FOR BOOT AREA DGFIXUP,LOGUNIT^40+HGROUP^10-INST /LOGICAL UNIT + GROUP + (FIXUP FOR "DCA WNA0") FIXUP, -INST /FIXUP FOR "DCA WNA0" IFZERO ENT30 < L37, 37 /CONSTANT 0037 > > IFNZRO ENT30 < / COMMAND TABLE. TABLE, IDNUM^400+6!DMA /TABLE LENGTH WITH DMA INDICATOR AND ID NUMBER RWCOM, .-.&377 /0010 IF READING, 0012 IF WRITING SECTHI, .-.&377 /LOGICAL 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, 000&377 /CONTROL WORD TRFLD, .-.&377 /BANK (0000) AND TRANSFER FIELD (0-7) TRADDR, .-. /TRANSFER ADDRESS > INST= DCA WNA0 /INSTRUCTION CONSTANT $ /THAT'S ALL FOLK!