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


© Copyright 1997 Greg Ercolano. All rights reserved.