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
|