|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。, f; L# c& n3 ]0 ?2 P
可惜读取不到正确值。一直读的是FEh......
! B. }7 a4 P( l8 e8 Y( p希望各位大神能帮忙看看,指点一二。小弟先谢过了。/ t3 o( t" ]# @( Y4 Q
, Z$ i! l7 D' t* n# n6 F* O7 E' O代码如下(masm5编译链接通过,DOS下运行):( v6 E. s% d# G7 M! t+ K
M+ ^0 A1 l- c7 U4 H
assume cs:code,ds:data1 w1 z3 ]" B, h
4 ]# {- r# L3 M) q0 P2 y8 B
data segment 7 X+ f9 g8 t) G, Y" S4 I( D+ I c* }
EC_CMD_PORT equ 66h ;地址端口 6 `7 y6 m$ U3 [$ N* ^
EC_DATA_PORT equ 62h ;数据端口
( u- v0 m% {( O- l- c- d9 m CMD_READ_EC equ 80h ;读寄存器命令 A, F' A1 Y1 x# D) Y) V# {
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
( x$ S( U; Y, z* cdata ends
, N* H i% |$ J$ Y& U
% } f9 Q" g n" bcode segment 0 b" y6 p" t* \$ |) q
start:
5 s B' ?6 G/ _1 B$ H5 w! q mov al,CMD_READ_EC 5 D, ]6 K O8 X# b$ S8 C
call write_ec_cmd ;写80h到0x66h端口; W9 [9 p2 I6 k- a+ r: r
mov ax,POLLING_DATA ) P" o+ C& K! [1 X% D8 Z, f
call write_ec_data ;写ECRAM地址到0x62h端口' t$ ~. l' E1 O6 R+ t0 L7 W
call read_ec_data ;从0x62h读数据1 q, h' y, B6 A
8 n4 K; |& i5 D( z mov ax,4c00h 3 E' V0 \* m/ v, ?
int 21h! S' D# i' z% d3 `, b8 L
) p/ l1 F$ L' U
write_ec_cmd:
9 k9 {+ e& V7 `0 O; a- N mov ah,al
0 E8 _. B' ~* P7 Z' q: S call pmuWait4IBE/ G: k5 m0 w* j3 I
mov al,ah
3 h) k7 s- k1 Y, ^7 Z out EC_CMD_PORT,al
$ J$ a1 y# C3 N$ W ret
* |( N( d7 z* | c5 E2 |; [, j6 Z9 q) c
write_ec_data:" e/ ~$ c* X8 }; b6 ]
mov ah,al$ @( \) B% `7 |0 |9 m+ S
call pmuWait4IBE
/ ]3 f' w1 L6 e: u mov al,ah
( v" v* N! W+ N4 P, Y out EC_DATA_PORT,al
$ ]: F6 q: U- b/ O0 b ret- o9 ?" a% \0 H; g
; p3 V) E5 E) [8 C
read_ec_data:' v# ]& j+ X4 K1 a1 k& ]" u$ m
call pmuWait4OBF
+ h1 x3 }3 I) L jcxz $+2
( Z7 z3 ?- z% h4 P8 c+ J jcxz $+2
6 F+ f! S6 g. q; q0 g- [- @ in al,EC_DATA_PORT% _- ^8 Y. v9 E& m7 {
ret
" L) e' i6 L0 O' s3 O
% Y, E: G1 F8 \% K% \pmuWait4IBE:$ |" l- D \1 D" _
JCXZ $+2
5 r( g& P- U3 Y JCXZ $+2 + X: M9 v; M$ q- K
IN AL,EC_CMD_PORT ;Read PMU status
( f- c b/ C/ L- H6 B& x! g TEST AL,2 ;Is Input Buffer Empty? 2 G0 ?+ R% A3 \ F: h/ p( j) [5 Z
JNZ pmuWait4IBE ;Jmp if no
) f4 b8 J$ h2 ~; r* b2 y/ l ret
" p. C" U: p7 T7 I9 \$ S7 M: p5 i" ?
pmuWait4OBF:3 Y( W2 N2 t2 ?: X
JCXZ $+2 H9 W" r6 Q" y! p# S* K, J
JCXZ $+2
) l% ?. @) I/ O H0 C! [) O& } IN AL,EC_CMD_PORT ;Read PMU status 4 C4 m1 Y# b1 _# |
TEST AL,1 ;Is Output Buffer Full?
8 m: |* M& X7 S; i2 Z JZ pmuWait4OBF ;Jmp if no
% g! i9 B ^: C- s7 J ret8 d' g7 T. ^: D
6 n; @# T/ E1 A* q, [' w$ e$ Kcode ends G9 J3 b$ |& N; Y8 P; B
end start
" {4 |* F$ N. o4 [+ w6 S8 ~4 @0 I) h) I& R! f! V8 N1 {
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。* F9 z* s5 t* j; h. Q J6 s, ?
( [% ^- ~+ s& z! ]3 T$ T[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|