home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / mouse / menumous.arc / MENUMOUS.ASM next >
Assembly Source File  |  1988-11-06  |  4KB  |  169 lines

  1.          TITLE     Ram-Resident Microsoft Mouse Driver
  2.  
  3. ;Mouse Movement is mapped to up,down,left,right arrow keys
  4. ;Left Button  ==> <Esc>
  5. ;Right Button ==> <Enter>
  6.  
  7. CODE     SEGMENT
  8.          ORG       100H
  9.          ASSUME    CS:CODE,DS:CODE,ES:CODE
  10. BEGIN:   JMP       START
  11.  
  12. fn_home        equ  4700h
  13. fn_end         equ  4f00h
  14. lt_arr         equ  4b00h
  15. rt_arr         equ  4d00h
  16. up_arr         equ  4800h
  17. dn_arr         equ  5000h
  18. carr_rtn       equ  1c0dh
  19. esc_key        equ  011bh
  20.  
  21. mouse_int      equ  51
  22. get_butt_press equ  5
  23. read_mouse_mot equ  11
  24. set_subr_mask  equ  12
  25. set_sens       equ  15
  26.  
  27. lt_button      equ  0
  28. rt_button      equ  1
  29. horiz_sens     equ  10
  30. vert_sens      equ  4
  31.  
  32. horiz_pos      dw   0
  33. vert_pos       dw   0
  34.  
  35. USER_INPUT_MASK    PROC     FAR         
  36.          STI
  37.          PUSH      AX
  38.          PUSH      BX
  39.          PUSH      CX
  40.          PUSH      DX
  41.          PUSH      DI
  42.          push       ds
  43.  
  44.          push       cs
  45.          pop        ds
  46.          CLD
  47.  
  48.           mov       ax,get_butt_press
  49.           mov       bx,lt_button
  50.           int       mouse_int
  51.           cmp       bx,0
  52.           je        chk_rt_button
  53.           mov       ax,esc_key
  54.           call      enter
  55.           jmp       return
  56.  
  57. chk_rt_button:
  58.           mov       ax,get_butt_press
  59.           mov       bx,rt_button
  60.           int       mouse_int
  61.           cmp       bx,0
  62.           je        chk_motion
  63.           mov       ax,carr_rtn
  64.           call      enter
  65.           jmp       return
  66.  
  67. chk_motion:
  68.          MOV       AX,read_mouse_mot
  69.          INT       mouse_int
  70.          mov        ax,horiz_pos
  71.          add        ax,cx
  72.          mov        horiz_pos,ax
  73.          cmp        ax,0
  74.          jnl        already_pos
  75.          not        ax
  76.          inc        ax
  77.  
  78. already_pos:
  79.          CMP       aX,horiz_sens
  80.          Jl        VERT
  81.          cmp       horiz_pos,0
  82.          JNS       RIGHT
  83.  
  84. LEFT:    MOV       AX,lt_arr
  85.          mov       horiz_pos,0
  86.          mov       vert_pos,0
  87.          CALL      ENTER
  88.          JMP       SHORT VERT
  89.  
  90. RIGHT:   MOV       AX,rt_arr
  91.          mov       vert_pos,0
  92.          mov       horiz_pos,0
  93.          CALL      ENTER
  94.  
  95. VERT:    
  96.          mov        ax,vert_pos
  97.          add        ax,dx
  98.          mov        vert_pos,ax
  99.          cmp        ax,0
  100.          jnl        already_pos1
  101.          not        ax
  102.          inc        ax
  103. already_pos1:
  104.          CMP       aX,vert_sens
  105.          Jl        return
  106.          CMP       vert_pos,0
  107.          JNS       DOWN
  108.  
  109. UP:      MOV       AX,up_arr
  110.          mov       vert_pos,0
  111.          mov       horiz_pos,0
  112.          CALL      ENTER
  113.          JMP       RETURN
  114.  
  115. DOWN:    MOV       AX,dn_arr
  116.          mov       vert_pos,0
  117.          mov       horiz_pos,0
  118.          CALL      ENTER
  119.  
  120. RETURN:
  121.          pop       ds
  122.          POP       DI
  123.          POP       DX
  124.          POP       CX
  125.          POP       BX
  126.          POP       AX
  127.          RET
  128. USER_INPUT_MASK    ENDP
  129.  
  130. ENTER    PROC      NEAR
  131.          PUSH      ES
  132.          PUSH      SI
  133.          PUSH      DI
  134.          MOV       DI,40H
  135.          MOV       ES,DI
  136.          MOV       BX,ES:[1CH]
  137.          MOV       SI,BX
  138.          ADD       BX,2
  139.          CMP       BX,3EH
  140.          JNE       HUNKY_DORY
  141.          MOV       BX,1EH
  142. HUNKY_DORY:
  143.          CMP       BX,ES:[1AH]
  144.          JE        END
  145.          MOV       ES:[SI],AX
  146.          MOV       ES:[1CH],BX
  147. END:     POP       DI
  148.          POP       SI
  149.          POP       ES
  150.          RET
  151. ENTER    ENDP
  152.  
  153. DEVICE_DRIVER_END  LABEL    BYTE
  154.  
  155. START:
  156.          MOV       DX,OFFSET USER_INPUT_MASK
  157.          MOV       AX,set_subr_mask
  158.          MOV       CX,0000000000001011B
  159.          INT       mouse_int
  160.          MOV       AX,set_sens
  161.          MOV       CX,3
  162.          MOV       DX,3
  163.          INT       mouse_int
  164.          LEA       DX,DEVICE_DRIVER_END
  165.          INT       27H
  166. CODE     ENDS
  167.          END       BEGIN
  168. 
  169.