|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。" ^6 g Y% y$ k0 ?9 ~
可惜读取不到正确值。一直读的是FEh....../ |$ Y- K6 S3 j1 ?
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
" B4 M# |- [7 o+ d1 l% l7 y* c+ K- W5 |
代码如下(masm5编译链接通过,DOS下运行):) Z: b3 z& w1 T( V* L$ A
( M! Z' `$ Q. ?' _# k" X/ c
assume cs:code,ds:data
$ `3 L8 s5 B! w9 a
) m; G0 J8 A/ o: L: D; rdata segment
2 \5 y6 x; u* w EC_CMD_PORT equ 66h ;地址端口
7 G0 I, X. ?# } EC_DATA_PORT equ 62h ;数据端口
$ x- e% a& z2 ]1 k% s CMD_READ_EC equ 80h ;读寄存器命令 7 O6 i9 Z$ S# u" ^' R3 c
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 & D. b& U- Y0 c4 v7 W
data ends
7 ^1 ^& v8 Y9 p
' K# x7 s" F( T5 ^9 u, pcode segment " q( B5 t3 Z# E( o/ Z+ D$ p
start:
+ }# v$ o% W. k& F mov al,CMD_READ_EC
4 b3 N4 i$ i" G1 {/ Y; H3 q9 D call write_ec_cmd ;写80h到0x66h端口% o/ z, ~4 u ?9 v& Q4 l
mov ax,POLLING_DATA
: s( G% S# P$ q- b' ]% W$ L call write_ec_data ;写ECRAM地址到0x62h端口4 X6 ~1 H0 B4 P( w
call read_ec_data ;从0x62h读数据
5 ~: `3 G4 v2 n% Q& K4 y8 |: h" r2 K M
mov ax,4c00h 9 u% u8 o& \' o+ p! V3 I$ Q
int 21h
# P, p, e! X, B4 u' q- |
- ^! R) p$ i8 j( r: t9 owrite_ec_cmd:
& b! ]' N5 O4 b. J& z4 X mov ah,al, t, e! \5 D$ s, I6 N P
call pmuWait4IBE* z' v! E1 C7 p3 Z9 \
mov al,ah
% k U+ w9 W2 d) z0 K& O/ V out EC_CMD_PORT,al
4 F6 v( V0 b7 l3 K8 W6 q5 \- \ ret
: y3 E; I- ~: X' M( H1 N* Y& \' X9 l+ B4 i
write_ec_data:
- B% |# a0 z( L ?& ]+ K mov ah,al% D0 B& o& `1 |' ~; r
call pmuWait4IBE
8 ? j3 P$ L1 ]. V, I( j mov al,ah3 _# \- [+ U5 b3 z8 Q
out EC_DATA_PORT,al
1 p- w0 F; q* r2 v ret
* V& q& o W3 |0 T1 P+ R6 y+ `& v4 w* G
read_ec_data:) f0 T( x( f( D6 e" s2 @
call pmuWait4OBF% Z0 m# c3 i* g+ z- E4 u7 r d+ [
jcxz $+2
" c: S3 s' D; P( M) }, d+ ^ jcxz $+2
" z5 ]) {" L+ e# }- R/ t7 ]6 J in al,EC_DATA_PORT
" K, T2 S6 p% ^% { ret/ L& N1 m9 R' M7 j' M6 V: a& ^
' ^7 Y" V, p7 X K1 v2 h7 `) E: BpmuWait4IBE:8 w! g. D6 h. _9 P2 N' V5 P+ a
JCXZ $+2
5 C- V: l1 I+ d3 Z JCXZ $+2
, t7 K3 Z5 r$ I8 Z( J* j' L$ d IN AL,EC_CMD_PORT ;Read PMU status ) P; T; O7 Y5 w: `
TEST AL,2 ;Is Input Buffer Empty?
7 O* ?7 a& V7 ]$ u" `/ F* H7 S JNZ pmuWait4IBE ;Jmp if no + d: y: A- A0 g: h( J2 @; h' E
ret
" _* R7 z. r6 O$ @& U2 E# S: z; m8 A, m
pmuWait4OBF:
( A; y& |. v. p4 S! Z JCXZ $+2& {" O) L; ~' V: D8 w3 V- A" z
JCXZ $+2
# C/ I( x& A" L' |+ x6 \ IN AL,EC_CMD_PORT ;Read PMU status ! l5 r0 e0 N- p) r* h6 I, b9 P
TEST AL,1 ;Is Output Buffer Full?
- F" e% q( G1 U. m Q& i JZ pmuWait4OBF ;Jmp if no * v9 j' o: e3 n, J9 k; L: U6 E
ret1 w9 N( z2 j5 f" F
0 d% U& q8 p1 q# `( ~code ends
/ H( e2 @2 T7 \8 Pend start W" ?; c/ a9 S
% q9 h/ F$ Z. y* ]1 |还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
, p3 {( W+ e3 [) d4 k3 n' t; h% B, w6 [/ U/ [0 }4 k& J) Z
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|