Hallo.
Ich mal wieder
Ich suche einige Tutorials, wie man eigene Maus-Treiber schreibt. Ich google schon wie wild, aber z. B. finde ich keine genaue Beschreibung der PS/2-Funktionen im INT 15h. Nur fertige Codes
Erstmal würd es mir reichen, eine Maus im Textmodus zu betreiben - denn bisher fehlt meinem Betriebssystem eben eine Maus. Das würde mir schon weitere Möglichkeiten bieten. Und vorerst würde eine PS/2-Maus auch reichen. Ach ja.. gibt es diese PS/2-routinen im BIOS erst mit neueren Boards und bei PS/2-Rechner, oder hat sowas eigentlich jeder Rechner mit PS/2-Port (z.B. mein 486) ?
Maus-Tutorial?
Re: Maus-Tutorial?
In meinen Beitrag(vom Do 22. Apr 2010, 18:03) zur PS2-Mouseabfrage über INT 15h benutze ich keinen Treiber, sondern nur den PS2-Mousehandler innerhalb meiner Anwendungen.Brueggi hat geschrieben:Hallo.
Ich mal wieder
Ich suche einige Tutorials, wie man eigene Maus-Treiber schreibt. Ich google schon wie wild, aber z. B. finde ich keine genaue Beschreibung der PS/2-Funktionen im INT 15h. Nur fertige Codes
Erstmal würd es mir reichen, eine Maus im Textmodus zu betreiben - denn bisher fehlt meinem Betriebssystem eben eine Maus. Das würde mir schon weitere Möglichkeiten bieten. Und vorerst würde eine PS/2-Maus auch reichen. Ach ja.. gibt es diese PS/2-routinen im BIOS erst mit neueren Boards und bei PS/2-Rechner, oder hat sowas eigentlich jeder Rechner mit PS/2-Port (z.B. mein 486) ?
http://www.dosforum.de/viewtopic.php?f= ... 163#p15163
Im Quellcode der Cutemouse findet man daneben auch die Möglichkeit damit einen Treiber zu erstellen.
http://cutemouse.sourceforge.net/
Folgende Subroutinen zeigen wie man es in etwa macht um den PS2-Mouse-Handler zu initialisieren:
Code: Alles auswählen
checkPS2:
int 11h ; get equipment list
test al, 3
jz noPS2 ; jump if PS/2-Mouse not indicated
mov bh,3
mov ax, 0C205h
int 15h ; initialize mouse, bh=datasize
jc noPS2
mov bh,3
mov ax, 0C203h
int 15h ; set mouse resolution bh
jc noPS2
mov ax, cs
mov es, ax
mov bx, OFFSET PS2dummy
mov ax, 0C207h
int 15h ; mouse, es:bx=ptr to handler
jc noPS2
xor bx, bx
mov es, bx ; mouse, es:bx=ptr to handler
mov ax, 0C207h
int 15h
ret
noPS2:
stc
ret
PS2dummy:
retf
;---------------------------------------------------------
enablePS2:
call disablePS2
mov ax, cs
mov es, ax
mov bx, OFFSET IRQhandler
mov ax, 0C207h ; es:bx=ptr to handler
int 15h
mov bh,1 ; set mouse on
mov ax, 0C200h
int 15h
ret
;-------------------------------
disablePS2:
xor bx, bx ; set mouse off
mov ax, 0C200h
int 15h
xor bx, bx
mov es, bx
mov ax, 0C207h ; es:bx=ptr to handler
int 15h
ret
;---------------------------------------------------------------------------
IRQhandler:
assume ds:nothing,es:nothing
cld
push ds
push es
pusha
mov ax, cs
mov ds, ax
mov bp,sp
mov al,[bp+24+6] ; buttons
mov bl,al
shl al,3 ; CF=Y sign bit
sbb ch,ch ; signed extension 9->16 bit
cbw ; extend X sign bit
mov al,[bp+24+4] ; AX=X movement
mov cl,[bp+24+2] ; CX=Y movement
xchg bx,ax
neg cx ; reverse Y movement
popa
pop es
pop ds
retf
Im anderen Fall gibt es noch die Möglichkeit eine PS2-Mouse über den Tastaturkontroller nur über Portzugriffe zu initialisieren und abzufragen.
Aus Faulheit habe ich das jedoch immer noch nicht selber realisiert, ich habe darüber aber schon eine Diskussion geführt,
die ich im Moment aber auf die Schnelle nicht wiederfinde(grrrrr). Ich werde später weitersuchen.
Angehängt:
So das habe ich jetzt dann auch getan, aber das gesuchte mal wieder nicht gefunden. Dafür aber andere Beiträge (leider wie oft in englisch) u.A von Alexei A. Frounze:
"Here's a source for incomplete PS/2 mouse driver which actually works (A386assembler is required):"
https://groups.google.com/group/comp.la ... PS2+Mouse+
https://groups.google.com/group/comp.la ... 245365fefd
(Auf diese Weise über Ports habe ich es selber aber noch nicht ausprobiert.)
Dirk
Re: Maus-Tutorial?
Hallo.
Danke für die Antwort Ich habe auch mal einen Beispiel-Code aus dem Internet probiert. Der greift direkt auf die PS/2-Maus über den Tastatur-Controller zu.
Soweit so gut - wäre genau ausreichend für meine Zwecke. Aber... Auf meinem Dell Laptop geht der Treiber, sogar mit dem Touchpad - auf dem 486er (und da muss er eigentlich laufen) schaltet sich irgendwie die Tastatur ab. Der Computer selbst läuft weiter... Ich hab die Stelle auch schon lokalisiert - sobald die Tastatur das Kommando $D4 (was ja signalisiert, das der folgende Befehl für die Maus ist) erhält, schaltet sie sich ab und das wars (die Maus rührt sich auch nicht). Weiss jemand Rat?
Danke für die Antwort Ich habe auch mal einen Beispiel-Code aus dem Internet probiert. Der greift direkt auf die PS/2-Maus über den Tastatur-Controller zu.
Soweit so gut - wäre genau ausreichend für meine Zwecke. Aber... Auf meinem Dell Laptop geht der Treiber, sogar mit dem Touchpad - auf dem 486er (und da muss er eigentlich laufen) schaltet sich irgendwie die Tastatur ab. Der Computer selbst läuft weiter... Ich hab die Stelle auch schon lokalisiert - sobald die Tastatur das Kommando $D4 (was ja signalisiert, das der folgende Befehl für die Maus ist) erhält, schaltet sie sich ab und das wars (die Maus rührt sich auch nicht). Weiss jemand Rat?
Re: Maus-Tutorial?
Ich hab schonmal eine Maus am COM-Port hardwaremäßig abgefragt. Das ist gar nicht so schwer und dabei könnt ich auch helfen (war allerdings sowieso nur als Test gedacht.)
PS/2-Maus (über INT 15h) hab ich noch nicht selbst gemacht.
Für die Maus-Dinge in meinen Programmen gehe ich immer davon aus, daß schon ein Maustreiber an INT 33h geladen ist.
PS/2-Maus (über INT 15h) hab ich noch nicht selbst gemacht.
Für die Maus-Dinge in meinen Programmen gehe ich immer davon aus, daß schon ein Maustreiber an INT 33h geladen ist.
Re: Maus-Tutorial?
Muss danach die Tastatur nicht wieder mit einem anderen Befehl eingeschaltet werden?Brueggi hat geschrieben:Hallo.
Danke für die Antwort Ich habe auch mal einen Beispiel-Code aus dem Internet probiert. Der greift direkt auf die PS/2-Maus über den Tastatur-Controller zu.
Soweit so gut - wäre genau ausreichend für meine Zwecke. Aber... Auf meinem Dell Laptop geht der Treiber, sogar mit dem Touchpad - auf dem 486er (und da muss er eigentlich laufen) schaltet sich irgendwie die Tastatur ab. Der Computer selbst läuft weiter... Ich hab die Stelle auch schon lokalisiert - sobald die Tastatur das Kommando $D4 (was ja signalisiert, das der folgende Befehl für die Maus ist) erhält, schaltet sie sich ab und das wars (die Maus rührt sich auch nicht). Weiss jemand Rat?
Dirk
Re: Maus-Tutorial?
Gute Frage. Hab noch Dokument für die Maus-Befehle und Infos über den PS/2-Port gefunden. Da steht nichts davon, das die Tastatur wieder eingeschaltet werden muss. Ach ja, die BIOS-Variante hab ich probiert - sowas kennt der 486 nicht... Offenbar war das zu der Zeit wirklich nur PS/2-Systemem vorbehalten (oder nur bestimmten Herstellern). Ich hab mal den Code etwas variiert und statt $F4 (Enable Packets) den befehl $F2 (GetID) an die Maus geschickt und siehe da - die ID wird geschickt, und die Tastatur läuft weiter... Ich bleib dran.
@DOSferatu: Hast Du da noch irgendwelche Codes? Das wäre auch sehr interessant, da ich so mit einem Treiber COM-Port und PS/2-Port abdecken könnte Ich schreib auch einen entsprechenden (C)-Vermerk mit in die Init-Meldung des Treibers
@DOSferatu: Hast Du da noch irgendwelche Codes? Das wäre auch sehr interessant, da ich so mit einem Treiber COM-Port und PS/2-Port abdecken könnte Ich schreib auch einen entsprechenden (C)-Vermerk mit in die Init-Meldung des Treibers