Inhaltsverzeichnis

Assembler: Interrupts

WRITEME noch nicht ganz vollständig

Ein Interrupt ist ein Unterbrechung eines Programms durch eine CPU-Funktion, (Interrupt Service Routine, ISR, Unterbrechungsroutine). Anschließend wird die Ausführung des Programmes an der Unterbrechungsstelle fortgesetzt. Interrupts können durch Programme oder durch Hardware Komponenten ausgelöst werden.
Interrupts werden zB. benötigt um auf Ein-/Ausgabe-Signale (z. B. Tastatur, Maus, Festplatte, Netzwerk usw.) oder Zeitgebern (Timern) zu reagieren. Sie dienen also dazu laufende Prozesse zu unterbrechen damit der CPU auf Aktionen reagieren kann. Auch Multitasking wäre ohne Interrupts nicht möglich, da Tasks nicht mehr unterbrochen und umgeschaltet werden könnten.
Unter DOS wurden Interrupts sehr häufig für diverse Aktionen eingesetzt, unter einem höheren Betriebsystem übernimmt dieses in der Regel das Management der meisten Hardware Ein-/Ausgabe Aktionen und Interrupts werden nur noch selten für spezielle Zweck benötigt.

Interrupt-Tabelle

Num Adresse Belegung
00h 000h - 003h CPU: Division durch Null
01h 004h - 007h CPU: Einzelschritt
02h 008h - 00Bh CPU: NMI (RAM-Fehler)
03h 00Ch - 00Fh CPU: Breakpoint erreicht
04h 010h - 013h CPU: numerischer Überlauf
05h 014h - 017h Hardcopy
06h 018h - 01Bh unbekannte Funktion (nur 286)
07h 01Ch - 01Fh reserviert
08h 020h - 023h IRQ0: Timer
09h 024h - 027h IRQ1: Tastatur
0Ah 028h - 02Bh IRQ2: 2. Interrupt-Controller
0Bh 02Ch - 02Fh IRQ3: serielle Schnittstelle 2
0Ch 030h - 033h IRQ4: serielle Schnittstelle 1
0Dh 024h - 037h IRQ5: Festplatte
0Eh 038h - 03Bh IRQ6: Diskette
0Fh 03Ch - 03Fh IRQ7: Drucker
10h 040h - 043h BIOS: Video-Funktionen
11h 044h - 047h BIOS: Konfiguration ermitteln
12h 048h - 04Bh BIOS: RAM-Speichergröße ermitteln
13h 04Ch - 04Fh BIOS: Disketten/Festplatten-Funktionen
14h 050h - 053h BIOS: Zugriff auf serielle Schnittstelle
15h 054h - 057h BIOS: (Kassettenrecorder) erweiterte Funktionen
16h 058h - 05Bh BIOS: Tastaturabfrage
17h 05Ch - 05Fh BIOS: Zugriff auf parallelen Drucker
18h 060h - 063h Aufruf des ROM-BASIC
19h 064h - 067h BIOS: System booten
1Ah 068h - 06Bh BIOS: Zeit/Datum abfragen
1Bh 06Ch - 06Fh Break-Taste (nicht CTRL-C) gedrückt
1Ch 070h - 073h Timer, wird nach jedem INT 08 aufgerufen
1Dh 047h - 077h Adresse der Video-Parameter-Tabelle
1Eh 078h - 07Bh Adresse der Disketten-Parameter-Tabelle
1Fh 07Ch - 07Fh Adresse der Zeichen-Bitmuster
20h 080h - 083h DOS: Programm beenden
21h 084h - 087h DOS: Dos-Funktion aufrufen
22h 088h - 08Bh Adresse der Dos-Prog.-Ende-Routine
23h 08Ch - 08Fh Adresse der Dos-CTRL-BREAK-Routine
24h 090h - 093h Adresse der Dos-Fehler-Routine
25h 094h - 097h DOS: Diskette/Festplatte lesen
26h 098h - 09Bh DOS: Diskette/Festplatte schreiben
27h 09Ch - 09Fh DOS: Prog. beenden - resident bleiben
28h 0A0h - 0A3h DOS: Dos ist unbeschäftigt
29-2Eh 0A4h ... 0BBh DOS: reserviert
2Fh 0BCh - 0BFh DOS: Multiplexer
30-32h 0C0h ... 0CBh DOS: reserviert
33h 0CCh - 0CFh Funktionen des Maustreibers
34-40h 0D0h ... 0FFh DOS:reserviert
41h 104h - 107h Adresse der Festplatten-Tabelle 1
42-46h 108h ... 117h reserviert
47-49h 11Ch ... 127h frei: können von Programmen belegt werden
4Ah 128h - 12Bh Alarm-Zeit erreicht (nur AT)
4B-5Bh 12Ch ... 16Fh frei: können von Programmen belegt werden
5Ch 170h - 173h Funktionen des NETBIOS
5D-66h 174h ... 19Bh frei: können von Programmen belegt werden
67h 19Ch - 19Fh Funktionen des EMS-Speichermanagers
68-6Fh 1A0h ... 1BFh frei: können von Programmen belegt werden
70h 1C0h - 1C3h IRQ8: Echtzeituhr (nur AT)
71h 1C4h - 1C7h IRQ9: (nur AT)
72h 1C8h - 1CBh IRQ10: (nur AT)
73h 1CCh - 1CFh IRQ11: (nur AT)
74h 1D0h - 1D3h IRQ12: (nur AT)
75h 1D4h - 1D7h IRQ13: 80287 NMI (nur AT)
76h 1D8h - 1DBh IRQ14: Festplatte (nur AT)
77h 1DCh - 1DFh IRQ15: (nur AT)
78-7Fh 1E0h ... 1FFh werden nicht genutzt
80-F0h 200h ... 3C3h werden innerhalb des BASIC-Interpreters genutzt
F1-FFh 3C4h ... 3CFh werden nicht genutzt

