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