BIOS Data Area
Aus Lowlevel
In der BIOS Data Area (Abkürzung: BDA) werden wichtige Informationen über Hardware und andere Systemkomponenten gespeichert.
Inhaltsverzeichnis |
Aufbau der BIOS Data Area
Die BDA befindet sich im Segment 0x0040, d.h. an der physikalischen Adresse 0x0400. Die folgende Tabelle zeigt den Aufbau dieses Segments:
| Offset | Größe (Bytes) | Beschreibung |
|---|---|---|
| 0x00 | 2 | I/O-Port von COM1 |
| 0x02 | 2 | I/O-Port von COM2 |
| 0x04 | 2 | I/O-Port von COM3 |
| 0x06 | 2 | I/O-Port von COM4 |
| 0x08 | 2 | I/O-Port von LP1 |
| 0x0A | 2 | I/O-Port von LP2 |
| 0x0C | 2 | I/O-Port von LP3 |
| 0x0E | 2 | I/O-Port von LP4 oder Segment der EBDA (bei PS/2) |
| 0x10 | 2 | Equipment word |
| 0x12 | 1 | Manufacturing test data |
| 0x13 | 2 | Speichergröße (in kB) |
| 0x15 | 2 | Manufacturing test data |
| 0x17 | 2 | Tastatur-Status-Flags |
| 0x19 | 1 | Alt+Numpad-Data |
| 0x1A | 2 | Zeiger auf nächsten Buchstaben im Tastatur-Ringpuffer |
| 0x1C | 2 | Zeiger auf letzten Buchstaben im Tastatur-Ringpuffer |
| 0x1E | 32 | Tastatur-Ringpuffer |
| 0x3E | 11 | Disk-Kontroller-Informationen |
| 0x49 | 30 | Grafik-Adapter-Informationen |
| 0x67 | 5 | Unbekannt |
| 0x6C | 4 | Zähler für Interrupt 0x1A |
| 0x70 | 1 | Zähler 24h Überlauf |
| 0x71 | 1 | Keyboard-Control-Break-Flag |
| 0x72 | 2 | Soft-Reset-Flag |
| 0x74 | 4 | Disk-Kontroller-Informationen |
| 0x78 | 4 | LP-Timout-Werte |
| 0x7C | 4 | COM-Timout-Werte |
| 0x80 | 2 | Start des PS/2-Keyboard-Buffers |
| 0x82 | 2 | Ende des PS/2-Keyboard-Buffers |
| 0x84 | 7 | Grafik-Controller-Informationen |
| 0x8B | 13 | Disk-Controller-Informationen |
| 0x96 | 2 | Keyboard-Status-Flag |
| 0x98 | 4 | Zeiger auf Benutzer-Flag |
| 0x9C | 4 | Benutzer-Warte-Zähler |
| 0xA0 | 1 | Benutzer-Warte-Flag |
| 0xA1 | 7 | Reseviert für Netzwerk-Adapter |
| 0xA8 | 4 | Grafik-Adapter-Informationen |
| 0xAC | 68 | Reserviert |
| 0xF0 | 16 | Inter-Application-Kommunikations-Bereich |
Equipment word
| Bits | Beschreibung |
|---|---|
| 15-14 | 00b = 1 Parallelport vorhanden 01b = 2 Parallelports vorhanden 03b = 3 Parallelports vorhanden |
| 13 | 01b = internes Modem vorhanden |
| 12 | 01b = Joystick vorhanden |
| 11-9 | Anzahl der vorhandenen COM-Ports 0-4 |
| 8 | DMA-Controller vorhanden (PC-junior) |
| 7-6 | 00b = 1 Floppylaufwerk vorhanden 01b = 2 Floppylaufwerke vorhanden |
| 5-4 | 00b = EGA oder älter 01b = Farbe 40x25 10b = Farbe 80x25 11b = Monochrom 80x25 |
| 3 | Reserviert |
| 2 | Ob eine PS/2-Maus vorhanden ist |
| 1 | Ob ein mathematischer Koprozessor vorhanden ist |
| 0 | Ob ein Bootfloppy-Laufwerk vorhanden ist |
Tastatur-Status-Flags
Hier werden die Tastatur-Flags gespeichert welche vom Interrupt 0x16 verwendet werden.
Byte 1 (0x17):
| Bits | Beschreibung |
|---|---|
| 7 | 0 = Einfügen ausgeschaltet 1 = Einfügen angeschaltet |
| 6 | 0 = CapsLock aus 1 = CapsLock an |
| 5 | 0 = NumLock aus 1 = NumLock an |
| 4 | 0 = ScrollLock aus 1 = ScrollLock an |
| 3 | 0 = Alt nicht gedrückt 1 = Alt gedrückt |
| 2 | 0 = Strg nicht gedrückt 1 = Strg gedrückt |
| 1 | 0 = LShift nicht gedrückt 1 = LShift gedrückt |
| 0 | 0 = RShift nicht gedrückt 1 = RShift gedrückt |
Byte 2 (0x18):
| Bits | Beschreibung |
|---|---|
| 7 | 0 = Einfügen nicht gedrückt 1 = Einfügen gedrückt |
| 6 | 0 = CapsLock nicht gedrückt 1 = CapsLock gedrückt |
| 5 | 0 = NumLock nicht gedrückt 1 = NumLock gedrückt |
| 4 | 0 = ScrollLock nicht gedrückt 1 = ScrollLock gedrückt |
| 3 | 0 = Pause-Taste inaktiv 1 = Pause-Taste aktiv |
| 2 | 0 = SysReg-Key (?) nicht gedrückt 1 = SysReg-Key gedrückt |
| 1 | 0 = Linkes Alt nicht gedrückt 1 = Linkes Alt gedrückt |
| 0 | 0 = Rechtes Alt nicht gedrückt 1 = Rechtes Alt gedrückt |
Disk-Kontroller-Informationen
Byte 1 (0x3E): Floppy-Kalibrations-Status
| Bits | Beschreibung |
|---|---|
| 7-4 | Reserviert |
| 3 | Ob Floppy-Laufwerk 4 kalibriert ist (PC, XT) |
| 2 | Ob Floppy-Laufwerk 3 kalibriert ist (PC, XT) |
| 1 | Ob Floppy-Laufwerk 2 kalibriert ist |
| 0 | Ob Floppy-Laufwerk 1 kalibriert ist |
Byte 2 (0x3F): Floppy-Motor-Status
| Bits | Beschreibung |
|---|---|
| 7 | 0b = Read- oder Verify-Operation 1b Write- oder Format-Operation |
| 6 | Unbenutzt |
| 5-4 | 00b = Laufwerk 1 01b = Laufwerk 2 10b = Laufwerk 3 (PC, XT) 11b = Laufwerk 4 (PC, XT) |
| 3 | Ob der Motor des Laufwerks 1 eingeschaltet ist |
| 2 | Ob der Motor des Laufwerks 2 eingeschaltet ist |
| 1 | Ob der Motor des Laufwerks 3 eingeschaltet ist |
| 0 | Ob der Motor des Laufwerks 4 eingeschaltet ist |
Byte 3 (0x40):
Floppy-Motor-Timeout
Byte 4 (0x41):
Floppy-Laufwerk-Status
| Bit | Beschreibung |
|---|---|
| 7 | Ob Laufwerk bereit ist |
| 6 | Ob ein Seek-Fehler aufgetreten ist |
| 5 | Ob Floppy-Controller-Test erfolgreich war |
| 4-0 | Error-Code |
Error-Codes
| Binär | Hexadezimal | Beschreibung |
|---|---|---|
| 00000b | 0x00 | Kein Fehler |
| 00001b | 0x01 | Ungültige Funktion |
| 00010b | 0x02 | Adresszeichen nicht gefunden |
| 00011b | 0x03 | Schreibschutzfehler |
| 00100b | 0x04 | Sektor nicht gefunden |
| 00110b | 0x06 | Disketten-Changelink aktiv |
| 01000b | 0x08 | DMA-Überlauf |
| 01001b | 0x09 | DMA-Boundary-Fehler |
| 01100b | 0x0C | Unbekannter Medientyp |
| 10000b | 0x10 | CRC-Fehler während Lesen |
Byte 5 (0x42): Festplatten- und Floppystatus
| Bits | Beschreibung |
|---|---|
| 7-6 | Interrupt-Code 00b = Befehl normal abgeschlossen 01b = Befehl unnormal beendet 10b = Unnormales Beenden, Readline aktiv oder Diskette verändert 11b = Seek-Befehl nicht abgeschlossen |
| 5 | Ob Seek abgeschlossen wurde |
| 4 | Drive-Fault |
| 3 | Ob das Laufwerk bereit ist |
| 2 | Kopf-Status |
| 1-0 | 00b = Laufwerk 1 01b = Laufwerk 2 10b = Laufwerk 3 11b = Laufwerk 4 |
Byte 6 (0x43): Floppy Statusregister 1
| Bits | Beschreibung |
|---|---|
| 7 | Versuchter Zugriff jenseits des letzten Zylinders |
| 6 | Unbenutzt |
| 5 | CRC-Fehler während Lesen |
| 4 | DMA-Überlauf |
| 3 | Unbenutzt |
| 2 | Sektor nicht gefunden oder lesen der Disketten-ID fehlgeschlagen |
| 1 | Medium schreibgeschützt |
| 0 | fehlendes Adresszeichen |
Byte 7 (0x44): Floppy Statusregister 2
| Bits | Beschreibung |
|---|---|
| 7 | Unbenutzt |
| 6 | gelöschtes Daten-Adresszeichen |
| 5 | CRC-Fehler festgestellt |
| 4 | Falsche Zylinder |
| 3 | Gleichheitsbedingungen während Verify |
| 2 | Sektor nicht gefunden während Verify |
| 1 | Ungültiger Zylinder |
| 0 | Adresszeichen nicht gefunden während Lesen |
Byte 8 (0x45): Floppy Zylindernummer
Byte 9 (0x46): Floppy Kopfnummer
Byte 10 (0x47): Floppy Sektornummer
Byte 11 (0x48): Anzahl geschriebener Bytes
