{ *************************************************************************** } { **** this file declares the common variables for TRICS IO procedures ***** } { *************************************************************************** } MODULE mod_common_hard_io ; { *************************************************************************** } EXPORT PortA, {CONST DRV11J port A index } PortB, {CONST DRV11J port B index } PortC, {CONST DRV11J port C index } PortD, {CONST DRV11J port D index } drv11j_registers,{STRUCTURE TYPE define overall register of DRV11-J card } presc_ratio, {TYPE prescaler ratio longword } cbus_param_list,{TYPE defines aggregate argument list } comint_stat, {TYPE COMINT card status byte } p_dblock_low, {CONST low index of datablock type } p_dblock_high, {CONST high index of datablock type } array_data_block_spy, {TYPE data block spy as simple array } reg_drv11j, {general use pointer to one of the DRV11J cards } reg_drv11j_pilot, {pointer to DRV11J registers connected to Pilot COMINT } reg_drv11j_assist,{pointer to DRV11J registers connected to Assistant COMINT} dev_drv11j_pilot, {drv11j 4 port device array } dev_drv11j_assist,{drv11j 4 port device array } outdbra, {data buffer register A (write) } outdbrb, {data buffer register B (write) } outdbrc, {data buffer register C (write) } indbrd, {data buffer register D (read ) } trg_alloc, {RECORD allocation of trigger for exclusive use } array_0_255, {TYPE array of 255 values e.g. for histogram purposes } eight_bit_0_7 {TYPE array of 8 bits for read FMLN purposes } eight_integer_0_7, {TYPE array of 8 INTEGERs for read FMLN purposes } two_comint_types, {TYPE for the two COMINT cards: Pilot and Assistant } array_two_flags ; {RECORD array of 2 flags for CBUS timeout } { *************************************************************************** } CONST PortA = 0 ; PortB = 1 ; PortC = 2 ; PortD = 3 ; { *************************************************************************** } TYPE { *** define unsigned bit, byte, word integers ****** } bit = [BIT(1)] 0..1 ; twobit = [BIT(2)] 0..3 ; byte = [BYTE] 0..255 ; word = [WORD] 0..65535 ; { *************************************************************************** } { *** sub-sub-structure define a DRV11J control/status registers ****** } dj_csr_def = [WORD] PACKED RECORD ctrl : byte ; { control byte } dir : [POS(8)] bit ; { direction } ie : [POS(9)] bit ; { interrupt enable, port A only } rdy : [POS(15)] bit ; { user ready flag } END; { *** sub-sub-structure define a DRV11J data registers ****** } dj_data_def = [WORD] PACKED RECORD lowbyte : byte ; { define low byte of data reg } highbyte : byte ; { define high byte of data reg } END; { *** sub-structure define of a DRV11-J register set ****** } dj_registers = [LONG] PACKED RECORD csreg : dj_csr_def ; { control and status register } buffer : dj_data_def ; { data buffer register } END; { *** structure define overall register of DRV11-J card ****** } drv11j_registers = PACKED ARRAY [0..3] OF dj_registers; { *** structure define drv11j register software buffer for port A ****** } portA_mba_cbus = [WORD] PACKED RECORD mba : byte ; { low byte is mother board add } cbus : [BIT(1)] bit ; { high byte is cbus } unused : [BIT(5)] 0..31 ; { ... and ... } cominibar: [POS(14)] bit ; { init COMINT card non-inverted } comini : [POS(15)] bit ; { init COMINT card inverted } END; { *** structure define drv11j register software buffer for port B ****** } ca_stb_dir = [BYTE] PACKED RECORD ca : [BIT(6)] 0..63 ; { low six bits is card address } stb : [POS(6)] bit ; { strobe } dir : [POS(7)] bit ; { direction } END; portB_fa_ca_stb_dir = [WORD] PACKED RECORD fa : byte ; { low byte is data out } castbdir : ca_stb_dir ; { high byte is comint stat reg } END; { *** structure define drv11j register software buffer for port C ****** } comint_ctrl = [BYTE] PACKED RECORD disdbb : [POS(0)] bit ; { disable data block builder } disfrmwrk : [POS(1)] bit ; { disable framework (f-end busy) } togglebuf : [POS(2)] bit ; { toggle write double buf half } readspy : [POS(3)] bit ; { reading data block spy } spynextdb : [POS(4)] bit ; { request spy next data block } disdbsend : [POS(5)] bit ; { disable data block sending } cbusreqst : [POS(6)] bit ; { control bus request } startdb : [POS(7)] bit ; { start new data block request } END; portC_datout_comintctrl = [WORD] PACKED RECORD dataout : byte ; { low byte is data out } comctrl : comint_ctrl ; { high byte is comint ctrl reg } END; { *** structure define drv11j register software buffer for port D ****** } comint_stat = [BYTE] PACKED RECORD reqstwait : [POS(0)] bit ; { reqst waiting } tss6 : [POS(1)] bit ; { timing and synch signal #6 } bufwab : [POS(2)] bit ; { write double buffer half a/b } bufrab : [POS(3)] bit ; { read double buffer half a/b } cbusfreed : [POS(4)] bit ; { control bus freed } dbspyfull : [POS(5)] bit ; { data block spy full } buffull : [POS(6)] bit ; { double buffer full } dbbusy : [POS(7)] bit ; { data block builder busy } END; portD_datain_comintstat = [WORD] PACKED RECORD datain : byte ; { low byte is data out } comstat : comint_stat ; { high byte is comint stat reg } END; { *** structure define specific trigger prescale ratio ****** } presc_ratio = [LONG] PACKED RECORD lowbyte : byte ; { low byte / 3 } midbyte : byte ; { middle byte / 3 } highbyte : byte ; { upper byte / 3 } unused : byte ; { unused byte } END; { *** define single buffer scaler array (32 scaler *4 bytes) ****** } sbsc_array = ARRAY [ 1..4, 0..31 ] OF INTEGER ; { *** define double buffer scaler array (5 bytes) ****** } dbsc_array = ARRAY [ 1..5 ] OF INTEGER ; { *** strucure define cbus parameter list ****** } cbus_param_list = PACKED RECORD { PASCAL routine usage ---------------v } cbus : [POS( 0)] twobit; { control bus 0..3 R } mba : [POS( 16)] byte ; { mother-board address 0..255 R } ca : [POS( 32)] byte ; { card address 0..63 R } fa : [POS( 48)] byte ; { function address 0..255 R } datain : [POS( 64)] byte ; { data read 0..255 W } dataout : [POS( 80)] byte ; { data writen 0..255 R } dataprev : [POS( 96)] byte ; { previous data 0..255 W } ctrl : [POS(112)] byte ; { control byte to write 0..255 R } status : [POS(128)] byte ; { status byte read 0..255 W } psratio : [POS(144)]INTEGER ;{ prescaler ratio 1..16777216 R } a_dbsc : dbsc_array ; { 5 double buffer scaler's bytes W } a_sbsc : sbsc_array ; { 32 * 4 single buffer's bytes W } END; { *** 8 KByte data block spy ***** } {extracted from TABLE_DBLOCK_SPY.TYP, now read in mod_handle_monit_pool} CONST p_dblock_low = 0 ; { low index of datablock type } p_dblock_high = 8191 ; {high index of datablock type } {increased from 4k to 8k word data block 7-APR-1992 } TYPE array_data_block_spy = ARRAY [p_dblock_low..p_dblock_high] OF word ; { *** trigger resource allocation lock variable **** } device_allocation = RECORD allocated : BOOLEAN ; active : BOOLEAN ; owner :^cbus_param_list ; released : EVENT ; END ; array_0_255 = ARRAY [ 0..255 ] OF INTEGER ; { *** FMLN state chnage over 512 consecutive addresses **** } eight_bit_0_7 = [BYTE] PACKED RECORD bitfield : PACKED ARRAY [0..7] OF bit ; END ; eight_integer_0_7 = ARRAY [0..7] OF INTEGER ; { *** pair of CBUS timeout flags used in the inline routines **** } two_comint_types = ( Pilot, Assist ) ; array_two_flags = ARRAY [Pilot..Assist] OF BOOLEAN ; { *************************************************************************** } VAR reg_drv11j :^drv11j_registers ; { general use pointer to DRV11J } reg_drv11j_pilot :^drv11j_registers ; { pointer to DRV11J/Pilot COMINT } reg_drv11j_assist :^drv11j_registers ; { pointer to DRV11J/Assistant COMINT } dev_drv11j_pilot : ARRAY[0..3] OF DEVICE ; { drv11j 4 port device array } dev_drv11j_assist : ARRAY[0..3] OF DEVICE ; { drv11j 4 port device array } outdbra : porta_mba_cbus ; { data buffer register A (write) } outdbrb : portb_fa_ca_stb_dir ; { data buffer register B (write) } outdbrc : portc_datout_comintctrl ; { data buffer register C (write) } indbrd : portd_datain_comintstat ; { data buffer register D (read ) } trg_alloc : device_allocation ; {allocation of trigger for exclusive use } { *************************************************************************** } END .