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