|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。# \+ Y: m' l* d: [* u# z. S
可惜读取不到正确值。一直读的是FEh......
( H& }2 w) ?& V- |; l# b& r, u希望各位大神能帮忙看看,指点一二。小弟先谢过了。2 D% Q \0 W( d) C) F. w
' \& S# y, e! V$ z( _- j代码如下(masm5编译链接通过,DOS下运行):
1 u2 f0 d- ~; K+ H$ x7 t9 }! T+ S8 G! |# m6 {, a- b4 r6 }
assume cs:code,ds:data: ?* ]/ I* ?7 [6 ^9 h$ e9 S
! x4 D; o. s9 C& X; ?' ?data segment " |9 s) w7 r% |: @- C
EC_CMD_PORT equ 66h ;地址端口 + Q9 y: C- |; f
EC_DATA_PORT equ 62h ;数据端口 % M3 @3 h) U% n% L- R' E
CMD_READ_EC equ 80h ;读寄存器命令 1 t2 Y, ^. ?# u$ I* `
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
5 T* u( ~* A& D: k1 e% I0 ]1 D1 ldata ends5 V# R6 l, a8 W+ P* M
; [8 l* M A( A
code segment ' J7 @0 f. Z+ J! ] G. r
start:
4 o, I$ P- F( k5 L" P$ _$ F: F& t; Q mov al,CMD_READ_EC $ e0 y7 z; q+ V) H8 l$ ^/ e
call write_ec_cmd ;写80h到0x66h端口
: H" x. `' d. t9 e3 _0 N mov ax,POLLING_DATA
* ?9 n# r( _2 u, ] call write_ec_data ;写ECRAM地址到0x62h端口1 R& k7 D N2 Q% Q9 s/ ^3 X; S
call read_ec_data ;从0x62h读数据 Q4 @% a/ I/ j% ]! P
9 _$ X- x- I( J S/ D; B mov ax,4c00h # y, D( H5 g; e( [' c
int 21h
& G' o u; _: s# h
$ j9 }, ~1 U' A2 e: Zwrite_ec_cmd:
( _1 |% _0 Q3 A. a! [3 s mov ah,al# |9 |! x: L, T2 E1 e
call pmuWait4IBE9 @& w3 \4 k# x: `: [
mov al,ah- b7 u0 v# K6 V" H8 }# r
out EC_CMD_PORT,al
9 V* r% K7 F* n# L- w; `4 v7 j ret
( ?$ m. s8 k2 G# s( C) E- t" J9 J+ }1 }
write_ec_data:' E2 c" |+ a) D0 I& C. B
mov ah,al/ t$ T" i4 }5 }& r( A4 o" _
call pmuWait4IBE; ?$ C; @% Q* ~1 y1 L
mov al,ah% n6 Z( a3 Y- b8 u
out EC_DATA_PORT,al* D; R' G6 N* k! q1 C+ p6 Q0 D
ret
# q/ z N5 J% [9 \' P& \
1 {! K6 M/ d) _8 i2 G- s, iread_ec_data:
: l, n, x* n z# u; r# _ call pmuWait4OBF9 Y7 I- h. u9 g; ?' I, e& q
jcxz $+2
, O/ e: `- ^9 i9 S1 \ jcxz $+2. _5 F/ i1 q. a2 m" T: s" T
in al,EC_DATA_PORT
% t Z0 f! e6 s. `. j3 d ret
4 T+ z6 i7 t% V
. E( R4 ]2 R2 D& l D+ l# B; h2 [pmuWait4IBE:& | s3 U& h/ j& @( F5 x9 e4 f9 R
JCXZ $+2
+ P& H, p, B Z' s) d9 n0 X JCXZ $+2
! S1 d! D4 p0 {4 a8 D+ M$ z& ?& M* A IN AL,EC_CMD_PORT ;Read PMU status + U2 D# U' L T" Q
TEST AL,2 ;Is Input Buffer Empty? / D+ E; H. S( `2 O- x* ~3 Q+ x
JNZ pmuWait4IBE ;Jmp if no . v, A+ l- e! I. Q
ret& F( v4 T4 C% ]: {7 M" b
9 h$ l4 }# q6 ^# cpmuWait4OBF:+ c2 {( S7 V+ k1 q% ^
JCXZ $+25 l7 W& l7 R3 m
JCXZ $+2 - d2 i& W. [% d& A9 g) R# `
IN AL,EC_CMD_PORT ;Read PMU status
2 ~# U! K7 \ P$ W6 T, T/ y TEST AL,1 ;Is Output Buffer Full?
. K) b; H8 K/ t; ]) b JZ pmuWait4OBF ;Jmp if no
, T" z( }0 p$ N- m z- d- G$ s ret
* [: X" R. M- a3 [ 5 R9 E8 y- z1 f& {/ {
code ends
2 [ l) n9 ?% @, Pend start
: ?5 h. C) Z+ _/ Q, H' R
$ J# C# \3 t6 e! S还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
! @& P4 l# v# o/ C
% n8 @! I7 Q0 B, l0 c( u7 \- x% b( M[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|