CHAPTER 2 Programming Technical Reference - IBM Copyright 1988, Dave Williams CPU Port Assignments, System Memory Map, BIOS Data Area, Interrupts 00h to 09h SYSTEM MEMORY MAP - OVERALL The IBM PC handles its address space in 64k segments, divided into 16k fractions and then further as nescessary. start start end addr. addr. addr. usage (dec) (hex) 00000 **** 640k *************** system data, drivers.... 0000:0000 hardware interrupt vectors 0000:0040 BIOS interrupt vectors 0k start of RAM | 0000:0080 DOS interrupt vector table 16k 00000-03FFF | 0000:0300 Stack area during POST and bootstrap routine 32k 04000-07FFF | 0000:0400 BIOS Data Area 48k 08000-0BFFF | 0000:04F0 Intra-Application Communications Area | 64k 10000-13FFF | 0000:0500 DOS reserved communication area 80k 14000-17FFF | xxxx:0000 IO.SYS - DOS interface to ROM I/O routines 96k 18000-1BFFF | xxxx:0000 MSDOS.SYS - DOS interrupt handlers, service 112k 1C000-1FFFF | routines (int 21 functions) | 128k 20000-23FFF | xxxx:xxxx DOS buffers, control areas, and installed 144k 24000-27FFF | device drivers. 160k 28000-2BFFF | xxxx:0000 resident portion of COMMAND.COM, interrupt 176k 2C000-2FFFF | handlers for int 22h, 23h,24h, and code to | reload the transient portion 192k 30000-33FFF | xxxx:0000 master environment block, default 64 bytes 208k 34000-37FFF | xxxx:0000 environment for next program 224k 38000-3BFFF | xxxx:0000 external commands or utilities (COM or EXE 240k 3C000-3FFFF | files) | 256k 40000-43FFF | ----:---- application programs 272k 44000-47FFF | xxxx:0000 user stack for COM files (256 bytes) 288k 48000-4BFFF | xxxx:0000 transient portion of COMMAND.COM 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 | 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 address 640k A0000-A95B0 MCGA 320x200 256 color video buffer AF8C0 MCGA 640x480 2 color video buffer -A3FFF 656k A4000-A7FFF 672k A8000-ABFFF 688k AC000-AFFFF B0000 ***** 64k *************** mono and CGA address 704k B0000-B3FFF mono uses only 4k | The PCjr and early Tandy 1000 720k B4000-B7FFF | BIOSs revector direct writes to 736k B8000-BBFFF CGA uses entire 16k | 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 (the letters IBM) 784k C4000-C5FFF C6000-C63FF 256 bytes Professional Graphics Display communication area C6400-C7FFF 800k C8000-CBFFF 16k hard disk controller BIOS, drive 0 default 816k CC000-CDFFF 8k IBM PC Network NETBIOS CE000-CFFFF D0000 ***** 64k *************** expansion ROM | PCjr first ROM cartridge 832k D0000-D7FFF 32k IBM Cluster Adapter | address area. DA000 voice communications | 848k D4000-D7FFF | Common expanded memory board 864k D8000-DBFFF | paging area. 880k DC000-DFFFF | E0000 ***** 64k *************** expansion ROM | PCjr second ROM 896k E0000-E3FFF | cartridge address 912k E4000-E7FFF | area 928k E8000-EBFFF | 944k EC000-EFFFF | F0000 ***** 64k *************** system | PCjr optional ROM 960k F0000-F3FFF reserved by IBM | cartridge address 976k F4000- | area (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 F000:FFF5 BIOS release date F000:FFFE PC model identification 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) PC Port Assignment, Intel 8088, 80C88, 8086, 80286, 80386 CPUs hex addr. Function 0000-000F 8237 DMA controller 0010-001F 8237 DMA controller (AT, PS/2) 0020-0027 8259A interrupt controller 0020-003F 8259A interrupt controller (AT) 0040-005F 8253-5 programmable timers (note: 0041 was memory refresh in PCs. Not used in PS/2) 0060-0067 8255 peripheral interface 0060-006F 8042 keyboard controller (AT) 0200-020F game-control adapter 0210-0217 expansion box (PC, XT) 0278-027F LPT3 02F8-02FF COM2 0300-031F prototype card 0320-032F hard disk controller 0378-037F LPT2 03BC-03BF LPT1 03D0-03DF CGA, MCGA, VGA adapter control 03F0-03F7 floppy disk controller 03F8-03FF COM1 note: These are functions common across the IBM range. The PCjr, 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. Reserved Memory Locations in the IBM PC addr. size description 000h-3FFh DOS interrupt vector table 30:00h- used as a stack area during POST and bootstrap routines. This 3F:FFh stack area may be revectored by an application program. The BIOS Data Area addr. from 400h to 4FFh 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 COM??.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 1 if floppy drive present (see bits 6&7) 0 if not 1 1 if 80x87 installed (not valid in PCjr) 2,3 system board RAM (not used on AT or PS/2) 00 16k 01 32k 10 48k 11 64k 4,5 initial video mode 00 no video adapter 01 40 column color (PCjr) 10 80 column color 11 MDA 6,7 number of diskette drives 00 1 drive 01 2 drives 10 3 drives 11 4 drives 8 0 DMA present 1 DMA not present (PCjr) 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". 2) CMOS RAM map, PC/AT: offset contents 00h Seconds 01h Second Alarm 02h Minutes 03h Minute Alarm 04h Hours 05h Hour Alarm 06h Day of the Week 07h Day of the Month 08h Month 09h Year 0Ah Status Register A 0Bh Status Register B 0Ch Status Register C 0Dh Status Register D 0Eh Diagnostic Status Byte 0Fh Shutdown Status Byte 10h Disk Drive Type for Drives A: and B: The drive-type bytes use bits 0:3 for the first drive and 4:7 for the other Disk drive types: 00h no drive present 01h double sided 360k 02h high capacity (1.2 meg) 03h-0Fh reserved 11h (AT):Reserved (PS/2):drive type for hard disk C: 12h (PS/2):drive type for hard disk D: (AT, XT/286):hard disk type for drives C: and D: Format of drive-type entry for AT, XT/286: 0 number of cyls in drive (0-1023 allowed) 2 number of heads per drive (0-15 allowed) 3 starting reduced write compensation (not used on AT) 5 starting cylinder for write compensation 7 max. ECC data burst length, XT only 8 control byte Bit 7 disable disk-access retries 6 disable ECC retries 5-4 reserved, set to zero 3 more than 8 heads 2-0 drive option on XT (not used by AT) 9 timeout value for XT (not used by AT) 12 landing zone cylinder number 14 number of sectors per track (default 17, 0-17 allowed) 13h Reserved 14h Equipment Byte (corresponds to sw. 1 on PC and XT) 15h-16h Base Memory Size (low,high) 17h-18h Expansion Memory Size (low,high) 19h-20h Reserved (PS/2) POS information Model 50 (60 and 80 use a 2k CMOS RAM that is not accessible through software) 21h-2Dh Reserved (not checksumed) 2Eh-2Fh Checksum of Bytes 10 Through 20 (low,high) 30h-31h Exp. Memory Size as Det. by POST (low,high) 32h Date Century Byte 33h Information Flags (set during power-on) 34h-3Fh Reserved 3) The alarm function is used to drive the BIOS wait function (int 15h function 90h). 4) To access the configuration RAM write the byte address (00-3Fh) you need to access to I/O port 70h, then access the data via I/O port 71h. 5) CMOS RAM chip is a Motorola 146818 6) The equipment byte is used to determine the configuration for the power-on diagnostics. 7) Bytes 00-0Dh are defined by the chip for timing functions, bytes 0Eh-3Fh are defined by IBM. 40:12 byte number of errors detected by infrared keyboard link (PCjr only) 40:13 word availible memory size in Kbytes (less display RAM in PCjr) this is the value returned by int 12h 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 7 1, write in progress 3 1, D: motor on (floppy 3) 6 2 1, C: motor on (floppy 2) 5 1 1, B: motor on 4 0 1, A: motor on 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 bit 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 status 40:49 byte 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 resolution 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 (1234 = soft reset, memory check will be bypassed) PCjr keeps 1234h here for softboot when a cartridge is installed 40:74 byte status of last hard disk operation; PCjr special diskette control 40:75 byte # of hard disks attached (0-2) ; PCjr special diskette control 40:76 byte hd control byte; temporary holding area for 6th param table entry 40:77 byte port offset to current hd adapter ; PCjr special diskette control 40:78 4 bytes timeout value for LPT1,LPT2,LPT3,LPT4 40:7C 4 bytes timeout value for COM1,COM2,COM3,COM4 (0-FFh seconds, 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 40:84 byte rows on the screen (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 char to repeat 40:86 2 bytes (PCjr only) typamatic initial delay 40:87 byte mode options (EGA only) Bit 1 0 = EGA is connected to a color display 1 = EGA is monochrome. Bit 3 0 = EGA is the active display, 1 = "other" display is active. 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 40:88 byte feature bit switches (EGA only) 0=on, 1=off bit 3 = switch 4 bit 2 = switch 3 bit 1 = switch 2 bit 0 = switch 1 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 (horiz.synch) used by ctrl-alt-cursor screen positioning routine in ROM 40:8A byte PCjrCRT/CPU Page Register Image, default 3Fh 40:8B byte last diskette data rate selected 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 int) 40:90 4 bytes media state drive 0, 1, 2, 3 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 pointer to users wait flag 40:9C dword users timeout value in microseconds 40:A0 byte real time clock wait function in use 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 EGA pointer to parameter table 40:B4 byte keyboard NMI control flags (Convertible) 40:B5 dword keyboard break pending flags (Convertible) 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 40:90-40:EF reserved by IBM 04:F0 16 bytes Intra-Application Communications Area (for use by applications 04:FF to transfer data or parameters to each other) 05:00 byte DOS print screen status flag 00h not active or successful completion 01h print screen in progress 0FFh error during print screen operation 05:01 Used by BASIC 05:02-03 PCjr POST and diagnostics work area 05:04 byte Single drive mode status byte 00 logical drive A 01 logical drive B 05:05-0E PCjr POST and diagnostics work area 05:0F BASIC: SHELL flag (set to 02h if there is a current SHELL) 05:10 word BASIC: segment address storage (set with DEF SEG) 05:12 4 bytes BASIC: int 1Ch clock interrupt vector segment:offset storage 05:16 4 bytes BASIC: int 23h ctrl-break interrupt segment:offset storage 05:1A 4 bytes BASIC: int 24h disk error interrupt vector segment:offset storage 05:1B-1F Used by BASIC for dynamic storage 05:20-21 Used by DOS for dynamic storage 05:22-2C Used by DOS for diskette parameter table. See int 1Eh for values 05:30-33 Used by MODE command 05:34-FF Unknown - Reserved for DOS At Absolute Addresses: 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:FFF5 BIOS release date F000:FFFE PC model identification date model byte submodel byte revision 04/24/81 FF = PC-0 (16k) -- -- 10/19/81 FF = PC-1 (64k) -- -- 08/16/82 FF = PC, XT, XT/370 -- -- (256k motherboard) 10/27/82 FF = PC, XT, XT/370 -- -- (256k motherboard) 11/08/82 FE = XT, Portable PC -- -- XT/370, 3270PC 01/10/86 FB = XT 00 01 01/10/86 FB = XT-2 (early) 05/09/86 FB = XT-2 (640k) 00 02 06/01/83 FD = PCjr -- -- 01/10/84 FC = AT -- -- 06/10/85 FC = AT 00 01 11/15/85 FC = AT 01 00 04/21/86 FC = XT/286 02 00 09/13/85 F9 = Convertible 00 00 09/02/86 FA = PS/2 Model 30 00 00 11/15/86 FC = AT, Enhanced 8mHz 02/13/87 FC = PS/2 Model 50 04 00 02/13/87 FC = PS/2 Model 60 05 00 1987 F8 = PS/2 Model 80 00 00 2D = Compaq PC (4.77) -- -- 9A = Compaq Plus (XT) -- -- 00FC 7531/2 Industrial AT 06FC 7552 Gearbox The IBM PC System Interrupts (Overview) The interrupt table is stored in the very lowest location in memory, starting at 0000:0000h. The locations are offset from segment 0, ie location 0000h has the address for int 0, etc. Each address is four bytes long and its 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. Interrupt Address Function Number (Hex) 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 Resident BASIC 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 40-43 100-115 BIOS Reserved for BIOS 44 116-119 BIOS First 128 Graphics Characters 45-47 120-131 BIOS Reserved for BIOS 48 132-135 BIOS PCjr Cordless Keyboard Translation 49 136-139 BIOS PCjr Non-Keyboard Scancode Translation Table 50-5F 140-17F BIOS Reserved for BIOS 60-67 180-19F Reserved for User Software Interrupts 68-7F 1A0-1FF Reserved by IBM 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 For consistency in this volume, 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. The IBM-PC System Interrupts (in detail) Interrupt 00h Divide by Zero (processor error). Automatically called at end (0:0000h) of DIV or IDIV operation that results in error. Normally set by DOS to display an error message and abort the program. Interrupt 01h Single step - Taken after every instruction when CPU Trap Flag (0:0004h) 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 - Vector not disabled via CLI. Used by (0:0008h) parity check routine in POST, 8087 coprocessor, PCjr infrared keyboard link. Interrupt 03h Breakpoint - Taken when CPU executes the 1-byte int 3 (0CCh). (0:000Ch) Generated by opcode 0CCh. Similar to 8080's RST instruction. Generally used to set breakpoints for DEBUG. Interrupt 04h Divide overflow - Generated by INTO instruction if OF flag is (0:0010h) set. If flag is not set, 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 - service dumps the screen to the printer. Invoked (0:0014h) by int 9 for shifted key 55 (PrtSc). Automatically called by keyboard scan when PrtSc key is pressed. Normally executes routine to print the screen, but may call any routine that can safely be executed from inside the keyboard scanner. Status and result byte are at address 0050:0000. 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 Interrupt 06h Reserved by IBM (0:0018h) Interrupt 07h Reserved by IBM (0:00C0h) Interrupt 08h Timer - 55ms timer "tick" taken 18.2 times per second. Updates (0:0020h) (IRQ0) BIOS clock and turns off diskette drive motors after 2 seconds of inactivity. 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 note Int 1Ch invoked as a user interrupt. Interrupt 09h Keyboard - taken whenever a key is pressed or released. (0:0024h) (IRQ1) Stores characters/scan-codes in status at [0040:0017,18] 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 Interrupt 0Ah EGA Vertical Retrace (0:0028h) (IRQ2) used by EGA vertical retrace, hard disk Interrupt 0Bh Communications Controller (serial port) hdw. entry (0:002Ch) (IRQ3) Serial Port 2 (com2) note IRQ 3 may be used by SDLC (synchronous data-link control) or bisynchronous communications cards instead of a serial port. Interrupt 0Ch Communications Controller (serial port) hdw. entry (0:0030h) (IRQ4) Serial Port 1 (com1) note IRQ 4 may be used by SDLC (synchronous data-link control) or bisynchronous communications cards instead of a serial port. Interrupt 0Dh Alternate Printer, PC/AT 80287 (0:0034h) (IRQ5) used by hard disk, 60 Hz RAM refresh, LPT2 on AT, XT/286, and PS/2, dummy CRT vertical retrace on PCjr Interrupt 0Eh Diskette - indicates that a seek is in progress (0:0038h) (IRQ6) (sets bit 8 of 40:3E) Interrupt 0Fh Reserved by IBM (0:003Ch) (IRQ7) IRQ7 used by PPI interrupt (LPT1, LPT2)