|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。7 \1 A8 j' ~! D! K& n
可惜读取不到正确值。一直读的是FEh......
4 T+ Z( x4 h) }2 Q希望各位大神能帮忙看看,指点一二。小弟先谢过了。7 |" a' f1 C( [5 z) I I( P( P* L" P
. Z* O% y- o/ m& B8 B$ z) [
代码如下(masm5编译链接通过,DOS下运行):7 t, J; P( i+ c. S8 u: w# ]7 p
; S! Z$ l. n0 D8 M0 R+ b# m sassume cs:code,ds:data
$ d. i: _' B) U3 d& ?+ _
/ L% p% ` J- G# f3 H$ y+ Edata segment / g" i8 c/ D# v, E. R/ N* w
EC_CMD_PORT equ 66h ;地址端口 9 ^* i% j% a: X) q4 I1 t
EC_DATA_PORT equ 62h ;数据端口
% q/ I4 s/ q% d5 p CMD_READ_EC equ 80h ;读寄存器命令
L, P4 u2 p# }7 S& o* j( V POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
! `& l3 l) J3 U# n" b/ i/ ldata ends; L8 z) { M" J2 f; X: }
1 u; p! t9 K3 _- T" V' F
code segment u8 t( c6 I5 d3 h8 t0 w
start:
% |* c& S2 h& c1 @4 t mov al,CMD_READ_EC ) t. G! a* g' v& ~
call write_ec_cmd ;写80h到0x66h端口+ Z! X! c$ a3 U+ [1 m* k; ^3 Q
mov ax,POLLING_DATA
7 i; H' \3 s% r( p) j% \ call write_ec_data ;写ECRAM地址到0x62h端口( ?1 `: T& a$ v2 S, G# @
call read_ec_data ;从0x62h读数据1 h0 \4 G1 f5 m: _1 g- ^
& {. s4 W6 T9 L0 d3 b
mov ax,4c00h
, Y1 V( ~# Q7 z4 |( ` int 21h( b7 y; q" W6 J6 d
" ~; ]! r" j! D2 J+ t% @% Zwrite_ec_cmd:
. {4 x8 ~6 L% t: s1 [ mov ah,al* o" K: I4 g5 F9 D1 l7 g) z/ M
call pmuWait4IBE
& {% n6 ~* B8 q8 \( ~# l mov al,ah
# ^$ J4 n3 \4 p& G6 o b, F) ? out EC_CMD_PORT,al
p5 @: h& x. K, g ret
- h# p# r6 Q3 `. b6 O @- F- F& C# w+ W* F" `1 l' I, s1 i2 B
write_ec_data:
) c. @# b6 ~& k mov ah,al
# q- a0 h' s, s0 @) @/ P call pmuWait4IBE
. q# U& H9 x O mov al,ah
% X6 V9 k+ N6 ]. v$ i- q1 v out EC_DATA_PORT,al
& z6 Y$ P4 u0 \& Q. l" T$ ^; n! i; ? ret
7 R( s* u% r% l2 c0 @3 b
% m: U1 s$ I1 v8 Vread_ec_data:
[+ Z+ M, u+ v9 p. j% U9 J5 K: h call pmuWait4OBF
/ ]& y5 y0 n+ @5 D% p7 [: o. i5 a2 j jcxz $+2
( }4 E9 L% T1 b3 K% M0 x3 N5 a jcxz $+2 R8 ~4 r3 X- @2 B6 N% D3 L: E N$ T5 b
in al,EC_DATA_PORT
* |+ M2 F" Y! U& n, t6 m" i1 _ ret- E( n# k* Q7 N7 M3 B5 h' t, ]! v0 r
7 e3 Z/ m. p) i& J9 p0 l! s. x* F
pmuWait4IBE:- ^! N3 ?; m# O6 c, Q: F. k# _
JCXZ $+2
$ X8 e9 I7 z) f, \4 u' F" [% ~1 g JCXZ $+2 4 M: C1 `' Q- P: N0 s
IN AL,EC_CMD_PORT ;Read PMU status
% l" ?9 l# c& L$ G TEST AL,2 ;Is Input Buffer Empty? - D' U; D% @8 ^6 S5 G+ F6 p
JNZ pmuWait4IBE ;Jmp if no
- p) U5 F6 {" R- b: y& V( P: a ret
) D+ ?$ d* A# v z# Y- E' ^2 Q2 K
& F# G7 P5 E$ c4 l: wpmuWait4OBF:( X% H0 s" }7 j4 b+ L1 R
JCXZ $+2
6 c+ o0 G* x2 O( D0 _/ c JCXZ $+2
' Y+ j) q0 e$ S; ]1 y' H; c% H IN AL,EC_CMD_PORT ;Read PMU status 5 }" n o8 U- W$ |' J
TEST AL,1 ;Is Output Buffer Full? 5 K3 t m5 j& Q% z$ L
JZ pmuWait4OBF ;Jmp if no " L2 r2 d! k" J+ h# |: ^( q+ J
ret
) o. [0 N1 Z) E2 y6 J# P " M1 F2 U8 B: N) s
code ends
0 o2 ?$ J/ c6 s& fend start0 w* k7 Y& s% w, X( G
- z7 h. x/ J% A" K) P7 T% s U还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。1 y8 E5 X. L" j& _
/ { d1 \7 C; [8 O& U
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|