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