In der '''BIOS Data Area''' (Abkürzung: '''BDA''') werden wichtige Informationen über Hardware und andere Systemkomponenten gespeichert.
==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:
{| border="1"
! Offset || Größe (Bytes) || Beschreibung
|-
| 0x00 || 2 || I/O-Port von [[Serielle Schnittstelle | COM1]]
|-
| 0x02 || 2 || I/O-Port von [[Serielle Schnittstelle | COM2]]
|-
| 0x04 || 2 || I/O-Port von [[Serielle Schnittstelle | COM3]]
|-
| 0x06 || 2 || I/O-Port von [[Serielle Schnittstelle | 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 | Equipment word]]
|-
| 0x12 || 1 || Manufacturing test data
|-
| 0x13 || 2 || Speichergröße (in kB)
|-
| 0x15 || 2 || Manufacturing test data
|-
| 0x17 || 2 || [[#Tastatur-Status-Flags | 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 | 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 ===
{| border="1"
! 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 [[Serielle Schnittstelle | COM-Ports]] 0-4
|-
| 8 || [[Direct Memory Access | 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):
{| border="1"
! 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):
{| border="1"
! 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
{| border="1"
! 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
{| border="1"
! 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
{| border="1"
! 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
{| border="1"
! 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
{| border="1"
! 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
{| border="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
{| border="1"
! 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
==Weblinks==
* http://bioscentral.com/misc/bda.htm
* http://www.geocities.com/riskyfriends/x86/os/bios.html
[[Category:Glossar]]