| Zeile 353: | Zeile 353: | ||
| ''Byte 3'' || colspan=8 | Y Movement seit dem letztem Daten-Paket | | ''Byte 3'' || colspan=8 | Y Movement seit dem letztem Daten-Paket | ||
|} | |} | ||
| + | |||
| + | Die Overflow-Bits geben an, ob die Maus auf der jeweiligen Achse zu schnell bewegt wurden. Die Sign-Bits geben an, ob die jeweiligen Movements negativ sind. Und die Button-Bits geben an, ob die jeweilige Taste gedrückt ist. Der Beispiel-Code, der das Daten-Paket der Maus abholt ist beim Code für den [[#Handler-Code|IRQ12-Handler]] in der Rubrik Anwendung zu finden. | ||
<pre> | <pre> | ||
| − | + | 147 irq12-handler: | |
| − | + | . zum Anschauend des Codes gehe bitte zum IRQ12-Handler in der Rubrik Anwendung (Link in Text oben) | |
| − | + | . | |
| − | |||
| − | |||
| − | |||
| − | |||
. | . | ||
| − | |||
. | . | ||
| − | + | 286 .read.mouse: | |
| + | 287 push cx ;cx sichern | ||
| + | 288 mov cx,0FFFFh ;auf cx die Höchstmögliche Zahl schieben, damit getmb nicht alles aufhält, nur da es auf ein Byte wartet | ||
| + | 289 .waitforbytes: ;und da loop zuerst dekremntiert und dann vergleicht, obs 0 ist, ist 0 die höchste Zahl für cx | ||
| + | 290 in al,64h ;nach al das Statusregister vom Keyboard-Contoller holen | ||
| + | 291 test al,20h ;und schauen, ob Bit5 gesetzt ist, ob im Mouse-Output-Buffer Daten warten | ||
| + | 292 jnz .byte_ready ;wenn ja, dann springe aus dem loop heruas | ||
| + | 293 loop .waitforbytes ;ansonsten führe loop-schleife fort, spätestens bis cx 0 ist | ||
| + | 294 pop cx ;stelle cx wieder her | ||
| + | 295 mov ah,1 ;zeroflag löschen, indem 1 auf ah gemoved wird, damit dies dem anwender gegeben werden kann | ||
| + | 296 or ah,ah ;und setze ggf. das zeroflag, damit der user gleich danach jz o.ä. schreiben kann | ||
| + | 297 ret ;und springe zum Aufrufsort zurück | ||
| + | 298 .byte_ready: ;wenn IP hier ist, dann wartet ein Byte darauf abgeholt zu werden | ||
| + | 299 in al,60h ;jetzt holen wir vom Mouse-Output-Buffer das lang ersehnte Byte :) | ||
| + | 300 pop cx ;und cx wiederherstellen | ||
| + | 301 xor ah,ah ;und lösche ah, da bei fehler auf ah der errorcode ist; setze ggf. zeroflag (macht xor...) | ||
| + | 302 ret ;zum Abschluss springen wir zum Aufrufsort zurück; das Byte liegt dabei in al und ZF zeigt Erfolg bei 1 an | ||
| + | 303 ;************************* wartet eine Weile ob Daten kommen und speichert diese ggf. in al ab ************************* | ||
</pre> | </pre> | ||
| Zeile 828: | Zeile 842: | ||
Das Original dieses Dokuments ist auch [http://maxinator.meugster.net/index2.php?site=http://maxinator.meugster.net/programming/ps2mouse/00600064mouse.html hier] zu finde und stammt von mir. | Das Original dieses Dokuments ist auch [http://maxinator.meugster.net/index2.php?site=http://maxinator.meugster.net/programming/ps2mouse/00600064mouse.html hier] zu finde und stammt von mir. | ||
| − | --[[Benutzer:Maxinator|Maxinator]] | + | --[[Benutzer:Maxinator|Maxinator]] 22:02, 11. Nov 2007 (CET) |