Videointerrupt (Interrupt 10h)

Funktionen des Videointerrupts 10h

Funktion Bedeutung und Eingabe Ausgabe und Kommentar
00h Video-Modus setzen
AL: Modusnummer
keine
Videomodi siehe nächste Tabelle
01h Cursorgröße einstellen
CH: Startzeile
CL: Endzeile
keine
Bei VGA-Karten nur im Bereich von 00h bis 0Dh
02h Cursor positionieren
BH: Videoseite
DL: Cursorspalte
DH: Cursorzeile
keine
Die Zählung beginnt in der linken oberen Ecke mit 0,0
Bei Werten oberhalb der eigentlich möglichen kann der Cursor verschwinden
03h Cursorposition und Größe lesen
BH: Videoseite
DL: aktuelle Spalte
DH: aktuelle Zeile
CH: Startzeile
CL: Endzeile
04h Lichtgriffel lesen AH: Erfolgskennzeichen (00h=kein Lichtgriffel, 01h=Griffel angeschlossen
DL: Textspalte Lichtgriffel
DH: Textzeile Lichtgriffel
BX: Grafikspalte Lichtgriffel
CH: Grafikzeile Lichtgriffel
05h Videoseite wählen
AL: Seitennummer
keine
Die Videoseitenzählung beginnt bei 0 (Null)
Standardmäßig ist Seite 0 eingeblendet
06h Aufwärts rollen
AL: Anzahl Zeilen
CL: Spalte oben links
CH: Zeile oben links
DL: Spalte unten rechts
DH: Zeile unten rechts
BH: Attribut
keine
Innerhalb des gewählten Fensters werden die Zeilen nach oben verschoben. Für jede Zeile, die oben aus diesem Bereich verschwindet wird unten eine leere Zeile eingefügt. Das Attribut bestimmt das Aussehen der neu hinzukommenden Zeilen. Wird für die Zeilenanzahl der Wert 0 (Null) gewählt, dann wird der Bereich gelöscht und entsprechend dem Attrubut eingefärbt
07h Abwärts rollen
AL: Anzahl Zeilen
CL: Spalte oben links
CH: Zeile oben links
DL: Spalte unten rechts
DH: Zeile unten rechts
BH: Attribut
keine
Innerhalb des gewählten Fensters werden die Zeilen nach unten verschoben. Für jede Zeile, die unten aus diesem Bereich verschwindet wird oben eine leere Zeile eingefügt. Das Attribut bestimmt das Aussehen der neu hinzukommenden Zeilen. Wird für die Zeilenanzahl der Wert 0 (Null) gewählt, dann wird der Bereich gelöscht und entsprechend dem Attribut eingefärbt
08h Zeichen an der aktuellen Position lesen
BH: Videoseite
AL: ASCII-Code des Zeichens
AH: Attribut des Zeichens
09h Zeichen und Attribut setzen
BH: Videoseite
AL: ASCII-Code des Zeichens
BL: Attribut
CX: Zeichenzahl
keine
Steuercodes werden angezeigt;
Cursorposition wird nicht verändert;
Zeichenzahl gibt an, wie oft das Zeichen geschrieben wird
0Ah Zeichen wiederholt setzen
BH: Videoseite
AL: ASCII-Code des Zeichens
CX: Zeichenzahl
keine
Steuercodes werden angezeigt
Cursorposition wird nicht verändert
0Bh Hintergrundfarbe setzen
BH: 00h
BL: Rahmen/Hintergrundfarbe
keine
0Bh Farpalette wählen
BH: 01h
BL: Palettennummer
keine
0Ch Pixel setzen
CX: Grafikspalte
DX: Grafikzeile
AL: Farbwert
keine
Farbwert gilt nur relativ innerhalb einer Palette, nicht absolut
0Dh Pixel lesen
BH: Videoseite
CX: Grafikspalte
DX: Grafikzeile
AL: Farbwert;
Wenn AL=00h dann hat der Punkt die Hintergrundfarbe, ist also gelöscht
0Eh Zeichen im TTY-Modus schreiben
BH: Videoseite (0 zeigt Grafik)
AL: ASCII-Code des Zeichens
BL: Vordergrundfarbe (nur Grafik)
keine
Steuercodes werden ausgeführt, es werden nur Zeichen geschrieben
0Fh Videostatus lesen AL: Videomodusnummer
AH: Anzahl Zeichen je Zeile
BH: aktuelle Videoseite
10h verändere Palette-Register
AL: 00h
BL: Plettennummer
BH: Videoseite
keine
10h Rahmenfarbe wählen
AL: 01h
BH: Farbwert
keine
10h alle Palettenregister und Rahmenfarbe setzen
AL: 02h
ES:DX: Adresse Parametertabelle
keine
10h Hintergrundintensität setzen
AL: 03h
BL: Intensitätsbit
keine
Wenn BL=1 dann gilt Attributbit 7 als Blinkbit, sonst HiColor
10h Palettenregister auslesen
AL: 07h
BL: Palettennumer
BH: Farbwert
10h Rahmenfarbe lesen
AL: 08h
BH: Rahmenfarbe
10h AL: 09h
ES:DX: Adresse einer 17-Byte-Parametertabelle
die ersten 16 Werte := Farbregistern, der 17. := Rahmenfarbe
10h DAC-Farbregister setzen
AL: 10h
BX: Registernummer
CL: Blauanteil
CH: Grünanteil
DH: Rotanteil
keine
10h mehrere DAC-Farbregister setzen
AL: 12h
BX: Nummer des ersten Farbregisters
CX: Registeranzahl
ES:DX: Adresse einer Parametertabelle
keine
Ausgehend vom ersten Register in BX werden CX Farbregister mit neuen Werten belegt
10h Internes Register setzen
AL: 13h
BL: Registerauswahl
BH: Wert für Register oder Bit
keine
10h DAC-Farbregister lesen
AL: 15h
BX: Registernummer
CL: Blauanteil
CH: Grünanteil
DH: Rotanteil
10h Mehrere DAC-Register lesen
AL: 17h
BX: Nummer des ersten Registers
CX: Registeranzahl
ES:DX: Adresse Parametertabelle
keine
10h DAC-Maskierungsregister setzen
AL: 18h
BL: neuer Wert
keine
10h DAC-Maskierungsregister lesen
AL: 19h
BL: Wert des Maskierungsregisters
10h Interne Register lesen
AL: 1Ah
BL: Bit 7 des Modus-Registers
BH: Bits des Farbauswahlregisters
10h Graustufen zuordnen
AL: 1Bh
BX: 1. Farbregister
CX: Anzahl Farbregister
keine
11h Lade Zeichensatz mit Reset
AL: 00h
BH: Byteanzahl je Zeichen
BL: Blocknummer
CX: Zeichenanzahl
DX: Videospeicheroffset
ES:BP: Adresse Zeichensatz
Blocknummer ist die Zahl, ab der der neue Zeichensatz den alten substituieren soll;
max 32 Bytes je Zeichen
11h Monochromzeichensatz mit Reset laden
AL: 01h
BL: Blocknummer
lädt den 9x14-Zeichensatz
11h 8x8-Zeichensatz mit Reset laden
AL: 02h
BL: Blocknummer
keine
11h Zeichensatz auswählen
AL: 03h
BL: Wert für Character-Map-Select-Register
Bits 5/3/2: Zeichensatz
Bits 4/1/0: Zeichensatz A
Bits 6/7: nicht belegt
11h 8x16-Zeichensatz mit Reset laden
AL: 04h
BL: Blocknummer
keine
11h Zeichensatz laden
AL: 10h
BH: Bytes je Zeichen
BL: Blocknummer
CX: Zeichenanzahl
ES:BP: Adresse Zeichensatz
keine
11h Monochrom-Zeichensatz setzen
AL: 11h
BL: Blocknummer
keine
11h 8x8-Zeichensatz setzen
AL: 12h
BL: Blocknummer
keine
11h 8x16-Zeichensatz setzen
AL: 14h
BL: Blocknummer
keine
11h Benutzerzeichensatz für Int 1Fh einrichten
AL: 20h
ES:BP: Adresse Zeichensatz
keine
Zeichensatzdefinition für Zeichen 128-255, nur Videomodi 4,5 und 6
11h Benutzerzeichensatz einrichten
AL: 21h
BL: Bildschirmzeilen
CX: Bytezahl je Zeichen
DL: Zeilenanzahl
ES:BP: Adresse Zeichensatz
keine
11h 8x14-Zeichensatz für Grafikmodus setzen
AL: 22h
BL: Zeilenzahl
DL: Anzahl Bildschirmseiten
keine
11h 8x8-Zeichensatz in doppelter Dichte setzen
AL: 23h
BL: Zeilenzahl
DL: Anzahl Bildschirmseiten
keine
11h 8x16-Zeichensatz für Grafikmodus setzen
AL: 24h
BL: Zeilenzahl
DL: Anzahl Bildschirmseiten
keine
11h Zeichensatzinformationen auslesen
AL: 30h
BH: Zeichensatz (Codierung siehe außerhalb der Tabelle)
CX: Byte je Zeichen
DL: Anzahl Bildschirmzeilen
ES:BP: Adresse Zeichensatz
12h Hardcopy-Routine festlegen
BL: 20h
AL: 00h
keine
12h Rasterzeilen festlegen
BL: 30h
AL: Rasterzeilenzahl
(Angabe: 0/1/2=2007350/400 Rasterzeilen)
AL: Fehlercode(12h=fehlerfrei)
12h Laden der Standardpalette erlauben/verbieten
BL: 31h
AL: 0/1 = erlauben/verhindern
AL: Fehlercode(12h=fehlerfrei)
12h Bildschirmzugriff ein/ausschalten
BL: 32h
AL: 0/1 = ein/aus
AL: Fehlercode(12h=fehlerfrei)
12h Graustufenumwandlung ein/ausschalten
BL: 33h
AL: 0/1 = ein/aus
AL: Fehlercode(12h=fehlerfrei)
12h Bildschirmumschaltung
BL: 35h
AL: Modus
schaltet zwischen 2 Grafikkarten um; nur PS/2
12h Monitor ein/ausschalten
BL: 36h
AL: 0/1 = ein/aus
AL: Fehlercode
13h Textstring ausgeben
AL: Ausgabemodus
BL: Zeichenattribut
CX: Stringlänge
DL: Textspalte
DH: Textzeile
BH: Videoseite
ES:BP: Adresse des Strings
Modus: 0=Attribut in BL, Cursorpos. nicht ändern
1=Attribut in BL, Cursorposition ändern
2=Attribut im String enthalten, Cursorpos. nicht ändern
3=Attribut im String enthalten, Cursorposition ändern
1Ah Grafikkarte ermitteln
AL: 00h
BL: aktive Grafikkarte
BH: passive Grafikkarte
1Ah aktuelle Grafikkarte setzen
AL: 01h
BL/BH: aktive/passive Grafikkarte
wenn korrekt verlaufen dann AL= 1AH
1Bh Video-BIOS-Informationen lesen
BX: 00h
ES:DI: Adresse eines 64-Byte-Puffers
wenn korrekt verlaufen dann AL=1Bh
1Ch Puffergröße für Zustandinformationen durch Unterfunktion 01h ermitteln
AL: 00h
CX: Bereich
(0=Hardwarestatus,
1=BIOS-Datenbereich,
2=DAC-Status)
AL: Fehlercode (1CH=kein Fehler)
BX: Puffergröße in Einheiten zu 64 Bytes
1Ch Zustand lesen
AL: 01h
CX: Bereich
ES:BX: Pufferadresse
AL: Fehlercode (1CH=kein Fehler)
1Ch Zustand setzen
AL: 02h
CX: Bereich
AL: Fehlercode (1CH=kein Fehler)


Grafikmodi

Video-Modus Auflösung Anzahl Farben Grafikkarten
00h Text (40x25) 2 CGA, EGA, MCGA, VGA
01h Text (40x25) 16 CGA, EGA, MCGA, VGA
02h Text (80x25) 2 CGA, EGA, MCGA, VGA
03h Text (80x25) 16 CGA, EGA, MCGA, VGA
04h Grafik (320x200) 2 CGA, EGA, MCGA, VGA
05h Grafik (320x200) 4 CGA, EGA, MCGA, VGA
06h Grafik (640x200) 2 CGA, EGA, MCGA, VGA
07h Text (80x25) 2 MDA, HERCULES
0Dh Grafik (320x200) 16 EGA, VGA
0Eh Grafik (640x200) 16 EGA, VGA
0Fh Grafik (640x350) 2 EGA, VGA
10h Grafik (640x350) 16 EGA, VGA
11h Grafik (640x480) 2 MCGA, VGA
12h Grafik (640x480) 16 VGA
13h Grafik (320x200) 256 MCGA, VGA


Paletten

Palette 0 Palette 1 Palette 2 Palette 3
Grün Türkis Hellgrün Helltürkis
Rot Magenta Hellrot Lila
Braun Hellgrau Gelb Weiß


Zeichensatzcodierung (Funktion 11h/30h)

Code Zeichensatz
00h Zeichensatz von Interrupt 1Fh
01h Zeichensatz von Interrupt 43h
02h 8x14 ROM-Zeichensatz
03h 8x8 ROM-Zeichensatz für ASCII 00h bis 79h
04h 8x8 ROM-Zeichensatz für ASCII 80h bis FFh
05h 9x14 ROM-Zeichensatz
06h 8x16 ROM-Zeichensatz
07h 9x16 ROM-Zeichensatz


Grafikkarteninformationen (Funktion 1Ah/00h)

Wert Grafikkarte
00h keine Karte
01h MDA
02h CGA
04h EGA mit Farbmonitor
05h EGA mit Schwarz-Weiß-Monitor
06h EGA
07h VGA mit analogem Schwarz-Weiß-Monitor
08h VGA mit analogem Farbmonitor
0Ah MCGA mit digitalem Farbmonitor
0Bh MCGA mit analogem Schwarz-Weiß-Monitor
0Ch MCGA mit analogem Farbmonitor
0Fh unbekannte Werte


Video-BIOS-Informationen

Offset Datentyp Bedeutung
00h DWord Adresse der Modusinformationstabelle
04h Byte Aktueller Videomodus
05h Word Anzahl dargestellter Zeichenspalten
07h Word Länge des dargestellten Bereiches des Bildschirmspeichers
09h Word Startadresse der Bildschirminfos im Bildschirmspeicher
0Bh 16 Bytes Tabelle der Cursorpositionen (X;Y) für 8 Videoseiten
1Bh Byte Startzeile der Cursordarstellung
1Ch Byte Endzeile der Cursordarstellung
1Dh Byte aktuelle Bildschirmseite
1Eh Word Port-Adresse des CRTC-Registers
20h Byte Inhalt des Modusregisters des CRTC
21h Byte Inhalt des Palettenregisters des CRTC
22h Byte Anzahl der dargestellen Zeichenzeilen
23h Word Höhe eines Zeichens in Scanzeilen
25h Byte Aktive Videokarte
26h Byte Passive Videokarte
27h Word Anzahl gleichzeitig dargestellter Farben
29h Byte Anzahl möglicher Bildschirmseiten
2Ah Byte Scan-Zeilen des akt. Videomodus:
0 = 200 Zeilen,
1 = 350 Zeilen,
2 = 400 Zeilen,
3 = 480 Zeilen
2Bh Byte VGA-Zeichensatz, der bei abgeschaltetem Attributbit 3 verwendet wird (nur VGA-Karte
2Ch Byte VGA-Zeichensatz, der bei eingeschaltetem Attributbit 3 verwendet wird (nur VGA-Karte)
2Dh 4 Bytes Reserviert
31h Byte Bildschirmspeichergröße:
Wenn 0/1/2/3 dann 64/128/192/256 KByte
32h 14 Bytes Reserviert


Modus-Informationstabelle

Offset Datentyp Bedeutung
00h Byte unterstützte Videomodi:
sind die Bits 0 bis 7 gesetzt, so unterstützt die Karte die entsprechenden Videomodi 00h - 07h
01h Byte unterstützte Videomodi:
sind die Bits 0 bis 7 gesetzt, so unterstützt die Karte die entsprechenden Videomodi 08h - 0Fh
02h Byte unterstützte Videomodi:
sind die Bits 0 bis 3 gesetzt, so unterstützt die Karte die entsprechenden Videomodi 10h - 13h
Die Bits 4-7 sind reserviert
03h 4 Bytes reserviert
07h Byte Scanzeilen in den alphanumerischen Modi:
Bit 0/1/2=1 dann 200/350/400 Zeilen
08h Byte maximale Anzahl darstellbarer Zeichensätze
09h Byte Anzahl der verfügbaren Zeichensätze im Zeichensatzspeicher
0Ah Byte reserviert

Systemkonfiguration (Interrupt 11h)

Eingabe: keine
Ausgabe: AX: Konfigurationswort

Konfigurationswort für ATs und PS/2

Bitnummer Bedeutung
0 gesetzt wenn mind. 1 Diskettenlaufwerk angeschlossen ist
1 gesetzt wenn ein Coprozessor vorhanden ist
2-3 ungenutzt
4-5 Videomodus nach Einschalten
00b=unbekannt
01b=40x25 Color
10b=80x25 Color
11b=80x25 einfarbig
6-7 Anzahl angeschlossener Diskettenlaufwerke
00b:=1 bis 11b:=4
8 ungenutzt
9-11 Anzahl serieller Karten
12-13 reserviert
14-15 Anzahl paralleler Karten

Speichergröße (Interrupt 12h)

Eingabe: keine
Ausgabe: Speichergröße in KB bis zu 1 MB

Disketten- und Festplattenzugriff (Interrupt 13h)

Funktionen des Interrupts 13h

Funktion Bedeutung und Eingabe Ausgabe und Kommentar
00h Laufwerk initialisieren
DL: Laufwerksnummer (0:=alle, 1:=A usw)
Wenn CF=1 dann Fehler und AH=Fehlercode
01h Status lesen
DL: Laufwerksnummer (0:=akt. LW, 80h:= 1. Festplatte)
Wenn CF=1 dann Fehler und AH=Fehlercode
02h Sektoren lesen
DL: LW-Nr. (0:=A, 1:=B, 80h:=1. Festplatte)
DH: Seiten/Kopfnummer
CH: Spur/Zylindernummer
CL: Sektornummer
AL: Sektorenanzahl
ES:BX: Adresse Lesepuffer
Wenn CF=1 dann Fehler und AH=Fehlercode
Der Lesepuffer muß für einen Sektor ausreichend groß dimensioniert sein (512 Bytes und größer)
03h Sektoren schreiben
DL: LW-Nr. (0:=A, 1:=B, 80h:=1. Festplatte)
DH: Seiten/Kopfnummer
CH: Spur/Zylindernummer
CL: Sektornummer
AL: Sektorenanzahl
ES:BX: Adresse Schreibpuffer
Wenn CF=1 dann Fehler und AH=Fehlercode
04h Sektoren prüfen
DL: LW-Nr. (0:=A, 1:=B, 80h:=1. Festplatte)
DH: Seiten/Kopfnummer
CH: Spur/Zylindernummer
CL: Sektornummer
AL: Sektorenanzahl
ES:BX: Adresse Überprüfungspuffer
Wenn CF=1 dann Fehler und AH=Fehlercode
05h Spuren oder Zylinder formatieren
DL: LW-Nr. (0:=A, 1:=B, 80h:=1. Festplatte)
DH: Seiten/Kopfnummer
CH: Spur/Zylindernummer
CL: Sektornummer
AL: Sektorenanzahl
ES:BX: Adresse Formatpuffer
Wenn CF=1 dann Fehler und AH=Fehlercode
06h Spur kennzeichnen
DL: Festplattennummer (80h:=1. Festplatte)
DH: Seiten/Kopfnummer
CH: Spur/Zylindernummer
CL: Sektorregister (Bit 6 und 7 bilden Bit 8 und 9 von CH)
Wenn CF=1 dann Fehler und AH=Fehlercode
07h Zylinder ab CH formatieren
DL: LW-Nr. (0:=A, 1:=B, 80h:=1. Festplatte)
DH: Seiten/Kopfnummer
CL: Sektornummer
AL: Sektorenanzahl
ES:BX: Adresse Formatpuffer
Wenn CF=1 dann Fehler und AH=Fehlercode
08h Format ermitteln
DL: Festplattennummer (80h:=1. FP)
Wenn CF=1 dann Fehler und AH=Fehlercode
DL: Festplattenanzahl
CH: Zylinderanzahl
CL: Sektorenanzahl
09h Fremdlaufwerke anpassen
DL: Festplattennummer (80h:=1. FP)
Wenn CF=1 dann Fehler und AH=Fehlercode
0Ah erweiterte Sektoren lesen
DL: Festplattennummer (80h:=1. Festplatte)
DH: Seiten/Kopfnummer
CH: Spur/Zylindernummer
CL: Sektornummer
AL: Sektorenanzahl
ES:BX: Adresse Lesepuffer
Wenn CF=1 dann Fehler und AH=Fehlercode
0Bh erweiterte Sektoren schreiben
DL: Festplattennummer (80h:=1. Festplatte)
DH: Seiten/Kopfnummer
CH: Spur/Zylindernummer
CL: Sektornummer
AL: Sektorenanzahl
ES:BX: Adresse Lesepuffer
Wenn CF=1 dann Fehler und AH=Fehlercode
0Ch Schreib/Lesekopf bewegen
DL: LW-NR (0:=A, 80h:=C)
CX: Spur/Zylindernummer
DH: Kopfnummer
Wenn CF=1 dann Fehler und AH=Fehlercode
10h Überprüfung der Laufwerksbereitschaft
DL: Festplattennummer (80h:=1. FP)
Wenn CF=1 dann Fehler und AH=Fehlercode
11h Plattenköpfe parken
DL: Festplattennummer (80h:=1. FP)
Wenn CF=1 dann Fehler und AH=Fehlercode
13h Sektor 0 überprüfen
DL: Festplattennummer (80h:=1. FP)
Wenn CF=1 dann Fehler und AH=Fehlercode
14h Controller testen
DL: Festplattennummer (80h:=1. FP)
Wenn CF=1 dann Fehler und AH=Fehlercode
15h Diskettentyp ermitteln
DL: Festplattennummer (80h:=1. FP)
Wenn CF=1 dann Fehler und AH=Fehlercode
16h Diskettenwechsel ermitteln
DL: DiskLW-Nr.
AH: Wechselflag (0:=kein Wechsel; 6:=Wechsel)
17h Diskettenformat fixieren
AL: Diskettenformat
Wenn CF=1 dann Fehler und AH=Fehlercode
19h Plattenköpfe parken
DL: Festplattennummer
Wenn CF=1 dann Fehler und AH=Fehlercode


Fehlercodes für die Funktionen 00h bis 16h

Code Bedeutung Code Bedeutung
00h Kein Fehler 01h Illegale Funktionsnummer
02h Keine Adressmarkierung 04h Sektor nicht gefunden
05h Reset war erfolglos 07h Fehlerhafte Initialisierung
09h Segmentgrenzenüberlauf des DMA 10h Lesefehler
11h Daten trotz falscher Prüfsumme gelesen 20h Fehler des Controllers
40h Spur nicht gefunden 80h Laufwerk reagiert nicht
BBh BIOS-Fehler FFh nicht aufschlüsselbarer Fehler


Fehlercodes für die Funktionen 17h und 19h

Code Bedeutung Code Bedeutung
01h Illegale Funktionsnummer 02h Keine Adressmarkierung
03h Diskette ist schreibgeschützt 04h Sektor nicht gefunden
08h Überlauf des DMA 09h Segmentgrenzenüberlauf
10h Lesefehler 20h Fehler des Controllers
40h Spur nicht gefunden 80h Laufwerk reagiert nicht

Zugriff auf die serielle Schnittstelle (Interrupt 14h)

Funktionen des Interrupts 14h

Funktion Bedeutung und Eingabe Ausgabe und Kommentar
00h Initialisierung
DX: Schnittstellennummer(0:=COM1)
AL: Konfigurationscode
AH: Zeilenstatus
AL: Modemstatus (s. unten)
01h Zeichen senden
DX: Schnittstellennummer(0:=COM1)
AL: Zeichencode
AH: Zeilenstatus
02h Zeichen lesen
DX: Schnittstellennummer(0:=COM1)
AH: Zeilenstatus
AL: Zeichencode des Zeichens
03h Status erfragen
DX: Schnittstellennummer(0:=COM1)
AH: Zeilenstatus
AL: Modemstatus
04h erweiterte Initialisierung vornehmen
AL: Break-Zustand
BH: Parität
BL: Stopbitanzahl
CH: Datenbitanzahl
CL: Baudrate
DX: Schnittstellennummer(0:=COM1)
AH: Leitungszustand
AL: Modemstatus


Konfigurationscode

Bitnummer Bedeutung
0 Datenbitflag: 0=7 Datenbits, 1=8 Datenbits
1 muß immer 1 sein
2 Stopbitflag: 0=1 Stopbit, 1=2 Stopbits
3 Paritätsbitflag: 0=keine Parität, 1=mit Parität
4 Paritätsmodus: 0=ungerade Parität, 1=gerade Parität
5-7 Code der Baudrate
000: 110 Baud; 001: 150 Baud; 010: 300 Baud
011: 600 Baud; 100: 1200 Baud; 101: 2400 Baud
110: 4800 Baud; 111: 9600 Baud


Zeilenstatus / Leitungsstatus

Bitnummer Bedeutung
0 Daten stehen zum Empfang bereit (Data ready)
1 Datenüberlauf (Overrun Error)
2 Paritätsfehler
3 Protokollfehler
4 Unterbrechung erkannt
5 Übertragungs-Halteregister frei
6 Übertragungsschieberegister frei
7 Timeoutfehler


Modemstatus

Bitnummer Bedeutung
0 (D) Klar zum Senden
1 (D) Modem ist bereit
2 (D) Telefon läutet
3 (D) Datenträgersignal erkannt
4 Klar zum Senden
5 Modem ist bereit
6 Telefon läutet
7 Datenträgersignal erkannt

AT-Spezifische Funktionen (Interrupt 15h)

Funktionen des Interrupts 15h