|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
+ L5 B e4 b7 u: n可惜读取不到正确值。一直读的是FEh......
3 T8 C2 z$ ~* s! P希望各位大神能帮忙看看,指点一二。小弟先谢过了。# Y/ o9 l% H/ m
. S- J j8 a6 L W- }
代码如下(masm5编译链接通过,DOS下运行):
2 S; M8 ~' Y9 f, o3 ] m+ a f' P2 t# R/ M9 P
assume cs:code,ds:data
: N; L4 O6 n0 N, t7 N) @5 e
5 Y& f* s( \3 }8 M$ odata segment
* S( a( a0 G6 H( x; K8 A7 {1 c) x EC_CMD_PORT equ 66h ;地址端口
' {# s' ?' j- ~+ G: K! B EC_DATA_PORT equ 62h ;数据端口 9 x3 A- r0 c& y* n+ {
CMD_READ_EC equ 80h ;读寄存器命令 " [5 d4 t, y$ T; A4 u$ {
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 6 N }' P/ D5 v) h' e2 g! E
data ends
% N: A6 d- V0 x
2 h2 q: S5 [" rcode segment
5 p" Y- l5 J: k2 Ystart: * w: _& G& c2 ]9 _: B8 k3 j
mov al,CMD_READ_EC
T: z) f- S, ^) A a- i call write_ec_cmd ;写80h到0x66h端口) S! _# j9 T( {5 w# t& ?# a
mov ax,POLLING_DATA % {( k) e/ l6 F( d6 }- i& u
call write_ec_data ;写ECRAM地址到0x62h端口
% x) K; d4 l( w( y6 N! G; n4 N7 c call read_ec_data ;从0x62h读数据
/ ^* N M4 ?* R9 b8 I) ] ~
: Y; N/ E2 ^! E mov ax,4c00h . d3 o6 S$ d/ v' U* r
int 21h5 k$ G% L, J/ S! K; D
2 F! C) J- z/ C
write_ec_cmd:1 U, ^- n5 }4 D Q7 }+ S4 _: z
mov ah,al
+ `8 R8 J; G' ~ |( ~ call pmuWait4IBE
- M! R. g5 e( N mov al,ah8 o, N. ^3 ?( V7 |2 N
out EC_CMD_PORT,al
6 R L7 N% G8 a B" ^# z: J ret+ P* J0 k2 T3 C; D
0 ?& V. U7 m9 m. C, Q6 O# k, o) }( Rwrite_ec_data:" O8 c8 _5 z0 d
mov ah,al! `- v9 H7 d2 x1 m v5 {
call pmuWait4IBE
' A3 r( @" Y. D" D mov al,ah
' Q5 Y4 [( v I1 I9 M out EC_DATA_PORT,al0 ~) P/ ~9 q. M$ X. ?7 L7 \
ret. g( W1 ^0 z# x2 ]) e8 t
3 u3 W6 P9 u q
read_ec_data:' y$ J. E6 z: q* F
call pmuWait4OBF. m: F/ a8 Y; j$ h
jcxz $+23 j; Y0 ^( s. Q& G# o% [' o' V; R
jcxz $+23 A; b$ Q+ g1 f; W" J$ w6 G: o
in al,EC_DATA_PORT
1 ?, m- S! C1 y1 t ret
2 d. h7 Q" e. }6 W( v" F) \9 S* V
! [$ m) r2 j; [pmuWait4IBE:
7 k# O5 i( a8 O* L6 M$ \7 w! o JCXZ $+22 j5 `: D+ M) I2 x9 V
JCXZ $+2 ' `. P7 K2 z/ }' [1 R
IN AL,EC_CMD_PORT ;Read PMU status # @ d v8 @* y5 d
TEST AL,2 ;Is Input Buffer Empty? + @. U- m3 \1 g* Z, P& o
JNZ pmuWait4IBE ;Jmp if no , q* P* P+ K$ [' f; Y
ret) R8 O+ F z& v1 O# B& w
9 c+ p) R$ s7 f. bpmuWait4OBF:0 X) k$ {' t7 c
JCXZ $+2
- x7 [8 Q0 _ j JCXZ $+2
2 V& s- B) t" { IN AL,EC_CMD_PORT ;Read PMU status 7 q, L+ P; _9 u" x' ]0 x
TEST AL,1 ;Is Output Buffer Full? # O. u; S, ~6 f
JZ pmuWait4OBF ;Jmp if no
$ w! B% c! u; c. z0 x ret: S Y: [% z, g. K( g, M3 ?
/ X N0 R9 B5 U7 u; d" \code ends ) R/ h0 I; _6 S( d1 T" a
end start
# `- C: g( j5 H% W) D4 j, Q& i0 G2 M0 X, b
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
' G0 L; C0 W2 r3 t
6 q2 y3 w- O' G' K[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|