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) ?
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.
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
Ich "vermute" das alle Bretter mit PS2-Mouseanschluss auch in ihrem Bios den Int 15h und die dortige Funktionen für PS2 mitbringen.
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