Home Programmierung
und BIOS
Shareware-
FAQ
Kontakt u.
Infos

DOS-Interrupt 33h (Mausfunktionen)

Diese Interrupte werden vom Maustreiber zur Verfügung gestellt.
Bei der Umrechnung der Einheiten gilt: 1 Zoll=1 Inch=2,54 cm.

Funktion Bedeutung Eingabe Ausgabe Anmerkungen
00h Reset AX=00h AX=0, wenn Maus installiert, -1, wenn Maus nicht installiert
BX=Anzahl der Maustasten
Setzt gesamte Maushardware zurück. Sollte jedes Programm einmal aufrufen, das eine Maus verwendet.
01h Mauszeiger an AX=01h - Interner Zähler wird inkrementiert. Aufgrund des internen Zählers muß der Mauszeiger so oft angeschaltet werden, wie er ausgeschaltet wurde, um ihn wieder darzustellen.
02h Mauszeiger aus AX=02h - Interner Zähler wird dekrementiert. Diese Funktion sollte prinzipiell vor Bildschirmausgaben aufgerufen werden, da sonst an der Stelle des Mauszeigers nicht gezeichnet wird. Aufgrund des internen Zählers muß der Mauszeiger so oft angeschaltet werden, wie er ausgeschaltet wurde, um ihn wieder darzustellen.
03h Status der Maustasten und Position AX=03h BX=Status
CX=Mausspalte
DX=Mauszeile
Der Status der Maustasten ist in BX bitweise kodiert (Bit 0=linke, Bit 1=rechte, Bit 2=mittlere)
04h Mauszeiger bewegen AX=04h
CX=Mausspalte
DX=Mauszeile
- Die Koordinaten beziehen sich auf das Maus - Koordinatensystem (640*200 Pixel)
05h Status beim Drücken AX=05h
BX=Maustaste
AX=Status
BX=Zähler
CX=Mausspalte
DX=Mauszeile
Dient zum Abfragen einzelner Maustasten. 0=linke, 1=rechte, 2=mittlere Maustaste (in BX übergeben).
CX und DX enthalten die Koordinaten beim letzten Drücken und BX einen Zähler, der angibt, wie oft die Maustaste seit dem letzten Aufruf dieser Funktion gedrückt wurde.
06h Status beim Loslassen AX=06h
BX=Maustaste
AX=Status
BX=Zähler
CX=Mausspalte
DX=Mauszeile
Dient zum Abfragen einzelner Maustasten. 0=linke, 1=rechte, 2=mittlere Maustaste (in BX übergeben).
CX und DX enthalten die Koordinaten beim letzten Loslassen und BX einen Zähler, der angibt, wie oft die Maustaste seit dem letzten Aufruf dieser Funktion gedrückt wurde.
07h Bewegungsbereich (horizontal) einschränken AX=07h
CX=linke Grenze
DX=rechte Grenze
- -
08h Bewegungsbereich (vertikal) einschränken AX=08h
CX=obere Grenze
DX=untere Grenze
- -
09h Grafik-Cursor AX=09h
BX=X-Hotspot
CX=Y-Hotspot
ES:DX=Zeiger auf Maske
- Die Maske setzt sich aus 16*16 - Bit - Masken zusammen, wobei die erste die Bildschirmmaske und die zweite die Cursormaske ist. Die erste Maske wird mit dem Bildschirm UND verknüpft, die zweite mit ODER.
0Ah Text-Cursor AX=0Ah
BX=0 (Software - Cursor), 1 (Hardware - Cursor)
CX=UND-Maske
DX=ODER-Maske
- CX: wenn Software - Cursor, dann Schirmmaske, ansonsten erste Scan-Linie des Hardware - Cursors.
DX: wenn Software - Cursor, dann Cursor - Maske, ansonsten letzte Scan-Linie des Hardware - Cursors.
0Bh Bewegungszähler der Maus lesen AX=0Bh CX=horizontaler Zähler
DX=vertikaler Zähler
Im Bewegungszähler wird die Anzahl der Mausbewegungen (Mickeys) seit dem letzten Funktionsaufruf übergeben. Ein Mickey sind 1/200stel Zoll.
Ein Mickey ist 1/200 Inch für die 200ppi - Maus und 1/400 Inch für die 400ppi - Maus.
Der Wertebereich erstreckt sich von -32768 bis 32767.
0Ch Maus-Handler AX=0Ch
CX=Maske
ES:DX=Zeiger auf den Handler
- Installiert einen Eventhandler für Mausereignisse. Der Wert in CX bestimmt, bei welchen Aktionen dieser Handler aufgerufen werden soll. Vor Programmende muß diese Funktion mit ES=0 und DX=0 oder Mausfunktion 0 aufgerufen werden.
Entsprechend den festgelegten Ereignissen wird die Interruptroutine aufgerufen, die mit dem Befehl RETF beendet werden muß. (siehe dazu Maske sowie Register bei Aufruf des Handlers
0Dh Lichtgriffel - Emulation aktivieren AX=0Dh - Simuliert mit der Maus folgende Lichtgriffel - Funktionen:
- Lichtgriffel ist auf dem Bildschirm, wenn beide Maustasten (links+rechts) gedrückt sind.
- Lichtgriffel vom Bildschirm entfernt, wenn beide Maustasten (links+rechts) losgelassen sind.
0Eh Lichtgriffel - Emulation abschalten AX=0Eh - -
0Fh Bestimme Verhältnis Mickey / Bildpunkt AX=0Fh
CX=horizontales Verhältnis
DX=vertikales Verhältnis
- Die Parameter müssen sich jeweils im Bereich von 1 bis 32767 befinden.
Der horizontale Standard - Wert ist 8, der Vertikale 16.
Ein Mickey ist 1/200 Inch für die 1/200ppi - Maus und 1/400 Inch für die 400ppi - Maus.
10h Bedingtes Abschalten des Cursors AX=10h
CX=rechte X-Koordinate
DX=untere Y-Koordinate
SI=linke X-Koordinate
DI=obere Y-Koordinate
- Der Cursor wird gelöscht, wenn er sich in dem festgelegten Bereich befindet. Er kann durch Funktion 01h wieder eingeschaltet werden.
13h Setze Anfangswert für doppelte Geschwindigkeit AX=13h
DX=Geschwindigkeit in Mickeys pro Sekunde
- Standard: 64
14h Swap - Interrupt - Subroutinen AX=14h
BX=Segment der neuen Subroutine
CX=neue Aufruf - Maske
DX=Offset der neuen Subroutine
BX=Segment der alten Subroutine
CX=alte Aufruf-Maske
DX=Offset der alten Subroutine
Aufbau Aufruf-Maske
Aufbau Subroutine
15h Speicherbedarf für Maustreiber ermitteln AX=15h BX=nötige Puffergröße Puffergröße ist in Bytes angegeben.
16h Maustreiber - Status speichern AX=16h
ES:DX=Zeiger auf Puffer
- Größe des Puffers kann durch Funktion 15h bestimmt werden.
17h Maustreiber - Status wiederherstellen AX=17h
ES:DX=Zeiger auf Puffer
- -
18h Eingabe - Maske für alternative Benutzerprozedur festlegen AX=18h
CX=Aufruf - Maske
DX:ES=Zeiger auf Subroutine
AX=Status (-1 bei Fehler) -
19h Adresse für benutzerdefinierten Interrupt lesen AX=19h
CX=Aufruf - Maske
AX=Status (-1, wenn kein Vektor / keine Maske)
BX:DX=Zeiger auf Subroutine
CX=Aufruf - Maske
-
1Ah Mausempfindlichkeit setzen AX=1Ah
BX=horizontale Empfindlichkeit
CX=vertikale Empfindlichkeit
DX=Schwelle für Doppel - Geschwindigkeit
- Ein Mickey (Mausbewegung) ist 1/200stel Zoll bei der 200ppi - Maus; 1/400stel Zoll bei der 400ppi - Maus.
1Bh Mausempfindlichkeit lesen AX=1Bh BX=horizontale Empfindlichkeit
CX=vertikale Empfindlichkeit
DX=Schwelle für Doppel - Geschwindigkeit
Ein Mickey (Mausbewegung) ist 1/200stel Zoll bei der 200ppi - Maus; 1/400stel Zoll bei der 400ppi - Maus.
1Ch Maus - Interrupt - Verhältnis setzen AX=1Ch
BX=Interrupt - Rate
- Rate gibt die Maximalzahl von Interrupts pro Sekunde an, definiert wie folgt:
0=keine Interrupts gestattet.
1=30 Interrupts pro Sekunde
2=50 Interrupts pro Sekunde
3=100 Interrupts pro Sekunde
4=200 Interrupts pro Sekunde
Werte größer 4 sollten nicht verwendet werden (nicht definiert).
1Dh CRT - Seitennummer setzen AX=1Dh
BX=CRT - Seitennummer
- -
1Eh CRT - Seitennummer lesen AX=1Eh BX=CRT - Seitennummer -
1Fh Maustreiber ausschalten AX=1Fh AX=Status (-1 bei Fehler)
ES:BX=Zeiger auf alten INT33h - Vektor
-
20h Maustreiber einschalten AX=20h - -
21h Software - Reset AX=21h AX=Status (-1 zeigt an, daß der Maustreiber installiert ist; sonst 33 (21h))
BX=2 (nur, wenn Maustreiber installiert ist)
-
22h Sprache für Meldungen festlegen AX=22h
BX=Nummer der Sprache
- Sprachwerte:
0=Englisch
1=Französisch
2=Niederländisch
3=Deutsch
4=Schwedisch
5=Finnisch
6=Spanisch
7=Porugiesisch
8=Italienisch
23h Sprachnummer ermitteln AX=23h BX=Sprachnummer Sprachwerte:
0=Englisch
1=Französisch
2=Niederländisch
3=Deutsch
4=Schwedisch
5=Finnisch
6=Spanisch
7=Porugiesisch
8=Italienisch
24h Treiberversion, Maustyp und IRQ-Nummer ermitteln AX=24h BX=Versionsnummer
CH=Maustyp
CL=IRQ-Nummer
Maustyp:
1=Bus-Maus
2=serielle Maus
3=InPort - Maus
4=PS/2 - Maus
5=Hewlett - Packard - Maus

IRQ-Nummer:
Der Wert 0 steht für das Modell PS/2; die Werte 2 bis 5 und 7 sind ein Maus-Interrupt.
25h Allgemeine Treiberinformationen ermitteln AX=25h AH=Status
AL=Anzahl MDDS
BX=fCursorsperre
CX=FinMouse - Code
DX=fMouse beschäftigt
Maustreiber - Version 6.26 oder jünger erforderlich.
Status:
Bit 7=Treibertyp (1: sys, 0: com)
Bit 6=0 (nicht integrierter Maustreiber), 1 (integrierter Maustreiber)
Bit 4-5 Cursortyp (Version 7.02 oder jünger)=
00: Software - Textcursor
01: Hardware - Textcursor
1X: Grafikcursor
Bit 0-3=Funktion 28: Mausinterrupt - Rate
26h Maximale virtuelle Koordinaten ermitteln AX=26h BX=Maus - ausgeschaltet - Flag (1=ausgeschaltet, 0=eingeschaltet)
CX=absolutes virtuelles X-Maximum
DX=absolutes virtuelles Y-Maximum
Maustreiber - Version 6.26 oder jünger erforderlich.
27h Bildschirm / Cursor - Masken und Mausbewegungszähler lesen AX=27h AX=Bildschirm - Maskenwert oder Start Scanzeile (ab Version 7.02)
BX=Cursor - Maskenwert oder Ende Scanzeile (ab Version 7.02)
CX=Roher horizontaler Mausbewegungs - Zähler
DX=Roher vertikaler Mausbewegungs - Zähler
Maustreiber - Version 6.26 oder jünger erforderlich.
28h Video - Modus setzen AX=28h
CX=Angeforderter Video - Modus
DX=Schriftgröße, 0 ist Vorgabe
CX=0 bei Erfolg, sonst angeforderter Modus Maustreiber - Version 7.0 oder jünger erforderlich.
Schriftgröße:
High-Byte: y-Schriftgröße
Low-Byte: x-Schriftgröße
29h Video - Modi aufzählen AX=29h
CX=0 für ersten, <>0 für nächsten
BX:DX=Zeiger auf benannten String (0:0 bedeutet, daß kein benannter String zurückgegeben wurde)
CX=Video - Modusnummer
Maustreiber - Version 7.05 oder jünger erforderlich.
30h Aktionspunkt des Cursors ermitteln AX=30h AX=fCursor (internes Flag)
BX=horizontaler Cursor - Aktionspunkt
CX=vertikaler Cursor - Aktionspunkt
DX=Maustyp
Maustreiber - Version 7.02 oder jünger erforderlich.
Maustyp:
0=keiner
1=Bus-Maus
2=serielle Maus
3=InPort - Maus
4=IBM - Maus
5=Hewlett - Packard - Maus
31h Maus - Beschleunigungs - Kurven laden AX=31h
BX=zu aktivierende Kurvennummer (-1 restauriert Vorgabekurve)
ES:SI=Zeiger auf Kurven - Array
AX=0 bei Erfolg, sonst -1 Maustreiber - Version 7.0 oder jünger erforderlich.
32h Maus - Beschleunigungs - Kurven lesen AX=32h AX=0 bei Erfolg, sonst -1
BX=aktive Kurvennummer
ES:SI=Zeiger auf Kurven - Array
Maustreiber - Version 7.0 oder jünger erforderlich.
33h Aktive Beschleunigungs - Kurve setzen / lesen AX=33h
BX=zu aktivierende Kurvennummer (-1, um die Nummer zu lesen, 1-4, um zu setzen)
AX=0 bei Erfolg, -2: falsche Kurvennummer
BX=momentan aktive Kurve
ES:SI=Zeiger auf 16-Byte ASCII-String
Maustreiber - Version 7.0 oder jünger erforderlich.
Der ASCII-String ist der Name der aktuell aktiven Kurve mit einem Null-Begrenzer (ASCIIZ).
35h Maus - Hardware - Reset AX=35h AX=0 bei Fehler, sonst -1 Maustreiber - Version 7.02 oder jünger erforderlich.
Es erfolgt KEIN Reset der Software-Werte.
36h Mauskugel - Information setzen / lesen AX=36h
BX=Rotations - Winkel
CX=0 für Lesen, <>0 für Setzen
AX=Status (-1, wenn keine Mauskugel vorhanden, sonst in AL Status der Tasten)
BX=Rotations - Winkel
CH=Primärtasten - Maske
CL=Sekundärtasten - Maske
Maustreiber - Version 7.05 oder jünger erforderlich.
CX=0 (Eingabe):
BX wird ignoriert
CX <>0 (Eingabe):
BX=Rotations - Winkel
CH=Primärtasten - Maske
CL=Sekundärtasten - Maske

Tastenmaske=
0 0 b1 b3 b2 b4 0 0
37h Minimum / Maximum virtuelle Koordinaten lesen AX=37h AX=aktuelles virtuelles X-Minimum
BX=aktuelles virtuelles Y-Minimum
CX=aktuelles virtuelles X-Maximum
DX=aktuelles virtuelles Y-Maximum
Maustreiber - Version 7.05 oder jünger erforderlich.
38h Aktive erweiterte Funktionen lesen AX=38h AX=unterstützte Funktionen Maustreiber - Version 7.05 oder jünger erforderlich.
AX ist ein Bit-Array, höchtes Bit für Funktion 37 ... niederstes Bit für Funktion 52
39h Schalter - Einstellungen lesen AX=39h
CX=Länge des Puffers
ES:DX=Zeiger auf Puffer
AX=0
CX=Zahl der zurückgegebenen Bytes
ES:DX=Zeiger auf Puffer
Maustreiber - Version 7.05 oder jünger erforderlich.
40h Position von MOUSE.INI ermitteln AX=40h ES:DX=Zeiger auf ASCIIZ - String Maustreiber - Version 8.00 oder jünger erforderlich.



Maske

Bit Bedeutung
0 Bewegung
1 Drücken der linken Taste
2 Loslassen der linken Taste
3 Drücken der rechten Taste
4 Loslassen der rechten Taste
5 Drücken der mittleren Taste
6 Loslassen der mittleren Taste



Register bei Aufruf des Handlers

Register Bedeutung
AX Bedingungsmaske (wie CX beim Aufruf)
BX Tastenstatus
CX X-Koordinate des Mauszeigers
DX Y-Koordinate des Mauszeigers

Die Register dürfen nicht verändert werden.


Informationen für Subroutine

Register Bedeutung
AX Bedingungsmaske (wie CX beim Aufruf)
BX Tastenstatus
CX X-Koordinate des Mauszeigers
DX Y-Koordinate des Mauszeigers
SI horizontaler Mauszähler (Mickeys)
DI vertikaler Mauszähler (Mickeys)

Die Register dürfen nicht verändert werden.


Aufruf-Maske

Bit Bedeutung
0 Bewegung
1 Drücken der linken Taste
2 Loslassen der linken Taste
3 Drücken der rechten Taste
4 Loslassen der rechten Taste
5 SHIFT mit Maustaste gedrückt
6 CTRL mit Maustaste gedrückt
7 ALT mit Maustaste gedrückt



Bildschirm- und Cursor-Masken

Auswirkung der Kombinationen Von Bildschirm- und Cursor-Masken

Bit Bildschirmmaske Bit Cursormaske Ergebnis Bildschirm-Bit
0 0 0
0 1 1
1 0 unverändert
1 1 invertiert

Bildschirmdaten zur Zeichendarstellung

Bit-Nummer* Beschreibung Kommentar
15 Blinken 1=Zeichen blinkt
12-14 Hintergrundfarbe -
11 Intensität? 1=intensiv
8-10 Vordergrundfarbe -
0-7 Zeichen ASCII-Wert

*=Bytes sind in umgekehrter Reihenfolge gespeichert.


Vorgabeparameter des Maustreibers

Parameter Wert Kommentar
Cursor-Position Bildschirmmitte z.B. 100,320 für CGA im 640*200 Mono-Modus
Internes Cursor-Flag -1 Cursor verdeckt
Grafik-Cursor -1, -1 Pfeil
Text-Cursor Invers-Video-Block Invertier-Box
Interrupt-Aufrufmaske Alle 0 Keine Interrupt-Routine angegeben
Lichtgriffel-Emulation Aktiviert -
CRT - Seitennummer 0 -
Mausbew./Pixelverhältnis (horizontal) 8 bis 8 -
Mausbew./Pixelverhältnis (vertikal) 16 bis 8 -
Min. Cursorposition (horizontal) 0 -
Min. Cursorposition (vertikal) 0 -
Max. Cursorposition (horizontal) Variabel Auf maximalen x-Wert -1 des Video-Modus gesetzt
Max. Cursorposition (vertikal) Variabel Auf maximalen y-Wert -1 des Video-Modus gesetzt
Doppelgeschwindigkeitsschwelle 64 Mausbewegungen pro Sekunde -



Beschleunigungskurven

Tabellenteil Offset (dezimal) Länge (in Bytes) Beschreibung
Kurvenlänge 0 1 Anzahl Zählung / Faktoren der ersten Kurve*
1 1 Anzahl Zählung / Faktoren der zweiten Kurve*
2 1 Anzahl Zählung / Faktoren der dritten Kurve*
3 1 Anzahl Zählung / Faktoren der vierten Kurve*
Mauszähler 4 32 Zähler-Array der ersten Kurve
36 32 Zähler-Array der zweiten Kurve
68 32 Zähler-Array der dritten Kurve
100 32 Zähler-Array der vierten Kurve
Skal.-Faktoren 132 32 Skalierungs-Array der ersten Kurve
164 32 Skalierungs-Array der zweiten Kurve
196 32 Skalierungs-Array der dritten Kurve
228 32 Skalierungs-Array der vierten Kurve
Kurvennamen 260 16 ASCII-String der ersten Kurve**
276 16 ASCII-String der zweiten Kurve**
292 16 ASCII-String der dritten Kurve**
308 16 ASCII-String der vierten Kurve**

*=Werte sollten im Bereich von 1 - 32 sein.
**=ohne Null-Begrenzer.


Schaltereinstellungen, Pufferaufbau (Funktion 39h)

Offset Inhalt Bereich
0 Maustyp (LO-nibble) 0-5
0 Maus-Port (HO-nibble) 0-4
1 Sprache 0-10
2 horizontale Empfindlichkeit 0-100
3 vertikale Empfindlichkeit 0-100
4 Doppel-Schwelle 0-100
5 ballistische Kurve 1-4
6 Interrupt-Rate 1-4
7 Cursor-Überschr.Maske 0-255
8 Laptop-Anpassung 0-255
9 Speichertyp 0-2
10 Super-VGA-Unterstützung 0-1
11 Rotations-Winkel 0-359
13 Primärtaste 1-4
14 Sekundärtaste 1-4
15 Klicksperre ein 0-1
16 Beschleunigungs-Kurvendaten (Bytes 16-339)



Die Funktionen können mit dem Turbo-Pascal-eigenen Assembler aufgerufen werden. Ein Anwendungsbeispiel könnte so aussehen:


ASM

  mov {...}

  {Register entsprechend der Spalte "Eingabe" belegen...}

  int $33;

  mov {...}

  {Register auslesen gemäß der Spalte "Ausgabe"...}

END;

Bei den Mausfunktionen wird normalerweise im Register AX die Funktionsnummer übergeben.

Alle Angaben ohne Gewähr.

Achtung: bitte Hinweise zur Aktualitšt der Daten beachten! Copyright