|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。; O& H. `+ N8 K3 o& {3 w% T
可惜读取不到正确值。一直读的是FEh......6 m( J9 K6 L7 r
希望各位大神能帮忙看看,指点一二。小弟先谢过了。" {/ z0 {* Q6 ]. \
8 v% l* V+ ?4 D3 F5 ?* s+ Q代码如下(masm5编译链接通过,DOS下运行):: R) H) N! N$ R4 v' i4 a
+ N! k, H: z4 Y
assume cs:code,ds:data( c2 F0 Q* g4 o8 g
% ~4 W' R9 C, D1 sdata segment
/ `! o# _9 w0 B2 E- @0 M EC_CMD_PORT equ 66h ;地址端口 1 P, R2 u! ]0 O. p8 P2 C. O5 H
EC_DATA_PORT equ 62h ;数据端口
( t" t L# n2 U# ~8 P6 { CMD_READ_EC equ 80h ;读寄存器命令
. N- y- u# ?4 o" Z1 a POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
8 N+ ], h# j; _: X7 j1 \data ends
, ]$ B% O: f% d, A; O( v 2 X' c. N2 R+ D0 T1 Q! C$ d+ Y& M
code segment % p" k8 p1 r) L
start: * {( ^' o3 @; N9 `( ?: U2 B
mov al,CMD_READ_EC
- b# T' e$ }+ P1 u5 j call write_ec_cmd ;写80h到0x66h端口6 y r1 _% h( i6 x+ l
mov ax,POLLING_DATA ) u- a! V t) g" u9 b m3 B
call write_ec_data ;写ECRAM地址到0x62h端口
# Z3 m+ C7 q L0 k' `! d' ~ call read_ec_data ;从0x62h读数据: ]* J7 e/ A8 p6 I; f+ Q# x/ h
; ]$ v$ M: }! T R
mov ax,4c00h
( P( K) O# u0 K6 I P int 21h
3 v0 D" L0 m! P3 I
% ?4 g1 c; a0 x1 Cwrite_ec_cmd:
) Q9 S/ m% ^9 c mov ah,al Z% X X8 H+ N4 t- F. [
call pmuWait4IBE
) W, S: O$ j& J8 C; s' l& W mov al,ah4 t2 s5 Y$ \. [: `( n( E; U
out EC_CMD_PORT,al
7 m2 |: c5 H% }8 l; |4 d ret
% q( d# i7 ?; X3 H( [ o
. f! r9 Z b3 r9 U3 Vwrite_ec_data:
" d) N# k5 D+ a# l9 B+ | mov ah,al9 \8 l, g& L) Z" q. C
call pmuWait4IBE: s, s" C- X% h( q: K1 b1 X
mov al,ah
& i+ H* b" N0 v out EC_DATA_PORT,al
( L; r* I5 c/ }9 a8 }" l ret
& A4 \$ O; w" Y3 M
0 G: |: ?6 K# Z1 dread_ec_data:5 ?3 R+ j+ r+ }! Q& g
call pmuWait4OBF
- g5 ` t' j$ ?+ Y! L+ X2 ?' R jcxz $+2
: a/ c* u3 O! ~$ J, b jcxz $+2
1 l1 o1 v% h' m9 _0 c: v in al,EC_DATA_PORT
6 E l; x' u7 e. s. Q+ F9 V ret
! L' B- x3 \3 | \; Y' ` 3 `! ]8 K* J. H# ]
pmuWait4IBE:0 J! S( O; b; l% U0 Z* \( ]
JCXZ $+2: J) n( ^: t5 L* `+ s* G
JCXZ $+2 2 J: f4 i1 n& [8 ^- M+ o3 S5 z
IN AL,EC_CMD_PORT ;Read PMU status % Q" e7 u: M( q
TEST AL,2 ;Is Input Buffer Empty?
+ f; Y% c m7 H& t+ S; R; O JNZ pmuWait4IBE ;Jmp if no
- i2 Z5 {' t& u ret
$ B x! O0 V' p- q5 L% O' q' V! e' a! v& _7 |+ ]2 D
pmuWait4OBF:1 L6 W2 a! [- ^4 }$ K* s* v# ^/ P
JCXZ $+2% N! z5 P* N9 z" t. A0 \7 p& _
JCXZ $+2 7 K1 S+ f2 M& t+ l8 q) H& E: |0 I
IN AL,EC_CMD_PORT ;Read PMU status
+ U& h) v, K( a3 N* B: ] TEST AL,1 ;Is Output Buffer Full?
1 ], A& G* P- h% H* H JZ pmuWait4OBF ;Jmp if no 7 U8 @! Q* W, Q" K7 E/ m& Z6 d' p
ret
% T; b- b- O7 X7 L
! e, G( y+ m' x0 vcode ends
2 H4 L% _& d' b1 r- @! [end start( |$ o: x/ P4 ?
8 [: n# U' Q o# |7 i还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。+ N8 C3 Y2 G' u! J
4 D1 n( l/ t2 X% v$ ]* E& h[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|