|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
3 ^/ k9 d# `+ P+ b" r可惜读取不到正确值。一直读的是FEh......- b# A( [8 W9 g) T+ a1 n4 L" U
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
" X0 i/ q) a& t, C/ Q& E. b. y( r0 N$ t2 E h# V
代码如下(masm5编译链接通过,DOS下运行):
& F0 r' n$ z; t; B3 f; J) F' ^
8 i6 x; Z# Y7 d. c0 J, ] Nassume cs:code,ds:data
- h: b9 n( F, a' N+ G3 f) d3 m+ B2 P$ M: @+ h0 b
data segment
- u9 t1 D1 J" W, a) m EC_CMD_PORT equ 66h ;地址端口 ) Z3 S3 o# U( W/ u+ w1 ~
EC_DATA_PORT equ 62h ;数据端口 / e0 J( m: p1 ?! Z8 w7 D# v- o% d
CMD_READ_EC equ 80h ;读寄存器命令
5 m' Z% m$ L( R- B6 x' K) ] POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 8 N$ f2 a; h0 m/ s
data ends, {' x) W8 e! y1 }* n b2 K4 z
' y, G+ S& D- jcode segment
+ S$ O+ g& `, {8 U4 U- Jstart:
. W6 M7 J8 X# K: U& j. M mov al,CMD_READ_EC
0 I6 J. ` W2 A, m% B7 |/ B call write_ec_cmd ;写80h到0x66h端口. G7 ~! o( r* c U* b+ p: o
mov ax,POLLING_DATA
% T& Y* a3 R- X' [# @- Q8 A call write_ec_data ;写ECRAM地址到0x62h端口
( l/ o8 h: d9 Y" X5 }8 v call read_ec_data ;从0x62h读数据
3 y* S ], A$ t" q7 w, ?0 u
( a& B* k& Z" I mov ax,4c00h 7 G1 U& T0 `2 V) J; g6 [
int 21h U! _. ]! v2 `; B1 F; ?
; c4 Z2 ~6 V* t6 B# r
write_ec_cmd:
8 i( b, S' C9 @/ t# @ mov ah,al
, n; J3 ]+ w6 b. k5 P' i call pmuWait4IBE+ F% n7 R7 f- T) z
mov al,ah$ u( M1 r* r4 P
out EC_CMD_PORT,al
# I+ ^; y* u4 |' N ret3 H1 _) g- @6 b( P l. U
+ T, r0 Y& ~1 ~
write_ec_data:
1 l" i8 ? g7 A- t mov ah,al( l9 u( Y6 V% `2 F! ]
call pmuWait4IBE
/ i- X; Q; P6 c3 i mov al,ah
B1 W$ {" M- d* z' @6 J out EC_DATA_PORT,al7 p# W- k$ H1 d/ L* s5 }
ret3 r1 B0 `$ Q1 {/ m) |1 ~" L
2 `3 N- @. t: w# l. s
read_ec_data:& y) Z0 d6 t% b+ T' S
call pmuWait4OBF7 O6 b6 J% C, Y6 V2 v" s% Z
jcxz $+2
8 \0 a, S1 i2 c3 T% [# q jcxz $+21 A, [, a( B) A7 k9 E( ^7 d7 \
in al,EC_DATA_PORT# R0 h6 l* R3 x' r* X! ?
ret% h8 W" j; A |) m6 d
' o( O$ q( E5 }
pmuWait4IBE:
( x* p7 s! r0 e5 \+ Z9 X JCXZ $+2
, D: U" i+ n0 z JCXZ $+2 - W: m, U) E: y/ z' y
IN AL,EC_CMD_PORT ;Read PMU status & @' s' e* K( q# g; |
TEST AL,2 ;Is Input Buffer Empty? ' n* ]6 X# K; j0 n- D- Z v
JNZ pmuWait4IBE ;Jmp if no " @- d5 L7 D1 |& \. X8 r2 S1 A
ret+ k% E) F$ m" F g
8 D& x1 k, D0 o* f$ Z
pmuWait4OBF:: _' |9 \. _ f0 O" K6 o* {
JCXZ $+2# L. ]$ X/ }2 c* ~
JCXZ $+2 / z- i( d% p: t% u8 _& R) N1 `6 t9 G
IN AL,EC_CMD_PORT ;Read PMU status
/ A1 d5 t7 ^8 F TEST AL,1 ;Is Output Buffer Full?
3 t+ b2 Y8 Y0 N JZ pmuWait4OBF ;Jmp if no
. y) s: g8 |$ R6 z ret) J" W, S: Y+ k
) [( v+ G$ y2 _* `( a9 I" ucode ends
0 Y( R$ e# Z6 `' ~3 T* X! ^# iend start0 g+ W" s' P b
! V/ M4 I- B9 ?( _( e$ ~) R还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
- N. e/ `9 U1 V
$ s0 b' H& p1 E1 a V% a[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|