|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。( w# E& Y$ B+ Y4 r
可惜读取不到正确值。一直读的是FEh......
: M5 E, j) |0 @希望各位大神能帮忙看看,指点一二。小弟先谢过了。
! o& R" v2 z# t& m4 v; e* P% i) ^% y& v: _
代码如下(masm5编译链接通过,DOS下运行):
4 d8 D$ `. m, C* n( g/ V2 J0 Q: @7 r7 |- j+ f8 [2 \0 W
assume cs:code,ds:data
, g* k0 J% J/ M7 ~' d! V) _7 X; a, g' e7 r$ q g5 U; W) |
data segment 8 l+ r3 J0 A. J0 Z# h, P
EC_CMD_PORT equ 66h ;地址端口
" ]7 O' q% [# e EC_DATA_PORT equ 62h ;数据端口 * Q1 }7 [( r/ Q$ O6 q
CMD_READ_EC equ 80h ;读寄存器命令 * K; j" d# o( C
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 + ^- [' D* W$ X5 m( D' J
data ends
' g# g* w- u# n' P 4 ?8 Q/ \; B+ }* e2 W: z2 {
code segment . i6 y( t, k1 `9 q- \
start: ?8 u3 s j" C) v0 j1 v
mov al,CMD_READ_EC
2 }# Q! h5 P4 A$ e7 B' A8 F; k: D call write_ec_cmd ;写80h到0x66h端口
" }: H4 D( _9 q: A& u- J# \ mov ax,POLLING_DATA / B, V4 i9 p# X/ x7 J0 ] j
call write_ec_data ;写ECRAM地址到0x62h端口
: U4 Z' p j) p6 h2 M call read_ec_data ;从0x62h读数据
" I3 w2 A4 W* X: w. z% ]# L! s; D u' a# d) G1 o4 u! {6 ~
mov ax,4c00h - `* r: z! i7 V
int 21h
' N9 \0 N, u- o' Z& O
% d \- r# U- n3 a& y1 y: Jwrite_ec_cmd:" ~* N) \8 H1 B" n
mov ah,al2 a& p& R1 {# p/ P( E3 v
call pmuWait4IBE; i$ S2 ~7 X0 X* J0 b
mov al,ah0 P$ @* s( U6 C) R
out EC_CMD_PORT,al% p( ]2 e2 K u& A1 a9 Y
ret0 _" Q L/ d9 k2 ^- }, H& G
, m( U/ L0 H: g' c8 _2 bwrite_ec_data:6 f! ~/ u+ C# I/ _& U
mov ah,al
* Q. u: @3 v' ] call pmuWait4IBE+ }( d8 m. w/ t" p! f" @
mov al,ah
, w1 m. _- e, y% B& i out EC_DATA_PORT,al
$ b1 v* ^* G! R( q ret) ?2 m" R" A: q
1 h9 g, l' ] uread_ec_data:% ^% a9 w: q. O1 F' A. r
call pmuWait4OBF: D7 W# O" p, c# u9 r& {! b( ?
jcxz $+2
9 i6 A* v. {8 Y. H ^& z4 O jcxz $+2
8 G, G6 M4 N6 t/ \, a4 C in al,EC_DATA_PORT# I* {, G- W. \3 n4 M" a, |# B
ret
, |: Z1 q: l! O9 y; M" F3 }' a1 l & f: t8 Z0 j1 a* C
pmuWait4IBE:. O0 S U$ x3 {4 m
JCXZ $+2
. ^: x. c; k$ ~0 T6 k# k* b1 | JCXZ $+2
3 C6 `1 I2 Y0 t. l5 J/ x8 u: \ IN AL,EC_CMD_PORT ;Read PMU status 8 h2 Q; U9 e# K' c* e
TEST AL,2 ;Is Input Buffer Empty?
" c" |- T }+ M2 R# ~3 f JNZ pmuWait4IBE ;Jmp if no 4 }% L. [; @2 p; \
ret
" }0 Z }$ A X0 o I, Z1 }8 U& ?, p
pmuWait4OBF:
) U8 ~( T1 q1 l2 R6 u JCXZ $+27 x/ E7 R w7 Q7 q1 Z1 p. H
JCXZ $+2 * s9 a$ X6 V5 q6 q
IN AL,EC_CMD_PORT ;Read PMU status
; W6 `) j d" b% ` u TEST AL,1 ;Is Output Buffer Full?
$ J4 z2 d! Q+ d; n( Y7 t JZ pmuWait4OBF ;Jmp if no & [/ z! l. |6 B5 S' K! ]
ret- e! h6 Z& s6 M! A: i9 k/ ?2 Y
- |; r7 |+ g1 V2 `0 j( E8 t
code ends ' G. F" B9 b0 X( Q) M
end start
% b9 L, m. Q1 v, ]- `9 F+ ~0 f: V- u
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。) i( l* l( v# s4 ?, k# Y. ]
3 [ J& j+ I& U2 g- u[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|