/ WINCHESTER DISK SYSTEM HANDLER / 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 HANDLER FOR SYS: AND UP TO THREE ADDITIONAL / CO-RESIDENT HANDLERS. THE SET OF HANDLERS 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. THE CORRESPONDING NON-SYSTEM HANDLERS CAN / BE COMPATIBLY CONFIGURED TO ADDRESS THE ENTIRE GROUP (OR USER-DESIGNATED / SUBSET) IF DESIRED (SEE THE NON-SYSTEM HANDLERS 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 - THE SYSTEM HANDLER ALWAYS BOOTSTRAPS AND OPERATES FROM / THE LOWEST HANDLER IN 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). THIS ASSEMBLY ALWAYS CREATES THE SYSTEM BOOTSTRAP / AND HANDLER FOR THE GROUP'S LOWEST MEMBER (EQUIVALENT TO THE NON-SYSTEM GROUP / MEMBER ENDING WITH "0") AND OPTIONALLY UP TO THREE ADDITIONAL CO-RESIDENT / NON-SYSTEM HANDLERS (THE NON-SYSTEM GROUP MEMBERS ENDING WITH "0", "1", "2"). / 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). (SEE / BELOW FOR CONFIGURATION ANOMALIES REGARDING IDNUM VALUE.) / C) OFFSET - THE SYSTEM HANDLER CAN BE ASSEMBLED WITH NO OFFSET, / I.E., THE BOOTSTRAP IS TO THE ABSOLUTE BEGINNING OF THE DEVICE (OR 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). THE CURRENT VERSION OF THIS / HANDLER REQUIRES ABSOLUTE VOLUME POSITIONING (SEE THE MENU-8 DESCRIPTION OF / NON-RELOCATABLE VOLUMES), WHICH MEANS THAT THE GROUP CHOSEN FOR THE SYSTEM / HANDLER MUST BE CONSISTENT BETWEEN THIS HANDLER AND THE DEFINITION IMPARTED TO / THE MENU UTILITY. / 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). IT IS / THE USER'S RESPONSIBILITY TO SET THIS PARAMETER CORRECTLY, AS THE SYSTEM / HANDLER BOOTSTRAP DETERMINES THE ACTUAL HARDWARE UNIT AT BOOTSTRAP TIME; THE / LOGICAL UNIT PARAMETER MERELY DETERMINES (IN PART) THE NAMES FOR THE HANDLER / GROUP AND THE NON-SYSTEM HANDLERS (WHICH ARE OPTIONALLY AVAILABLE). ADHERING / TO THIS GUIDELINE WILL ELIMINATE CONFUSION WHEN BUILDING A SYSTEM (ALTHOUGH / IT'S TECHNICALLY POSSIBLE TO BUILD A SYSTEM WITH NAMES INCONSISTENT WITH THE / NAMING CONVENTION). IF THE ASSEMBLY IS CONFIGURED FOR IDS OTHER THAN 0, THE / LOGUNIT PARAMETER IS IGNORED. / SHOULD THE PHYSICAL DRIVE BE RESTRAPPED TO ANOTHER UNIT, OR THE DRIVE / IS A REMOVABLE CARTRIDGE, ETC., AND CAN BE INSERTED IN ANOTHER SYSTEM WITH / DIFFERENT STRAPPING OPTIONS, THE CO-RESIDENT NON-SYSTEM HANDLERS WILL ADDRESS / THE SAME LOGICAL UNIT (0 OR 1) AS DETERMINED AT BOOTSTRAP TIME BY THE SYSTEM / HANDLER. THIS CAN CAUSE USER CONFUSION SINCE THE HANDLER NAMES WILL BE / INCONSISTENT. FOR EXAMPLE, A DRIVE STRAPPED AS UNIT ONE WITH AN OS/8 BOOTABLE / SYSTEM AT THE LOWEST GROUP WOULD HAVE A SYSTEM HANDLER AND CO-RESIDENT / HANDLERS NAMED "WUA0", "WUA1", AND "WUA2" ASSUMING A MAXIMAL CONFIGURATION. / SHOULD THIS DRIVE BE RESTRAPPED AS UNIT ZERO, THE CO-RESIDENT HANDLERS RETAIN / THEIR ORIGINAL NAMES, BUT ADDRESS THE AREAS ORDINARILY ASSOCIATED WITH "WNA0", / "WNA1", "WNA2" (ASSUMING MAXIMAL CONFIGURATION FOR DRIVE ZERO). THIS CAN BE / ESPECIALLY CONFUSING FOR THE LOWEST HANDLER (ENDING WITH "0"), AS THIS ENTRY / IS PROVIDED AS AN "ALIAS" TO THE SYSTEM HANDLER GENERALLY FOR USERS WISHING TO / CONFIRM THE ACTUAL IDENTITY OF THE SYSTEM DEVICE. SINCE THE HARDWARE ID IS / DETERMINED AT BOOTSTRAP TIME, THE HANDLER NAMES ARE POTENTIALLY SUBJECT TO / ADDITIONAL ANOMALY IF THE CONTROLLER HARDWARE IS STRAPPED TO A DIFFERENT ID / THAN THAT CHOSEN FOR THE VALUE OF "IDNUM" WHICH IS USED BY THE SOFTWARE TO / PARTIALLY DETERMINE THE HANDLER NAME. / AN ALTERNATIVE APPROACH TO THIS METHOD IS TO DISCARD ALL CO-RESIDENT / HANDLERS AND USE SUITABLY CONFIGURED NON-SYSTEM HANDLERS. THE NON-SYSTEM / HANDLERS USE THE IDENTICAL NAMING CONVENTION TO THAT DESIGNATED FOR THE SYSTEM / HANDLER WITHOUT ANOMALY. THE FOLLOWING IS A FULL SUMMARY OF TRADEOFF / CONSIDERATIONS: / 1) THE HANDLER NAME ANOMALY AS DISCUSSED ABOVE. THIS MAY / NOT BE A CONSIDERATION FOR CERTAIN USERS. USE OF THE / NON-SYSTEM HANDLERS MAY BE INDICATED. / 2) NON-SYSTEM HANDLERS SUPPORT <^C> CHECKING; DUE TO / SPACE LIMITATIONS, THE CO-RESIDENT HANDLERS 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 HANDLERS EACH HAVING DOMAIN OVER / 8,192 BLOCKS OR 4,096 OS/8 RECORDS (EACH 4,096 RECORD REGION IS 1 MWORD). / NON-SYSTEM HANDLERS EXIST TO ADDRESS ALL OF THE EIGHT REGIONS PER HANDLER / GROUP ALLOWING THE USER TO CHOOSE ANY SUBSET OF THE AVAILABLE STORAGE (SEE THE / NON-SYSTEM HANDLER DOCUMENTATION ELSEWHERE). / THIS SET OF HANDLERS ADDRESSES THE FIRST THREE REGIONS OR 24,576 / BLOCKS (12,288 OS/8 LOGICAL RECORDS) OF ANY ONE GROUP, AS DETERMINED BY THE / "GROUP" PARAMETER, WHICH DETERMINES WHICH 32,768 RECORD GROUP IS SELECTED. / THE LOWEST REGION IS BOOTABLE AND IS KNOWN AS "SYS:" ALONG WITH A CO-RESIDENT / ALIAS CONSISTENT WITH THE ASSOCIATED NON-SYSTEM HANDLER. 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 / SYS: 0 ZERO 0000000-0007777 / WNA0: (ALIAS TO SYS:) 0 ZERO 0000000-0007777 / WNA1: 65,536 ONE 0010000-0017777 / WNA2: 131,072 TWO 0020000-0027777 / GROUP "Z" (UPPER LIMIT) / DEVICE NAME GROUP STARTING BLOCK REGION OS/8 RECORDS / SYS: 13,107,200 ZERO 3100000-3107777 / WNZ0: (ALIAS TO SYS:) 13,107,200 ZERO 3100000-3107777 / WNZ1: 13,172,736 ONE 3110000-3117777 / WNZ2: 13,238,272 TWO 3120000-3127777 / 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 / SYS: 0 ZERO 0000000-0007777 / WNA0: (ALIAS TO SYS:) 0 ZERO 0000000-0007777 / WNA1: 65,636 ONE 0010000-0017777 / WNA2: 131,072 TWO 0020000-0027777 / ID 0, LOGICAL UNIT 1 / DEVICE NAME GROUP STARTING BLOCK REGION OS/8 RECORDS / SYS: 0 ZERO 0000000-0007777 / WUA0: (ALIAS TO SYS:) 0 ZERO 0000000-0007777 / WUA1: 65,536 ONE 0010000-0017777 / WUA2: 131,072 TWO 0020000-0027777 / ID 1 / DEVICE NAME GROUP STARTING BLOCK REGION OS/8 RECORDS / SYS: 0 ZERO 0000000-0007777 / RDA0: (ALIAS TO SYS:) 0 ZERO 0000000-0007777 / RDA1: 65,536 ONE 0010000-0017777 / RDA2: 131,072 TWO 0020000-0027777 / ID 2 / DEVICE NAME GROUP STARTING BLOCK REGION OS/8 RECORDS / SYS: 0 ZERO 0000000-0007777 / REA0: (ALIAS TO SYS:) 0 ZERO 0000000-0007777 / REA1: 65,536 ONE 0010000-0017777 / REA2: 131,072 TWO 0020000-0027777 / ID 3 / DEVICE NAME GROUP STARTING BLOCK REGION OS/8 RECORDS / SYS: 0 ZERO 0000000-0007777 / RFA0: (ALIAS TO SYS:) 0 ZERO 0000000-0007777 / RFA1: 65,536 ONE 0010000-0017777 / RFA2: 131,072 TWO 0020000-0027777 / ID 4 / DEVICE NAME GROUP STARTING BLOCK REGION OS/8 RECORDS / SYS: 0 ZERO 0000000-0007777 / RGA0: (ALIAS TO SYS:) 0 ZERO 0000000-0007777 / RGA1: 65,536 ONE 0010000-0017777 / RGA2: 131,072 TWO 0020000-0027777 / ID 5 / DEVICE NAME GROUP STARTING BLOCK REGION OS/8 RECORDS / SYS: 0 ZERO 0000000-0007777 / RHA0: (ALIAS TO SYS:) 0 ZERO 0000000-0007777 / RHA1: 65,536 ONE 0010000-0017777 / RHA2: 131,072 TWO 0020000-0027777 / ID 6 / DEVICE NAME GROUP STARTING BLOCK REGION OS/8 RECORDS / SYS: 0 ZERO 0000000-0007777 / RIA0: (ALIAS TO SYS:) 0 ZERO 0000000-0007777 / RIA1: 65,536 ONE 0010000-0017777 / RIA2: 131,072 TWO 0020000-0027777 / ID 7 / DEVICE NAME GROUP STARTING BLOCK REGION OS/8 RECORDS / SYS: 0 ZERO 0000000-0007777 / RJA0: (ALIAS TO SYS:) 0 ZERO 0000000-0007777 / RJA1: 65,536 ONE 0010000-0017777 / RJA2: 131,072 TWO 0020000-0027777 / 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 "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 GROUP /DEFAULT GROUP IS "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) 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! -4 /4 HANDLERS IN THIS GROUP HN; GROUP^100+"S-300/GROUP NAME DEVICE SYS /PERMANENT NAME DEVNUM^10+4000 /DCB WORD SYSENT&177+2000 /ENTRY POINT WORD 0 /BUILD WANTS IT THIS WAY 7777 /ZERO SYS: TO 4095 BLOCKS HN; GROUP^100+"S-300/GROUP NAME HN; GROUP^100+"0-200/PERMANENT NAME DEVNUM^10+4000 /DCB WORD SYSENT&177+1000 /ENTRY POINT WORD ZBLOCK 2 /BUILD WANTS IT THIS WAY HN; GROUP^100+"S-300/GROUP NAME HN; GROUP^100+"1-200/PERMANENT NAME DEVNUM^10+4000 /DCB WORD WDSK&177+1000 /ENTRY POINT WORD ZBLOCK 2 /BUILD WANTS IT THIS WAY HN; GROUP^100+"S-300/GROUP NAME HN; GROUP^100+"2-200/PERMANENT NAME DEVNUM^10+4000 /DCB WORD WDSK2&177+1000 /ENTRY POINT WORD ZBLOCK 2 /BUILD WANTS IT THIS WAY BSTART-BEND /BOOTSTRAP LENGTH / THE BOOTSTRAP CODE FOLLOWS (WHEN BINARY OUTPUT RESUMES). / MANUAL BOOTSTRAP FOR DIRECT LOADING OF WINCHESTER SYSTEM VOLUME. HERE, NOPUNCH /FOOL THE ASSEMBLER *0 /WHERE THE CODE IS READ IN SCNDBT= . /SECONDARY BOOT CODE READS IN HERE CAF /POWER CLEAR IS GOOD ENOUGH TO CLEAR AC DSRS /GET STATUS NOW SPA CLA /SKIP IF IDLE JMP .-2 /ELSE JUST WAIT FOR IT DSHI /START THE COMMAND NOW DSRS /GET STATUS SMA CLA /SKIP IF NOW BUSY JMP .-2 /ELSE WAIT FOR IT DSCF /CLEAR THE FLAG NOW TAD DSCOM/(COMAND) /POINT TO COMMAND DSGO /START IT UP DSSF /FLAG UP? JMP .-1 /NO, WAIT FOR IT DSCF /YES, CLEAR IT DSRS /GET STATUS NOW CLL RAL /REMOVE BUSY BIT SZA /SKIP IF OTHERWISE OK HLT /ELSE BARF DSIM /FINISH THE COMMAND TAD BUTDRIVE /GET DRIVE BITS BOVRLAY,JMP . /WAIT FOR OVERLAY BUTDRIV,LOGUNIT^40+IDNUM^10+1 /BOOTSTRAP VALUE DSCOM, COMAND /POINTER TO COMMAND TABLE / COMMAND TABLE. COMAND, IDNUM^400+DMA+6 /DMA, ID AND COMMAND LENGTH 10&377 /READ LOGUNIT^40+HGROUP&377 /HIGH-ORDER SECTOR WORD 000&377 /MIDDLE SECTOR WORD 40^OFFSET&377 /LOW-ORDER SECTOR WORD 2&377 /READ TWO SECTORS 000&377 /CONTROL WORD 000&377 /BANK AND FIELD 0000 /TRANSFER ADDRESS / IT IS ALSO POSSIBLE TO BOOTSTRAP THE SYSTEM BY EXECUTING A BOOT COMMAND FROM / AN EXTERNAL LOCATION: *400 /ANYWHERE PAST 0377 WILL DO EXTRNBU,CAF /POWER CLEAR IS GOOD ENOUGH TO CLEAR AC DSRS /GET STATUS NOW SPA CLA /SKIP IF IDLE JMP .-2 /ELSE JUST WAIT FOR IT DSHI /START THE COMMAND NOW DSRS /GET STATUS SMA CLA /SKIP IF NOW BUSY JMP .-2 /ELSE WAIT FOR IT DSCF /CLEAR THE FLAG NOW TAD EDSCOM/(COMAND) /POINT TO COMMAND DSGO /START IT UP JMS DSWAIT /WAIT FOR COMMAND TO TAKE DSIM /FINISH THE COMMAND JMS DSWAIT /WAIT FOR COMMAND TO COMPLETE TAD EBTDRIVE /GET DRIVE BITS JMP BEXTERN /CONTINUE THERE DSWAIT, .-. /WAIT ROUTINE DSSF /FLAG UP? JMP .-1 /NO, WAIT FOR IT DSCF /YES, CLEAR IT DSRS /GET STATUS NOW CLL RAL /REMOVE BUSY BIT SZA /SKIP IF OTHERWISE OK HLT /ELSE BARF JMP I DSWAIT /RETURN EBTDRIV,LOGUNIT^40+IDNUM^10+1 /BOOTSTRAP DRIVE VALUE EDSCOM, DCOMAND /POINTER TO COMMAND TABLE / COMMAND TABLE. DCOMAND,IDNUM^400+DMA+6 /DMA, ID AND COMMAND LENGTH 10&377 /READ LOGUNIT^40+HGROUP&377 /HIGH-ORDER SECTOR WORD 000&377 /MIDDLE SECTOR WORD 40^OFFSET&377 /LOW-ORDER SECTOR WORD 2&377 /READ TWO SECTORS 000&377 /CONTROL WORD 000&377 /BANK AND FIELD 0000 /TRANSFER ADDRESS / OTHER BOOTSTRAPPING METHODS. / IT IS NOT LIKELY THIS HANDLER WILL EVER BE DIRECTLY INVOLVED IN BOOTSTRAPPING / THE WINCHESTER DISK DRIVE: / IF THE "OFFSET" PARAMETER IS SET TO ONE, A BOOTSTRAP MONITOR MUST BE PRESENT / ON THE ABSOLUTE BEGINNING (CYLINDER ZERO) OF THE WINCHESTER DISK DRIVE. / SHOULD THIS BE THE CASE, THE BLOCKS RESERVED FOR THE BOOTSTRAP MONITOR AREA / MUST NOT BE ADDRESSED BY THESE HANDLERS. THIS IS A SAFETY FEATURE TO PREVENT / ACCIDENTAL DESTRUCTION OF THIS INFORMATION NEEDED TO MAINTAIN THE VIABILITY OF / THE ENTIRE DISK DRIVE. **NOTE** USING THIS HANDLER WITH "OFFSET" SET TO ZERO / (OR ANY OF ITS PREDECESSORS WHICH DIDN'T SUPPORT THE CONCEPT OF AN OFFSET, AND / EFFECTIVELY RAN WITH "OFFSET" SET TO ZERO) WILL DESTROY THE BOOTSTRAP MONITOR / AREA THUS INVALIDATING ITS USE WITH THE CURRENT DIAGNOSTIC (DMU) PROGRAMS AND / THE MENU UTILITIES (MENU-8), ETC. THE BOOTSTRAP MONITOR (MENU-8) IS / RESPONSIBLE FOR MAINTAINING THE ASSIGN DISK PARAMETERS COMMANDS FOR THE / CONTROLLER, THE FLAW MANAGEMENT TABLES, DRIVE SERIAL NUMBER AND CREATION DATE / ETC. MUCH OF THIS DATA IS CREATED BY THE DMU PROGRAM. MENU-8 CAN BE / CONFIGURED TO BOOTSTRAP THE VOLUME WHERE THIS HANDLER RESIDES (OR ANY OTHER / BOOTSTAPPABLE VOLUME) EITHER AUTOMATICALLY OR MANUALLY AS DESIRED. (SEE / DOCUMENTATION ON MENU-8 ELSEWHERE.) / IF THE "OFFSET" PARAMETER IS SET TO ZERO (INDICATING ABSOLUTE USE OF THE DISK / FOR OS/8 WITHOUT THE BOOTSTRAP MONITOR WHICH IS NOT RECOMMENDED), OR IT IS / DESIRABLE TO USE A SIMPLER BOOTSTRAP TO LOAD IN THE BOOTSTRAP MONITOR AND THE / "IDNUM" PARAMETER IS SET TO ZERO, THE FOLLOWING (SHORTER) PROGRAM CAN BE USED: *21 /WHERE TO LOAD THIS SHORTBT,CAF /POWER CLEAR IS GOOD ENOUGH TO CLEAR AC TAD BTUNIT /GET BOOTSTRAP VALUE DSIM /START IT UP BOVRLAY,JMP . /WAIT FOR OVERLAY BTUNIT, LOGUNIT^400+1 /BOOTSTRAP VALUE / IT IS ALSO POSSIBLE TO BOOTSTRAP THE SYSTEM BY EXECUTING A BOOT COMMAND FROM / AN EXTERNAL LOCATION: *400 /ANYWHERE PAST 0377 WILL DO EXTRNBU,CAF /POWER CLEAR IS GOOD ENOUGH TO CLEAR AC TAD EXTUNIT /GET BOOTSTRAP VALUE DSIM /START IT UP ISZ .-2 /WAIT FOR JMP .-1 /AWHILE DSRS /GET STATUS NOW SPA /SKIP IF NOT BUSY JMP .-2 /ELSE WAIT FOR IT SZA /SKIP IF OK HLT /ELSE COMPLAIN TAD EXTUNIT /GET UNIT BITS AGAIN JMP BEXTERN /CONTINUE THERE EXTUNIT,LOGUNIT^400+1 /BOOTSTRAP VALUE *HERE /RESTORE ORIGIN HERE, ENPUNCH /RESTORE BINARY OUTPUT RELOC SCNDBT /WHERE THIS CODE COMES IN BSTART, DCA BOVRLAY /SAVE PASSED UNIT DSRS /GET CURRENT STATUS SPA /SKIP IF NOT BUSY JMP .-2 /ELSE WAIT FOR IT SZA /BETTER BE CLEAR HLT /ELSE BARF! BLOOP, TAD I BFROM1 /GET A FIELD ONE WORD CDF 10 /GOTO FIELD ONE DCA I BCOUNT /STORE IT CDF 00 /BACK TO FIELD ZERO TAD I BFROM2 /GET A FIELD ZERO WORD DCA I BCOUNT /STORE IT ISZ BCOUNT /DONE ALL YET? JMP BLOOP /NO, GO BACK FOR MORE / THE FOLLOWING TWO WORDS MUST BE HERE (TO BE AUTO-INDEX REGISTERS) / AND EXECUTE AS AND INSTRUCTIONS. BFROM1, BSTART-1 /WHERE FIELD ONE CODE IS NOW BFROM2, BSTART+200-1 /WHERE FIELD ZERO CODE IS NOW B400, 400 /CONSTANT 0400; WILL EXECUTE AS HARMLESS AND TAD BOVRLAY /GET BOOTSTRAP UNIT AND B400/[400] /JUST ODD UNIT BIT JMP BMORE /CONTINUE THERE BOVRLAY,JMP BSTART /OVERLAYS WAITING MACHINE HERE IFNZRO 25-. BEXTERN,DCA BOVRLAY /EXTERNAL BOOTSTRAP COMES HERE; SAVE PASSED UNIT JMP BLOOP /CONTINUE THERE BMORE, CLL RTR;RAR /MOVE DOWN TAD I BSECTHI/[SECTHI]/GET HANDLER GROUP DCA I BSECTHI/[SECTHI]/STORE BACK TAD BOVRLAY /GET BOOTSTRAP UNIT AND B70/[70] /JUST ID BITS BSW;RAR /MOVE UP TAD I BTABLE/[TABLE] /GET DMA AND LENGTH VALUE DCA I BTABLE/[TABLE] /STORE BACK JMP I B7605/[7605] /GO START IT UP BCOUNT, SBOOT /COUNTER AND POINTER BSECTHI,SECTHI /POINTER TO HIGH-ORDER SECTOR ADDRESS BTABLE, TABLE /POINTER TO TABLE ADDRESS B70, 70 /CONSTANT 0070 B7605, 7605 /WHERE TO RESTART OS/8 BEND= . /END OF BOOTSTRAP OVERLAY CODE RELOC /RESTORE REAL ORIGIN PAGE /ACTUAL HANDLER CODE HERE RELOC 7600 /WHERE IT EXECUTES SBOOT, ZBLOCK 7 /BUILD WANTS IT THIS WAY SYSENT, VERSION /SYSTEM HANDLER ENTRY POINT S7600, CLA!400 /CLEAN UP; ALSO CONSTANT 7600 TAD SYSENTRY /GET OUR CALLER DCA WDSK2 /MAKE IT THEIRS JMP SYSCOMMON /CONTINUE THERE WDSK, VERSION /REGION ONE ENTRY POINT CLA /CLEAN UP TAD WDSK /GET OUR CALLER DCA WDSK2 /MAKE IT THEIRS JMP WDSKCOMMON /CONTINUE THERE WDSK2, VERSION /REGION TWO ENTRY POINT SCMPTR, SPA SZL CLA /COMMAND POINTER; THIS CLEARS THE AC SCIF, CIF 00 /CIF CONSTANT; THIS CAN BE SKIPPED ISZ CONTRL /SET ADDITIONAL REGION TWO OFFSET WDSKCOM,ISZ CONTRL /SET REGION ONE OFFSET SYSCOMM,RDF /GET CALLING FIELD TAD SCIF/(CIF) /TURN INTO CIF RETURN FIELD INSTRUCTION DCA SYSRETURN /STORE IN-LINE NL4000 /SET READ/WRITE MASK AND I WDSK2 /GET THE BIT CLL IAC RTL /4 IF READING, 5 IF WRITING RAL /10 IF READING, 12 IF WRITING DCA RWCOM /STORE IN COMMAND TAD I WDSK2 /GET FUNCTION WORD BSW /MOVE OVER AND S37/(37) /JUST PAGE BITS SNA /SKIP IF ANY TAD S40/(40) /ELSE USE MAXIMUM DCA SCTCNT /STORE IN COMMAND TAD I WDSK2 /GET FUNCTION WORD AGAIN RAR /MOVE OVER AND S37/(34) /JUST FIELD BITS (MOSTLY) CLL RTR /MOVE DOWN DCA TRFLD /STORE (BANK AND) FIELD ISZ WDSK2 /BUMP TO TRANSFER ADDRESS TAD I WDSK2 /GET TRANSFER ADDRESS DCA TRADDRESS /STORE IN COMMAND ISZ WDSK2 /BUMP TO RECORD NUMBER TAD I WDSK2 /GET RECORD NUMBER CLL /CLEAR LINK NOW TAD BUTOFFSET /ADD ON OFFSET SZL /SKIP IF NO CARRY INTO NEXT REGION ISZ CONTRL /BUMP TO NEXT REGION CLL RAL /DOUBLE TO PAGE-SIZE BLOCKS DCA SECTLO /STORE IN COMMAND TAD SECTLO /GET IT BACK AND S7600/(7400) /JUST HIGH-ORDER BITS TAD CONTRL /ADD ON REGION BITS RTL;RTL;RAL /MOVE UP DCA SECTMD /STORE IN COMMAND ISZ WDSK2 /BUMP TO ERROR RETURN DCA CONTRL /CLEAR CONTROL WORD DSRS /GET STATUS NOW SPA CLA /SKIP IF IDLE JMP .-2 /ELSE WAIT FOR IT DSHI /SEND HIGH-ORDER COMMAND ADDRESS DSRS /GET STATUS SMA CLA /SKIP IF BUSY JMP .-2 /ELSE WAIT FOR IT DSCF /CLEAR DONE FLAG NOW TAD SCMPTR/(TABLE) /POINT AT OUR COMMAND DSGO /GO START IT UP JMS SWAIT /WAIT FOR COMMAND TO TAKE DSIM /FINISH THE COMMAND JMS SWAIT /WAIT FOR COMMAND TO COMPLETE ISZ WDSK2 /BUMP TO GOOD RETURN SYSRETU,.-. /WILL BE CIF RETURN FIELD JMP I WDSK2 /RETURN TO CALLER SWAIT, .-. /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 SWAIT /ELSE RETURN NL4000 /SET ERROR VALUE JMP SYSRETURN /TAKE FAILING RETURN BUTOFFS,20^OFFSET /OFFSET FOR BOOT AREA ZBLOCK SPA SZL CLA-. /EMPTY SPACE / COMMAND TABLE. IFNZRO 7730-. TABLE, .-.^400+6!DMA /TABLE LENGTH, DMA INDICATOR; IDNUM WILL BE FILLED IN. RWCOM, .-.&377 /0010 IF READING, 0012 IF WRITING SECTHI, .-.^40+HGROUP&377 /HIGH-ORDER SECTOR (GROUP); UNIT WILL BE FILLED IN. 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 S37, 37 /CONSTANT 0037 S40, 40 /CONSTANT 0040 RELOC /TURN OFF RELOCATION $ /THAT'S ALL FOLK!