home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-09-05 | 79.9 KB | 1,341 lines |
-
- ** Programmer's Technical Reference for MSDOS and the IBM PC **
- USA copyright TXG 392-616 ALL RIGHTS RESERVED
- ───────────────────────────────┤ DOSREF (tm) ├────────────────────────────────
- ISBN 1-878830-02-3 (disk-based text)
- Copyright (c) 1987, 1991 Dave Williams
- ┌─────────────────────────────┐
- │ Shareware Version, 09/05/91 │
- │ Please Register Your Copy │
- └─────────────────────────────┘
-
-
- C H A P T E R T W O
-
-
- CPU Port Assignments, System Memory Map, BIOS Data Area, Interrupts 00h to 09h
-
-
-
- C O N T E N T S
-
- Introduction .......................................................... 2**1
- System Memory Map ..................................................... 2**2
- A Brief Guide to Current Memory Terminology ........................... 2**3
- PC Port Assignment .................................................... 2**4
- Reserved Memory Locations ............................................. 2**5
- Absolute Addresses .................................................... 2**6
- The IBM PC System Interrupts (Overview) ............................... 2**7
- Quick Chart of Interrupts 00h-0FFh .................................... 2**8
- The IBM-PC System Interrupts 00h-0Fh (in detail) ...................... 2**9
-
-
-
- Introduction .......................................................... 2**1
-
- For consistency in this reference, all locations and offsets are in
- hexadecimal unless otherwise specified. All hex numbers are prefaced with a
- leading zero if they begin with an alphabetic character, and are terminated
- with a lowercase H (h). The formats vary according to common usage.
-
-
-
- System Memory Map ..................................................... 2**2
-
- The IBM PC handles its address space in 64k segments, divided into 16k
- fractions and then further as necessary.
-
- ┌──────┬─────┬─────┬──────────────────────────────────────────────────────────┐
- │start │start│end │ │
- │addr. │addr.│addr.│ usage │
- │(dec) │ (hex) │ │
- ├──────┴───────────┴──────────────────────────────────────────────────────────┤
- │ *640k RAM Area* │
- ├──────┬───────────┬──────────────────────────────────────────────────────────┤
- │ 0k │ │ start of RAM, first K is interrupt vector table │
- │ 16k │00000-03FFF│ PC-0 system board RAM ends │
- │ 32k │04000-07FFF│ │
- │ 48k │08000-0BFFF│ │
- ├──────┼───────────┼──────────────────────────────────────────────────────────┤
- │ 64k │10000-13FFF│ PC-1 system board RAM ends │
- │ 80k │14000-17FFF│ │
- │ 96k │18000-1BFFF│ │
- │ 112k │1C000-1FFFF│ │
- ├──────┼───────────┼──────────────────────────────────────────────────────────┤
- │ 128k │20000-23FFF│ │
- │ 144k │24000-27FFF│ │
- │ 160k │28000-2BFFF│ │
- │ 176k │2C000-2FFFF│ │
- ├──────┼───────────┼──────────────────────────────────────────────────────────┤
- │ 192k │30000-33FFF│ │
- │ 208k │34000-37FFF│ │
- │ 224k │38000-3BFFF│ │
- │ 240k │3C000-3FFFF│ │
- ├──────┼───────────┼──────────────────────────────────────────────────────────┤
- │ 256k │40000-43FFF│ PC-2 system board RAM ends │
- │ 272k │44000-47FFF│ │
- │ 288k │48000-4BFFF│ │
- │ 304k │4C000-4FFFF│ │
- ├──────┼───────────┼──────────────────────────────────────────────────────────┤
- │ 320k │50000-53FFF│ │
- │ 336k │54000-57FFF│ │
- │ 352k │58000-5BFFF│ │
- │ 368k │5C000-5FFFF│ │
- ├──────┼───────────┼──────────────────────────────────────────────────────────┤
- │ 384k │60000-63FFF│ │
- │ 400k │64000-67FFF│ │
- │ 416k │68000-6BFFF│ │
- │ 432k │6C000-6FFFF│ │
- ├──────┼───────────┼──────────────────────────────────────────────────────────┤
- │ 448k │70000-73FFF│ │
- │ 464k │74000-77FFF│ │
- │ 480k │78000-7BFFF│ │
- │ 496k │7C000-7FFFF│ │
- ├──────┼───────────┼──────────────────────────────────────────────────────────┤
- │ 512k │80000-83FFF│ │
- │ 528k │84000-87FFF│ │
- │ 544k │88000-8BFFF│ the original IBM PC-1 BIOS limited memory to 544k │
- │ 560k │8C000-8FFFF│ │
- ├──────┼───────────┼──────────────────────────────────────────────────────────┤
- │ 576k │90000-93FFF│ │
- │ 592k │94000-97FFF│ │
- │ 609k │98000-9BFFF│ │
- │ 624k │9C000-9FFFF│ to 640k (top of RAM address space) │
- ├──────┴───────────┴──────────────────────────────────────────────────────────┤
- │A0000 ***** 64k ***** EGA/VGA starting address │
- │A0000 ***** 64k ***** Toshiba 1000 DOS ROM (MS-DOS 2.11V) │
- ├──────┬───────────┬──────────────────────────────────────────────────────────┤
- │ 640k │A0000-A95B0│ MCGA 320x200 256 color video buffer │
- │ │ -AF8C0│ MCGA 640x480 2 color video buffer │
- │ │ -A3FFF│ │
- │ 656k │A4000-A7FFF│ │
- │ 672k │A8000-ABFFF│ this 64k segment may be used for contiguous DOS │
- │ 688k │AC000-AFFFF│ RAM with appropriate hardware and software │
- ├──────┴───────────┴──────────────────────────────────────────────────────────┤
- │B0000 ***** 64k ***** mono and CGA address │
- ├──────┬───────────┬──────────────────────────────────────────────────────────┤
- │ 704k │B0000-B3FFF│ 4k monochrome display | The PCjr and early Tandy 1000│
- │ 720k │B4000-B7FFF│ | BIOS revector direct write to│
- │ 736k │B8000-BBFFF│ 16k CGA uses | the B8 area to the Video Gate│
- │ 756k │BC000-BFFFF│ | Array and reserved system RAM│
- ├──────┴───────────┴──────────────────────────────────────────────────────────┤
- │C0000 ***** 64k *************** expansion ROM │
- ├──────┬───────────┬──────────────────────────────────────────────────────────┤
- │ 768k │C0000-C3FFF│ 16k EGA BIOS C000:001E EGA BIOS signature (letters IBM │
- │ 784k │C4000-C5FFF│ │
- │ │C6000-C63FF│ 256 bytes Professional Graphics Display comm. area │
- │ │C6400-C7FFF│ │
- │ 800k │C8000-CBFFF│ 16k hard disk controller BIOS, drive 0 default │
- │ │CA000 │ some 2nd floppy (high density) controller BIOS │
- │ 816k │CC000-CDFFF│ 8k IBM PC Network NETBIOS │
- │ │CE000-CFFFF│ │
- ├──────┴───────────┴──────────────────────────────────────────────────────────┤
- │D0000 ***** 64k ***** expansion ROM │
- ├──────┬───────────┬──────────────────────────────────────────────────────────┤
- │ 832k │D0000-D7FFF│ 32k IBM Cluster Adapter | PCjr first ROM cartridge │
- │ │ DA000│ voice communications | address area. │
- │ 848k │D4000-D7FFF│ | Common expanded memory board │
- │ 864k │D8000-DBFFF│ | paging area. │
- │ 880k │DC000-DFFFF│ | │
- │ │DE000 │ TI Pro default video buffer, 4k in length │
- ├──────┴───────────┴──────────────────────────────────────────────────────────┤
- │E0000 ***** 64k ***** expansion ROM │
- ├──────┬───────────┬──────────────────────────────────────────────────────────┤
- │ 896k │E0000-E3FFF│ | PCjr second ROM cartridge │
- │ 912k │E4000-E7FFF│ | address area │
- │ 928k │E8000-EBFFF│ | │
- │ 944k │EC000-EFFFF│ | spare ROM sockets on AT │
- ├──────┴───────────┴──────────────────────────────────────────────────────────┤
- │F0000 ***** 64k ***** system │
- ├──────┬───────────┬──────────────────────────────────────────────────────────┤
- │ 960k │F0000-F3FFF│ reserved by IBM | cartridge address │
- │ 976k │F4000- │ | area (PCjr cartridge │
- │ │F6000 │ ROM BASIC Begins | BASIC) │
- │ 992k │F8000-FB000│ | │
- │ 1008k│FC000-FFFFF│ ROM BASIC and original | │
- │ │ │ BIOS (Compatibility BIOS | │
- │ │ │ in PS/2) | │
- │ 1024k│ FFFFF│ end of memory (1024k) for 8088 machines │
- ├──────┼───────────┴─┬────────────────────────────────────────────────────────┤
- │ 384k │100000-15FFFF│ 80286/AT extended memory area, 1Mb motherboard │
- │ 15Mb │100000-FFFFFF│ 80286/AT extended memory address space │
- │ 15Mb │160000-FDFFFF│ Micro Channel RAM expansion (15Mb extended memory) │
- │ 128k │FE0000-FFFFFF│ system board ROM (PS/2 Advanced BIOS) │
- ├──────┼─────────────┴───┬────────────────────────────────────────────────────┤
- │ 64k │C0000000-C000FFFF│ Weitek "Abacus" math coprocessor memory-mapped I/O │
- └──────┴─────────────────┴────────────────────────────────────────────────────┘
-
- Note that the ROM BIOS has a duplicated address space which causes it to
- "appear" both at the end of the 1 megabyte real mode space and at the end of
- the 16 megabyte protected mode space. The addresses from 0E0000 to 0FFFFF are
- equal to 0FE0000 to 0FFFFFF. This is necessary due to differences in the memory
- addressing between Real and Protected Modes.
-
-
-
- A Brief Guide to Current Memory Terminology ........................... 2**3
-
- LOW MEMORY - 0000h to around 0:5(something), comprising the 80x8x interrupt
- vector table, the BIOS Data Area, DOS Data Area, etc.
-
- CONVENTIONAL MEMORY - from the end of low memory to the beginning of the
- "reserved by IBM" A000 segment (640k).
-
- HIGH MEMORY - originally noncontiguous RAM stuffed into the "reserved for
- ROM expansion" areas, typically segments D000 and E000. DOS
- normally can't access this memory without a driver of some
- sort, but it's easy to put RAMdisks and stuff in there.
-
- CONVENTIONAL MEMORY - extra RAM stuck at A000, assuming the machine already
- has 640k, appears as conventional memory accessible to DOS
- and applications. IBM clones can typically add 64k before
- bumping into a mono card or 96k before hitting a color card.
- This address is part of the EGA/VGA video RAM area and most
- EGA cards don't like system memory at A000.
-
- EXPANDED MEMORY - LIM 3.2, LIM 4.0, or EEMS 3.2 bank switched memory. A
- RAM "window" allows an app to save a block of RAM to an expansion
- board. The window size and location varies according to the
- EMS standard being used.
-
- EXTENDED MEMORY - this is the "native mode" address space of the 80286 and
- later chips. The "real mode", or 8088 addressing scheme,
- sees RAM as a collection of segments and offsets with a limit
- on segment size. "Protected mode" addressing uses a flat linear
- addressing scheme. 8088 and 80188 chips do not have extended
- memory.
-
- HIGH MEMORY - by fiddling a bit with the segment/offset stuff, you can
- get an extra block of addressable 8088-mode memory just over
- the 1 meg address space. Microsoft issued their "HMA" (High
- Memory Area) standard to try to standardize use of this block.
- Though it really is "high" memory, "high" had for many years
- referred to memory between 640k and 1mb. This creates more
- confusion for new programmers.
-
- EMS - this is expanded memory as described above
-
- XMS - Microsoft is pushing an "Extended Memory Standard" which defines
- a page-switching scheme much like EMS. The only real difference is
- that XMS uses protected-mode RAM instead of a special paged RAM board.
-
- XMS - some severely brain-damaged jerk at IBM issued documentation for some
- IBM *EMS* boards referring to the boards as *XMS*. This was a classic
- blunder, and now some IBM-followers are picking up the aberrant
- terminology. This is guaranteed to confuse some people. To make it
- simple, if it needs an expansion board, it is EMS no matter what the
- vendor calls it.
-
-
- PC Port Assignment .................................................... 2**4
-
-
- These are functions common across the IBM range. The PCjr, PC-AT, PC
- Convertible and PS/2 (both buses) have enhancements. In some cases, the
- AT and PS/2 series ignore, duplicate, or reassign ports arbitrarily. If
- your code incorporates specific port addresses for video or system board
- control it would be wise to have your application determine the machine
- type and video adapter and address the ports as required.
-
- hex address Function Models
- PCjr|PC|XT|AT|CVT|M30|PS2
-
- 0000-000F 8237 DMA controller PC
- 0010-001F 8237 DMA controller AT PS2
- 0020-0027 8259A interrupt controller
- 0020-002F IOSGA interrupt function PS2
- 0020-003F 8259A interrupt controller (AT)
- 0020-0021 interrupt controller 1, 8259A PC AT PS2
- 0040-0043 programmable timer 8253 PC
- 0040-0047 programmable timers PS2
- 0040-005F 8253-5 programmable timers AT
- note 1) 0041 was memory refresh in PCs. Not used in PS/2.
- 2) A few early 80386 machines used static RAM and did
- not use refresh at all. The PCjr refreshes by the
- video vertical retrace signal.
- 0060-0063 keyboard controller 8255A PC
- 0060-006F 8042 keyboard controller AT
- 0060 IOSGA keyboard input port PS2
- 0061 speaker PCjr PC XT AT CVT
- 0061 IOSGA speaker control M30 PS2
- 0061 On some clones, setting or clearing bit 2 controls Turbo mode
- 0061 Toshiba 1000 - system command
- 0062 IOSGA configuration control M30 PS2
- 0062 Toshiba 1000 - System Status, port C
- 0063 SSGA, undocumented PS2
- 0063 Toshiba 1000 - mode set
- 0064 keyboard auxiliary device PS2
- 0065-006A SSGA, undocumented PS2
- 006B SSGA, RAM enable/remap PS2
- 006C-006F SSGA, undocumented PS2
- 0070 AT CMOS write internal register
- 0071 AT CMOS read internal register
- 0070-0071 CMOS real-time clock, NMI mask PS2
- 0070-007F CMOS real-time clock, NMI mask AT
- 0074-0076 reserved PS2
- 0800-008F SSGA DMA page registers PS2
- 0080-009F DMA page registers, 74LS612 AT
- 0090 central arbitration control port (Micro Channel)
- 0091 card selected feedback (Micro Channel)
- 0092 system control port A (Micro Channel)
- 0093 reserved (Micro Channel)
- 0094 system board setup (Micro Channel)
- 0096 POS "CD SETUP" selector (Micro Channel)
- 00A0-00A1 Interrupt controller 2, 8259A AT PS2
- 00A0-00AF IOSGA NMI mask register PS2
- 00B0-00BF realtime clock/calendar, (undocumented) PS2
- 00C0-00DF reserved PCjr PC XT AT CVT M30
- 00C0-00CF DOS ROM register, Toshiba 1000
- 00D0-00EF "special" register, Toshiba 1000
- 00C0 0C1 key register, Toshiba 1000
- 00C1 keyboard transfer register, Toshiba 1000
- 00C2 keyboard receive register, Toshiba 1000
- 00C3 keyboard status register, Toshiba 1000
- 00C8 DOS ROM page register, Toshiba 1000
- 00E0 CPU speed control, Toshiba 1000
- 00E1 keyboard status/0E2 key register, Toshiba 1000
- 00E2 work register, Toshiba 1000
- 00E3 0E4 key register, Toshiba 1000
- 00E4 system control register 0, Toshiba 1000
- 00E4 Weitek ABACUS NDP - bit 0=1, ABACUS is present
- 00E5 0E6 key register, Toshiba 1000
- 00E6 system control register 1, Toshiba 1000
- 00EE EMS unit index, Toshiba 1000
- 00EF EMS unit data, Toshiba 1000
- 00C0-00DF DMA controller 2, 8237A-5 AT PS2
- 00E0-00EF realtime clock/calendar (undocumented) M30 PS2
- 00F0-00FF PS/2 math coprocessor I/O (Model 50+) (diskette IO on PCjr)
- 0100-0101 PS/2 POS adapter ID response (Micro Channel)
- 0102-0107 PS/2 POS adapter configuration response (Micro Channel)
- 01F0-01F8 hard disk AT PS2
- 0200-0201 game-control adapter (joystick)
- 0200-020F game controller PC AT
- 0208-0209 Chips & Technology CS8221 chipset default EMS ports
- alternate addresses: 218h, 258h, 268h, 2A8h, 2B8h, 2E8h
- 0208-020F Toshiba 1000 - EMS unit I/O #1
- 020C-020D reserved by IBM
- 0210-0217 expansion box (PC, XT)
- 0218-021F Toshiba 1000 - EMS unit I/O #2
- 021F reserved by IBM
- 0258-025F Toshiba 1000 - EMS unit I/O #3
- 0258-0259 LIM EMS 3.1 (not defined in 3.2+)
- 0268-026F Toshiba 1000 - EMS unit I/O #4
- 0278-027F parallel printer port 2 AT
- 0278-027B parallel printer port 3 PS2
- 02A2 clock chip in early Sperry PCs
- 02A8-02AF Toshiba 1000 - EMS unit I/O #5
- 02B8-02BF Toshiba 1000 - EMS unit I/O #6
- 02B0-02DF EGA (alternate) PC AT
- 02C0-02DF Toshiba 1000 - realtime clock
- 02E1 GPIB (adapter 0) AT
- 02E2-02E3 data acquisition (adapter 0) AT
- 02E8 "industry standard" COM4
- 02E8-02EF Toshiba 1000 - EMS unit I/O #7
- 02F8-02FF serial communications (COM2) PC AT PS2
- 0300-031F prototype card PC AT
- 0300-031F Leading Edge Model D clock -------------------
- 0320-032F hard disk controller PC
- 0320 Perstor HD controller, primary -------------------
- 0324 Perstor HD controller, secondary -------------------
- 0340 Sony CD-ROM -------------------
- 0348-0357 DCA 3278
- 0360-0367 PC Network (low address)
- 0368-036F PC Network (high address) AT
- 0370 Colorado Memory external tape backup control port -------
- some "second controller" floppy cards -------------------
- 0378-037F parallel printer port PC AT
- 0378-037B parallel printer port PS2
- 0380-038F Eicon Technology Network Adapter (X.25) board (default)
- 0380-038F SDLC, bi-synchronous 2 PC AT
- 0380-0389 BSC communications (alternate) PC
- 0390-039F Eicon Technology Network Adapter (X.25) board (alternate)
- 0390-0393 cluster (adapter 0) PC AT
- 03A0-03A9 BSC communications (primary) PC AT
- 03B0-03BF monochrome/parallel printer adapter PC AT
- 03B4-03B5 video subsystem PS2
- 03BA video subsystem PS2
- 03BC-03BF parallel printer port 1 PS2
- 03C0-03CF Enhanced Graphics Adapter
- 03C0-03DA video subsystem and DAC PS2
- 03DA video status register AT&T 6300, Olivetti PC
- 03D0-03DF CGA, MCGA, VGA adapter control
- 03DE video mode selector register AT&T 6300, Olivetti PC
- 03E8h "industry standard" COM3
- 03F0-03F7 floppy disk controller PC AT PS2
- 03F0 Colorado Memory internal tape backup control port -------
- 03F2 DTK high-density XT floppy controller (output only)
- 03F5 DTK high-density XT floppy controller
- 03F8-03FF serial communications (COM1) PC AT PS2
- 06E2-06E3 data acquisition (adapter 1) AT
- 0790-0793 cluster (adapter 1) PC AT
- 0878 Compaq 386SX VGA BIOS relocation AT
- 0AE2-0AE3 data acquisition (adapter 2) AT
- 0B90-0B93 cluster (adapter 2) PC AT
- 0EE2-0EE3 data acquisition (adapter 3) AT
- 1390-1393 cluster (adapter 3) PC AT
- 22E1 GPIB (adapter 1)
- 2390-2393 cluster (adapter 4) PC AT
- 4258 LIM EMS 3.1 (not defined in 3.2+) -------------------
- 42E1 GPIB (adapter 2) AT
- 62E1 GPIB (adapter 3) AT
- 8258 LIM EMS 3.1 (not defined in 3.2+) -------------------
- 82E1 GPIB (adapter 4) AT
- A2E1 GPIB (adapter 5) AT
- C258 LIM EMS 3.1 (not defined in 3.2+) -------------------
- C2E1 GPIB (adapter 6) AT
- E2E1 GPIB (adapter 7) AT
-
- note 1) IOSGA = I/O Support Gate Array
- SSGA = System Support Gate Array
- 2) I/O Addresses, hex 000 to 0FF, are reserved for the system board I/O.
- Hex 100 to 3FF are available on the I/O channel.
- 3) These are the addresses decoded by the current set of adapter cards.
- IBM may use any of the unlisted addresses for future use.
- 4) SDLC Communication and Secondary Binary Synchronous Communications
- cannot be used together because their port addresses overlap.
-
-
-
- Reserved Memory Locations ............................................. 2**5
-
- ┌──────────────────────────────────────────────────────────────────────────────
- │ 000-3FF - 1k DOS interrupt vector table, 4 byte vectors for ints 00h-0FFh.
- │ 30:00 - used as a stack area during POST and bootstrap routines. This
- │to 3F:FF stack area may be revectored by an application program.
- ├──────────────────────────────────────────────────────────────────────────────
- │ ** The BIOS Data Area ** addresses from 400h to 4FFh
- ├─────┬───────┬────────────────────────────────────────────────────────────────
- │addr.│ size │ description
- ├─────┼───────┼────────────────────────────────────────────────────────────────
- │40:00│ word │ COM1 port address | These addresses are zeroed out in the
- │40:02│ word │ COM2 port address | OS/2 DOS Compatibility Box if any of
- │40:04│ word │ COM3 port address | the OS/2 COMxx.SYS drivers are loaded.
- │40:06│ word │ COM4 port address |
- │40:08│ word │ LPT1 port address
- │40:0A│ word │ LPT2 port address
- │40:0C│ word │ LPT3 port address
- │40:0E│ word │ LPT4 port address (not valid in PS/2 machines)
- │40:0E│ word │ PS/2 pointer to 1k extended BIOS Data Area at top of RAM
- │40:10│ word │ equipment flag (see int 11h)
- └─────┴───────┤ bits:
- │ 0 0 no floppy drive present
- │ 1 if floppy drive present (see bits 6&7)
- │ 1 0 no math coprocessor installed
- │ 1 if 80x87 installed (not valid in PCjr)
- │ 2,3 system board RAM (not used on AT or PS/2)
- │ 0,0 16k 0,1 32k
- │ 1,0 48k 1,1 64k
- │ 4,5 initial video mode
- │ 0,0 no video adapter
- │ 0,1 40 column color (PCjr default)
- │ 1,0 80 column color
- │ 1,1 MDA
- │ 6,7 number of diskette drives
- │ 0,0 1 drive 0,1 2 drives
- │ 1,0 3 drives 1,1 4 drives
- │ 8 0 DMA present
- │ 1 DMA not present (PCjr, Tandy 1400, Sanyo 55x)
- │ 9,A,B number of RS232 serial ports
- │ C game adapter (joystick)
- │ 0 no game adapter
- │ 1 if game adapter
- │ D serial printer (PCjr only)
- │ 0 no printer
- │ 1 serial printer present
- ┌──────┘ E,F number of parallel printers installed
- │note 1) The IBM PC and AT store the settings of the system board
- └───┐ switches or CMOS RAM setup information (as obtained by the BIOS
- │ in the Power-On Self Test (POST)) at addresses 40:10h and
- │ 40:13h. 00000001b indicates "on", 00000000b is "off".
- ┌─────┬────┴──┐
- │40:12│ byte │ reserved (PC, AT)
- └─────┴───────┤ number of errors detected by infrared keyboard link (PCjr)
- ┌─────┬───────┤ POST status (Convertible)
- │40:13│ word │ availible memory size in Kbytes (less display RAM in PCjr)
- ├─────┼───────┤ this is the value returned by int 12h
- │40:15│ word │ reserved
- │40:17│ byte │ keyboard flag byte 0 (see int 9h)
- └─────┴───────┤ bit 7 insert mode on 3 alt pressed
- │ 6 capslock on 2 ctrl pressed
- │ 5 numlock on 1 left shift pressed
- ┌─────┬───────┤ 4 scrollock on 0 right shift pressed
- │40:18│ byte │ keyboard flag byte 1 (see int 9h)
- └─────┴───────┤ bit 7 insert pressed 3 ctrl-numlock (pause) toggled
- │ 6 capslock pressed 2 PCjr keyboard click active
- │ 5 numlock pressed 1 PCjr ctrl-alt-capslock held
- ┌─────┬───────┤ 4 scrollock pressed 0
- │40:19│ byte │ storage for alternate keypad entry (not normally used)
- │40:1A│ word │ pointer to keyboard buffer head character
- │40:1C│ word │ pointer to keyboard buffer tail character
- │40:1E│32bytes│ 16 2-byte entries for keyboard circular buffer, read by int 16h
- │40:3E│ byte │ drive seek status - if bit=0, next seek will recalibrate by
- └─────┴───────┤ repositioning to Track 0.
- │ bit 3 drive D bit 2 drive C
- ┌─────┬───────┤ 1 drive B 0 drive A
- │40:3F│ byte │ diskette motor status (bit set to indicate condition)
- └─────┴───────┤ bit 7 write in progress 3 motor on (floppy 3)
- │ 6 2 motor on (floppy 2)
- │ 5 1 B: motor on (floppy 1)
- ┌─────┬───────┤ 4 0 A: motor on (floppy 0)
- │40:40│ byte │ motor off counter
- │ │ │ starts at 37 and is decremented 1 by each system clock tick.
- │ │ │ motor is shut off when count = 0.
- │40:41│ byte │ status of last diskette operation where:
- └─────┴───────┤ bit 7 timeout failure 3 DMA overrun
- │ 6 seek failure 2 sector not found
- │ 5 controller failure 1 address not found
- ┌─────┬───────┤ 4 CRC failure 0 bad command
- │40:42│7 bytes│ NEC floppy controller chip status
- │40:49│ byte │ Video Control Data Area 1 from 0040:0049 through 0040:0066
- └─────┴───────┤ current CRT mode (hex value)
- │ 00h 40x25 BW (CGA) 01h 40x25 color (CGA)
- │ 02h 80x25 BW (CGA) 03h 80x25 color (CGA)
- │ 04h 320x200 color (CGA) 05h 320x200 BW (CGA)
- │ 06h 640x200 BW (CGA) 07h monochrome (MDA)
- │extended video modes (EGA/MCGA/VGA or other)
- │ 08h lores,16 color 09h med res,16 color
- │ 0Ah hires,4 color 0Bh n/a
- │ 0Ch med res,16 color 0Dh hires,16 color
- ┌─────┬───────┤ 0Eh hires,4 color 0Fh hires,64 color
- │40:4A│ word │ number of columns on screen, coded as hex number of columns
- └─────┴───────┤ 20 col = 14h (video mode 8, low res 160x200 CGA graphics)
- │ 40 col = 28h
- ┌─────┬───────┤ 80 col = 46h
- │40:4C│ word │ screen buffer length in bytes
- ├─────┼───────┤(number of bytes used per screen page, varies with video mode)
- │40:4E│ word │ current screen buffer starting offset (active page)
- │40:50│8 words│ cursor position pages 1-8
- └─────┴───────┤ the first byte of each word gives the column (0-19, 39, or 79)
- ┌─────┬───────┤ the second byte gives the row (0-24)
- │40:60│ byte │ end line for cursor (normally 1)
- │40:61│ byte │ start line for cursor (normally 0)
- │40:62│ byte │ current video page being displayed (0-7)
- │40:63│ word │ base port address of 6845 CRT controller or equivalent
- ├─────┼───────┤ for active display 3B4h=mono, 3D4h=color
- │40:65│ byte │ current setting of the CRT mode register
- │40:66│ byte │ current palette mask setting (CGA)
- │40:67│5 bytes│ temporary storage for SS:SP during shutdown (cassette interface)
- │40:6C│ word │ timer counter low word
- │40:6E│ word │ timer counter high word
- │40:69│ byte │ HD_INSTALL (Columbia PCs) (not valid on most clone computers)
- └─────┴───────┤ bit 0 0 8 inch external floppy drives
- │ 1 5-1/4 external floppy drives
- │ 1,2 highest drive address which int 13 will accept
- │ (since the floppy drives are assigned 0-3,subtract
- │ 3 to obtain the number of hard disks installed)
- │ 4,5 # of hard disks connected to expansion controller
- │ 6,7 # of hard disks on motherboard controller
- │ (if bit 6 or 7 = 1, no A: floppy is present and
- ┌─────┬───────┤ the maximum number of floppies from int 11 is 3)
- │40:70│ byte │ 24 hour timer overflow 1 if timer went past midnight
- ├─────┼───────┤ it is reset to 0 each time it is read by int 1Ah
- │40:71│ byte │ BIOS break flag (bit 7 = 1 means break key hit)
- │40:72│ word │ reset flag
- └─────┴───────┤ PCjr keeps 1234h here for softboot when a cartridge is installed
- │ bits 1234h = soft reset, memory check will be bypassed
- │ 4321h = preserve memory (PS/2 only)
- │ 5678h = system suspended (Convertible)
- │ 9ABCh = manufacturing test mode (Convertible)
- ┌─────┬───────┤ ABCDh = system POST loop mode (Convertible)
- │40:74│ byte │ status of last hard disk operation ; PCjr special disk control
- │40:75│ byte │ # of hard disks attached (0-2) ; PCjr special disk control
- │40:76│ byte │ HD control byte; temp holding area for 6th param table entry
- │40:77│ byte │ port offset to current hd adapter ; PCjr special disk control
- │40:78│4 bytes│ timeout value for LPT1,LPT2,LPT3,LPT4
- │40:7C│4 bytes│ timeout value for COM1,COM2,COM3,COM4 (0-0FFh secs, default 1)
- │40:80│ word │ pointer to start of circular keyboard buffer, default 03:1E
- │40:82│ word │ pointer to end of circular keyboard buffer, default 03:3E
- └─────┴───────┤ note: early Zenith Z183 BIOS set these pointers to zero and
- ┌─────┬───────┤ ignored them.
- │40:84│ .... │ Video Control Data Area 2, 0040:0084 through 0040:008A
- │40:84│ byte │ rows on the screen minus 1 (EGA only)
- │40:84│ byte │ PCjr interrupt flag; timer channel 0 (used by POST)
- │40:85│ word │ bytes per character (EGA only)
- │40:85│2 bytes│ (PCjr only) typamatic character to repeat
- │40:86│2 bytes│ (PCjr only) typamatic initial delay
- │40:87│ byte │ mode options (EGA only)
- └─────┴───────┤ bit 0 0 cursor emulation in effect
- │ 1 no cursor emulation
- │ 1 0 EGA is connected to a color display
- │ 1 EGA is connected to monochrome TTL display
- │ 2 0 wait for vertical retrace (CGA active)
- │ 1 don't wait for vertical retrace (EGA or MDA active)
- │ 3 0 EGA is the active display,
- │ 1 "other" display is active.
- │ 4 reserved
- │ 5,6 EGA memory size
- │ 0,0 64k
- │ 0,1 128k
- │ 1,0 192k
- │ 1,1 256k
- │ 7 0 don't clear screen on mode changes
- │ 1 if the last "set mode" specified not to clear the
- │ video buffer
- │ mode combinations:
- │ bit3 bit1 Meaning
- │ 0 0 EGA is active display and is color
- │ 0 1 EGA is active display and is monochrome
- │ 1 0 EGA is not active, a mono card is active
- ┌─────┬───────┤ 1 1 EGA is not active, a CGA is active
- │40:87│ byte │ (PCjr only) current Fn key code
- ├─────┼───────┤ 80h bit indicates make/break key code?
- │40:88│ byte │ feature bits and switches (EGA only) 0=on, 1=off
- └─────┴───────┤ bit 0 switch 1
- │ 1 switch 2
- │ 2 switch 3
- │ 3 switch 4
- ┌─────┬───────┤ 4-7 feature bits
- │40:88│ byte │ (PCjr only) special keyboard status byte
- └─────┴───────┤ bit 7 function flag 3 typamatic (0=enable,1=disable)
- │ 6 Fn-B break 2 typamatic speed (0=slow,1=fast)
- │ 5 Fn pressed 1 extra delay bef.typamatic (0=enable)
- ┌─────┬───────┤ 4 Fn lock 0 write char, typamatic delay elapsed
- │40:89│ byte │ (PCjr) current value of 6845 reg 2 (horizontal synch) used by
- └─────┴───────┤ ctrl-alt-cursor screen positioning routine in ROM
- │ (VGA)
- │ bit 0 reserved
- │ 1 video summing enabled
- │ 2 0 for color monitor attached
- │ 1 for mono monitor
- │ 3 0 for default palette loading enabled
- │ 4 0 for 8x8 text font
- │ 1 for 8x16 text font
- ┌─────┬───────┤ 5-7 reserved
- │40:8A│ byte │ (PCjr) CRT/CPU Page Register Image, default 3Fh
- └─────┴───────┤ (VGA) Display Combination Code Index. This is the value
- │ set/returned by function 1Ah of the Video BIOS. This byte
- │ contains an index into the ROM BIOS Display Combination Code
- │ table, which is a list of byte pairs that specify valid
- │ combinations of one or two video subsystems. Video subsystems
- │ are designated by the following values:
- │ 00h no display
- │ 01h MDA with monochrome display
- │ 02h CGA with color display
- │ 03h reserved
- │ 04h EGA with color display
- │ 05h EGA with monochrome display
- │ 06h Professional Graphics Adapter
- │ 07h VGA with analog monochrome display
- │ 08h VGA with analog color display
- │ 09h reserved
- │ 0Ah MCGA with digital color display
- │ 0Bh MCGA with analog monochrome display
- │ 0Ch MCGA with analog color display
- ┌─────┬───────┤ 0FFh unrecognized video subsystem
- │40:8B│ byte │ last diskette data rate selected
- └─────┴───────┤ bit 7,6 starting data transfer rate to use
- │ 0,0 500 kb/sec
- │ 0,1 300 kb/sec
- │ 1,0 250 kb/sec
- │ 1,1 reserved
- │ 5,4 last step rate selected
- │ 3 ending data transfer rate to use
- │ 2 reserved
- │ 1 reserved
- │ 0 1 combination floppy/fixed disk controller detected
- │ 0 XT floppy only controller (for 360kb drive) detected
- │ Data Transfer Rates
- │ Kbits/sec Media Drive Sectors/Track
- │ 250 360k 360k 9
- │ 300 360k 1.2M 9
- │ 500 1.2M 1.2M 15
- │ 250 720k 720k 9
- │ 250 720k 1.4M 9
- ┌─────┬───────┤ 500 1.4M 1.4M 18
- │40:8C│ byte │ hard disk status returned by controller
- │40:8D│ byte │ hard disk error returned by controller
- │40:8E│ byte │ hard disk interrupt (bit 7=working interrupt)
- │40:8F│ byte │ combo_card - status of drives 0 and 1
- └─────┴───────┤ bit 7 reserved
- │ 6 drive type determined for drive 1
- │ 5 drive multiple data rate capability for drive 1
- │ 0 no multiple data rate
- │ 1 multiple data rate
- │ 4 1 then drive 1 has 80 tracks
- │ 0 then drive 1 has 40 tracks
- │ 3 reserved
- │ 2 drive type determined for drive 0
- │ 1 drive multiple data rate capability for drive 0
- │ 0 no multiple data rate
- │ 1 multiple data rate
- │ 0 1 the drive 0 has 80 tracks
- ┌─────┬───────┤ 0 the drive 0 has 40 tracks
- │40:90│4 bytes│ media state drive 0, 1, 2, 3
- └─────┴───────┤ floppy_media_state
- │ bit 7,6 Data transfer rate
- │ 00 - 500 K/sec
- │ 01 - 300 K/sec
- │ 10 - 250 K/sec
- │ 11 - reserved
- │ 5 double stepping required
- │ 4 media/drive determined
- │ 3 reserved
- │ 2-0 present state
- │ 000 360k in 360k unestablished
- │ 001 360k in 1.2M unestablished
- │ 010 1.2M in 1.2M unestablished
- │ 011 360k in 360k established
- │ 100 360k in 1.2M established
- │ 101 1.2M in 1.2M established
- │ 110 reserved
- ┌─────┬───────┤ 111 none of the above
- │40:94│2 bytes│ track currently seeked to drive 0, 1
- │40:96│ byte │ keyboard flag byte 3 (see int 9h)
- │40:97│ byte │ keyboard flag byte 2 (see int 9h)
- │40:98│ dword │ segment:offset pointer to users wait flag
- │40:9C│ dword │ users timeout value in microseconds
- │40:A0│ byte │ real time clock wait function in use
- └─────┴───────┤ bits 7 wait time elapsed and posted flag
- │ 6-1 reserved
- ┌─────┬───────┤ 0 int 15h, function 86h (WAIT) has occurred
- │40:A1│ byte │ LAN A DMA channel flags
- │40:A2│2 bytes│ status LAN A 0,1
- │40:A4│ dword │ saved hard disk interrupt vector
- │40:A8│ dword │ SAVE_PTR: EGA pointer to table of 7 parameters in segment:
- └─────┴───────┤ offset format. Format of table:
- │ D_1 dword pointer to 1472 byte table of 64 video parameters
- │ D_2 dword reserved
- │ D_3 dword reserved
- │ D_4 dword reserved
- │ D_5 dword reserved for future use
- │ D_6 dword reserved for future use
- ┌─────┬───────┤ D_7 dword reserved for future use
- │40:B0│2 words│ international support (Tandy 1000 TX)
- │40:B4│ byte │ keyboard NMI control flags (Convertible)
- │40:B4│ byte │ monochrome monitor hookup detect (Tandy 1000 TX)
- │ │ │ 00h not present 0FFh present
- │40:B5│ dword │ keyboard break pending flags (Convertible)
- │40:B5│ byte │ extended equipment detect (5 bits) (Tandy 1000 TX)
- └─────┴───────┤ bit 0 = 0 drive A is 5¼
- │ 1 drive A is 3½
- │ 1 = 0 drive A is 5¼
- │ 1 drive A is 3½
- │ 2 = 0 Tandy 1000 keyboard layout
- │ 1 IBM keyboard layout
- │ 3 = 0 CPU slow mode
- │ 1 CPU fast mode
- │ 4 = 0 internal color video support enabled
- │ 1 internal color video support disabled, external
- │ video enabled (chg from mb'd to expansion card)
- │ 5 = 0 no external monochrome video installed
- ┌─────┬───────┤ 1 external monochrome video installed
- │40:B6│ byte │ extended equipment detect (1 bit) (Tandy 1000 TX)
- └─────┴───────┤ bit 0 = 0 drive C is 5¼
- ┌─────┬───────┤ 1 drive C is 3½
- │40:B9│ byte │ port 60 single byte queue (Convertible)
- │40:BA│ byte │ scan code of last key (Convertible)
- │40:BB│ byte │ pointer to NMI buffer head (Convertible)
- │40:BC│ byte │ pointer to NMI buffer tail (Convertible)
- │40:BD│16bytes│ NMI scan code buffer (Convertible)
- │40:CE│ word │ day counter (Convertible and after)
- │ to │ -04:8F│ end of BIOS Data Area
- ├─────┴───────┴────────────────────────────────────────────────────────────────
- │ ** End of BIOS Data Area **
- ├─────┬───────┬────────────────────────────────────────────────────────────────
- │40:90│-40:EF │ reserved by IBM
- │40:F0│16bytes│ Inter-Application Communications Area (for use by applications
- │40:FF│ │ to transfer data or parameters to each other)
- └─────┴───────┤ 1) Used by Turbo Power's FMARK (mark memory for TSRs).
- │ 2) Used by Norton Utilities' TimeMark to store the time.
- │ 3) Used by BRIEF editor.
- ┌─────┬───────┤
- │50:00│ byte │ DOS print screen status flag
- └─────┴───────┤ 00h not active or successful completion
- │ 01h print screen in progress
- ┌─────┬───────┤ 0FFh error during print screen operation
- │50:01│ │ Used by BASIC
- │50:02-03 │ PCjr POST and diagnostics work area
- │50:04│ byte │ Single drive mode status byte - not used by AT&T DOS 2.11!
- └─────┴───────┤ 00 logical drive A was last active
- ┌─────────────┤ 01 logical drive B was last active
- │50:05-0E │ PCjr POST and diagnostics work area
- │50:0F│ │ BASIC: SHELL flag (set to 02h if there is a current SHELL)
- │50:10│ word │ BASIC: segment address storage (set with DEF SEG)
- │50:12│4 bytes│ BASIC: int 1Ch clock interrupt vector segment:offset storage
- │50:16│4 bytes│ BASIC: int 23h ctrl-break interrupt segment:offset storage
- │50:1A│4 bytes│ BASIC: int 24h disk error int vector segment:offset storage
- │50:1B-1F │ Used by BASIC for dynamic storage
- │50:20-21 │ Used by DOS for dynamic storage
- │50:22-2C │ Used by DOS for diskette parameter table. See int 1Eh for values
- └─────┴───────┤ In DOS 1.0 this is located in the ROM BIOS, but in DOS 1.1 and
- │ subsequent it is a part of DOS located at 05:22. The first byte
- │ (out of eleven) of the Disk Parameter contains the hexadecimal
- │ value CF in DOS 1.0 and DF in DOS 1.1 and later.
- │ DOS 1.0 24ms
- ┌─────────────┤ DOS 1.1 26ms
- │50:30-33 │ Used by MODE command
- │50:81│ │ number of floppies installed in the system?
- │50:82│ │ first hard disk drive?
- │50:83│ │ last hard disk drive?
- │50:34-FF │ Unknown - Reserved for DOS
- └─────────────┴─────────────────────────────────────────────────────────────────
-
-
-
- Absolute Addresses .................................................... 2**6
-
- 0008:0047 IO.SYS or IBMBIO.COM IRET instruction. This is the dummy routine that
- interrupts 01h, 03h, and 0Fh are initialized to during POST.
- C000:001E EGA BIOS signature (the letters IBM)
- F000:FA6E table of characters 00h-7Fh used by int 10h video BIOS
- The first 128 characters are stored here and each occupies 8 bytes.
- The high bit ones are somewhere on the video adapter card.
- F000:FFF5 BIOS release date
- F000:FFFE PC model identification
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │ ROM BIOS ┌ model byte │
- │ copyright │ ┌ submodel byte machine │
- │ date │ │ ┌ revision │
- ├──────────┼────┼────┼────┼───────────────────────────────────────────┤
- │ │ 00 │ 00 │ 00 │ AT&T 6300, Olivetti PC │
- │ 09/02/86 │ FA │ 00 │ 00 │ PS/2 Model 30 │
- │ 01/10/86 │ FB │ 00 │ 00 │ XT-2 (early) │
- │ 01/10/86 │ FB │ 00 │ 01 │ XT Model 089 │
- │ 05/09/86 │ FB │ 01 │ 02 │ XT-2 (revised) │
- │ 01/10/84 │ FC │ -- │ -- │ AT Model 099 (original) │
- │ 06/10/85 │ FC │ 00 │ 01 │ AT Model 239 6mHz (6.6 max governor) │
- │ 11/15/85 │ FC │ 01 │ 00 │ AT Model 339, 339 8mHz (8.6 max governor) │
- │ │ FC │ 01 │ 00 │ Compaq 386/16 │
- │ │ FC │ 01 │ 03 │ some Phoenix 386 BIOS │
- │ │ FC │ 01 │ 81 │ some Phoenix 386 BIOS │
- │ 04/21/86 │ FC │ 02 │ 00 │ XT/286 │
- │ 02/13/87 │ FC │ 04 │ 00 │ PS/2 Model 50 │
- │ 02/13/87 │ FC │ 05 │ 00 │ PS/2 Model 60 │
- │ │ FC │ 00 │ │ 7531/2 Industrial AT │
- │ │ FC │ 06 │ │ 7552 "Gearbox" │
- │ 04/18/88 │ FC │ 04 │ 03 │ PS/2 50Z │
- │ 01/24/90 │ FC │ 01 │ 00 │ Compaq Deskpro 80386/25e │
- │ 10/02/89 │ FC │ 02 │ 00 │ Compaq Deskpro 386s, 386SX, 16mHz │
- │ 06/01/83 │ FD │ -- │ -- │ PCjr │
- │ 11/08/82 │ FE │ -- │ -- │ XT, Portable PC, XT/370, 3270PC │
- │ 04/24/81 │ FF │ -- │ -- │ PC-0 (16k motherboard) │
- │ 10/19/81 │ FF │ -- │ -- │ PC-1 (64k motherboard) │
- │ 08/16/82 │ FF │ -- │ -- │ PC, XT, XT/370 (256k motherboard) │
- │ 10/27/82 │ FF │ -- │ -- │ PC, XT, XT/370 (256k motherboard) │
- │ ? 1987 │ F8 │ 00 │ 00 │ PS/2 Model 80 │
- │ 3/30/87 │ F8 │ 00 │ 00 │ PS/2 Model 80-041 16mHz │
- │ 08/28/87 │ F8 │ ?? │ ?? │ PS/2 Model 80-071 16mHz │
- │ ? 1987 │ F8 │ 01 │ 00 │ PS/2 Model 80 20mHz │
- │ 09/17/87 │ F8 │ 01 │ 01 │ PS/2 Model 80-111 20mHz │
- │ ? │ F8 │ 04 │ ? │ PS/2 Model 70-121 │
- │ 01/18/89 │ F8 │ 0B │ 00 │ PS/2 Model 70 Portable │
- │ 04/11/88 │ F8 │ 09 │ 02 │ PS/2 Model 70 desktop │
- │ 02/20/89 │ F8 │ 0D │ │ PS/2 Model 70-A21 │
- │ 09/13/85 │ F9 │ 00 │ 00 │ Convertible │
- │ │ 2D │ -- │ -- │ Compaq PC (4.77mHz original) │
- │ │ 9A │ -- │ -- │ Compaq Plus (XT compatible) │
- └──────────┴────┴────┴────┴───────────────────────────────────────────┘
-
-
-
- The IBM PC System Interrupts (Overview) ............................... 2**7
-
- The interrupt table is stored in the very lowest location in memory, starting
- at 0000:0000h. The locations are offset from segment 0, i.e. location 0000h has
- the address for int 0, etc. The table is 1024 bytes in length and contains 256
- four byte vectors from 00h to 0FFh. Each address' location in memory can be
- found by multiplying the interrupt number by 4. For example, int 7 could be
- found by (7x4=28) or 1Bh (0000:001Bh).
-
- These interrupt vectors normally point to ROM tables or are taken over by DOS
- when an application is run. Some applications revector these interrupts to
- their own code to change the way the system responds to the user. DOS provides
- int 21h function 25h to change interrupts from a high level; altering the
- interrupt vector table directly is not recommended, nor would it really get
- you anywhere.
-
-
- Quick Chart of Interrupts 00h-0FFh .................................... 2**8
-
- ┌─────────────────────┬────────────────────────────────────────────────────────┐
- │ Interrupt Address │ │
- ├───────┬───────┬─────┘ Function │
- │ Number│ (Hex) │ Type │
- ├───────┼───────┼─────┬────────────────────────────────────────────────────────┤
- │ 0 │ 00-03 │ CPU │ Divide by Zero │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 1 │ 04-07 │ CPU │ Single Step │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 2 │ 08-0B │ CPU │ Nonmaskable │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 3 │ 0C-0F │ CPU │ Breakpoint │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 4 │ 10-13 │ CPU │ Overflow │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 5 │ 14-17 │ BIOS│ Print Screen │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 6 │ 18-1B │ hdw │ Reserved │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 7 │ 1C-1F │ hdw │ Reserved │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 8 │ 20-23 │ hdw │ Time of Day │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 9 │ 24-27 │ hdw │ Keyboard │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ A │ 28-2B │ hdw │ Reserved │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ B │ 2C-2F │ hdw │ Communications (8259) │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ C │ 30-33 │ hdw │ Communications │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ D │ 34-37 │ hdw │ Disk │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ E │ 38-3B │ hdw │ Diskette │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ F │ 3C-3F │ hdw │ Printer │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 10 │ 40-43 │ BIOS│ Video │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 11 │ 44-47 │ BIOS│ Equipment Check │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 12 │ 48-4B │ BIOS│ Memory │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 13 │ 4C-4F │ BIOS│ Diskette/Disk │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 14 │ 50-53 │ BIOS│ Serial Communications │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 15 │ 54-57 │ BIOS│ Cassette, System Services │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 16 │ 58-5B │ BIOS│ Keyboard │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 17 │ 5C-5F │ BIOS│ Parallel Printer │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 18 │ 60-63 │ BIOS│ ROM BASIC Loader │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 19 │ 64-67 │ BIOS│ Bootstrap Loader │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 1A │ 68-6B │ BIOS│ Time of Day │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 1B │ 6C-6F │ BIOS│ Keyboard Break │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 1C │ 70-73 │ BIOS│ Timer Tick │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 1D │ 74-77 │ BIOS│ Video Initialization │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 1E │ 78-7B │ BIOS│ Diskette Parameters │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 1F │ 7C-7F │ BIOS│ Video Graphics Characters, second set │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 20 │ 80-83 │ DOS │ General Program Termination │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 21 │ 84-87 │ DOS │ DOS Services Function Request │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 22 │ 88-8B │ DOS │ Called Program Termination Address │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 23 │ 8C-8F │ DOS │ Control Break Termination Address │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 24 │ 90-93 │ DOS │ Critical Error Handler │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 25 │ 94-97 │ DOS │ Absolute Disk Read │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 26 │ 98-9B │ DOS │ Absolute Disk Write │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 27 │ 9C-9F │ DOS │ Terminate and Stay Resident │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 28-3F │ A0-FF │ DOS │ Reserved for DOS │
- └───────┴───────┴─────┼────────────────────────────────────────────────────────┤
- │ *29h Fast Screen Write │
- │ *2Ah Microsoft Networks - Session Layer Interrupt │
- │ 2Fh Multiplex Interrupt │
- │ *30h Far jump instruction for CP/M-style calls │
- │ 33h Used by Microsoft Mouse Driver │
- ┌───────┬───────┬─────┼────────────────────────────────────────────────────────┤
- │ 40-43 │100-115│ BIOS│ Reserved for BIOS │
- └───────┴───────┴─────┼────────────────────────────────────────────────────────┤
- │ 40h Hard Disk BIOS │
- │ 41h Hard Disk Parameters (except PC1) │
- │ 42h Pointer to screen BIOS entry (EGA, VGA, PS/2) │
- │ 43h Pointer to EGA initialization parameter table │
- ┌───────┬───────┬─────┼────────────────────────────────────────────────────────┤
- │ 44 │116-119│ BIOS│ First 128 Graphics Characters │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 45-47 │120-131│ BIOS│ Reserved for BIOS │
- └───────┴───────┴─────┼────────────────────────────────────────────────────────┤
- │ 45h Reserved by IBM (not initialized) │
- │ 46h Pointer to hard disk 2 params (AT, PS/2) │
- │ 47h Reserved by IBM (not initialized) │
- ┌───────┬───────┬─────┼────────────────────────────────────────────────────────┤
- │ 48 │132-135│ BIOS│ PCjr Cordless Keyboard Translation │
- ├───────┼───────┼─────┼────────────────────────────────────────────────────────┤
- │ 49 │136-139│ BIOS│ PCjr Non-Keyboard Scancode Translation Table │
- └───────┴───────┴─────┼────────────────────────────────────────────────────────┤
- │ 4Ah Real-Time Clock Alarm (Convertible, PS/2) │
- ┌───────┬───────┬─────┼────────────────────────────────────────────────────────┤
- │ 50-5F │140-17F│ BIOS│ Reserved for BIOS │
- └───────┴───────┴─────┼────────────────────────────────────────────────────────┤
- │ 5Ah Cluster Adapter BIOS entry address │
- │ *5Bh IBM (cluster adapter?) │
- │ 5Ch NETBIOS interface entry port │
- ┌───────┬───────┬─────┴────────────────────────────────────────────────────────┤
- │ 60-67 │180-19F│ User Program Interrupts (availible for general use) │
- └───────┴───────┴─────┬────────────────────────────────────────────────────────┤
- │ 60h 10-Net Network │
- │ 67h Used by LIM & AQA EMS, EEMS │
- ┌───────┬───────┬─────┴────────────────────────────────────────────────────────┤
- │ 68-7F │1A0-1FF│ Reserved by IBM │
- └───────┴───────┴─────┬────────────────────────────────────────────────────────┤
- │ 6Ch System Resume Vector (Convertible) │
- │ 6Fh some Novell and 10-Net API functions │
- │ 70h IRQ 8, Real Time Clock Interrupt (AT, PS/2) │
- │ 71h IRQ 9, LAN Adapter 1 │
- │ 72h IRQ 10 (AT, XT/286, PS/2) Reserved │
- │ 73h IRQ 11 (AT, XT/286, PS/2) Reserved │
- │ 74h IRQ 12 Mouse Interrupt (PS/2) │
- │ 75h IRQ 13, Coprocessor Error │
- │ 76h IRQ 14, Hard Disk Controller (AT, PS/2) │
- │ 77h IRQ 15 (AT, XT/286, PS/2) Reserved │
- │ 7Ch IBM REXX88PC command language │
- ┌───────┬───────┬─────┴────────────────────────────────────────────────────────┤
- │ 80-85 │200-217│ ROM BASIC │
- ├───────┼───────┼──────────────────────────────────────────────────────────────┤
- │ 86-F0 │218-3C3│ Used by BASIC Interpreter When BASIC is running │
- ├───────┼───────┼──────────────────────────────────────────────────────────────┤
- │ F1-FF │3C4-3FF│ Reserved by IBM │
- └───────┴───────┴──────┬───────────────────────────────────────────────────────┤
- │ *0F8h Set Shell Interrupt (OEM) │
- │ *0F9h OEM SHELL service codes │
- └───────────────────────────────────────────────────────┘
-
-
-
- The IBM-PC System Interrupts (in detail) .............................. 2**9
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 00h Divide by Zero │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0000h) (processor error). Automatically called at end of DIV or IDIV
- operation that results in error. Normally set by DOS to display an
- error message and abort the program.
-
- note On an 8086/8088, the return address points to the following instruction
- On an 80286/80386, the return address points to the divide instruction
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 01h Single step │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0004h) Taken after every instruction when CPU Trap Flag indicates
- single-step mode (bit 8 of FLAGS is 1). This is what makes the "T"
- command of DEBUG work for single stepping. Is not generated after MOV
- to segment register or POP of segment register. (unless you have a
- very early 8088 with the microcode bug).
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 02h Non-maskable interrupt │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0008h) Vector not disabled via CLI. Generated by NMI signal in
- hardware. This function is called in the event of a memory
- parity error or may occur in the event of other hardware
- problems or failures depending on the specific manufacturer's
- hardware. Displays the appropriate error message and halts the
- processor.
- Some AT chip sets apparently use int 02h to signal I/O errors
- as well as parity errors.
-
- This signal has various uses:
- POST parity error: all except PCjr and Convertible
- 80x87 coprocessor interrupt: all except PCjr and Convertible
- Keyboard interrupt: PCjr, Convertible
- I/O channel check: Convertible, PS/2 50+
- Disk controller power-on request: Convertible
- System suspend: Convertible
- Realtime clock: Convertible
- System watchdog timer: PS/2 50+
- Timeout interrupt: PS/2 50+
- DMA timer time-out interrupt: PS/2 50+
- Infrared keyboard link: PCjr
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 03h Breakpoint │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:000Ch) Taken when CPU executes the 1-byte int 3 (0CCh). Similar to 8080's
-
- (internal) RST instruction. Generally used to set breakpoints for DEBUG.
-
- note 1) Also used by Turbo Pascal versions 1,2,3 when {$U+} specified.
- 2) Int 3s are sometimes inserted by the Microsoft Linker in response to
- an unresolved symbol.
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 04h Divide overflow │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0010h) Generated by INTO instruction if OF flag is set. If flag is not set,
-
- (internal) INTO is effectively a NOP. Used to trap any arithmetic errors when
- program is ready to handle them rather than immediately when they
- occur.
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 05h Print Screen │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0014h) Service dumps the screen to the printer. Invoked by int 9 for shifted
- key 55 (PrtSc). Automatically called by keyboard scan when PrtSc key
- is pressed. Normally executes a routine to print the screen, but may
- call any routine that can safely be executed from inside the keyboard
- handler. Status and result byte are at address 0050:0000.
-
- (internal) BOUND Check Failed (80286+)
- Generated by BOUND instruction when the value to be tested is less
- than the indicated lower bound or greater than the indicated upper
- bound.
-
- entry AH 05h
- return absolute address 50:0
- 00h print screen has not been called, or upon return from a call
- there were no errors
- 01h print screen is already in progress
- 0FFh error encountered during printing
- note 1) Uses BIOS services to read the screen.
- 2) Output is directed to LPT1.
- 3) Revectored into GRAPHICS.COM if GRAPHICS.COM is loaded.
- 4) On the Tandy 1000TX this interrupt can be enabled or disabled across
- the expansion slots via a DIP switch.
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 06h Reserved by IBM │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0018h)
- On the Tandy 1000TX this interrupt can be enabled or disabled across
- the expansion slots via a DIP switch.
-
- (internal) Undefined Opcode (80286+)
-
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 07h Reserved by IBM │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:00C0h)
- On the Tandy 1000TX this interrupt can be enabled or disabled across
- the expansion slots via a DIP switch.
-
- (internal) No Math Unit Available (80286+)
-
- note The 80286 and later can be programmed to generate an int 7 whenever
- an ESC instruction is encountered. This could be used to emulate an
- 80x87 series coprocessor in software and be transparent to the
- application software. It could also be used to make a non-Intel
- floating point processor emulate an 80x87.
-
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 08h Timer │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0020h) 55ms timer "tick" issued 18.2 times per second.
- (IRQ0) 8259-1 Interrupt Controller
- Updates the system time at [0040:006C] (low word) and [0040:006E]
- (high word) and issues an int 1Ch (timer). (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.
-
- (internal) Double Fault (80286+ protected mode) Called when multiple exceptions
- occur on one instruction, or an exception occurs in an exception
- handler. If an exception occurs in the double fault handler, the CPU
- goes into SHUTDOWN mode (which circuitry in the PC/AT converts to a
- reset).
-
- entry AH 08h
- return absolute addresses:
- 40:6C number of interrupts since power on (4 bytes)
- 40:70 number of days since power on (1 byte)
- 40:67 day counter on all products after AT
- 40:40 motor control count - gets decremented and shuts off diskette
- motor if zero
-
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 09h Keyboard │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0024h) Taken whenever a key is pressed or released. This is normally a scan
- (IRQ1) code, but may also be an ACK or NAK of a command on AT-type
- keyboards. 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.
- The converted ASCII character is placed into the next available
- position in the circular queue keyboard. It is put in the position
- indicated by queue tail when it will not cause the loss of earlier
- entered data. The queue 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 the queue head equals the
- queue 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
- the two status bytes at absolute addr. [0040:0017,18].
-
- Special key combinations will cause other events to occur:
- a) Ctrl-Alt_Del - Reset computer by jumping to power_on_reset
- b) Print screen - Call int_5_prn_scrn to print the current screen
- c) Ctrl-Break - Call int_1Bh control break key processor (DOS)
- d) Pause - Wait until an ASCII key is pressed, without
- placing the key in the queue
-
- (internal) Math Unit Protection Fault (80286+ protected mode)
-
- entry AH 09h
- return at absolute memory addresses:
- 40:17 bit
- 0 right shift key depressed
- 1 left shift key depressed
- 2 control key depressed
- 3 alt key depressed
- 4 ScrollLock state has been toggled
- 5 NumLock state has been toggled
- 6 CapsLock state has been toggled
- 7 insert state is active
- 40:18 bit
- 0 left control key depressed
- 1 left alt key depressed
- 2 SysReq key depressed
- 3 Pause key has been toggled
- 4 ScrollLock key is depressed
- 5 NumLock key is depressed
- 6 CapsLock key is depressed
- 7 Insert key is depressed
- 40:96 bit
- 0 last code was the E1h hidden code
- 1 last code was the E0h hidden code
- 2 right control key down
- 3 right alt key down
- 4 101 key Enhanced keyboard installed
- 5 force NumLock if rd ID & kbx
- 6 last character was first ID character
- 7 doing a read ID (must be bit 0)
- 40:97 bit
- 0 ScrollLock indicator
- 1 NumLock indicator
- 2 CapsLock indicator
- 3 circus system indicator
- 4 ACK received
- 5 resend received flag
- 6 mode indicator update
- 7 keyboard transmit error flag
- 40:1E keyboard buffer (20h bytes)
- 40:1C buffer tail pointer
- 40:72 1234h if ctrl-alt-del pressed on keyboard
- AL scan code
- note 1) Int 05h invoked if PrtSc key pressed.
- 2) Int 1Bh invoked if Ctrl-Break key sequence pressed.
- 3) Int 15h, AH=85h invoked on AT and after if SysReq key is pressed.
- 4) Int 15h, AH=4Fh invoked on machines after AT.
- 5) Int 16h, BIOS keyboard functions, uses this interrupt.
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 0Ah EGA Vertical Retrace │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0028h) used by EGA vertical retrace
- (IRQ2) 8259-1 Interrupt Controller
- note 1) The TOPS and PCnet adapters use this IRQ line by default.
- 2) 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.
- 3) Many VGA boards to not use this interrupt.
-
- (internal) Invalid Task State Segment (80286+ protected mode)
-
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 0Bh Communications Controller (serial port) hdw. entry │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:002Ch) Serial Port 2 (COM2) 8259-1
- (IRQ3)
- note 1) IRQ 3 may be used by SDLC (synchronous data-link control) or
- bisynchronous communications cards instead of a serial port.
- 2) The TOPS and PCnet adapters use this interrupt request line as an
- alternate.
- 3) On PS/2s, COM2 through COM8 share this IRQ.
- 4) For most serial boards, COM4 shares this IRQ.
- 5) On the Commodore Amiga 2000 with the PC Bridge Board, this interrupt
- is used for communication between the Amiga system board and the
- Bridge Board. This was probably the lowest IRQ level they felt safe
- using, but limits the A2000's use of network cards, etc.
- 6) This interrupt is used by part of the stack-switching code added
- to DOS 3.2 for use with Local Area Network adapters.
- 7) The PS/2 puts COM3 through COM8 at port addresses above 3FFh (not
- properly decoded by older PCs) and has all of them sharing IRQ3.
-
- (internal) Not Present (80286+ protected mode)
- Generated when loading a segment register if the segment descriptor
- indicates that the segment is not currently in memory. May be used
- to implement virtual memory.
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 0Ch Communications Controller (serial port) Hardware Entry │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0030h) Serial Port 1 (COM1) or internal modem in PCjr or Convertible
- (IRQ4) 8259-1
- note 1) IRQ 4 may be used by SDLC (synchronous data-link control) or
- bisynchronous communications cards instead of a serial port.
- 2) On some PCs, this interrupt is shared by COM3.
- 3) Tandy computers use IRQ4 instead of IRQ5 for the hard disk interrupt.
- 4) Best performance of mice sometimes happens when they are configured
- for IRQ4 instead of IRQ3, since some mouse drivers may lock system
- interrupts for long periods.
-
- (internal) Stack Fault (80286+ protected mode)
- Generated on stack overflow/underflow. Note that the 80286 will shut
- down in real mode if SP=1 before a push.
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 0Dh Hard Disk │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0034h) Miscelleneous uses
- (IRQ5) 8259-1
- note 1) Various Tandy 1000 models may use this line for the 60Hhz RAM refresh
- or as "optional bus interrupt."
- 2) Used by hard disk on IBM XT and most compatibles.
- 3) LPT2 on AT, XT/286, and PS/2
- 4) Dummy CRT vertical retrace on PCjr
-
- (internal) General Protection Violation (80286+)
- Called in real mode when an instruction attempts to access a word
- operand located at offset 0FFFFh or a PUSH MEM or POP MEM
- instruction contains an invalid bit code in the second byte, or
- when an instruction exceeds the maximum length allowed (10 bytes
- for 80286, 15 bytes for 80386)
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 0Eh Diskette Interrupt │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:0038h) Generated by floppy controller on completion of an operation
- (IRQ6) (sets bit 8 of 40:3E)
-
- (internal) Page Fault (80386+ native mode)
-
-
- ┌─────────────────────────────────────────────────────────────────────────────┐
- │Interrupt 0Fh Reserved by IBM │
- └─────────────────────────────────────────────────────────────────────────────┘
- (0:003Ch) IRQ7 used by 8259 PPI interrupt (LPT1, LPT2)
- (IRQ7)
- note 1) Generated by the LPT1 printer adapter when printer becomes ready. Many
- printer adapters do not reliably generate this interrupt.
- 2) This interrupt is normally avoided. If a bad interrupt occurs, it will
- vector to this spot (when caused by a misprogrammed 8259 PIC)
-
-