|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。3 z4 o" G' I: n
可惜读取不到正确值。一直读的是FEh......
. u! ]0 f$ z8 p/ ?; q) o希望各位大神能帮忙看看,指点一二。小弟先谢过了。7 {( g# f" l! r ~0 S- I
. G1 q6 T3 t& d
代码如下(masm5编译链接通过,DOS下运行):1 ~+ y! t+ Y5 K( x, z
4 E7 f" p! F! I* ^, q6 B, Y, Jassume cs:code,ds:data
3 i; p( |5 q o; Y$ M/ b% c" m7 C& h5 t7 B& J0 t
data segment 7 A+ d, n, N0 J
EC_CMD_PORT equ 66h ;地址端口 % h* ]9 h. M; s7 W
EC_DATA_PORT equ 62h ;数据端口 8 Y: c1 J% W8 o8 Z5 I- R7 f
CMD_READ_EC equ 80h ;读寄存器命令 1 z) q7 D2 Q w
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
6 ^0 v- j% a, Adata ends
2 r/ ?- x6 t( Z7 S7 _( q6 k d6 Q1 ~5 T$ W7 t; N7 U0 A& m
code segment
& `" J+ j1 T- V5 p) r( Lstart: $ n4 H7 d d1 Y* a# S
mov al,CMD_READ_EC
- k/ X% u t7 n0 B! B$ }( ]" } call write_ec_cmd ;写80h到0x66h端口
+ W9 p# O- q4 F4 y6 U# T( x# I mov ax,POLLING_DATA
& Y7 \, H- v! G6 F) @- Y% z. \! s call write_ec_data ;写ECRAM地址到0x62h端口( T* D( `2 W' Y
call read_ec_data ;从0x62h读数据$ b# F8 F0 w% ?# d' C4 t3 a2 P
6 _- l5 K) I# A9 t# S9 p
mov ax,4c00h
7 b' J* |4 _2 u" ^" W int 21h. m& p( F" g' ^% h/ m
5 T3 i7 E" o9 o, Swrite_ec_cmd:% L1 X, a$ N/ `+ b' d5 h
mov ah,al
* |; s: {) v5 l# v" f call pmuWait4IBE( b) p; r. J+ X
mov al,ah L A1 g/ p8 O `& y* D* {' a; {2 }
out EC_CMD_PORT,al: l3 k7 J2 C2 A
ret" J2 F9 i0 ~/ t% `3 v
; l" t t8 H7 a: \
write_ec_data:
8 A$ s8 |% V, o0 j8 m5 W, ?7 P/ Y mov ah,al5 C H4 v1 G( I) H* b9 r! }% _
call pmuWait4IBE
/ I7 d' B6 O. c, p' B/ b mov al,ah
9 |( X, t4 g) J- b) J+ p out EC_DATA_PORT,al
# R6 {8 L# K, S, p2 I7 s$ N! K ret! Z5 v3 ^( I6 |( z
$ {6 V8 |% h& J, ^) ~5 Rread_ec_data:- S4 L) W% b; K' x9 H2 c
call pmuWait4OBF
7 [. k( g; c* @. s jcxz $+23 n+ L4 Q6 r1 Q8 `3 k
jcxz $+2( v8 b" u, b: v0 N+ S
in al,EC_DATA_PORT4 x/ P" |; |$ b' ^ x8 w! S
ret5 B/ c+ p" B/ g
E# X$ S; t6 ^: e3 wpmuWait4IBE:
/ x) p2 r/ T9 O JCXZ $+2
5 Y( u7 v; t: p8 R: x JCXZ $+2 ( F) n5 M/ r$ ?) P1 w0 y( a
IN AL,EC_CMD_PORT ;Read PMU status 0 E6 O, P8 ]' t' s' ]1 ], k
TEST AL,2 ;Is Input Buffer Empty?
0 s6 [* b* X# f JNZ pmuWait4IBE ;Jmp if no
) [* ?, n' A0 v( {. w ret" B# D: q9 l' f+ C
* F9 P/ \5 Z8 y y5 w; g
pmuWait4OBF:
. }( j" p$ @, J3 Z) ^% w JCXZ $+29 Z! t( p& }4 `4 y9 c- d
JCXZ $+2
x, ~9 L$ ?0 H* A" [ IN AL,EC_CMD_PORT ;Read PMU status 6 G2 J* m3 v- U
TEST AL,1 ;Is Output Buffer Full? & f3 R6 T, G* l5 ]: I! c
JZ pmuWait4OBF ;Jmp if no
# L, d7 M* y' O5 A ret6 ^! _$ _7 h0 A8 P; `
& V. I4 b- D _code ends : a, l" J: T3 E: \
end start7 q! T/ h4 m+ P1 o w: V# X- H. C0 v
" u% T( a( E5 M. z& Y还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。1 D8 e6 N) X$ W
; y4 i8 O5 m& i, ^/ n[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|