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