.TITLE XXTAB
.IDENT /00/
.LIST MEB
;+
; XXTAB.MAC
;
; FISCHER AND PORTER WARMINSTER, PA
;
;
; *** SKELETON DEVICE DRIVER DATA BASE ***
;
;
; INSTRUCTIONS FOR USE:
;
; THIS IS A SKELETON FOR AN RSX-11M I/O DRIVER DATA BASE.
; THE CORRESPONDING SKELETON I/O DRIVER IS IN XXDRV.MAC.
; THIS SKELETON DATA BASE PROVIDES A DCB, TWO UCB'S
; AND SCB'S, THE FACILITY FOR A 2-UNIT DEVICE TYPE, E.G.,
; XX0: AND XX1:.
;
; TO USE THIS SKELETON, YOU MUST PLUG THE APPROPRIATE
; STUFF INTO THE VARIOUS CONTROL BLOCKS. YOU ARE REFERRED TO
; THE DEC MANUAL "GUIDE TO WRITING AND I/O DRIVER" FOR
; THE INTIMATE DETAILS. THE PAGE REFERENCES, WHEN
; APPROPRIATE, ARE INCLUDED, E.G.,
;
; THE ACTUAL ASSEMBLY OF THIS MODULE AND ITS INCORPORATION
; INTO AN EXISTING RSX-11M OPERATING SYSTEM IS DONE IN THE
; USUAL FASHION FOR I/O DRIVERS; AGAIN, SEE THE MANUAL.
;
; BOTH THE DRIVER AND ITS DATA BASE CAN BE MADE LOADABLE OR RESIDENT.
; MAKE SURE YOU SET THE PROPER BITS FOR THE FLAVOR
; YOU WANT.
;
; OTHER THINGS TO REMEMBER:
;
; 1. CHANGE THE TWO-CHARACTER MNEMONIC EVERYWHERE FROM
; 'XX' TO WHATEVER MNEMONIC YOU'RE USING FOR YOUR
; DEVICE.
;
; 2. SET THE RIGHT VALUES FOR:
; VECTOR ADDRESS (1 FOR EACH DEVICE)
; CSR ADDRESS (1 FOR EACH DEVICE)
; ... AND OTHER STUFF IN THE HEADER FILE, XXDF.MAC
;
; 3. CHOOSE ONE OF THE TWO LABELS, $XXDAT OR $USRTB, TO DEFINE
; YOUR DATA BASE AS LOADABLE OR RESIDENT. THESE APPEAR
; IMMEDIATELY BEFORE THE DCB. RETAIN OR REMOVE THE LABEL
; $XXEND AT THE END OF THE DATA BASE CODE.
;
; 4. CHOOSE THE RIGHT NUMBER OF UCB'S AND SCB'S
; FOR THE NUMBER OF LIKE-TYPE DEVICES YOU'RE
; CONFIGURING FOR. YOU MAY HAVE TO ADD OR
; DELETE SOME.
;
; 5. INSERT THE RIGHT VALUES (SORRY, THAT'S ALL I CAN
; TELL YOU) FOR :
; X$$X11 (NUMBER OF CONTROLLERS)
; LD$XX (DRIVER LOADABLE)
; INTO XXDF.MAC
;
; 6. COMMAND LINE FOR ASSEMBLY:
; MAC>XXTAB,XXTAB=LB:[1,1]EXEMC/ML,[11,10]RSXMC/PA:1,SY:[]XXDF,XXTAB
;
; J. MCGLINCHEY
;
; VERSION 00 15-APR-78
;-
;
;
;
;
; MACRO LIBRARY CALLS
;
.MCALL HWDDF$,SCBDF$,UCBDF$
HWDDF$ ;DEFINE HARDWARE REGISTERS
SCBDF$ ,,SYSDEF ;DEFINE SCB OFFSETS
UCBDF$ ;DEFINE UCB OFFSETS
.PAGE
.SBTTL DEFINE UCB,SCB MACROS
;
; DEFINE UCB FOR THIS DEVICE
;
.MACRO XXUCB,A
.IF DF M$$MUP
.WORD 0 ;OWNING TERMINAL UCB ADDRESS U.OWN
.ENDC
.XX'A:: .WORD .DC ;BACK POINTER TO DCB U.DCB
.WORD .-2 ;REDIRECT POINTER U.RED
.BYTE UCBITS,0 ;CONTROL FLAGS, UNIT STATUS U.CTL,U.STS
.BYTE A,0 ;UNIT NO., UNIT STATUS U.UNIT,U.ST2
.WORD 0 ;CHARACTERISTICS WORD 1 U.CW1
.WORD 0 ;CHARACTERISTICS WORD 2 U.CW2
.WORD 0 ;CHARACTERISTICS WORD 3 U.CW3
.WORD 0 ;CHARACTERISTICS WORD 4 U.CW4
.WORD $XX'A ;POINTER TO SCB U.SCB
.WORD 0 ;ICB ADDR OF ATTACHED TASK U.ATT
.WORD 0 ;BUFFER RELOCATION BIAS U.BUF
.WORD 0 ;BUFFER ADDRESS U.BUF+2
.WORD 0 ;BYTE COUNT U.CNT
;
; ADDITIONAL UCB WORDS FOR DMA CONTROLLER
;
;
.ENDM
;
; DEFINE SCB FOR CONTROLLER 0
;
.MACRO XXSCB,A
.IF NDF LD$XX
.ASECT
.=XX0VEC ;THIS SETS INTERRUPT VECTOR FOR THIS SCB
.WORD $XXINT ;(THERE'S ONE FOR EACH SCB)
.WORD XXPRI
.PSECT
.ENDC
$XX'A:: .WORD 0,.-2 ;I/O QUEUE LISTHEAD S.LHD
.BYTE XXPRI,XX0VEC/4 ;PRIORITY, VECTOR S.PRI,S.VEC
.BYTE 0,2. ;TIMEOUT:INITIAL,CURRENT S.ITM,S.CTM
.BYTE 0*2,0 ;CONTROLLER STATUS, INDEX S.STS,S.CON
.WORD XX0CSR ;CSR ADDRESS S.CSR
.WORD 0 ;ADDR OF CURRENT I/O PKT S.PKT
.WORD 0 ;FORK LIST: LINK WORD S.FRK
.WORD 0 ; PC
.WORD 0 ; R5
.WORD 0 ; R4
.IF DF L$$DRV & M$$MGE
.WORD 0 ;RELOCATION BIAS OF DRIVER PARTITION
.ENDC
;
.ENDM
.PAGE
.SBTTL DCB
; REMOVE ONE OF THE FOLLOWING LABELS, DEPENDING ON LOADABILITY OF DATA BASE
$XXDAT:: ;LOADABLE DATA BASE
;$USRTB:: ;RESIDENT DATA BASE
;
; DEVICE CONTROL BLOCK
;
.IIF DF LD$XX, $XXTBL=0 ; SYMBOLIC
.DC:; OFFSET
; ------
.WORD 0 ;LINK TO NEXT DCB D.LNK
.WORD .XX0 ;LINK TO FIRST UCB D.UCB
.ASCII /XX/ ;GENERIC DEVICE NAME D.NAM
.BYTE 0,MAXUNIT-1 ;HIGHEST/LOWEST DEVICE NO. D.UNIT
.WORD XXND-XXST ;UCB LENGTH D.UCBL
.WORD $XXTBL ;ADDR OF DRIVER DISPATCH TABLE D.DSP
; 0 = LOADABLE DRIVER
.WORD 37 ;LEGAL FUNCTION BITS 0 - 15. D.MXX
.WORD 30 ;CONTROL " " 0 - 15.
.WORD 0 ;NO-OP'D " " 0 - 15.
.WORD 0 ;ACP " " 0 - 15.
.WORD 0 ;LEGAL " " 16. - 31.
.WORD 0 ;CONTROL " " 16. - 31.
.WORD 0 ;NO-OP'D " " 16. - 31.
.WORD 0 ;ACP " " 16. - 31.
.IF DF L$$DRV
.WORD 0 ;PCB ADDR OF LOADABLE DRIVER D.PCB
.ENDC
.PAGE
.SBTTL UCBS
;
; UNIT CONTROL BLOCKS
;
; BITS TO BE SET IN BYTE U.CTL OF UCB. SEE "GUIDE TO..." FOR DETAILS.
; INITIAL SETTING IS TO CALL DRIVER POWER FAIL ENTRY WHEN DRIVER
; GETS LOADED.
UCBITS = UC.PWF
XXST=.
UCBNUM = 0
XXUCB \UCBNUM
XXND=.
;---------------------------------------------------------
; GENERATE UNIT CONTROL BLOCKS NUMBER TWO THROUGH N
;
.REPT MAXUNIT-1 ;1 FOR EACH SUBSEQUENT UNIT ON THE CONTROLLER
UCBNUM = UCBNUM + 1
XXUCB \UCBNUM
.ENDR
.PAGE
.SBTTL SCB
;
; GENERATE STATUS CONTROL BLOCKS
;
SCBNUM = 0
.REPT MAXUNIT ;1 SCB FOR EACH UNIT
XXSCB \SCBNUM
SCBNUM = SCBNUM + 1
.ENDR
$XXEND:: ;FOR LOADABLE DATA BASE ONLY. REMOVE LABEL IF DATA BASE RESIDENT.
.WORD -1 ;GETS BY LOA BUG
.END