|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。3 |/ ~* `% S' U0 h) O! H% h- Y
可惜读取不到正确值。一直读的是FEh......
7 f! r1 z: L; K1 a/ L希望各位大神能帮忙看看,指点一二。小弟先谢过了。
+ B/ x8 ~$ h: Q
; J+ j' {. ^2 p' _# e, ^" s! B代码如下(masm5编译链接通过,DOS下运行):
4 r. {" j7 }8 L* f) S& C J) ]9 {+ W# r/ Z" s
assume cs:code,ds:data
) j$ E- F! ]2 P, g
/ b9 v- _5 T' D0 d0 N; b) }data segment
( v- R, ~8 @/ I4 ]4 C/ ~; n# x7 \ EC_CMD_PORT equ 66h ;地址端口 * M3 _9 M' T2 V
EC_DATA_PORT equ 62h ;数据端口 * {3 h3 I# t5 S+ s/ o
CMD_READ_EC equ 80h ;读寄存器命令 2 Q" w9 [5 S: ]8 e9 m! W
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
1 U9 O7 B0 b" i2 q7 Z0 _data ends }$ w# O% ?: L( }* ~* i# u1 d) V
! s2 h' Y, |2 hcode segment ( D$ c' K* N) h: Z
start:
( X. R& c6 h( Z1 @6 W mov al,CMD_READ_EC . U' r9 T3 w! I7 g9 F. B
call write_ec_cmd ;写80h到0x66h端口
6 O0 l0 l- [6 m( O! ] mov ax,POLLING_DATA " {, w9 n; y. J: p+ j3 v3 }- L" a, M) H
call write_ec_data ;写ECRAM地址到0x62h端口 L2 I5 N' ~, e; |
call read_ec_data ;从0x62h读数据
8 s+ S- F! w' H/ N" n8 o! J5 h) ^4 a0 n. ~
mov ax,4c00h
* K2 q Q1 x# l+ n+ N Q int 21h
0 l c: C" z9 L. y, Q% `6 V! @0 d# x7 k0 u; d
write_ec_cmd:$ [! J% J; ?% I, W: Y0 K9 J
mov ah,al3 t# o/ X, s; u% q2 M+ v1 Y
call pmuWait4IBE" P4 W' k$ Q, o6 Z4 Y' d) }* |
mov al,ah
. q: C8 s! R( a1 F out EC_CMD_PORT,al% }& y( X; U+ d3 r! C( `
ret/ @5 i/ ^& ]. e! e2 E# I/ ? p
9 E4 s( y0 F1 mwrite_ec_data:
% }& O$ S0 j8 L% S+ o- \8 I: \ mov ah,al
; ^1 |: C+ ^1 A/ j4 Q. L call pmuWait4IBE
7 O7 ^; ?5 P% @3 x/ t" S8 R7 L mov al,ah
. N" ^$ r: S6 E, ~% a# f+ B& W out EC_DATA_PORT,al) P; N X3 _, f. \/ y
ret
+ x/ r. H$ \# ]8 ^/ y7 }/ v) t+ o/ p
read_ec_data:2 |" {, }# [! W: h% A' b% [
call pmuWait4OBF
) _/ Z6 [: k U0 `' S' h7 c jcxz $+2
+ X4 l/ L5 U+ T( [) s$ t7 N2 S jcxz $+25 v" b9 Y! S8 E$ B
in al,EC_DATA_PORT
3 E2 z& o* H( P$ N- Z ret
3 J) ?* w9 n6 Z8 g z' `# l& G
, Y+ U# \0 M, H8 ?0 DpmuWait4IBE:" M& V/ P4 M" U* ] I
JCXZ $+2+ r8 ^( V. Y" w: h/ V4 D
JCXZ $+2 , u: w) v$ }8 E- r M( R1 P
IN AL,EC_CMD_PORT ;Read PMU status
& W4 R) K! g4 u, r! I TEST AL,2 ;Is Input Buffer Empty? 5 X1 {* J3 e/ o0 J0 [; B5 u) X
JNZ pmuWait4IBE ;Jmp if no 9 s/ N" j y. i6 w0 b9 p
ret5 m9 G! L) Z, ~! A* _! K/ [
! v" w8 ?, H9 Z1 FpmuWait4OBF:: p$ ^. T* a& ?# Z3 ]; E- M, q, O
JCXZ $+2( G' i0 H. l( b- D
JCXZ $+2 8 l- Z" |; i# @2 b* p- r6 N0 m
IN AL,EC_CMD_PORT ;Read PMU status
7 c* Z; p7 O# u. N( F/ h, n TEST AL,1 ;Is Output Buffer Full? 3 B& ~3 c% ^' l5 ?
JZ pmuWait4OBF ;Jmp if no
9 m/ E6 ]7 }& J4 U# b; s6 b ret
2 v1 ^. }" c5 x5 Q . }6 T; q& ^8 {. C3 `: I
code ends - A: [- a3 b8 F# t/ G: V
end start# Y) m- E9 } e- [3 e
( r/ `# p! a$ R3 J
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
8 K F7 M9 ]/ `6 a+ |+ y1 s2 W' [
5 u& T. Q4 Y& t& Y+ z. w8 a0 d6 t[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|