          I B M   P C   B I O S   S e r v i c e   R o u t i n e s  

           Adapted from IBM Technical Reference Release 11/08/82
                             by Roy Smith
----------------------------------------------------------------------------
Vector     Interrupt                               BIOS Entry
Address    Number    Name                          label
----------------------------------------------------------------------------
00-03      0         Divide by Zero                D11
04-07      1         Single Step                   D11
08-0B      2         Nonmaskable                   NMI_INT
0C-0F      3         Breakpoint                    D11
10-13      4         Overflow                      D11
14-17      5         Print Screen                  PRINT_SCREEN
18-1B      6         Reserved                      D11
1C-1F      7         Reserved                      D11

---- Hardware Service Routines ---------------------------------------------
20-23      8         Time of Day Service           TIMER_INT
24-27      9         Keyboard Service              KB_INT
28-2B      A         Reserved                      D11
2C-2F      B         Communications Service COM2:  D11
30-33      C         Communications Service COM1:  D11
34-37      D         Disk Service                  D11
38-3B      E         Diskette Service              DISK_INT
3C-3F      F         Printer Service               D11
----------------------------------------------------------------------------

40-43      10        Video I/O                     VIDEO_IO
44-47      11        Equipment Check               EQUIPMENT
48-4B      12        Memory                        MEMORY_SIZE_DETERMINE
4C-4F      13        Diskette/Disk I/O             DISKETTE_IO
50-53      14        Communications                RS232_IO
54-57      15        Cassette                      CASSETTE_IO
58-5B      16        Keyboard I/O                  KEYBOARD_IO
5C-5F      17        Printer                       PRINTER_IO
60-63      18        Resident BASIC                F600:0000
64-67      19        Bootstrap                     BOOT_STRAP
68-6B      1A        Time of Day                   TIME_OF_DAY
6C-6F      1B        Keyboard Break                DUMMY_RETURN
70-73      1C        Timer Tick (18.2 per second)  DUMMY_RETURN
74-77      1D        Video Initialization          VIDEO_PARMS
78-7B      1E        Diskette Operating Parameters DISK_BASE
7C-7F      1F        Video Graphics Characters     0

+--------------------------------------------------------------------------+
|     I B M   P C    B I O S   I n t e r f a c e   R o u t i n e s         |
+--------------------------------------------------------------------------+
Intr Func  In        Out        Comments
  #  (AH)  Regs      Regs

10   --------------- Video I/O ---------------------------------------------
---  0  Set CRT Mode
           AL                   0=40 x 25 Black & white     1= 40 x 25 Color
                                2=80 x 25 Black & white     3= 80 x 25 Color
                                4=320 x 200 Medium resolution color
                                5=320 x 200 Medium resolution black & white
                                6=640 x 200 High resolution black & white
---  1  Set Cursor Type
           CH                   Start scan line (0-7 C/G, 0-14 Mono)
           CL                   End scan line (set start to 20H for no curs.)
---  2  Set Cursor Position
           DH,DL                Row, column (0,0 = Home)
           BH                   Video page
---  3  Read Cursor Position
           BH                   Video page
                     DH,DL      Row, column (0,0 = Home)
---  4  Read Light Pen
                     AH         0=Light pen not trig, 1=valid info in regs:
                     DH,DL      Row, column of character LP position
                     CH         Raster line
                     BX         Pixel column (0-319 med-res,0-619 hi-res)
---  5  Select Active Page
           AL                   New page (0-7 for 40x25,0-3 for 80x25)
---  6  Scroll Active Page Up
---  7  Scroll Active Page Down
           AL                   Number of lines to scroll (0 if entire screen)
           CH,CL                Row, column of upper left corner
           DH,DL                Row, column of lower right corner
           BH                   Attribute to use in blanked lines
---  8  Read Attribute / Character at current cursor position
           BH                   Video page
                     AL         Character read
                     AH         Attribute of char (alpha modes only)
---  9  Write Attribute / Character at current cursor position
           BH                   Video page
           CX                   Count of characters to write
           AL                   Character to write
           BL                   Attribute to write
---  A  Write Character only at current cursor position
           BH                   Video page
           CX                   Count of characters to write
           AL                   Character to write
---  B  Set Color Palette
           BH                   Palette color ID being set
           BL                   Color value to be used with that color ID
