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