|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。- H3 ^0 c( @" C& Z5 P
可惜读取不到正确值。一直读的是FEh......$ [9 ]% ~$ {$ @5 [9 e1 j. j& s
希望各位大神能帮忙看看,指点一二。小弟先谢过了。
' u. N, T' m4 |$ b* l8 Q; k# f! T% i' l: ?1 q* B
代码如下(masm5编译链接通过,DOS下运行):# ~- R5 a7 z9 h7 e2 O+ X" d, q. I+ n
5 B2 z: e! H" ]/ oassume cs:code,ds:data
% R5 F* \5 j+ i7 K4 U' e
* Q5 @( K. G4 r- v' B+ ]data segment
" r. f6 _% H: ~( m EC_CMD_PORT equ 66h ;地址端口
9 \1 F; b2 a! ^2 X" S EC_DATA_PORT equ 62h ;数据端口
: ~: o9 W5 r+ Y7 v. R, Z CMD_READ_EC equ 80h ;读寄存器命令
, V! F2 D# p3 D* J0 _0 L5 j# q POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址
: V7 x7 a \) _/ E: ^7 Q1 j3 T" edata ends
. T+ H. E9 N9 E/ x$ ` 2 Y$ T5 r W& O- o/ p- a
code segment
2 U& |# d% w: o1 a3 Kstart: ! L3 g. n1 q+ U$ z/ B9 _+ e
mov al,CMD_READ_EC ( `3 g0 T' {; Q# i( l" E9 w9 e
call write_ec_cmd ;写80h到0x66h端口
- {& B$ Q5 f B' n; C mov ax,POLLING_DATA
6 X+ a4 g a& ~8 o3 c' r( ] call write_ec_data ;写ECRAM地址到0x62h端口$ L+ G+ F. W% n$ \7 A# L
call read_ec_data ;从0x62h读数据
& A& `0 h4 f2 F% } ^( d9 \+ V5 t7 t* ^/ G
mov ax,4c00h
; E1 [* b7 a4 p$ M int 21h
& o7 R6 l) x2 ?7 n% o- {/ A4 G; a ] {, C
write_ec_cmd:, o2 V9 t6 V" m0 q5 i6 c
mov ah,al( F% g* D) H/ ]
call pmuWait4IBE) H, P+ t7 I, X7 i$ [8 R* i
mov al,ah1 ^( |2 |# v5 m+ K
out EC_CMD_PORT,al o1 F ^+ K! C+ `0 y1 e
ret. H+ q" v7 _6 G5 {/ G8 V* P
+ x$ j+ h0 r0 N8 Dwrite_ec_data:
* @2 S3 E6 G1 @8 B mov ah,al) O8 @9 }, S9 ?/ T
call pmuWait4IBE( [) E# W$ M; \
mov al,ah
* G1 ]% k k. Z( b out EC_DATA_PORT,al
- l) g7 H4 E G3 u* H ret6 r/ b! l# x! F/ d& `/ {
7 q+ d/ }) _! Oread_ec_data:# D7 C" A" S, F8 [0 L
call pmuWait4OBF
1 U% Z" [+ [; N8 r S" t7 B8 B% [ jcxz $+24 {: Z- S) t7 E" _. t3 a
jcxz $+2
' A! r6 F8 r% i in al,EC_DATA_PORT
`" \# A: k$ W J3 S ret
) D, m( ^3 H* @1 W
% T+ W2 q% R' _! U, w% tpmuWait4IBE:- N, Y# b% }7 l( y. F+ y6 V( y
JCXZ $+2
6 z' s m' \; V+ h JCXZ $+2 0 m+ h: {) {! F1 u
IN AL,EC_CMD_PORT ;Read PMU status * C" t5 k3 u; g
TEST AL,2 ;Is Input Buffer Empty? 2 W u0 Z- ?- W
JNZ pmuWait4IBE ;Jmp if no 3 b+ `4 Q% C1 s
ret
' M& ~4 z$ v; P# U
7 T/ ^2 ?9 E4 X. E! z9 z) t: fpmuWait4OBF:, V" z- a" b# b
JCXZ $+2# I! ` Y% o3 r% b! e
JCXZ $+2 / k0 j2 N4 b. ^6 H' G) B
IN AL,EC_CMD_PORT ;Read PMU status
, u- r. ?% e9 H8 j6 o TEST AL,1 ;Is Output Buffer Full? 9 N& E/ n8 B2 E( J% F
JZ pmuWait4OBF ;Jmp if no ' U- ]* ~ _. L' ?/ v( c! l
ret
8 @6 c1 A& G+ v) E* e ) Q3 v7 B' V$ T" l2 Q! H# X, |
code ends 9 w/ t) n- [* l
end start
4 l( P7 k4 z3 w/ M9 I7 S7 U d! k4 ^2 }8 R5 \
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。8 N% q3 U) o5 o+ _
$ L+ O. u1 p/ c% R- k d1 F6 J[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|