summaryrefslogtreecommitdiff
path: root/system/shard-x86-at/7/doc/BIOSINT.TXT
blob: c55b064124bba374125c70127d6c80bb2a5cc802 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
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 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