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