rendered paste bodyMOV AX, CS
MOV DS, AX
MOV ES, AX
JMP MAINP
PS2SET:
mov al, 0xa8
out 0x64, al
call CHKPRT
ret
CHKPRT:
xor cx, cx
.again:
in al, 0x64
test al, 2
jz .go
jmp .again
.go
ret
WMOUS:
mov al, 0xd4
out 0x64, al
call CHKPRT
ret
MBUFFUL:
xor cx, cx
.mn:
in al, 0x54
test al, 0x20
jz .mnn
loop .mn
.mnn:
ret
ACTMOUS:
call WMOUS
mov al, 0xf4
out 0x60, al
call CHKPRT
call CHKMOUS
ret
CHKMOUS:
mov bl, 0
xor cx, cx
.vrd:
in al, 0x64
test al, 1
jnz .yy
loop .vrd
mov bl, 1
.yy:
ret
DKEYB:
mov al, 0xad
out 0x64, al
call CHKPRT
ret
EKEYB:
mov al, 0xae
out 0x64, al
call CHKPRT
ret
GETB:
.cagain
call CHKMOUS
or bl, bl
jnz .cagain
call DKEYB
xor ax, ax
in al, 0x60
mov dl, al
call EKEYB
mov al, dl
ret
GETFIRST:
call GETB
xor ah, ah
mov bl, al
and bl, 1
mov BYTE [LBUTTON], bl
mov bl, al
and bl, 2
shr bl, 1
mov BYTE [RBUTTON], bl
mov bl, al
and bl, 4
shr bl, 2
mov BYTE [MBUTTON], bl
mov bl, al
and bl, 16
shr bl, 4
mov BYTE [XCOORDN], bl
mov bl, al
and bl, 32
shr bl, 5
mov BYTE [YCOORDN], bl
mov bl, al
and bl, 64
shr bl, 6
mov BYTE [XFLOW], bl
mov bl, al
and bl, 128
shr bl, 7
mov BYTE [YFLOW], bl
ret
GETSECOND:
call GETB
xor ah, ah
mov BYTE [XCOORD], al
ret
GETTHIRD:
call GETB
xor ah, ah
mov BYTE [YCOORD], al
ret
MAINP:
call PS2SET
call ACTMOUS
call GETB
.main
call GETFIRST
call GETSECOND
call GETTHIRD
; mov BYTE [row], 15
; mov BYTE [col], 00
;
; call GOTOXY
;
; mov si, strcdx
; call disp
; mov al, BYTE [XCOORDN]
; or al, al
; jz .negative
; mov si, strneg
; call disp
; jmp .positive
;.negative
; mov si, strsp
; call disp
;.positive
; xor ah, ah
; mov al, BYTE [XCOORD]
; call DISPDEC
; mov si, stretr
; call disp
;
; mov si, strcdy
; call disp
; mov al, BYTE [YCOORDN]
; or al, al
; jz .negativex
; mov si, strneg
; call disp
; jmp .positivex
;.negativex
; mov si, strsp
; call disp
;.positivex
; xor ah, ah
; mov al, BYTE [YCOORD]
; call DISPDEC
; mov si, stretr
; call disp
;
; mov si, strlbt
; call disp
; mov al, BYTE [LBUTTON]
; xor ah, ah
; call DISPDEC
; mov si, stretr
; call disp
;
; mov si, strrbt
; call disp
; mov al, BYTE [RBUTTON]
; xor ah, ah
; call DISPDEC
; mov si, stretr
; call disp
;
; mov si, strmbt
; call disp
; mov al, BYTE [MBUTTON]
; xor ah, ah
; call DISPDEC
; mov si, stretr
; call disp
;
;
;
; xor ax, ax
; mov ah, 0x11
; int 0x16
; jnz quitprog
jmp .main
quitprog:
; mov ah, 0x4C
; int 0x21
DISPDEC:
mov BYTE [zerow], 0x00
mov WORD [varbuff], ax
xor ax, ax
xor cx, cx
xor dx, dx
mov bx, 10000
mov WORD [deel], bx
.mainl
mov bx, WORD [deel]
mov ax, WORD [varbuff]
xor dx, dx
xor cx, cx
div bx
mov WORD [varbuff], dx
jmp .ydisp
.vdisp
cmp BYTE [zerow], 0x00
je .nodisp
.ydisp
mov ah, 0x0E
add al, 48
mov bx, 1
int 0x10
mov BYTE [zerow], 0x01
jmp .yydis
.nodisp
.yydis
xor dx, dx
xor cx, cx
xor bx, bx
mov ax, WORD [deel]
cmp ax, 1
je .bver
cmp ax, 0
je .bver
mov bx, 10
div bx
mov WORD [deel], ax
jmp .mainl
.bver
ret
disp:
.HEAD
lodsb
or al, al
jz .DONE
mov ah, 0x0E
mov bx, 1
int 0x10
jmp .HEAD
.DONE:
ret
GOTOXY:
mov ah, 2
mov bh, 0
mov dl, BYTE [col]
mov dh, BYTE [row]
int 0x10
ret
LBUTTON db 0x00
RBUTTON db 0x00
MBUTTON db 0x00
XCOORD db 0x00
YCOORD db 0x00
XCOORDN db 0x00
YCOORDN db 0x00
XFLOW db 0x00
YFLOW db 0x00
deel dw 0x0000
varbuff dw 0x0000
zerow db 0x00
strlbt db "Left Button: ", 0x00
strrbt db "Right button: ", 0x00
strmbt db "Middle button: ", 0x00
strcdx db "Mouse moved (X): ", 0x00
strcdy db "Mouse moved (Y): ", 0x00
stretr db 0x0D, 0x0A, 0x00
strneg db "-", 0x00
strsp db " ", 0x00
row db 0x00
col db 0x00