|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。4 E' O' D6 R, K8 ?, g( i
可惜读取不到正确值。一直读的是FEh......
7 [& E1 Q) {# }8 \* d; H希望各位大神能帮忙看看,指点一二。小弟先谢过了。
2 \9 R" s$ j% a5 c6 Z4 E% ~3 i: X ?* f, C
代码如下(masm5编译链接通过,DOS下运行):7 t$ S; A1 z' r) g
7 k2 f' N0 r$ r p7 o2 D( F
assume cs:code,ds:data
! K3 g& P H3 R& v/ ^( |8 p' U6 b; Y" k( n5 N
data segment 9 y3 s+ D) J, |) k- r
EC_CMD_PORT equ 66h ;地址端口 0 a6 o @" i0 g# k* n* u2 O7 I2 P
EC_DATA_PORT equ 62h ;数据端口 |7 s1 z0 f ^4 |1 i0 g2 s
CMD_READ_EC equ 80h ;读寄存器命令
1 @2 B) | x. B( e9 S: P POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
7 @* I+ R" {& U' Odata ends5 b$ U& q, a# l. ~, G7 Z
" _* C, d& b$ e& \) Ccode segment
$ x- a- E' z4 U- bstart:
3 L3 ^3 n' k' |) \. g( |& Y$ K mov al,CMD_READ_EC
( a9 z, G! D. G+ n call write_ec_cmd ;写80h到0x66h端口% i5 g. w4 ]& P+ e8 C
mov ax,POLLING_DATA
- W3 A( p6 d* A9 t call write_ec_data ;写ECRAM地址到0x62h端口
) p( k# z" C8 Z8 d call read_ec_data ;从0x62h读数据5 b3 Y9 c+ T& I: Q
& O- X; f1 N- o6 J3 b, I
mov ax,4c00h
/ h. l5 x {# ?+ i) l; W9 w int 21h
9 n, Z6 W! H+ O3 O! h! @4 H
- t3 n, C* q& j6 J, I# Xwrite_ec_cmd:
6 m& }: q" j) U$ V$ a. I mov ah,al1 X1 P t% c* I3 S! h3 _$ W! [
call pmuWait4IBE
/ _8 F9 B( q# b# a mov al,ah) ~6 i( ]+ `( m* e; r% C. j# H
out EC_CMD_PORT,al
8 j0 p$ p) l# S. q. h7 ~7 P, `3 q, E ret
( R" _6 n) I4 k- Y( g, [0 \
/ @# I4 M; c3 w+ @1 @write_ec_data:2 P8 W+ `4 a7 `2 q: l P
mov ah,al
0 B0 f* Z# ?2 |, S call pmuWait4IBE
4 L1 R: K# z) y! T mov al,ah$ b1 d& M# m [; j
out EC_DATA_PORT,al, y A2 c7 W5 n* A; ^
ret6 R+ c6 ~' ^" B, H
4 Z5 D0 l: `2 ~/ K- ]
read_ec_data:7 Q( ]7 s' g8 Q0 D7 V1 P. m
call pmuWait4OBF
) Z9 t, e, w3 U' K2 R jcxz $+2# g9 f/ j6 g$ d7 n* G4 \
jcxz $+2
0 M! W0 w3 f( H$ K# q2 I: O in al,EC_DATA_PORT
5 ]' |! ^( y2 y$ g2 x ret" L* r1 j! [% g9 L' j3 S, U; l
) i- ?) B- _& R0 RpmuWait4IBE:, G: }6 U" Y$ }- ?4 u3 I8 M. v9 _
JCXZ $+2
$ Z7 j3 y5 Z+ s! f1 g9 ^ JCXZ $+2 : {9 T G% E& c% u" `
IN AL,EC_CMD_PORT ;Read PMU status
& O- j, h& @1 a- m0 w/ G% f TEST AL,2 ;Is Input Buffer Empty? 3 Y) y+ y$ D) q0 w- S) N
JNZ pmuWait4IBE ;Jmp if no 8 H( w& K. s. m- g8 O
ret
) z' B( M9 v% U6 [- r9 K
6 n4 T; L/ V, K! M0 kpmuWait4OBF:
% w6 a* A. K5 w+ w: m' h: ? JCXZ $+2
3 t) r6 A d [9 k JCXZ $+2 1 I0 F$ f% x8 ~: G
IN AL,EC_CMD_PORT ;Read PMU status
4 d8 ?% j6 \0 b/ Y2 F6 | X4 j TEST AL,1 ;Is Output Buffer Full? " l: {( a7 h3 L0 h& d
JZ pmuWait4OBF ;Jmp if no 4 y+ O; [0 h$ x! I
ret- v$ E5 Q& B, o7 y, S ]) G
) F# o4 @ G2 m9 N/ ]
code ends " Q6 L: x& j1 |1 W* Z
end start- G9 M. Z: c9 n" \6 w
+ L- b' I5 c8 ?% M
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
+ B( S/ w+ v5 \$ n" I9 d0 l4 M% l
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|