/* Anzeigen der SIO Register */ /* Datei sioshow.c Aufruf: sioshow n (n = 1 -4) */ #include #include #include union { int takti; char taktc[2]; } takt; enum sioregs{DATA, IER, IIR, LCR, MCR, LSR, MSR, SRC}; enum picregs{IMR=0x21,OCW1=0x21,OCW2=0x20,OCW3=0x20}; static int sioadr[4]= {0x3f8,0x2f8,0x3e8,0x2e8}; static char *name[]= {"Data","Int Enable","Int Ident", "Line Control","Modem Control","Line Status", "Modem Status","Scratch"}; void usage (char * arg) { fprintf (stderr, "\n\nAufruf:%s comX\nX zwischen 1 und 4\n",arg); exit (2); } int main (int argc, char **argv) { unsigned int i,com; char y; if (argc != 2) usage(argv[0]); com = atoi (argv[1]); if (com <= 0 || com > 4) usage (argv[0]); printf("\n\nAusgabe der Register von COM%d\n",com); y = inportb(sioadr[com-1]+LCR); y = y | 0x80; outportb (sioadr[com-1] + LCR, y); takt.taktc[0] = inportb(sioadr[com-1] +DATA); takt.taktc[1] = inportb (sioadr[com -1] + IER); y = inportb(sioadr[com-1]+LCR); y = y & ~0x80; outportb (sioadr[com-1] + LCR, y); printf ("\n_bertragungsgeschwindigkeit = %d",(int) (115200L / takt.takti)); for (i = 0; i <8; i++) printf("\nReg. %4x : %02x %s",sioadr[com-1]+i, inportb (sioadr[com-1]+i), name[i]); putchar('\n'); return 0; }