---  C  Write Dot
           DX,CX                Row, column number
           AL                   Color value (If bit 7=1, value is OR'ed in)
---  D  Read Dot
           DX,CX                Row, column number
                     AL         Dot read
---  E  Write Teletype to Active Page
           AL                   Character to write
           BL                   Foreground color in graphics mode
---  F  Get Current Video State
                     AL         Mode currently set (see func. 0)
                     AH         Columns on screen

+--------------------------------------------------------------------------+
|     I B M   P C    B I O S   I n t e r f a c e   R o u t i n e s         |
+--------------------------------------------------------------------------+
Intr Func  In        Out        Comments
  #  (AH)  Regs      Regs

11   -------------------------------------------------+
Intr Func  In        Out        Comments
  #  (AH)  Regs      Regs

11   --------------- Equipment ---------------------------------------------
           None
                     AX         Equipment attached : Bits set as follows
                                      A H               A L
                                0 0 X 0 0 0 0 X   0 0 0 0 0 0 X 0
                                ---   - -----     --- --- ---   -
                                 1    2   3        4   5   6    7

                             1  Number of printers
                             2  Game I/O
                             3  RS232 cards
                             4  Drives
                             5  Initial video mode
                             6  System board RAM
                             7  IPL from diskette

12   -------------- Memory Size ---------------------------------------------
           None
                     AX         Number of bytes in Kbytes

13   ------------- Diskette I/O ---------------------------------------------
---  0  Reset Diskette System
           None      None       Hard resets all diskette drives, recal req'd
---  1  Read Diskette Status
                     AL         Status byte : Bits set as follows
                                80        Attachment failed to respond
                                40        Seek operation failed
                                20        NEC controller failure
                                10        Bad CRC on diskette read
                                09        Attempt to DMA across a 64k bound
                                08        DMA overrun on operation
                                04        DMA overrun on operation
                                03        Write attempted on wrt prot disk
                                02        Address mark not found
                                01        Bad command passed to diskette I/O

---  2  Read the desired sectors into memory
---  3  Write the desired sectors from memory
---  4  Verify the desired sectors
---  5  Format the desired track 

           DL                   Drive number (0-3)
           DH                   Head number
           CH                   Track number
           CL                   Sector number
           AL                   Number of sectors (not used for format)
           ES:BX                Address of buffer (not used for verify)

                     AH         Status of operation (see above)
                     CY         1 if failed, 0 if ok

+--------------------------------------------------------------------------+
|     I B M   P C    B I O S   I n t e r f a c e   R o u t i n e s         |
+--------------------------------------------------------------------------+
Intr Func  In        Out        Comments
  #  (AH)  Regs      Regs

14   ------------- RS-232 I/O -----------------------------------------------
---  0  Initialize Communications Port
           DX                   Interface card (0=COM1:, 1=COM2:)
           AL                   Parameters to set up : Bits are as follows
                                      A L
                                0 0 0 0 0 0 0 0 
                                --- - --- -----
                                 1  2  3    4

                             1  Word length (10=7 bit, 11=8 bit)
                             2  Stopbits (0=1, 1=2)
                             3  Parity (00=none, gth (10=7 bit, 11=8 bit)
                             2  Stopbits (0=1, 1=2)
                             3  Parity (00=none, 01=odd, 11=even)
                             4  Baud (000=110, 001=150, 010=300, 011=600,
                                   100=1200, 101=2400, 110=4800, 111=9600)

                     AH         Set as in status (call 3)
---  1  Send Character to 100=1200, 101=2400, 110=4800, 111=9600)

                     AH         Set as in status (call 3)
---  1  Send Character to Communications Line
           DX                   Interface card (0=COM1:, 1=COM2:)
           AL                   Character to send
                     AH         Set as in status (call 3)
---  2  Recieve Character from Communications Line
           DX                   Interface card (0=COM1:, 1=COM2:)
                     AL         Character
                     AH         0 if no error, set as status if nonzero
---  3  Get Communications Status 
           DX                   Interface card (0=COM1:, 1=COM2:)
                     AH         Line status : Bits set as follows
                                80        Time out
                                40        Transmit shift reg empty
                                20        Transmit holding reg empty
                                10        Break detect
                                08        Framing error
                                04        Parity error
                                02        Overrun error
                                01        Data ready

                     AL         Modem status : Bits set as follows
                                80        Recieved line signal detect
                                40        Ring indicator
                                20        Data set ready
                                10        Clear to send
                                08        Delta recieved line signal detect
                                04        Trailing edge ring detector
                                02        Delta data set ready
                                01        Delta clear to send 

15   ----------- Cassette I/O ----( Obsolete )-------------------------------

+--------------------------------------------------------------------------+
|     I B M   P C    B I O S   I n t e r f a c e   R o u t i n e s         |
+--------------------------------------------------------------------------+
Intr Func  In        Out        Comments
  #  (AH)  Regs      Regs

16   ----------- Keyboard I/O -----------------------------------------------
---  0  Read Next Character 
                     AL         Character struck
                     AH         Scan code of key
---  1  Check Typeahead Status
                     ZF         1 if no key available, 0 if key available
                     AL,AH      Character/Scan code if available. Keystroke
                                remains in buffer.
---  2  Get Current Shift Status
                     AL         Shift flag status : Bits set as follows
                                80        Insert state
                                40        Caps lock state
                                20        Num lock state
                                10        Scroll lock state
                                08        Alt shift is depressed
                                04        Ctl shift is depressed
                                02        Left shift is depressed
                                01        Right shift is depressed

17   ----------- Printer I/O ------------------------------------------------
---  0  Print Character
           DX                   Printer to be used (0,1,2)
           AL                   Character to print
                     AH         Status set as in call 2
---  1  Initialize Printer Port
           DX                   Printer to be used (0,1,2)
                     AH         Status set as in call 2
---  2  Get Printer Status
           DX                   Printer to be used (0,1,2)
                     AH         Printer status : Bits set as follows
                                80        Not busy (ready?)
                                40        Acknowledge
                                20        Out of paper
                                10        Selected
                                08        I/O error
                                01        Time out
