|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。! {: n3 {/ B0 u% M$ c a
可惜读取不到正确值。一直读的是FEh......4 n2 ]: w) i i% I6 r. \& R
希望各位大神能帮忙看看,指点一二。小弟先谢过了。, \5 A8 b% c) P$ M2 R* X5 U
( j0 y0 {% i. C1 T; l1 [
代码如下(masm5编译链接通过,DOS下运行):
4 c! o8 \0 K2 K3 o3 a. U# W) W$ Q' N
assume cs:code,ds:data
+ O* J; {& x2 d5 h8 r6 V, r9 H9 G$ r- z. H6 t
data segment
6 j1 V2 L' p4 X+ h5 y7 w% O EC_CMD_PORT equ 66h ;地址端口
+ ~) P% W3 _5 F. s EC_DATA_PORT equ 62h ;数据端口
, S" T& c* T9 c- o CMD_READ_EC equ 80h ;读寄存器命令 3 V" Y8 l2 W( o6 r0 X
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 / J. Y, w5 M A. S8 E" E
data ends7 H2 x" W( {' s R
3 L: B' I7 c, d/ j$ _* ]
code segment
4 a, X" }' K, c6 o- t- v2 c& L ~start:
5 D9 h; B/ J. T! c6 C5 _, D' ^ mov al,CMD_READ_EC
, P$ F, E# E, Q" u call write_ec_cmd ;写80h到0x66h端口
8 X4 ^" A( f3 J2 R mov ax,POLLING_DATA
: ^6 O5 C) ~7 ^- v% e+ ? call write_ec_data ;写ECRAM地址到0x62h端口
4 R- a4 ~# Z7 T* v5 T call read_ec_data ;从0x62h读数据
: O/ E& ]6 O4 ?& u$ K( X# t/ M2 c* V; Y1 M. A P0 g2 O5 @
mov ax,4c00h
x2 {" o. q" t& `; ]/ R I int 21h
4 U+ r& D4 |; ]& E
( ?3 [4 b' a0 |5 K8 q2 v: I owrite_ec_cmd:
1 z: s0 P' G/ D/ h: h, j mov ah,al, q9 ^ V \. y* [4 I% l+ g
call pmuWait4IBE
; @( }' l1 |5 \ mov al,ah
0 Y" Q: d* k* [( m1 z out EC_CMD_PORT,al8 m+ F/ F4 e) K
ret
: f2 O4 B7 f! T8 ?2 Q; C: Q. R" Z
write_ec_data:, L5 f; Z; ~4 i2 S2 ^
mov ah,al) O3 F$ }* ~4 [% p% D$ M5 u
call pmuWait4IBE
; l) E, J: b$ r- k. L5 g! c mov al,ah a+ Q2 [- [. H, n
out EC_DATA_PORT,al, V, v" ]) V+ Z" M. M8 b) i
ret4 ]8 t4 M, ?- q8 B" \8 p
( y$ }* F! w1 ~8 m& g& i: }
read_ec_data:8 z/ _6 J' p$ c! ?, [$ m) \" F8 T
call pmuWait4OBF+ k5 Y7 {* j8 a3 c4 _
jcxz $+2' K+ M, u* t+ V
jcxz $+2, S% @$ K3 Z. H5 }
in al,EC_DATA_PORT6 w: T0 v E9 K) M% {+ G
ret
9 u+ q% ~# X( Y+ i+ V # M# b& `8 [; e( Z# r4 R+ E
pmuWait4IBE:7 p0 \' r6 a6 L6 g
JCXZ $+2
- _" h5 \. ~* r, c JCXZ $+2
# d3 A1 q5 Z; F& ?3 \+ E IN AL,EC_CMD_PORT ;Read PMU status
b) Y+ ~$ N3 U1 `0 A' P3 C, O TEST AL,2 ;Is Input Buffer Empty? 4 u4 y" W8 y3 L9 p, |0 G5 p9 \
JNZ pmuWait4IBE ;Jmp if no
7 n" Y: E4 M4 \% c ret
% T4 t' p) K4 |8 b) p j9 q- W0 E6 N: i/ W! x3 @0 r$ F9 Q
pmuWait4OBF:; R' y; R- D8 O; W0 i) \
JCXZ $+2
! D" F8 v4 r; U5 ?: p& [ JCXZ $+2
- @8 a+ K$ ]# x! U6 F IN AL,EC_CMD_PORT ;Read PMU status 1 F8 I+ |3 ?/ [! f& \7 r- {
TEST AL,1 ;Is Output Buffer Full? : }! x; @) \4 g: E$ T$ K
JZ pmuWait4OBF ;Jmp if no - z+ g* b' k8 ?+ h$ ^
ret* V. X2 S, x$ ^: h" O
* y9 t; U6 r, e$ M0 Z7 F- c8 D
code ends
; P. I7 j3 Z3 e3 send start
9 x; Z! y$ ]5 A9 t- Z; Z0 Y- T1 } o- T
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
# k$ o) u" W; Z! A
8 t( H8 H) f5 _* y+ k+ n+ \[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|