|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。6 N" w- O5 y1 e
可惜读取不到正确值。一直读的是FEh......
( L' O+ J7 C5 P希望各位大神能帮忙看看,指点一二。小弟先谢过了。
- j7 e* h+ f# `; P, Z
# n- s, c% L; h) N, _% Z8 \5 a7 O代码如下(masm5编译链接通过,DOS下运行):
+ g; Q- \& e' A
1 t+ a: N0 Q1 l W2 `9 Nassume cs:code,ds:data
( f' U) s; B2 \ m# r7 v8 K8 ~ z- E7 {% Q: V# N& z& f! l
data segment
5 e5 I. U: x* D+ S. } EC_CMD_PORT equ 66h ;地址端口
. d& ~' G/ B! `2 ]! W1 ] EC_DATA_PORT equ 62h ;数据端口
% J4 [& e3 l' ~$ ^) C9 z/ i1 S CMD_READ_EC equ 80h ;读寄存器命令
- P5 d- V' Q O4 V; F POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
! x9 q- E" }' M$ p4 Q. O1 ]data ends# F4 J8 w1 i& Q8 S: \( l
f7 B# d8 j/ }* a2 ~! y
code segment + J! U# j% r% Y7 g3 S+ C. p
start: , ]3 A; A7 q4 w$ D$ D+ a$ b
mov al,CMD_READ_EC
* W; r, I1 d9 }7 n% N call write_ec_cmd ;写80h到0x66h端口
; r. P x3 r$ K& |* Q) x \ mov ax,POLLING_DATA : |, u Q1 a( g
call write_ec_data ;写ECRAM地址到0x62h端口7 K m5 Q" T1 z- W
call read_ec_data ;从0x62h读数据# u* L1 U( T8 T9 T9 M% X0 O
9 f1 c" }: x$ i- U1 C6 @7 ` mov ax,4c00h & N7 ~+ f+ r4 e& F; L% j- @" Q
int 21h
7 d! Y: y* I3 D( e4 C5 |+ P6 M1 y
3 @. i& [+ s+ P4 d3 \write_ec_cmd:2 f3 E; \: K w, n( [
mov ah,al/ {4 E, Z' H% }* ^5 x
call pmuWait4IBE
: Z% [7 {9 m5 f& p1 z) p mov al,ah- ^, b3 F+ g2 `8 ` ?/ \( Z/ f6 P: I* E
out EC_CMD_PORT,al8 S* M5 K/ o, F) I- j5 G4 T) b
ret
- |6 v3 t# g( x# V
2 {2 h7 G. v: I O- l3 D/ a! z' cwrite_ec_data:8 k# L; \1 Y. z0 [
mov ah,al
6 S& T, k( Q. i/ o call pmuWait4IBE; }) {" w3 _" w6 Y
mov al,ah$ L. S& e/ Q- C) Q+ w1 f
out EC_DATA_PORT,al
6 |' x; m5 \# Y( X ret
9 J' l6 l8 T8 ^0 W7 n
4 d. }2 y4 R( r0 \& pread_ec_data:8 s2 v+ l, B0 v: J
call pmuWait4OBF- M' t+ c9 R! Z+ ~, M" p# ?/ a
jcxz $+2
6 y4 j- r& ?. u( g7 p- ~9 A* A jcxz $+2
+ j8 F. S7 w" L' u/ K in al,EC_DATA_PORT4 Z: C3 v U! u; |9 L
ret/ p4 L0 h" f1 o1 S* O; Q
; W% d* Z. l# E& t! A! x
pmuWait4IBE:
, u4 y" x1 o. r JCXZ $+29 [- |, Y: W! D4 F4 r1 f
JCXZ $+2 2 l" ~* [. l. `5 l
IN AL,EC_CMD_PORT ;Read PMU status + s8 t; `# b1 B! E& ~; @
TEST AL,2 ;Is Input Buffer Empty?
1 H+ \# y( ?% V$ ]" ~3 I: K$ f JNZ pmuWait4IBE ;Jmp if no
' T8 L' g: ^# I- C, L; K, D ret
0 w, O0 A7 _4 Z1 \+ j7 }- G' ~ i$ N4 T8 i6 P" M
pmuWait4OBF:# m3 u+ }/ l3 s
JCXZ $+2# A8 f5 X( Q0 }3 J; h
JCXZ $+2 ' V1 k0 y; T5 m
IN AL,EC_CMD_PORT ;Read PMU status
) q+ @3 }& ~3 ` TEST AL,1 ;Is Output Buffer Full? ! ]) C8 M$ J" I" H& Y! r- K
JZ pmuWait4OBF ;Jmp if no
2 E! X4 h: H2 }' T" V; y ret
: P) Q. `. W. ^. L5 h* b2 i
2 A7 V" F) e$ m I9 [code ends , R9 q" F/ B$ M) o* j7 t
end start) H! \& J1 L1 K* N; P* K+ T' _
7 G/ y/ m( n* h2 u, d还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
* }& \8 \+ X) w3 m8 d1 g7 z8 v, H9 _1 ^
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|