Archiv verlassen und diese Seite im Standarddesign anzeigen : Maus-Programmierung ohne Interupts
Lord_Otter
11.08.2002, 14:44
Hi !
Weiß jemand, wie man die Maus ohne Interupts programmieren kann ?
Ich habe mal ein Turbo Pascal-Programm gesehen, das Maus benutzt, aber keine Interupts verwendet.
Leider habe ich den Quelltext nicht mehr, und kann dieses Programm nicht studieren.
kann dir jetzt nicht mit code dienen, aber es gibt generell zwei möglichkeiten zur abfrage der hardware:
1. interrupts: die maus bzw. ihr port sendet einen interrupt, der dann den programmcode aufruft, in dem die maus abgefragt wird.
2. polling: in selbstbestimmten zeitabständen fragst du den status der maus btw. ihres ports ab.
dann meinst du wohl das zweite. die frage lautet jetzt nur noch: wie krieg ich die koordinaten der maus aus dem treiber ;)
Felix Kaiser
11.08.2002, 15:41
Der DOS Mausinterrupt 33h bietet eine Funktion, mit der man einen Handler installieren kann, der bei jeder Mausaktion aufgerufen wird. Mausinformationen werden über eine Datenstruktur mitgeliefert, schlage einfach mal nach unter Interrupt 33h. Ich empfehle dazu Ralf Brown's Interrupt List (kannste dir mit Google suchen lassen).
Würde mans wortwörtlich nehmen wie du das sagst, würdes so gesehen garnicht gehen, weil Mausbewegungen etc. lösen immer einen Hardwareinterrupt (IRQ) aus.
Lord_Otter
11.08.2002, 18:57
PROCEDURE InitMouse;ASSEMBLER;
ASM
MOV AX,0
INT 33h
END;
PROCEDURE ShowMouse;ASSEMBLER;
ASM
MOV AX,1
INT 33h
END;
PROCEDURE HideMouse;ASSEMBLER;
ASM
MOV AX,2
INT 33h
END;
PROCEDURE GetMouseInfo(VAR tasten,x,y:Word);ASSEMBLER;
ASM
MOV AX,3
INT 33h
LES DI,tasten
MOV ES:[DI],BX
LES DI,x
MOV ES:[DI],CX
LES DI,y
MOV ES:[DI],DX
END;
So bdiene ich momentan den Maus-Interupt 33h.
Aber ich wollte das gerne mal ohne schaffen, und das muss gehen, denn Interupts sind ja auch nur Routinen, und die machen das ja auch ohne andere Interupts.
Weiß vielleicht jemand, welcher der Maus-Port ist ?
Felix Kaiser
11.08.2002, 23:53
Lass es, die Hardware IRQs lass den Maustreiber machen. Die PS/2 Maus teilt sich mit der Tastatur den selben Port, benutzen nur beide andere IRQs. Serielle Mäuse laufen über einen seriellen Port und den zugehörigen IRQ und InPort Mäuse laufen in der Regel nur mit dem zugehörigen Treiber. Nicht umsonst wurde damals in DOS der Interrupt 33h eingeführt, wo der aktuelle Mausstatus, der von den IRQs ständig aktualisiert wird, abgefragt werden kann.
Lord_Otter
07.11.2003, 09:50
OK, in letzter Zeit habe ich wieder damit angefangen.
Ich bin gerade dabei, eine Startdiskette zu erstellen, mit der ich meine Programme vor dem Betriebssystem laden (booten) kann, und das klappt auch ganz gut.
Aber den Maus-Interrupt kann ich nicht verwenden. Es gibt doch eine Datei, MOUSE.COM oder so. Kann ich die einfach laden oder benutzt die andere Ints, die nicht funktionieren ?
Felix Kaiser
07.11.2003, 14:58
Dazu muss der DOS Kern bereits geladen sein...
Lord_Otter
07.11.2003, 20:07
Tja, schade.
Vielleicht fällt mir ja noch was ein. Und zur Not unterstütze ich halt nur meine Maus :)
Felix Kaiser
08.11.2003, 10:35
Wenn du nicht unbedingt Support für Busmäuse brauchst, mach dir einen eigenen Treiber. Gibt da gute Vorlagen... für PS/2 gibt es eine Funktionssammlung im BIOS, Int 15h glaube. Und bei seriellen brauchst du nur den COM-Port öffnen und dann das verarbeiten, was am Interrupt einflattert.
Lord_Otter
08.11.2003, 13:12
OK, danke.
Dann werd' ich mich damit mla beschäftigen.
Eine Frage noch:
Wenn ich jetzt versuche, einen eigenen Int 33h zu schreiben, wie sorge ich dafür, dass er automatisch ausgeführt wird, wenn sich die Maus bewegt, Tasten gedrückt werden, etc. ?
du musst auf den int des mausports reagieren :D
Lord_Otter
08.11.2003, 16:48
Und welcher ist das oder gibt es den auch erst unter DOS ?
Felix Kaiser
08.11.2003, 20:26
Hardware-Ereignisse laufen für gewöhnlich auf Hardware-Interrupt (IRQs) ein. PS/2 hat IRQ12, COM1 IRQ4 und COM2 IRQ3, für gewöhnlich...
Lord_Otter
09.11.2003, 19:17
Gut, dann versuch ich jetzt einfach mal, den entsprechenden IRQ umzulenken.
Wird noch irgendwas nützliches in die Register geschrieben, was ich benutzen kann oder nicht ?
Felix Kaiser
10.11.2003, 14:54
Google doch einfach mal. Ich hab damals das GrafX Paket gefunden, anhand deren Source ich das serielle Mausprotokoll erfassen konnte. Mit etwas rumprobieren kommt man auch leicht selbst auf das Format des PS/2 Mausprotokolls. Du musst einfach nur das Gerät aktivieren, dann einfach am IRQ die Daten des Geräts empfangen und auswerten.
Lord_Otter
11.11.2003, 14:28
Dan guck ich gleich mal nach GrafX.
Lord_Otter
21.11.2003, 21:30
Gerade eben bin ich per Zufall bei einer Site gelandet, wo erklärt wird, wie man einen PS/2-Maustreiber macht:
http://dev.remo.lt/osdev/?id=12
Und das der Serial-Maus habe ich jetzt auch verstanden (GrafX).
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.