Trailing-Edge
-
PDP-10 Archives
-
tops10_704_monitoranf_bb-x140c-sb
-
10,7/mon/devprm.mac
There are 8 other files named devprm.mac in the archive. Click here to see a list.
UNIVERSAL DEVPRM - DEVICE PARAMETERS FOR TOPS-10 V040
SUBTTL D. MASTROVITO /DPM 23-AUG-88
SEARCH F,S
SALL ;CLEAN LISTINGS
.DIRECT FLBLST ;CLEANER LISTINGS
;THIS FILE CONTAINS DEVICE PARAMETER DEFINITIONS AND DATA STRUCTURES.
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED
; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1986,1988.
;ALL RIGHTS RESERVED.
.CPYRT<1986,1988>,.
XP VDEVPR,040 ;DEVPRM VERSION NUMBER
SUBTTL DEVICE CODE DEFINITIONS
FSTICD==:540 ;FIRST INTERNAL CHANNEL DEVICE CODE
LSTICD==:574 ;LAST INTERNAL CHANNEL DEVICE CODE
;IN THE IDEAL WORLD IT WOULD BE POSSIBLE TO INSTALL THE NIA20 OR CI20
;IN EITHER OF THE MODIFIED INTERNAL CHANNEL BACKPLANE SLOTS IN THE
;KL-10. UNFORTUNATELY, THERE IS NO EASY WAY TO TELL THE TWO TYPES OF
;DEVICES APART. THOSE WHO ARE FOOLISH ENOUGH TO BELIEVE THE
;DOCUMENTATION MIGHT DISAGREE, BUT THE ENGINEERS NEVER STRAPPED THE
;NIA20 AND CI20 TO RETURN DIFFERENT PORT TYPE FIELDS AS THE
;DOCUMENTATION LEADS ONE TO BELIEVE. FOR THIS REASON, THE SOFTWARE IN
;TOPS-10 HAS BEEN WRITTEN TO ASSUME THE NIA20 CAN ONLY APPEAR AS
;INTERNAL CHANNEL NUMBER 5, AND THE CI20 CAN ONLY APPEAR AS INTERNAL
;CHANNEL NUMBER 7.
SUBTTL RH20 CHANNEL DEFINITIONS -- CONI
CI.DBP==:1B18 ;DATA BUS PARITY ERROR
CI.EXC==:1B19 ;EXCEPTION
CI.LWC==:1B20 ;LONG WORD COUNT
CI.SWC==:1B21 ;SHORT WORD COUNT
CI.CER==:1B22 ;CHANNEL ERROR
CI.DRE==:1B23 ;DRIVE RESPONSE ERROR
CI.RAE==:1B24 ;REGISTER ACCESS ERROR
CI.RDY==:1B25 ;CHANNEL READY
CI.OVR==:1B26 ;DATA OVERRUN
CI.MBE==:1B27 ;MASSBUS ENABLE
CI.ATN==:1B28 ;ATTENTION
CI.SCR==:1B29 ;SCR FULL
CI.AIE==:1B30 ;ATTENTION INTERRUPT ENABLE
CI.BSY==:1B31 ;PCR FULL (BUSY)
CI.DON==:1B32 ;COMMAND DONE
CI.PIA==:7B35 ;PI ASSIGNMENT
SUBTTL RH20 CHANNEL DEFINITIONS -- CONO
CO.RAE==:1B24 ;CLEAR REGISTER ACCESS ERROR
CO.MBI==:1B25 ;MASSBUS INIT
CO.TEC==:1B26 ;TRANSFER ERROR CLEAR
CO.MBE==:1B27 ;MASSBUS ENABLE
CO.RCP==:1B28 ;RESET COMMAND LIST POINTER
CO.SCR==:1B29 ;DELETE SCR
CO.AIE==:1B30 ;ATTENTION INTERRUPT ENABLE
CO.STP==:1B31 ;STOP TRANSFER
CO.CCD==:1B32 ;CLEAR COMMAND DONE
CO.PIA==:7B35 ;PI ASSIGNMENT
SUBTTL RH20 CHANNEL DEFINITIONS -- DATAI REGISTER
;FIELDS COMMON TO ALL DATAI OPERATIONS
DI.REG==:77B5 ;REGISTER SELECT FIELD
DI.LDR==:1B6 ;LOAD REGISTER
DI.DRV==:7B17 ;DRIVE SELECT FIELD
;REGISTER AND REGISTER SPECIFIC BIT DEFINITIONS. NOTE THAT BIT
;DEFINITIONS FOR .DIPBA AND .DIPTC ARE THE SAME AS THOSE FOR
;.DISBA AND .DISTC RESPECTIVELY.
.DISBA==:70B5 ;SECONDARY BLOCK ADDRESS REGISTER
DI.BAD==:177777B35 ;BLOCK ADDRESS/FRAME COUNT
.DISTC==:71B5 ;SECONDARY TRANSFER CONTROL REGISTER
DI.RCP==:1B7 ;RESET COMMAND LIST POINTER
DI.SCS==:1B10 ;STORE CHANNEL STATUS
DI.DTE==:1B19 ;DISABLE TRANSFER ERROR STOP
DI.CNT==:1777B29 ;NEGATIVE BLOCK COUNT
DI.FNC==:77B35 ;MASSBUS FUNCTION CODE
.DIPBA==:72B5 ;PRIMARY BLOCK ADDRESS REGISTER
.DIPTC==:73B5 ;PRIMARY TRANSFER CONTROLER REGISTER
.DIIVI==:74B5 ;INTERRUPT VECTOR INDEX REGISTER
DI.IVI==:777B35 ;INTERRUPT VECTOR ADDRESS
;BITS APPLICABLE ONLY TO EXTERNAL REGISTERS
DI.CPE==:1B8 ;CONTROL BUS PARITY ERROR
DI.TRA==:1B10 ;TRANSFER RECEIVED
DI.CPA==:1B19 ;CONTROL BUS PARITY BIT
DI.ERD==:177777B35 ;EXTERNAL REGISTER DATA
SUBTTL RH20 CHANNEL DEFINITIONS -- DATAO REGISTER
;FIELDS COMMON TO ALL DATAO OPERATIONS
DO.REG==:77B5 ;REGISTER SELECT FIELD
DO.LDR==:1B6 ;LOAD REGISTER
DO.DRE==:1B9 ;DISABLE REGISTER ACCESS ERROR
DO.DRV==:7B17 ;DRIVE SELECT FIELD
;REGISTER AND REGISTER SPECIFIC BIT DEFINITIONS. NOTE THAT THE BIT
;DEFINITIONS FOR .DOPBA AND .DOPTC ARE THE SAME AS THOSE FOR
;.DOSBA AND .DOSTC RESPECTIVELY.
.DOSBA==:70B5 ;SECONDARY BLOCK ADDRESS REGISTER
DO.BAD==:177777B35 ;BLOCK ADDRESS/FRAME COUNT
.DOSTC==:71B5 ;SECONDARY TRANSFER CONTROL REGISTER
DO.RCP==:1B7 ;RESET COMMAND LIST POINTER
DO.SCS==:1B10 ;STORE CHANNEL STATUS
DO.DTE==:1B19 ;DISABLE TRANSFER ERROR STOP
DO.CNT==:1777B29 ;NEGATIVE BLOCK COUNT
DO.FNC==:77B35 ;MASSBUS FUNCTION CODE
.DOPBA==:72B5 ;PRIMARY BLOCK ADDRESS REGISTER
.DOPTC==:73B5 ;PRIMARY TRANSFER CONTROLER REGISTER
.DOIVI==:74B5 ;INTERRUPT VECTOR INDEX REGISTER
DO.IVI==:777B35 ;INTERRUPT VECTOR ADDRESS
;BITS APPLICABLE ONLY TO EXTERNAL REGISTERS
DO.CEP==:1B18 ;CONTROL BUS EVEN PARITY
DO.ERD==:177777B35 ;EXTERNAL REGISTER DATA
SUBTTL RH20 CHANNEL DEFINITIONS -- EXTERNAL REGISTERS
;THE FOLLOWING EXTERNAL REGISTER DEFINITIONS ARE THE ONES MOST
;COMMONLY USED. IT IS NOT INTENDED TO BE AN EXHAUSTIVE LIST OF
;EXTERNAL REGISTERS.
.DICTR==:0B5 ;CONTROL REGISTER
.DISTR==:1B5 ;STATUS REGISTER
.DIERR==:2B5 ;ERROR REGISTER
.DIMTR==:3B5 ;MAINTENANCE REGISTER
.DIASR==:4B5 ;ATTENTION SUMMARY REGISTER
.DIDAR==:5B5 ;DESIRED ADDRESS REGISTER
.DIDTR==:6B5 ;DRIVE TYPE REGISTER
.DILAR==:7B5 ;LOOK AHEAD REGISTER
.DISNR==:10B5 ;SERIAL NUMBER REGISTER
.DIOFS==:11B5 ;OFFSET REGISTER
.DIDCR==:12B5 ;DESIRED CYLINDER REGISTER
.DICCR==:13B5 ;CURRENT CYLINDER ADDRESS REGISTER
.DIER2==:14B5 ;SECOND ERROR REGISTER
.DIER3==:15B5 ;THIRD ERROR REGISTER
.DIEPR==:16B5 ;ECC POSITION REGISTER
.DIEBR==:17B5 ;ECC BURST (PATTERN) REGISTER
SUBTTL IPA CHANNEL DEFINITIONS -- CONI
CI.PPT==:1B0 ;PORT PRESENT
CI.CPE==:1B6 ;CRAM PARITY ERROR
CI.MER==:1B7 ;MBUS ERROR
CI.IDL==:1B11 ;IDLE
CI.DCP==:1B12 ;DISABLE COMPLETE
CI.ECP==:1B13 ;ENABLE COMPLETE
CI.TYP==:7B17 ;PORT TYPE
.CIKNI==:1 ;NIA20 (KLNI)
.CIKLP==:2 ;CI20 (KLIPA)
CI.EPE==:1B24 ;EBUS PARITY ERROR
CI.FQE==:1B25 ;FREE QUEUE ERROR
CI.DPE==:1B26 ;DATA PATH ERROR
CI.RQA==:1B28 ;RESPONSE QUEUE AVAILABLE
CI.ENA==:1B31 ;ENABLED
CI.MRN==:1B32 ;MICRO-PROCESSOR RUNNING
CI.PIA==:7B35 ;PRIORITY INTERRUPT ASSIGNMENT
SUBTTL IPA CHANNEL DEFINITIONS -- CONO
CO.CPT==:1B18 ;CLEAR PORT
CO.DTE==:1B19 ;DIAGNOSTIC_TEST_EBUS
CO.LAR==:1B21 ;SELECT LATCHED ADDRESS REGISTER
CO.EPE==:1B24 ;CLEAR EBUS PARITY ERROR
CO.FQE==:1B25 ;CLEAR FREE QUEUE ERROR
CO.CQA==:1B27 ;SET COMMAND QUEUE AVAILABLE
CO.RQA==:1B28 ;CLEAR RESPONSE QUEUE AVAILABLE
CO.DIS==:1B30 ;DISABLE
CO.ENA==:1B31 ;ENABLE
CO.MRN==:1B32 ;MICRO-PROCESSOR RUN
CO.PIA==:7B35 ;PRIORITY INTERRUPT ASSIGNMENT
SUBTTL IPA CHANNEL DEFINITIONS -- DATAI/DATAO REGISTER
;DATAO REGISTER AND REGISTER SPECIFIC BIT DEFINITIONS.
.DOLRA==:40B5 ;LOAD RAM ADDRESS REGISTER
DO.RAR==:7777B12 ;RAM ADDRESS REGISTER CONTENTS
DO.LHW==:1B13 ;SELECT LEFT HALF CRAM MICRO-WORD
;COMMON TO DATAI/DATAO
DT.LAR==:7777B12 ;LATCHED ADDRESS REGISTER CONTENTS
DT.CRM==:7777777777B35 ;CRAM HALF-WORD CONTENTS
SUBTTL IPA CHANNEL DEFINITIONS -- MICROCODE
;CRAM ADDRESS DEFINITIONS
MAXCRA==:7777 ;MAXIMUM CRAM ADDRESS
MAXDRA==:1777 ;MAXIMUM DRAM ADDRESS
PPEFST==:7750 ;ADDRESS OF FIRST PLANNED CRAM PARITY ERROR
PPELST==:7777 ;ADDRESS OF LAST PLANNED CRAM PARITY ERROR
CRMSIZ==:MAXCRA+1 ;SIZE OF CRAM
DRMSIZ==:MAXDRA+1 ;SIZE OF DRAM
SUBTTL CHANNEL LOGOUT AREA DEFINITIONS
.CSICW==:0 ;INITIAL CONTROL WORD
CC.OPC==:7B2 ;OPCODE
.CCHLT==:0 ;HALT
.CCJMP==:2 ;JUMP
.CCFDT==:4 ;FORWARD DATA TRANSFER (DO NOT HALT)
.CCRDT==:5 ;REVERSE DATA TRANSFER (DO NOT HALT)
.CCFTH==:6 ;FORWARD DATA TRANSFER (HALT)
.CCRTH==:7 ;REVERSE DATA TRANSFER (HALT)
CC.XFR==:4B2 ;DATA TRANSFER IF SET
CC.HLT==:2B2 ;HALT BIT FOR DATA TRANSFERS
CC.REV==:1B2 ;REVERSE BIT FOR DATA TRANSFERS
CC.WDC==:3777B13 ;WORD COUNT
CC.ADR==:17777777B35 ;ADDRESS
.CSCLP==:1 ;STATUS/COMMAND LIST POINTER
CS.MPE==:1B1 ;MEMORY PARITY ERROR
CS.NAE==:1B2 ;NOT ADDRESS PARITY ERROR
CS.NW0==:1B3 ;NOT WORD COUNT = 0
CS.NXM==:1B4 ;NXM
CS.LTE==:1B9 ;LAST TRANSFER ERROR
CS.RHE==:1B10 ;RH20 ERROR
CS.LWC==:1B11 ;LONG WORD COUNT
CS.SWC==:1B12 ;SHORT WORD COUNT
CS.OVR==:1B13 ;OVERRUN
CS.CLP==:17777777B35 ;CURRENT COMMAND LIST POINTER
.CSDBA==:2 ;CURRENT CCW
CS.COP==:7B2 ;CURRENT CCW OPCODE
CS.CWC==:3777B13 ;CURRENT CCW WORD COUNT
CS.DBA==:17777777B35 ;CURRENT DATA BUFFER ADDRESS
.CSIVI==:3 ;INTERRUPT VECTOR INSTRUCTION
SUBTTL RH11 CHANNEL DEFINITIONS -- REGISTER OFFSETS
.DOCR==:00 ;CONTROL REGISTER
.DOWC==:02 ;WORD COUNT REGISTER
.DOBA==:04 ;BUS ADDRESS REGISTER
.DODA==:06 ;DESIRED ADDRESS (TRACK/SECTOR/FRAME)
.DOCS2==:10 ;STATUS REGISTER
.DOSR==:12 ;DRIVE STATUS REGISTER
.DOER==:14 ;ERROR REGISTER 1
.DOAS==:16 ;ATTENTION SUMMARY
.DOLA==:20 ;LOOK-AHEAD (SECTOR COUNTER/CHECK CHARACTER)
.DODB==:22 ;DATA BUFFER
.DOMR==:24 ;MAINTENANCE REGISTER 1
.DODT==:26 ;DRIVE TYPE
.DOSN==:30 ;SERIAL NUMBER
.DOUC==:32 ;UNIT CONTROL (HEAD OFFSET/TAPE FORMAT)
SUBTTL RH11 CHANNEL DEFINITIONS -- STATUS REGISTER
CS.DLT==:1B20 ;DATA LATE (OVERRUN)
CS.WCE==:1B21 ;WRITE CHECK ERROR
CS.UPE==:1B22 ;UNIBUS PARITY ERROR
CS.NXD==:1B23 ;NON-EXISTANT DRIVE
CS.NEX==:1B24 ;NON-EXISTANT MEMORY
CS.PGE==:1B25 ;PROGRAM ERROR
CS.MXF==:1B26 ;MISSED TRANSFER
CS.DPE==:1B27 ;DATA BUS PARITY ERROR
CS.OR==: 1B28 ;OUTPUT READY
CS.IR==: 1B29 ;INPUT READY
CS.CLR==:1B30 ;CONTROLLER CLEAR
CS.PAT==:1B31 ;PARITY TEST
CS.BAI==:1B32 ;UNIBUS ADDRESS INCREMENT INHIBIT
CS.UNI==:7B35 ;UNIT SELECT
SUBTTL RH11 CHANNEL DEFINITIONS -- CONTROL REGISTER
CR.SC==: 1B20 ;SPECIAL CONDITION (ALL ERRORS)
CR.TRE==:1B21 ;TRANSFER ERROR
CR.CPE==:1B22 ;MASSBUS CONTROL BUS PARITY ERROR
CR.DVA==:1B24 ;DRIVE AVAILABLE
CR.PSL==:1B25 ;PORT SELECT
CR.A17==:1B26 ;ADDRESS 17
CR.A16==:1B27 ;ADDRESS 16
CR.RDY==:1B28 ;READY
CR.IE==: 1B29 ;INTERRUPT ENABLED
CR.FNC==:37B34 ;FUNCTION CODE
CR.GO==: 1B35 ;GO
SUBTTL RH11 CHANNEL DEFINITIONS -- DRIVE STATUS REGISTER
DS.ATA==:1B20 ;ATTENTION ACTIVE
DS.ERR==:1B21 ;COMPOSITE ERROR
DS.PIP==:1B22 ;POSITION IN PROGRESS
DS.MOL==:1B23 ;MEDIUM ON LINE
DS.WRL==:1B24 ;WRITE LOCK
DS.DPR==:1B27 ;DRIVE PRESENT
DS.DRY==:1B28 ;DRIVE READY
SUBTTL RH11 CHANNEL DEFINITIONS -- ERROR REGISTER 1
ER.DCK==:1B20 ;DATA CHECK
ER.UNS==:1B21 ;UNSAFE
ER.OPI==:1B22 ;OPERATION INCOMPLETE
ER.DTE==:1B23 ;DRIVE TIMING ERROR
ER.WCF==:1B30 ;WRITE CLOCK FAIL
ER.FMT==:1B31 ;FORMAT ERROR
ER.PAR==:1B32 ;CONTROL BUS PARITY
ER.RMR==:1B33 ;REGISTER MODIFICATION REFUSED
ER.ILR==:1B34 ;ILLEGAL REGISTER
ER.ILF==:1B35 ;ILLEGAL FUNCTION
SUBTTL MASBUS DEVICE CODES
;CODES DEFINED BY THE HARDWARE
TY.RS4==:002 ;RS04
TY.RS5==:003 ;RS05
TY.T2L==:010 ;LOWEST TM02
TY.T77==:014 ;TU77 (TM03 HAS 40 BIT ON FOR TU77)
TY.T2H==:017 ;HIGHEST TM02
TY.RP4==:020 ;RP04
TY.RP5==:021 ;RP05
TY.RP6==:022 ;RP06
TY.RM3==:024 ;RM03
TY.RP7==:042 ;RP07
TY.T3L==:050 ;LOWEST TM03
TY.T3H==:057 ;HIGHEST TM03
TY.DXA==:060 ;DX20A/TU7X TAPES
TY.DXB==:061 ;DX20B/RP20 DISKS
TY.T78==:101 ;TM78
;FIELDS IN DRIVE TYPE REGISTER
TR.NBA==100000 ;NOT BLOCK ADDRESSED
TR.TAP==40000 ;TAPE DRIVE
TR.MOH==20000 ;MOVING HEAD DEVICE
TR.DRQ==4000 ;DRIVE REQUEST REQUIRED (DUAL-PORT HARDWARE)
TR.TYP==777 ;DRIVE TYPE
SUBTTL DRIVER INTERFACE -- CHARACTERISTICS
;WORD DRVCNF
;*** NOTE ***
;THIS WORD CANNOT BE EXPANDED TO INCLUDE ANY DATA EXCEPT ONE-BIT QUANTITIES.
;THE DEVICE TYPE BYTE MUST RESIDE IN THIS WORD. IT IS FORMATTED IN THIS WAY
;TO ALLOW AUTCON TO CHOOSE A DEVICE TYPE AND MASK OF CHARACTERISTICS, AND
;USE A SINGLE WORD FOR FAST DEVICE DISPATCH TABLE SELECTION.
DR.DVT==:77B5 ;DEVICE TYPE
DR.SFT==:1B25 ;SOFTWARE DEVICE
DR.DDN==:1B26 ;DECIMAL DEVICE NUMBERS IN DDB NAMES
DR.NET==:1B27 ;ENCODE ANF-10 STATION NUMBERS IN DDB NAME
DR.MCD==:1B28 ;MULTI-CPU DEVICE (USE LH OF .CPSAV)
DR.NMC==:1B29 ;DEVICE NAME INCLUDES CPU NUMBER
DR.XAD==:1B30 ;EXTENDED ADDRESSING DRIVER
DR.GCC==:1B31 ;GLOBAL CPU COUNTERS
DR.DPU==:1B32 ;DO DUAL PORTED KDB/UDB LINK FIXUPS
DR.UCK==:1B33 ;UNCACHE KDB
DR.UCU==:1B34 ;UNCACHE UDB
DR.UCD==:1B35 ;UNCACHE DDB
;WORD DRVCF2
DR.KTY==:37B4 ;KONTROLLER TYPE
DR.LIM==:7B7 ;MAXIMUM DEVICES IN SYSTEM
DR.DMX==:777B16 ;MAXIMUM DRIVES ON KONTROLLER
DR.HDN==:777B25 ;HIGHEST DRIVE NUMBER ON KONTROLLER
DR.SCK==:37B30 ;KDB/UDB SECTION NUMBER
DR.SCD==:37B35 ;DDB SECTION NUMBER
;MACRO TO GENERATE DRIVER CHARACTERISTICS WORD
DEFINE DRVCHR (PFX,DVT,LIM,KTY,DMX,HDN,SCK,SCD,FLG),<
XLIST
Z1==<Z2==0> ;;INITIALIZE MASKS
Z1==Z1!<INSVL.(.TY'DVT',DR.DVT)> ;;DEVICE TYPE
Z1==Z1!<FLG> ;;FLAGS
Z2==Z2!<INSVL.('KTY,DR.KTY)> ;;KONTROLLER TYPE
Z2==Z2!<INSVL.(LIM,DR.LIM)> ;;MAXIMUM DEVICES IN SYSTEM
Z2==Z2!<INSVL.(DMX,DR.DMX)> ;;MAXIMUM NUMBER OF DRIVES
Z2==Z2!<INSVL.(HDN,DR.HDN)> ;;HIGHEST DRIVE NUMBER ON KONT
Z2==Z2!<INSVL.(SCK,DR.SCK)> ;;SECTION FOR KDB/UDB
Z2==Z2!<INSVL.(SCD,DR.SCD)> ;;SECTION FOR DDB
LIST
PFX'CNF==Z1
PFX'CN2==Z2
PFX'NAM==<SIXBIT /DVT/> ;;GENERIC DEVICE NAME
PFX'DMW==<HDN+43/44> ;;WORDS NEEDED TO REPRESENT ALL
;; ALL DRIVES IN A BIT MASK
PURGE Z1, Z2 ;;CLEAN UP SYMBOL TABLE
> ;END DEFINE DRVCHR
SUBTTL DRIVER INTERFACE -- DISPATCH TABLE
.ORG 0
DRVLNK::!BLOCK 1 ;LINK TO NEXT DISPATCH
DRVNAM::!BLOCK 1 ;GENERIC DEVICE NAME
DRVKDB::!BLOCK 1 ;PROTOTYPE KDB ADDRESS
DRVKLN::!BLOCK 1 ;PROTOTYPE KDB LENGTH
DRVUDB::!BLOCK 1 ;PROTOTYPE UDB ADDRESS
DRVULN::!BLOCK 1 ;PROTOTYPE UDB LENGTH
DRVDDB::!BLOCK 1 ;PROTOTYPE DDB ADDRESS
DRVDDL::!BLOCK 1 ;PROTOTYPE DDB LENGTH
DRVULP::!BLOCK 1 ;PROTOTYPE UCODE LOADER BLOCK ADDRESS
DRVULO::!BLOCK 1 ;PROTOTYPE UCODE LOADER OFFSET IN KDB
DRVICD::!BLOCK 1 ;PROTOTYPE INTERRUPT CODE ADDRESS
DRVICL::!BLOCK 1 ;PROTOTYPE INTERRUPT CODE LENGTH
DRVCNF::!BLOCK 1 ;CHARACTERISTICS (MOSTLY BITS)
DRVCF2::!BLOCK 1 ;MORE CHARACTERISTICS (BYTES)
DRVPIC::!BLOCK 1 ;PI CHANNEL
DRVINT::!BLOCK 1 ;INTERRUPT SERVICE
DRVDIA::!BLOCK 1 ;DIAG. UUO DISPATCH
DRVADF::! ;STARTING ADDRESS FOR SECTION ONE FIXUP
DRVMDT::!BLOCK 1 ;MONGEN'ED DEVICE TABLE
DRVCKT::!BLOCK 1 ;COMPATIBLE KONTROLLER TABLE
DRVINI::!BLOCK 1 ;INITIALIZATION
DRVCFG::!BLOCK 1 ;AUTOCONFIGURE
DRVLEN::! ;LENGTH OF DISPATCH
.ORG
SUBTTL DRIVER INTERFACE -- DISPATCH TABLE GENERATION
DEFINE DRVDSP (PFX,CHN,DDB,DDL,DIA),<
XWD 0,0 ;;RESERVE SPACE FOR LINK WORD
.LINK .LKDRV,.-1 ;;LINK INTO DRIVER DISPATCH CHAIN
XLIST
EXP PFX'NAM ;;GENERIC DEVICE NAME
EXP PFX'KDB,PFX'KLN ;;PROTOTYPE KDB ADDRESS AND LENGTH
EXP PFX'UDB,PFX'ULN ;;PROTOTYPE UDB ADDRESS AND LENGTH
EXP DDB,DDL ;;PROTOTYPE DDB ADDRESS AND LENGTH
EXP PFX'ULP,PFX'ULB ;;PROTOTYPE UCODE BLOCK AND KDB OFFSET
EXP PFX'ICD,PFX'ICL ;;PROTOTYPE INTERRUPT CODE AND LENGTH
EXP PFX'CNF ;;CHARACTERISTICS
EXP PFX'CN2 ;;MORE CHARACTERISTICS
EXP CHN ;;PI CHANNEL
EXP PFX'INT ;;INTERRUPT SERVICE
EXP DIA ;;DIAG. UUO DISPATCH
EXP PFX'MDT## ;;MONGEN'ED DEVICE TABLE
EXP PFX'CKT ;;COMPATIBLE KONTROLLER TABLE
EXP 0 ;;INITIALIZATION
EXP PFX'CFG ;;AUTOCONFIGURE
LIST
;;DRVLEN==:DRVLEN ;;DETECT MULTIPLY DEFINED GLOBALS
> ;END DEFINE DRVDSP
SUBTTL DRIVER INTERFACE -- MONGEN'ED DEVICE TABLE
;MONGEN'ED DEVICE TABLE DEFINITIONS
;
;THE MONGEN'ED DEVICE TABLE (MDT) IS USED TO SPECIFY NON-STANDARD DEVICE
;CONDITIONS OR PARAMETERS THAT CANNOT BE DETERMINED DYNAMICALLY BY QUERYING
;THE DEVICE. STORAGE IS RESERVED FOR THE FOLLOWING QUANTITIES:
;
; CPU CPU NUMBER
; DVC KL10 = DEVICE CODE
; IVI KS10 = INTERRUPT VECTOR INDEX
; UNI MASSBUS UNIT
; DRV PHYSICAL DRIVE NUMBER
; FLG MISCELLANEOUS FLAGS
; DAT DEVICE DEPENDENT DATA
;
;THESE QUANTITIES ARE SPECIFIED THROUGH THE USE OF THE MD???? MACROS
;WHERE ???? IS THE PROCESSOR TYPE (I.E. KL10). THE MACROS ARE
;EXPANDED IN COMDEV INTO TABLES FOR EACH DRIVER WHICH IS LOADED IN
;THE MONITOR. ON THE KL10, THE TABLES CONSIST OF TWO-WORD PAIRS; THE
;FIRST WORD SPECIFYING THE DEVICE IN QUESTION, AND THE SECOND
;CONTAINING DEVICE DEPENDENT INFORMATION. ON THE KS10, THE TABLES
;OF THREE-WORD TRIPLETS; THE FIRST WORD SPECIFYING THE DEVICE IN
;QUESTION, THE SECOND SPECIFYING THE UNIBUS ADDRESS OF THE DEVICE,
;AND THE THIRD CONTAINING DEVICE DEPENDENT INFORMATION.
MD.CPU==:7B2 ;CPU NUMBER
IFN FTKL10,<MD.DVC==:177B9> ;<DEVICE CODE>/4
IFN FTKS10,<MD.IVI==:177B9> ;<INTERRUPT VECTOR INDEX>/4
MD.UNI==:7B12 ;MASSBUS UNIT NUMBER
MD.DRV==:377B20 ;DRIVE NUMBER
MD.KON==:1B21 ;KONTROLLER DEFINITION
MD.ALL==:1B22 ;ALL UNITS ON KONTROLLER
IFN FTKS10,<MD.UAD==:777777B35> ;UNIBUS ADDRESS (SECOND WORD OF MDT)
DEFINE MDKL10 (CPU,DVC,UNI,DRV,FLG,DAT),<
IFN FTKL10,<
ZZ==<ZZZ==0> ;;INITIALIZE MASK AND FLAGS
ZZ==ZZ!<INSVL.(CPU,MD.CPU)> ;;CPU NUMBER
ZZ==ZZ!<INSVL.(<DVC/4>,MD.DVC)> ;;<DEVICE CODE>/4
ZZ==ZZ!<INSVL.(UNI,MD.UNI)> ;;MASBUS UNIT NUMBER
ZZ==ZZ!<FLG> ;;INCLUDE FLAGS
EXP <ZZ>,<DAT> ;;STORE RESULTS
>; END IFN FTKL10
> ;END DEFINE MDKL10
DEFINE MDKS10 (CPU,IVI,UAD,UNI,DRV,FLG,DAT),<
IFN FTKS10,<
ZZ==<ZZZ==0> ;;INITIALIZE MASK AND FLAGS
ZZ==ZZ!<INSVL.(CPU,MD.CPU)> ;;CPU NUMBER
ZZ==ZZ!<INSVL.(<IVI/4>,MD.IVI)> ;;<INTERRUPT VECTOR INDEX>/4
ZZ==ZZ!<INSVL.(UNI,MD.UNI)> ;;MASBUS UNIT NUMBER
ZZ==ZZ!<FLG> ;;INCLUDE FLAGS
ZZZ==UAD ;;UNIBUS ADDRESS
EXP <ZZ>,<ZZZ>,<DAT> ;;STORE RESULTS
>; END IFN FTKS10
>; END DEFINE MDKS10
;MACRO TO RESERVE STORAGE IN THE MONGEN'ED DEVICE TABLE FOR PER-CPU
;COUNTERS TO CONTROL THE ASSIGNMENT OF CONTROLLER OR DEVICE NAMES.
DEFINE MDCPUN (C1,C2,C3,C4,C5,C6),<
BYTE (5) C1,C2,C3,C4,C5,C6,00
BYTE (5) 00,00,00,00,00,00,00
> ;END DEFINE MDCPUN
;MACRO TO RESERVE MONGEN'ED DEVICE TABLE SLOTS FOR THOSE DEVICES WHICH
;MAY BE DYNAMICALLY CONFIGURED AS A RESULT OF A NON-AUTOCONFIGURE ACTION
;OF SOME MONITOR SERVICE ROUTINE. FOR EXAMPLE, CONSOLE FRONT END DEVICE
;INFORMATION IS PASSED TO THE MONITOR DURING SYSTEM INITIALIZATION. THIS
;DATA IS PATCHED INTO THE MONGEN'ED DEVICE TABLE FOR PRINTERS AND CARD
;READERS, AND IS USED BY THE APPROPRIATE DEVICE DRIVERS WHEN CALLED BY
;AUTCON.
DEFINE MDPATD (NUM),<
REPEAT <NUM>*3,<EXP -1,0>
> ;END DEFINE MDPATD
;MACRO TO TERMINATE THE MONGEN'ED DEVICE TABLE
DEFINE MDTERM,<EXP 0>
DEFINE KDBBEG (PFX,SIZ),<
...BAS==.
...END==...BAS+'SIZ
...SIZ=='SIZ
IFN FTKL10,<
SETWRD (KDBCNI,<CONI 000,T1>)
SETWRD (KDBCNO,<CONO 000,(T1)>)
SETWRD (KDBDTI,<DATAI 000,T2>)
SETWRD (KDBDTO,<DATAO 000,T2>)
SETWRD (KDBBKI,<BLKI 000,T2>)
SETWRD (KDBBKO,<BLKO 000,T2>)
>; END IFN FTKL10
> ;END DEFINE KDBBEG
DEFINE KDBEND,<
.ORG ...END
PURGE ...BAS, ...END, ...SIZ
>
DEFINE SETWRD (OFS,VAL),<
.ORG ...BAS+'OFS
VAL
>
DEFINE UDBBEG (PFX,SIZ),<
...BAS==.
...END==...BAS+'SIZ
...SIZ=='SIZ
> ;END DEFINE UDBBEG
DEFINE UDBEND,<
.ORG ...END
PURGE ...BAS, ...END, ...SIZ
>
DEFINE DDBBEG (PFX,SIZ),<
...BAS==.
...END==...BAS+'SIZ
...SIZ=='SIZ
> ;END DEFINE DDBBEG
DEFINE DDBEND,<
.ORG ...END
PURGE ...BAS, ...END, ...SIZ
>
DEFINE EQUATE (TYP,VAL,SYM),<
XLIST
IRP SYM,<
IFIDN <TYP><GLOBAL>,<SYM==:VAL>
IFIDN <TYP><LOCAL>,< SYM==VAL>
> ;;END IRP SYM
LIST
> ;END DEFINE EQUATE
DEFINE WID (MASK),<<^L<-<<MASK>_<^L<MASK>>>-1>>>
DEFINE POS (MASK),<<^L<<MASK>&<-<MASK>>>>>
DEFINE POINTR (LOC,MASK),<<POINT WID(MASK),LOC,POS(MASK)>>
DEFINE INSVL. (VALUE,MASK),<<<<VALUE>B<POS(<MASK>)>>&<MASK>>>
SUBTTL CHANNEL DATA BLOCK (CHN)
.ORG 0
CHNBSY::!BLOCK 1 ;CHANNEL IDLE/BUSY WORD
;=1 = IDLE
; 0 = BUSY
;+N = BUSY
;THIS MUST BE WORD ZERO OF THE CHANNEL DATA BLOCK
;SO AOSG @KDBCHN(W) WILL TEST AND SET BUSY IN ONE
;INSTRUCTION
CHNSYS::!BLOCK 1 ;ADDRESS OF NEXT CHANNEL IN SYSTEM
CHNLUE::!BLOCK 1 ;ADDRESS OF LAST UDB WITH SOFT OR HARD ERROR
CHNICW::!BLOCK 1 ;INITIAL CONTROL WORD ON LAST SORT OR HARD ERROR
;(CONTENTS OF EVEN LOW CORE WORD)
CHNFCW::!BLOCK 1 ;FINAL CONTROL WORD ON LAST SOFT OR HARD ERROR
;(WHAT CHANNEL STORES IN OLD LOW CORE WORD)
;LH = PRESENT CONTENTS OF CONTROL WORD ADDRESS COUNTER
;RH = PRESENT CONTENTS OF DATA ADDRESS COUNTER
;BECAUSE EACH DEVICE HANDLES ERROR TERMINATION
;DIFFERENTLY ON THE CHANNEL, THE SOFTWARE STORES 3
;CONTROL WORDS AND 3 DATA WORDS 'AROUND' THE PROBLEM
;AREA AS INDICATED BY THE LH AND RH OF WHAT CHANNEL
;STORES IN .CHFCW. NO ATTEMPT IS MADE BY THE MONITOR
;TO DETERMINE WHICH OF THE 3 WORDS IS REALLY THE LAST
;CONTROL OR DATA WORD. THAT MUST BE DONE BY THE
;INVESTIGATING PERSONNEL.
CHNCW2::!BLOCK 1 ;COMMAND WORD -2 ON LAST HARD OR SOFT ERROR
CHNCW1::!BLOCK 1 ;COMMAND WORD -1 ON LAST HARD OR SOFT ERROR
CHNCW0::!BLOCK 1 ;COMMAND WORD ON LAST HARD OR SOFT ERROR
CHNDW2::!BLOCK 1 ;DATA WORD -2 ON LAST HARD OR SOFT ERROR
CHNDW1::!BLOCK 1 ;DATA WORD -1 ON LAST HARD OR SOFT ERROR
CHNDW0::!BLOCK 1 ;DATA WORD ON LAST HARD OR SOFT ERROR
CHNMPE::!BLOCK 1 ;NUMBER OF MEMORY PARITIES
CHNDPE::!BLOCK 1 ;NUMBER OF DATA PARITIES (FROM DEVICE)
CHNNXM::!BLOCK 1 ;NUMBER OF NXMS OR DATA LATES (OVER RUN)
CHNCSR::! ;LH = BITS TO REQUEST CPU TO SWEEP CORE ON BEHALF OF
; CHANNEL. STORED IN .CPAEF BY CHN MPE ROUTINE
CHNLDE::!BLOCK 1 ; RH=LAST DEVICE DATA BLOCK ADR
CHNETW::!BLOCK 1 ;EXPECTED TERMINATION CONTROL WORD OF LAST ERROR
CHNECT::!BLOCK 1 ;ERROR COUNT SO FAR ON CURRENT DATA TRANSFER SET TO
;-1 = UNIT IS RECALIBRATING
; 0 = INCREMENTED AND TESTED BY FILSER (TO DSKTRY)
; NOT LOOKED AT BY INTERRUPT ROUTINE
CHNRCT::!BLOCK 1 ;RECALIBRATE ERROR COUNT ON CURRENT DATA TRANSFER
;START AT 0 AND GOES TO RCLTRY. INCREMENTED EVERY
;TIME CHNECT COUNTS UP TO DSKTRY
;TOTAL TRIES = DSKTRY * RCLTRY
CHNQUE::!BLOCK 1 ;LH = ADDRESS OF FIRST (LONGEST WAITING) DDB
; WAITING TO DO A DATA TRANSFER (TW QUEUE)
;RH = JOB NUMBER FOR DDB WHOSE ADDRESS IS IN LH
;BOTH HALVES = 0 IF NO FILES WAITING TO TRANSFER,
;SO A FAST TEST FOR EMPTY TRANSFER WAIT QUEUE
;NOTE - A FILE IN T STATES IS NOT IN TW QUEUE
CHNTYP::!BLOCK 1 ;CHANNEL TYPE AND FLAGS
;LH BITS (DEFINED AS 18-BIT QUANTITIES)
CP.DX1==:200000 ;DX10
CP.RH2==:100000 ;RH20
CP.R11==:40000 ;RH11
CP.LP2==:20000 ;UNIBUS/LP20
CP.CD2==:10000 ;UNIBUS/CD20
CP.KLP==:4000 ;KLIPA
CP.KNI==:2000 ;KLNI
;*** BITS 12-14 FOR CUSTOMER USE
CP.SAX==:40 ;SA10
CP.SWF==:1 ;CACHE SWEEP MUST BE DONE BEFORE INTERRUPT EXIT
CHNIFP::!BLOCK 1 ;INITIAL FAIRNESS COUNT FOR POSITIONING UNITS
;ON THIS CHANNEL AFTER A DATA TRANSFER INTERRUPT.
;USED TO SET CHNCFP WHEN IT COUNTS TO ZERO. AN
;INITIAL VALUE OF 1 (OR 0) REDUCES THE SYSTEM
;POSITION ON A FIRST COME, FIRST SERVE BASIS
;(RATHER THAN THE NEAREST POSITION) ALL THE TIME
CHNCFP::!BLOCK 1 ;CURRENT FAIRNESS COUNT FOR POSITIONING UNITS ON
;THIS CHANNEL AFTER A DATA TRANSFER INTERRUPT
;DECREMENTED BY 1 EACH DATA TRANSFER INTERRUPT
;ON THIS CHANNEL. I.E. NUMBER OF DATA TRANSFER
;INTERRUPTS LEFT BEFORE A POSITIONING REQUEST IS
;SELECTED ON THE BASIS OF LONGEST WAITING FILE
;("FAIR") RATHER THAN NEAREST (INCLUDING "ON
;CYLINDER") ("FAST")
CHNIFT::!BLOCK 1 ;INITIAL FAIRNESS COUNT FOR DATA TRANSFERS ON THIS
;CHANNEL. USED TO SET CHNCFT WHEN IT COUNTS TO 0
CHBSCN::!BLOCK 1 ;SOFTWARE CHANNEL NUMBER - WORD ADDRESS
CHSSCN==:^D9 ;BYTE SIZE
CHNSCN==:^D8 ;BYTE POINTER POSITION
CHNCFT::!BLOCK 1 ;CURRENT FAIRNESS COUNT FOR DATA TRANSFERS ON THIS
;CHANNEL. DECREMENTED BY 1 FOR EACH DATA TRANSFER
;INTERRUPT. WHEN REACHES 0, A DATA TRANSFER IS
;SELECTED ON THE BASIS OF THE LONGEST WAITING FILE
;WHICH IS IN POSITION ("FAIR") RATHER THAN THE
;SHORTEST LATENCY ("FAST").
CHNIFS::!BLOCK 1 ;INITIAL FAIRNESS COUNT FOR SWAPPING ON THIS CHANNEL
CHNCFS::!BLOCK 1 ;CURRENT FAIRNESS COUNT FOR SWAPPING ON THIS CHANNEL.
;DECREMENTED BY 1 EACH TIME A SWAP OR PAGE OPERATION IS
;STARTED. A FILE OPERATION IS STARTED IF THIS COUNT IS
;;NEGATIVE AND FILE I/O IS PENDING
CHNNUM::!BLOCK 1 ;LH = -1 ON ERRORS, ELSE 0
;RH = NUMBER OF 128 WORD BLOCKS BEING TRANSFERRED
; ON THIS CHANNEL ON THE CURRENT TRANSFER. SETUP
; AT SAME TIME AS CHANNEL COMMAND LIST. NOT
; CLEARED AT END OF TRANSFER SO GOOD FOR LOOKING
; AT IN LIGHTS.
CHNQUL::!BLOCK 1 ;LENGTH OF TRANSFER WAIT QUEUE
CHNTCW::!BLOCK 1 ;EXPECTED TERMINATION CONTROL WORD. USED TO CHECK FOR
;ABNORMAL CHANNEL TERMINATION WITHOUT ERROR INDICATIONS
;FROM CONTROLLER
CHNCUA::!BLOCK 1 ;CURRENT UNIT ACTIVE ON CHANNEL
IFN FTKS10,<
CHNUBA::!BLOCK 1 ;UNIBUS ADAPTER STATUS REGISTER ADDRESS
;LH = UNIBUS ADAPTER NUMBER
;RH = UNIBUS STATUS WORD ADDRESS
CHNIMR::!BLOCK 1 ;ADDRESS OF INITIAL MAPPING REGISTER FOR THIS DEVICE
CHNMRC::!BLOCK 1 ;NUMBER OF MAPPING REGISTERS AVAILABLE TO THIS DEVICE
CHNIEA::!BLOCK 1 ;INITIAL ELEVEN STYLE ADDRESS FOR CURRENT TRANSFER
CHNBTC::!BLOCK 1 ;ELEVEN STYLE BYTE COUNT FOR CURRENT TRANSFER
CHNNXF::!BLOCK 1 ;NO TRANSFER FLAG
;-1 = NO TRANSFER
; 0 = NORMAL TRANSFER
;NO TRANSFER REQUESTS COME DOWN FROM FILSER WHEN IT
;WANTS TO READ A BLOCK BUT DO NO DATA TRANSFER ANYWHERE
;TO VERIFY THAT A PARTICULAR BLOCK IN FACT HAS ERRORS
CHNDBF::!BLOCK 1 ;DUMMY 1-WORD BUFFER FOR BUS ADDRESS INHIBIT USAGE
;FOR EXAMPLE: READ A SECTOR, BUT TRANSFER NO DATA
CHNRRV::!BLOCK 1 ;READ REVERSE FLAG
;-1 = READ REVERSE
; 0 = READ NORMAL
>;END IFN FTKS10
CHNDVC::!BLOCK 1 ;AUTOCONFIGURATION CPU/DEVICE WORD
;FORMAT: <CPU>B2 + <DEVICE CODE>/4
CHBCPU==:CHNDVC ;OWNING CPU NUMBER
CHSCPU==^D3 ;BYTE SIZE
CHNCPU==^D2 ;BYTE POINTER POSITION
CHNTBP::!BLOCK 1 ;AOBJN POINTER TO KONTROLLERS ON THIS CHANNEL
CHNKTB::!BLOCK <LENKTB==:20> ;STORAGE FOR KDB ADDRESSES
CHNLEN::! ;LENGTH OF CHANNEL DATA BLOCK
.ORG
SUBTTL KONTROLLER DATA BLOCK (KDB) -- OFFSETS COMMON TO ALL CONTROLLERS
.ORG 0
KDBNAM::!BLOCK 1 ;SIXBIT NAME OF CONTROLLER
KDBNXT::!BLOCK 1 ;LINK TO NEXT CONTROLLER IN SYSTEM
KDBCAM::!BLOCK 1 ;CPU ACCESSIBILITY MASK
KDBCHN::!BLOCK 1 ;CHANNEL DATA BLOCK ADDRESS
KDBIUN::!BLOCK 1 ;INITIAL POINTER TO UNITS
KDBFUN::!BLOCK 1 ;FINAL POINTER TO UNITS
KDBCUN::!BLOCK 1 ;CURRENT POINTER TO UNITS
KDBIUM::!BLOCK 1 ;OFFSET TO IGNORE MASK
KDBNUM::!BLOCK 1 ;OFFSET TO NEW UNIT MASK
KDBICP::!BLOCK 1 ;ADDRESS OF INITIAL CHANNEL PROGRAM
KDBDSP::!BLOCK 1 ;ADDRESS OF CONTROLLER DISPATCH TABLE
KDBSER::!BLOCK 2 ;KONTROLLER SERIAL NUMBER
KDBSTS::!BLOCK 1 ;STATUS WORD
KD.MPD==:1B0 ;MULTI-PORTED DEVICE
KD.APC==:1B1 ;ALL PORTS CONFIGURED
KD.MPT==:17B5 ;MAXIMUM NUMBER OF PORTS
KDBPCC::!BLOCK 1 ;# WORDS,,STARTING OFFSET INDICATING
; PHYSICALLY CONTIGUOUS CORE REQUIREMENTS
IFN FTKL10,<
KDBCSO::!BLOCK 1 ;CONSO SKIP CHAIN POINTER
> ;END IFN FTKL10
KDBVIN::!BLOCK 1 ;VECTOR INTERRUPT POINTER
KDBDVC::!BLOCK 1 ;DEVICE CODE OR UNIBUS BASE ADDRESS
KDBIOB::! ;START OF WORDS CONTAINING I/O INSTRUCTIONS
KDBCNI::!BLOCK 1 ;CONI DEV,T1
KDBCNO::!BLOCK 1 ;CONO DEV,(T1)
KDBDTI::!BLOCK 1 ;DATAI DEV,T2
KDBDTO::!BLOCK 1 ;DATAO DEV,T2
KDBBKI::!BLOCK 1 ;BLKI DEV,T2
KDBBKO::!BLOCK 1 ;BLKO DEV,T2
KDBIOE::! ;END OF WORDS CONTAINING I/O INSTRUCTIONS
KDBIVI::!BLOCK 1 ;DATAO CONTENTS TO SET UP INTERRUPT VECTOR
KDBUNI::!BLOCK 1 ;MASSBUS UNIT NUMBER,,ATTENTION BIT
;UNIT = -1 ON NON-MULTI UNIT KONTROLLERS
KDBSIZ::! ;LENGTH OF COMMON KDB
.ORG
SUBTTL UNIT DATA BLOCK (UDB) -- OFFSETS COMMON TO ALL KONTROLLERS
.ORG 0
UDBNAM::!BLOCK 1 ;UNIT NAME
UDBPDN::!BLOCK 1 ;PHYSICAL DRIVE NUMBER
UDBDSN::!BLOCK 2 ;DRIVE SERIAL NUMBER
UDBKDB::!BLOCK <MXPORT==:4> ;KDB ADDRESSES FOR EACH PORT
UDBCAM::!BLOCK 1 ;CPU ACCESSIBILITY MASK
UDBDDB::!BLOCK 1 ;NORMAL DDB ADDRESS
UDBPCC::!BLOCK 1 ;NUMBER OF WORDS,,STARTING OFFSET INDICATING
; PHYSICALLY CONTIGUOUS CORE REQUIREMENTS
UDBSIZ::! ;LENGTH OF COMMON UDB
.ORG
SUBTTL GENERAL DEFINITIONS -- SXX -- IBM CHANNEL SENSE BYTES
;SENSE BYTES COMMON TO ALL IBM CHANNEL DEVICES ARE DEFINED HERE;
;DEVICE-DEPENDENT SENSE BYTES ARE DEFINED LATER.
S00WRD==0 ;SENSE BYTE 0 (PDP-10 WORD 0 BYTE 0)
S00REJ==1B0 ;COMMAND REJECT
S00IRQ==1B1 ;INTERVENTION REQUIRED
S00BOC==1B2 ;BUS OUT CHECK
S00EQP==1B3 ;EQUIPMENT CHECK
S00DCK==1B4 ;DATA CHECK
S00OVR==1B5 ;OVERRUN
S00WCZ==1B6 ;WORD COUNT ZERO
S00DCC==1B7 ;DATA CONVERTER CHECK
S01WRD==0 ;SENSE BYTE 1 (PDP-10 WORD 0 BYTE 1)
S02WRD==0 ;SENSE BYTE 2 (PDP-10 WORD 0 BYTE 2)
S03WRD==0 ;SENSE BYTE 3 (PDP-10 WORD 0 BYTE 3)
S04WRD==1 ;SENSE BYTE 4 (PDP-10 WORD 1 BYTE 0)
S05WRD==1 ;SENSE BYTE 5 (PDP-10 WORD 1 BYTE 1)
S06WRD==1 ;SENSE BYTE 6 (PDP-10 WORD 1 BYTE 2)
S07WRD==1 ;SENSE BYTE 7 (PDP-10 WORD 1 BYTE 3)
S08WRD==2 ;SENSE BYTE 8 (PDP-10 WORD 2 BYTE 0)
S09WRD==2 ;SENSE BYTE 9 (PDP-10 WORD 2 BYTE 1)
S10WRD==2 ;SENSE BYTE 10 (PDP-10 WORD 2 BYTE 2)
S11WRD==2 ;SENSE BYTE 11 (PDP-10 WORD 2 BYTE 3)
S12WRD==3 ;SENSE BYTE 12 (PDP-10 WORD 3 BYTE 0)
S13WRD==3 ;SENSE BYTE 13 (PDP-10 WORD 3 BYTE 1)
S14WRD==3 ;SENSE BYTE 14 (PDP-10 WORD 3 BYTE 2)
S15WRD==3 ;SENSE BYTE 15 (PDP-10 WORD 3 BYTE 3)
S16WRD==4 ;SENSE BYTE 16 (PDP-10 WORD 4 BYTE 0)
S17WRD==4 ;SENSE BYTE 17 (PDP-10 WORD 4 BYTE 1)
S18WRD==4 ;SENSE BYTE 18 (PDP-10 WORD 4 BYTE 2)
S19WRD==4 ;SENSE BYTE 19 (PDP-10 WORD 4 BYTE 3)
S20WRD==5 ;SENSE BYTE 20 (PDP-10 WORD 4 BYTE 0)
S21WRD==5 ;SENSE BYTE 21 (PDP-10 WORD 4 BYTE 1)
S22WRD==5 ;SENSE BYTE 22 (PDP-10 WORD 4 BYTE 2)
S23WRD==5 ;SENSE BYTE 23 (PDP-10 WORD 4 BYTE 3)
SUBTTL DISK DEFINITIONS -- KONTROLLER TYPES
;KONTROLLER TYPES
TYPDR==:0 ;DR (FUTURE DRUM)
TYPFH==:1 ;FH (RC10/RM10B BURROUGHS DISK OR BRYANT DRUM)
TYPDP==:2 ;DP (RP10 MEMOREX)
TYPMD==:3 ;MD (BRYANT MASS [MOBY] DISK)
TYPFS==:4 ;FS (RH10)
TYPRP==:5 ;RP (RH10/RH11/RH20)
TYPRN==:6 ;RN (RH20/DX20/RP20CT)
TYPRA==:7 ;RA (CI20/HSC)
;*** 10 - 12 RESERVED FOR FUTURE USE BY DIGITAL
;*** 13 - 17 RESERVED FOR CUSTOMER TYPE CODES
TYPDS==:17 ;DS (SA10/IBM CHANNEL DISKS)
SUBTTL DISK DEFINITION -- SXX - IBM CHANNEL SENSE BYTES
;S01WRD==0 ;SENSE BYTE 1 (PDP-10 WORD 0 BYTE 1)
D01PME==1B8 ;PERMANENT ERROR
D01ITF==1B9 ;INVALID TRACK FORMAT
D01EOC==1B10 ;END OF CYLINDER
;BIT 11 UNUSED
D01NRF==1B12 ;NO RECORD FOUND
D01FPR==1B13 ;FILE PROTECTED
D01WRL==1B14 ;WRITE-LOCKED
D01OPI==1B15 ;OPERATION INCOMPLETE
;S02WRD==0 ;SENSE BYTE 2 (PDP-10 WORD 0 BYTE 2)
D02COR==1B17 ;CORRECTABLE ERROR
D02EDP==1B19 ;ENVIRONMENTAL DATA PRESENT
;S07WRD==7 ;SENSE BYTE 7 (PDP-10 WORD 1 BYTE 3)
D07FMC==377B31 ;FORMAT/MESSAGE CODE
FMCECC==123 ;FORMAT 5, MESSAGE 3="CORRECTABLE DATA AREA"
;S15WRD==3 ;SENSE BYTE 15 (PDP-10 WORD 3 BYTE 3)
D15RD1==377B31 ;1ST OF 3 BYTES OF RESTART DISPLACEMENT
;S16WRD==4 ;SENSE BYTE 16 PDP-10 WORD 4 BYTES 0,1)
D16RD2==177777B15 ;2ND AND 3RD OF 3 BYTES OF RESTART DISPLACEMENT
D16ERD==177777B31 ;1ST AND 2ND OF 2 BYTES OF ERROR DISPLACEMENT
;S20WRD==5 ;SENSE BYTE 20 PDP-10 WORD 5
D16EC1==377B7 ;1ST OF 3 ECC PATTERN BYTES
D16EC2==377B15 ;2ND OF 3 ECC PATTERN BYTES
D16EC3==377B23 ;3RD OF 3 ECC PATTERN BYTES
;S23WRD==5 ;SENSE BYTE 23 (PDP-10 WORD 4 BYTE 3)
D23CHT==1B31 ;CHANNEL TRUNCATION OCCURRED
SUBTTL DISK DEFINITIONS -- COMMON KONTROLLER DATA BLOCK MACRO
DEFINE XXKON (PFX),<
KDBBEG (PFX,\PFX'XKLN)
SETWRD (KDBNAM,<SIXBIT /PFX/>)
SETWRD (KDBIUN,<XWD -PFX'XDMX,PFX'XUTB>)
SETWRD (KDBCUN,<XWD -PFX'XDMX,PFX'XUTB>)
SETWRD (KDBIUM,<PFX'XIUM>)
SETWRD (KDBNUM,<PFX'XNUM>)
SETWRD (KONPTR,<PFX'XUTB(P3)>)
SETWRD (KONREG,\<PFX'ERNO>)
SETWRD (KONEBK,PFX'XEBK)
SETWRD (KONRED,<XWD PFX'BMX,PFX'XRED>)
SETWRD (KONRDS,PFX'XRDS)
SETWRD (KONRDF,PFX'XRDF)
SETWRD (KONRDC,<XWD PFX'RDC,PFX'XRDC>)
SETWRD (KONWRT,PFX'XWRT)
SETWRD (KONWTS,PFX'XWTS)
SETWRD (KONWTF,PFX'XWTF)
SETWRD (KONWTC,<XWD PFX'RDC,PFX'XWTC>)
SETWRD (KONUNL,<XWD PFX'UNL,PFX'XUNL>)
SETWRD (KONPOS,<XWD PFX'FIX,PFX'XPOS>)
SETWRD (KONLTM,<XWD PFX'MX,PFX'XLTM>)
SETWRD (KONUPA,PFX'XUPA)
SETWRD (KONCPY,<XWD PFX'CPY,PFX'XCPY>)
SETWRD (KONHWP,<PFX'XHWP>)
SETWRD (KONRCL,<XWD PFX'DRB,PFX'XRCL>)
SETWRD (KONSTP,PFX'XSTP)
SETWRD (KONERR,<XWD PFX'OFS,PFX'XERR>)
SETWRD (KONECC,<XWD PFX'ECA,PFX'XECC>)
SETWRD (KONRRG,PFX'XREG)
SETWRD (KONCCM,PFX'XCCM)
SETWRD (KONALV,PFX'XALV)
SETWRD (KONRLD,PFX'XRLD)
SETWRD (KONEDL,PFX'XEDL)
SETWRD (KONSEC,PFX'XSEC)
>; END DEFINE XXKON
SUBTTL DISK DEFINITIONS -- KON - KONTROLLER DATA BLOCK
CPUMSK==:77 ;SYMBOL FOR MASK OF ALL CPU BITS
.ORG KDBSIZ
KONBSY::!BLOCK 1 ;LH = KONTROLLER BUSY FLAG (SIGN BIT)
KOPBSY==:400000 ;KONTROLLER IS BUSY WHEN SET
IFN FTCIDSK,<
KOPBND==:1 ;THIS KON ALREADY BOUND (ONCE ONLY)
>; END IFN FTCIDSK
KONCNT::!BLOCK 1 ;NUMBER OF WORDS IN TRANSFER ON FORMAT
;DISPATCH TABLE
KONRED::!BLOCK 1 ;READ
KONBMX==:KONRED ;BLOCK MULTIPLEX KONTROLLER
KOPBMX==:(1B0) ;BLOCK MULTIPLEX KONTROLLER
;MUST BE SIGN BIT
KOBKTP==:KONRED ;KONTROLLER TYPE
KOSKTP==^D6 ;BYTE SIZE
KONKTP==^D8 ;BYTE PTR POS
KONRDS::!BLOCK 1 ;READ, STOP ON ERR
KOBKNM==:KONRDS ;KONTROLLER NUMBER
KOSKNM==^D6 ;BYTE SIZE
KONKNM==^D8 ;BYTE PTR POS
KONRDF::!BLOCK 1 ;READ HEADER AND DATA
KONRDC::!BLOCK 1 ;READ IN 10/11 COMPAT. MODE
KONWRT::!BLOCK 1 ;WRITE
KONWTS::!BLOCK 1 ;WRITE, STOP ON ERR
KONCNA==:KONWTS ;CREDITS NOT AVAILABLE
KOPCNA==:(1B0) ;DON'T QUEUE ANYTHING MORE
;MUST BE SIGN BIT
KONWTF::!BLOCK 1 ;WRITE FORMAT
KONWTC::!BLOCK 1 ;WRITE IN 10/11 COMPAT. MODE
KONUNL::!BLOCK 1 ;UNLOAD A DRIVE
KONPOS::!BLOCK 1 ;POSITION
KOPFIX==:400000 ;BIT 0=1 IF FIXED HEAD DEV
KOPPWX==:200000 ;BIT 1=1 IF CAN SEEK WHILE XFER IN PROGRESS
KONLTM::!BLOCK 1 ;RETURN TIME TO BEGINNING OF TRANSFER
KONMX==:KONLTM ;MULTI XFERS
KOPMX==400000 ;DRIVE CAN DO MULTIPLE XFERS AT SAME TIME
KONUPA::!BLOCK 1 ;TEST IF KONTROLLER IS ON-LINE
KONDWN==:KONUPA ;KONTROLLER IS DOWN
KOPDWN==:400000 ;THE BIT (SET BY KONCHK - NOT BY XXXUPA)
;KONTROLLER OFFLINE WHEN SYSTEM STARTED
;AND OPERATOR COULD NOT PUT IT ONLINE
;SKIP RETURN IF YES, NO SKIP IF NOT
KOPWHL==:200000 ;WRITE-HEADER-LOCKOUT SWITCH IS "WRONG"
KONMPS==:KONUPA ;WORD OFFSET TO TEST KOPMPS BIT
KOPMPS==:100000 ;THIS KDB REPRESENTS A MICROCODED
;DISK CONTROLLER AND THE MICROPROCESSOR
;HAS STOPPED.
KONCPY::!BLOCK 1 ;DETERMINE TYPE & CAPACITY OF UNIT
KOPIDL==:400000 ;KONTROLLER MUST BE IDLE TO READ UNIT TYPE
KOPUHE==:200000 ;UNIT HAD ERROR OF ANY KIND - LH T4 VALUE
KOPNSU==:100000 ;NO SUCH UNIT - LH T4 VALUE
KONRCL::!BLOCK 1 ;RECALIBRATE THIS UNIT
KONDRB==:KONRCL ;WORD OFFSET TO TEST KOPDRB BIT
KOPDRB==:(1B0) ;DRIVER HANDLES I/O VIA DISK IORBS
KONSTP::!BLOCK 1 ;STOP A HUNG UNIT
KONHWP::!BLOCK 1 ;CHECK HARDWARE WRITE PROTECT
KONCUA::!BLOCK 1 ;UDB ADDRESS DOING DATA XFER (OR LAST ONE)
KONPTR::!BLOCK 1 ;USED TO PICKUP UNIT DATA BLOCK ADDRESS
KONDMP::!BLOCK 1 ;STORAGE FOR DEVDMP WHEN STARTING DUMP MODE I/O
KONERR::!BLOCK 1 ;ERROR RECOVERY PROGRAM IN KONTROL ROUTINE
KONECC::!BLOCK 1 ;GENERATE ECC MASK, POSITION
KONECA==:KONECC ;KONTROLLER KNOWS THAT ECC CAN BE DONE
KOPECA==:(1B0) ;WE KNOW ECC CAN BE DONE WITHOUT ERROR
KONRRG::!BLOCK 1 ;READ DRIVE REGISTERS
KONCCM::!BLOCK 1 ;COMPUTE DISTANCE FROM CYLINDER
KONALV::!BLOCK 1 ;ENSURE KONTROLLER HAS A PIA
KONRLD::!BLOCK 1 ;RELOAD DISK CONTROLLER
KONEDL::!BLOCK 1 ;ENABLE/DISABLE MICROCODE LOADING
KONSEC::!BLOCK 1 ;ONCE PER SECOND CALL
;THESE MUST BE THE LAST LOCATIONS IN THE KDB BEFORE KONTROLLER-DEPENDENT STUFF
KONECR::!BLOCK 1 ;CONTROL REG ON ERROR
KONEDB::!BLOCK 1 ;DATA BUFFER REG ON ERROR
KONREG::!BLOCK 1 ;NUMBER OF DRIVE REGISTERS TO SAVE ON ERR
KONEBK::!BLOCK 1 ;ADDRESS OF DRIVE REGISTER STORAGE
KONUDB::! ;TABLE OF POINTERS TO UDBS
.ORG
SUBTTL DISK DEFINITIONS -- OP - DRIVER DISPATCH OFFSETS
.ORG 0
OPRED::!BLOCK 1 ;(00) READ
OPWRT::!BLOCK 1 ;(01) WRITE
BLOCK 1 ;(02)
OPWTF::!BLOCK 1 ;(03) FORMAT
OPPOS::!BLOCK 1 ;(04) POSITION
OPCLR::!BLOCK 1 ;(05) CLEAR
OPSEL::!BLOCK 1 ;(06) SELECT
OPCAL::!BLOCK 1 ;(07) RECALIBRATE
OPLEN::! ;LENGTH OF DISPATCH
.ORG
SUBTTL DISK DEFINITIONS -- MISCELLANEOUS
KOPOFL==:400000 ;'OFF-LINE' OR 'NOT-READY' OR 'FILE UNSAFE' BIT
; (LIGHTS UNPOFL IN UNIDES)
KOPFUS==:200000 ;FILE UNSAFE - ADD TO MESSAGE TO OPERATOR
KOPUSI==:100000 ;UNIT STATUS INCONSISTENT
KOPWLK==:040000 ;WRITE LOCK (IF ALL THE OTHER BITS ARE OFF, THEN
;THE PROBLEM IS ASSUMED TO BE WRITE LOCK).
KOPNOC==:020000 ;(CI ONLY) NO CREDITS
KOPDER==:010000 ;(CI ONLY) DEVICE ERROR
KONERM==:KOPOFL+KOPFUS+KOPUSI+KOPWLK+KOPNOC+KOPDER ;ALL ERRORS
SUBTTL DISK DEFINITIONS -- UNIT DATA BLOCK
.ORG UDBSIZ
UNILOG::!BLOCK 1 ;SIXBIT LOGICAL UNIT NAME WITHIN STR
; LAST DIGIT OR TWO IS 0 TO 77 LEFT JUSTIFIED
UNIHID::!BLOCK 1 ;SIXBIT HOME BLOCK IDNAME - NEVER CHANGED IN HOME BLOCK
UNISYS::!BLOCK 1 ;LH=CORE ADDRESS (ACROSS POINTER) OF NEXT UNIT DATA
; BLOCK IN SYSTEM, LH=0 IN LAST UNIT IN SYSTEM
UNISIC==:UNISYS ;# SAT BLOCKS IN CORE FOR THIS UNIT
UNSSIC==^D8 ;BYTE SIZE
UNNSIC==^D25 ;BYTE PTR POS
UNILUN==:UNISYS ;LOGICAL UNIT NUMBER WITHIN FILE STRUCTURE OF THIS UNIT
UNSLUN==^D6 ;BYTE SIZE
UNNLUN==^D35 ;BYTE PTR POS
UNISTR::!BLOCK 1 ;LH=ADDRESS OF NEXT UNIT DATA BLOCK IN STR
; LH=0 IN LAST UNIT IN FILE STRUCTURE
;RH=UPWARD POINTER TO FILE STR. DATA BLOCK.
;WORD=0 IF THIS UNIT IS NOT IN AN STR
UNICHN::!BLOCK 1 ;ADDRESS OF NEXT UNIT DATA BLOCK ON SAME CHANNEL
; LAST UNIT POINTS BACK TO FIRST UNIT (RING)
UNIKON::!BLOCK 1 ;ADDRESS OF NEXT UNIT DATA BLOCK ON SAME KON
; LAST UNIT POINTS BACK TO FIRST UNIT (RING)
UNISWP::!BLOCK 1 ;LH=CORE ADDR OF NEXT UNIT FOR SWAPPING
UNICFS==:UNISWP ;RH CONTAINS BYTE WHICH IS CLASS FOR SWAPPING
;SWAPPER WILL TRY EVERYTHING TO SWAP ON ONE CLASS
;BEFORE TRYING NEXT CLASS, TO KEEP ON FASTEST UNITS
UNSCFS==^D3 ;BYTE SIZE
UNNCFS==^D22 ;BYTE PTR POS
;ERROR STATISTICS:
UNIHCT::!BLOCK 1 ;NO. OF HARD DISK ERRORS ON THIS UNIT (RETRYS FAILED
; TO CLEAR ERROR)
;LH=NO. DEVICE+SEEK + SEARCH ERRORS(IODERR)(CHAN+CONTROL)
;(SEE UNIPCT)
;RH=NO. DATA ERRORS(IODTER)(HARDWARE DEVICE DATA PARITY)
UNISCT::!BLOCK 1 ;NO. OF SOFT + NO. OF HARD ERRORS - INCREMENTED
; ONCE WHEN SUCCESS FOLLOWS ONE OR MORE FAILURES
; NOT INCREMENTED ON HARD ERRORS
;LH=NO. SOFT+HARD DEVICE+SEARCH ERRORS(SEE UNIPCT)
;RH=NO SOFT+HARD DATA ERRORS
UNIMCT::!BLOCK 1 ;NO. OF MONITOR DETECTED ERRORS(THREE 12-BIT FIELDS)
; USER PROGRAM SEES IOIMPM ERROR BIT SET FOR ALL 3 TYPES OF ERRORS
UNPSER==:100 ;NO. OF SAT FAILURES(NO. OF FREE CLUSTERS ON DISK SAT
; DISAGREE WITH EXPECTED NO AS STORED IN CORE)
UNPRER==:10000 ;NO. OF RIB REDUNDANT INFO FAILED TO COMPARE
UNPCER==:1 ;NO. OF SOFTWARE FOLDED CHECKSUM FAILURES(USER IO BUT NOT
; SWAP) (MUST BE RIGHT JUSTIFIED FOR AOS)
UNIERR::!BLOCK 1 ;LAST ERROR DEVICE STATUS WHICH OCCURRED ON THIS UNIT
; AFTER FIRST RECOVERY ATTEMPT FAILED. SET BY
; MOVEM T2,UNIERR(U) IN FILSER WHERE T2 IS SET DIRECTLY
; FROM KONTROLLER STATUS WORD IN KONTROLLER DEPENDENT
; ROUTINE. IF RECOVERY SUCCEEDS BEFORE FIRST RECAL,
; UNIERR WILL CONTAIN 0
UNISOF::!BLOCK 1 ;LAST ERROR DEVICE STATUS ON THIS UNIT
; BEFORE ANY RECOVERY ATTEMPTED
; DEVICE, DATA, SEARCH, HUNG ERRORS
UNIHBN::!BLOCK 1 ;LAST LOGICAL BLOCK NUMBER ON HARD OR SOFT ERROR
;PERFORMANCE MONITORING DATA LOCATIONS:
;NOTE FOLLOWING 6 ENTRIES ARE MUTUALLY EXCLUSIVE AND ACCOUNT FOR ALL
; TRANSFERS ON THIS UNIT (EXCEPT ERROR RETRYS)
;WRITE COUNT MUST BE READ COUNT+1
UNIBRC::!BLOCK 1 ;NO. OF BUFFERED MODE 128 WORD BLOCKS READ
UNIBWC::!BLOCK 1 ;NO. OF BUFFERRED MODE 128 WORD BLOCKS WRITTEN
UNIDRC::!BLOCK 1 ;NO. OF DUMP MODE 128 WORD BLOCKS READ(INCLUDEING GETS)
UNIDWC::!BLOCK 1 ;NO. OF DUMP MODE 128 WORD BLOCKS WRITTEN(INCLUDING SAVES)
UNIMRC::!BLOCK 1 ;NO. OF MONITOR 128 WORD BLOCKS READ(SAT,UFD,MFD,BAT,SWAP)
UNIMWC::!BLOCK 1 ;NO. OF MONITOR 128 WORD BLOCKS WRITTEN(SAT,UFD,MFD,BAT,SWAP)
;NOTE: TO COMPUTE NO. OF MONITOR OVERHEAD READS(WRITES)
; SUBTRACT UNIICT(UNIOCT) FROM UNIMRC(UNIMWC)
UNIICT::!BLOCK 1 ;NO. OF 128 WORD BLOCKS SWAPPED IN(SET BY SWPINT)
UNIOCT::!BLOCK 1 ;NO. OF 128 WORD BLOCKS SWAPPED OUT(SET BY SWPINT)
;NOTE: FOLLOWING 2 ENTRIES ARE MUTUALLY EXCLUSIVE AND ACCOUNT FOR ALL SEEKS
; ON THIS UNIT EXCEPT END OF CYLINDER AND RECALIBRATION AND SEEK UUOS
UNIMSC::!BLOCK 1 ;COUNT OF NO. OF MONITOR+SWAP SEEKS
UNIUSC::!BLOCK 1 ;COUNT OF NO. OF USER (BUFFER+DUMP) SEEKS
; (INCLUDES GETS AND SAVES)
;MORE ERROR STATISTICS:
UNIPCT::!BLOCK 1 ;SEEK INCOMPLETE ERRORS (UPDATED BY KONTOLLER ROUTINES
; RATHER THAN FILSER). NOTE THIS IS DIFFERENT FROM
; SEARCH ERRORS (SEE UNIHCT,UNISCT)
;RH=SOFT+HARD SEEK-INCOMPLETE FAILURES
;LH=POSITIONING FAILURES
;HARD ERRORS ARE REPORTED TO FILSER AS DEVICE ERRORS TOO
;FILSER RETRYS 'DSKTRY' TIMES AND COUNTS IN LH UNIHCT,UNISCT
UNIFKS::!BLOCK 1 ;FREE K FOR SWAPPING ON THIS UNIT
; 0 MEANS FULL OR UNIT DOESN'T HAVE SWAPPING SPACE ALLOCATED
UNISUN==:UNIFKS ;THIS LOCATION TIME-SHARED BY ONCE ONLY CODE TO
; REMEMBER LOG. UNIT # OF UNIT IN ACTIVE SWAPPING LIST
; -1 IF NOT IN LIST.
UNISDI::!BLOCK 1 ;LAST ERROR DATAI STATUS WORD
; DATA,DEVICE,SEARCH HUNG ERRORS BEFORE RECOVERY ATTEMPTED
UNIHDI::!BLOCK 1 ;LAST ERROR DATAI STATUS WORD
; DATA,DEVICE,SEARCH ERRORS AFTER FIRST RECOVERY ATTEMPT FAILS
UNIECT::!BLOCK 1 ;NO. OF CONSECUTIVE TIMES AN ERROR STATUS WAS RETURNED
; FOR THE LAST OPERATION ON THIS UNIT. (IE, FIRST+RETRIES
; WITH ERRORS). SET BACK TO 1 ON FIRST ERROR, RATHER THAN
; BEGINNING OF NEW OPERATION, SO USER PROGRAMS HAVE MORE
; TIME TO LOOK AT IT.
UNPFIR==:400000 ;SIGN BIT (UNPFIR)=1 DURING FIRST TRY, 0 DURING RETRIES
; THIS BIT IS TOO DYNAMIC TO BE USEFUL FOR DAEMON ERR
; REPORTING
UNPHRD==:200000 ;UNPHRD=1 IF LAST ERROR WAS HARD, RESET WHEN RETRY COUNTER
; RESET SO IT IS USEFUL FOR ERROR REPORTING
UNPHNG==:100000 ;SET IF DRIVE WAS HUNG
UNPECC==:40000 ;SET IF SOME RETRY WAS ECC-CORRECTABLE
UNPECE==:20000 ;SET IF ALLOWING ECC-CORRECTION OF ERRORS
UNIHNG::!BLOCK 1 ;RH=NO. OF TIME OUTS WHICH WERE RECOVERED
UNPHNR==:1000 ;LH BIT TO COUNT HUNGS NOT RECOVERED BY
; STOPPING UNIT (KONSTP) UNIT IN TRANSFER STATE
UNPHRC==:1 ;LH BIT TO COUNT HUNGS RECOVERED BY
; STOPPING UNIT (KONSTP) UNIT IN TRANSFER STATE
UNPHRS==:1 ;RH BIT TO COUNT HUNGS RECOVERED BY
; RESTARTING UNIT (UUOTWQ OR PIKTRN)
; UNIT WAS IDLE OR TRANSFER WAIT
; AND CHANNEL WAS IDLE. (MUST BE BIT 35 FOR AOS)
UNPHPS==:1000 ;RH BIT TO COUNT NUMBER OF HUNGS
; CAUSED (AND RECOVERED WITHOUT OPERATOR INTEVENTION)
; BY UNIT IN POSITION STATE
UNISTS::!BLOCK 1 ;STATUS WORD FOR UNIT - SET, CHANGED BY FILSER ONLY
;ONLY WHOLE WORD USED SO THAT EXCH TRICK CAN BE USED
;THESE SAME CODES ARE USED IN DEYCOD BYTE
ICOD==:0 ;IDLE - NO POSITIONING OR TRANSFERRING AND NO QUEUED
; REQUESTS FOR POSITIONING OR TRANSFERRING
PWCOD==:ICOD+1 ;WAITING TO POSITION WITH IMPLIED TRANSFER INTENDED
PCOD==:PWCOD+1 ;IN PROCESS OF POSITIONING
TWCOD==:PCOD+1 ;WAITING TO DO DATA TRANSFER
TCOD==:TWCOD+1 ;IN PROCESS OF DATA TRANSFER
MDACOD==:TCOD+1 ;ONLY USABLE BY MDA (REREAD HOM BLOCKS, NO COMPARE)
;NOTE THAT THE FOLLOWING CODES MUST BE THE HIGHEST DEFINED
OWCOD==:MDACOD+1 ;WAITING FOR OPERATOR INTERVENTION, FILE IN T STATE
OCOD==:OWCOD+1 ;WAITING FOR OPR INTERVENTION, NO FILE ACTIVE
OW2COD==:OWCOD+2 ;OW, BUT NO MESSAGE ONCE A MINUTE
O2COD==:OCOD+2 ;O, BUT NO MESSAGE
UNICCT::!BLOCK 1
UNIBCT==:UNICCT ;BITS 9-17 = NUMBER OF SLOTS LEFT IN BAT BLOCK FOR UNIT
; 777 MEANS DONT KNOW
UNSBCT==^D9 ;BYTE SIZE
UNNBCT==^D17 ;POSITION
UNISNS==:UNICCT ;BITS 0-8=SECTION NUMBER OF SECTION
; CONTAINING SWAPPING SATS
UNSSNS==^D9 ;BYTE SIZE
UNNSNS==^D8 ;BYTE POSITION
UNIHOM::!BLOCK 1 ;LOGICAL DISK BLOCK NO. WITHIN UNIT (NOT STR) OF THE
; TWO HOME BLOCKS ON THIS UNIT.
;LH=FIRST HOME BLOCK, RH=REDUNDANT ONE. NOTE:
; LOGICAL BLOCK NOS. ARE NOT USUALLY RESTRICTED TO
; ANYTHING LESS THAN 36 BITS. HOWEVER THE HOME BLOCKS ARE
; RESTRICTED TO BEING LOCATED SOMEWHERE ON THE FIRST
; 262,000 BLOCKS ON THIS UNIT
;THESE ARE THE ONLY DISK ADDRESSES ASSEMBLED INTO THE
; MONITOR. ALL OTHER DISK ADDRESSES ARE
; STORED ON THE DISK, STARTING WITH THE HOME BLOCK
UNIQUE::!BLOCK 1 ;LH=ADDRESS OF FIRST (LONGEST WAITING) DEVICE DATA BLOCK (FILE)
; IN POSITION WAIT FOR THIS UNIT (PW QUEUE)
;RH=JOB NUMBER FOR DDB WHOSE ADDRESS IS IN LH
;AS A FLAG, BOTH HALVES ARE SET TO 0 WHEN NO FILES IN
; POSITION WAIT QUEUE.
;NOTE: THE FILE WHICH IS IN P STATE IS NOT IN QUEUE
UNIGRP::!BLOCK 1 ;LH=NO. OF SEQUENTIAL BLOCKS (NOT CLUSTERS) TO TRY ON
; SEQUENTIAL OUTPUT (CAN BE CHANGED WITHOUT REFRESHING)
;BITS 22-26 UNUSED
IFN FTMP,<
UNIPWQ==:UNIGRP ;BIT 18 ON IF THERE IS AN OUTSTANDING CLOCK REQUEST
; FOR THE OTHER CPU TO PROCESS ITS POSITION WAIT QUEUE
UNPPWQ==:1B18
>; END IFN FTMP
UNINDU==:UNIGRP ;BIT 19 ON IF WANT TO FLUSH UNIT FROM DISK CACHE
UNPNDU==:1B19
UNIRHP==:UNIGRP ;BIT 20 ON IF REHEAD OF HOME IS IN PROGRESS
UNPRHP==:1B20
UNIMSG==:UNIGRP ;BIT 21 ON IF UNIT OFFLINE MSG HAS BEEN PRINTED THIS MINUTE
UNPMSG==:1B21
UNILKP==:UNIGRP ;BITS 27-35 = LAST KNOWN POSITION OF DISK
; MEANINGFUL ONLY FOR RP20
UNSLKP==^D9 ;BYTE SIZE
UNNLKP==^D35 ;BYTE PTR POS
UNIBPU::!BLOCK 1 ;NO. OF LOGICAL BLOCKS PER UNIT(RETURNED BY DSKCHR)
UNIBPM::!BLOCK 1 ;NO OF LOGICAL BLOCKS PER UNIT INCLUDING MAINTENANCE CYLINDERS
UNIPCI::!BLOCK 1 ;NO OF BLOCKS PAGED IN
UNIPCO::!BLOCK 1 ;NO OF BLOCKS PAGED OUT
UNICHR::!BLOCK 1 ;UNIT CHARACTERISTICS (RETURNED IN DSKCHR UUO)
UNIBPC==:UNICHR ;BITS 0-8 = # BLOCKS/CLUSTER
UNSBPC==^D9 ;BYTE SIZE
UNNBPC==^D8 ;BYTE PTR POS
UNIBPT==:UNICHR ;BITS 9-17 = # BLOCKS/TRACK
UNSBPT==^D9 ;BYTE SIZE
UNNBPT==^D17 ;BYTE PTR POS
UNIBPY==:UNICHR ;BITS 18-35= # BLOCKS/CYLINDER (THE SMALLEST IF CYLINDER
UNSBPY==^D18 ; HAVE DIFFERENT SIZES (MDF)) - BYTE SIZE
UNNBPY==^D35 ;BYTE PTR POS
UNICPS::!BLOCK 1 ;RH=NO. OF CLUSTERS PER SAT TABLE ON THIS UNIT
; (ROUNDED UP IF NOT AN EVEN NUMBER OF CLUSTERS)
UNIWPS==:UNICPS ;# OF WORDS PER SAF BLOCK ON DISK FOR THIS UNIT
; LIMITED TO 128 WORDS OR CLUSTER SIZE WHICHEVER IS SMALLER
UNSWPS==^D9 ;BYTE SIZE
UNNWPS==^D8 ;BYTE PTR POS
UNISPU==:UNICPS ;NO. OF SAT BLOCKS ON THIS UNIT
UNSSPU==^D8 ;BYTE SIZE
UNNSPU==^D17 ;BYTE PTR POS
UNICYL::!BLOCK 1 ;PHYSICAL CYLINDER UNIT IS CURRENTLY AT OR POSITIONING TOWARDS.
; THIS IS ONLY WORD SET AND LOOKED AT BY DEVICE DEPENDENT ROUTINE.
; USED BY FILSER TO SEE IF UNITS IN POSITION, NEVER CHANGED BY
; FILSER. INITIALIZE TO -1 SO FORCE POSITIONING FOR FIRST READ
; ELSE GET POSITIONING ERROR AND FALSE ERROR DATA
UNIBLK::!BLOCK 1 ;LOGICAL BLOCK NUMBER WITHIN THE UNIT.
UNISAB::!BLOCK 1 ;LH=ADDR. OF FIRST SAB BLOCK IN RING FOR UNIT
UNITAL::!BLOCK 1 ;NO. OF FREE BLOCKS(RESERVED+FCFS) LEFT ON THIS UNIT
UNIDES::!BLOCK 1 ;WORD RETURNED IN AC FOR DSKCHR UUO DESCRIBES THIS DISK
; UNIT IN TERMS OF STR NUMBER, CHANNEL, KONTROLLER UNIT
; NUMBER. ETC.
;HENCE, UNIDES RH=(3)CHANNEL NUM(6)KONTROLLER TYPE
; (3)KONTROLLER NUM(3)UNIT TYPE(3)UNIT NUMBER
UNPRHB==:400000 ;SET IF MONITOR MUST REREAD HOME BLOCK BEFORE NEXT
; OPERATION TO INSURE THE PACK ID IS CORRECT. THE
; MONITOR SETS THIS BIT WHENEVER A DISK PACK GOES OFF LINE.
UNPOFL==:200000 ;SET IF THE UNIT IS OFF LINE
UNPHWP==:100000 ;SET IF THE UNIT IS HARDWARE WRITE PROTECTED
UNPWPO==:UNPHWP!UNPOFL ;WRITE PROTECT OR OFFLINE BITS
UNPSWP==:40000 ;SET IF THIS UNIT IS A MEMBER OF A STR WHICH IS
; SOFTWARE WRITE PROTECTED FOR THIS JOB.
;BIT IS NEVER STORED HERE IN UNIT DATA BLOCK. MUST
; BE COMPUTED ON EACH DSKCHR UUO FOR EACH JOB
UNPCHG==:UNPSWP ;TIMESHARED BIT-A PARAMETER WAS CHANGED SO HOME BLOCK MUST
; BE WRITTEN. USED ONLY DURING ONCE ONLY CODE THEN
; CLEARED BEFORE SYSTEM STARTED
UNPSAF==:20000 ;SET IF UNIT IS MEMBER OF SINGLE-ACCESS F.S.
; NOT STORED IN UNIT DATA BLOCK
UNPNMU==:UNPSAF ;TIMESHARED BIT-A UNIT WHICH BELONGS TO A DISK SET
; NOT MOUNTED TO THIS SYSTEM. USED ONLY DURING ONCE
; ONLY CODE THEN CLEARED BEFORE SYSTEM STARTED
UNPZMT==:10000 ;SET IF THIS UNIT IS A MEMBER OF A STR WHOSE MOUNT
; COUNT HAS GONE DOWN TO ZERO, MEANING NO ONE IS
; USING THE STR. NOT STORED IN UNIT DATA BLOCK.
UNPTSB==:UNPCHG ;TIMESHARED BITS TO CLEAR WHEN EXITING ONCE ONLY CODE
UNPTSB==:UNPTSB!UNPNMU ;INCLUDE THIS BIT
UNIPRF==:UNIDES ;UNIT IS A MEMBER OF A PRIVATE STR
UNSPRF==^D1 ;BYTE SIZE
UNNPRF==^D6 ;BYTE PTR POS
UNPPRF==:4000 ;THE BIT
UNIUST==:UNIDES ;UNIT STATUS
UNSUST==^D2 ;BYTE SIZE
UNNUST==^D8 ;BYTE PTR POS
UNVPIM==:0 ;UNIT IS UP AND PACK IS MOUNTED
UNVPBM==:1 ;UNIT IS UP AND PACK BEING MOUNTED BY OPERATOR
UNVNPM==:2 ;UNIT IS UP BUT NO PACK MOUNTED
UNVDWN==:3 ;UNIT IS DOWN
UNPMSB==:400 ;SET IF THIS UNIT HAS MORE THAN ONE SAT BLOCK
UNPNNA==:200 ;SET IF THIS UNIT IS A MEMBER OF A STR FOR WHICH THE
; OPERATOR HAS REQUESTED NO NEW ACCESS INIT'S, LOOKUPS, OR
; ENTERS. SET BY PRIVILEGED STRUUO FUNCTION
UNIAWL==:UNIDES ;SET IF THIS STR IS SOFTWARE WRTIE PROTECTED FROM ALL JOBS
UNSAWL==^D1 ;BYTE SIZE
UNNAWL==^D11 ;BYTE PTR POS
UNPAWL==:100 ;THE BIT
UNPFUS==:40 ;SET IF THIS UNIT GOT A FILE UNSAFE CONDITION
; AT CONNECT TIME (UUO OR INT). USED TO TELL OPERATOR
; CLEARED WHEN UMT COMES ON-LINE WITH INTERRUPT
UNPSTS==:UNPAWL ;BITS CHANGEABLE BY STRUUO .FSRDF
; EITHER SINGLE ACCESS OR WRITE PROTECTED FROM ALL JOBS
UNPSTL==:UNPSTS!UNPNNA!UNPRHB!UNPMSB!UNPHWP ;BITS TO BE DETERMINED WHEN STR
; DEFINED (STRUUO-.FSDEF)
UNIWMD==:UNIDES ;UNIT WAITING FOR MDA TO DO SOMETHING
UNPWMD==:20 ;THE BIT
UNPALT==:10 ;BIT SET IN AC IF THIS IS DUAL PORTED
UNPUSI==:4 ;UNIT STATUS INCONSISTENT (BADUNI)
UNPRSS==:2 ;REMOVING SWAPPING UNIT
UNPUNO==:UNPFUS+UNPOFL ;OFF-LINE + UNSAFE
;BITS 15 - 17 ARE A CODE WHICH TELLS WHETHER THE ARGUMENT PASSED TO
; MONITOR IN LOC WAS: (NEVER STORED IN UNIT DATA BLOCK)
; 0 GENERIC DEVICE DSK OR LOGICAL NAME FOR IT (E.G., DSK)
; 1 SUBSET OF STR BECAUSE OF AN STR ABBREVIATION
; 2 STR NAME OR LOGICAL NAME FOR IT (E.G., DSKA)
; 3 UNIT WITHIN A FILE STRUCTURE OR A LOGICAL NAME FOR IT
; (E.G., DSKA0)
; 4 A KONTROLLER CLASS NAME OR A LOGICAL NAME FOR IT
; (E.G., DR,FH,DP,MD)
; 5 A KONTROLLER NAME OR A LOGICAL NAME FOR IT
; (E.G., DRA,FHA,DPA,MDA,DPB)
; 6 A PHYSICAL DISK UNIT NAME OR A LOGICAL NAME FOR IT
; (E.G., DRA0,DPA3)
;RH CONFIGURATION INFORMATION:
UNIKTP==:UNIDES ;BITS 21-26 CONTROLLER TYPE
UNSKTP==^D6 ;BYTE SIZE
UNNKTP==^D26 ;BYTE PTR POS
TYPDR==:0 ; 0 DR (FUTURE DRUM, IF ANY)
TYPFH==:1 ; 1 FH (BURROUGHS DISK OR BRYANT DRUM)
TYPDP==:2 ; 2 DP (MEMOREX RP01,RP02,RP03)
TYPMD==:3 ; 3 MD (BRYANT MASS DISK)
TYPFS==:4 ; 4 FS (RH10/RS04)
TYPRP==:5 ; 5 RP (RH10/RP04,RP05)
TYPRN==:6 ; 6 RN (RH20/RP20)
UNIUTP==:UNIDES ;BITS 30-32 UNIT TYPE - A KONTROLLER DEPENDENT FIELD USED TO
UNSUTP==^D3 ; DISTINGUISH VARIOUS OPTIONS OF A UNIT ON ITS KONTROLLER
UNNUTP==^D32 ;BYTE PTR POS
UNPUTP==:10 ;RIGHT MOST BIT
FRSTDR==:0 ;POSITION OF OR UNIT TYPES ON TABLES IN ONCMOD
; 0 0
FRSTFH==:FRSTDR+2 ;POSITION OF FH UNIT TYPES ON TABLES IN ONCMOD
; 1 0 BURROUGHS DISK ON RC10
; 1 BRYANT DRUM ON RC10
FRSTDP==:FRSTFH+2 ;POSITION OF DP UNIT TYPES ON TABLES IN ONCMOD
; 2 0 RP01
; 1 RP02
; 2 RP03
FRSTMD==:FRSTDP+3 ;POSTION OF MD UNIT TYPES ON TABLES IN ONCMOD
; 3 0 DUAL POSITIONER
; 1 SINGLE POSITIONER
FRSTFS==:FRSTMD+2 ;POSITION OF FS UNIT TYPES
FRSTRP==:FRSTFS+1 ;POSITION OF RP UNIT TYPES
; 5 0 RP04
; 1 RP06
; 2 RM03
; 3 RP07
FRSTRN==:FRSTRP+4 ;POSITION OF RN UNIT TYPES
; 6 0 RP20
FRSTRA==:FRSTRN+1 ;POSITION OF RA UNIT TYPES
; 7 0 RA80
; 1 RA81
; 2 RA60
UNIPTR::!BLOCK 1 ;LH=-LENGTH OF SWAP SAT TABLE
;RH=ADDR OF SWAP SAT TABLE (ALWAYS IN CORE)
; EACH BIT REPRESENTS 1K OF SWAPPING STORAGE
UNISLB::!BLOCK 1 ;FIRST SWAP LOGICAL BLOCK # ON THIS UNIT
UNIXRA::!BLOCK 1 ;LH=-NUMBER OF BLOCKS WRITTEN VIA EXTENDED RIBS
;RH=-NUMBER OF BLOCKS READ VIA EXTENDED RIBS
UNICDA::!BLOCK 1 ;RH=ADR OF DDB CURRENTLY
; POSITIONING OR XFERRING ON THIS WAIT
;LH=FORMER RH (RH ZEROED WHEN UNIT IDLE)
UNIGEN::!BLOCK 1 ;GENERATION NUMBER OF UDB (AOS'D WHEN UNIT DISMOUNTED)
UNIRCV::!BLOCK 1 ;NUMBER OF RETRIES OF HUNG UNIT WITHOUT RECOVERING
UNISWA::!BLOCK 1 ;ADDRESS OF CURRENT SWPLST ENTRY
UNISID==:UNISWA ;TIME-SHARED WORD BY ONCE ONLY TO REMEMBER SWAPPING ID
UNISWD::!BLOCK 1 ;DISTANCE (OR TIME TO BLOCK) OF BEST SWAP FOR UNIT
UNIQUL::!BLOCK 1 ;LENGTH OF POSITION WAIT QUEUE
UNIBUC::!BLOCK 1 ;NO OF BLOCKS ON UNIT IN 10/11 COMPAT.MODE
UNIDIA::!BLOCK 1 ;JOB NUMBER,,DDB OF JOB SHUTTING DOWN IO (DIAG.)
IFN FTDUAL!FTCIDSK,<
UNIALT::!BLOCK 1 ;RH = ADDRESS OF ALTERNATE PORT (UNLIKE UNI2ND NEVER
; CHANGES ONCE SET UP BY MATUN)
CPUMSK==:77 ;LH = BIT MASK OF CPUS WHICH HAVE ATTACHED THIS PORT
; (BITS 12-17)
UNI2ND::!BLOCK 1 ;RH=ADDR OF OTHER PORT
;LH=-1 IFF THIS PORT IS THE ALTERNATE PORT
;(I.E. UNI2ND=-1,,<MAIN PORT>)
>; END IFN FTDUAL!FTCIDSK
UNITIM::!BLOCK 1 ;HUNG-TIMER (PDVTIM NOT USED FOR DSK DDBS)
UNIJOB::!BLOCK 1 ;RH=JOB NUMBER FOR DDB WHOSE ADDRESS IS IN RH(UNICDA)
; (0 WHEN RH(UNICDA)=0)
;LH=PREVIOUS RH(UNIJOB)
UNIAJB::!BLOCK 1 ;RH NUMBER OF JOB OWNING DA OR ZERO
;LH NUMBER OF PEOPLE WANTING (WAITERS+USER)
UNIDS2::!BLOCK 1 ;MORE STATUS BITS
;LH BITS
U2PNRM==:400000 ;SET IF NON-REMOVABLE MEDIA
U2PPGA==:200000 ;SET IF PORT WENT AWAY WITHOUT AN OFF-LINE INTERRUPT
U2PFEP==:100000 ;SET IF DRIVE PORTED TO FRONT-END
U2PDPD==:40000 ;SET IF DRIVE HAS DUAL-PORT HARDWARE
U2PNOC==:20000 ;SET IF MONITOR I/O ON UNIT SHOULD NOT BE CACHED
U2PIGN==:10000 ;SET IF NEXT UNIT AVAIL MSG SHOULD BE IGNORED (CI)
UNIKOF==:UNIDS2 ;BITS 9-17 "KONTAB" OFFSET
UNSKOF==^D9 ;BYTE SIZE
UNNKOF==^D17 ;BYTE PTR POS
UNIKNM==:UNIDS2 ;BITS 18-26 KONTROLLER NUMBER
UNSKNM==^D9 ;BYTE SIZE
UNNKNM==^D26 ;BYTE PTR POS
;*** BITS 27-35 FREE
IFN FTMDA,<
UNILTM::!BLOCK 1 ;UNIVERSAL DATE-TIME OF LOCK ON STR
>;END IFN FTMDA
UNISPT::!BLOCK 1 ;RH=ADDRESS OF STORAGE ALLOC. POINTERS (SPT) TABLE
UNIPGT::!BLOCK 1 ;PAGE QTR TURNS,,PAGE TURN
;NO OF TIMES WE REREAD RIB TO GET NEW PNTRS
UNICRC::!BLOCK 1 ;MONITOR CACHE READ CALLS
UNICRH::!BLOCK 1 ;MONITOR CACHE READ HITS
UNICWC::!BLOCK 1 ;MONITOR CACHE WRITE CALLS
UNICWH::!BLOCK 1 ;MONITOR CACHE WRITE HITS
UNICBK::!BLOCK 1 ;MONITOR BLOCKS CACHED THIS UNIT
UNIK4S::!BLOCK 1 ;K FOR SWAPPING ON THIS UNIT
; WHETHER UNIT IS IN ACTIVE SWAPPING LIST OR NOT
UNSK4S==^D36 ;BYTE SIZE
UNNK4S==^D35 ;BYTE PTR POS
;THESE MUST BE THE LAST THINGS IN THE UDB.......
UNILAS::!BLOCK 1 ;LAST COMMAND ISSUED TO MASSBUS DEVICE
;****DAEMON DEPENDS ON NEXT 5 LABELS BEING CONTIGUOUS****
UNISCR::!BLOCK 1 ;CONTROL REGISTER AT 1ST ERROR
UNIHCR::!BLOCK 1 ;CONTROL REGISTER AT END
UNISDR::!BLOCK 1 ;DATA REGISTER AT 1ST ERROR
UNIHDR::!BLOCK 1 ;DATA REGISTER AT END
UNIEBK::! ;DRIVE REGISTERS SAVED ON ERROR HERE
;LH=LAST ERROR, RH=1ST ERROR
;LAST WORD IN BLOCK IS COMMAND WHICH CAUSED THE ERROR
.ORG
SUBTTL IPA20 DEFINITIONS -- COMMON PART OF KONTROLLER DATA BLOCK
.ORG KDBSIZ
IPKDDB::!BLOCK 1 ;ADDRESS OF DRAM DUMP BUFFER AREA
IPKSIZ::! ;LENGTH OF COMMON PART OF KONTROLLER DATA BLOCK
.ORG
SUBTTL MAGTAPE DEFINITIONS -- KONTROLLER TYPES
;KONTROLLER TYPES
K.TMA==:0 ;TM10A
K.TMB==:1 ;TM10B
K.TC1==:2 ;TC10C
K.TX1==:3 ;DX10/TX01/TX02
K.TM2==:4 ;TM02/TM03 ON RH10/RH20
K.TM2H==:5 ;TM02/TM03 ON RH11
K.DX2==:6 ;DX20/TX02
K.T78==:7 ;TM78
;*** 10 - 12 RESERVED FOR FUTURE USE BY DIGITAL
;*** 13 - 17 RESERVED FOR CUSTOMER TYPE CODES
K.TS1==:17 ;SA10/IBM CHANNEL MAGTAPES
K.MAX==:17 ;MAXIMUM KONTROLLER TYPE
SUBTTL MAGTAPE DEFINITIONS -- SXX - IBM CHANNEL SENSE BYTES
;SENSE BYTE DEFINITIONS
SNSBYT==^D24 ;NUMBER OF SENSE BYTES RETURNED
SNSWDS==<SNSBYT+3>/^D4 ;NUMBER OF WORDS OF SENSE INFORMATION RETURNED
;S00WRD IS DEFINED PREVIOUSLY
;S01WRD==0 ;SENSE BYTE 1 (PDP-10 WORD 0 BYTE 1)
S01NOI==1B8 ;NOISE
S01TUA==1B9 ;TU STATUS A
S01TUB==1B10 ;TU STATUS B
S017TK==1B11 ;SEVEN TRACK
S01BOT==1B12 ;LOAD POINT
S01WRT==1B13 ;WRITE STATUS
S01WLK==1B14 ;FILE PROTECTED
S01NCP==1B15 ;NOT CAPABLE
;S02WRD==0 ;SENSE BYTE 2 (PDP-10 WORD 0 BYTE 2)
S02TIE==377B23 ;TRACK IN ERROR BYTE
;S03WRD==0 ;SENSE BYTE 3 (PDP-10 WORD 0 BYTE 3)
S03VRC==1B24 ;READ/WRITE VRC
S03MTE==1B25 ;LRC/MTE
S03SKW==1B26 ;SKEW ERROR
S03CRC==1B27 ;EDC/CRC ERROR
S03ENV==1B28 ;ENV/ECC ERROR
S03D16==1B29 ;1600 BPI
S03BKW==1B30 ;BACKWARD STATUS
S03CPC==1B31 ;C/P COMPARE
;S04WRD==1 ;SENSE BYTE 4 (PDP-10 WORD 1 BYTE 0)
S04REJ==1B1 ;REJECT TU
S04TPI==1B2 ;TAPE INDICATE
S04WTV==1B3 ;WRT TRIG VRC
S04LWR==1B5 ;LWR
S04TUC==1B6 ;TU CHECK
S04RPQ==1B7 ;RESERVED FOR RPQ
;S05WRD==1 ;SENSE BYTE 5 (PDP-10 WORD 1 BYTE 1)
S05NSS==1B9 ;NEW SUBSYSTEM
S05WTM==1B10 ;WTM CHECK
S05PEB==1B11 ;PE ID BURST CHECK
S05PRC==1B13 ;PARTIAL RECORD
S05PSE==1B14 ;POSTAMBLE ERROR
S059MD==1B15 ;9-TRACK MULTIPLE DENSITY
;S06WRD==1 ;SENSE BYTE 6 (PDP-10 WORD 1 BYTE 2)
S067TK==1B16 ;7 TRACK
S06WCF==1B17 ;WRITE CURRENT FAIL
S06DTU==1B18 ;DUAL DENSITY TU
S06N16==1B19 ;NOT 1600 BPI
S06D62==1B20 ;6250 BPI TAPE
S06MOD==17B23 ;TU MODEL (S06D62 IS HIGH ORDER BIT)
;S07WRD==1 ;SENSE BYTE 7 (PDP-10 WORD 1 BYTE 3)
S07COL==1B24 ;COLUMN
S07LCF==1B25 ;LEFT COLUMN FAIL
S07RCF==1B26 ;RIGHT COLUMN FAIL
S07RSK==1B27 ;RESET KEY
S07DSE==1B28 ;DATA SECURITY ERASE FAILURE
S07ERA==1B21 ;ERASE HEAD
S07LDF==1B23 ;LOAD FAILURE
;S08WRD==2 ;SENSE BYTE 8 (PDP-10 WORD 2 BYTE 0)
S08IBG==1B0 ;IBG DETECTED
;S09WRD==2 ;SENSE BYTE 9 (PDP-10 WORD 2 BYTE 1)
S09C62==1B8 ;6250 BPI CORRECTION
S09VEL==1B9 ;VELOCITY CHANGE
S09CBC==1B10 ;CHANNEL BUFFER CHECK
S09CRC==1B11 ;CRC III
S09D62==1B12 ;6250 BPT TCU
;S10WRD==2 ;SENSE BYTE 10 (PDP-10 WORD 2 BYTE 2)
S10CSR==1B16 ;COMMAND START REJECT
S10RND==1B19 ;RECORD NOT DETECTED
S10TSF==1B21 ;TACH START FAIL
S10VCK==1B23 ;VELOCITY CHECK
;S11WRD==2 ;SENSE BYTE 11 (PDP-10 WORD 2 BYTE 3)
S11BYT==377B31 ;RESERVED
;S12WRD==3 ;SENSE BYTE 12 (PDP-10 WORD 3 BYTE 0)
S12BYT==377B7 ;RESERVED
;S13WRD==3 ;SENSE BYTE 13 (PDP-10 WORD 3 BYTE 1)
S13FET==3B9 ;TCU FEATURES
S13TCH==77B15 ;TCU SERIAL HIGH
;S14WRD==3 ;SENSE BYTE 14 (PDP-10 WORD 3 BYTE 2)
S14TCL==377B23 ;TCU SERIAL LOW
;S15WRD==3 ;SENSE BYTE 15 (PDP-10 WORD 3 BYTE 3)
S15TUH==377B31 ;TU SERIAL HIGH
;S16WRD==4 ;SENSE BYTE 16 (PDP-10 WORD 4 BYTE 0)
S16TUL==377B7 ;TU SERIAL LOW
;S17WRD==4 ;SENSE BYTE 17 (PDP-10 WORD 4 BYTE 1)
S172CH==1B8 ;2 CHANNEL SWITCH FEATURE
S17SWF==7B11 ;SWITCH FEATURES
S17TCE==17B15 ;TCU EC LEVEL
;S18WRD==4 ;SENSE BYTE 18 (PDP-10 WORD 4 BYTE 2)
S18TUE==17B23 ;TU EC LEVEL
;S19WRD==4 ;SENSE BYTE 19 (PDP-10 WORD 4 BYTE 3)
S19TU7==1B24 ;BUSY STATUS - TU 7
S19TU6==1B25 ; - TU 6
S19TU5==1B26 ; - TU 5
S19TU4==1B27 ; - TU 4
S19TU3==1B28 ; - TU 3
S19TU2==1B29 ; - TU 2
S19TU1==1B30 ; - TU 1
S19TU0==1B31 ; - TU 0
;S20WRD==5 ;SENSE BYTE 20 (PDP-10 WORD 5 BYTE 0)
S20TUF==1B0 ;BUSY STATUS - TU F
S20TUE==1B1 ; - TU E
S20TUD==1B2 ; - TU D
S20TUC==1B3 ; - TU C
S20TUB==1B4 ; - TU B
SA0TUA==1B5 ; - TU A
S20TU9==1B6 ; - TU 9
S20TU8==1B7 ; - TU 8
;S21WRD==5 ;SENSE BYTE 21 (PDP-10 WORD 5 BYTE 1)
S21BYT==377B15
;S22WRD==5 ;SENSE BYTE 22 (PDP-10 WORD 5 BYTE 2)
S22MDE==377B23 ;MICROPROGRAM DETECTED ERRORS (PAGE QA025)
;S23WRD==5 ;SENSE BYTE 23 (PDP-10 WORD 5 BYTE 3)
S23M4T==1B24 ;MOD IV TCU
S23MDE==177B31 ;MICROPROGRAM DETECTED ERRORS (PAGE AQ025)
SUBTTL MAGTAPE DEFINITIONS -- TRB - I/O REQUEST BLOCK (IORB)
.ORG 0
TRBLNK::!BLOCK 1 ;LH = FUNCTION DATA, RH = LINK TO NEXT
RB.EXC==:(1B0) ;SIGN BIT - UNIT EXCEPTION (TRBSTS NON-ZERO)
RB.AIO==:(1B1) ;THIS REQUEST IS ASYNC
RB.PCL==:(1B2) ;FROM QUEUED PROTOCOL
RB.PAR==:(1B3) ;PARITY THIS REQUEST (1=EVEN)
RB.DNS==:4 ;DENSITY BYTE SIZE
RB.DNP==:^D7 ;BYTE POSITION OF DENSITY BYTE
RB.D2==:1 ;200 BPI
RB.D5==:2 ;556 BPI
RB.D8==:3 ;800 BPI
RB.D16==:4 ;1600 BPI
RB.D62==:5 ;6250 BPI
RB.MDS==:3 ;MODE BYTE SIZE
RB.MDP==:^D10 ;RIGHT MOST BIT OF MODE BYTE
RB.MCD==:1 ;CORE DUMP (9 TRK)
RB.MBY==:2 ;BYTE MODE (4 8 BIT BYTES/WD - 9 TRK)
RB.M6B==:3 ;SIXBIT (9 TRK SPCL)
RB.M7B==:4 ;7 BIT MODE ("MARVELOUS ASCII")
RB.M7T==:5 ;7-TRK CORE DUMP (SIXBIT)
RB.BYS==:RB.MDS+RB.DNS+1 ;PARITY/DENSITY/MODE BYTE
RB.BYP==:RB.MDP
RB.RQS==:2 ;REQUEST STATUS BYTE SIZE
RB.RQP==:^D12 ;RIGHT MOST BIT POSITION OF STATUS
RB.RPN==:1 ;REQUEST PENDING
RB.ACT==:2 ;REQUEST ACTIVE
RB.DUN==:3 ;REQUEST DONE
RB.FNS==:5 ;FUNCTION BYTE SIZE
RB.FNP==:^D17 ;RIGHT MOST BIT OF FCN BYTE
RB.FRD==:1 ;READ FORWARD
RB.FWT==:2 ;WRITE
RB.FRB==:3 ;READ BACKWARDS
RB.FSR==:4 ;SPACE FORWARD RECORD
RB.FBR==:5 ;SPACE BACKWARD RECORD
RB.FSF==:6 ;SPACE FORWARD FILE
RB.FBF==:7 ;SPACE BACKWARD FILE
RB.FLG==:10 ;WRITE LONG GAP (3")
RB.FSE==:11 ;DATA SECURITY ERASE
RB.FRW==:12 ;REWIND
RB.FRU==:13 ;REWIND AND UNLOAD
RB.FTM==:14 ;WRITE TAPE MARK
RB.FYB==:15 ;WAIT FOR KONTROLLER IDLE (YELLOW BALL)
RB.FCR==:16 ;PERFORM CORRECTION READ
RB.FRL==:17 ;READ AT LOW THRESHOLD
TRBXCW::! ;RH = POINTER TO EVA OF COMMAND LIST
TRBSTS::!BLOCK 1 ;LH = TERMINATION STATUS
RB.SER==:(1B0) ;NON RECOVERABLE ERROR
RB.SDE==:(1B1) ;0 = CHN/DEV ERR, 1 = DATA ERR
RB.SED==:(1B2) ;SOME ERROR ENCOUNTERED
RB.STM==:(1B3) ;TAPE MARK ENCOUNTERED
RB.SBT==:(1B4) ;HIT BOT
RB.SET==:(1B5) ;HIT EOT
RB.STL==:(1B6) ;RECORD TOO LONG (READ)
RB.SLK==:(1B7) ;WRITE ATTEMPTED ON W.L. TAPE
RB.SNM==:(1B8) ;TAPE DIDN'T MOVE
RB.SOL==:(1B9) ;UNIT OFF LINE
RB.SRW==:(1B10) ;UNIT REWINDING
RB.SRE==:(1B11) ;RECOVERED ERROR (OLD INFO STILL VALID)
RB.SIL==:(1B12) ;ILLEGAL OP
RB.SEN==:(1B13) ;ERROR ON NEXT RECORD (THIS ONE OK)
RB.SMO==:(1B14) ;MONITOR-DIRECTED OFF-LINE
RB.SAP==:(1B15) ;TAPE ALREADY REPOSITIONED FOR ERROR RECIVERY
TRBRCT::!BLOCK 1 ;BYTE COUNT OF TRANSFER, IF DATA READ
TRBEXL::! ;LH = POINTER TO END OF TRANSFER LIST
TRBIVA::!BLOCK 1 ;RH = ADDRESS OF INTERRUPT ROUTINE
TRBLEN::! ;LENGTH OF BLOCK
.ORG
SUBTTL MAGTAPE DEFINITIONS -- TKB - KONTROLLER DATA BLOCK
.ORG KDBSIZ
TKBCNT::!BLOCK 1 ;NUMBER OF RECORDS DONE ON THIS OPERATION
TKBSTS::!BLOCK 1 ;KONTROLLER STATUS
TKBJOB::!BLOCK 1 ;JOB NUMBER OF MAINT-MODE OWNER
; TKBJOB MUST IMMEDIATELY PRECEDE TKBCCL
TKBCCL::!BLOCK <TKWCCL==:5> ;CHANNEL COMMAND LIST
TKBERB::!BLOCK TRBLEN ;IORB FOR ERROR RECOVERY
IFN FTMP,<
TKBFCT::!BLOCK 1 ;FAIRNESS COUNT TO ALLOW QUEUED I/O TO START
; EVEN IF PENDING REQUESTS ON THIS CPU
>
TKBUDB::! ;TABLE OF POINTERS TO UDBS
.ORG
SUBTTL MAGTAPE DEFINITIONS -- TUB - UNIT DATA BLOCK
.ORG UDBSIZ
TUBAKA::!BLOCK 1 ;ACTIVE (CURRENT) KDB ADDRESS
TUBCUR::!BLOCK 1 ;POINTER TO CURRENT DDB
TUBDDL::!BLOCK 1 ;LABEL DDB ADDRESS
TUBCNF::!BLOCK 1 ;CONFIG INFORMATION
TUBSTS::!BLOCK 1 ;UNIT STATUS
TUBIEP::!BLOCK 1 ;INITIAL ERROR POINTER
TUBFEP::!BLOCK 1 ;FINAL ERROR POINTER
TUBQUE::!BLOCK 1 ;QUEUE PNTR FOR IORB'S
TUBERR::!BLOCK 1 ;ERROR RECOVERY INFO
TUBRID::!BLOCK 1 ;REELID (DAEMON KNOWS ABT THIS AREA)
TUBFIL::!BLOCK 1 ;NUMBER OF FILES FROM BOT
TUBREC::!BLOCK 1 ;NUMBER OF RECORDS FROM EOF
TUBCRD::!BLOCK 1 ;NUMBER OF CHARACTERS READ SINCE UNLOAD
TUBCWR::!BLOCK 1 ;NUMBER OF CHARACTERS WRITTEN SINCE UNLOAD
TUBSRE::!BLOCK 1 ;NUMBER OF SOFT READ ERRORS
TUBHRE::!BLOCK 1 ;NUMBER OF HARD READ ERRORS
TUBSWE::!BLOCK 1 ;NUMBER OF SOFT WRITE ERRORS
TUBHWE::!BLOCK 1 ;NUMBER OF HARD WRITE ERRORS
TUBTME::!BLOCK 1 ;TOTAL MEDIA ERRORS SINCE UNLOAD
TUBCLE==:.-1 ;END OF AREA TO CLEAR
TUBTDE::!BLOCK 1 ;TOTAL DEVICE ERRORS SINCE RELOAD
TUBTUN::!BLOCK 1 ;TOTAL UNLOADS
TUBTRY::!BLOCK 1 ;RETRIES TO RESOLVE ERROR
TUBCCR::!BLOCK 1 ;CHAR CNT ON LAST REC
TUBPBE::!BLOCK 1 ;POSITION BEFORE ERROR (FILE,,RECORD)
TUBFES::!BLOCK 1 ;FINAL ERROR STATE WORD
TPCHMX==:.-TUBRID ;MAX ARG ALLOWED FOR MTACHR UUO
TUBCHR::!BLOCK 1 ;STATISTICS FOR MTCHR. UUO
TUBDDA::! BLOCK TUBTME-TUBRID+1 ;SHADOW AREA FOR DAEMON
TUBDDE==:.-1 ;END OF SHADOW AREA (DAEMON KNOWS ABT)
TUBPGM::!BLOCK 1 ;PROGRAM NAME ON ERROR
TUBUID::!BLOCK 1 ;PPN USING DRIVE ON ERROR
TUBDVC::!BLOCK 1 ;DEVICE CODE FOR ERROR LOGGING
TUBKTY::!BLOCK 1 ;CHANNEL TYPE FOR ERROR LOGGING
TUBCNI::!BLOCK 1 ;ERROR STATUS FOR NEXT RECORD
TUBHTT::!BLOCK 4 ;HUNG TIMER TABLE
TUBMTV::!BLOCK 1 ;TIMEOUT INCASE NO ACCESS TO SOME PORT
TUBTIM::!BLOCK 1 ;RUNNING HUNG TIMER
IFN FTTLAB,<
TUBPTR::!BLOCK 1 ;BYTE POINTER TO FILE.EXT
TUBMSG::!BLOCK 1 ;LENGTH,,FUNCTION CODE FOR LABEL MESSAGE
TUBPHY::!BLOCK 1 ;PHYSICAL NAME FOR LABEL PCS
TUBLBL::!BLOCK 1 ;LABEL STATUS WORD
TLMSIZ==.-TUBMSG
TUBLIB::! ;START OF LABEL INFORMATION BLOCK
TUBRFM::!BLOCK 1 ;RECORD FORMAT (FOR LABELS ONLY)
TUBRCC::!BLOCK 1 ;RECORD SIZE (FOR LABELS ONLY)
TUBBKL::!BLOCK 1 ;BLOCK SIZE (FOR LABELS ONLY)
TUBEXP::!BLOCK 1 ;EXPIRATION DATE (FOR LABELS ONLY)
TUBPRT::!BLOCK 1 ;PROTECTION (FOR LABELS ONLY)
TUBPSN::!BLOCK 1 ;FILE POSITION #
TUBFNM::!BLOCK <^D17+4>/5 ;17 CHAR (ASCII) FILE NAME
TUBGVR::!BLOCK 1 ;GENERATION + VERSION #
TLPMAX==:.-TUBLIB
> ;END IFN FTTLAB
TUBLEN::! ;LENGTH OF TUB
.ORG
SUBTTL MAGTAPE DEFINITIONS -- TPK - DRIVER DISPATCH
.ORG DRVLEN
TPKISR::!BLOCK 1 ;INTERRUPT SERVICE
TPKRES::!BLOCK 1 ;RESET ACTIVE TRANSFER
TPKSIO::!BLOCK 1 ;START I/O
TPKCCF::!BLOCK 1 ;COMMAND CHAINING FLAG
TPKCMD::!BLOCK 1 ;SET DEVICE COMMAND IN LIST (COMMAND CHAINING)
TPKIDL::!BLOCK 1 ;SET DEVICE IDLE
TPKONL::!BLOCK 1 ;SKIP IF KONTROLLER ONLINE
TPKSCH::!BLOCK 1 ;CAUSE SCHEDULE CYCLE
TPKEDL::!BLOCK 1 ;ENABLE/DISABLE MICROCODE LOADING
TPKLOD::!BLOCK 1 ;LOAD MICROCODE
TPKDRV::!BLOCK 1 ;AUTOCONFIGURE A SINGLE DRIVE
TPKBSY::!BLOCK 1 ;CHECK FOR KONTROLLER BUSY
TPKBSZ::!BLOCK 1 ;MAXIMUM BLOCK SIZE ALLOWABLE
TPKLEN::! ;LENGTH OF SERVICE DEPENDENT DISPATCH
.ORG
DEFINE TPK (PFX,CCF,BSZ),<
XLIST
IFIW PFX'ISR ;;INTERRUPT SERVICE
IFIW PFX'RES ;;RESET ACTIVE TRANSFER
IFIW PFX'SIO ;;START I/O
IFIDN <CCF><NO>,< EXP 0> ;;NO COMMAND CHAINING FLAG
IFIDN <CCF><YES>,<EXP -1> ;;COMMAND CHAINING FLAG AVAILABLE
IFIW PFX'CMD ;;SET DEVICE COMMAND
IFIW PFX'IDL ;;SET DEVICE IDLE
IFIW PFX'ONL ;;SKIP IF KONTROLLER ONLINE
IFIW PFX'SCH ;;CAUSE SCHEDULE CYCLE
IFIW PFX'EDL ;;ENABLE/DISABLE MICROCODE LOADING
IFIW PFX'LOD ;;LOAD MICROCODE
IFIW PFX'DRV ;;ATTACH DRIVE
IFIW PFX'BSY ;;CHECK FOR KONTROLLER BUSY
EXP BSZ ;;MAXIMUM BLOCK SIZE ALLOWABLE
LIST
;;TPKLEN==:TPKLEN ;;DETECT MULTIPLY DEFINED GLOBALS
> ;END DEFINE TPK
SUBTTL MAGTAPE DEFINITIONS -- TPNBF - NON-BLOCKING FUNCTION MASK
;MACRO TO DEFINE A MASK OF THE NON-BLOCKING HARDWARE FUNCTIONS
;FOR A GIVEN KONTROLLER
DEFINE TPNBF (FCN),<
ZZ==0
IRP FCN,<ZZ==ZZ!<1B0_-RB.F'FCN>>
EXP ZZ
PURGE ZZ
> ;END DEFINE NBF
SUBTTL END
END