Новичок
Профиль
Группа: Участник
Сообщений: 2
Регистрация: 10.3.2009
Репутация: нет Всего: нет
|
Написать драйвер мыши, принимает сообщение мыши и передвигает курсор в виде символов в заданном направлении и выполняет следующие команды при нажатии клавиш R и L. 1)вниз-влево 2)вниз-вправо 3)вверх-вправо 4)вверх-вправо на границе: остановка курсора на краю, L--смена символа, R--выход. Код | .486 .8087
com1 equ 2F8h
MODEL SMALL
write macro port,symbol mov dx,port mov al,symbol out dx,al endm
read macro symbol,port mov dx,port in al,dx mov symbol,al endm
DATA SEGMENT use16 byte1 db ? byte2 db ? byte3 db ?
x db 40 y db 12
dividerx db 8 dividery db 8
deltax db 0 deltay db 0
cursor db '^/*'
DATA ENDS
CODE SEGMENT use16
ASSUME cs:CODE, ds:DATA, ss:STACK
WaitByte proc mov dx,com1+5 waitloop: in al,dx test al,00000001b jz waitloop read al,com1 ret WaitByte endp
OutSymbol proc push ax
;set position of cursor mov dh,y mov dl,x mov ax,0200h xor bx,bx int 10h
;print symbol pop ax mov ah,0eh int 10h ret OutSymbol endp
FindDeltas proc mov ah,byte1 mov al,byte2 shl ah,6 and ah,11000000b or ah,al sar ax,8 mov dh,dividerx idiv dh mov deltax,al
mov ah,byte1 mov al,byte3 shl ah,4 and ah,11000000b or ah,al sar ax,8 mov dh,dividery idiv dh mov deltay,al ret FindDeltas endp
AddToX proc mov bl,x add bl,al cmp bl,80 jc proceed mov bl,cl proceed: mov x,bl ret AddToX endp
AddToY proc mov bl,y add bl,al cmp bl,25 jc proceed2 mov bl,cl
proceed2: mov y,bl ret AddToY endp
MakeMove proc mov al,deltax test al,al js left
right: ;down-left mov cl,0 call AddToY neg al mov cl,79 call AddToX jmp checky
left: ;up mov cl,24 call AddToY
checky: mov al,deltay test al,al js up
down: ;down-right mov cl,0 call AddToY mov cl,0 call AddToX jmp return
up: ;up-right mov cl,24 call AddToY neg al mov cl,0 call AddToX
return: ret MakeMove endp
begin: mov dx,DATA mov ds,dx
;init port
;set optioning mode write com1+3,80h ;set 1200 bits per sec write com1,60h write com1+1,00h ;set usual mode write com1+3,00000010b ;do not allow interrupts write com1,00h
;set power write com1+4,0Bh
;init screen ;clear mov ax,3h int 10h ;hide cursor mov ah,1 mov cx,2020h int 10h
;print symbol mov al,cursor call OutSymbol
;message loop readbytes: call WaitByte test al,01000000b jz readbytes xor al,01000000b mov byte1,al
call WaitByte test al,11000000b jnz readbytes mov byte2,al
call WaitByte test al,11000000b jnz readbytes mov byte3,al
;Clear cursor mov al,' ' call OutSymbol
;RClick test byte1,00010000b jnz exit
;LClick test byte1,00100000b jz ch_movement mov x,40 mov y,12
;check movement ch_movement: call FindDeltas call MakeMove
;draw symbol mov al,cursor call OutSymbol
;jump back to reading bytes jmp readbytes
;end program exit: mov ax,3h int 10h MOV AX,4C00h INT 21h
CODE ends
STACK 200h END begin
|
Мне надо переделать движение курсора, смену символа проверить(сомневаюсь что все правильно), и остановить курсор на краю экрана. Заранее всем спасибо! Это сообщение отредактировал(а) Kostorav - 25.3.2009, 12:59
Присоединённый файл ( Кол-во скачиваний: 14 )
MOUSE.ASM 2,80 Kb
|