|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
, l. I/ I$ _* G! [% @可惜读取不到正确值。一直读的是FEh......
# a4 W: |; _1 C. e( W希望各位大神能帮忙看看,指点一二。小弟先谢过了。2 P8 A% E# h }0 u4 U
9 U( M9 d6 ?# B4 ]代码如下(masm5编译链接通过,DOS下运行):
$ l6 `: ~6 Q: s7 [
@3 g& K3 j( F q2 i' @9 passume cs:code,ds:data
2 F& X4 g7 v0 O+ y' D5 [6 S
% X5 |1 d% y1 l% _, w, ddata segment
$ R% C, k) G( B% E0 Y* I EC_CMD_PORT equ 66h ;地址端口
& d- D* o- J! E7 s EC_DATA_PORT equ 62h ;数据端口
4 z) E. @5 j7 ]& P CMD_READ_EC equ 80h ;读寄存器命令 / F# v8 _/ I" S
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
0 K1 u$ q" v+ F p) U& Ydata ends
9 n7 t( p1 g) b/ F
1 m5 x4 f1 {3 C! a; A4 M% p9 p3 _code segment ' D) h: |& g# S2 g) ^+ X9 X0 f
start:
( ? W) W: P: p mov al,CMD_READ_EC
4 I7 Y( D. h z) Z I& a" @0 Q. j! j call write_ec_cmd ;写80h到0x66h端口+ |9 v/ [; m! X$ ]% T2 N
mov ax,POLLING_DATA
8 M! w) {, [) D& q* G4 Q; y call write_ec_data ;写ECRAM地址到0x62h端口
8 N( }3 c0 p: {; b# Z% u; Y% p" S call read_ec_data ;从0x62h读数据. n4 X/ c7 q$ R' j1 z1 t
5 r$ C/ p% U3 F7 }; Z
mov ax,4c00h
7 g" U' h; I; E5 O" s& d, { int 21h
% v; e6 D8 O+ C8 h
0 Y3 L5 o4 Q9 I/ i3 m/ P" Lwrite_ec_cmd:
2 n0 a" v/ i$ p/ y mov ah,al
* G( N+ b4 V- Y3 k) Q! U call pmuWait4IBE
7 i8 n w+ n% T7 |% a4 A. K6 x' s mov al,ah* i# @8 a0 d9 ]9 z9 N5 o- p+ Q
out EC_CMD_PORT,al$ H7 t( |: k: F- O/ U
ret
; J8 v2 Q. e2 X) C9 } f n) l. p; p E/ {
write_ec_data:) b: [: ^2 _* D
mov ah,al
3 m2 j k* Y2 ?- X call pmuWait4IBE$ I' k7 k# ? w5 |7 Q$ j* |
mov al,ah1 v/ p3 A2 q9 W+ O
out EC_DATA_PORT,al9 n: K8 G2 P: O" Y# K' S% B' \
ret
0 [# P; h7 l: ^# I! z: J5 l# u& q
read_ec_data:
' i" b n7 Y# `* e$ i/ a call pmuWait4OBF6 {2 p* }" Z8 M3 c
jcxz $+2
+ ?( F( a$ E, e! a& q+ d, I# k jcxz $+2
" j4 U- e( ~; g, \. n6 v in al,EC_DATA_PORT
! f5 {7 Y, n" `- ?/ q; Q; K H ret
* l- n6 M5 t. ~- H# A3 R
9 T) Q4 {2 K% b; d: l1 DpmuWait4IBE:3 A, N! f' ]5 v2 q' N2 e2 H& M9 o
JCXZ $+2
1 i T/ y2 {% ^$ z JCXZ $+2
- v" p1 \" T; t) l IN AL,EC_CMD_PORT ;Read PMU status
' D$ H( b- ^+ f, k) x TEST AL,2 ;Is Input Buffer Empty?
, f. r3 K2 s, ? h/ p" e JNZ pmuWait4IBE ;Jmp if no
/ @5 g- {) e* |- }8 [ ret2 o9 _9 @8 N8 ^/ A, f3 W- h9 Z, n4 C0 K
8 h! n* ?1 W% o! _5 n1 tpmuWait4OBF:
/ \0 b& D- S2 \) [; n JCXZ $+2
( Q+ M( v8 g2 _; r# ?* A, s& Z JCXZ $+2 + }. }. q4 o1 W3 X4 ~$ a* V
IN AL,EC_CMD_PORT ;Read PMU status
/ Z" ]# z4 u# o. t: S TEST AL,1 ;Is Output Buffer Full? . _. t$ z+ a# g6 t' k( f( {
JZ pmuWait4OBF ;Jmp if no ' V: ?' i4 q; N' q0 H
ret
8 p) B2 _' l* V1 n $ f* T7 ~6 E! E2 x( J0 m3 R& f+ v
code ends / n* Z1 A" r& R$ r9 o1 t5 \6 \
end start
V- m5 c3 N% q- Y& h3 K( h
0 n6 X* }9 ^4 s* ~还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。6 k5 x* n: M5 n# R* h$ \3 u
0 P5 f; l/ b/ u* x. j% i) n# K; S5 X
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|