MOV 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