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