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