|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。, F: T+ b7 X- }& k
可惜读取不到正确值。一直读的是FEh......
9 m5 v! T& `$ H8 a* T5 h) D3 t希望各位大神能帮忙看看,指点一二。小弟先谢过了。
6 l4 ]5 G" Q& ?6 i$ V6 H9 h. ^( Q, V4 w
代码如下(masm5编译链接通过,DOS下运行):/ Z% @6 ^) ]( b1 G" O
5 J2 G s8 l" O3 }0 n. ~- {
assume cs:code,ds:data5 c0 z- x7 b5 H( j: w( \+ ^
5 Y5 `6 V. Y# x$ k2 ~4 B* T
data segment
- y3 l' G e, r3 x% S: \ EC_CMD_PORT equ 66h ;地址端口 0 G% Z% H. X3 N j9 @
EC_DATA_PORT equ 62h ;数据端口 % z7 |( y$ w3 g" f9 v- Y
CMD_READ_EC equ 80h ;读寄存器命令 ( L ^/ p0 \7 s+ ]
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
7 U: Y! `' @' Kdata ends+ d* }" E; c2 {% {
" Q! V3 S1 g, t6 p$ }0 Q
code segment " ]2 s7 T. u1 y+ Q" o2 W+ l6 u7 J+ ?
start:
( {9 z. F9 v5 L! W9 \ mov al,CMD_READ_EC * a4 {- G+ L1 d
call write_ec_cmd ;写80h到0x66h端口
! a; D$ N& e& m& c6 q mov ax,POLLING_DATA
* Q/ `) n N$ v4 P( K call write_ec_data ;写ECRAM地址到0x62h端口
8 V0 {4 [! [9 }* t call read_ec_data ;从0x62h读数据" {. t% F' ]" i. i- G( d2 H5 q5 P
% m. S6 P# D0 }- x/ I* V a1 y mov ax,4c00h 5 H6 p/ S/ \1 |, j
int 21h. F( `6 V% N1 m7 ]$ {5 e
. c+ b$ X: p$ s$ P; W. n% I
write_ec_cmd:
8 x. n: t. m, z, W, Y mov ah,al8 l# I' x( N6 H/ y+ p' w8 ?
call pmuWait4IBE
8 @& j$ a2 o& ]' B s- ~ mov al,ah& J4 f7 D0 {0 P; H
out EC_CMD_PORT,al7 b6 I( }2 y& M( P9 p
ret. V# i) D1 [4 @# s- H* V
, z0 P" v# X* E+ Owrite_ec_data:4 i) s/ q2 S0 n
mov ah,al
& p( c9 M8 D" d |( K6 S. B call pmuWait4IBE
$ L. d: L) u0 U& m% y: O2 r mov al,ah$ \" L' j4 Y( I! j
out EC_DATA_PORT,al
8 i _* v0 l$ ~) |9 @& q5 [ ret
7 c/ g9 `3 {9 ^4 I* g9 _1 Y! E& L9 X0 A2 W& d8 e$ }4 `
read_ec_data:0 }/ T6 ?$ y; a
call pmuWait4OBF
/ h- w+ Q& l; L* T0 n" {' D' a! c jcxz $+24 Z: h1 k9 S( r
jcxz $+2+ U( [" ^* {- q8 ?; j$ z9 d
in al,EC_DATA_PORT
4 Y* T3 H1 `0 p; ] ret$ q0 n& j, q0 R# q
F! y# d4 {; zpmuWait4IBE: L" X: G. t# Z" V+ B
JCXZ $+2
, z$ a) Q/ D& _2 f JCXZ $+2 1 n: ~8 E% [' E5 y' c
IN AL,EC_CMD_PORT ;Read PMU status - f, X* \! |+ x7 z% P4 }' G \
TEST AL,2 ;Is Input Buffer Empty? - d0 d( e. n* t% ?* }0 y, T
JNZ pmuWait4IBE ;Jmp if no ( l2 @- |8 D. }% w- I) W
ret' W5 @/ k2 a: d1 ~9 J5 v8 ?- h
3 j+ @) M; v, j4 N& DpmuWait4OBF:
% ^. n1 e+ T' J' C/ D, [ JCXZ $+2- I1 X2 |4 d1 ]' O
JCXZ $+2
: L }+ t# S# N6 [) m IN AL,EC_CMD_PORT ;Read PMU status 6 j; }) B' Q" L9 |0 G2 x4 W
TEST AL,1 ;Is Output Buffer Full?
. }3 L0 A" d) q, o JZ pmuWait4OBF ;Jmp if no
+ J, M8 N' {/ O5 Z. Y5 ~6 u, c' Y- u ret7 j# w) l6 Q: k
: X5 N" g# O. T& [' Q9 b0 J6 Wcode ends 8 d- Q- B3 K5 y# a6 T
end start; ^+ c6 U( U: A* G7 F% i
' O0 F% [! t4 d还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。
7 m& _8 v* T( Y8 G' F
+ t, s$ _) R' M8 Q' b$ G; E2 ][ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|