|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
, q8 Q& k$ y8 E3 l% X可惜读取不到正确值。一直读的是FEh......
3 j* X4 N1 D4 G6 m4 n7 ^ n希望各位大神能帮忙看看,指点一二。小弟先谢过了。# Y" {5 L4 N8 Y3 M1 L
% q! A1 F( U$ ~8 P0 {8 R# @代码如下(masm5编译链接通过,DOS下运行):
a8 m K ?+ N7 W; Q: R4 J
+ ~8 @0 q! A) u! ^$ T0 N) Rassume cs:code,ds:data
) a3 o; h5 C* u% e" l/ f3 q3 x, J* N
data segment
, E' M; K7 f$ A! X- X EC_CMD_PORT equ 66h ;地址端口 ) |! ~2 d+ G9 t" w: d
EC_DATA_PORT equ 62h ;数据端口
- N, j" T Y+ T Q CMD_READ_EC equ 80h ;读寄存器命令 ' i* Z, C% y- g$ K/ B% h, m0 ?9 }
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 0 v! W2 u5 x3 V
data ends
* \1 {0 g2 o* W( P
?* w5 e/ U% q8 M2 t+ }code segment ' v2 ~$ J2 k% T' D+ r+ }% v' Z* A
start:
1 j7 l5 {6 Y( ^3 t7 K mov al,CMD_READ_EC
2 M4 x' C7 m' \0 Z0 d) I. { call write_ec_cmd ;写80h到0x66h端口2 x0 m, j( Z: O3 @( Q6 \9 O
mov ax,POLLING_DATA ' o! a; Q/ U: ]# Q0 {( p
call write_ec_data ;写ECRAM地址到0x62h端口
) h( Q' v% h0 \; f6 }* a call read_ec_data ;从0x62h读数据$ x/ P- {7 J: [
" }. L! e6 s h9 C7 N/ W
mov ax,4c00h $ X6 w5 P0 J1 Z1 w3 ~ v3 R
int 21h
( u; o$ u( E+ [ R/ {. ]# y
9 k, O: B5 W2 U/ C" G! q7 e3 h: Twrite_ec_cmd:; e) E6 v7 W$ b- y
mov ah,al
: l/ F4 h3 m, L2 }, X) e- j7 \! M call pmuWait4IBE
5 t6 G- X+ ^9 n2 ~, n mov al,ah
- _* ]: H8 J, [% G$ g out EC_CMD_PORT,al' g" s' P& G. @! a1 H1 O2 a
ret; O. N! [. Q4 H$ q. Q
& ^: ]0 o1 r2 {9 s+ z
write_ec_data:5 H6 I. ? V# D4 N4 O. M5 x. o: m
mov ah,al
* g+ @, M# \- B9 Y( u. F call pmuWait4IBE
* P# t# g3 a' C) j `1 U mov al,ah9 A9 o. _( j6 ]& A: `# B. N
out EC_DATA_PORT,al2 ?+ P& p7 @# v" U( G8 A) k1 ?# B
ret
* u5 N0 d* c& N, `
9 w6 O. f8 O L& b( V a a2 [! M4 ]read_ec_data:
7 ^/ b5 w* A( G$ B' W% U call pmuWait4OBF
( n" x3 }* f$ j- j jcxz $+2( W) L7 ]6 u9 H9 K
jcxz $+29 R; k$ Z- D9 {" i2 x
in al,EC_DATA_PORT
% `3 k0 ]8 S9 P& T, M) N ret0 v3 Y! R: u$ B
' W$ E) M3 V. G5 _4 |pmuWait4IBE:
1 s7 W$ M( h6 W/ i JCXZ $+28 n J( R8 ^1 \- }) O
JCXZ $+2
1 l$ G, A3 ]& m- f5 M( I2 R- B5 O IN AL,EC_CMD_PORT ;Read PMU status
# ~% i' ` j, I; G5 n% q3 r TEST AL,2 ;Is Input Buffer Empty? 4 L. p; K) q/ i
JNZ pmuWait4IBE ;Jmp if no / k' Q6 ]$ {0 X% b
ret& y# z7 ~' N8 [' |- m1 E: {
2 w3 u% T# s0 z x: A* R
pmuWait4OBF:
d3 f# V3 V+ x: N* g. w' f JCXZ $+2/ h( j, C/ l" z" V4 i: P
JCXZ $+2
; R# M% ~" \& [ IN AL,EC_CMD_PORT ;Read PMU status
/ Z* E0 |* H B; O! c9 } TEST AL,1 ;Is Output Buffer Full? 6 c1 l9 h5 {. A' A6 p3 v
JZ pmuWait4OBF ;Jmp if no . Q* b6 [# l u$ q
ret
: N5 E9 K& L6 U6 l& U8 `# N0 m + \# ]' s( K3 }7 U
code ends 6 Z& Y. Y) Z' U5 B. B1 P
end start. X$ e' Y k% W" m; {% x: ^
; b1 F/ a# q0 `* u- m8 u还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。1 R0 `& m+ A# t/ ]5 J
# \) I6 G. N3 ]1 w[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|