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