|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。: A1 X' q/ g: K/ H6 F
可惜读取不到正确值。一直读的是FEh......' G( }( m5 m# Y g2 g/ E( c9 o
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
5 G; G$ l; Z5 O3 |. q8 q" D2 [# I4 Y2 E, p% ]( z
代码如下(masm5编译链接通过,DOS下运行):( K. [! J6 W1 Y; B, M! ]
0 W* @9 N; K0 ]/ i& }
assume cs:code,ds:data
8 {2 [3 O- f4 f5 {+ L" _9 s/ x; O1 W0 U" L G1 Q
data segment 6 _ m) s1 P9 ]" t
EC_CMD_PORT equ 66h ;地址端口
3 V$ {6 ~- O% r" T; K! @, b( N EC_DATA_PORT equ 62h ;数据端口
2 e; J3 q0 |+ t5 R! a2 a CMD_READ_EC equ 80h ;读寄存器命令 # z2 V' Y" B9 A- `" i( H
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
" D0 D! u/ q# D1 l: c7 |data ends
$ L1 @4 u5 f8 \3 i; t7 C$ A 3 i# a! a& y2 j$ b5 e7 m
code segment
) t4 |) _; p5 L1 z- e$ S8 d7 K2 E9 Sstart:
K4 V/ l9 p" L& m; \" q mov al,CMD_READ_EC " ? O* w. V4 T) K1 P0 w
call write_ec_cmd ;写80h到0x66h端口
/ {/ j' D( Z! U/ B" t7 @6 C$ c: Z" P' W mov ax,POLLING_DATA
3 y* O1 E1 E n call write_ec_data ;写ECRAM地址到0x62h端口
4 R8 G! e1 {# Q$ | call read_ec_data ;从0x62h读数据
4 R" k! V) e! l" y: r) l1 m/ X: G# i3 L
mov ax,4c00h
( |8 ]# n5 H7 F7 c int 21h
" \" y/ F' T# m& A7 o2 d/ o
' V" W& o% v ~$ y; Bwrite_ec_cmd:9 y% H6 G; H( Q. L) h8 }% w `' l
mov ah,al
! v6 I& Z0 `1 W! e1 i1 | call pmuWait4IBE+ z8 |0 X2 i& S1 {! \
mov al,ah
# R" g) N- @) G# c% G. F" g out EC_CMD_PORT,al
% b. @/ Q p+ z8 V( h ret. j P! x9 [4 Q9 {7 L8 X% c# \
( _4 D: f/ a/ ~: j pwrite_ec_data:
0 V( g1 j" N$ L1 |$ j mov ah,al$ X' \$ b5 R; d+ y
call pmuWait4IBE
3 S3 t! i* o3 T2 |$ n; S% _ mov al,ah5 D( q9 R- [; c( k6 H/ H7 L
out EC_DATA_PORT,al- T6 ~' ?$ x+ j# W2 S: }
ret3 v( E$ M0 S! s8 n9 L% }% u& D
5 |) _ D: ^5 [" ?7 S
read_ec_data:; S$ ~! f- i; s ?' h: t# ?# r, M- P
call pmuWait4OBF5 Q# h. s+ ]# V; u/ Q
jcxz $+2
6 X( e( i' a8 A! k9 `% v5 ~ jcxz $+2
: S1 q$ Z) I2 x* z! s8 a in al,EC_DATA_PORT# p+ D% l- X, o& a! M
ret
& A- o& m$ Z5 X7 f S & \4 i+ _ @3 t! r% u0 f% R% |
pmuWait4IBE:& \5 ]. M! ?0 w# T& s
JCXZ $+2
6 v- G! i# ^$ R/ d3 {4 ~ JCXZ $+2 ( R2 S9 f$ O: [+ j) H/ p M
IN AL,EC_CMD_PORT ;Read PMU status 8 r* z$ F/ h: n7 I$ }5 E
TEST AL,2 ;Is Input Buffer Empty?
8 v7 h2 F6 f% q JNZ pmuWait4IBE ;Jmp if no . S7 y8 e% G& v* _
ret
: u0 x& H( M1 ^9 B( F3 J |6 A+ \5 u
: x$ n$ ]( Z0 o- g: OpmuWait4OBF:( R! Z |5 ?( `+ q( \; z
JCXZ $+27 e, g8 Q$ ]) l, }5 `- b/ j
JCXZ $+2 * Y# e9 S2 A' ?! M
IN AL,EC_CMD_PORT ;Read PMU status % h% G- j$ A0 D6 n z
TEST AL,1 ;Is Output Buffer Full?
0 m, c0 W1 o4 v: Y; P/ Q3 d( M JZ pmuWait4OBF ;Jmp if no
8 ?0 u+ D5 C% J2 y ret
% m! { c9 p$ }3 ~# W% }
$ e0 W3 I+ Y+ ?- [code ends " D4 L& T) g# m# U' B
end start
: h7 ]7 a# K1 m7 R
& x0 N- } I% P1 P还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
' |6 W3 m I2 v- p. w- V" M& s2 w% k- W" V E) Z& C5 ^
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|