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