|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
}" F) ?6 d, n: R( P4 L可惜读取不到正确值。一直读的是FEh......" P! I4 T! g$ j4 d) h4 j( ]- b
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
* ?0 m ]2 F9 O( z$ x
; _3 d& S8 ~* ]& F* A代码如下(masm5编译链接通过,DOS下运行):' I- J+ }+ k" t9 j5 j! x" K' v" v
# Y& i) `3 S4 T+ N) R8 Z) P
assume cs:code,ds:data
0 p' p$ t o' m0 U7 w/ E6 b4 Z% N' N* i# b% @$ F3 L) h
data segment D1 }5 F& m' Q0 j+ M% G
EC_CMD_PORT equ 66h ;地址端口 0 m/ p# ~" t6 w% y5 X$ C* p* m: z
EC_DATA_PORT equ 62h ;数据端口 ' a. x6 `- U2 a0 Z( z: O
CMD_READ_EC equ 80h ;读寄存器命令
# u1 J, j7 ^$ \% F1 o POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 % O3 Y9 n/ _! p, N9 @2 ]
data ends2 z/ }4 h c' S9 }
- S8 `) m; H/ K/ w
code segment & F' p5 F; d& c0 e8 j1 @, t
start: 4 u: V3 Y$ O% `8 `; @( y
mov al,CMD_READ_EC & |# z. U( R6 M8 w/ X
call write_ec_cmd ;写80h到0x66h端口1 Z' s0 P' l% F; K) d4 t
mov ax,POLLING_DATA ! X9 ?& z! P* }1 ^+ f2 t8 _' ~* U
call write_ec_data ;写ECRAM地址到0x62h端口 ?7 l [; ^3 C' B8 R
call read_ec_data ;从0x62h读数据6 Z& f% |/ F0 y8 S: L" G7 ?$ z$ o
z! p: V4 R5 ~, ^+ C0 [+ n mov ax,4c00h
' V- \, _6 _3 c' J3 v7 I7 G int 21h
" p1 z$ L5 l; ?! L8 @0 {7 Q$ n" j1 ?2 E
write_ec_cmd:' s+ @! c& u; P6 I+ L
mov ah,al
& `) o* Q/ s% z call pmuWait4IBE3 t2 J/ k# V8 [" {
mov al,ah
& F. r0 C/ {: Q7 B. |, c! ` out EC_CMD_PORT,al6 m4 N: W0 P! b
ret
8 ^0 f% H8 c9 w. C/ `3 D
3 }9 n2 t4 D* d$ R# y% N+ bwrite_ec_data:4 A. w, R& ^* O- Y
mov ah,al
+ S0 i+ g1 \ y+ w' B call pmuWait4IBE+ ?9 Q _0 c5 p }; q, H( A9 H3 u
mov al,ah
3 f Y! e% \) E2 A6 v, i1 q1 Q# X out EC_DATA_PORT,al6 g7 F W' `: P/ i" I$ G! h% c; o. T
ret# n; a# ?9 ^2 s
# m+ Y+ H# F V6 @$ l' Eread_ec_data:
' M+ f- m2 M9 I call pmuWait4OBF' l8 v8 }) @, n8 v$ a6 j( I
jcxz $+2
- r% k m2 ?3 u- o jcxz $+2
- V( K# P+ C$ U( u in al,EC_DATA_PORT
5 W' X. C7 a+ g ret1 t: h9 D j. \
5 o; d4 e8 X/ Y& I1 u+ G1 ]# Y/ IpmuWait4IBE:$ }+ U, N1 O/ b0 B" u* K
JCXZ $+2, q0 T' i' n3 v
JCXZ $+2
1 n+ t7 `8 n9 R, ]$ J! g( }; Y IN AL,EC_CMD_PORT ;Read PMU status
& d$ k4 `" q F$ L h TEST AL,2 ;Is Input Buffer Empty? 1 z" u4 U0 x; C5 C+ \5 |
JNZ pmuWait4IBE ;Jmp if no
i" H) s/ \2 X3 A: X ret
( a5 c" h: g3 C' Z3 {: \
/ C1 f: A9 S$ ^7 c) i- npmuWait4OBF:- V+ T m7 G9 a5 C6 C0 R0 R: S4 ?
JCXZ $+21 b3 k! j# }, H, W" N; C; _( `
JCXZ $+2
2 A/ i, ^& ^* H7 S5 Z V IN AL,EC_CMD_PORT ;Read PMU status 7 G! g2 F1 [1 _- }& X8 Q0 P
TEST AL,1 ;Is Output Buffer Full?
7 j" d7 g: Y# J( o$ Y- H JZ pmuWait4OBF ;Jmp if no
; i. h% b9 h8 p6 J: N6 s6 ?0 A+ I ret
- P# \8 T7 @! S+ r# Z6 m" G6 b- q 4 H/ [, U& ?2 A9 H" D* N$ O- B
code ends 8 j4 @* T& r8 S7 D# d9 _, p
end start
. U |+ Z0 B, H/ v+ a2 y3 }: C! n2 x0 `
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。 w; K* D2 j) H+ z
k) \4 k5 w, d) z3 N
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|