/* Copyright (C) Magna Carta Software, Inc. 1990-1991. All Rights Reserved. C COMMUNICATIONS TOOLKIT DIGIXI0.H -- C Communications Toolkit header file for DigiBoard COM/Xi boards. This header is included in DIGIXI0.C. It defines data structures, macros, and manifest constants used in DigiBoard access routines. */ #if !defined(TYPES_DEFINED) typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned long DWORD; #define TYPES_DEFINED #endif struct bufstrct { WORD TXHD; /* R/W Tx buffer head offset */ WORD TXTL; /* R Tx buffer tail offset */ WORD TXSTRT; /* F start offset of Tx buffer */ WORD TXMAX; /* F last offset of Tx buffer */ WORD RXHD; /* R Rx buffer head offset */ WORD RXTL; /* R/W Rx buffer tail offset */ WORD RXSTRT; /* F start offset of Rx buffer */ WORD RXMAX; /* F last offset of Rx buffer */ WORD RXLW; /* C inform Host mid level RX */ WORD RXHW; /* C pause level for Rx */ WORD TXW; /* C inform Host low level Tx */ WORD CPORT; /* F 0 if ACE not found */ BYTE BWIND; /* F window buffers mapped in */ BYTE HNDSHK; /* C handshake selected */ BYTE BAUD; /* C baud index selected */ BYTE DTYPE; /* C data type selected */ BYTE BRKCNT; /* C break timeout selected */ BYTE IMASK; /* C interrupt Host mask */ BYTE XOFFCHAR; /* C Xoff character */ BYTE XONCHAR; /* C Xon character */ BYTE HFLSH; /* W Host cleared Rx */ BYTE PICBIT; /* F FEP8259 mask */ BYTE FLWCNTL; /* U internal control */ BYTE BRKCNTR; /* U internal break count */ BYTE MSTAT; /* U internal modem status */ BYTE LSTAT; /* U internal line status */ WORD BRKPOS; /* R RXHD position at time of BREAK 1.01 */ WORD BUFSEG; /* U FEP's segment of Rx buffer 1.01 */ BYTE STATUS; /* U internal system status 1.01 */ BYTE TWIND; /* F window Tx buffer mapped in 1.02 */ WORD TBUFSEG; /* U FEP's segment of Tx buffer 1.02 */ WORD RSW0; /* reserved word */ } ; struct ctlstrct { WORD CMDHD; /* R/W Command buffer head pointer */ WORD CMDTL; /* R Command buffer tail pointer */ WORD CMDSTRT; /* F start offset of buffer */ WORD CMDMAX; /* F last offset of buffer */ } ; #define B_STR(seg) ((void FAR_ *) (((DWORD)(seg) << 16) | (0X0460))) #define C_STR(seg) ((void FAR_ *) (((unsigned long)(seg) << 16) | (0X05e0))) #define btbl(a) ((struct bufstrct FAR_ *) B_STR(a)) #define ctbl(a) ((struct ctlstrct FAR_ *) C_STR(a)) /* COMXI.H */ /***************************************** COM/Xi Interface I/O Port Addresses ******************************************/ #define IPORT0 0X320 /* J2 1-2, J3 1-2, J4 1-2 Factory setting */ #define IPORT1 0X300 /* J2 1-2, J3 1-2, J4 2-3 */ #define IPORT2 0X220 /* J2 1-2, J3 2-3, J4 1-2 */ #define IPORT3 0X200 /* J2 1-2, J3 2-3, J4 2-3 */ #define IPORT4 0X120 /* J2 2-3, J3 1-2, J4 1-2 */ #define IPORT5 0X110 /* J2 2-3, J3 1-2, J4 2-3 */ #define IPORT6 0X100 /* J2 2-3, J3 2-3, J4 1-2 */ #define CLR_I_R 0X00 /* remove reset or interrupt */ #define RESET_XI 0X40 /* reset 80188 */ #define INT_XI 0X80 /* interrupt 80188 */ /**************************************************************** J5 = IRQ15, J6 = IRQ12, J7 = IRQ11, J8 = IRQ10, J9 = IRQ7 J10 = IRQ6, J11 = IRQ5, J12 = IRQ4, J13 = IRQ3, J14 = IRQ2 ****************************************************************/ /************************************** COM/Xi Window Segment Addresses **************************************/ #define WSEG0 0Xd800 /* J15 1-2, J16 1-2, J17 2-3 Factory setting */ #define WSEG1 0Xd000 /* J15 1-2, J16 2-3, J17 2-3 */ #define WSEG2 0Xc800 /* J15 2-3, J16 1-2, J17 2-3 */ #define WSEG3 0Xc000 /* J15 2-3, J16 2-3, J17 2-3 */ /***************************** COM/Xi Defined Offsets *****************************/ #define CMDMAIL 0X0420 /* Host to FEP mail box (32 bytes) */ #define INTMAIL 0X0440 /* FEP to Host mail box (32 bytes) */ #define MEMSIZE 0X0410 /* Size of memory in K */ #define NEXTFCM 0X041a /* Segment for Fep to load *.FCM (offset MOD 16) */ #define WARMMSG 0X0ff8 /* 'WARM' placed here when POST completed */ #define EPROMVR 0X0ffc /* Version of EPROM (packed BCD starting 3.0 */ #define M232REV 0X0ff8 /* eight byte ASCII name and version of module */ #define M232_OK 0X1000 /* word 'OK' placed here after init completed */ /*************************** COM/Xi ROM FUNCTIONS ***************************/ #define XI_ACK 0X00 /* (0X0420) COMXi will set this to 0 when done */ #define SETWIND 0X01 /* (0X0420) change mapping of window (55uS average) */ #define EXCBOOT 0X02 /* (0X0420) start execution of loaded module */ #define RBPORT 0X03 /* (0X0420) read byte (0X0423) port (0X0421,0X0422) */ #define WBPORT 0X04 /* (0X0420) write byte (0X0423) port (0X0421,0X0422) */ #define RWPORT 0X05 /* (0X0420) read word (0X0423,0X0424) port (0X0421,0X0422) */ #define WWPORT 0X06 /* (0X0420) write word (0X0423,0X0424) port (0X0421,0X0422) */ #define PSFI15 0X07 /* (0X0420) Process Sub-Function (0X0421) via Int 15h */ /* new with Rev. 3.0+ EPROM */ #define EXCM232 0X08 /* (0X0420) start execution of EPROM M232 module */ #define BUFF1K 0X00 /* subcommand (0X0421) for EXCM232 1K buffers */ #define BUFF2K 0X01 /* subcommand (0X0421) for EXCM232 2K buffers */ #define BUFF4K 0X02 /* subcommand (0X0421) for EXCM232 4K buffers */ #define BUFF8K 0X03 /* subcommand (0X0421) for EXCM232 8K buffers */ /* new with Rev. 3.1+ EPROM */ #define BUFFXK 0X04 /* subcommand (0X0421) for EXCM232 16K Rx, 8K Tx (3.01+) */ /* M232.H */ /******************************* M232 Supported Functions *******************************/ #define SRXLWTR 0X10 /* Rx buffer level for Host interrupt */ #define SRXHWTR 0X11 /* Rx buffer level for handshake */ #define FLUSHRX 0X12 /* flush Rx buffer */ #define FLUSHTX 0X13 /* flush Tx buffer */ #define PAUSETX 0X14 /* pause Tx */ #define RESUMETX 0X15 /* resume Tx */ #define SINTMASK 0X16 /* set-clear Mask of Host Interrupts */ #define SBAUDATA 0X17 /* set Baud Rate and Data Mode */ #define SBREAK 0X18 /* send Break Signal */ #define SMODEM 0X19 /* set-clear Modem Lines */ #define SBRKCNT 0X1a /* set duration of Break (55 Ms steps) */ #define SHNDSHK 0X1b /* set-clear Handshake Used */ #define SONOFF 0X1c /* set XON and XOFF characters */ #define STXWM 0X1d /* Tx buffer level for Host interrupt */ /************************************************************************ Function 0X16 Set Interrupt Host Mask set byte cc clear byte dd ************************************************************************/ #define RXENE 1 /* Rx empty to /empty */ #define TXNEE 2 /* Tx /empty to empty */ #define RXBFO 4 /* Rx buffer overflow */ #define TXLOW 8 /* Tx buffer getting low 1.01 */ #define BRKDT 0X10 /* Break Detect */ #define LNERR 0X20 /* Line Errors */ #define MDMCG 0X40 /* Modem Change */ #define RXMID 0X80 /* Rx buffer mid water 1.01 */ /******************************************** Function 0X17 Set Baud Rate and Data ********************************************/ /************** byte cc **************/ #define B110 1 /* baud rates */ #define B150 2 #define B300 3 #define B600 4 #define B1200 5 #define B2400 6 #define B4800 7 #define B9600 8 /* first 8 as PC bios */ #define B50 9 #define B75 10 #define B134 11 #define B200 12 #define B1800 13 #define B2000 14 #define B3600 15 #define B7200 16 #define B19200 17 /* limited number of channels */ #define B38400 18 /* too fast */ #define B56000 0 /* too fast */ /************* byte dd *************/ #define DATA5 0 /* word lengths */ #define DATA6 1 #define DATA7 2 #define DATA8 3 #define STOP1 0 /* stop bits */ #define STOP2 4 #define NPARITY 0 /* parity bits */ #define OPARITY 8 #define EPARITY 24 #define SPARITY 32 /* OR this with OPARITY or EPARITY */ /************************************************ Function 0X19 set byte cc clear byte dd ************************************************/ #define DTR 1 /* modem control lines */ #define RTS 2 /************************************************ Function 0X1b set byte cc clear byte dd ************************************************/ #define SHND 1 /* Software Handshake (XON-XOFF) */ #define HHND 2 /* Hardware Handshake (RTS-CTS) */ #define IHND 4 /* Input flow control */ #define OHND 8 /* Output flow control */ #define XANY 0X10 /* Xon on any character 1.01 */ #define XAKP 0X20 /* Xon on any character and keep 1.02 */ /* M232ERRS.H */ /******************* Error Codes *******************/ #define SUCCESS 0 #define GENERROR -1 #define TMOERROR -2 #define FILERROR -3 #define NOTWARM -4 #define BUSYHML -5 #define BUSYFML -6 #define NOMEMLFT -7 #define BADVERSN -8 #define CMDQFUL -9 #define RXEMPTY -10 #define TXFULL -11 #define RXTOLOW -12 #define TXTOFUL -13 WORD excfcm(WORD port, WORD seg); WORD excM232(WORD port, WORD seg, int size); WORD grxcnt(WORD seg, char chn); WORD gtxfree(WORD seg, char chn); WORD gWARMver(WORD port, WORD seg); WORD gwindow(WORD port); WORD loadfcm(WORD port, WORD seg, char *fl); WORD rdch(WORD port, WORD seg, WORD chn); WORD rdchst(WORD port, WORD seg, char chn); WORD rdstr(WORD port, WORD seg, char chn, char *s, int len); WORD rdstrst(WORD port, WORD seg, char chn, short *s, int len); WORD resetcomxi(WORD port, WORD seg); WORD swindow(WORD port, WORD seg, int window); WORD wrtbcmd(WORD seg, WORD cmd, WORD chn, WORD p1, WORD p2); WORD wrtch(WORD port, WORD seg, WORD chn, WORD c); WORD wrtstr(WORD port, WORD seg, char chn, char *s, int len); WORD wrtwcmd(WORD seg, char cmd, char chn, WORD p1);