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