All pastes #157182 Raw Edit

ch100

public text v1 · immutable
·published 2006-09-01 10:47 UTC
rendered paste body
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