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...