1           q BIOS.DFV                                                            STEINIC @     Seite 
Adressplan eines kompatiblen PC
00000-003FF Interrupt-Vektoren
BIOS-Vektoren
00 0000:0000 CPU   Divide error 
01 0000:0004 CPU   Single Step, 6:Debug Exception
02 0000:0008 CPU   NMI

This function is called in the event of a memory parity error or may occur in the event of other hardware problems or failures (depends on the specific manufacturer's hardware). Displays the appropriate error message and halts the processor.

03 0000:000C CPU   Breakpoint
04 0000:0010 CPU   Overflow
05 0000:0014 BIOS  Print Screen

Send the present active display screen contents to the printer if the printer is idle and not out of paper. The status of the print screen function is in prn_screen_stat at 0050:0000. Control-Break will terminate an active print screen operation.

06 0000:0018 186   Invalid Opcode Exception
07 0000:001C 186   Co-Processor unavailable
08 0000:0020 BIOS  Timer Ticks-hardware 8259-1, IRQ 0
08 0000:0020 286   LIDT or Double Fault

This is the primary timer used to control the clock and other key system resources. It is called indirectly by channel A of the 8253 timer every 18.2 milliseconds. Every timer tick also calls int 1Ch for user needs (int 1Ch points to an iret instruction unless changed by a resident program). The timer interrupt is given the highest maskable interrupt priority upon power up. The main timing functions of int 8 include increment of a 32-bit time since powered on counter, timer_hi and timer_low, and after 24 hours since powered on, timer_rolled is incremented. The last task of int 8 is turning off the floppy drive motor after 2 seconds of non-use. The counter dsk_motor_tmr is decremented upon each occurrence of int 8. When the count reaches zero, the motor is set off, and the motor running flags are cleared in dsk_motor_stat.

09 0000:0024 BIOS   Keyboard, BIOS-hardware 8259-1, IRQ 1
09 0000:0024 286    Co-prozessor segment

When any key is pressed on the keyboard, the hardware calls this interrupt to service the pressed key or key combination. The hardware provides the key pressed in a non-ASCII scan code format read at i/o port 60h. The servicer acknowledges receipt of the key by toggling bit 7 of port 61h.(Port 61h should be read first, then bit 7 ored on, output to port 61h, then anded off, and resent to port 61h).

The read key is decoded to yield an ASCII character, special function key (such as F1) or a control function like Left Shift Key down. The converted ASCII character is placed into the next available position in the circular queue keybd_queue to keybd_q_end. It is put in the position indicated by keydb_q_tail when it will not cause the loss of earlier entered data. The value keybd_q_head points to the oldest key pressed in the buffer which has not been removed from the queue (the normal process uses int 16h to remove keys from the queue and return the key value to the int 16h caller).

The 16 word queue holds up to 16 keys. If keybd_q_head equals the keybd_q_tail, the queue is empty. Valid keys in the queue comprise the upper byte scan code and the lower byte ASCII character. If the key pressed has no ASCII equivalent (i.e F1 to F12), the lower byte is zero.

Toggle and shift keys are not placed in the buffer, but appear in 2 status registers keybd_flags_1 and keybd_flags_2.
     
Special key combinations will cause other events to occur:
   Ctrl-Alt_Del  -  Reset computer by jumping to power_on_reset
   Print screen  -  Call int_5_prn_scrn to print the current screen
   Ctrl-Break    -  Call int_1Bh control break key processor (DOS)
   Pause         -  Wait until an ASCII key is pressed, without
                    placing the key in the queue

0A 0000:0028 BIOS   BIOS-hardware 8259-1, IRQ 2
0A 0000:0028 BIOS   LAN ADAPTER

On systems equipped with 2 interrupt controller chips (8259), IRQ 2 is used to support the second interrupt controller. In this case, int 71h (IRQ 9) is used to replace IRQ 2. Hardware calls to int 71h are redirected to this interrupt to maintain compatibility.

0B 0000:002C BIOS   Serial, BIOS-hardware 8259-1, IRQ 3

Called by the secondary serial port chip.

0C 0000:0030 BIOS   Serial, BIOS-hardware 8259-1, IRQ 4

Called by the primary serial port chip.

0D 0000:0034 BIOS   Disk, BIOS-hardware 8259-1, IRQ 5
0E 0000:0038 BIOS   Diskette, BIOS-hardware 8259-1, IRQ 6
0F 0000:003C BIOS   Printer, BIOS-hardware 8259-1, IRQ 7
10 0000:0040 BIOS   Video
10 0000:0040 286    Invalid TSS Exception

Called with:  ah = primary function number
     
Returns: (unless otherwise indicated)
              ax - altered (some systems may not alter ax)
     
Functions:
  ah = 0     Set video display mode in al.
  ah = 1     Set cursor size
               Call with:  ch = top line, 0-32
                           cl = bottom line, 0-32
  ah = 2     Set cursor location
               Call with:  bh = page number, 0 = 1st page
                           dh = row (0 for top row)
                           dl = column (0 for leftmost)
  ah = 3     Get cursor location
               Call with:  bh = page number, 0 = 1st page
               Returns:    ch/cl = cursor size (top & bottom)
                           dh/dl = row and column of cursor
  ah = 4     Get light pen location
               Returns:    ah = 0 not on/unsupported & bx,cx,dx changed
                                1 status valid
                           bx = pixel column
                           cx = horizontal line number
                           dh/dl = row and column
  ah = 5     Set Page number al, 0 = 1st page
  ah = 6     Up scroll screen
               Call with:  al = # bottom lines to clear, set 0 for all
                           bh = attribute to fill cleared lines
                           ch/cl = row/column of top left scroll corner
                           dh/dl = row/column of bottom right scroll corner
  ah = 7     Down scroll screen
               Call with:  al = # top lines to clear, set 0 for all
                           bh = attribute to fill cleared lines
                           ch/cl = row/column of top left scroll corner
                           dh/dl = row/column of bottom right scroll corner
  ah = 8     Get character & attribute at cursor
               Call with:  bh = page number, 0 = 1st page
               Returns:    ah/al = attribute/character
  ah = 9     Write character & attribute at cursor (graphics modes)
               Call with:  al = character
                           bh = page number, 0 = 1st page
                           bl = attribute, bit 7 = 1 to xor with old color
                           cx = Number of same characters to write
  ah = 0Ah   Write character at cursor (graphics modes)
               Call with:  al = character
                           bh = page number, 0 = 1st page
                           cx = Number of same characters to write
  ah = 0Bh   Set colors (typically in low res modes)
               Call with:  bh = 0, bl = color low res background, border
                           bh = 1, bl = 0/1 for low res color group 0/1
  ah = 0Ch   Write graphics dot
               Call with:  al = color, bit 7 = 1 to xor bit with old color
                           cx/dx = pixel row/pixel column
  ah = 0Dh   Read graphics dot
               Call with:  cx/dx = pixel row/pixel column
  ah = 0Eh   Write in ASCII mode (cr, lf, bell, and bs as operators)
               Call with:  al/bl = character/color
  ah = 0Fh   Get video info
               Returns:    ah = columns active
                           al = active video mode
                           bh = active page, 0 = 1st page
  ah = 10h   Colors  (EGA/VGA)   Called with al = subfunction
               al = 1    bl = color register (0-15)  bh = color to set
               al = 2    es:dx = ptr to change all 16 colors & overscan #
               al = 3    bl = color high bit as: 0-intensity, 1-blink
             For VGA equipped systems only
               al = 7    bl = color register to get in bh
               al = 8    bh = returned overscan value
               al = 9    es:dx = ptr where to put all 16 colors & overscan
               al = 10h  bx = color register to set; ch/cl/dl = grn/blu/red
               al = 12h  es:dx = ptr to change color registers
                         bx = 1st register to set, cx = # of registers
               al = 13h  bl = 0, set color page mode in bh
                         bl = 1, set page;  bh = page number
               al = 15h  bx = color reg to read; ch/cl/dl = grn/blu/red
               al = 17h  es:dx = ptr where to load color regs
                         bx = 1st register to get, cx = # of registers
               al = 1Ah  get color page info; bl = mode; bh = page #
  ah = 11h   Reset mode with new character set (leave memory as-is)
               al = 0    Character set load
                         es:bp = ptr to table of chars
                         bl/bh = which block/bytes per char
                         cx/dx = # of characters/where to start in block
               al = 1    bl = block to load the mono character set
               al = 2    bl = block to load the double wide character set
               al = 3    bl = block select related to attribute
               al = 4    bl = block to load the 8 by 16 set (VGA)
               al = 10h - 14h same as 0 - 4, must occur after setting mode
               al = 20h  es:bp = ptr to table of char, using int 1Fh ptr
               al = 21h  es:bp = ptr to table of char, using int 43h ptr
                         bl = 0-dl=# rows; 1-14 rows; 2-25 rows; 3-43 rows
                         cx = number of bytes per character in table
               al = 22h  use 8 by 14 char set, bl=rows (see al=21h)
               al = 23h  use double wide char set, bl=rows (see al=21h)
               al = 24h  use 8 by 16 char set, bl=rows (see al=21h)
             Get table pointer and info
               al = 30h  es:bp = ptr returned; cx=bytes per char; dl=rows
                         bh = 0, get int 1Fh      bh = 4, get double wide
                         bh = 1, get int 43h      bh = 5, get mono 9 by 14
                         bh = 2, get 8 by 14      bh = 6, get 8 by 16 (VGA)
                         bh = 3, get double wide  bh = 7, get 9 by 16 (VGA)
  ah = 12h   Miscellaneous functions, bl = sub-function
               bl = 10h  Get info,  bh = 0-now color, 1-now mono
                         ch/cl = info bits/switches
               bl = 20h  Set print screen to work with EGA/VGA
             Functions for VGA only (bl = 30-34h return al = 12h)
               bl = 30h  Set # of scan lines, 0-200, 1-350, 2-400
                           activates after mode change
               bl = 31h  ax = 0/1  allow/prevent palette load with new mode
               bl = 32h  al = 0/1  video off/on
               bl = 33h  al = 0/1  gray scale summing off/on
               bl = 34h  al = 0/1  scale cursor size to font off/on
               bl = 35h  switch between adapter and motherboard video
                         al = 0, adapter off, es:dx = save state area
                         al = 1, motherboard on
                         al = 2, active video off, es:dx = save area
                         al = 3, inactive video on, es:dx = save area
               bl = 36h  al = 0/1  screen off/on
  ah = 13h   Write character string (cr, lf, bell, and bs as operators)
               Call with:  al = 0/1 write characters, cursor not/is moved
                                 bl = attribute of all characters
                              = 2/3 write characters, cursor not/is moved
                                 string alternates character & attribute
                           bh = page number, 0 = 1st page
                           cx = number of characters
                           dh/dl = row and column to start
                           es:bp = ptr to character string
  ah = 14h   LCD display support, al = sub-function
                al = 0,    es:di = ptr to font table to load
                           bl/bh = which block/bytes per char
                           cx/dx = # of characters/where to start in block
                al = 1,    bl = block # of ROM font to load
                al = 2,    bl = how to support high intensity
  ah = 15h   LCD info table ptr returned in es:di
                ax = 0      there is no alternate adapter
                ax = 5140h  LCD is the alternate
                ax = 5153h  CGA is alternate
                ax = 5151h  MDA is alternate
     
                     **** VGA SUPPORT ONLY ****
  ah = 1Ah   Get/Set types of displays which are operating
                al = 0, get displays, returns al = 1Ah
                        bl = in use display code
                        bh = alternate display code
                al = 1, set codes, returns al = 1Ah
                        bl = in use display code
                        bh = alternate display code
                codes:   0 = no display
                         1 = mono display
                         2 = CGA
                         4 = EGA, color
                         5 = EGA, mono
                         6 = PGA
                         7 = VGA, mono  (PS/2 MCA only)
                         8 = VGA, color (PS/2 MCA only)
                        Bh = VGA, mono  (PS/2 non MCA)
                        Ch = VGA, color (PS/2 non MCA)
                       FFh = display type not known
  ah = 1Bh   Get video system information
                call with:  bx = 0
                            es:di = ptr to buffer where to put info
  ah = 1Ch   Video system save & restore, al = sub-function
                call with:  al = 0, get buffer size
                               = 1, save system, buffer at es:bx
                               = 2, restore system, buffer at es:bx
                            cx bit 0 = 1 for hardware registers
                               bit 1 = 1 for software states
                               bit 2 = 1 for colors & DAC registers

11 0000:0044 BIOS   Equipment
11 0000:0044 286    Segment not present
     
Returns:   ax = equip_install word
     
                15   14   13   12   11   10    9    8
                 \    /       game  \          /
                # of printer  port   # of RS-232
                 ports 0-3    used    ports 0-4
     
                 7    6    5    4    3    2    1    0
                 \    /    \    /    \    /  Math   |
                  # of   video mode   RAM     uP    no
                 floppy  at boot up  00=16K       floppy
                 drives  00=EGA      01=32K       drive
                   1-4   01=CGA-40   10=48K       if 0
                 if bit  10=CGA-80   11=64K
                  0 = 1  11=MDA-80   (old PCs)
      
                Note: bit 13 = modem on PC lap-tops
                      bit  2 = mouse on PS/2

Regs used: ax

12 0000:0048 BIOS   Memory Size
12 0000:0048 286    Stack Fault Exception
     
Returns:   ax = number of contiguous 1K bytes blocks of memory
                from 0 to 640 K.
     
Regs used: ax

13 0000:004C BIOS   Disk Services
13 0000:004C 286    Protection Fault Exception

      FLOPPY DISK SERVICES
     
Note: Floppy disk services may be vectored to this routine from int 40h on newer systems with hard disk support inside the BIOS.
     
Call with: ah = sub-function number
           dl = drive number (unless otherwise noted), drive a: = 0
     
Returns:   carry = 0 if function ok
           ah = status (unless otherwise noted)
             ah = 0    Function ok
             ah = 1    Invalid value passed or unsupported function
             ah = 2    Can not locate address mark
             ah = 3    Floppy write protected
             ah = 4    Sector not found
             ah = 6    Floppy changed line on (1.2 meg drives)
             ah = 8    DMA overrun occurred
             ah = 9    DMA attempted across 64K byte boundary
             ah = 0Ch  Media type not found
             ah = 10h  CRC read error
             ah = 20h  Floppy controller failure
             ah = 40h  Seek operation failed
             ah = 80h  Floppy drive not ready
     
Functions:
  ah = 0     Floppy disk controller reset
  ah = 1     Get last status
  ah = 2     Read sectors
               Call with:  al = number of sectors to read
                           ch/cl = starting track/starting sector
                           dh = head number, head 0 = 0
                           es:bx = ptr to buffer where to put data
  ah = 3     Write sectors
               Call with:  al = number of sectors to write
                           ch/cl = starting track/starting sector
                           dh = head number, head 0 = 0
                           es:bx = ptr to buffer where to get data
               Return:     al = number of sectors written
  ah = 4     Verify sectors
               Call with:  al = number of sectors to compare
                           ch/cl = starting track/starting sector
                           dh = head number, head 0 = 0
                           es:bx = ptr to buffer where to compare data
               Return:     al = number of sectors checked
  ah = 5     Format track
               Call with:  al = number of sectors to format
                           ch/cl = starting track/starting sector
                           dh = head number, head 0 = 0
                           es:bx = ptr to table of address fields
  ah = 8     Get drive information (not supported by all systems)
               Returns:    ax/bh = 0          size dia.    size dia.
                           bl = drive type: 1=360K 5.25   3=720K 3.5
                                            2=1.2M 5.25   4=1.4M 3.5
                           cx bits 7&6, 15-8 = number of tracks, 0=1 track
                              bits 5-0 = number of sectors per track
                           dh/dl = # of heads/number of floppy drives
                           es:di = ptr to floppy parameter table
  ah = 15h   Get drive type (not supported by all systems)
               Returns:    ah = 0 no drive
                           ah = 1/2  floppy changed line not/is available
  ah = 16h   Get changed floppy status (not supported by all systems)
               Returns:    ah = 0   floppy in drive,     carry = 0
                           ah = 1   bad drive number,    carry = 1
                           ah = 6   floppy out of drive, carry = 1
                           ah = 80h drive not ready,     carry = 1
  ah = 17h   Specify media type for a drive
               Call with:  al = 1  use a 320/360K floppy in 360k drive
                           al = 2  use a 360K floppy in a 1.2M drive
                           al = 3  use a 1.2M floppy in a 1.2M drive
                           al = 4  use a 720K disk in a 720K drive
  ah = 18h   Prepare for format (not supported by all systems)
               Call with:  cx bits 7&6, 15-8 = number of tracks, 0=1 track
                              bits 5-0 = number of sectors per track
               Returns:    es:di = ptr to floppy parameter table

      HARD DISK SERVICES
     
Call with: ah = sub-function number (or with 80h for hard disk)
           dl = drive number (unless otherwise noted) 0 or 1
                 set bit 7 to get return drive parameters
     
Returns:   carry = 0 if function ok
           ah = status (unless otherwise noted)
             ah = 0    Function ok
             ah = 1    Invalid value passed or unsupported function
             ah = 2    Can not locate address mark
             ah = 3    Write protected
             ah = 4    Sector not found
             ah = 5    Reset failure
             ah = 7    Parameter activity failed
             ah = 8    DMA overrun occurred
             ah = 9    DMA attempted across 64K byte boundary
             ah = 0Ah  Sector flag bad
             ah = 0Bh  Cylinder bad
             ah = 0Dh  Wrong # of sectors (format)
             ah = 0Eh  Detected control data address mark
             ah = 0Fh  DMA arbitration level has invalid range
             ah = 10h  CRC or EDC (Error Detect & Correct) has an
                         unresolvable error
             ah = 11h  Data corrected by EDC
             ah = 20h  Disk controller failure
             ah = 40h  Seek operation failed
             ah = 80h  Hard disk not ready
             ah = BBh  Error not defined
             ah = CCh  Write error
             ah = E0h  Error register is zero
             ah = FFh  Disk sense error
           If dl bit 7 was set to 1 on entry:
             cx bits 7&6, 15-8 = highest cylinder number
                bits 0-5 = highest sector number
             dh = highest head number
             dl = number of hard disks (1 or 2)
     
Functions:
  ah = 0     Hard disk controller reset
  ah = 1     Get last status
  ah = 2     Read sectors
               Call with:  al = number of sectors to read
                           cx bits 7&6, 15-8 = cylinder number
                              bits 0-5 = sector number
                           dh = head number, head 0 = 0
                           es:bx = ptr to buffer where to put data
  ah = 3     Write sectors
               Call with:  al = number of sectors to write
                           cx bits 7&6, 15-8 = cylinder number
                              bits 0-5 = sector number
                           dh = head number, head 0 = 0
                           es:bx = ptr to buffer where to get data
  ah = 4     Verify sectors
               Call with:  al = number of sectors to compare
                           cx bits 7&6, 15-8 = cylinder number
                              bits 0-5 = sector number
                           dh = head number, head 0 = 0
  ah = 5     Format cylinder (non-ESDI type disks)
               Call with:  cx bits 7&6, 15-8 = cylinder number
                           dh = head number, head 0 = 0
                           es:bx = ptr to bad sector map (non XT)
                           al = interleave number (XT only)
  ah = 6     Format cylinder & set bad sector flags (XT only)
               Call with:  al = interleave number
                           cx bits 7&6, 15-8 = cylinder number
                           dh = head number, head 0 = 0
  ah = 7     Format drive, begin at specific cylinder (XT only)
               Call with:  al = interleave number
                           cx bits 7&6, 15-8 = cylinder number
                           dh = head number, head 0 = 0
  ah = 8     Get drive parameters
               Returns:    cx bits 7&6, 15-8 = max cylinder number
                              bits 0-5 = max sector number
                           dh = max head number, head 0 = 0
  ah = 9     Set parameters for drive (ignored for ESDI drives)
               Call with   dh = 80h to use int 41h ptr, drive 0
                           dh = 81h to use int 46h ptr, drive 1
  ah = 0Ch   Disk seek
               Call with:  cx bits 7&6, 15-8 = cylinder number
                           dh = head number, head 0 = 0
  ah = 0Dh   Secondary Disk Reset
  ah = 10h   Check if drive is ready
  ah = 11h   Recalibrate drive
  ah = 15h   Get drive type (all but XT systems)
               Returns:    ah = 0 no drive (cx & dx = 0)
                           ah = 3 hard disk
                           cx:dx = size of disk in 512 byte blocks
                           al = 4  use a 720K disk in a 720K drive
  ah = 19h   Park disk heads (PS/2 systems only)
  ah = 1Ah   Format hard disk (ESDI only)
               Call with:  al = number of blocks in defect table (0=none)
                           cl bit 0 = 1 when no primary defect map
                              bit 1 = 1 when no secondary defect map
                              bit 2 = 1 allow logging found surface errors
                                          in the secondary defect map
                              bit 3 = 1 Do extended surface analysis
                              bit 4 = 1 interrupt after each cyldr format

14 0000:0050 BIOS   Serial Ports Services
14 0000:0050 386    Page Fault exception
     
Call with: ah = sub-function number
           dx = communications number, com1 = 0
     
Returns:   ah = line status,  bit 0 = Data ready
                              bit 1 = Overrun error
                              bit 2 = Parity error
                              bit 3 = CRC framing error
                              bit 4 = Break detect
                              bit 5 = Xmit buffer register empty
                              bit 6 = Xmit shift out register empty
                              bit 7 = No response, ignore bits 0-6
     
           al = modem status, bit 0 = Change in Clear To Send
                              bit 1 = Change in Data Set Ready
                              bit 2 = Falling edge ring detect
                              bit 3 = Change in receive detect line
                              bit 4 = Clear to Send (CTS)
                              bit 5 = Data Set Ready (DTS)
                              bit 6 = Ring detected
                              bit 7 = Receive detect line
     
Functions:
  ah = 0     Reset the specified port
               Call with:  al serial port register values
                              bits  7    6    5    4    3    2    1    0
                                   --baud-rate--  -Parity- Stop  --Word--
                                    000 =  110      bits    bit    size
                                    001 =  150                    (bits)
                                    010 =  300    00 = off  0=1
                                    011 =  600    01 = odd  1=2   10 = 7
                                    100 = 1200    10 = off        11 = 8
                                    101 = 2400    11 = even
                                    110 = 4800
                                    111 = 9600
 ah = 1      Transmit a character
               Call with:  al = character to send (not changed on exit)
 ah = 2      Received a character
               Returns:    al = character received
 ah = 3      Get status
 ah = 4      Advanced Initialization (not supported on all systems)
               Call with:  al = 0/1  no break/break
                           bh = Parity,    0 = none     3 = stick odd
                                           1 = odd      4 = stick even
                                           2 = even
                           bl = 0/1 Stop bits set to 1/2
                           ch = Word size, 0 = 5 bits   2 = 7 bits
                                           1 = 6 bits   3 = 8 bits
     
                           cl = Baud rate, 0 =  110     5 =  2400
                                           1 =  150     6 =  4800
                                           2 =  300     7 =  9600
                                           3 =  600     8 = 19200
                                           4 = 1200
  ah = 5     Advanced port control (not supported on all systems)
               al = 0  Get modem register
                         Returns: bl bit 0 = Data Terminal Ready (DTR)
                                     bit 1 = Request To Send (RTS)
                                     bit 2 = Out 1
                                     bit 3 = Out 2
                                     bit 4 = Loop modem
               al = 1  Set modem register
                         Call with:  bl = value for register (see above)

15 0000:0054 BIOS   General Services, Cassette
     
On old PCs this function is only used for cassette servicing. Additional functions have been added for advanced features with newer equipment.
     
Called with: ah = function code
     
Returns:     CF = 0 if successful
             CF = 1 if failure or function not supported
     
Functions:
  ah = 0     Cassette motor set on
  ah = 1     Cassette motor set off
  ah = 2     Read cx bytes from cassette, es:bx = ptr to load area
  ah = 3     Write cx bytes to cassette,  es:bx = ptr to read area
  ah = 0Fh   Disk format hook, called from disk format routines
               after a cylinder access completed. Called with:
               al = 1-undergoing surface analysis, 2-if formating
  ah = 21h   Error log (PS 2), al = 0 to read, al = 1 to write
     
                  ***  LAP TOP MACHINES ONLY - 40h to 44h  ***
  ah = 40h   Systems info in cx, bx - al = 0 to read, 1 to write
               for modem info in bx - al = 2 to read, 3 to write
  ah = 41h   Wait for an event, dx = i/o port to read or use es:di
               as ptr to user event. al = type of event 0-4,11-14
               bh = event mask, bl = # of 55ms counts to timeout
  ah = 42h   Power off, al = 0 or 1 for mode of power off
  ah = 43h   Get system status in al
                   7     6     5     4       3     2     1    0
                 low   extrn  bad  pwr up  modem  ports      LCD
               battery  pwr  time  alarm    on     on      missing
  ah = 44h   Modem power, al = 0 turn off,  al = 1 turn on
     
                *** FUNCTIONS IN RECENT BIOS VERSIONS ONLY ***
  ah = 4Fh   Keyboard input hook, called every keystroke with
               al = scan code. CF = 1 to change or use the scan
               code in al. CF = 0 to ignore the key.
  ah = 80h   Open device number bx, in process number cx.
  ah = 81h   Close device number bx, in process number cx.
  ah = 82h   Terminate device number bx
  ah = 83h   Wait for timeout, and set bit 15 at ptr es:bx when
               timed out. al = 0 to set wait period cx:dx uSec,
               al = 1 to stop timeout timer.
  ah = 84h   Game port read, dx = 0 to read switches into al
               high nibble,  dx = 1 to read linear position
               (Unit 1: ax = x, bx = y   Unit 2: cx = x, dx = y)
  ah = 85h   Get system request key state, al = 0 down, al = 1 up
  ah = 86h   Wait cx:dx microseconds before return
  ah = 87h   Transfer cx words to/from memory above 1 meg
               es:si ptr to table with source & destination ptrs:
               es:si -> zeros          db  16dup(0)
                        src_seg_limit  dw  ?        ; 1-64K bytes
                        scr_ptr_low    dw  ?        ; 0-64K range
                        scr_ptr_high   db  ?        ; 0-16 Meg range
                        scr_rights     db  93h      ; r/w access
                        scr_zero       dw  0
                        dst_seg_limit  dw  ?        ; 1-64K bytes
                        dst_ptr_low    dw  ?        ; 0-64K range
                        dst_ptr_high   db  ?        ; 0-16 Meg range
                        dst_rights     db  93h      ; r/w access
                        dst_zero       dw  0
                        zeros2         db  16dup(0)
               Notes:
                 cx = 32K words max xfer, ptr_low & ptr_high form
                 a 24 bit physical address (do not use a segment)
               Return codes: al = 0 if ok, al = 1 parity error
                 al = 2 other errors, al = 3 gate addr line 20 bad
  ah = 88h   Get extended memory size (above 1 Meg boundary)
               ax = (number of bytes / 1024)
  ah = 89h   Go to protected mode of operation. es:si ptr to table
               comprised of 8 groups of 8 byte ptr sub-arrays. Each.
               group is formed from 8 bytes as follows:
                   seg_limit    dw  ?     ; 1-64K bytes
                   ptr_low      dw  ?     ; 0-64K range
                   ptr_high     db  ?     ; 0-16 Meg range
                   rights       db  93h   ; read/write access
                   zero         dw  0     ; set to zero
               Ptr_low & high form a 24 bit physical address.
     
               The 8 groups are as follows:
                 es:si ->  Group_1   Set to all zero
                           Group_2   ptr to beginning of Group_1
                           Group_3   ptr to Interrupt Descript Table IDT
                           Group_4   ptr to present DS segment
                           Group_5   ptr to present ES segment
                           Group_6   ptr to present SS segment
                           Group_7   ptr to present CS segment
                           Group_8   ptr where to jump to when done
               Also: bh & bl set as offset from beginning of IDT to
                 spot where 1st & 2nd set of 8 hardware interrupts begin.
               Returns ah = 0 if ok, regs changed: ax,bp,ds,es,ss,cs
  ah = 90h   Device busy - used to signal DOS when it must wait.
               Type   0  Disk timeout          0FCh  Hard disk timeout
               codes  1  Floppy timeout                (PS 2 only)
               (al)   2  Keyboard no timeout   0FDh  Floppy motor timeout
                      3  Mouse timeout         0FEh  Printer timeout
                    80h  Local area network (es:bx = network cntrl block
               Returns CF = 0 if failure, 1 if minimum wait time occurred
  ah = 91h   Interrupt done - used to signal DOS when hardware done
               al = type code (Device busy type codes)
  ah = C0h   Get ROM system information table ptr in es:bx. See data
               area starting at byte "sys_info_size".
     
                *** PS 2 & COMPATIBLES ONLY - C1h to C4h ***
  ah = C1h   Get Extended BIOS data area segment in es
  ah = C2h   Mouse support (BIOS). Sub-function code in al
                 al = 0  if bh = 0 mouse off, bh = 1 mouse on
                 al = 1  reset mouse & parameters, returns bh = 0
                           bl altered on return
                 al = 2  Set number of updates per second in bh,
                           bh = 0 - 10 updates/sec  4 - 80  updates/sec
                                1 - 20 updates/sec  5 - 100 updates/sec
                                2 - 40 updates/sec  6 - 200 updates/sec
                                3 - 60 updates/sec
                 al = 3  Set resolution in counts per millimeter:
                           bh = 0 - 1 cnts per mm   2 - 4 cnts per mm
                                1 - 2 cnts per mm   3 - 8 cnts per mm
                 al = 4  Get device type, bh = 0
                 al = 5  Initialize pointing device interface data size
                           bh = size 1 to 8 (1 to 8 bytes)
                 al = 6  Additional sub-functions in bh:
                           bh = 0  Get status, cl = cnts per mm (see al=3)
                                   dl = updates/sec in hex, bl = status:
                                        bit 6 = mode (0=stream, 1=remote)
                                            5 = 0 disabled, 1 enabled
                                            4 = scaling (0=1:1, 1=2:1)
                                            2 = Left button pressed
                                            0 = right button pressed
                           bh = 1  Set scaling to 1:1
                           bh = 2  Set scaling to 2:1
                 al = 7  Set location to "call far" when data available
                            in es:bx
               Return code for all sub-functions in al:
                 al = 0  successful             3  interface error
                      1  bad function call      4  resend
                      2  invalid input          5  no far call installed
  ah = C3h   Watchdog timer mode al = 0 disable, al = 1 enable,
               bx = set counter value 1 to FFh
  ah = C4h   Bus option select (POS) subfunction in al,
               al = 0  Get base POS adapter register address in dx
                    1  Enable setup for slot bl
                    2  Adapter enable

16 0000:0060 BIOS   Keyboard-Services
16 0000:0060 286    Coprozessor error Exception
     
Call with:   ah = sub-function number
     
Functions:
  ah = 0     Get a key, and wait until one is available if none are
               in the queue.
               Returns:    ah = keyboard scan code
                           al = ASCII character, or 0 if non-ASCII
  ah = 1     Get key status
               Returns:    zero flag = 0 if a valid key is in the queue
                               ah = keyboard scan code
                               al = ASCII character, or 0 if non-ASCII
                           zero flag = 1 if no keys in the queue
  ah = 2     Get shift status register
               Returns:    al = bits  7    6    5    4    3    2    1    0
                                    right left ctrl alt scrl  num  cap insrt
                                    -------shifts------ ------toggles-------
                                          1 = down            1 = on
  ah = 3     Set repeating character rate (not supported in all systems)
               Call with:  al = 5
                           bh = start delay, 0 = 250 ms    2 =  750 ms
                                             1 = 500 ms    3 = 1000 ms
                           bl = speed in characters per second - values
                                  range from 0 = 30 cps, to 1Fh = 2 cps
  ah = 5     Load keyboard queue (not supported in all systems)
               Call with:  ch/cl = scan code/character to load into the queue
               Returns:    al = 0 if ok, 1 if keyboard queue is full
     
                  **** Support for extended keyboard functions ****
  ah = 10h   Get a key (similar to ah = 0, not supported in all systems)
  ah = 11h   Get key status (similar to ah = 1, not supported in all systems)
  ah = 12h   Get shift info (similar to ah = 2, not supported in all systems)

17 0000:0060 BIOS   Printer-Services
     
Call with:  ah = function code
            dx = printer number 0-2 (some systems allow 0-3)
     
Returns:    ah = status bits
                  7      6      5      4      3     2  1     0
                 not  acknow-  no   select   I/O   unused   no
                 busy  ledge  paper         error        response
                 __________from printer__________
     
Functions:
  ah = 0   Send character to printer, al = character
  ah = 1   Printer port initialization
  ah = 2   Get printer status in ah

18 0000:0060 BIOS   ROM Basic
     
Note: ROM basic points to F600 segment, and has been adjusted to segment F000 to process in-line with the balance of the BIOS code. Internal data references may shift to segment F600 depending on implementation.

19 0000:0064 BIOS   Bootstrap-Loader
     
Floppy drive a: attempts a read from the first sector of the disk. If read properly (i.e a boot disk is in drive a:), control is transferred to the loaded program. The boot sector at track 0, sector 1 is transfered to memory at 0:7C00h. dh = drive which was used (0=A:). Control is passed to 0:7C00h.

1A 0000:0068 BIOS   Time of Day
     
Call with:   ah = sub-function number
     
Functions:
  ah = 0     Get system timer (increments every 54.92 ms from int 8)
               Returns:    al = # of 24 hour periods since read/powered up
                           cx:dx = 32 bit count
  ah = 1     Get system timer & reset 24 hour counter
               Returns:    cx:dx = 32 bit count
     
               **** System must have CMOS clock for services 2-0Bh ****
  ah = 2     Get time in BCD format
               Returns:    ch/cl = hours/minutes
                           dh = seconds
                           dl = 0/1 if daylight savings time operation off/on
                           carry flag = 0 if clock ok, 1 if stopped
  ah = 3     Set time in BCD format
               Call with:  ch/cl = hours/minutes
                           dh = seconds
                           dl = 0/1 if daylight savings time operation off/on
  ah = 4     Get date in BCD format
               Returns:    cx = four digit year
                           dh/dl = month/day
                           carry flag = 0 if clock ok, 1 if stopped
  ah = 5     Set date in BCD format
               Call with:  cx = four digit year
                           dh/dl = month/day
  ah = 6     Set 24 hour alarm (alarm vectors to int 4Ah)
               Call with:  ch/cl = hours/minutes
                           dh = seconds
  ah = 7     Clear alarm
  ah = 9     Get alarm time & status
               Returns:    ch/cl = hours/minutes
                           dh = seconds
                           dl = 0/1 alarm off/on
  ah = 0Ah   Get days counter
               Returns:    cx = number of days since 1-Jan-80
  ah = 0Bh   Set days counter
               Call with:  cx = number of days since 1-Jan-80
1B 0000:006C BIOS   KEYBOARD BREAK (when Control-Break pressed)
1C 0000:0070 BIOS   Timer-Ticks - Called every 18.2 ms
1D 0000:0074 BIOS   Video Initialisation
1E 0000:0078 BIOS   Floppy Disk Parm Table Ptr
1F 0000:007C BIOS   CGA Graphic Char Font
MSDOS-Vektoren, BIOS, EGA/VGA, Harddisk
20 0000:0080 DOS    Program Terminate
21 0000:0084 DOS    Function Call
22 0000:0088 DOS    Terminate Address
23 0000:008C DOS    Ctr-Brk Exit Address
24 0000:0090 DOS    Fatal Error Vektor
25 0000:0094 DOS    Absolute Disk Read
26 0000:0098 DOS    Absolute Disk Write
27 0000:009C DOS    Terminate
28 0000:00A0 DOS    Idle Signal
29 0000:00A4 DOS    TTY Output
2A 0000:00A8 DOS    MS-Net services
2B 0000:00AC    
2C 0000:00B0    
2D 0000:00B4    
2E 0000:00B8    
2F 0000:00BC DOS    Print Spool
30 0000:00C0 DOS    Long Jump Interface
31 0000:00C4    
32 0000:00C8    
33 0000:00CC DOS    Mouse Functions
34 0000:00D0    
35 0000:00D4    
36 0000:00D8    
37 0000:00DC    
38 0000:00E0    
39 0000:00E4    
3A 0000:00E8    
3B 0000:00EC    
3C 0000:00F0    
3D 0000:00F4    
3E 0000:00F8    
3F 0000:00FC    
40 0000:0100 BIOS   Hard Disk Chain
41 0000:0104 BIOS   Hard Disk #1 Parm Table Ptr
42 0000:0108 BIOS   EGA Chain
43 0000:010C BIOS   EGA Parm Table Ptr
44 0000:0110 BIOS   EGA Graphics Char Font
45 0000:0114 
46 0000:0118 BIOS   Hard Disk #2 Parm Table Ptr
47 0000:011C 
48 0000:0120 
49 0000:0124 
4A 0000:0128 BIOS   AT Alarm Exit Address
4B 0000:012C 
4C 0000:0130 
4D 0000:0134 
4E 0000:0138 
4F 0000:013C 
50 0000:0140 BIOS   AT Alarm Interrupt
51 0000:0144 BIOS   Mouse Functions
52 0000:0148 
53 0000:014C 
54 0000:0150 
55 0000:0154 
56 0000:0158 
57 0000:015C 
58 0000:0160 
59 0000:0164 
5A 0000:0168 NET    Functions
5B 0000:016C NET    Boot Chain
5C 0000:0170 NET    NetBios entry
5D 0000:0174 
5E 0000:0178 
5F 0000:017C 
Anwender-Vektoren
60 0000:0180 
61 0000:0184 
62 0000:0188 
63 0000:018C 
64 0000:0190 
65 0000:0194 
66 0000:0198 
67 0000:019C DOS    EMS-Functions
68 0000:01A0 
69 0000:01A4 
6A 0000:01A8 
6B 0000:01AC 
6C 0000:01B0 
6D 0000:01B4 VGA    Suspected VGA Service
6E 0000:01B8 
6F 0000:01BC 
70 0000:01C0 BIOS   Real-Time Clock, AT-hardware 8259-2, IRQ 8
     
This interrupt services the real-time clock hardware. The hardware supports 2 modes of operation, an interrupt at a specific 24 hour interval (i.e 9:42 am), or repeatedly every 0.976 ms (1,024 Khz). Both modes can operate at the same time if needed.
     
In the 24 hour alarm mode, the interrupt is vectored here by hardware and interrupt 4Ah is called to alert the application program of the alarm. Int 4Ah is not handled by the BIOS other than to return, and is normally revectored by a particular application using the alarm.
     
When repeating interrupt mode is active, the 32-bit microsecond counter consisting of timer_clk_low and timer_clk_hi is decremented by 976 us on every interrupt. When the timer reaches zero, the byte pointed to by the offset @timer_wait_off and and segment @timer_wait_seg is set to 80h (this pointer is set by an application program through int 1Ah function ah=6).

71 0000:01C4 BIOS   redirected to IRQ2, ATBIOS-hardware 8259-2, IRQ 9
72 0000:01C8 BIOS   unassigned, ATBIOS-hardware 8259-2, IRQ 10
73 0000:01CC BIOS   unassigned, ATBIOS-hardware 8259-2, IRQ 11
74 0000:01D0 BIOS   unassigned, ATBIOS-hardware 8259-2, IRQ 12
75 0000:01D4 BIOS   ATBIOS-hardware 8259-2, IRQ 13
75 0000:01D4 287    287-MATH CO-PROCESSOR

The math co-processor 80287 invokes this interrupt. Int 75h calls the non-maskable interrupt int 2 to halt the system (80287 is not used if this vector is left pointing here). Programs which use the 80287 must re-vector this interrupt to use the 80287.

76 0000:01D8 BIOS   HARD DISK, ATBIOS-hardware 8259-2, IRQ 14

When the hard disk controller has completed its task, it signals completion though hardware activation of int 76h. The status in hdsk_int_flags is set to "done", a value of 0FFh. Interrupt 15, function 91h may also be called to signal the interrupt is done. 

77 0000:01DC BIOS   unassigned, ATBIOS-hardware 8259-2, IRQ 15
78 0000:01E0 
79 0000:01E4 
7A 0000:01E8 
7B 0000:01EC 
7C 0000:01F0 
7D 0000:01F4 
7E 0000:01F8 
7F 0000:01FC 
80 0000:0200 - F0 0000:03C0 BASIC
Nicht verwendet
F1 0000:03C4 - FF 0000:03FC not used, Bios-Stack, User-Vectors
00400-004FF BIOS-Datensegment
0000:0400 == 0040:0000
0040:0000 dw @rs232_port_1
0040:0002 dw @rs232_port_2
0040:0004 dw @rs232_port_3
0040:0006 dw @rs232_port_4
0040:0008 dw @prn_port_1
0040:000A dw @prn_port_2
0040:000C dw @prn_port_3
0040:000E dw BIOS_data_seg

PS/2:Extended BIOS data pointer
PC,XT,AT & compatible:Printer 4

0040:0010 db Equipment installed info bits (lower)

    7   6    5    4    3   2   1   0
     /       \    /    \   / Math  |
            video mode  RAM    uP  no
 disk-      at boot up  00=16K    dsk
 ettes      00=EGA      01=32K   driv
  1-4       01=CGA-40   10=48K   if 0
 if bit     10=CGA-80   11=64K
 0 = 1      11=MDA-80   (old PCs)

0040:0011 db Equipment installed info bits (higher)

15  14  13   12   11  10   9   8 
\    /   -  game   0   \  /    - 
# of print  port      #of RS-232    
ports 0-3   used      ports 0-4     
Note: bit 13=modem on PC lap-tops bit  2=mouse on PS/2
      
0040:0012 db init_test_flag
0040:0013 dw main_ram_size Base memory size 0-1Meg, 1K steps
0040:0015 dw chan_io_size
KEYBOARD DATA
0040:0017 db keybd_flags_1 Keyboard flag bits

  7   6   5   4    3   2   1   0
ins- cap num scrl alt ctl lef rig
sert --toggles--- --shifts down--

0040:0018 db keybd_flags_2 Keyboard flag bits

   7     6     5     4      3     2     1     0
insert  caps  num  scroll pause  sys   left right
------now depressed------ lock request -alt-down-
       
0040:0019 db keybd_alt_num

Alt & digit pad number buffr area

0040:001A dw keybd_q_head

Head ptr of circular key queue empty if head ptr = tail ptr

0040:001C dw keybd_q_tail

Tail ptr of circular key queue empty if head ptr = tail ptr

0040:001E dw 16 keybd_queue key queue for keyboard
DISK DATA
0040:003E db dsk_recal_stat

Recalibrate floppy drive bits
   3       2       1       0
drive-3 drive-2 drive-1 drive-0

bit 7 = interrupt flag
     
0040:003F db dsk_motor_stat

Motor running status & disk write
bit 7=1 disk write in progress
bits 6&5 = drive selected 0 to 3
   3       2       1       0
drive-3 drive-2 drive-1 drive-0
--------- 1=motor on-----------

0040:0040 db dsk_motor_tmr

Motor timer, at 0, turn off motor

0040:0041 db dsk_ret_code

Controller return code
00h = ok
01h = bad command or parameter
02h = can't find address mark
03h = can't write, protected dsk
04h = sector not found
08h = DMA overrun
09h = DMA attempt over 64K bound
10h = bad CRC on disk read
20h = controller failure
40h = seek failure
80h = timeout, no response

0040:0042 db dsk_status_1
0040:0043 db dsk_status_2
0040:0044 db dsk_status_3
0040:0045 db dsk_status_4
0040:0046 db dsk_status_5
0040:0047 db dsk_status_6
0040:0048 db dsk_status_7

Status bytes-disk controller chip         dsk_ctrl_stat
Note: 7 info bytes returned from controller are saved here. Refer to the NEC uPD 765 chip manual for the specific info, depending on the previous command issued.
VIDEO DATA
0040:0049 db video_mode

Present display mode(see int 10h)         video_mode

0040:004A dw video_columns
0040:004C dw video_buf_siz

Video buffer size in bytes 
Note: size may be rounded up to the nearest 2K boundary. For example, 80x25 mode=4000 bytes, but value may be 4096.

0040:004E dw video_segment      MDA=0B000h, CGA=0B800h, etc.
0040:0050 dw vid_curs_pos0      bits 15-8=row, bits 7-0=column
0040:0052 dw vid_curs_pos1      bits 15-8=row, bits 7-0=column
0040:0054 dw vid_curs_pos2 bits 15-8=row, bits 7-0=column
0040:0056 dw vid_curs_pos3 bits 15-8=row, bits 7-0=column
0040:0058 dw vid_curs_pos4 bits 15-8=row, bits 7-0=column
0040:005A dw vid_curs_pos5 bits 15-8=row, bits 7-0=column
0040:005C dw vid_curs_pos6 bits 15-8=row, bits 7-0=column
0040:005E dw vid_curs_pos7 bits 15-8=row, bits 7-0=column
0040:0060 dw vid_curs_mode

Active cursor, start & end lines 
bits 12 to 8 for starting line
bits 4  to 0 for ending line

0040:0062 db video_page
0040:0063 dw @video_port Video controller base I/O address
0040:0065 db video_mode_reg Hardware mode register bits
0040:0066 db video_color Color set in CGA modes
GENERAL DATA
Note: next 5 bytes also used for cassette interface in older PCs. 

0040:0067 dw @gen_io_ptr ROM initialization pointer 
0040:0069 dw @gen_io_seg ROM i/o segment 
0040:006B db gen_int_occured Unused interrupt occurred 
0040:006C dw timer_low Timer, low word, cnts every 55 ms 
0040:006E dw timer_hi Timer, high word 
0040:0070 db timer_rolled 

Timer overflowed, non-zero when more than 24 hours have elapsed

0040:0071 db keybd_break Bit 7 set if break key depressed 
0040:0072 dw warm_boot_flag

Boot (reset) type 
1234h=warm boot, no memory test       
4321h=boot & save memory (PS/2 with MCA only)
HARD DISK DATA
0040:0074 db hdsk_status_1

Hard disk status 
00h = ok
01h = bad command or parameter
02h = can't find address mark
03h = can't write, protected dsk
04h = sector not found
05h = reset failure
07h = activity failure
08h = DMA overrun
09h = DMA attempt over 64K bound
0Ah = bad sector flag
0Bh = removed bad track
0Dh = wrong # of sectors, format
0Eh = removed control data addr mark
0Fh = out of limit DMA arbitration level
10h = bad CRC or ECC, disk read
11h = bad ECC corrected data
20h = controller failure
40h = seek failure
80h = timeout, no response
AAh = not ready
BBh = error occurred, undefined
CCh = write error, selected dsk
E0h = error register = 0
FFh = disk sense failure
  
0040:0075 db hdsk_count Number of hard disk drives 
0040:0076 db hdsk_head_ctrl Head control (XT only) 
0040:0077 db hdsk_ctrl_port Hard disk control port (XT only)
PORT TIMER, KEYBOARD DATA
0040:0078 db prn_timeout_1

down timer waits for printer to respond (printer 1)

0040:0079 db prn_timeout_2

down timer waits for printer to respond 

0040:007A db prn_timeout_3
0040:007B db prn_timeout_4
0040:007C db rs232_timeout_1

Countdown timer waits for RS-232 port to respond (port 1) 

0040:007D db rs232_timeout_2
0040:007E db rs232_timeout_3
0040:007F db rs232_timeout_4
0040:0080 dw @keybd_begin Ptr to beginning of keybd queue 
0040:0082 dw @keybd_end Ptr to end of keyboard queue 
ADVANCED VIDEO DATA, EGA/VGA
0040:0084 db video_rows Rows of characters on display - 1 
0040:0085 dw video_pixels Number of pixels per charactr * 8 
0040:0087 db video_options

Display adapter options 
bit 7 = clear RAM
bits 6,5 = memory on adapter
   00 - 64K
   01 - 128K
   10 - 192K
   11 - 256K
bit 4 = unused
bit 3 = 0 if EGA/VGA active
bit 2 = wait for display enable
bit 1 = 1 - mono monitor
      = 0 - color monoitor
bit 0 = 0 - handle cursor, CGA

0040:0088 db video_switches

Switch setting bits from adapter 
bits 7-4 = feature connector
bits 3-0 = option switches

0040:0089 db video_1_reservd

Video reserved 1, EGA/VGA control 
bit 7 = 200 line mode
bits 6,5 = unused
bit 4 = 400 line mode
bit 3 = no palette load
bit 2 = mono monitor
bit 1 = gray scale
bit 0 = unused

0040:008A db video_2_reservd
OTHER FLOPPY & HARD DISK DATA
0040:008B db dsk_data_rate

Last data rate for diskette 
bits 7 & 6 = 00 for 500K bit/sec
           = 01 for 300K bit/sec
           = 10 for 250K bit/sec
bits 5 & 4 = step rate

0040:008C db         hdsk_status_2
0040:008D db         hdsk_error
0040:008E db         hdsk_int_flags
0040:008F db hdsk_options

Bit 0 = 1 when using 1 controller card for both hard disk & floppy

0040:0090 db hdsk0_media_st Media state for drive 0 
0040:0091 db hdsk1_media_st Media state for drive 1 

   7      6      5      4       3      2      1      0
data xfer rate  two   media  unused  -----state of drive-----
 00=500K bit/s  step  known bits floppy  drive state
 01=300K bit/s              000=  360K in 360K, ?
 10=250K bit/s              001=  360K in 1.2M, ?
                            010=  1.2M in 1.2M, ?
                            011=  360K in 360K, ok
                            100=  360K in 1.2M, ok
                            101=  1.2M in 1.2M, ok
                            111=  state not defined

0040:0092 db hdsk0_start_st Start state for drive 0 
0040:0093 db hdsk1_start_st Start state for drive 1 
0040:0094 db hdsk0_cylinder Track number for drive 0
0040:0095 db hdsk1_cylinder Track number for drive 1
ADVANCED KEYBOARD DATA
0040:0096 db keybd_flags_3

Special keyboard type and mode
bit 7 Reading ID of keyboard
    6 last char is 1st ID char
    5 force num lock
    4 101/102 key keyboard
    3 right alt key down
    2 right ctrl key down
    1 E0h hidden code last
    0 E1h hidden code last
       
0040:0097 db         keybd_flags_4 Keyboard Flags (advanced keybd) 

  7      6       5     4  3 2 1 0
xmit   char   Resend  Ack   \   /
error was ID  Rec'd  Rec'd   LEDs
REAL-TIME CLOCK & LAN DATA
0040:0098 dw @timer_wait_off Ptr offset to wait done flag 
0040:009A dw @timer_wait_seg Ptr segment to wait done flag
0040:009C dw timer_clk_low Timer low word, 1 microsecond clk 
0040:009E dw timer_clk_hi Timer high word 
0040:00A0 dw timer_clk_flag Timer flag 

00h = post acknowledgd
01h = busy
80h = posted

0040:00A1 db lan_1 Local area network bytes
0040:00A2 db lan_2
0040:00A3 db lan_3
0040:00A4 db lan_4
0040:00A5 db lan_5
0040:00A6 db lan_6
0040:00A7 db lan_7
MORE ADVANCED VIDEO DATA
0040:00A8 dd @video_sav_tbls

Pointer to a save table of more pointers for the video system 
offset type    pointer to
  
  0     dd  Video parameters
  4     dd  Parms save area
  8     dd  Alpha char set
 0Ch    dd  Graphics char set
 10h    dd  2nd save ptr table
 14h    dd  reserved (0:0)
 18h    dd  reserved (0:0)

2ND SAVE TABLE (from ptr above)
offset type functions & pointers
  
  0     dw  Bytes in this table
  2     dd  Combination code tbl
  6     dd  2nd alpha char set
 0Ah    dd  user palette tbl
 0Eh    dd  reserved (0:0)
 12h    dd  reserved (0:0)
 16h    dd  reserved (0:0)

0040:00BC db 72 reserved
0040:00CE dw days_since_1_80 Days since 1-Jan-1980 counter
0040:00F0 db 16 von MSDOS fr Anwender reserviert
00500-005FF BASIC, DOS
0050:0000 db prn_scrn_stat Print screen status 

00h = Print screen ready
01h = Print screen in progress
FFh = Error occurred

0050:0001 db Used by BASIC                               
0050:0004 db Statusbyte fr Einzellaufwerkmodus

00h = Diskette for Drive A was last used
01h = Diskette for Drive B was last used

0050:0010 dw BASIC-Segmentadresse
0050:0012 dw Segment fr Systemuhr-Interrupt-Routine (BASIC)
0050:0014 dw Offset fr Systemuhr-Interrupt-Routine (BASIC)
0050:0016 dw Segment fr Break-Interrupt-Routine (BASIC)
0050:0018 dw Offset fr Break-Interrupt-Routine (BASIC)
0050:001A dw Segment fr Diskettenfehler-Interrupt-Routine (BASIC)
0050:001C dw Offset fr Diskettenfehler-Interrupt-Routine (BASIC)
0050:0022 - 0050:002F Used by DOS for diskette initialization
0050:0030 - 0050:0033 Used by MODE-Command
0050:0000 - 0050:00FF DOS, BASIC
00600-nnnnn io.sys, msdos.sys (ibmbio.sys, ibmdos.sys)
Die Lnge des Betriebssystems hngt von der Versionsnummer ab. Zu den beiden Systemdateien kommt noch der residente Teil von command.com. 
nnnnn-9FFFF Freier Arbeitsspeicher
A0000-AFFFF EGA-Grafik-Speicher
B0000-BFFFF CGA/MDA Display-Speicher
B000:0000-B000:7FFF Hercules-Karte, 1. Seite
B000:8000-B000:FFFF Hercules-Karte, 2. Seite
B800:0000-B800:3FFF CGA-Karte
B800:0000-B800:0FFF CGA-Karte, 1. Seite (Text)
B800:1000-B800:1FFF CGA-Karte, 2. Seite (Text)
B800:2000-B800:2FFF CGA-Karte, 3. Seite (Text)
B800:3000-B800:3FFF CGA-Karte, 4. Seite (Text)
C0000-CFFFF Festplatten-, EGA/VGA-BIOS
D0000-DFFFF ROM-BIOS-Erweiterungen, EMS-Pages
E0000-EFFFF EMS-Pages
F0000-FFFFF ROM-BIOS, ROM-BASIC
F000:0000-F000:5FFF 24k ungenutzt
F000:6000-F000:DFFF 32k BASIC
F000:E000-F000:FFFF  8k BIOS
F000:E05B loc Reset
F000:E2C3 loc NMI Entry Point
Hard Disk Information Tables
Each sub-table contains a a set of 16 bytes for each particular disk type. Type number specified may differ with manufactures specification. The hard disk table shown here assumes the first entry is type 0. 

F000:E331 dw hdsk_cylinders Number of cylinders, hdsk_type_0
F000:E333 db hdsk_heads Number of heads
F000:E334 dw hdsk_lo_wrt_cyl Low write current cyl begin (XT)
F000:E336 dw hdsk_precompcyl Write pre-compensation cylinder
F000:E338 db hdsk_err_length Error correction burst length (XT)
F000:E339 db hdsk_misl_bits

Miscellaneous bit functions:
bits 0-2 disk option, XT only (XT)
     0-2 unused, all others
     3 = 1 if > 8 heads
     4   unused
     5 = 1 for bad map at last cylinder + 1
     6 or 7 = 1 no retries

F000:E33A db hdsk_timeout Normal timeout  (XT)
F000:E33B db hdsk_fmt_timout Format timeout  (XT)
F000:E33C db hdsk_chk_timout Check timeout   (XT)
F000:E33D dw hdsk_parkng_cyl Parking cylinder number
F000:E33F db hdsk_sectr_trac Number of sectors per track
F000:E340 db hdsk_unused Unused
F000:E331 ds hdsk_type_
F000:E6F2 loc Bootstrap Load
System Configuration Table 
F000:E6F5 dw Config_tbl_size  Size of table in bytes
F000:E6F7 db Config_model Model type

0F8h = 80386 model 70-80 types
0FCh = 80286 model 50-60 types, also most 80286/80386 compatibles
0FAh = 8088/86 model 25-30 type

F000:E6F8 db Config_sub_model Sub-Model type 
F000:E6F9 db Config_BIOS_rev BIOS revsion number
F000:E6FA db Config_features Feature information

bit 7=1, hard disk uses DMA 3
bit 6=1, dual interrupt chips
bit 5=1, has real-time-clock
bit 4=1, int 15h, ah=4Fh is
supported (keyboard)
bit 3=1, external wait support
bit 2=1, has extended BIOS RAM
bit 1=1, micro-channel
bit 0=1, unused

F000:E6FB db Config_info_bytes Information bytes (future use)

Baud Rate Table
Table of hex divsors  for the serial ports. Table divisors for bauds 110 to 19,200. 

F000:E729 dw baud_110, baud_rate_tbl
F000:E72B dw baud_150
F000:E72D dw baud_300
F000:E72F dw baud_600
F000:E731 dw baud_1200
F000:E733 dw baud_2400
F000:E735 dw baud_4800
F000:E737 dw baud_9600
F000:E739 dw baud_19200

F000:E82E loc Keyboard Function Call
F000:E987 loc Keyboard Hardware Interrupt
F000:EC59 loc Floppy Disk Function Call
F000:EF57 loc Floppy Disk ISR
Floppy Disk Parameters
F000:EFC7 db dsk_info_1 Start of ROM BIOS data areas

hi nibble = stepping rate in ms
lo nibble = head unload time, ms

F000:EFC8 db         dsk_info_2 2nd info byte bit 0 = 0 for DMA
F000:EFC9 db         dsk_motor_delay Delay after use for motor off
F000:EFCA db         dsk_sectr_bytes

Bytes per sector  0 =  128 bytes
                  1 =  256 bytes
                  2 =  512 bytes
                  3 = 1024 bytes

F000:EFCB db dsk_sector_trac Number of sectors per track
F000:EFCC db dsk_head_gap Gap Length
F000:EFCD db dsk_data_length Data Length
F000:EFCE db dsk_format_gap Format Gap Length
F000:EFCF db dsk_format_byte Format write byte
F000:EFD0 db dsk_settlg_time Head load time, in milliseconds
F000:EFD1 db dsk_startup_tim Motor startup wait time * .125ms
F000:EFD2 LPT-Fuction-Call
F000:F065 Video Function Call
Video Hardware Registers
F000:F0A4 db video_hdwr_tbl1 mode CGA 40 columns x 25 lines
F000:F0B4 db video_hdrw_tbl2 mode CGA 80 columns x 25 lines
F000:F0C4 db video_hdwr_tbl3 mode CGA graphics
F000:F0D4 db video_hdwr_tbl4 mode MDA 80 columns x 25 lines
F000:F0E4 dw video_buf_size1 Video buffer bytes CGA 40x25
F000:F0E6 dw video_buf_size2 Video buffer bytes CGA 80x25
F000:F0E8 dw video_buf_size3 Video buffer bytes CGA Graphics
F000:F0EA dw video_buf_size4 Video buffer bytes CGA Graphics
F000:F0EC db video_columntbl Video columns per modes 0-7
F000:F0F4 db video_hdwr_mode Video hardware modes (0-7)
F000:F841 loc Memory size Function call
F000:F84D loc Equipment Check Function call
F000:F859 loc Cassette Function Call
F000:FA6E db video_char_tbl Video characters in graphic modes
F000:FE6E loc Timer Function  Call
F000:FEA5 loc Timer Hardware Interrupt
F000:FEF3 dw int_vec_table Initial interrupt vectors
F000:FF1D dw int_data_table
F000:FF21 dw video_ptr
F000:FF23 dw int_vec_table_2
F000:FF53 loc Dummy Interrupt return

This routine processes invalid and unused interrupt requests. The hardware IRQ number is loaded into gen_int_occured, and the interrupt cleared. For software calls to an unused interrupt, a value 0FFh is loaded into gen_int_occured, and the routine returns to the caller without changing registers. Alternatively, some systems simply return (iret).

F000:FF54 loc Print Screen Function Call
F000:FFF0 loc power_on_reset SYSTEM RESET
     
Reset the computer system. General operation includes a test of
of the CPU, ROM checksum, and initialization of hardware including:
     
   Memory system
   Timer/Counter (which is also used for RAM refresh)
   Interrupt Controller(s)
   DMA Controller(s)
   Keyboard Controller
   Video Controller & Video RAM
   Floppy Controller
   Hard Disk Controller (if present)
     
Portions of the hardware may also have specific tests made to insure reliable operation. Test failures may display error code on the screen if the video subsystem is operational, or generate beeps or LED blinks to signify the error.
  
Note: A soft reset uses the warm_boot_flag to skip the memory tests. (i.e. from pressing Ctrl-Alt-Del).
     
The system checks for installed ROMs by searching memory from C000h to the beginning of the BIOS, in 2K chunks. ROM memory is identified if it starts with the word AA55h. It is followed a one byte field length of the ROM (divided by 512). If ROM is found, the BIOS will call the ROM at an offset of 3 from the beginning. This feature was not supported in the earliest PC machines.
     
The last task turns control over to the bootstrap loader (assuming the floppy controller is operational)

F000:FFF5 da rom_versn_date BIOS version date code 
F000:FFFE db model_type

Model  FFh = PC 
       FEh = 1st XT
       FBh = later XTs
       FCh = AT type (286/386)
       FAh = models 25/30
       F9h = IBM lap-tops
       F8h = models 70/80 (80386)

F000:FFFF db  model_sub_type

100000-FDFFFF Expansion-RAM (AT)
FE0000-FEFFFF System (AT)
FF0000-FFFFFF BIOS (AT)
080 Characters, EGA  8x14 font
081 Characters, EGA  8x8 font (0-7F)
082 Characters, EGA  8x8 font (80-FF)
083 Character changes, EGA  8x14 font
084 Characters, VGA  8x16 font
085 Character changes, VGA  9x16 font
086 Video VGA parameter table ptr
08B         VGA_parm_tbl
       Video VGA Parameter Tables  
                                   
       64 byte sub-table per mode  
      offset/size     function     
      -- --------  --------------  
       0  1 byte   # of columns    
       1  1 byte   # of rows       
       2  1 byte   # bytes/char    
       3  1 word   # bytes/page    
       5  5 bytes  sequencer regs  
      10 25 bytes  display regs    
      35 20 bytes  attribute regs  
      55  9 bytes  graphics regs   
    
end



27
     
29
     
2A
     BIOS EXTERNAL ENTRY POINT 
      BIOS SETUP ROUTINES
      
When a special key combination is pressed, this setup routine is
run to allow changing CMOS BIOS values. Typical key combinations
include CTRL-ALT-ESC, CTRL-ALT-S, or others to start the setup.
 
Once invoked, it may issue a system reset to let other application
software, other BIOS routines, and TSR's to configure the system
with the new information.
 
Typical options include:
        
       Present time and date
       Floppy disk settings
       Hard disk table selection
       Video display
       Memory size
       Speed of clock and/or bus

end


.Anfang Verzeichnis V.
Adressplan eines kompatiblen PC	1
00000-003FF Interrupt-Vektoren	1
BIOS-Vektoren	1
MSDOS-Vektoren, BIOS, EGA/VGA, Harddisk	11
Anwender-Vektoren	12
Nicht verwendet	13
00400-004FF BIOS-Datensegment	13
KEYBOARD DATA	13
DISK DATA	14
VIDEO DATA	14
GENERAL DATA	15
HARD DISK DATA	15
PORT TIMER, KEYBOARD DATA	16
ADVANCED VIDEO DATA, EGA/VGA	16
OTHER FLOPPY & HARD DISK DATA	16
ADVANCED KEYBOARD DATA	17
REAL-TIME CLOCK & LAN DATA	17
MORE ADVANCED VIDEO DATA	17
00500-005FF BASIC, DOS	18
00600-nnnnn io.sys, msdos.sys (ibmbio.sys, ibmdos.sys)	18
nnnnn-9FFFF Freier Arbeitsspeicher	18
A0000-AFFFF EGA-Grafik-Speicher	18
B0000-BFFFF CGA/MDA Display-Speicher	18
C0000-CFFFF Festplatten-, EGA/VGA-BIOS	19
D0000-DFFFF ROM-BIOS-Erweiterungen, EMS-Pages	19
E0000-EFFFF EMS-Pages	19
F0000-FFFFF ROM-BIOS, ROM-BASIC	19
Hard Disk Information Tables	19
System Configuration Table 	19
Baud Rate Table	20
Floppy Disk Parameters	20
Video Hardware Registers	20
100000-FDFFFF Expansion-RAM (AT)	21
FE0000-FEFFFF System (AT)	21
FF0000-FFFFFF BIOS (AT)	21
.Ende Verzeichnis V.
܀         v       r    m  1 h [ q c       A$ @
      i    d    d    _    Z .  Z F  Z                                              <"            F  H  v ;  v =  v \  q y  q   q   l   l   l                                                       A  A 	    v   v '  v P  v R  q   q   q   l   l                                                        A  	    v 	  v 	  v   v   v   v   v u
  v |
  v                                                        A A 	|
  
  v 
  v >  v   v   v   v   v (  q I  q                                                         A 	I  K  v R  v T  v   q   l   l   l   g                                                        ? A ? A     v    v "  v Y  q   q   q   q   q   l                                                       A  A 	  B  v I  v p  v   v   v   v   v 	  v 9  v                                                       A  A 	9  l  v   v   v   v 7  v Y  v   v   v   v                                                       A  A 	  5  v ~  v   v   v   v G  v v  v   v   v                                                       A  A 	    v g  v   v   v   v [  v   v   v #  v                                                       A  A 	#  ^  v   v   v   v A  v   v   v 
  v 5  v                                                       A  A 	5  p  v   v   v 4  v }  v   v   v %  v E  v                                                       A  A 	E    v   v   v   v G  v z  v   v   v <  v                                                       A  A 	<    v   v   v 5   v l   v    v !  v E!  v !  v                                                       A  A 	!  !  v "  v P"  v "  v "  v #  v b#  v #  v #  v                                                       A  A 	#  $  v N$  v $  v $  v %  v a%  v %  v %  v A&  v                                                       A  A 	A&  &  v &  v '  v a'  v '  v '  v (  v e(  v (  v                                                       A  A 	(  (  v K)  v )  v )  v )  v ;*  v ~*  v *  v *  v                                                       A  A 	*  F+  v w+  v +  v +  v A,  v ,  v ,  v ,  v F-  v                                                       A  A 	F-  x-  v -  v .  v O.  v .  v .  v /  v U/  v /  v                                                       A  A 	/  /  v 0  v @0  v 0  v 0  v 1  v G1  v z1  v 1  v                                                       A  A 	1  1  v 2  v C2  v J2  v {2  v 2  v 2  v !3  v V3  v                                                       A  A 	V3  3  v 3  v 3  v 4  v F4  v h4  v 4  v 4  v 4  v                                                       A  A 	4  5  v M5  v 5  v 5  v 5  v 6  v A6  v 6  v 6  v                                                       A  A 	6  6  v :7  v 7  v 7  v 7  v C8  v E8  v d8  q 8  q                                                       A  A 	8  8  v 8  v 8  v 8  v (9  v Z9  v 9  v 9  v 9  v                                                       A  A 	9   :  v 8:  v r:  v :  v :  v ;  v @;  v H;  v };  v                                                       A  A 	};  ;  v ;  v ;  v ;  v ;  q 
<  q <  l Q<  l s<  l                                                       A  A 	s<  z<  v <  v <  v <  q <  q <  l <  l =  l =  l                                                       A  A 	=  =  v =  v =  v =  v ">  v S>  v w>  v >  v >  v                                                       A  A 	>  ?  v H?  v ?  v ?  v ?  v !@  v H@  v z@  v @  v                                                       A  A 	@  @  v @  v @  v A  v 3A  v NA  v A  v A  v B  v                                                       A  A 	B  IB  v eB  v B  v B  v C  v aC  v C  v C  v C  v                                                       A  A 	C  :D  v sD  v D  v D  v E  v NE  v E  v E  v 
F  v                                                       A  A 	
F  PF  v F  v F  v "G  v nG  v G  v G  v =H  v yH  v                                                       A  A 	yH  H  v H  v 7I  v {I  v I  v J  v GJ  v tJ  v J  v                                                       A  A 	J  K  v HK  v K  v K  v L  v ^L  v L  v L  v L  v                                                       A  A 	L  L  v M  v BM  v }M  v M  v M  v M  v M  v CN  v                                                       A  A 	CN  wN  v N  v N  v N  v  O  v MO  v O  v O  v O  v                                                       A  A 	O  
P  v HP  v P  v P  v P  v &Q  v VQ  v Q  v Q  v                                                       A  A 	Q  Q  v Q  v -R  v VR  v R  v R  v R  v S  v IS  v                                                       A  A 	IS  PS  v \S  v S  v S  v S  v S  v 9T  v qT  v T  v                                                       A  A 	T  T  v 
U  v FU  v U  v U  v U  v ;V  v XV  v V  v                                                       A  A 	V  V  v W  v GW  v {W  v W  v W  v 7X  v tX  v X  v                                                       A  A 	X  X  v &Y  v _Y  v Y  v Y  v Z  v LZ  v oZ  v Z  v                                                       A  A 	Z  Z  v ,[  v m[  v [  v [  v \  v G\  v \  v \  v                                                       A  A 	\  \  v \  v ]  v U]  v ]  v ]  v 
^  v <^  v g^  v                                                       A  A 	g^  ^  v ^  v <_  v _  v _  v `  v ``  v b`  v `  q                                                       A  A 	`  `  v `  q `  q a  q a  q Ma  q a  q a  q a  q                                                       A A  	a  #b  v eb  v b  v b  v b  v 4c  v tc  v c  v c  v                                                       A A A 	c  4d  v pd  v d  v d  v d  v d  v e  v Ue  v e  v                                                       A A A 	e  e  v 3f  v }f  v f  v g  v Rg  v g  v g  v g  v                                                       A A A 	g  h  v [h  v ~h  v h  v h  v i  v Ei  v i  v i  v                                                       A A A 	i  	j  v Cj  v j  v j  v j  v k  v Xk  v k  v k  v                                                       A A A 	k  l  v Vl  v l  v l  v 
m  v Am  v um  v m  v m  v                                                       A A A 	m  #n  v %n  v Un  q \n  l n  l n  l o  l o  l >o  l                                                       A  A 	>o  xo  v o  v o  v o  v o  v p  v \p  v p  v p  v                                                       A  A 	p   q  v `q  v gq  v q  v q  v +r  v or  v r  v r  v                                                       A  A 	r  /s  v Us  v s  v s  v t  v Xt  v _t  v t  v t  v                                                       A  A 	t  u  v Uu  v u  v u  v u  v 6v  v wv  v v  v v  v                                                       A  A 	v   w  v bw  v w  v w  v x  v Wx  v x  v x  v y  v                                                       A  A 	y  Xy  v y  v y  v z  v Nz  v z  v z  v {  v 9{  v                                                       A  A 	9{  P{  v {  v {  v |  v Z|  v |  v |  v 
}  v P}  v                                                       A  A 	P}  }  v }  v }  v 7~  v v~  v ~  v ~  v ~  v "  v                                                       A  A 	"  X  v   v   v $  v d  v   v   v )  v n  v                                                       A  A 	n    v   v A  v   v ͂  v   v ^  v   v   v                                                       A  A 	  8  v p  v   v   v   v 2  v j  v   v   v                                                       A  A 	  (  v Y  v   v   v -  v v  v   v   v 4  v                                                       A  A 	4  {  v   v   v 2  v l  v   v   v M  v   v                                                       A  A 	  ܊  v !  v g  v   v Ջ  v   v D  v }  v   v                                                       A  A 	    v F  v   v   v   v 4  v e  v   v   v                                                       A  A 	    v   v   q   q   q '  q l  q   q   q                                                       A A  	    v   v h  v   v   v *  v R  v   v   v                                                       A A A 	  :  v   v ʒ  v   v 5  v }  v Ɠ  v   v P  v                                                       A A A 	P    v   v   v 1  v {  v ʕ  v   v   v A  q                                                       A  A 	A  H  v h  v   v   v ˖  v   v K  v   v   v                                                       A  A 	  ȗ  v ԗ  v 
  v 2  v W  v Y  v x  q   l T  l                                                       A  A 	T  V  v |  q   l   l   l Ԛ  g ۚ  b   b                                                   A  A  A   	  v   v [  v   v ؛  v   v @  v G  v   v                                                       A  A 	    v   v   v _  v   v ɝ  v   v $  v s  v                                                       A  A 	s    v ɞ  v   v <  v a  v   v   v   v -  v                                                       A  A 	-  V  v p  v   v Ƞ  v   v #  v B  v   v   v                                                       A  A 	  ߡ  v    q X  q   q   q ݢ  q   l -  g                                                           A -  P  v w  v   v ɣ  v   v   v 9  v Z  v z  v                                                          	z    v   v ä  v դ  v   v   v 1  v C  v U  v                                                          	U  z  v   v   v   v ¥  v ԥ  v   v   v 
  v                                                          	
    v .  v @  v R  v w  v   v Ǧ  v   v   v                                                          	  *  v [  v j  v y  v   v   v §  v ѧ  v   v                                                          	    v   v &  v K  v Z  v i  v x  v   v   v                                                          	    v   v è  v   v   v %  v 4  v C  v R  v                                                          	R  e  v t  q   q   q   q   q   q Ω  q   q                                                          	     v   v   v -  v <  v g  v v  v   v Ū  v                                                          	Ū  ̪  v ǫ  v Ϋ  v   v   v W  v Y  v   q   q                                                         A 	     v `  v   v   v   q   q   q    l                                                              A       v   v   v H  q W  q f  q u  q   q   q                                                         A 	    v   v   v   v   q 4  l S  g k  b                                                        k    v   v   v ۳  v   v   v )  v E  v G  v                                                          	G  h  v   v   v   q   q   l 
  l 4  l [  l                                                       A  A 	[    v   v ɵ  v   v   q #  q %  q H  l k  l                                                       A  A 	k    v   v   v   q   q R  q m  q |  l                                                               A |    v   q Ϸ  q   q   q   q F  l H  g                                                        A  A  H  y  v   v ߸  v   v   q   l )  l +  l                                                        A A  A +  F  v H  q   q   q   l   g   g   g                                                        A  A      v "  q ?  l A  g `  g ~  g   g   g                                                        A        v   v ݺ  q ߺ  l   l "  l D  l b  l   l                                                       A  A 	    v   v »  q Ļ  l   l   l   g   b                                                   A  A  A     v (  v H  v g  v   v   v   v ּ  v   v                                                       A  A 	    v    v <  v >  v Y  q t  q   q   q Ž  q                                                       A  A 	Ž    v   v   q 6  q پ  q   l   g    b                                                   A   A     6  v 8  v T  q p  q r  l   l   l   l                                                   A  A  A   D  v   v   v   v :  v u  v   v   v &  v                                                       A   	&  B  v D  q g  q   q   q   q   l   l 5  l                                                        A  	5  f  v t  q   l   g   g   g T  g   g                                                         A       v   v   q   q   q U  l r  l t  g                                                        A  A  t    v   v   v   q   l 
  g    g *  g                                                        A   A *  J  v i  v   v   v   v   v   v   v   v                                                         A 	  5  v W  v }  v   v   v   v    v   v 0  v                                                         A 	0  A  v b  v   v   v   v   v   q %  q c  q                                                         A 	c  ~  v   q   l   l   l   g   b   b                                                   A  A       v 9  q U  q s  q u  l   l   l   g                                                   A  A  A     v 
  v I  v   v   q   l   l 4  l                                                   A     4  6  v P  v c  v   v   v   v   v   v   v                                                         A 	    v   v    v <  v \  v ^  v {  q }  l   l                                                       A  A 	    v   v   v   q   l    l 7  l J  l a  l                                                       A  A 	a  z  v   v   v   v   v   q   l   g                                                           A     v /  v Q  v s  v   v   v   v   q   q                                                         A 	    v 4  v 6  q z  q |  q   l   l   g                                                        A  A    "  v a  v   v   v   v 0  v d  v   v   v                                                        A A 	    v   v 9  q o  q   q   q   l   g                                                           A     v 1  v O  v o  v   v   v   v   v   v                                                         A 	    v   v \  q ^  l   l   l   l   g                                                         A  A     v [  v   v   v   v   q 	  q   q #  q                                                       A A  	#  %  v R  q f  q z  q   q   q   q   q   l                                                         A 	    v   q D  q _  q   q   q   q   q   q                                                        A  	    v 3  v O  v Q  v r  v   v   v   v   v                                                        A A 	    v 7  v S  v o  v   v   v   q   q   q                                                         A 	  .  v _  q a  l {  l   l   l   l   g                                                         A       v !  t K  t u  t w  t   o   o   o O  o                                                       A  A 	O    v   v   v N  v z  v   v   q `  l                                                             A   `    v   v   v   q '  q F  q v  q   q   q                                                       A   	    v .  q ]  q t  q   q   l   l   l 
  l                                                          	
  )  v G  q   l   g X  g   g   g   g                                                         A     ?  v \  v ^  q |  q   q   q   q   q   q                                                       A A  	  0  v 2  q b  q   q   q   q 8  q Y  q r  q                                                       A  A 	r    v   q   l 	  l   g +  g n  g   g                                                        A        v   v   v $  v &  q E  q d  q   q   q                                                        A  	    v   v   v 
  v   v    q _  q a  l                                                             A  A a  r  v   q   q   l   l   l 5  l M  l e  l                                                        A  	e  }  v   v   v   v   v   v *  v I  v a  q                                                          	a    v   q   q   q   l   l c  l   l                                                              A      v   v   v   v   v   v O  q u  q   q                                                         A 	    v   v <  v {  v   v   v   q 
  l J  l                                                          	J  z  v   v   v -  v k  v   v   v   v E  v                                                          	E  r  v   v   v   v #  v Y  v v  v   v   v                                                          	    v   q 2  q 4  q ^  l   l   g   g                                                        A  A      v   v /  v f  v   v   v   v   v   v                                                        A A 	  
  v   v   v   v k  v r  v   v   v a  v                                                        A A 	a  c  v   q   q   l   l   l   l   l -  l                                                       A  A 	-  H  v k  v m  q   q   l   g   g   g                                                         A  A     v )  v P  v w  v   v   v   v   v C  v                                                       A  A 	C  j  v   v   v   v   v -  v T  v {  v   v                                                       A  A 	    v   v   v >  v C  v E  v G  v I  v M  v                                                       A  A 	M  T  v X  v _  v c  v   v   v   v   v X  v                                                       A  A 	X    v   v   v "  v =  v @  v Z  v d  v   v                                                       A  A 	    v   v   v   v 
 v  v  v  v  v                                                       A  A 	  v 1 T \ v \  B                                                    %     n          %A   a  a  a  G                                                   n          %               %  a  a . a ? a R a p a  a  a                                                                %  a  a 
 a % G ` G                                               n          %               %`  a  a  a  a 1 a K a o a                                                    %     n          %o  a  a  a  a  a                                                                %               % ! a ? a [ a q r                                                                %     n          % 
         1  >  YO  _  To  	  l  ]  C  1  "      /        7  
              ;     <     )     4     +     D     D    	 E    
 )              
      ;          $          0          ;     V                    	      \           (       05.20.9004.23.90 