From 98cab31fc3659e33aef260efca55bf9f1753164c Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Mon, 11 Feb 2019 11:49:19 +0100 Subject: Add source files from Michael --- system/shard-x86-at/7/doc/BIOSINT.TXT | 305 ++++++++++++++++++++++++++++++++++ 1 file changed, 305 insertions(+) create mode 100644 system/shard-x86-at/7/doc/BIOSINT.TXT (limited to 'system/shard-x86-at/7/doc/BIOSINT.TXT') diff --git a/system/shard-x86-at/7/doc/BIOSINT.TXT b/system/shard-x86-at/7/doc/BIOSINT.TXT new file mode 100644 index 0000000..f31d5b6 --- /dev/null +++ b/system/shard-x86-at/7/doc/BIOSINT.TXT @@ -0,0 +1,305 @@ +#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 gltig, AH=0: Taste nicht gedrckt + 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 fr 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 fr 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 untersttzt) +INT 46H : Hardfile 1 Table Vector + +INT 4AH : Fr 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 + -- cgit v1.2.3