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