#type ("17.klein")# Interrupts/Traps/Exeptions (Bios) 03.06.87 Interrupt: IRQn (Durch Hardware ausgelöst, werden auf Traps umgelenkt) Trap : INTn (Durch Software ausgelöst) Exeption : INTn (Im Protected Mode vom Prozessor ausgelöst) Traps | Funktion --------+------------------------------------------------------------------ INT 00H : Abort Program INT 01H : INT 02H : NMI-Routine (Parity-Check & Power-Fail & Redirected from INT 75H) INT 03H : INT3 - Break INT 04H : INTO - Overflow INT 05H : Print Screen INT 06H : INT 07H : INT 08H : IRQ0 System Interrupt INT 09H : IRQ1 Keyboard Buffer full INT 0AH : Software redirected from IRQ9 INT 0BH : IRQ3 Serial Port 2 INT 0CH : IRQ4 Serial Port 1 INT 0DH : IRQ5 Parallel Port 2 INT 0EH : IRQ6 Diskette Interrupt INT 0FH : IRQ7 Parallel Port 1 INT 10H : Video Trap ah = 00H : set mode (al = mode) (Videoram: Herkules: B0000 EGA : B8000) al | Tx/Gr| Pixel | Zeichen | Monitor | Farbe | Seiten ---+------+-------+---------+---------+-------+-------- 00 | Text |640x200| 40 x 25 | Mono/Col| 16/64*| 8 01 | Text |640x200| 40 x 25 | Color | 16/64*| 8 02 | Text |640x200| 80 x 25 | Mono/Col| 16/64*| 8 03 | Text |640x200| 80 x 25 | Color | 16/64*| 8 04 | Graf |320x200| 40 x 25 | Mono/Col| 4 | 1 05 | Graf |320x200| 40 x 25 | Mono/Col| 4 | 1 06 | Graf |640x200| 80 x 25 | Mono/Col| 2 | 1 07 | Text |720x348| 80 x 25 | Mono | 4 | 8 08 | Graf |720x348| 90 x 48 | Mono | 2 | 1 --------- ab hier nicht implementiert, nur EGA ------------------ VideoRAM-Adresse A0000 0D | Graf |320x200| 40 x 25 | Color | 16 | 8 0E | Graf |640x350| 80 x 25 | Color | 16 | 4 0F | Graf |640x350| 80 x 25 | Mono | 4 | 2 10 | Graf |640x350| 80 x 25 | Enhanced| 16/64*| 2 * mit EGA-Monitor ah = 01H : set cursor type (Eingang: CH, CL Werte 0..31) CH=Startzeile des Cursorblocks, CL=Endzeile des Cursorblocks ah = 02H : set cursor pos (BH = Page, DL = Spalte, DH = Zeile) ah = 03H : read cursor Ausgang: BH=Page, DL=Spalte, DH=Zeile, CL=Starzeile des Cursorblocks, CH=Endzeile des Cursorblocks ah = 04H : read lightpen Ausgang: AH=1 : Register sind gültig, AH=0: Taste nicht gedrückt DH = Zeile, DL = Spalte des Lightpens CH=Rasterlinie (1..199), CX=Rasterlinie (1..349) BX = Rasterspalte (1..319/1..639) ah = 05H : set actual display (AL = Neue Seite) ah = 06H : scroll up AL = 0: Fenster löschen, sonst Anzahl Zeilen zu scrollen CH, CL = linke obere Ecke des Scroll-Windows DH, DL = rechte untere Ecke des Scroll-Windows BH = Attribut fuer die Leerzeilen ah = 07H : scroll down AL = 0: Fenster löschen, sonst Anzahl Zeilen zu scrollen CH, CL = linke obere Ecke des Scroll-Windows DH, DL = rechte untere Ecke des Scroll-Windows BH = Attribut fuer die Leerzeilen ah = 08H : read current attribute and char Ausgang: BH=Anzeigeseite, AL=Zeichen, AH=Attribut (nur Alpha) ah = 09H : write current attribute and char BH=Anzeigeseite, CX=Anzahl Zeichen, AL=Zeichen, BL=Attribut/Farbe ah = 0AH : write current attribute and char BH=Anzeigeseite, CX=Anzahl Zeichen, AL=Zeichen ah = 0BH : set color (BH=Palettenfarbe 0..127, BH=Farbwert) ah = 0CH : write dot BH=Seite, DX=Zeile, CX=Spalte, AL=Farbwert (falls Bit 7=1, wird alte Farbe mit neuer Farbe geXORed) ah = 0DH : read dot (BH=Seite, DX=Zeile, CX=Spalte, AL=Punktfarbwert) ah = 0EH : write tty (Zeichen schreiben, AL=Zeichen, BL=Farbe) ah = 0FH : video state (Ausgang: AL=Video-Mode (0..8), AH=Anzahl Zeichenspalten, BH=Seite) ah = 10H : reserved (EGA-Bios: Write Palette/Overscan/Intensity/Flash) ax = 1142H: draw line (EGA-Bios: 12 Routinen für den Charactergenerator) CX=X-pos-from, DX= Y-pos-from, BP=X-pos-to, DI=Y-pos-to ah = 12H : reserved (EGA-Bios: Alternate Characterset) ah = 13H : write string Allgemein: ES:BP = Stringanfang CX = Stringlänge DL, DH = Cursorposition (Stringanfang) BH = Seite al = 0: BL=Attribut, String: CHAR, CHAR, CHAR,...,Cursor wird nicht bewegt. al = 1: BL=Attribut, String: CHAR, CHAR, CHAR,..., Cursor wird bewegt. al = 2: String: CHAR, ATTR, CHAR, ATTR,..., Cursor wird nicht bewegt. al = 3: String: CHAR, ATTR, CHAR, ATTR,..., Cursor wird bewegt. INT 11H : Equipment Trap (Ausgang: AX = Equipment Flag) AX : Bit 1 : 80287 installiert Bit 3 : Herkules installiert Bit 4/5 : 0 = No Primary Display set 1 = Monochrome 2 = Color 80 * 25 3 = EGA Bit 6 : Drive B installiert Bit 9..12 : Anzahl RS232 Bit 14/15 : Anzahl Printer INT 12H : Memory Size Trap (Ausgang: AX = Memorysize in KB) INT 13H : Hardisk Trap Allgemein: DL = Drive (0, 1...) AL = Sector count CX = Bit 0... Bit 5 = Sector Bit 6... Bit 15 = Cylinder Exit: AH = 0 ok, <> 0 Fehler (z.b. in hf_error nachsehen) ah = 0 reset diskette, wd1010, hdisks ah = 1 return status ah = 2 read ah = 3 write ah = 4 verify ah = 5 format ah = 8 drive params ah = 9 init drive ah = A read long ah = B write long ah = C seek ah = D reset wd1010 (DL = Drive) ah =10 ready test ah =11 reclibrate ah =14 check controller ah =15 read dasd (stacktop 2 words: anzahl sektoren der platte) INT 14H : RS232C Trap Allgemein: dx = port (>= 1FE0H : SCC = 8530) ah = 0 : Init al : Bit 5..7 = Baudrate 000 = 110, 001 = 150, 010 = 300, 011 = 600, 100 = 1200, 101 = 2400, 110 = 4800, 111 = 9600, Bit 3..4 = Parity (no, odd, even) Bit 2 = Stopbits (1, 2) Bit 0..1 = Datenbits (5, 6, 7, 8) ah = 1 : Send (al = Zeichen, Ausgang: ah=80H Timeout, Zeichen dann in al) ah = 2 : Read (Ausgang: ah=80H:Timeout, sonst ah=Statusregister,al=Zeichen) ah = 3 : Status (Ausgang: Nur 8250: al = Modemstatus) ah : Bit 0 = 1 : Data available Bit 1 = 1 : Receiver overrun Bit 2 = 1 : Parity Error Bit 3 = 1 : Framing Error Bit 4 = 1 : Transmitter empty Bit 5 = 1 : Break received INT 15H : Utility Trap ah = 80H open device (nicht implementiert) ah = 81H close device (nicht implementiert) ah = 82H prog term (nicht implementiert) ah = 83H event wait (Eingang: CX=RTCtmr high, DX=RTCtmr high, ES:BX=userflag) Ausgang: CY=0, Event wait wurde aktiviert CY=1, Noch kein RTC-Event aufgetreten (INT 15H periodisch aufrufen zum pollen) ah = 84H joy stick (Eingang: DX) DX = 0: Ausgang: AL (Bits 4..7) = Buttons DX = 1: Ausgang: AX=Xa, BX=Ya, CX=Xb, DX=Yb ah = 85H sys request (nicht implementiert) ah = 86H wait a moment (CX=RTCtimer high, DX=RTCtimer low) ah = 87H block move (extended memory) (Eingang: CX: Words, ES:SI = Block Descriptoren: 8 Bytes Source, 8 Bytes Destination) ah = 88H extended memory (Ausgang: AX= KB extended Memory) ah = 89H enter protected mode ax = 8A42H run setup ax = 8B42H error beep ax = 8C42H usr-powerfail-shutdown-routine (Benutzerdaten können von ES:0 bis ES:BACK_SYS abgelegt werden) ax = 8D42H usr-powerfail-resume-routine (Benutzerdaten können von ES:0 bis ES:BACK_SYS geholt werden) ax = 8E42H set timer (Eingang: BL = Timer (0, 1, 2), CX = Countervalue BH: Bit 0 = BCD, Bit 1..3 = Mode, Bit 4..5 Write CMD, Bit 6/7 unused) (Timer wird bei Resume wieder so initialisert) ax = 8F42H hardcopy (Grafik & Mono) ah = 90H device busy (nicht implementiert) ah = 91H set int complete (nicht implementiert) ah = 9242H backup memory (CX=Anzahl Bytes, DS:SI = Sourceadr, E000H:DI = Destinationadr.) ah = 9342H restore memory (CX=Anzahl Bytes, E000H:SI = Sourceadr, ES:DI = Destinationadr.) INT 16H : Keyboard Trap ah = 00 Ascii read (Ausgnag: AX=Zeichen CY=1, sonst CY=0) ah = 01 Ascii status (Ausgang: ZF = 0 : Zeichen in Queue) ah = 02 Shift status (Ausgang: AL = KB_flag) ax = 0342 set typematic (Ausgang: BL = Rate, BH = Delay) ax = 0442 soft power down INT 17H : Printer Trap Allgemein: dx = port ah = 0 : print char (Eingang: al = Char, Ausgang: ah = Printer Status) ah = 1 : init printer port ah = 2 : ah = Status INT 18H : Basic (nicht implementiert) INT 19H : Bootstrap Trap Block 0 von Harddisk oder Floppy --> ES:BX laden und starten (Booting...) Der Block hat in Bytes 510/511 das Kennzeichen AA55H. INT 1AH : Time of day Trap ah = 0 : Read Timer (Ausgang: CX=Timer low, DX=Timer high, AL<>0:Overflow) ah = 1 : Set Timer (CS=Timer low, DX=Timer high) ah = 2 : Read Clock (Ausgang: DH = Sec, CL = Min, CH = Std) ah = 3 : Set Clock (DL=Sommerzeit (01), DH=sec, CL=Min, CH=Std) ah = 4 : Read Date (DL=Day, DH=Month, CL=Year, CH=Century) ah = 5 : Set Date (DL=Day, DH=Month, CL=Year, CH=Century) ah = 6 : Set Alarm (DH=Sec, CL=Min, CH=Std) ah = 7 : Reset Alarm INT 1BH : Dummy Return INT 1CH : User Timer Tic, wird einmal pro Sekunde aufgerufen. INT 1DH : Zeigt auf die Video Parameter INT 1EH : Zeigt auf Disk_base (DF, 02, 25, 02, 0F, 1B, FF, 54, F6, 0F, 08) INT 1FH : Pointer auf Zeichensatz mit Zeichen 128..255 INT 20H ... INT 3FH sind für das Betriebssystem reserviert. INT 20H : DOS: Terminate Program INT 21H : DOS: Function Call INT 22H : DOS: INT 23H : DOS: INT 24H : DOS: INT 25H : DOS: INT 40H : Diskette Trap AH = 0 disk reset AH = 1 disk status (ret) AH = 2 disk read (ES:BP = Pointer auf Buffer, DI = Anzahl Sektoren, DH = Head, DL = Drive, CL = Sektor, CH = Cylinder) AH = 3 disk write " AH = 4 disk verify " AH = 5 disk format " AH = 21 disk type (Ausgang: BL (Bit 0..3) 0=360K, 1/2 = 1.2MB) AH = 22 disk change AH = 23 format set INT 41H : Hardfile Table Vector INT 44H : Pointer auf weiteren Zeichensatz (Nur von EGA-Bios unterstützt) INT 46H : Hardfile 1 Table Vector INT 4AH : Für User software redirected from RTC-IRQ (Alarm, periodic) INT 60H ... User INT 6FH Hardware-Interrupts 8..15: INT 70H : IRQ 8 RTC-Interrupt INT 71H : IRQ 9 Software Redirected to INT 0AH INT 72H : IRQ10 Frei INT 73H : IRQ11 Frei INT 74H : IRQ12 Frei INT 75H : IRQ13 Coprozessor, Software Redirected to NMI (INT 02H) INT 76H : IRQ14 Harddisk Interrupt INT 77H : IRQ15 Frei INT 78H : User 0 INT 79H : User 1 INT 7AH : User 2 INT 7BH : User 3 INT 7CH : User 4 INT 7DH : User 5 INT 7EH : User 6 INT 7FH : User 7 Exception | Bezeichnung | E-Code | Restart| Instr. ----------+-------------------------------------+--------+--------+---------- 0 | Divide Error | - | Ja | DIV, IDIV 1 | Single Step | - | Ja | Alle 2 | NMI | - | Ja | Alle 3 | Breakpoint | - | Ja | INT3 4 | INTO Overflow | - | Ja | INTO 5 | BOUND Range | - | Ja | BOUND 6 | Invalid Opcode | - | Ja | undef.Opc. 7 | Processor Extension Not Available | - | Ja | ESC, WAIT 8 | Double Exception / IDTL too small | 0 | Nein | LIDT 9 | Processor Extension Segment Overrun | - | Nein | ESC 10 | Invalid Task State Segment | Ja | Ja | TaskSwitch 11 | Segment Not Present | Ja | Ja | Alle Mem. 12 | Stack Segment Overrun or Not Present| Ja | Ja | Stackopc. 13 | General Protection | Ja | Ja | Alle Mem. 14 | - | - | - | - 15 | - | - | - | - 16 | Processor Extension Interrupt | - | - | ESC, WAIT