|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。+ y) j6 w' U! C5 i8 i3 h
可惜读取不到正确值。一直读的是FEh......
. X6 F2 C9 X/ i+ s; c! H4 M希望各位大神能帮忙看看,指点一二。小弟先谢过了。7 `4 D" f! V; H
4 D3 \* B& N- u# v' s# l9 W代码如下(masm5编译链接通过,DOS下运行):2 W, _3 |/ W1 T; y# Q. w
* \; J5 c8 [0 a/ W( u0 U, B1 i, Lassume cs:code,ds:data
2 H( l$ E! g6 @( }" s' J- G- o( a) E2 B3 r% H
data segment 4 _. `2 L, r; E& T# n
EC_CMD_PORT equ 66h ;地址端口
7 w# n( ]9 A- a! P5 d EC_DATA_PORT equ 62h ;数据端口 1 |4 n! y/ P2 `
CMD_READ_EC equ 80h ;读寄存器命令 # ~* U& \8 O8 I, e6 d7 f; ?6 L' B
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 - F5 t# c# F' Z: a8 @* R
data ends; w: \( j2 I. e) C- I& A! }
0 f- f. u, I1 [8 z' U9 \8 U7 o$ Rcode segment 3 _0 a# `8 k, ~# S; D
start: 8 ~ X; |' [. B$ K% ]
mov al,CMD_READ_EC
3 P; i; E6 c6 m- i4 }) N call write_ec_cmd ;写80h到0x66h端口
& G8 _3 w6 B E( b: O# n6 b4 o mov ax,POLLING_DATA 9 z G# n6 c& X3 a! x; ~0 r) Q
call write_ec_data ;写ECRAM地址到0x62h端口
6 z J' F6 v1 I: ^/ d( x call read_ec_data ;从0x62h读数据
# d. y. u j1 m* J R* N. O5 h3 \ s
mov ax,4c00h ; u4 b( ]! B" K* ? q1 u! w3 a
int 21h
. m9 ?: h7 q, b* d) J/ p1 B6 ?9 O* b) t1 [3 L2 e9 `
write_ec_cmd:' q% g+ j7 }' h
mov ah,al
6 h: z/ [) J0 M, I! S: } call pmuWait4IBE
4 B {' q4 a) f5 F! i# A$ } g- H mov al,ah" o, |5 t" w9 S: r6 j- V6 _% w
out EC_CMD_PORT,al
4 |0 @4 f3 ?' L ret
+ M( h9 U1 A: h& M% o7 d. S2 E& f3 i7 {+ t, E6 m
write_ec_data:/ N( I6 v$ T7 ]+ y X
mov ah,al. A6 v0 X9 s' }9 y8 H$ f5 O, v
call pmuWait4IBE9 @. }( \- N. C! v) X2 A' J
mov al,ah! g0 A5 ?$ @/ p5 P3 q, {- w
out EC_DATA_PORT,al
" o! w1 i) M2 k3 K! U$ Y ret
8 h4 {+ {0 E- W: w& t9 s, R# {) h2 R
8 ^$ H& ?5 \* Y" _5 N# g0 @6 i. Eread_ec_data:; X/ n9 X/ h3 s3 q
call pmuWait4OBF
2 Z9 `/ ]4 f0 X; I1 g. L jcxz $+2
$ x# {1 k- S. v( y5 T jcxz $+2
+ w4 Y; E" F* K in al,EC_DATA_PORT1 V4 i& p3 K( x$ t0 Q
ret
7 [7 u, z3 n' p+ t, M$ f; C
1 a" _' S% ]! a2 ]5 ~- {5 apmuWait4IBE:
! m7 W, W0 h6 f JCXZ $+20 b# v& S* M) c, g, V
JCXZ $+2 + v' ?/ H+ r8 U+ P9 @9 \) X) ^& J& L
IN AL,EC_CMD_PORT ;Read PMU status 0 x) w- P) B5 D( s
TEST AL,2 ;Is Input Buffer Empty?
; U0 Y4 w% \/ ?- l" L9 L3 W% v2 k JNZ pmuWait4IBE ;Jmp if no
4 `, e( ]" o% f5 E ret; u: q. b2 t, ^) H' Q) L, G! a
# Z% Y1 a( B2 c" Y; i% }
pmuWait4OBF:9 F/ r+ ~/ H8 q$ B0 W, b' L
JCXZ $+2
0 i+ s7 f* V0 ]1 M- K& ` JCXZ $+2
, M7 ?" F0 s! } M, k IN AL,EC_CMD_PORT ;Read PMU status
; L7 T# U9 q9 ]7 x TEST AL,1 ;Is Output Buffer Full?
+ j# ^6 j5 G- u9 u9 ^7 l JZ pmuWait4OBF ;Jmp if no ! ~# {% b& M3 E+ H# h+ d, d
ret' O0 X$ V2 L7 j- e" n' X" S
. A+ o) M5 C4 y& A. V$ o8 S- z
code ends
' u d4 F5 s& L) z4 b$ O4 u- zend start
* e( K3 ^7 ?& W2 y9 l& W
F# R. M6 v* h2 k0 U还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
1 Y/ m1 w( q* `, d# o% |5 G3 M; }
- C! r9 T6 j1 ]: `: E( z' b[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|