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