.TITLE XATAB .IDENT /2.0/ ;--------------------------------------------------------------+ ; Database for XADRV + ; + ; Author: + ; N.Wiehl + ; Universitaet Mainz + ; Institut fuer Kernchemie + ; + ; copyright (c) December 1986 + ;--------------------------------------------------------------+ ; edit history: + ; ============= + ; SEE XADRV.MAC + ;--------------------------------------------------------------+ ; ; ; SEE XADRV.MAC FOR ASSEMBLY INSTRUCTIONS ; ; IF YOUR SYSTEM INCLUDES LOADABLE DRIVER SUPPORT ; RSXMC.MAC MUST BE EDITED TO INCLUDE THE FOLLOWING SYSMBOLS: ; ; LD$XA=0 ;XA-DRIVER IS LOADALBLE ; X$$A11=n ;with n=number of DRV11-WA to be used ; ; ; MACRO LIBRARY CALLS ; .MCALL DEVDF$,HWDDF$ DEVDF$ ;DEFINE DEVICE CONTROL BLOCK OFFSETS HWDDF$ ;DEFINE HARDWARE REGISTERS ; ; UNIT CONTROL BLOCK MACRO DEFINITION ; .MACRO UCBXA A .IIF DF M$$MUP, .WORD 0 .XA'A:: .WORD XADCB .WORD .-2 .BYTE UC.PWF!UC.ALG!UC.NPR,0 .BYTE 0,0 .WORD DV.REC!DV.EXT .WORD 0 .WORD 0 .WORD 0 .WORD $XA'A' .WORD 0 .BLKW 3 .ENDM ; ; STATUS CONTROL BLOCK MACRO DEFINITION ; .MACRO SCBXA UNIT,ADDRES,VECTOR $XA'UNIT:: .IF NDF LD$XA .ASECT .=VECTOR .WORD $XAINP .WORD PR7!'UNIT' .WORD $XAOUT .WORD PR7!'UNIT' .PSECT .ENDC .WORD 0 .WORD .-2 .BYTE PR4,VECTOR'/4 .BYTE 0,5 .BYTE 'UNIT'+'UNIT',0 .WORD ADDRES .BLKW 5 .IF DF L$$DRV & M$$MGE .BLKW 1 .ENDC .IF DF M$$EXT .BLKW 6 .ENDC .ENDM ; ; DEVICE CONTROL BLOCK ; $XADAT:: .IIF DF LD$XA, $XATBL=0 XADCB: .WORD 0 ;LINK TO NEXT DCB .WORD .XA0 ;POINTER TO FIRST UCB .ASCII /XA/ ;DEVICE NAME .BYTE 0,X$$A11-1 ;LOWEST AND HIGHEST UNIT NUMBERS COVERED ; BY THIS DCB .WORD XAND-XAST ;LENGTH OF UCB IN BYTES .WORD $XATBL ;POINTER TO DRIVER DISPATCH TABLE .WORD 5 ;LEGAL FUNCTION MASK CODES 0-15 .WORD 1 ;CONTROL FUNCTION MASK CODES 0-15 .WORD 0 ;NO-OP'ED FUNCTION MASK CODES 0-15 .WORD 0 ;ACP FUNCTION MASK CODES 0-15 .WORD 0 ;LEGAL FUNCTION MASK CODES 16-31 .WORD 0 ;CONTROL FUNCTION MASK CODES 16-31 .WORD 0 ;NO-OP'ED FUNCTION MASK CODES 16-31 .WORD 0 ;ACP FUNCTION MASK CODES 16-31 .IF DF L$$DRV .WORD 0 ;ADDRESS OF PARTITION CONTROL BLOCK .ENDC ; ; UNIT CONTROL BLOCK ; XAST=. .IF DF M$$MUP .WORD 0 ;LOGON UIC, OWNER UCB ADDRESS .ENDC .XA0:: .WORD XADCB ;BACK POINTER TO DCB .WORD .-2 ;POINTER TO REDIRECT UNIT UCB .BYTE UC.PWF!UC.ALG!UC.NPR,0 ;CONTROL FLAGS, UNIT STATUS .BYTE 0,0 ;PHYSICAL UNIT NO., UNIT STATUS .WORD DV.REC!DV.EXT ;FIRST DEVICE CHARACTERISTICS WORD ; (RECORD-ORIENTED DEVICE) .WORD 0. ;SECOND DEVICE CHARACTERISTICS WORD ; (FOR INTERNAL USE BY DRIVER) .WORD 0 ;THIRD DEVICE CHARACTERISTICS WORD ; (FOR INTERNAL USE BY DRIVER) .WORD 0. ;FOURTH DEVICE CHARACTERISTICS WORD ; (DEFAULT BUFFER SIZE IN BYTES) .WORD $XA0 ;POINTER TO SCB .WORD 0 ;TCB ADDRESS OF ATTACHED TASK .BLKW 1 ;RELOCATION BIAS OF BUFFER OF CURRENT ; I/O REQUEST .BLKW 1 ;ADDRESS OF BUFFER OF CURRENT I/O REQUEST .BLKW 1 ;BYTE COUNT OF CURRENT I/O REQUEST XAND=. XAUNIT=1 .REPT X$$A11-1 UCBXA \XAUNIT XAUNIT=XAUNIT+1 .ENDR ; ; STATUS CONTROL BLOCK ; $XA0:: .IF NDF LD$XA .ASECT .=124 .WORD $XAINT ;ADDRESS OF INTERRUPT SERVICE ROUTINE .WORD PR7!0 ;INTERRUPT AT PRIORITY 7 (CONTROLLER=0) .PSECT .ENDC ; XASCB: .WORD 0 ;CONTROLLER I/O QUEUE LISTHEAD ; (POINTER TO FIRST ENTRY) .WORD .-2 ; (POINTER TO LAST ENTRY) .BYTE PR4,124/4 ;DEVICE PRI, INTERRUPT VECTOR ADDRESS/4 .BYTE 0,5 ;CURRENT AND INITIAL TIMEOUT COUNTS .BYTE 0,0 ;CONTROLLER INDEX AND STATUS ; (0=IDLE, 1=BUSY) .WORD 172400 ;ADDRESS OF CONTROL STATUS REG .BLKW 1 ;ADDRESS OF CURRENT I/O PACKET .BLKW 4 ;FORK BLOCK ALLOCATION .IF DF L$$DRV & M$$MGE .BLKW 1 ;RELOCATION BASE OF DRIVER'S PARTITION .ENDC .IF DF M$$EXT .BLKW 6 ;11/70 ONLY USED WITH UMR .ENDC ; ; IF YOU ARE USING MORE THEN ONE INTERFACE, ADD HERE ; ADDRES AND VECTOR, USING SCBXA MACRO. ; SYMBOL X$$A11 IN RSXMC.MAC HOLDS THE CURRENT NUMBER OF CONTROLLERS ; ; .IF GT X$$A11-1 ; SCBXA 1,ADDRES=1xxxxx,VECTOR=xxx ; .ENDC ; $XAEND:: .END