int initserport(unsigned bps);
int initserreg(unsigned base, unsigned bps);
#define COM1 0X3F8
#define VECT1 0X0C
#define VECT2 0X0B
#define INT_MARK_ADD 0X21
#define ENABLE_COMM 0XE7
#define INT_CONTROL_ADD 0X20
#define ENABLE 0X20 // write 20H to interrupt controller to enable next interr.
#define LINK_CONTROL_WORD 0X3
/* 09H open loop, 13H close loop */
#define MODEM 0X9
/* 01H enable rx int, 02H enable tx int, 03H enable rx&tx, 00H disable all */
#define INTEN 0X1
/* 04H means rx int occur, 02H means tx int occur */
#define INTOCC 0X4
/* 20H meams ready to transmit */
#define READY 0X20
/* define macro for getkey() */
#define BS 0x08
#define HT 0x09
#define ESC 0x1b
#define RETURN 0x0d
#define DEL 0x0153
#define INS 0x0152
#define LEFT 0x014b
#define RIGHT 0x014d
#define UP 0x0148
#define DOWN 0x0150
#define HOME 0x0147
#define END 0x014f
#define PGUP 0x0149
#define PGDN 0x0151
#define F1 0x013b
#define F2 0x013c
#define F3 0x013d
#define F4 0x013e
#define F5 0x013f
#define F6 0x0140
#define F7 0x0141
#define F8 0x0142
#define F9 0x0143
#define F10 0x0144
#define F11 0x0185
#define F12 0x0186
/* Size of receiving buffer */
#define RXBUFFSZ 2000
/* Size of transmiting buffer */
#define TXBUFFSZ 2000
/* row & colume of displaying windows */
#define ROWN 12
#define COLN 16
unsigned char rxbuf1[RXBUFFSZ],rxbuf2[RXBUFFSZ];
unsigned char txbuf1[TXBUFFSZ],txbuf2[TXBUFFSZ];
int rxprt1,rxprt2,pushp1,pushp2,txprt1,txprt2;
int far *scr1buf, *scr2buf;
main(int argn, char *argv[])
{
int i,j,k,n,comnum=1;
unsigned bps=0;
if (argn>1 && (argv[1][0]=='?' || argv[1][1]=='?' ||
toupper(argv[1][0])=='H' || toupper(argv[1][1])=='H')) {
printf("Usage: tt COM BAUD\n"
" COM=1\n"
" BAUD=38400,14400,9600,...,300,150\n"
" default: COM=1,BAUD=9600\n");
return 1;
}
if (argn>1) comnum=atoi(argv[1]);
printf("COM%d ", comnum);
if (argn>2) bps=atol(argv[2]);
if (bps==0) bps=9600;
printf("BAUD: %ld\n", (long)bps);
getch();
initserport(bps);
operation(comnum);
withdraw();
return 0;
}
int withdraw ()
{
setvect(VECT1,oldser1);
setvect(VECT2,oldser2);
outp(INT_MARK_ADD, oldmarker);
disable();
int operation (int comnum)
{
int key;
int disp=0,com2_head;
int *prt=&rxprt1,*com2_tail=&rxprt2;
unsigned char *buf=rxbuf1,*com2_buf=rxbuf2;
initscreen();
while (1) {
if (disp!=*prt) {
disprx((unsigned)buf[disp]);
disp++;
disp%=RXBUFFSZ;
}
if (com2_head!=*com2_tail)
{
disptx((unsigned)com2_buf[com2_head]);
com2_head++;
com2_head%=TXBUFFSZ;
}
if (kbhit()) key=getkey();
if (key==F12) break;
}
return 0;
}
int disprx(int c)
{
static int x=0,y=0;
unsigned char hh,ll;
char tb[5];