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