|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
7 u9 u0 D7 V5 d) k可惜读取不到正确值。一直读的是FEh......
" E7 b/ U X- G/ m希望各位大神能帮忙看看,指点一二。小弟先谢过了。, o- U) J0 O+ T# a: @
! M1 J) @3 Z9 m代码如下(masm5编译链接通过,DOS下运行):# o) `' f z3 ^9 d" x
! `( J* u$ Q m" C2 g$ J
assume cs:code,ds:data {4 {& g* R3 l- C" I
0 m# B# o. q% h/ f* u0 h% m) Edata segment
, X: T' @! J+ ?$ E9 l EC_CMD_PORT equ 66h ;地址端口
- P6 e( O/ @1 D0 T5 J6 O/ T5 j. S( t$ K& l EC_DATA_PORT equ 62h ;数据端口 . c7 V- D& g) o/ ~8 r3 Z j- e4 Q
CMD_READ_EC equ 80h ;读寄存器命令 6 h0 q) L v/ e' R! `
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
1 n* g$ v+ _4 {9 S4 y# X5 P+ kdata ends
+ v, z ~. o& ? G. N
* w5 ^9 _' X% f4 {& t J( ncode segment
+ k/ P' [) a" P z. Q* }start:
7 q. b ^9 d$ C* K* A2 X9 ^/ B8 X mov al,CMD_READ_EC
! _1 `* u; ]9 W call write_ec_cmd ;写80h到0x66h端口
# j$ T; o" ^0 n) Y% d mov ax,POLLING_DATA - S# _+ q; b6 x" b" E
call write_ec_data ;写ECRAM地址到0x62h端口
' H7 ~( Y! S1 c# s call read_ec_data ;从0x62h读数据7 B H+ B$ S- `
' |& A8 y) F" R1 i. d7 Y: Q mov ax,4c00h . B# x! o ^7 O& e$ T# K
int 21h
; X" p: _. {+ B( O
+ e2 p" x2 O# b& ]( O5 [write_ec_cmd:; P4 A; U0 q: d: m
mov ah,al+ S5 c1 S5 ?! E( t+ t
call pmuWait4IBE1 j. S' H; m9 m2 T
mov al,ah
* C( _- L- _% z8 Y+ \3 k% M out EC_CMD_PORT,al$ P& f$ T: K! ?8 J3 ^" b* C
ret
1 \8 ]& L! Q+ E6 e8 o; D4 [. f# G* Q, H0 ]) D z# i
write_ec_data:
* b4 X- M5 M3 `5 r9 M mov ah,al8 E3 W4 a# O9 _- Q3 T
call pmuWait4IBE& h. }% O! ~* p5 ?7 Q0 v2 Y3 C
mov al,ah0 V4 l& x5 O( |- O
out EC_DATA_PORT,al9 n9 N4 `0 K6 \8 k" k; X! A
ret
$ ^+ H8 g! I$ N6 p9 D$ ?" z( J5 X1 ]2 A8 I: N9 {+ a
read_ec_data:$ e4 U' P! I# q( r$ d$ m
call pmuWait4OBF$ E6 p p4 F0 t* h( n$ S
jcxz $+2- X. h( ]1 K+ @ E$ X; w' `
jcxz $+2 O2 h# c- Y6 H) K( U
in al,EC_DATA_PORT
7 s" ], y( |2 P; }) O2 O. ~ ret
: q4 t5 d) Q" Q# }5 E- D9 C% o9 o# e5 ?* N u" F O8 a2 g; D5 a
pmuWait4IBE:
; H9 ^ F; o2 @- }/ Z1 e JCXZ $+2+ ^9 {; z' \( ?' h1 C6 S# n
JCXZ $+2
T9 J* `) f& E V9 n+ v IN AL,EC_CMD_PORT ;Read PMU status / c/ z' w3 Q/ d, _( u& }. A
TEST AL,2 ;Is Input Buffer Empty? " U& ]3 \, y4 t7 }6 Y* m% x
JNZ pmuWait4IBE ;Jmp if no % x4 b. }$ r; h
ret
8 t1 ~$ p! e' d) E' f$ I- [5 j c# [
pmuWait4OBF:
2 G5 t2 ^4 @9 g JCXZ $+2( Q. n% S* v* z
JCXZ $+2 5 H/ a9 V' Q0 O0 t0 j, e
IN AL,EC_CMD_PORT ;Read PMU status ; l. ?: f1 R0 V! N0 z( ?& W* Y; {
TEST AL,1 ;Is Output Buffer Full?
/ }+ ^7 |/ ~3 L JZ pmuWait4OBF ;Jmp if no ) [/ t4 a d! B7 h8 M% ~
ret
. g' {8 |- J/ {% H) I7 x6 M
5 f2 \- S8 z/ C7 P7 ucode ends 9 T, h+ ?0 i! t( G& [
end start
/ i6 T" b! q7 b6 D1 P* [: d/ w% k& }6 M3 p. |+ M) w
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。! i6 X1 Y( R" u: [
1 u1 \2 j7 `# u) v; Z
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|