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