|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
7 {+ l: Q* K* j2 S: W8 o可惜读取不到正确值。一直读的是FEh......
9 B# y$ I. K: m; X+ _希望各位大神能帮忙看看,指点一二。小弟先谢过了。0 l; V6 Z0 [* I6 _& C& c
: w3 m( a9 T2 \- k: g7 h4 C
代码如下(masm5编译链接通过,DOS下运行):
0 r3 o4 P& u7 Y! U8 q7 C4 R% Y$ J' U. _% j9 v. f
assume cs:code,ds:data* E" J6 S2 b& q3 \8 w% n
" z/ i- [$ j" Z5 U' D; T- G
data segment
$ S9 r8 J \2 T# R8 e EC_CMD_PORT equ 66h ;地址端口
: X6 b: f' K9 |1 s& U EC_DATA_PORT equ 62h ;数据端口
! t7 o1 R, T0 @" h( X, X CMD_READ_EC equ 80h ;读寄存器命令 0 t4 V7 C+ p$ O
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
4 v x' D. c$ R+ ~: ydata ends% z& [ l: V% K- O L- l3 {! O! [* v
: [7 [! A7 Q' i/ J. g
code segment
: p; V/ ^' h2 k. v2 u- W3 Wstart:
6 y% @+ _, e5 E mov al,CMD_READ_EC 8 `: G& B! C9 Z3 N$ }- }
call write_ec_cmd ;写80h到0x66h端口3 n. F1 D1 [# l5 O/ ?, Q5 h
mov ax,POLLING_DATA " d" Q g1 S, v$ ~8 j$ T
call write_ec_data ;写ECRAM地址到0x62h端口
2 H: l1 J- F7 z call read_ec_data ;从0x62h读数据
/ U6 \# s* D( Q) Y4 I2 l1 o% w6 c. w: c+ O0 G. B' H$ j
mov ax,4c00h
* A' [5 |: r9 W int 21h
. e3 N* e: V; x, h v- m. }& G' B1 b% i$ d; n h: Z
write_ec_cmd:
4 p- |7 r9 ~% n0 Q9 S: _' N4 l mov ah,al
' |: D: a$ d1 @& X+ n+ ?2 g9 a$ u1 m; y; v, ` call pmuWait4IBE
& u7 z3 E2 H2 X, S; R3 ?2 p mov al,ah
( }% y! M$ _0 I out EC_CMD_PORT,al
" k" @% y- t, R+ h; \: R ret
! Q E1 `1 L3 s/ y) b& W O1 Q: L0 N% l# G
write_ec_data:0 \- x& ?* B; ?% T
mov ah,al/ F. A) h# k/ V4 |8 n
call pmuWait4IBE& ^3 E1 ]3 B3 L) c2 n" q
mov al,ah P+ O+ f. s* k# ?
out EC_DATA_PORT,al* P w) i* L4 F
ret) C5 q9 Q% L3 a3 X/ I) M6 Q1 P: n
! L, d$ B- k6 A B& x4 t
read_ec_data:
9 w0 T% Z8 N* W/ X, u call pmuWait4OBF* T- _0 q0 F0 e& b) Q
jcxz $+2
# N! Y- |4 d/ I; h, q9 b jcxz $+2
( @1 b: U) Z4 V2 b in al,EC_DATA_PORT2 g, ^6 q( J. e. V
ret( w5 R* f4 N+ J2 ?
1 g( e2 n" M# O2 {1 f2 W
pmuWait4IBE:: X) s& S5 `8 D- @0 j
JCXZ $+2
+ @' n: p8 J9 E, x5 ~3 A# Q JCXZ $+2
1 k/ u6 t! b b- S0 ` IN AL,EC_CMD_PORT ;Read PMU status $ W" Q& Z8 U) u$ _7 d
TEST AL,2 ;Is Input Buffer Empty?
! }" M$ v2 }7 g9 R( f JNZ pmuWait4IBE ;Jmp if no
+ v4 q( J2 w! o* L6 k; G9 b* j ret
- R0 r5 h9 q! R6 E! M6 o- I4 N0 d1 {2 L7 a; u
pmuWait4OBF:
: W' I4 _7 X. x5 B5 U5 r JCXZ $+2
2 X9 S4 v( ?) U JCXZ $+2 & w! H) I1 p( f H, P& D
IN AL,EC_CMD_PORT ;Read PMU status : `1 I5 K2 n) o, i! b
TEST AL,1 ;Is Output Buffer Full? $ B, i) ^9 ]7 m) [% N
JZ pmuWait4OBF ;Jmp if no 6 X2 _& u4 I4 o% k- |# B
ret
9 i1 c9 b% G! a* G1 |. n3 C
$ A4 V5 ^" B: c0 h5 o9 B: \code ends
3 E7 L0 D4 @8 Q J# Fend start, p' |( p. b/ ?- a& u
' }' J6 D; R7 p7 I0 r% c( ]还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
$ R/ x8 L7 z* j
; {! b% ?# D% a3 k! Y" `% r, X/ z[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|