|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
; f2 p/ m6 Y! U! [: a可惜读取不到正确值。一直读的是FEh......# E9 @# Z' u) P4 V+ F E, R }
希望各位大神能帮忙看看,指点一二。小弟先谢过了。% ~5 w4 |7 v: ~$ n8 I
; m) y$ V9 b- j( K: C" o
代码如下(masm5编译链接通过,DOS下运行):; A2 ?) g0 P7 N$ b) j# M. X+ e& b
' a3 d/ U! C1 k' \7 I; Wassume cs:code,ds:data% \( }( R+ y( z
" w! |! x3 e' p5 v! E- N
data segment 8 x- \. A l: o' L, M8 s1 S% f
EC_CMD_PORT equ 66h ;地址端口
6 n j6 h9 W1 ~5 ^ EC_DATA_PORT equ 62h ;数据端口 % C- t/ w3 V' @3 k- S
CMD_READ_EC equ 80h ;读寄存器命令
* j( ^6 h0 d' a8 x; Y# f POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
& E. j" l* c t2 ~! N- N0 Gdata ends0 w" J+ O, v- X" w9 h
1 _. Z7 c P) Z: t
code segment 3 K, Z1 N9 W& q. e- D
start:
) y& X( w4 X& T' g" x0 c' ` mov al,CMD_READ_EC ! |# l! f! ^% g( ^
call write_ec_cmd ;写80h到0x66h端口
& d9 c/ u( ^, D; V4 Y7 T. N mov ax,POLLING_DATA . A" s, Z1 g: k0 e1 D0 G, z- c
call write_ec_data ;写ECRAM地址到0x62h端口5 o* ?* h: i7 J: Z# d
call read_ec_data ;从0x62h读数据' ~/ x5 w' Z- M' r$ u) p1 F/ ~
) _) o6 P* D Q/ b- E+ [) r
mov ax,4c00h 2 z6 s* i# |4 N) l# L
int 21h
* K6 I* ?" E# _+ ]; f) _: ?9 _# q1 r( {% P1 P
write_ec_cmd:
( L4 C: l) n$ z3 [ mov ah,al
9 e9 b3 j8 x4 k( v# } call pmuWait4IBE4 K4 l# u' V# s& A* J- k
mov al,ah X G& p. }& n- j( b
out EC_CMD_PORT,al
5 ~, c) v1 X1 P4 R3 j: v9 }/ b ret1 R; K8 x. h V0 j) s
2 [6 I4 C/ K, |. c
write_ec_data:
5 E w# h6 ?- ^( E0 \ mov ah,al
4 P% }; |# Y( m call pmuWait4IBE
0 ?: q& _' ]8 X' S+ ?& Y mov al,ah: j- [, n. L: I' V# ~+ n5 a# k
out EC_DATA_PORT,al
+ ]4 s( W' E/ Y7 z# p ret
1 [5 ~# L6 F! `0 m) M: G0 P( D5 R! h/ L R, T4 v4 k5 F
read_ec_data:
% F8 }# L) e4 v. z4 Q call pmuWait4OBF
) B. ]2 D3 e& y* K* C jcxz $+2/ X& I+ }+ ~1 |$ M
jcxz $+2
! c: @# s' \& V* V+ j6 T in al,EC_DATA_PORT8 v3 J' ]; f2 E- ?" N [2 F* d: J
ret
5 b* T9 T9 a$ E
" {) F- _ S4 n1 QpmuWait4IBE:6 I9 f t) t. C
JCXZ $+2
, |- l' Z# b. U3 V8 h JCXZ $+2
6 q0 _2 D" n7 r) B% E' L- z IN AL,EC_CMD_PORT ;Read PMU status
. Y9 o8 {! x3 Z/ n) G* c8 q" V TEST AL,2 ;Is Input Buffer Empty? * v" t' x4 N L. f+ e
JNZ pmuWait4IBE ;Jmp if no
?$ z7 e+ T* H) h! W! a ret
: l; z. n* n1 y4 m# j! f7 Q* E5 A3 N( Y' M9 d
pmuWait4OBF:
0 u, b9 v/ u: x m* m JCXZ $+2( N7 A6 t# P# \5 g) n6 e# _, W
JCXZ $+2 4 l/ h% H# |0 E8 y/ D' p% p
IN AL,EC_CMD_PORT ;Read PMU status u3 F0 y* G2 Q' v
TEST AL,1 ;Is Output Buffer Full?
6 r% a- o a7 ]+ `4 i( r JZ pmuWait4OBF ;Jmp if no ; x' t$ ^! v3 I; D9 m2 F! I
ret
( k1 K5 {8 D# ?0 D5 r0 A" w. M 5 c; x9 a, U3 I& Q0 k7 _( }
code ends
7 W( M0 u# s' H, g( R& v ^4 [0 Gend start
; X! b& ~- D' u
6 r/ B6 V1 r4 S还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
9 ]2 g$ ?2 Z9 J" m; d* J8 h3 X1 T; }1 a* O" ?" ?
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|