|
|
这是我学习assembly language第一周所写的一份PS/2 for 鼠标测试程序(DOS)。其中Mouse驱动部分我参照网上的一些代码,但已无从知道出处。呵呵,你还能找到这样好的PS/2的代码吗?如能帮助到您,希望您也能共享一些东西让大家分享。。+ L1 \" y$ M! h9 n- H# j, r& h% N
5 O) W' H' K" B! }0 z8 }5 `7 _, i
代码很乱,我不重新排版了。 Download回去,你们自己排!这样也好多看看代码 - ;
% p( f5 W% `9 ]+ o6 w" R2 y8 T - ; Ufoit PS2 Mouse test program Ver 0.9
' o( d8 C3 D5 e4 l# h. A* d - ; By Bini.Yi 易祝兵
. K' X, k& E6 ~ - ; http://www.ufoit.com 计匠网
% v. g$ l# C6 H+ ~) C( q& t1 m - ; 2002/04/06 YYYY/MM/DD
0 w% n; m0 a! Z- `8 a" K - ;3 t: ~, A% f5 o
- ; , m; V P0 m/ a/ |
- ; This program test the mouse button click and move.9 X' S* G2 T7 n5 A& @$ d3 l
- ;; R( G2 d s8 I# y/ h4 Q7 _
- / J2 M9 Q1 m6 Y: i5 \7 V* G3 Q
- .model tiny
" N- U( C7 Q. |- o& }5 s* T6 @ - .586
3 C+ x+ i5 ]" U, e' R* C4 r - .code+ l T' [# |7 p( c
- .stack 100h; B- Q1 T4 ~" X
- .startup2 _# |9 b( @7 Z
- pusha
# S+ f Q. T0 b$ t - mov ax, 3533h2 F2 S# r$ }4 u
- int 21h
8 w/ X4 P% V P! S. C' a - mov word ptr cs:[old331],es& X4 o3 A8 ^- k; ?% C; s& x% [
- mov word ptr cs:[old332],bx
7 o3 L9 n# R. } H6 s - mov ax, 3574h
7 }1 j$ S2 k% Y - int 21h* C5 X. a( H# J7 O; w* F
- mov word ptr cs:[old741],es
+ t9 C1 W6 f# g* u - mov word ptr cs:[old742],bx/ ~* k; H9 J/ ]9 R# z: D
- popa9 P F" l; w/ {' y* E, N2 @
- call memmouse
) \6 n( [) |- ?/ c% n* V! c% r - mov ah, 00
2 ]0 `+ t" ~+ m3 P$ g - mov al, 03
, U3 h9 p6 f% }$ O3 \1 U* h - int 10h( w2 J3 I5 x8 S( ?) |) N8 x
- mov ah, 06. V. G" _( D- l) u2 O# d
- mov al, 0
9 m- X- [ H8 K+ V0 _4 ?1 n8 i - mov cx, 0: D0 ]- f8 H0 } e! W0 W/ i
- mov dh, 24$ P3 {. V1 l9 i& _1 n
- mov dl, 798 |# l+ B8 H% P4 x( e
- mov bh, 07h' A' L7 \; W; S% g L0 C3 F: M
- int 10h
/ b% B& M) f* p1 S" A - mov ax, 0000( |: W& {5 |1 o& U
- mov bx, 0002
6 m- t0 v8 {0 M3 N M8 ~ - int 33h% [$ a& y" l/ r7 b0 a2 g0 b3 C
- cmp ax, 0000 ;if no mouse drive install0 V( R* E; E; |
- je errormsg ;show error MSG$ C7 n( n8 v4 _
- mov ah, 02
% T* x# }2 ]' z) |1 T2 z5 u; c - mov bh, 00
M3 B& W% |0 n/ [& q - mov dh, 25 ;Move point out screen
( _* O% X1 a' `3 I - mov dl, 79
1 k1 p5 l, y& ?. d7 s - int 10h3 ^6 N- O3 O B% K, J. v
- call showmsg ;Show info
5 p8 v: `; j1 p" r; a4 {& m: M" b: O/ t - mov ax, 0001- a6 j% D3 h W8 A- ^: K
- int 33h
) n) Y+ Y* h2 ? - ; mov ax, 000ah
6 O/ a$ }6 a2 C# B* D( s z- I! F - ; mov bx, 0000
* K# e3 m; l( o0 j8 n( e - ; mov cl, 0h
* w- Y6 s3 J2 }+ I7 W' ` - ; mov ch, 0F0h D. e! E3 @3 h$ J4 a3 ^
- ; mov dl, 0h' M: f9 n ^: I# R
- ; mov dh, 0F0h
' |' R/ |* ]9 v. K; I/ E7 C - ; int 33h. l* f# c* y- _- f4 o& Q
- mov ax, 0004h! S9 u2 Z! N( \( L B4 i' B
- mov cx, 03194 p- n$ |* o V, j
- mov dx, 0103
! L2 e7 v6 n; f - int 33h
5 a/ \( c" `' w. g8 v( R A! _% |4 K - casemo: ;Case button click and point move
1 E) }' u2 Y0 {5 H/ ^( G# w2 [7 A5 S - mov ax, 000bh ;and keyboard press; H% X2 Q/ {2 s' B' f
- int 33h; R( B- a0 K1 {8 X6 g! K2 e
- cmp cx, 00h ;if point move....X1 Z& ] g8 F7 X ?9 A6 y
- jne xmov9 Y' P9 s f- ` U0 W- ~9 ?
- cmp dx, 00h ;if point move....Y( R* ^) H# f! g4 l# J
- jne ymov
) L, ~3 \* s8 Q8 _: V& [) _, j - xymovend: ;X.Y move end+ @& ]: A* @9 H9 d9 f
- mov ax, 0003
7 G6 q) s% Z! x# J4 F - int 33h
+ P. P: X0 P, n% t, I, j) k - cmp bx, 0001 ;if left button click show ON, F+ L# T2 D4 L# b9 o O
- mov si, 1828
4 s: L+ E( I( w8 }4 { - je listl. [6 v$ B4 W1 m# i$ s/ e4 s+ g& \
- mov si, 1828: ?! j9 n1 T% p# n1 ~1 U) N
- jne nlistl ;if left no click show OFF
) s& |) ]) I3 Y - testr:8 p$ _& E4 j+ @ O2 t+ Z2 y
- cmp bx, 0002 ;if right button click show ON
% p7 n$ Y$ N6 k% `' @ ?; d - mov si,1842, y. @" D& A0 v7 [# G
- je listr0 E# X5 d. g j1 [' J$ c1 A+ Q
- mov si,1842 ;if right no click show OFF
* s% R$ _; Y2 b8 n! R) P - jne nlistl
0 x$ z* J1 w( x* A8 C% e& ? - casekey:
; {) m: {4 `2 K( J. ?* C& I - mov ah, 01 ;if any key press jump check$ x4 m- U, |+ S& ^
- int 16h9 R& }$ w% M* Y6 F
- jne kpress
; ^; j5 a* |3 e% ~0 u - mov al, [chkl] ;check x flag
* v0 v4 F' K2 P% P9 q5 r - cmp al, 02h
9 S5 }' D5 S+ L+ z. [8 B, }! z - jnb chkok; _2 `; F Y; Q. `' q- y
- jmp casemo# X5 `3 m! C& X1 t) G
- xmov: ;if X moved, get the X flag+1: V+ s* X( T' M
- mov al, [chkl]
+ {, {" k9 q5 o S - inc al$ p4 l6 v+ j- ?+ r
- mov [chkl], al
5 v6 i7 \) s' ` - call passok
z( W5 {: U% n5 e+ o" U1 s - jmp xymovend
8 W/ c& a, q+ G* f+ p3 W - ymov: ;if Y moved, get the X flag+1
: |: l8 r; t/ c3 z& N9 c. C* [, a - mov al, [chkr]8 d, {, A, v1 v, h) {0 W0 b
- inc al
1 ^+ m( D; ?( T& o) _& G - mov [chkr], al" u! z9 K8 C8 H6 @/ [$ S$ a
- call passok a% Y x- x5 z( X7 ~8 s
- jmp xymovend
I5 I" l* L# U# f8 D$ ~ - 6 q% P) K" ` b# t+ g
- passok proc near
" T Q9 h' |" B1 \+ G - mov al, [okcheck]- l4 d2 A7 G* g; p- T/ k% n
- cmp al, 1
2 T" \: g6 ~" b* I4 Z - je let0% k/ `% Z; L, p. ~6 b2 f8 @
- jmp passret
% [# o' `, p7 u6 C" t; m# L7 C - let0:
$ Q: a% K. X5 M" w; ~ | - mov [pass], 13 x) v7 n3 M. h; C, V1 I& v( [& u
- passret:! x" Q* I! a4 z- q* F1 ]
- ret n( a0 H4 d( s. N, _- ? m
- passok endp
/ I- F6 ]8 P/ o3 S2 W t
5 ^ q; L3 O& L% ]/ t% z" [6 s' U1 a0 s- chkok: ;if x flag and y flag>=2 and... then PASS
% ?6 t- C) b7 w, o, V( |* { - mov al, [chkr]- w2 b9 ^6 w! ^- Y$ E9 L+ I) |
- cmp al, 02h( K; y' o. N. t1 l
- jb casemo0 p$ M; h0 b" j: Y" u% d9 m: P) D5 Y
- mov al, [lk]
' N: A' S. i7 h - cmp al, 1' B5 P6 \: [: J; M* a3 `) c* M
- jne casemo
3 D* ]) z" e3 ~# X, U- d2 S - mov al, [rk]9 r; P+ D3 O2 f' l4 T
- cmp al, 1
& O& t$ J4 x& f5 E$ ? - jne casemo
/ f/ u+ G& m6 i: h5 J4 L - mov [okcheck], 10 s2 ]8 a3 z$ }) W
- mov al, [pass]
0 o4 q: r/ A6 [6 P1 G" s, Q - cmp al, 1
& b: q2 c* A: D0 n0 a - jne casemo3 [& J, m# E) m6 Q4 J' k
- mov ax,0002h, }/ r' W! q' g3 ?' M# m
- int 33h
4 T2 C h- J# v, O: k D - call cleascr' |4 s; t: ]! p8 w
9 K& L- b1 m; i) y- call oldint3 @0 e. T3 b, f& F- I1 j% k( R; N! Z
- mov ax, 04c00h2 h5 ]( `# L) A% u. _
- int 21h
. u( S) f- w8 s4 ]% f! ^4 c
U/ Z- k1 \; E5 W3 {* ^& W- okexit:. D+ j! k) I/ z Q; ~
- mov ah, 4ch" l- P5 `0 y5 f. `. D: U+ d8 Q
- mov al, 09 m' G) j" `9 ]! I
- int 21h
. B% u) o, R" w0 s" y: `( C - listl: ;Show ON
; q" A; k' Z o: G5 w, y - pusha
7 }7 t7 |5 T$ C3 \4 J - mov ax, 0b800h
' Z0 u" H3 G, e" a - mov es, ax
1 S+ l! B; v: e2 n# j' } - mov ah, 47h
8 i, l/ m; K2 j- l$ W+ I! r - mov al, 20h
) J+ d4 K7 j0 V" p# M6 q2 s1 p - mov es:[si], ax
8 ]/ M# _2 F( h. s - add si, 02
+ Y9 Y+ d5 u' E! V - mov al, 4fh
! `: I8 E2 ]+ q$ L$ d; |. e. k& B - mov es:[si], ax
( n, y' J, R8 U, d, { - mov al, 4eh6 l: G2 H; u5 \# `- t- S
- add si, 02* K1 W# E' l; F1 a
- mov es:[si], ax
. L$ ?% |; A) k6 q7 M - mov [lk], 1
8 T/ S! {1 g( p0 p4 k% i, r* D4 h - popa4 c- X! k7 k; \* I5 N
- jmp testr
$ M) H8 r( J% O - listr: ;Show ON
' {# W0 Z# e7 ]7 [$ @& x$ L. Q - pusha
Y7 b% ^- C# I' T& Z - mov ax, 0b800h
5 D$ N0 g- j3 T6 A5 G - mov es, ax
. R# x( `' ]* S6 |3 W# R- [8 V# L - mov ah, 47h
; d2 L7 R5 \% }& _) T" _$ W v - mov al, 20h% L% U4 }2 p% X4 f4 t! \. s' T
- mov es:[si], ax
% v# a6 P# @ ]7 N2 }/ Z- O q - add si, 02; I" d- F; M, K* L4 t# ^+ R2 q
- mov al, 4fh6 w, S/ O% @: g: Y: o3 V& ]
- mov es:[si], ax
9 ]" j2 U9 Y, a9 S. T - mov al, 4eh
; X b3 v A, l, L7 F5 R - add si, 02
0 M% Z3 t! X I' ?; x5 }$ u' l; M - mov es:[si], ax
' P; S) A$ a% c* A/ D$ s - mov [rk], 1
4 f) s# ?7 \: O - popa
. z4 {- J5 k: [* S; ?) | - jmp casekey
3 k9 v9 T8 k5 j" M; h4 `; a0 ^& S' X- _ - $ u! @0 X1 P. w$ E% E t3 v- r
- nlistl: ;Show OFF
, P4 P1 r3 ^+ h0 y V3 m - pusha ; {+ t* g# R/ \7 C. \" Q
- mov ax, 0b800h5 ]- t+ |/ N9 I4 p9 ?1 r! u
- mov es, ax, F& ]3 x7 w# \, O+ m& J7 h, u c* h" _
- mov ah, 17h' N3 F' ~, t- w" b
- mov al, 4fh |0 n! U" U2 D9 x4 l7 } g
- mov es:[si], ax7 P& P; t" W$ U
- add si, 02 f; j8 b2 R) z
- mov al, 46h c9 g9 T% X* s0 q
- mov es:[si], ax% k+ P& R q+ v6 F* H
- mov al, 46h+ e2 p$ F; n, O' q2 u" r- t
- add si, 02
: S* J( M. R! }, P9 O( v! u! r1 l - mov es:[si], ax; k7 Q3 A* i/ U+ ^
- popa
' _( ^4 S8 j5 g2 O+ [ - cmp si, 1840* r1 V) o5 K, k4 ^
- jae casekey
0 l* W1 l" k' V$ O3 G - jmp testr8 b& e1 p1 v6 f% Q' Q* y
$ ? T- Y0 i1 `: f" i; l- kpress: ;Check key press if press<ESC> then EXIT' J5 q# O7 y: k6 S) {, t
- cmp ah, 01h ;and return a error- f! U, ^+ d) v7 P# ?$ K9 j
- je exit1' b& o: S; _: B" h5 a9 W) b* z; {7 ~! \$ T
- mov ah, 0ch ;if press other key then clear
0 d: N" N* B; z9 n - mov al, 00 ;keyboard buffer
' o: l7 @% Y, |3 s: ~ - int 21h, B( U% P% q+ ~; _0 |+ ^+ b
- jmp casemo
1 ?! i Q2 N/ F8 r
% F3 `- ~4 K X. V4 H2 x- errormsg: ;if mouse driver no install" k+ W( q; V/ t: o* b1 v
- call oldint" W' w0 p O0 G5 Y- P2 \4 Y
- lea dx, offset emsg
: P" {5 c0 m& _- b" J - mov ah, 09h
/ B' z1 u6 B$ p - int 21h% j' J0 [8 h! T \# H
- mov ah, 4ch5 }: I7 u3 t. {. U
- mov al, 25 l/ `, z- v7 V
- int 21h- `+ j* g# B& X4 m& c
- " D2 j5 q! W5 M+ V; S: f
- exit1: ;error exit) n7 Q) t* V) Q& A
- mov ax, 0002h
. I& f f }' r9 f, B$ Z6 B - int 33h
4 m5 v2 ]5 y" H1 L9 B5 f- l/ C& p1 [ - call cleascr3 f8 R, x) [3 C& K+ T, j
- call oldint
Y9 e: F0 u( J9 j8 r - mov ah, 4ch9 G. ^! w0 g% @4 A, c: c& c
- mov al, 01
! w# z0 Y0 T% l2 k. @% L - int 21h9 b* p2 @9 w( j0 d/ o. m
- $ R* v: G% p8 l) R
- cleascr proc near ;clear screen
$ t0 }) V5 B- u2 u$ J2 T - pusha
+ s4 t8 t8 S5 G+ A3 W - mov ah, 06
' X9 T2 X) w1 @5 L' c) l5 J; \8 { - mov al, 0! m: S. s" m$ ^& ~! R
- mov cx, 0
' `# j2 n8 ^2 j. L! Y+ g - mov dh, 24
+ |0 \2 n7 ~4 B' _1 X6 h/ L - mov dl, 79
7 G% o1 ^4 E# o - mov bh, 07h" v3 v2 e. f8 ^7 l
- int 10h3 k% h, m3 H/ X: N# H7 j1 \
- mov ah, 02
, }; r7 {" ?: n$ z H - mov bh, 00$ m! U2 n( Y0 t; }- T
- mov dh, 0
7 D) j5 F. ] j7 s4 `# O" o - mov dl, 07 d* ?9 C9 p( _
- int 10h7 d! x! C$ j0 P4 ]: d; @
- popa" E/ }' e& j( t! c
- ret# e, k4 k! c% [( L1 b
- cleascr endp
! t8 S$ e7 b! N+ _3 E$ b2 b6 C2 x - ) m. `$ v0 s% Q+ n
- showmsg proc near ;Show info$ s& Z) b( J8 Y3 T; I$ N- J5 |' @
- pusha
3 w/ G9 b* x- A - lea di, offset showms) { F, r( w' V- }! ^
- mov ax, 0b800h
% n3 y" |' l) S! T6 ?# l* {+ L - mov es, ax
% I9 n/ }$ x0 Q9 H, J m Y - mov si, 0& N; U0 ^; v u$ g& W" U
- mov cx, 480! R3 [+ Z6 v+ s# L, q+ Q
- mov ah, 07h
7 J6 l3 w' m, a4 Z0 l - @@:
6 S" [4 l& b b/ f5 ~2 p* ~ - mov al, 20h8 t) \7 C5 X: K3 {% Z
- mov es:[si], ax
; R# E# k' `4 r; g - add si, 2
7 ~- _% p# p g7 b, J- n - loop @b" k( S4 E" t& C+ Q1 J# R# t& u. l
- mov cx,880/ J4 f8 d( d8 q
- @@:
9 p; u0 g( X! t - mov al, [di]
5 U6 l0 n" a2 t g ?# _ S8 c - inc di) P. V+ s# X3 l& ?3 i4 s' Z
- cmp al,20h
# T" f- H/ b& u# s3 \& O - je showch1
* `# t$ h% l, L - mov ah, 17h
* O+ N! e$ n! H( ?7 ?/ z7 E - jmp showch3 3 q0 q) W9 l9 c* M# \
- showch1:
8 ~2 y" d4 C% {9 P3 R8 ?2 ]# j - mov ah, 07h 4 y: x! q, J2 G- V6 e
- showch3:; P A+ U7 r% k* A, G* E: S! w
- mov es:[si], ax9 T' ~4 ?* Y7 l0 q. C
- add si, 2
: ^# f# ^' i: |9 e# K1 e - loop @b
- L# u7 R# f+ r8 z3 \& a% T - popa2 z# H4 M1 u) ]' V3 c' W2 m
- ret9 W B) B1 S2 R. k
- showmsg endp
. D# `8 ?2 g- c- v2 {
8 O9 `0 @# C9 I! l$ |* a- oldint proc
+ j7 N- |; B* X3 w7 x& q: S8 C - pusha
9 N. D) j* j' K - mov ds, word ptr cs:[old331]: \! O4 B# z" W
- mov dx, word ptr cs:[old332]
( }+ W; a! w; i9 L% |& E; \; ? - mov ax, 2533h
9 l- ^8 C. x, M6 _9 h9 E1 @. S* X - int 21h: R' c+ r6 f1 d& A
- mov ds, word ptr cs:[old741]
* u* H U9 B# B- v+ |4 \ - mov dx, word ptr cs:[old742]
7 o9 v. c8 m7 V; ] - mov ax, 2574h
& T! u3 i) J$ f+ Z& j* Q - int 21h7 P" J8 z! k9 n% w
- popa! }) H, K ?* f2 c: x3 K1 k. Q. V
- ret
! |1 P) x4 u/ ?2 d - oldint endp
( t; l# B4 g& E; `9 }: n7 A
7 S' j5 Q' G7 O" I- memmouse proc
+ I$ }' o5 a) L. P: p7 W% B - xor ax,ax
# v* J- P/ I2 u1 q4 @3 z - int 33h% A3 }. `5 b4 M2 Q, u* p2 e4 T
- cmp ax,0ffffh( p" C" n: |$ w$ ?$ ^# ?
- jne not_loaded
2 B, T! Y8 X, E! [! x2 _, i7 O6 y - mov [memcopy], 1
2 r/ ]# h0 q+ e- B' ] - ret8 E) r) j& p. J* N) _" a8 {" ]2 @
-
, d; ?5 S2 a9 P# A. n - not_loaded: F1 T { _: F# W# S2 p3 c1 _+ c* W
- ; `7 a9 d, d( R( p+ M
- mov ax,2574h& F d( C& O/ Z( Y# u; M) s& i$ Z/ [
- mov dx,offset new_isr
# |% H+ M) Q2 S9 r - int 21h1 H4 P# E8 q" Z# E; Y, U
4 R4 b$ B' I8 x6 D4 ?5 N* `. J- mov ax,2533h: v" H1 K8 I8 g3 E! e7 [. V0 z
- mov dx,offset new_33+ W" r* f$ w9 {9 Z
- int 21h
" m! H6 f+ o% i - # ?. V8 m3 n, u8 @4 Q; d1 b) J- d, p a
- cli! r( f* k1 b* U1 b+ y, [
$ X( J" \. [0 d% ^: @0 Q0 f- mov bl,0a8h+ I9 Y: o) s! X( C4 Z+ B5 ^
- call keyboard_cmd. N4 x' U; A4 J- W/ i+ A
0 h+ C! y& k% _8 q! f4 c- mov bl,20h
7 ?; r0 o* ]0 n. w( o* P - call keyboard_cmd' l- N9 |4 q d F- S. T
- call keyboard_read
4 z! q" y$ a/ j" b" I8 o- v - or al,25 }9 E8 R! ?1 J2 T& h
- mov bl,60h; V9 t- Q. W8 p& U
- push ax# a' `, Z/ O' L8 x1 X& }
- call keyboard_cmd
7 P U/ ]% [/ }, ], @ - pop ax. V/ V# R9 L: n7 b! H2 I: x
- call keyboard_write7 A: ?' |- M, ^" o
" J0 o* `/ J- F% U- mov bl,0d4h
( q* C; `9 G2 H* V( V% g# q8 _ - call keyboard_cmd
R: }2 {! p/ M n1 M' t* T7 g - mov al,0f4h; l& F1 g8 u. y
- call keyboard_write
* u0 E3 g% n6 H, e2 M/ s2 S, s8 {& A
. U: V) | e% @0 X* E( z. j% g+ A- sti
8 }/ ^; b; r, i2 M) H7 v& A z4 b - ret+ x* Y( s1 q1 c5 u t7 g4 Q
- call_user_isr:
! Q2 i, }8 K6 o6 d* j$ e - db 60h4 Y5 I+ c" O* i: ~& d+ N
- mov cx,cs:[pos_x]
1 Q5 G. u+ |5 v$ m3 e5 R, G- t Q5 Z2 G - mov dx,cs:[pos_y]
' W0 p: P* y% a" U. K - mov di,0 ;cs:[x_move]
; C( J! U6 }' I X! C - mov si,0 ;cs:[y_move]
& B l1 J, a1 r! h2 p - mov word ptr cs:[x_move],0
9 G! l( o2 C6 X/ N+ g - mov word ptr cs:[y_move],0
. v# h# I3 S% f* A) p - mov bl,byte ptr cs:[buttons]
' F( r5 i. f% }, Q9 n9 d* v - xor bh,bh* A% D# P8 u& @0 h, ?- V
- call dword ptr cs:[user_subroutine]
5 u v+ Q) h: {; R1 e2 h - db 61h- q! f- z- H" ]$ L8 Q0 _
- ret8 A; {. Z- X* q; e2 `
- new_isr:
9 `4 h; |$ b, V - pushf( l' r( y4 d8 H2 H1 w0 Y5 d3 ~/ H
- cli4 W8 O( }- u$ h3 a; D5 V
- push ax
! R& m& F; G: F7 q _, L" u - push bx+ ^$ I: t' ^5 E2 b0 m
- push cx" _3 h5 o, E1 D k( C
- push dx
7 H; J! O7 b$ i7 C) Q - push di9 Z9 c" B( {7 l0 J
- push si
% U o! N- K- ~1 d; e - push es
) Z- r4 o# `# V9 A9 B$ C - push ds
# Z( b, V- Q8 F9 L4 x2 c5 q9 \
4 a1 @$ \+ l% I( i% k/ r) r- push cs
* I0 ~5 @- H$ t - pop ds6 A' n# ^- m7 k& o1 c0 o
- & b( {% Z5 D; m- h8 b4 i
- mov bl,0adh, j2 l; x! X4 l, w$ S+ ^* B% p
- call keyboard_cmd+ \4 Q) B% J4 L9 w
' h' v, r; m# B d- cmp byte ptr [first_time],0. {& ^- G8 C% ~* [! {% {4 d: T8 M
- je not_first_time3 T# g/ D; A$ f
- 5 \$ F1 z* k, Q2 t" t" A# J! h; q
- mov byte ptr [first_time],0" b7 l- ~! V+ l7 O
- call keyboard_read0 C% ?& f0 w* _4 ]
- call keyboard_read
5 J3 ^5 _( \+ F' e( M - call keyboard_read
' d; A, U" Q4 }# J$ i( D - jmp no_show
, f( x, W, m6 T7 p& p$ Z% T
; Y ^ N! x$ H# }" z- not_first_time:0 @7 G9 l. s3 q
- mov word ptr [temp_mask],00 j7 w* e9 ?/ Y5 k" R; x. H, S
- 0 `; @2 O* A# u* U ?. g6 B' d# R! @
- mov cx,[pos_x]
2 \9 {) N, @( M3 O - mov dx,[pos_y]$ R: J# b. s5 I: Q$ ]( P: }
; d7 t" ~- O# A, t9 F- call keyboard_read
& `; L7 N% m2 y" A2 r* ^5 U - and al,7 ;3
# _: Q5 C* V& D' U- a! J/ a6 _ - mov ah,[buttons]
0 A4 V; J& s( } S) v! i& K - mov [buttons],al
& ^9 w+ R! _, d" W# a - cmp al,ah* B @8 q. I+ G$ I1 u
- je no_button_change, x: q! ?- K5 o* @, D6 {( Z
- and al,3" y& ?8 B+ Q+ p! B
- and ah,3
7 T& Q z& w4 E - xor al,ah
/ p4 \, {2 M: I9 _ - xor bx,bx
# i& l7 F# f, A4 ` - , c7 `; g Q$ e+ [: E7 i$ T
- push ax; H/ f0 E! h0 |# g% D4 c
- test al,21 `- j5 P4 [/ v/ q4 P2 ?9 e* E0 h
- jz no_right_button_change
% [# z+ @7 ~/ O; S7 a - and ah,23 g' _' b; r' W
- jz right_button_pressed8 Z' F& }% n8 u; b( c
- or bx,16' M m( {; N S
- jmp no_right_button_change: i$ @1 d) x8 f
- right_button_pressed:" f0 j. D5 L+ o. r! p! ?) [! `6 W
- or bx,8
$ L- ^5 U# ^, V/ x: L" h - no_right_button_change:
) G0 b4 u) K% }& \ - & l) i+ `2 @3 a) a- Y( i
- pop ax) p- [& r4 ? s& N8 S
3 J0 o0 s% M. f( @, I% J& o; I- test al,1; n4 _& J: K: [! X+ s
- jz no_left_button_change9 y; J% d2 {& S
- and ah,1
# i5 z4 I/ ]# e% b, { - jz left_button_pressed
- u' {2 U, y0 ^8 u5 | - or bx,44 \* L8 ~3 F" x5 I0 G s
- jmp no_left_button_change
5 @- j& a0 W% A: S - left_button_pressed:
4 B! d/ l9 G- S1 J- o+ Z" Y - or bx,2
) V) |$ r1 F- t3 M5 ?& Q( G( ? - no_left_button_change:: f$ q2 `$ Y( a' P9 k
- : o9 o) o: F+ Z* b
- mov [temp_mask],bx: P/ G7 r8 ~8 q0 L4 I5 p
- . u+ [% ]% U; R$ \ H- J `: k2 L6 v
- no_button_change:6 o& [+ _$ {" E, N1 k9 l8 j% H* L
- call keyboard_read
4 H( K: k" q- Y3 {5 K - cbw
" L, x) K. T2 ] Q9 \% S - add [pos_x],ax) ]7 l6 i+ z$ {+ U/ T
- add [x_move],ax! F, v8 a/ T7 p6 q& ?( U
- mov ax,[x_min]
8 M0 h5 D/ Y( o# b# P) S$ m8 ~ - cmp [pos_x],ax
" \; k X6 S! v - jg good_hor1
d3 \7 z# l$ U# H - mov [pos_x],ax v. p5 _8 F2 E! R! ]
- good_hor1:9 q+ R6 I, L- X' |
- mov ax,[x_max]
( L8 f3 ^5 i, |" r+ v L R) I0 [ - cmp [pos_x],ax
8 M! N# \2 f3 ^& Y& H, ^ - jle good_hor2) |( U: l, ]8 v% s" B7 L5 ^; d: v
- mov [pos_x],ax# A& ~( t9 ~" C0 `+ R
- good_hor2:' S' B9 E3 m! w
: O; X' d# S. k& v2 p- call keyboard_read' [/ u; ?8 W" x, P, ]* u- m5 f
- neg al
# L) s1 o' M, g% O+ |, c+ K - cbw/ k2 h+ k2 v z& G5 H$ C4 l1 }0 F) W/ j
- add [pos_y],ax
. e4 l8 [% }4 `5 M$ W - add [y_move],ax& x. g, E0 U1 Z; h( m3 Y
- mov ax,[y_min]
0 O, B1 [( e: b. Z - cmp [pos_y],ax
4 {7 s0 e7 C. \) |4 u - jg good_ver1- _6 o# u4 ]- W" b+ t# w
- mov [pos_y],ax
1 V& f" Q7 s" X& B% L - good_ver1: P: c. j% E" `2 ~3 j/ c* m
- mov ax,[y_max]) @% A# n F& c% |9 o% k
- cmp [pos_y],ax& u0 j1 S! l/ Y9 I0 b5 u) l
- jle good_ver2# k5 {0 \& V5 K3 h
- mov [pos_y],ax6 Y# G/ m- A, L3 y. e0 X
- good_ver2:; Q2 N" r0 a. b. a
- % O. n% G6 N' d d0 g! M/ l
- mov ax,[x_move]4 v0 c. f- \5 M9 G, Q
- or ax,[y_move]& c* E7 U- X( f" S# y5 y a0 Z' x
- or ax,ax
: K& x1 d! x r2 ?1 l' U$ ] - jz no_change_position4 ~" k( r9 k: p3 Q8 L* }
- or word ptr [temp_mask],18 ~- A& F- Q/ F2 T- ^4 f( U, A
- no_change_position:3 A# E6 B. _8 J4 j$ o+ a. z) F
- : U4 X! p* d e. B. c
- mov ax,[temp_mask]7 o1 x/ N1 S. \# c
- and ax,[user_mask]( g2 B6 V2 u. O( _. `( X
- jz no_call_user
; E% V% F( i# M* x! U1 n4 k" k- d - call call_user_isr, x. s6 z. y- Y+ V/ t
- no_call_user:4 Y4 V+ }# D6 x* ]9 N; Y& T- S
- 8 {" L( i, s$ i$ A+ B' R7 j4 s A
- cmp byte ptr [sm_flag],1
* r+ k0 q+ A" I) z - jne no_show" Y8 W$ w* v5 | y1 v3 j2 M( N/ [
) T9 R1 p6 L# d. O0 g- shr cx,3
2 i0 ~! o* T, ?# k w - shr dx,3
) p8 L% W! ^( k$ b7 c - mov ax,80
8 c/ T$ x$ n/ d6 e - mul dl9 M& r# b# C: g% W* }
- add ax,cx
, {3 o( |2 W5 ]2 J8 e) d, v& ] - shl ax,1
) M& X; i( e) f" x" f - mov di,ax5 y6 f. W C; y- D4 v5 H
- mov ax,0b800h
9 N" z6 b; p! Z! ~! r - mov es,ax# Z; v9 Q0 E0 U7 V- `& t' _
- mov ax,[save_char], D. a& X8 V. Z# N! e# a
- stosw$ I1 v/ w& g, d' i3 h
- 4 \% j, I% D5 y* k% S/ U
- mov cx,[pos_x]) D- b: ^& e1 v, |9 E
- mov dx,[pos_y]" f3 i4 I/ a8 h( t5 X4 U2 _
- shr cx,3% I% W: C" b' n2 c! b1 t' }; X4 u
- shr dx,33 W+ [- b4 V5 ~4 \# w7 r
- mov ax,80
) X3 r/ G( L) _: n0 [+ H/ B( ~ - mul dl
' O% \% H$ v/ p0 B) G( h+ p - add ax,cx# Z: X6 W B& P$ r- V3 V
- shl ax,1
/ h8 i( P& L" |$ ~3 Z0 `! ^( n( P z7 w - mov di,ax
2 z" s# \- `/ h3 x - mov ax,0b800h! ^; Q& O% e2 } G: ?
- mov es,ax' N3 D5 Q- B; n" C2 t, q
- mov ax,es:[di]5 F$ i2 P9 {2 K+ N; W
- mov [save_char],ax) a7 }3 s! z) l4 v, F+ n7 Z6 ^
- not ah$ m$ R6 {$ i6 S6 o# |, U7 ?
- and ah,7fh% N( z& C- k* H9 P! J3 m0 Y5 l+ z
- stosw
: l r/ x; U: q8 I, S' N - no_show:; x3 b6 o6 ] p" P6 J
- mov bl,0aeh
2 ]0 \- J6 V4 R$ P# d2 P - call keyboard_cmd* T3 U/ x0 K! ]. }8 T4 [/ ~
& n4 q8 y+ \+ k- e/ Y6 W' x- mov al,20h
6 R+ j. W/ l4 N# C; L! |; D - out 0a0h,al, ~9 j7 H7 e1 u1 @. m @/ \; R
- out 20h,al$ R( r$ S# Z7 b6 \. T" O
- : U7 f+ w' h: @) S$ M( M$ I
- pop ds
& n5 n* L2 E- ~! Q \ - pop es
0 f7 N; _( }/ m. ]. T - pop si, Z5 S; X1 V& e9 |3 m1 i. x' }# Y: M
- pop di
0 a/ Q) [2 g1 L: [+ B3 J. [$ i& k - pop dx
8 r& |9 J( o% U - pop cx
; t5 N2 O: d. `0 D8 u" q - pop bx0 {" f) `2 s7 g5 h
- pop ax" ~- F" O) m4 R- ?
- popf
: `7 e) C8 I) \2 M9 U - iret
; y! g+ I: K* Z4 {$ d# b - Y! c9 l) c$ V1 g1 @! a2 h% f# A
- first_time db 14 {+ U$ I: h1 J$ {: D0 ^" I
- buttons db 0
% u( p) i: p' _ - pos_x dw 0& c! ?" N/ l4 h# n4 g4 z+ |( f
- pos_y dw 0
0 O" t) C9 r6 p2 S1 [. p$ I - sm_flag dw 05 Y% Z) g/ v' D! c2 l. ?4 G! A2 C( o# o
- save_char dw 0
( h% s2 u2 ]$ }& d% q+ { - x_move dw 06 o! N# Y; {$ V2 H
- y_move dw 0+ _/ B7 z2 h3 u6 ?! E2 ^. ]7 D7 r
- x_max dw 639& c6 v& V7 g+ F3 b& z9 n" z
- x_min dw 0
% `8 o9 e$ D- J/ z3 M - y_max dw 199
5 W" w4 k+ Y* q. ? - y_min dw 0
0 W9 O( r# f$ U2 h - user_subroutine dw 0,0
/ z% i6 t- Z9 Q6 R* w' J/ w% a( U - user_mask dw 0) Q* k9 y' L0 }9 d N% `1 {: u
- temp_mask dw 0
7 J9 Z" y3 y& O; j9 V
. {* X H$ ?0 G- keyboard_read:
, f1 L: h/ m+ r5 M! w8 ? - push cx
; Q& |+ s+ J0 L2 w - push dx1 l4 T% I& M5 w4 M. H. |
- xor cx,cx- S: }! t+ s+ _6 \( Y0 X* I8 s+ }
- key_read_loop: \. {7 t6 A6 I, p0 B1 o. W. S% x
- in al,64h
8 u% _0 D# m4 y# i. p - jmp $+2' K3 q s) d8 M9 R: W2 h* C3 j L
- jmp $+2
* \1 s; M) \! j* `! }* ~( Q; M w - test al,1! J: T/ J X9 Z# a6 Z
- jnz key_read_ready9 w$ G: G7 T. c& R. D$ R$ P/ w
- loop key_read_loop
& s W+ H# d, s; { - mov ah,1
2 F0 y$ F, \. A7 B; M% _6 w3 Z - jmp key_read_exit
, f4 U: m! R( r- n% b - key_read_ready:
6 b- h7 z( b/ T0 `! w6 ? - push cx
, D$ F/ k* B) N, ?8 e - mov cx,32
. z0 V1 A* l$ { - key_read_delay:
{) ?% ]$ \; M _3 P7 a$ { - jmp $+2( P2 I" v- |/ E6 Z8 o
- jmp $+2
1 u' W( a7 P! Q3 l9 ^ - loop key_read_delay( Q, X6 N" m* @1 r
! z! c( E: ~% Z+ _2 w' ?( {- pop cx
- H, l/ ~- t. {$ ~. Y w. g: W - , V8 A- _# c$ ~9 E. t$ i: G
- in al,60h
+ ~* E5 M4 s$ s$ W }' Q - jmp $+2
/ c0 c$ i* ]3 x( U+ H$ F' R' e& K - jmp $+22 y3 [( ~5 w, c* d9 b
- xor ah,ah
' j( F% x. B9 @! W - key_read_exit:. Z4 N* R) n+ R: f/ c5 u$ U5 W
- pop dx& V7 c- N( P5 t/ v5 Q7 j3 Y! `/ d* g
- pop cx; O/ U$ D1 p% J1 n8 y. A' `4 a6 L- v
- ret" L- F9 @# A7 E" m' h
9 ^% Y7 R& \8 z- keyboard_write:
- A6 q9 X! d" Q0 H% v7 U8 z - push cx% h5 s+ c+ l: |# {7 q- u8 n
- push dx
- r$ d m( W, _, H7 z" N - mov dl,al
. }9 \( \$ Q( Z - xor cx,cx
' B- K2 v$ q k ~+ a# r! l% u - kbd_wrt_loop1:
+ ?. h! F7 j! h) g% b- ]' {2 O4 V& K - in al,64h
' a) ~3 {# N* V! A! p/ ]! a* } - jmp $+2' v8 \" ?& d$ c6 _
- jmp $+2
+ p: i! G+ w( Y, P+ d+ \7 |% B$ z0 s - test al,20h
0 T9 V1 X/ f0 f - jz kbd_wrt_ok1
$ Z3 {4 v: z" ~: Z - : c, b; x" a/ b3 {* Q
- loop kbd_wrt_loop1
; Q0 l" W, z1 D1 r% Z8 B/ U
' Z9 I- F& p: t1 P8 H7 o& t# c5 B- mov ah,1* c+ v8 L3 f( i+ g5 d% N
- jmp kbd_wrt_exit
@( }) e+ D) h+ W2 h! u2 M. E - * }2 G5 Z' p. {# e+ f
- kbd_wrt_ok1:
+ ?* Z4 F0 I1 N+ D2 ^ - in al,60h
& @- v5 c( u( y$ t' c
: }; C: k- C* N( R, }9 B- w, r- xor cx,cx( @) b. Y* A+ {8 w8 M v/ j' B
- kbd_wrt_loop:2 s; o% x7 H+ ~, J/ I
- in al,64h
7 L! O y/ A# X3 [+ k, ` - jmp $+2( J# W: m. w" V- z% i' ]
- jmp $+2
# o( L" K2 Q, K& P - test al,2
& o7 m* P1 Y" ~ H - jz kbd_wrt_ok
1 U# e6 Z" p8 P4 S& o
2 J7 q# u$ W v9 U% K5 k) ]- loop kbd_wrt_loop
& V$ o, E& E2 w& v' R! x - ( g' f3 n9 }, \6 F" w3 r
- mov ah,1
% u2 u e: I+ u6 F" {4 D - jmp kbd_wrt_exit) ^% i7 g2 Q- h; V |! c
- + W& E, r. `2 s2 c0 ^# B
- kbd_wrt_ok:6 P1 K) s/ e3 e( o/ z) K0 o
- mov al,dl, y2 i& i6 @# G; a) x, {
- out 60h,al& s, y2 D/ W! f9 [ X
- jmp $+2+ r: L! j2 T+ b; U3 H
- jmp $+2
* P& m+ W8 S [7 [' S- Z- O S1 N0 P4 b - & ~( |8 N) s/ c$ d% x
- xor cx,cx! v# I1 C5 L6 v7 ^
- kbd_wrt_loop3:& ^1 `) R- D1 q2 v
- in al,64h8 }. g5 Z- {' x9 z# Q& u2 h
- jmp $+2
. T0 i+ o/ J/ z - jmp $+2
% j3 L8 [6 I; R w8 Y# K - test al,2) K5 b! ^# \" e6 ^, O7 [
- jz kbd_wrt_ok3) n$ l3 Y# p" s. J
- 4 B5 [; p) ~! a' c
- loop kbd_wrt_loop3
2 g- ]% w) m/ ?# V1 O - " c& |+ g! n2 \3 M6 i
- mov ah,1+ e6 H, j- ?/ ?$ V; K$ d" M
- jmp kbd_wrt_exit
! R' Y$ f" c: F' t - : u. \; H8 k, k. J2 x
- kbd_wrt_ok3:' z+ l5 `$ z" y2 I6 e" {
- mov ah,8' i5 |( O& s# ~7 A- Q
- kbd_wrt_loop4:
1 [- Q3 Y3 h0 Y! M0 E3 m - xor cx,cx2 h$ e- y9 s, y) q4 x. |
- kbd_wrt_loop5:
( X3 A* I+ T q( c" ~8 H$ O: T - in al,64h1 e& h* q: t! Z3 ~: z
- jmp $+24 u( e: ?" j6 u Q6 R4 s% [
- jmp $+2( J2 W! L, ^" J6 ]5 Y
- test al,1
3 T$ O, p6 C4 k6 u7 B - jnz kbd_wrt_ok4
. p/ t5 j( D9 X - 4 n D; I% Y3 X: V4 S# }; o
- loop kbd_wrt_loop5
: L1 G! c; L; V# F" s! _3 ~2 K. @9 I6 [
4 o, A" N/ K$ {, x- dec ah
, F* G x% D1 S% o; e; O- L; B - jnz kbd_wrt_loop4
$ {( g; ?9 e' m9 }( j8 L - , F" r6 A. ^/ e0 W0 u- m$ @
- kbd_wrt_ok4:
7 a) y* L% t- ^ _% b - xor ah,ah+ G* ~! X3 R* ^* S; t2 u: g$ {
- kbd_wrt_exit:! `* H4 W* H3 _8 _, o- h- @
- pop dx
8 K; r4 p7 v: a$ B( S; R5 U - pop cx
0 T( U' t/ C* I% Z" P - ret. g8 r/ o/ J6 r- Q# W% B
- - F; |7 y0 ~' X) f
- keyboard_cmd:
1 V$ n: h" z. w8 G3 t- C0 c - xor cx,cx- |# A' r+ v; \9 _
- cmd_wait:
) a/ f: x! M0 {+ P' G - in al,64h' @) h1 E A- ~! l
- jmp $+2
8 d z, t3 \. ^5 ~ - jmp $+2- F! R0 [5 E2 S
- test al,2, |4 O" \ v3 [- f
- jz cmd_send
' r+ E x: M9 R3 n+ ] - loop cmd_wait9 Q/ o$ F& d% E; F' o0 h
8 z' [) n9 L- E; c5 L) m% O7 M+ t6 W- jmp cmd_error
4 \& K) X) f# ~; U, I# |: G1 x
6 Q D+ y9 t& d- cmd_send:
% c; j5 w# \ I8 C4 O: `& O. _, ?0 z$ Y - mov al,bl
2 l1 r! U( I3 |4 J \9 j - out 64h,al
* A8 [8 d# K, c7 L' L% M - jmp $+26 ^5 Y3 u" m5 F4 v8 x( W
- jmp $+2
5 }0 d8 X5 S7 E* m: J9 f5 u
2 X: P$ W+ M0 A1 E3 c% L/ o7 W- xor cx,cx: V: X7 P* d" H2 W# `$ x$ ?7 A1 Q
- cmd_accept:
5 B0 L( t }5 z - in al,64h
9 D5 e5 u& t J, X - jmp $+2
8 y+ m- _. z z4 ?% l# m" P9 f! p - jmp $+23 g# p9 A( L( ]
- test al,2
) \! Z$ H1 c& H/ g- s - jz cmd_ok/ w$ Q4 e6 S+ N% P0 @6 k. P
- loop cmd_accept1 A$ q4 u$ Z' F
- k+ q( B# Z1 T* u0 X$ e7 Z- cmd_error:
9 p9 @( K# |9 M6 t - mov ah,1' d+ t, }, m/ N0 H' P, _
- jmp cmd_exit. e4 g! w+ }# q& V
- cmd_ok:
; G' w9 H. p- u5 ?) R - xor ah,ah
( i: x8 E4 H/ z' T) _4 _ - cmd_exit:# P6 D: l: @) v" z! R& L- e/ ] D& a
- ret7 S$ f" w7 d. k6 ]9 @/ v
- + j" F2 N5 v) s* C! g% _
- new_33:5 ~% T1 k% u2 h* I2 v) ]. [: q7 A
- cli
1 l# ~! y; R8 `* n - cmp al,0
! E5 P! f4 c0 D8 a3 C q - je reset_mouse
' e5 L; M3 F4 H$ W - cmp al,15 i" s1 Z, |$ Q* Q1 i$ W0 J
- je show_mouse& e. a* m' r' _8 m
- cmp al,21 `' ~3 d3 x# Y3 R; `3 F
- je hide_mouse* g0 H3 a; b o4 V( W3 M
- cmp al,3
4 x1 A3 R! w* g: G! ]! p - je get_pos3 B# O! c$ L1 [. [. w$ ~8 i% Y7 @: m
- cmp al,4
- a6 X3 |! V# m2 ~9 B - je set_pos4 ?# o$ I5 G7 e/ I* R: Y! k( c
- cmp al,74 g3 P2 Q% j$ C' s" ^! ~, V
- je set_hor_pos
2 ^' L C1 q- E0 R# Q" ^# F- X - cmp al,8
, l! ^6 V9 a+ M - je set_ver_pos
. R" s6 ?& V( m - cmp al,0bh- F1 ?: b. S' K) O- Q9 C6 g; u
- je get_mouse_movement
$ p8 r7 N+ e# S8 F. L: V6 E( r/ g - cmp al,0ch
) V6 [3 z- |9 r9 B2 ]/ }( L3 r - je set_subroutines
1 k) \( w. C- D7 c. U, _! I* c - cmp al,14h0 ~ J L% V2 n# _7 X! r
- je swap_subroutines
& D5 U; ?3 X3 t+ g* j - iret6 D5 \* [2 M; X- _* y" i/ A
- ! c8 t9 h5 z4 V; E3 j& f* K
- reset_mouse:5 H7 J6 @" x7 @. N+ [
- jmp _reset_mouse+ l; v" ]1 `1 [: {7 |6 ?1 d
- show_mouse:% s4 |( ^! i9 p* R1 h. Y$ P+ R
- jmp _show_mouse
! j- L- n% J/ t: w. c) P - hide_mouse:* e7 G" |9 p. k6 M
- jmp _hide_mouse
+ \4 i( G! {; N2 ]9 |( v6 H - get_pos:- Z. B1 p$ r8 d3 K- t
- jmp _get_pos
( b+ P1 w: @4 K" H/ ` p - set_pos:. E7 P: s; P2 J1 A: E
- jmp _set_pos7 y, Q3 u3 Y+ H
- set_hor_pos:9 B* N- A* N n- I, c
- jmp _set_hor_pos
, B3 n( u$ f0 T8 s5 _ - set_ver_pos:
8 W6 ?) U! L) `$ j( o1 e - jmp _set_ver_pos8 Q* L, [, M& U" z" O9 V1 p$ {9 w* L
- get_mouse_movement:/ ~& _4 w3 R! D# |- u/ u
- jmp _get_mouse_movement
) n9 ~, n8 t" K$ c/ N" O) u - set_subroutines:
, Y8 F y- r l W) W - jmp _set_subroutines
4 p$ R" m" F1 U7 S3 y# V - swap_subroutines:
; \9 j" K( m" z# S - jmp _swap_subroutines0 F8 U3 v9 t6 O- u" g) |
' L7 c; E, t# O2 X9 p# b- _reset_mouse:9 @9 a9 M5 m* S; h, P
- mov byte ptr cs:[buttons],0' b/ C+ ^) ^2 ^7 P7 a* v
- mov word ptr cs:[pos_x],07 K5 A6 x9 Q& S; H* L6 x3 f2 g
- mov word ptr cs:[pos_y],0 m; Z& _7 s1 r9 S: V" r' ^
- mov word ptr cs:[x_move],0
0 I p& x. [- T1 q* P" | - mov word ptr cs:[y_move],04 ^+ H6 V# ]# E8 @. f# N0 G
- mov word ptr cs:[x_max],639* }+ P, D( Q8 e4 I/ c
- mov word ptr cs:[x_min],07 ]' l$ F" j+ r8 \* ^5 N$ q1 k3 v: k3 o
- mov word ptr cs:[y_max],1995 g- U9 w0 ]% W, L5 Y7 d$ r
- mov word ptr cs:[y_min],0
: W+ z& }9 X) K/ m* I" ]( s - mov word ptr cs:[user_mask],04 K, e: b, {& D! j' x7 p5 g
- mov word ptr cs:[user_subroutine],0
3 _8 e; D! A% v9 ~/ N1 _7 q) O) v8 p7 H1 @- ` - mov word ptr cs:[user_subroutine+2],0
8 ]0 K% |5 P/ b$ P5 J0 O8 p% y - mov ax,0ffffh" y- E: A8 l& ]
- mov bx,3
$ [! N, h$ }8 J0 p - iret9 n$ \" j! K5 A. E" T# T, Z8 a5 o0 m
* t" u6 g/ z% |* |5 v- _get_pos:
' @9 t3 I! m4 \' m* {; O - mov cx,cs:[pos_x]. |1 g' ]$ {! Z, |+ W5 e
- mov dx,cs:[pos_y], J; e, e: E0 I0 s- m2 v
- mov bx,word ptr cs:[buttons]
) }( a% t* [, `: y - xor bh,bh
* i! ]+ o+ b4 Z% w+ Z, [0 a! d - iret
. x+ L- P& K8 F; y
0 q" K9 ~ T- {4 s2 F1 Q+ B- _get_mouse_movement:& N% U9 S+ @9 G7 p9 w9 c0 w5 q
- mov cx,cs:[x_move]
' P# _4 S9 F/ y. D - mov dx,cs:[y_move]7 _' G8 M5 w S3 V( z
- mov word ptr cs:[x_move],09 X' S1 G; k9 z& e4 F0 _6 @( _
- mov word ptr cs:[y_move],0
- R3 g: P6 q. s$ e3 T7 _ - iret
5 g* r* R1 Y8 I2 n1 J5 v
$ U, P- y1 U3 Z q6 G- g- _show_mouse:! i. m' y* d' a$ ^8 Y D0 V8 T
- push ax
% b; R1 [. U( p: ~9 P - push bx# T# w8 |% Y# ]' |& q7 |4 T
- push di
' y3 v( ~: F! p: {+ X+ l" C5 \ - push es
( O' j7 g, [! F( ? - mov byte ptr cs:[sm_flag],1
& q$ A0 x2 V q - mov ax,cs:[pos_y]* B$ n3 e0 q, G8 Z
- shr ax,3
T7 d, F3 I, L8 z1 [ - mov bl,80' y1 s8 ^( k+ M+ w5 a/ i
- mul bl
' {, @5 D9 _8 y0 W - mov bx,[pos_x]; F, P( w( r* a' t x
- shr bx,3+ X. N5 ^! h' L) f% p& Y
- add ax,bx9 I0 X' t+ \/ R: F2 e
- shl ax,17 R7 r# @# {. V6 x% o( j c
- mov di,ax
9 ~4 m0 c6 b; ~0 i% Q4 h$ \ - mov ax,0b800h7 T) b0 v7 a4 i, y' ^' `8 e
- mov es,ax6 }8 |' t( w T0 l* s. r
- mov ax,es:[di]4 r$ J' \+ L1 Q; j: x
- mov cs:[save_char],ax
/ P7 O' I- `: _1 O5 V - not ah
+ p9 V9 B8 [1 q, e5 g* q) I - and ah,7fh
% }5 h: p3 B6 g/ I+ O1 L - mov es:[di],ax. z) r$ I8 @+ I$ _1 v2 U
- pop es
" i6 V# `' u5 }/ _ - pop di; g* v8 f, ]1 P8 _1 f) G3 F
- pop bx' w2 o8 L7 v8 Z
- pop ax
9 a* \/ ]2 a( P: }1 W - iret& n f1 \" K1 s* `* K* i ^( T
P* |- ?: h1 b$ S; r5 P- _hide_mouse:
# \4 |% @( m8 M R" M3 m1 w - push ax
- ]! v/ R1 M& \/ T9 E% H9 i - push bx
) s0 p [3 M( }7 J - push di
* Z' k: }4 P% [ - push es# U) w; p& q5 [
- mov byte ptr cs:[sm_flag],0: J) b u. B; s4 T7 W
- mov ax,cs:[pos_y]
3 T# n. U6 j" x; Z7 b Y) D. z0 _* | - shr ax,3
" C/ ^8 b3 v$ [) @ - mov bl,80; `, H" S9 ]/ a% s" Q
- mul bl0 E& s5 [+ q: `9 T i/ c" D
- mov bx,[pos_x]/ ?& z8 k- r. W. a
- shr bx,3' Q2 }5 k% R/ L7 j5 T5 N" e
- add ax,bx
+ C$ W" K9 E7 Q+ o" ? - shl ax,1
, ?9 _8 T; H. s: e1 b - mov di,ax
& f, r( D7 l3 s% z+ D+ U" E) W, T - mov ax,0b800h
9 g- A3 K3 x6 o% N - mov es,ax
% Q$ r) m6 N+ z* ~6 S$ ?' O - mov ax,cs:[save_char]
j2 t, \2 C% M, t - mov es:[di],ax5 @( G8 J) v5 O2 D
- pop es H; }+ Y2 s* Y9 ]" x' H/ W, ^
- pop di6 O/ w' h/ d8 u0 L
- pop bx
, ?! |& i1 U1 i3 P3 | - pop ax# I' c# j; d( K8 C/ w
- iret
2 H( i6 K! D1 I1 Y
4 J# q/ H2 Y: `4 B7 Q9 F- _set_pos:
/ y8 V& u- {- Q+ `: a" a - mov cx,cs:[pos_x]2 \, m0 @' }( ?# Y
- mov dx,cs:[pos_y]" b/ N: h7 Q) N, ^* N* ?" [- }# [
- mov word ptr cs:[x_move],0
5 h. F3 i( h* x1 P - mov word ptr cs:[y_move],0; O% R4 i3 n8 Z
- iret
w' ~. S& M0 P) X' r$ D6 s
7 W& I8 j" z% q" ~3 K0 N- _set_hor_pos:
, F* @% g2 p# |! W7 n - call max_min0 L1 |/ W7 b1 O0 T; v
- mov cs:[x_min],cx% ?% b" Y) S' C! H+ ]) r' ]
- mov cs:[x_max],dx
* u d% ~/ e# n" @+ J$ n" ?; s - cmp cs:[pos_x],cx9 m# e5 w" Z/ d1 Z3 ~" _
- jge good_hor_min6 Z H6 _( |+ K: v' d+ G' m
- mov cs:[pos_x],cx' {% V, ~' a+ W# v0 p v) d
- good_hor_min: O3 X! g) H4 D U) x' O- g1 D K
- cmp cs:[pos_x],dx
. X8 R3 K) W: \8 ?3 S - jle good_hor_max4 t& Y6 D. S. A* d% s
- mov cs:[pos_x],dx
2 O: [4 K7 q0 s; ]: W - good_hor_max:
! ]" w$ S! Q6 D7 r - iret
; f0 x4 f( P! A, r1 e
7 ^9 }/ ]& g7 u* R5 t- _set_ver_pos:
: a4 G' Z8 `4 v' C4 n4 q7 M3 D' t - call max_min
; J5 t2 M w! L$ ?9 X( n9 D) E1 [ - mov cs:[y_min],cx/ ^# G8 `8 Q/ d( L5 |4 D
- mov cs:[y_max],dx$ x5 _( Z3 l; c
- cmp cs:[pos_y],cx6 Y+ b# @! v8 c. N% d
- jge good_ver_min" {- ^2 _# l- v% X O' u- N" t
- mov cs:[pos_y],cx
7 q' Y2 R7 w0 S, [3 t( r; T& L9 R/ N - good_ver_min:
1 I2 g$ j/ U8 F - cmp cs:[pos_y],dx, j9 B( |$ W3 q- t% y
- jle good_ver_max& E) I8 @$ Z: p+ r
- mov cs:[pos_y],dx
$ H! D2 ~8 O; ]% k - good_ver_max:
" x7 D5 m, c, k7 [) u' I - iret9 J2 A0 l: g! U; R( w1 p7 N" X
/ ^6 Z3 ~9 ~- a! ~2 Y: K- max_min:$ Y) u4 E1 V3 }
- cmp cx,dx# M/ l# C" H/ E- s2 a3 L
- jle no_swap$ A7 z5 `8 A8 A4 z
- xchg cx,dx
7 y! c! u0 {5 B' o/ h4 p$ v - no_swap:; a0 ], o& ?9 I* f i+ W
- ret, J2 h N" b* U$ i3 t& |. r. ^2 j
- 3 g, ?" l! ~7 H* Z) ^9 z
- _set_subroutines:
4 J* |5 s1 O4 U$ J9 V; F9 w - mov cs:[user_subroutine],dx, O' E5 G8 G6 Z+ b$ u* t5 A
- mov cs:[user_subroutine+2],es
6 i- T {* N. Y - mov cs:[user_mask],cx
B g4 X- A% I8 ]7 x& W - iret5 k- w( T* d# _" M( M
0 A# P2 j6 q8 G- y& l, E; b- _swap_subroutines:4 T Q. U4 q8 ^+ v1 m9 ?
- push word ptr cs:[user_mask]. K# V4 t5 W7 _% ~6 [4 T7 r
- push word ptr cs:[user_subroutine+2]
/ V6 l* Q1 X6 R. c( {& x - push word ptr cs:[user_subroutine]; t! v) i) a4 J, ~! D
- mov cs:[user_subroutine],dx
3 ` F& z+ e: v7 o# h q, { - mov cs:[user_subroutine+2],es
* U- k A: ~. j" ?5 R) R9 o, r# A0 s$ H - mov cs:[user_mask],cx
9 N7 `5 J! |7 Z7 c - pop dx/ W; x* v* Q$ z8 X0 |9 A
- pop es
. F% H( A$ Y! _+ r - pop cx! D1 Q% ]8 q3 d" A$ _; E
- iret# h; h$ N1 O, g7 k) ?6 g
- - I8 U, S* j7 A: _
- memmouse endp
1 l6 G% D2 a2 U2 ~) `( B - 0 H2 A+ \. R% H/ @# g! P! n" C
- endof_start:
: m0 P+ |) _ K3 }9 `, Y
, a/ e% O8 W* z! K. g- emsg db 'No mouse driver install error!$'
" |! G$ e3 `+ j8 O, c5 X: E - old331 dw 00 @3 F3 y& U; p) D6 e- A& |
- old332 dw 0
8 p0 C5 x0 w, N - old741 dw 0
1 ^ Z' A$ R7 o - old742 dw 0
' _0 W+ p5 A* O4 {5 v - memcopy db 0. \2 e- w( V8 S% _7 c1 ]5 |
- okcheck db 0: B' v) C8 v! t- [ c \! s
- pass db 0$ C: q: b" I; @: S) Z# l
- chkl db 06 c/ T. o1 S6 Q- C, u% ?
- lk db 0
" H) M+ f1 H6 o$ [5 ~ - chkr db 0
) p2 V7 b! c& C/ X - rk db 0
6 k+ d% p. f2 x) v: R - showms db ' 赏屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯? '4 V% ]# W; k( K1 y: o; L5 T* S3 g
- db ' ?UfoitmousetestVer0.9Bini.Yi? '& b/ t V V. W; B* d
- db ' 韧屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯? '
0 m3 I( j: S8 T - db ' '- Q0 @8 q& A- G t
- db ' 赏屯屯簧屯屯突 '
$ N2 v& X& @# l5 J! z - db ' ?OFF汉OFF? '
, f' T% I1 f- M/ F& Q: t6 M - db ' 韧屯屯既屯屯图 '
0 r& J& m% `& i; ^# l - db ' ' c6 e3 y/ m ^% B. t
- db ' 赏屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯突 '
+ Q7 @2 W: f- l( Z/ \2 [9 u @ - db ' ?IFFail,Press<Esc>toExit? ' 0 t: ^( B) S7 g, \+ y
- db ' 韧屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯图 '/ z x' }* E6 ]3 q7 a
- : h; G" G+ A3 B4 b' o# Q% x
- end
复制代码 |
|