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