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