|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。% K2 U" A5 b; B! a1 M# c
可惜读取不到正确值。一直读的是FEh......# h. n* C& Y) l& x8 p
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
& o' W; v- F+ W' y* T! v/ k
! e! |; L( K0 s代码如下(masm5编译链接通过,DOS下运行):! ?8 X# L8 N; V7 M. \; C& P" m5 ?0 _
4 ?" `5 }2 X+ B3 e" A* zassume cs:code,ds:data7 t0 @1 d; b3 N" F
; x5 x* K" i! v. Bdata segment
. @/ K! l1 k. ]9 M EC_CMD_PORT equ 66h ;地址端口 6 n' N+ F! \8 ` ~# m
EC_DATA_PORT equ 62h ;数据端口 ) h' q. }/ E8 d8 @
CMD_READ_EC equ 80h ;读寄存器命令 " n6 U6 D Q8 s
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
[6 p- q; }4 x: l0 Vdata ends3 L" o+ C6 e" {8 H* z
" e- u; i/ K: P9 e7 Wcode segment
$ ?+ G2 K* ]0 r5 z# Q1 ]start:
' Z$ X+ m" i! C/ ? mov al,CMD_READ_EC
3 N" V! i& \4 b% q7 n call write_ec_cmd ;写80h到0x66h端口
- a7 w- h7 P% K! H s, k1 S mov ax,POLLING_DATA
% U4 r" X+ N- X6 o call write_ec_data ;写ECRAM地址到0x62h端口1 h. o* j- o, l# ?7 d0 k
call read_ec_data ;从0x62h读数据$ n' n' Q( {' N6 f3 S' V3 [, t; h
7 g! t% I; }3 S6 J+ u5 o7 L! }5 N
mov ax,4c00h
4 F c6 f4 d3 h# w3 Y1 i& `) _2 U int 21h
4 |1 d: ]2 }: C& f' A) t+ w: ], K/ A: G
write_ec_cmd:
$ ~' S& \8 r2 w$ E mov ah,al
2 W9 v! O! R+ e8 ] call pmuWait4IBE) T7 t3 r! x3 V. \4 d( n! X
mov al,ah O* ?5 d% o) g2 d. p% b
out EC_CMD_PORT,al
+ U( P/ x% W i ret: h3 ]* n& Y" v
6 W4 }3 B6 Z% W; U2 j
write_ec_data:5 y7 i6 C; J" e' D% ~ \
mov ah,al
1 O5 O& t5 f- x! m# S call pmuWait4IBE
$ Q% R- n* @5 q8 Y; p mov al,ah' V, L/ r4 m! }. x- I! R
out EC_DATA_PORT,al
, t9 A* _% ^4 x4 \: q. {8 Y ret9 m) Q1 H+ p3 r! d2 D
/ V- j8 Y. z0 ~read_ec_data:8 i# ^$ a% a+ h$ O+ r! v
call pmuWait4OBF8 Z2 }. [0 N d3 S- I, \1 u
jcxz $+2
% {( R4 I* h2 E. x( K jcxz $+2
% T) r' ?0 b4 F5 u: R+ d in al,EC_DATA_PORT
4 l' \0 e- g4 o; X3 B ret
: E( D/ E0 e! S) O+ O
9 z6 n6 M8 G6 \# b0 Y- k6 D. qpmuWait4IBE:8 u" u0 F- B8 y4 C$ {3 g
JCXZ $+22 y7 S1 V- y6 t, Q
JCXZ $+2
5 O s" n$ H- I0 d% c4 \; L IN AL,EC_CMD_PORT ;Read PMU status
! ~+ p+ z; n' _ TEST AL,2 ;Is Input Buffer Empty? ) q" w8 Q5 B8 |( U: L+ r+ f
JNZ pmuWait4IBE ;Jmp if no 2 t( e- C+ w7 t- e Q6 J
ret3 a0 ] p0 P7 G. R6 M" K
+ E2 w/ v! {# v& w6 c: j+ f4 b
pmuWait4OBF:# v( o; t* O6 v( L1 n1 x8 |8 {% w
JCXZ $+2
* m% p& ~$ Z# b4 T/ T JCXZ $+2 * s$ }( D; A1 U- }
IN AL,EC_CMD_PORT ;Read PMU status
) A* ~# x' E2 E. u% x TEST AL,1 ;Is Output Buffer Full? 5 M7 L/ p3 T* z9 w) r
JZ pmuWait4OBF ;Jmp if no ) s. D" w; J- ^* s0 ]
ret6 G1 T* q! e) V& y8 k: l
& P4 F7 E% J' \code ends
. Z: A% M9 s% O- Y$ send start
~# @" H0 O- f* m& N' G! w- o8 \7 m
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
6 x" V4 l) U1 Z& g' F% u& n; K4 e) N; Q5 I( \* | P
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|