BIOS Data Area

Aus Lowlevel
(Weitergeleitet von BDA)
Wechseln zu:Navigation, Suche

In der BIOS Data Area (BDA) speichert das BIOS Informationen über Hardware und andere Systemkomponenten.


Aufbau der BIOS Data Area

Die BDA befindet sich im Segment 0x0040, d.h. an der physischen Adresse 0x0400. Die für ein im Protected Mode bzw. Long Mode laufendes Betriebssystem interessanten Teile sind fett hervorgehoben, um Anfängern unnötige Arbeit zu ersparen. Alle anderen Informationen sind fehlerbehaftet, veraltet oder können anderweitig sinnvoller erfasst werden. Die folgende Tabelle zeigt den Aufbau dieses Segments:


Offset Größe (Bytes) Beschreibung
0x00 2 Basisadresse des I/O-Ports von COM1
0x02 2 Basisadresse des I/O-Ports von COM2
0x04 2 Basisadresse des I/O-Ports von COM3
0x06 2 Basisadresse des I/O-Ports von COM4
0x08 2 Basisadresse des I/O-Ports von LPT1
0x0A 2 Basisadresse des I/O-Ports von LPT2
0x0C 2 Basisadresse des I/O-Ports von LPT3
0x0E 2 Basisadresse des I/O-Ports von LPT4 oder
Segment der EBDA (bei PS/2)
0x10 2 Equipment Word
0x12 1 POST Status
0x13 2 Größe des konventionellen Speichers (in kB)
0x15 2 POST System Flag
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 4 Sprungadresse (Far Pointer) nach einem CPU-Reset (prä-AT: inkl. 0x6B diverse Informationen zum Kassettenlaufwerk)
0x6B 1 In AT und neuer ungenutzt. Siehe 0x67.
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 LPT-Timeout-Werte
0x7C 4 COM-Timeout-Werte
0x80 2 Start des PS/2-Keyboard-Buffers
0x82 2 Ende des PS/2-Keyboard-Buffers
0x84 7 Grafik-Controller-Informationen
0x8B 11 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 Anzahl der vorhandenen LPT-Ports
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 neuer
01b = CGA 40x25
10b = CGA 80x25
11b = MDA-kompatibel 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


Grafik-Adapter-Informationen

Offset Größe (Bytes) Beschreibung
0x49 1 Aktueller Videomodus ([1])
0x4A 2 Anzahl Spalten
0x4C 2 Größe einer Bildschirmseite im Regenerate Buffer
0x4E 2 Adresse der aktuellen Seite im Regenerate Buffer
0x50 16 Cursorpositionen für die Seiten 0-7, abwechselnd Spalte und Zeile
0x60 2 Cursortyp
0x62 1 Aktuelle Bildschirmseite
0x63 2 I/O-Basisadresse des Grafikadapters
0x65 1 Inhalt des Mode Select Registers
0x66 1 Inhalt des CGA Palette Registers

Weblinks