|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。$ W3 B6 A7 ^" U t& I2 J- F
可惜读取不到正确值。一直读的是FEh......1 ], O0 b& f% ]# C1 N
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
( R* m( Z8 r2 s7 x& ~4 i* _) v3 x" y0 j7 M) M" |, M
代码如下(masm5编译链接通过,DOS下运行):3 D7 |# }$ W" N) }8 ?( h
- c* y3 j4 o: T7 R/ W3 O6 @2 eassume cs:code,ds:data, B* i( A9 A- s* o- J1 N8 u+ c
6 S6 l8 g) ~4 ^$ K/ |2 z% mdata segment
# ?% Y& O4 w9 Q: n+ y EC_CMD_PORT equ 66h ;地址端口 ' z* L* h% a. w+ N9 s; m/ b/ F
EC_DATA_PORT equ 62h ;数据端口
, U+ ?# _8 n0 p- c4 `$ ^ CMD_READ_EC equ 80h ;读寄存器命令 ) z- I( e8 e# e" P
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
6 [6 O! [ H! M) d: {data ends \& {3 W/ r$ r. L) t. k% q( b
1 J% ]' m: g4 I4 ]code segment
5 H( o) g7 W) ?0 cstart: - l4 @1 \9 h' s
mov al,CMD_READ_EC
0 G( }5 t: T! q0 E5 ^5 {# {9 N call write_ec_cmd ;写80h到0x66h端口
( V, |: @* A/ c- ]: S7 s: ~8 {# _; ~ mov ax,POLLING_DATA : T5 Z+ I) r- \5 ~7 F- T' W' }- ^
call write_ec_data ;写ECRAM地址到0x62h端口' w/ V* ~- r4 W b; P, E
call read_ec_data ;从0x62h读数据
7 x3 M2 `, O# Q- Z5 R V0 d$ c! k/ t1 U) G" C
mov ax,4c00h 8 a# W- w: T; w. r; f# J( w1 a1 d
int 21h3 q$ |- ?0 _9 P5 k2 ^
- \' t* ~& k) N- q9 n* \4 R
write_ec_cmd:
' A. b! P; S, G. H M mov ah,al
- V: F: H8 W- h! |! ?, z# H call pmuWait4IBE
+ J, e' s$ g& m, Q3 y: E3 s/ i mov al,ah4 Z7 H7 G" l1 M9 {
out EC_CMD_PORT,al- Y4 s, D8 r* v; P! v) v$ h
ret
7 i: U9 G# q) F3 O1 x' E; B2 {# p: v
6 B+ n9 a. o, v2 Kwrite_ec_data: K, J0 M" f/ |9 n% O7 ]
mov ah,al
5 e S' H$ Q( R9 n5 @6 J4 f call pmuWait4IBE& M/ w5 O/ E- p, H5 h) C8 d' a1 z
mov al,ah! O" }4 u" ^$ c% }% W
out EC_DATA_PORT,al
2 B/ ?; W7 g0 ?9 O K# ^! \ ret
. c4 f1 b; J& X. Z# @
5 }; s' e, x; V5 w" f rread_ec_data:
5 M% k) j+ V& @0 ~ call pmuWait4OBF! F% }* Y; B i$ k& s$ L! u
jcxz $+20 c% O4 R2 G" O
jcxz $+2+ I/ n/ n3 N7 _+ s
in al,EC_DATA_PORT
; S& J4 Z& z' T. G# N8 Q ret
& e, q! t4 M+ G5 } : C5 z8 Z' U% ?: e% f
pmuWait4IBE:
( G: ^' w5 I& L JCXZ $+22 R7 i5 c! `. F$ X
JCXZ $+2
s3 {% Z/ E1 } S/ K2 l6 c9 X/ H IN AL,EC_CMD_PORT ;Read PMU status
- H; U" c$ K$ v) p; T g TEST AL,2 ;Is Input Buffer Empty?
. `, B5 b& ]$ H; L JNZ pmuWait4IBE ;Jmp if no ' ~' C+ d$ K* U/ o3 G
ret9 c8 o4 u( F! n- `/ }- A) m
/ a3 n- u7 ^9 T' lpmuWait4OBF:
1 q& r+ k" M$ K' t3 t* M JCXZ $+2
, i: ~& w; M2 M; d) O JCXZ $+2 $ W3 a/ m- I# h* }0 X$ f
IN AL,EC_CMD_PORT ;Read PMU status $ \7 A. u b) b1 ?
TEST AL,1 ;Is Output Buffer Full?
7 j, ]3 ~6 e) V( o, H) ^4 N JZ pmuWait4OBF ;Jmp if no
3 U* _- t; |- N" i. o# T8 ]# _) P. K ret
: A" J' E; e) G- U' M0 O
* l" U+ Y+ |" P# Vcode ends
% [& @) D8 X, ~$ q9 m# ?0 hend start
$ [. Y, H9 P& O) o( M
: ?1 ~! ]$ ^0 {, c还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。9 B* ~. x/ N. r# g$ z3 h* H
- ?3 H1 ?9 \# o, F[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|