|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。
2 r/ @8 z* B4 S& v u可惜读取不到正确值。一直读的是FEh......
0 r7 X8 ]& d8 C0 u; \: f希望各位大神能帮忙看看,指点一二。小弟先谢过了。- v7 F9 I9 A2 ], B
# Q8 Z& m3 w5 g2 K' w( j# i
代码如下(masm5编译链接通过,DOS下运行):
2 W6 N4 h6 h% |$ ^3 d) R/ \/ G; |
( S2 N1 O& U$ L" B" T& Oassume cs:code,ds:data( L8 n2 z8 Y4 s/ }. C- k& s# P
& U2 p2 M7 l* G6 M' _* N0 _0 u- X
data segment 8 K( A1 v1 b3 g1 I
EC_CMD_PORT equ 66h ;地址端口 ) o1 f% y3 K# S2 t. `
EC_DATA_PORT equ 62h ;数据端口 5 o/ m# K8 c7 y/ _8 C
CMD_READ_EC equ 80h ;读寄存器命令 - T- v. b' X9 ?' T% X7 g( |4 t0 {: t
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 ! I4 C9 e6 ?8 y6 h' b$ p. h
data ends
2 q3 _+ Y2 Y6 j) \ ! [. X. h# T" F
code segment / c4 Z. c s- M
start:
* Q) i2 O6 i7 a6 [0 \ mov al,CMD_READ_EC & d' `2 Q, ~$ D2 g$ a9 T9 H& p
call write_ec_cmd ;写80h到0x66h端口# @$ F1 b) Z1 ~' @2 p: \- ?9 L
mov ax,POLLING_DATA
2 d# ?6 ^- q* Q' d- }6 v5 A call write_ec_data ;写ECRAM地址到0x62h端口
) [" A" _* k6 R! `1 S3 r call read_ec_data ;从0x62h读数据3 \" l Z8 E4 D
( O" N% k4 I) P, f. c
mov ax,4c00h % T7 u3 {* @& T% x/ a: Z* I
int 21h" V ~; {$ V" {/ p' v9 v
% }: E3 h0 A b' d o
write_ec_cmd:
4 z$ Q) t8 g8 F( X mov ah,al
3 {: ^% ?% @4 M$ y1 r call pmuWait4IBE2 B3 P' {: G$ T
mov al,ah
, N4 ^( j. Y! o& B' ]( B out EC_CMD_PORT,al
- T& n# @. S r: C4 X5 j" J ret$ q5 H# v) B! q- b* z/ L
4 T# ~% @& L3 Z. z" T- X3 x
write_ec_data:) w" R* y) M+ J& h5 Y
mov ah,al
2 S! s7 t7 o# J- m8 k; K call pmuWait4IBE6 [2 a& S$ Q6 n/ `4 D& b8 C
mov al,ah
+ Y5 S* t, q( j/ _+ J out EC_DATA_PORT,al' v0 c( m5 s8 |8 h! e. a
ret- f R- T- Q0 ]% b8 g2 {+ L$ [
3 H9 T; \2 v8 u# J( pread_ec_data:
; D1 c. f ^0 P& z+ f% Q call pmuWait4OBF2 Z7 }8 f# z7 N9 a5 ]" ~) q' z
jcxz $+2
8 b' C5 a, t! r0 V- `, l L8 v jcxz $+2
! \$ |% C3 q5 J' `' \9 f K8 G" n in al,EC_DATA_PORT
9 f5 M% }9 s9 I# a. Z' h$ N ret" D/ b, f+ G: Q
' \: D& w% e' {6 q$ n7 _: }" HpmuWait4IBE:& S1 ]) p4 ]: W' _0 j- Q, b" h0 ]
JCXZ $+2
5 G$ \8 u5 Q& P. u i4 j9 H JCXZ $+2 2 K: {) ?% d* P# X, k' b3 x
IN AL,EC_CMD_PORT ;Read PMU status
) z+ b. M7 N' J' C+ b TEST AL,2 ;Is Input Buffer Empty?
) d, r5 \' ]8 z JNZ pmuWait4IBE ;Jmp if no
! N) Z/ r2 ?+ b* `8 [/ x8 M" H ret
& D% A7 P' `3 V1 b
/ o8 f( y T ~; L* z1 NpmuWait4OBF:! v3 Q5 q c; n; z% V/ K1 Q( @! @, Q
JCXZ $+29 G2 N L( k, M" U; i
JCXZ $+2 . w! E% o; H* P) g" v
IN AL,EC_CMD_PORT ;Read PMU status
! C4 G% o( ?7 Q; v7 ^' ` TEST AL,1 ;Is Output Buffer Full? ; Y4 H/ Y% Q" I3 n1 ?3 m
JZ pmuWait4OBF ;Jmp if no
8 o [6 ?8 w$ Q3 ~, n0 m ret
, o. V' z0 B5 e* P 8 r& N7 B' U" \* h3 ]
code ends
, t! H4 o/ C% T1 {' {end start' t# i# @2 Q* t+ o$ W+ g
8 m% S1 D/ r/ B- h$ R
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。8 A0 N1 E1 l6 \+ Y: R
$ p$ Z9 z7 B1 M+ w2 f& J p[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|