|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
* ], a, x- \; L4 I$ O可惜读取不到正确值。一直读的是FEh......
8 d9 A% d. C* b, Q" y- U [0 Z( }希望各位大神能帮忙看看,指点一二。小弟先谢过了。; r9 H2 e" e5 Z2 @. \3 b
$ `6 r# L$ p$ h. J, H- {6 \5 e
代码如下(masm5编译链接通过,DOS下运行):
* V/ C4 ~' w# D* e5 a2 b
0 W' {, E% O# H8 g% g' Fassume cs:code,ds:data1 ?% h$ E6 C5 J
6 c: ?" n0 z- E @+ @
data segment $ ]* `/ {% j! w0 S
EC_CMD_PORT equ 66h ;地址端口 9 A* |; N5 S" b# l& b1 E2 P
EC_DATA_PORT equ 62h ;数据端口
. R$ B4 S+ g' t: {% x3 ~% A CMD_READ_EC equ 80h ;读寄存器命令 & Y6 b4 k& ]3 @6 `' w8 ?
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
" a0 q5 {; e$ f3 {3 Q% Vdata ends) j6 G' a( V7 f2 _) B& g5 S& `, _
, d$ V/ C* q0 Z
code segment 7 {0 a0 q# y& `0 q
start: }2 g# m$ ~+ R Z8 f D
mov al,CMD_READ_EC
2 q4 O+ Q9 A/ `' ?+ B: h call write_ec_cmd ;写80h到0x66h端口
( j5 s' R5 g5 d9 K5 }" A# h mov ax,POLLING_DATA ! \/ K H+ H# W. L6 a* l
call write_ec_data ;写ECRAM地址到0x62h端口
8 F7 D7 K% Y% K call read_ec_data ;从0x62h读数据
- v g) Q5 c9 i! s% V( l! \) A
+ p1 l9 N! V: ~ mov ax,4c00h
5 p5 _: b/ n) `) f& v# | int 21h/ L3 Q# c- b8 n! \. `, T2 H
: B& O1 g+ Y0 O. }1 T# i8 O. e: r' qwrite_ec_cmd:( P# f% m) M% n+ E: |
mov ah,al
' T- v9 L7 }/ u call pmuWait4IBE
! z: @1 H. a$ Z, E. u mov al,ah
/ }* C% r( ~9 F) \ out EC_CMD_PORT,al$ l8 T$ C2 C! M: y
ret3 t3 O* A# X i: n- S
z: Q1 _7 s ]" o, j; W
write_ec_data:0 b. X0 R* G% J; x& Z; I
mov ah,al5 ]& M5 l3 u2 D5 j \8 p1 {; A
call pmuWait4IBE
/ D. E- ?( \# r2 ]! P mov al,ah1 A$ ~5 S. ?/ A" b
out EC_DATA_PORT,al
. i& z/ a3 L& L' A5 R% U+ I ret& c$ Q/ r% g# f0 Q2 O: U
5 y D# v- v4 O( _' x- a0 ^# eread_ec_data:
W* p' P! H6 O call pmuWait4OBF
% ~: G1 e. B4 i+ t. O4 R# }5 g jcxz $+2
! R+ Q* E' h+ K4 t jcxz $+2( @7 U1 W) m: C
in al,EC_DATA_PORT
/ w% x/ v) G: k8 |2 Q) K ret
- b9 p6 J [: i, U( t0 s 4 Q+ o+ U/ v2 p" s
pmuWait4IBE:9 T- s3 U7 E. _ g4 L! s
JCXZ $+2
5 Q- n! R+ Y- _9 ]- u JCXZ $+2 A! o1 R2 W/ A" L
IN AL,EC_CMD_PORT ;Read PMU status $ U1 V9 \4 S0 _# _, ]6 O' F
TEST AL,2 ;Is Input Buffer Empty?
, D% Y! c& M7 ~9 E" `+ \ JNZ pmuWait4IBE ;Jmp if no # I$ N. ^) m% p/ j( e
ret
) L9 t Q( o; N) D% f( G! r1 i9 z3 H, @0 Q5 ?
pmuWait4OBF:
/ q! {7 w5 |6 j/ F7 e+ H" S7 R; ] JCXZ $+2
5 W( I8 W* G: P: V% Q JCXZ $+2 # R/ _! G3 |- ^
IN AL,EC_CMD_PORT ;Read PMU status
3 p& Z. l6 J5 R; Y4 M" X/ [6 o TEST AL,1 ;Is Output Buffer Full?
2 ^3 a7 L% M0 T7 |8 f! ] JZ pmuWait4OBF ;Jmp if no
# I! u0 o0 `# D$ j ret/ c" ^9 X* M" y3 P/ @+ Q' D+ T
0 c' R7 I5 [/ H/ U5 l( T5 Pcode ends $ R3 b7 }) D! f: ]$ ^( H
end start
* w1 P2 U% u0 u" \4 f- S3 H
! ?, h, z ~0 f1 t8 M+ x/ ]还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
0 a+ @2 [' d; A* ]8 H2 K1 v' i9 f0 [! j8 J: r C
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|