.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