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