Urządzenia assembler - mysz

0

Witam :)
ciekawi mnie czy jest standard odnośnie komunikacji z urządzeniami, np mysz, klawiatura.
podłączając je do portu ps/2 próbowałem je oprogramować na porcie 60h i 64h tylko takie informacje znalazłem w internecie...

jednak to co zrzucają jest mniej więcej śmieszne.
nie wiele można z tego zrobić

i tutaj pada to ostateczne pytanie :
jak można oprogramować jakiekolwiek urządzenie skoro nie ma nigdzie informacji czego ono oczekuje? nie da się zgadywać...

z kartą graficzną jest łatwo bo mało że jest przerwanie 10h to jeszcze mamy ładnie mapowaną pamięć b800 i a000

nie oczekuje żadnego gotowca, tylko jakieś wskazówki. :)

już szybko sprostuje
bez systemu operacyjnego
assembler
kod pod rmode

komendy in,out

0

Nie ma żadnych materiałów?
http://wiki.osdev.org/PS/2_Keyboard :P

0

Przyznam tego nie znalazłem... pewnie dlatego że konkretów to tam nie ma... no ok,, wiem co wysłać ale na jaki port? gdzie dostanę odpowiedź? szukałem wcześniej też myszy pod usb, lub cokolwiek pod usb to już czarna magia, nikt nie potrafi nic wyjaśnić... nawet konkretnie książki o tym nie znajdziesz... że już o urządzeniach na pci nie wspomnę.. tam to już jest wolna amerykanka...
Jeśli uda mi się czegoś nauczyć haha to zrobię jakiś artykuł na ten temat..

0

Masz na samym dole linki do gotowych kodów, jeśli się w tym nie potrafisz połapać.
Praktycznie każdy przykładowy OS ma obsługę klawiatury przez PS/2, a tych masz masę na osdev wiki oraz forum.
Z kolei USB to zupełnie inna bajka.

0

nic te przykłady nie wnoszą, to co za pomocą nich można zrobić nie różni się niczym od przerwania 16h a powiem więcej na przerwaniu 16h to i klawiatura usb zadziała, ale do konkretu...

mam myszkę,
i robię tak jak piszą tj.
na początek wysyłam 0xF4 na port 60h aby włączyć
po czym pobieram dane 0xEB
z portu 64h
na porcie 60h pobiera mi skany klawiszy klawiatury
i próbuje odebrać
po pobraniu al z portu 64h = nic a nic
i powiedz mi że jasno jest tam wszystko opisane...

0

nie stawiaj
entera
w niepotrzebnych

miejscach. shift jest
także bardzo przydatnym
klawiszem.


Wracając do problemu: prawdę mówiąc ciężko mi sprecyzować, co możesz robić źle. Najprościej porównaj sobie swój kod np. z tym http://forum.osdev.org/viewtopic.php?t=10247
0

Już znalazłem przyczynę... zrobiłem kilka błędów po drodze... i co najśmieszniejsze takie byki że aż strach... ale bywa w asmie

tutaj cały kod:

mouse_install:
mov al,1
call mouse_wait
mov al,0xA8
out 64h,al
mov al,1
call mouse_wait

mov al,0x20
out 64h,al

mov al,0
call mouse_wait

in al,60h
or al,2
mov [_status],al

mov al,1
call mouse_wait

mov al,[_status]
out 60h,al

;.....aktywaca myszymov
mov al,0xF6
call mouse_write

call mouse_read

mov al,0xF4
call mouse_write

call mouse_read  



mov ax,0000h
mov es,ax
xor di,di
mov di,48h

mov al,0h
mov [es:di],al
inc di
mov al,0h
mov [es:di],al
inc di
mov al,0h
mov [es:di],al
inc di
mov al,06h
mov [es:di],al
inc di

ret
;--------------------------------------------------------------------------------
mouse_wait:;//al char
mov cx,10000

or al,al
jz jzero

or al,al
jnz jnzero

jmp ko_mou

jzero: ;;; jesli zero
in al,64h
and al,1
cmp al,1
je ko_mou

loop jzero
 
jmp ko_mou

jnzero: ;;;;;jesli rozny od zera
in al,64h
and al,2
cmp al,0
je ko_mou


loop jnzero


ko_mou:
ret
;.....................................................................
mouse_write: ;;;; w al parametr

mov ah,al
mov al,1
call mouse_wait
mov al,0xD4
out 64h,al

mov al,1
call mouse_wait
mov al,ah
out 60h,al

ret
;----------------------------------------------------
mouse_read:
mov al,0
call mouse_wait
in al,60h
ret 
;....................................................
_status db 0

jeśli znajdziecie jakiś błąd.. to piszcie,, kod działa... problem mały pojawia się gdy podpiąłem procedurę pod przerwanie
napisałem coś takiego:

przerwanie12:

xor dx,dx
xor cx,cx
in al,60h
mov cl,al

in al,60h
mov dh,al

in al,60h
mov dl,al
iret

kursor który rysuje na ekranie niby się rusza.. ale nie w sposób którego oczekujemy :) zastanawiam się czy na pewno może to być w przerwaniu... ponieważ wywołując to przerwanie (nazwę to swoimi słowami) synchronizacja się nie uda...

0

Protokół PS/2 na poziomie elektrycznym:
http://www.computer-engineering.org/ps2protocol/

Oraz na poziomie informatycznym, dla myszy i klawiatury:
http://www.computer-engineering.org/ps2mouse/
http://www.computer-engineering.org/ps2keyboard/

Oczywiście urządzenia na USB obsługuje się zupełnie inaczej, chyba że w BIOS-ie jest włączony tryb emulacji PS/2 (nazywa się to „legacy USB support” albo podobnie).

Stare myszki na porcie COM obsługuje się jeszcze inaczej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1