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