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