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