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