|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
4 w6 Q' F! _1 w% K可惜读取不到正确值。一直读的是FEh......
- E% ^ o b4 r4 y1 m( {, E希望各位大神能帮忙看看,指点一二。小弟先谢过了。
" v9 {* C* m, [% F4 L) y0 z ^6 [& C; d k" T- H: [; @
代码如下(masm5编译链接通过,DOS下运行):; a8 q' b Q" O8 [/ ^* c0 d* Y
% l! o" q7 L- }- C) {
assume cs:code,ds:data. z& \/ O" x- P0 h
( O1 D( c; _' d" P' K* _data segment
( L& M( l, L9 \$ ^ EC_CMD_PORT equ 66h ;地址端口 ( `' W- _/ u4 ^( P( u
EC_DATA_PORT equ 62h ;数据端口
. [, c$ E2 D% Q0 m, L2 s CMD_READ_EC equ 80h ;读寄存器命令 Y! S; o$ p- t8 m% T- D" Y
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 1 p9 T2 X& i: d, o! e1 M
data ends; g; l/ w5 G: D, T' K( s# L
3 y Q7 S, h2 F! H0 P) J! A% b- Kcode segment + L4 T% m' J+ h1 R( w; `
start:
/ X4 R) Z, I9 r2 I2 P# a+ A mov al,CMD_READ_EC
% b T4 Z6 `2 ]* |( `1 U call write_ec_cmd ;写80h到0x66h端口/ ^% R9 J1 C3 V% L) n0 n+ X
mov ax,POLLING_DATA ( t$ e. W/ b. @- d- M3 Z! J
call write_ec_data ;写ECRAM地址到0x62h端口
7 J: f% N/ X. x5 U! X call read_ec_data ;从0x62h读数据* ^' ] m; {" i# ]; |6 E. u2 t
) l& H- x/ f7 J. V mov ax,4c00h 1 {! w, t% h5 z0 {3 c W' o
int 21h4 C0 C& Y/ x2 C1 f& d
% [) ~# H9 N8 M# a7 b
write_ec_cmd:
8 @2 {4 P. ~, D- l1 B+ O6 I mov ah,al( d1 o8 } t* j- R) ]) c
call pmuWait4IBE% w7 n8 m: n# R! X! m' ?" T* q
mov al,ah( F2 k7 ]% @1 ~9 A6 i$ J) ?
out EC_CMD_PORT,al
9 J# h* o' w; B8 o' M ret
% T( l; O" U' N0 I' A
* I$ i! w- Q" x- w* \: p: cwrite_ec_data:
0 z1 F' ?) c* C5 ]' r8 ~ mov ah,al
9 J4 u) v! d+ K6 o5 x/ ~ call pmuWait4IBE/ u; q& c0 |2 F2 N) f9 @% [) w* k
mov al,ah
7 ~" n4 ?- n2 g5 }9 C. h out EC_DATA_PORT,al
$ S1 e& S( ]# w3 N! V: w ret+ ~& L$ ]# |# }+ L
$ g* H: Q: a) y1 u) iread_ec_data:
/ C8 o" y) c$ c: c* m# @3 P+ m call pmuWait4OBF' Y+ M" I2 d7 H+ @# @7 p; J9 Y5 p+ W
jcxz $+2
/ r1 p4 J7 c4 Q& a6 w+ \6 q7 \ jcxz $+2; Z0 \3 [" r; V, [5 Z' ]1 Z6 Y
in al,EC_DATA_PORT
, ^! J+ |+ v" o+ b ret- f5 n3 B3 H, l r, P4 h
) R# {0 Q: [( O# h/ BpmuWait4IBE:
* l6 ^) [- ^$ x9 ` JCXZ $+2* b- ]5 a+ T2 X$ N
JCXZ $+2
0 o; p% v# N: H1 l5 @9 h% W IN AL,EC_CMD_PORT ;Read PMU status - F A7 T: g7 o% J
TEST AL,2 ;Is Input Buffer Empty?
+ E+ s- d( n* W* }, l! J# s( J JNZ pmuWait4IBE ;Jmp if no
: s: U* p! w M/ c" t ret9 B! L! ~+ F2 H/ X
0 C1 k1 s, o; ?$ ~% WpmuWait4OBF:9 |; P8 I2 O' K3 B
JCXZ $+2
4 s. x1 O2 g/ p+ l JCXZ $+2
. v# j# ~3 @1 H7 p$ u+ R% l IN AL,EC_CMD_PORT ;Read PMU status ) d7 D" D7 k/ e$ |
TEST AL,1 ;Is Output Buffer Full?
) G0 n8 ]) F: u0 w JZ pmuWait4OBF ;Jmp if no 8 z6 A, \8 r5 w- B' ?3 b
ret
+ G2 w/ R: r% }1 q4 {
- Y# U0 p) F1 M3 C5 v- Ccode ends 5 ^0 L% n; g7 S7 X8 d' j
end start
0 I4 s3 h+ v9 }- g" K' S
1 s" H7 y+ O) {$ ?4 J还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。' o" M& [+ S+ L5 }( i6 M+ e0 D
( a4 U+ x. t9 @; |0 d
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|