Files
Foundry-Boot/doc/bios_interrupts.md
2025-02-25 01:14:52 +00:00

78 lines
2.2 KiB
Markdown

# BIOS Interrupt Vector Table (IVT)
## Overview
The BIOS Interrupt Vector Table (IVT) is a crucial data structure in real mode that maps interrupt numbers to their handler routines. It is located at the very beginning of memory, starting at physical address 0x0000:0x0000.
## Structure
- The IVT contains 256 entries (0x00 to 0xFF)
- Each entry is 4 bytes long:
- 2 bytes for the offset
- 2 bytes for the segment
- Total size: 256 * 4 = 1024 bytes (0x400)
```
Memory Layout:
0x0000:0x0000 - Int 0x00 vector (Divide by zero)
0x0000:0x0004 - Int 0x01 vector (Single step)
0x0000:0x0008 - Int 0x02 vector (NMI)
...
0x0000:0x0040 - Int 0x10 vector (Video services)
...
0x0000:0x03FC - Int 0xFF vector (Last vector)
```
## Common BIOS Interrupts
- **Int 0x10**: Video Services
- AH=0x00: Set video mode
- AH=0x0E: Write character in TTY mode
- AH=0x13: Write string
- **Int 0x13**: Disk Services
- AH=0x00: Reset disk system
- AH=0x02: Read sectors
- AH=0x03: Write sectors
- AH=0x41: Check extensions present
- AH=0x42: Extended read sectors
- AH=0x43: Extended write sectors
- **Int 0x16**: Keyboard Services
- AH=0x00: Read keystroke
- AH=0x01: Check for keystroke
## How It Works
1. When an interrupt occurs (via hardware or `int` instruction):
- CPU pushes FLAGS, CS, and IP onto stack
- CPU disables further interrupts
- CPU looks up handler address in IVT
- CPU jumps to handler address
2. Example of int 0x10 call:
```nasm
mov ah, 0x0E ; TTY output function
mov al, 'A' ; Character to print
int 0x10 ; Call BIOS video interrupt
```
3. The BIOS handler:
- Receives control
- Reads parameters from registers
- Performs requested operation
- Returns via IRET instruction
## Important Notes
1. BIOS interrupts are only available in real mode
2. When transitioning to protected mode:
- BIOS interrupts become unavailable
- Must set up new Interrupt Descriptor Table (IDT)
- Must provide own interrupt handlers
3. Some BIOS operations require interrupts to be enabled:
- Disk I/O (int 0x13)
- Keyboard input (int 0x16)
- Some video operations (int 0x10)
4. Memory Map Considerations:
- IVT: 0x0000 - 0x03FF
- BIOS Data Area: 0x0400 - 0x04FF
- Your code should not overwrite these areas