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