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