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 (shield) 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