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