|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。7 i" a! K7 V* }, B
可惜读取不到正确值。一直读的是FEh......, `0 t) N" ^ E% }$ A# j/ l: W
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
/ U1 {( Y' a! v* l) F2 i. l
. `- G& c9 r) e( J. P) l. @" f代码如下(masm5编译链接通过,DOS下运行):
7 A0 W5 R3 c2 }" x/ x! E0 _
4 t% j2 W- U x, H: L; Zassume cs:code,ds:data5 ^8 C6 L0 ^( j1 x
. ]) p" \0 h4 P% [
data segment
" k8 H) Z7 Y* L/ m" f$ @4 [" ^/ | EC_CMD_PORT equ 66h ;地址端口
3 C& a0 E- y$ q. `2 y EC_DATA_PORT equ 62h ;数据端口
5 _4 G9 O4 M% d. { CMD_READ_EC equ 80h ;读寄存器命令
" o/ ^$ ~. V& L: ^ POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 - x7 {7 H% g+ P- g9 @
data ends
$ k# E$ B' e+ o$ x [/ H 7 a/ T# C8 q* G: x/ N
code segment " [7 K& f9 r# ?
start:
0 U( ]$ m" k) |2 t1 k) [+ Q% Y0 } mov al,CMD_READ_EC 0 `( }- \+ O/ i
call write_ec_cmd ;写80h到0x66h端口
6 Z4 s) I* f( ^, ~8 o mov ax,POLLING_DATA , I4 x; u }6 v' a1 S/ w$ J. z! p
call write_ec_data ;写ECRAM地址到0x62h端口
! [: a* c1 W8 s! Q" D4 M call read_ec_data ;从0x62h读数据% u2 A, T! w! `5 `
1 p' Z/ V. @1 S0 i* R+ N7 E+ i# d
mov ax,4c00h " \+ \( u, `1 {. z, Q, H! O* Q
int 21h; ^& K2 v" Q7 d, l
& ?# Z, u6 Z. T
write_ec_cmd:
0 O0 T* S; D5 f% l; l( q mov ah,al
" K1 a8 }. H0 h/ _& m7 W call pmuWait4IBE
; i- V4 W! _) ?7 l) q mov al,ah3 c+ U4 M5 l& ^4 I. y1 g
out EC_CMD_PORT,al: f4 b0 ~: L9 R/ F' O c
ret
! _5 S! R) q% j. t% \* |0 O- R: b4 i4 d
write_ec_data:( f c: F" V% \
mov ah,al( E k: \ O+ |% o2 Q8 x$ D# a3 y
call pmuWait4IBE; z @# y2 }9 J* {9 z* e+ L
mov al,ah |! W! `" x: H/ W7 s L
out EC_DATA_PORT,al
- T* ~; ]" t6 g) o; L' H ret( P' v" y7 H$ z
3 Y" J7 q3 _5 w! O
read_ec_data:
( [, k0 n, g5 m* Z8 P: b$ G call pmuWait4OBF( [6 j5 k+ g/ }1 \: q/ S, `
jcxz $+2
" Q: r5 `. _% `3 o" T7 L jcxz $+2, i3 o |+ g: i" H( s+ T
in al,EC_DATA_PORT
# @7 k# |+ F& V: t+ S ret; X( v' x) y6 x2 S. O/ T' p. i: [
# J5 a1 {% U! K- `# S( {" m: YpmuWait4IBE:
, h' A' I! {4 R4 D: }2 f JCXZ $+2
' ?5 `8 u% n' J% S. m6 i JCXZ $+2 & x5 R5 X) @. j0 s' b
IN AL,EC_CMD_PORT ;Read PMU status 6 l* y w5 [: q7 X) l; H) D6 @
TEST AL,2 ;Is Input Buffer Empty?
/ [# c0 |) m4 L7 E; x s- ]- s JNZ pmuWait4IBE ;Jmp if no
2 F$ m8 V' A. I c ret" |; k t" Q7 x: v5 z3 k9 r
" v( O. ]3 E8 E# ?8 ~
pmuWait4OBF:5 ?/ H9 I) `" l: s
JCXZ $+2
! @* S' v' q6 c) \3 n$ k8 g JCXZ $+2
- v! G% g1 r7 T IN AL,EC_CMD_PORT ;Read PMU status , n/ z* N0 j+ N/ d H7 D# F$ m) L
TEST AL,1 ;Is Output Buffer Full?
' d/ A6 X6 W" ^ JZ pmuWait4OBF ;Jmp if no
0 O7 i7 c" S0 q5 O; o+ g ret
. I [8 z8 D+ _* X, x0 U6 \
5 |+ T# k" ?% \# {6 }7 dcode ends : X. ~! u4 r _1 K( V
end start
% r# K1 K$ v3 ~0 T' H; b- y9 z8 ]$ h3 k
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
( V6 c8 J. K& `1 `
4 a3 N9 h% F7 E! h+ Z[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|