SERIAL(DOCS) IBM PC Device Documentation SERIAL(DOCS) NAME serial - serial port pinout INT 14H BIOS Serial Communications AH=0 INITIALIZE PORT --------------------------------------------- AL: 7 6 5 4 3 2 1 0 --- baud rate --- -parity - stopbit -- word length -- 000 - 110 x0 - none 0 - 1 10 - 7 bits 001 - 150 01 - odd 1 - 2 11 - 8 bits 010 - 300 11 - even 011 - 600 100 - 1200 101 - 2400 110 - 4800 111 - 9600 DX: 0=com1, 1=com2 AH=1 SEND CHARACTER ---------------------------------------------- AL: character to send DX: 0=com1, 1=com2 ON RETURN: bit 7 of AH set if error occurred AH=2 RECEIVE CHARACTER -------------------------------------------- AL: character read DX: 0=com1, 1=com2 PORT DLAB=0 DLAB=1 3f8 - data in/out baud rate low 3f9 - IER int enable baud rate high --- Ports when DLAB is set ------------------------------------------- 03f9 03f8 ACTUAL BAUD RATE 09 00 50 04 17 110 01 80 300 00 60 1200 00 30 2400 00 18 4800 00 0c 9600 00 01 real fast --- Ports when DLAB is clear ----------------------------------------- 03f8 - 8 bit data i/o (characters in/characters out) 03f9 Interrupt Enable Register (IER) 0 - Interrupt when character ready 1 - Interrupt when transmitter holding register empty (THRE) 2 - Interrupt when LSR has data ready 3 - Interrupt when MSR has data ready 4 - 0 5 - 0 6 - 0 7 - 0 3fa - IIR Interrupt Identification Register PortValue Description (Cause) --------- ------------------------------------------------------- 06h LSR has info (overrun/parity/framing/break interrupt) 04h Data ready (character waiting) 02h Transmitter Holding Register Empty (character was sent) 00h MSR has info (CTS, DSR, RI, RLSD) 3fb - LCR line ctrl 0 word length (see below) 1 word length (see below) 2 Stop Bits 3 Parity Enable 4 Even Parity 5 Stick Parity 6 Set Break 7 DLAB bit (access baud rate via 3f8 and 3f9) bit1 bit0 Word Length ---- ---- ----------- 0 0 5 bits 0 1 6 bits 1 0 7 bits 1 1 8 bits 3fc - MCR modem ctrl 0 - Data Terminal Ready 1 - Request To Send 2 - Out 1 3 - Out 2 4 - Loop 5 - 0 6 - 0 7 - 0 3fd - LSR line status 0 - Data Ready 1 - Overrun Error 2 - Parity Error 3 - Framing Error 4 - Break INterrupt 5 - Transmitter Holding Reg Empty 6 - Transmitter Shift Reg Empty 7 - (always zero) 3fe - MSR modem status 0 - Delta Clear To Send 1 - Delta Data Set Ready 2 - Trailing Edge Ring Detector 3 - Delta Rx Line Signal Detect 4 - Clear To Send 5 - Data Set Ready 6 - Ring Indicator (=1 during ring voltage) 7 - Receive Line Signal Detect (=1 when carrier appears) mode com1 9600,n,8,1 debug o 3fb 80 o 3f8 00 o 3f9 0c o 3fb 03 o 3fc 03 // UNTESTED // Might need to read LSR again to clear Data Ready bit? // while ( 1 ) if ( inp(0x03fd) & 0x01 ) fprintf(stderr, "%c", inp(0x03f8)); MODEM/SERIAL PORT WIRING 25 PIN DCE (IBM computer, modems) 25 PIN DTE (terminal) 1 (sheild) 1 2 TX ---- OUT 2 RX IN 3 RX IN 3 TX OUT 4 RTS --- OUT 4 5 CTS IN 5 6 DSR IN 6 7 GND GND 7 8 CD/RLSD IN 8 9 (tx currentloop) 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 (rx currentloop) 18 19 19 20 DTR --- OUT 20 21 21 22 RI IN 22 23 23 24 24 25 (rx currentloop ret) 25 9 PIN DCE (IBM computer, modems) 9 PIN DTE (terminal) 1 CD/RLSD IN 1 2 TX ------------ OUT 2 RX IN 3 RX IN 3 TX ---- OUT 4 DTR ----------- OUT 4 5 GND GND 5 6 DSR IN 6 7 RTS ----------- OUT 7 8 CTS IN 8 9 RI IN 9