|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。# a m1 C; B6 d3 f+ F, E3 K2 K& _
可惜读取不到正确值。一直读的是FEh......
4 M6 q- d% E% ]: V8 F9 [, {$ B希望各位大神能帮忙看看,指点一二。小弟先谢过了。
0 {) l0 d0 r$ o0 c: R/ G1 n9 N
/ I% O- I5 I' g1 Y9 Z代码如下(masm5编译链接通过,DOS下运行):
) u4 f- g5 O( P" O8 j W `& ~. u5 D6 [5 y3 s7 j( l7 t* i" f
assume cs:code,ds:data8 E1 E' Z, _" `
0 b* x: ~: D6 F ^& d5 y
data segment / A @: D# Q* s/ E" h5 U; R7 E
EC_CMD_PORT equ 66h ;地址端口 + _5 x3 w/ G- j: b; |
EC_DATA_PORT equ 62h ;数据端口 8 B. m2 ?7 h$ J: y
CMD_READ_EC equ 80h ;读寄存器命令
( N' k$ y* c, B5 N+ u: I POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 6 j9 t4 o3 ~4 R' t; q) \) a" t
data ends8 j# G6 Q3 ]1 i' @! D' Q
/ P* O" g6 ~2 g+ Z0 v% j
code segment 9 _2 }8 [8 J2 D
start: 2 A' Z' V* g: v. O& M
mov al,CMD_READ_EC
/ p! O# {7 C8 f; Y2 ?3 W* T# W# g call write_ec_cmd ;写80h到0x66h端口
: `) ~) h5 [7 x7 @" J mov ax,POLLING_DATA
w7 @) [: p* H% m call write_ec_data ;写ECRAM地址到0x62h端口5 _: @9 N3 D5 [; o. o% k, h c
call read_ec_data ;从0x62h读数据
6 Z v: a5 U! [! w9 U$ v- _+ K% r0 Z: F6 u6 G3 m/ N
mov ax,4c00h
. z# N4 Z# l' W, k2 @ int 21h3 G( I1 S* J# x
5 _( M, ?) H, P
write_ec_cmd:
2 K I$ O$ ~5 a1 i* c mov ah,al6 T0 Z* R; o' I# M! Z$ E
call pmuWait4IBE
* O, s9 F8 x! l; t7 E mov al,ah' F0 O0 D4 N2 c2 B4 Y
out EC_CMD_PORT,al
' N1 V; l6 ]+ _6 | ret
* N1 K8 R7 v d8 |- |! p4 m/ c: K" _0 S9 Q
write_ec_data:/ ?2 \+ Q- C2 c$ [6 y
mov ah,al+ L) {2 n/ I% B- e$ y! E
call pmuWait4IBE
* O- }& u' B7 U2 j5 d& ^( O) X2 h+ H8 ~ mov al,ah! j1 A$ H7 }& [) Y& M5 M' c3 t
out EC_DATA_PORT,al
0 }! k5 C1 C1 | ret
# M1 {) |, x) |$ v
0 Y3 Q* b& ^6 f( C; B- Gread_ec_data:/ N- Y; g* R$ d0 @; ?; Y
call pmuWait4OBF
, O. M, |& T: }' ^ jcxz $+2
; T1 b. k) }' R/ y jcxz $+2
1 N3 f @9 H5 s in al,EC_DATA_PORT
z* L$ `& w' ^ ret
* ]* z8 Q& `7 ^% K* p
8 q2 Y! U S0 s$ x1 Z! D5 HpmuWait4IBE:
" I+ P4 f \6 Q& s JCXZ $+2
5 t! v& ^8 F) W! K6 [) @! W JCXZ $+2 $ J9 X# u* N: x7 n! s3 l
IN AL,EC_CMD_PORT ;Read PMU status 7 f2 c# }# s$ E; g
TEST AL,2 ;Is Input Buffer Empty? x4 A% e* I& T( R5 x
JNZ pmuWait4IBE ;Jmp if no . ~$ H, z, r, N, }" W b, C
ret" H- }, l# {2 K3 k# d, ]3 _5 z
0 p8 g* X- T, R% g2 ~; T
pmuWait4OBF:
' t' O* d) H# @1 [- Q JCXZ $+2" u5 `3 w# _7 U" b0 j: u! `
JCXZ $+2 + q; y& R' ~) q1 y/ j
IN AL,EC_CMD_PORT ;Read PMU status ( x, j0 y! v1 f2 j3 W& ?- ]
TEST AL,1 ;Is Output Buffer Full? ! w* k' ?% T9 K: v6 y) @- i( f
JZ pmuWait4OBF ;Jmp if no
7 k) a& s: y; [1 v" ~- ^+ J7 u ret% K% D2 H. x" Z% O& R- {
/ M, G, I6 Y$ h! |% @code ends 6 K A* n& ` n' ~; A5 b% w
end start; \4 p: ?, \$ [9 V7 D
' T# ^ [/ J; o4 z3 n5 i+ V' m还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。 K% q1 d5 H) Q5 |
7 S6 N4 V) v0 V" Q; M/ j; I[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|