|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
6 a3 u/ w; ~8 f) R% Q) R可惜读取不到正确值。一直读的是FEh......
8 R! N# ?4 g+ [: j& O希望各位大神能帮忙看看,指点一二。小弟先谢过了。
2 Y3 |8 s! a4 E1 P% ^$ R; g1 Q: y- t8 a( N5 w& R9 k6 n
代码如下(masm5编译链接通过,DOS下运行):0 G& K" n+ \, {8 [5 E6 ?& b7 c' Q
2 x1 @8 w1 s1 qassume cs:code,ds:data' [3 w0 N Z4 M. Z
& M4 m1 H" P# }data segment 5 t9 G% h3 J9 m( \2 O7 u# V
EC_CMD_PORT equ 66h ;地址端口
* u/ A! i; Y" G; x7 p" B) K$ X EC_DATA_PORT equ 62h ;数据端口 2 x- c- y# R, y9 \
CMD_READ_EC equ 80h ;读寄存器命令 1 V5 G U3 H* u: ^4 y
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
2 {! O# E, p8 q" i3 ]1 e9 e4 m9 ddata ends9 m0 k8 S. o, a* v; L; \0 U; W
9 l2 u) H3 c6 n: M/ Tcode segment ; y! G9 x! Z6 s5 {7 ?$ S; z4 @+ ^
start:
3 E$ D9 A. @6 }$ c mov al,CMD_READ_EC
4 |; l( E5 V- B& Z! C call write_ec_cmd ;写80h到0x66h端口9 l+ N! i% b: c* B3 o
mov ax,POLLING_DATA - r& \& T$ t) _
call write_ec_data ;写ECRAM地址到0x62h端口) H' C3 `6 g6 M- I
call read_ec_data ;从0x62h读数据5 ^: c. i1 y( i$ a
: F$ w$ u3 X; @) h. V4 e
mov ax,4c00h
1 K8 S$ k; @- K( B int 21h! E: b1 o/ w( N0 Z- Z
4 d' X d" G( m7 s% [/ N) `
write_ec_cmd:
$ m7 a. H. b) k6 Z mov ah,al
+ K& s C2 i- R+ U' P2 } call pmuWait4IBE
$ l0 i) ^+ I; `0 e mov al,ah
! }5 D! E( `3 I$ J out EC_CMD_PORT,al0 G. C6 R8 o6 i* T& s/ k& f
ret& c' ^* ?, Q4 q8 n& r, V
: o5 V5 W, n; v0 s+ e& }/ G: x
write_ec_data:) n* Y0 Y; q% \; q- n, q
mov ah,al! I- `# D. [7 W9 A
call pmuWait4IBE; u( g- s0 ^+ b& g- t6 p* m
mov al,ah* N5 N, j3 Z2 Q" _+ m+ @- z
out EC_DATA_PORT,al0 K! ^' J* v; W9 `+ @) d& c5 v
ret8 f6 H4 x0 N2 z: T
2 d* A- b* i. T8 Yread_ec_data:
. B& j. m0 f% y2 @( l call pmuWait4OBF
; _8 a9 I l, g, `4 Z jcxz $+2
, ^/ H+ G3 {# [3 o# F* ?. G; ~ jcxz $+2
7 q$ Y7 Z: |; | in al,EC_DATA_PORT
7 E. z& S V* x& ]4 S ret- I- V5 k" H) L# S- p
3 F. E" i1 n7 S7 E9 n+ P4 t/ J Z
pmuWait4IBE:
+ y3 c, h9 R3 Y) O, ] B JCXZ $+21 p) D7 G% A7 y% K" j- P
JCXZ $+2
8 C% h: R3 g E1 n# f IN AL,EC_CMD_PORT ;Read PMU status
7 M, z9 d$ L0 M TEST AL,2 ;Is Input Buffer Empty? * t, f9 V/ m9 O
JNZ pmuWait4IBE ;Jmp if no
' A+ h6 i8 I- Q; s, K ret
2 V1 [! h2 m' C4 C& Z3 @' I* `8 k6 R' T' ^
pmuWait4OBF:
# R" U6 B9 z* m! B. ~7 z JCXZ $+2
( s) B8 G9 W2 b5 X5 F3 n9 x8 A JCXZ $+2
0 K' C) g2 j7 ~9 r/ H+ M, R IN AL,EC_CMD_PORT ;Read PMU status
) m+ B" L4 `$ G1 T TEST AL,1 ;Is Output Buffer Full? ) Z* t6 a1 Z/ B" g) Q J" d' b0 Q8 l# L
JZ pmuWait4OBF ;Jmp if no 8 I9 }, ^) L/ I5 s! E
ret$ U# f' ^) f5 ]2 M9 u' a. q1 ~8 M) \
$ }1 f9 K' F; E; T7 C7 C
code ends 4 K c( a( ^+ ?6 C4 q
end start
- U3 J. Q w& A3 C+ p+ b- I. ]% u( T4 Z. K/ s: b. I+ V
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。: P# |8 _7 j: j5 h
4 ~' E' y" ]; G9 M& ]- i[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|