|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
, A! b. F8 T1 s: k3 C! l可惜读取不到正确值。一直读的是FEh......3 p1 O6 A5 A; S0 S
希望各位大神能帮忙看看,指点一二。小弟先谢过了。; I) z; a5 k% W, G* y
. V2 N) G8 d# j
代码如下(masm5编译链接通过,DOS下运行):0 _, ~+ K* W/ P
/ n- \8 U) t6 u) \assume cs:code,ds:data
5 S( o" [( m3 @1 w
: U- ]/ Q, S* b; q/ {data segment
5 R, D8 q/ P1 ^- U, c3 V8 N EC_CMD_PORT equ 66h ;地址端口
. N8 m$ J0 D+ L+ g- ~ EC_DATA_PORT equ 62h ;数据端口
$ Q8 P$ C" s ^% E4 J7 n/ }2 b CMD_READ_EC equ 80h ;读寄存器命令 , ]% R4 L! Q. g$ p K
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 & o' g9 h7 R2 [- w8 M
data ends
! R- x4 p1 n+ f* g' W& y+ ?! A( I! F
9 s8 i9 E# r7 M; J* g6 k# E( j. tcode segment
6 G/ R5 q8 w8 V; K8 ~( b# X% ^start:
$ H9 v4 h: M/ B8 R3 j mov al,CMD_READ_EC
! j; m [0 H1 D8 ^ call write_ec_cmd ;写80h到0x66h端口
! I3 H" x) F8 q4 m' N3 e" d$ t mov ax,POLLING_DATA & K, m! w% k6 w& @$ ]- Z
call write_ec_data ;写ECRAM地址到0x62h端口
1 `6 R, ?/ R( C$ z, } _ call read_ec_data ;从0x62h读数据: {! o$ U9 F$ y I
9 g, R. j: |4 p; u+ o k mov ax,4c00h
) @5 l S( _% ^( I, \ int 21h
' {6 c4 C$ ^, D
# f- F% n) G! H6 Y; N) \4 f* \% V3 kwrite_ec_cmd:1 C/ r$ c, H: x- o3 J: Q j: [+ r0 i
mov ah,al
. H0 n3 @2 O. C6 }/ L) L' I call pmuWait4IBE5 o! b/ m0 Q9 O8 E
mov al,ah
' L: B$ G. n; R! y9 c }" O; A out EC_CMD_PORT,al/ ~/ ~7 x4 W1 |: u% \# d
ret
/ I# y; {+ z) l4 K% y$ m
4 a1 x, @; C# G, ]$ f( |7 m! Zwrite_ec_data:
! h, F% V+ ~' `) o- ~( y( x mov ah,al
1 O9 t/ r& w' t- L' j! Y T call pmuWait4IBE
! k( Y! J# K6 ]" n6 F mov al,ah0 W0 ~% i! \+ Q1 g9 c
out EC_DATA_PORT,al% q' e/ P0 e3 p3 q8 h
ret" O7 a! u) |+ _% g9 T( L& Z
% b+ d2 I9 `' p5 I7 e% G& B1 b/ N
read_ec_data:9 }2 I* G) V* ~. {0 C
call pmuWait4OBF# J9 t5 j# j% R4 d9 ]" R( E
jcxz $+29 P6 N9 @* l/ K' Y0 Q. B) V
jcxz $+2$ U6 M( y% |' Q6 A8 ]. F2 l+ L
in al,EC_DATA_PORT) b; A, j3 v! I {' Z* V) r
ret
$ I. t: W f! A4 f5 ^6 d 8 f* U( S& S+ z) k9 @0 \. c
pmuWait4IBE:" Q( R, p M4 Z4 t, {8 I1 d) E
JCXZ $+2( p4 ]8 _+ P# [" u, A
JCXZ $+2 5 }3 ]1 T. N5 @, p t# Y
IN AL,EC_CMD_PORT ;Read PMU status
+ `( j) U0 u% T( L6 i4 q3 Q$ y TEST AL,2 ;Is Input Buffer Empty?
T: s7 d2 u' z JNZ pmuWait4IBE ;Jmp if no
& w& P8 x) n) L2 z ret; j1 T2 r% P% P, \
$ j% w, ^+ x4 XpmuWait4OBF:
) |: O5 n5 A* Q, _- t% H j. n! W JCXZ $+2: P% p, h9 @6 W
JCXZ $+2
% q& S/ k' e$ s- V0 ~% a1 d9 j IN AL,EC_CMD_PORT ;Read PMU status - _5 u3 y6 q" S. _* @4 h
TEST AL,1 ;Is Output Buffer Full?
6 \6 B4 Q& G& ^" B" L JZ pmuWait4OBF ;Jmp if no
. |; e2 ?3 s( Z4 I ret6 k$ G7 j0 a) S+ u* o
) ~. Q9 K1 r! x m
code ends : X1 m! L; `- I! Y1 d# E' Z% w
end start! k0 }+ j. B2 E5 m
9 g& b; c# A9 \" O, ?7 m还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
4 u5 V6 _; }+ j) {# e9 x* x$ r8 }. z% N$ q4 c6 K' _% M
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|