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