|
|
小弟根据本论坛的几个帖子,用asm写了一个读取EC RAM的程序。; p5 T) X, k0 I
可惜读取不到正确值。一直读的是FEh......
l6 N8 F) j& I4 I( O希望各位大神能帮忙看看,指点一二。小弟先谢过了。
. U/ P/ W% @- [1 T3 t3 ]: z( e7 y7 c' q3 w- J) d
代码如下(masm5编译链接通过,DOS下运行):
8 k2 |+ E- ~' _# C8 E- |1 q1 H
. A8 l0 T" E- [$ b8 \* b0 Vassume cs:code,ds:data, A8 j5 y) O1 [5 k
2 N- T# q- K F
data segment
. F4 D7 F8 H, Y2 q: B EC_CMD_PORT equ 66h ;地址端口 : T, B: e3 r/ ~
EC_DATA_PORT equ 62h ;数据端口
i1 [0 |" R8 @, P; K# G CMD_READ_EC equ 80h ;读寄存器命令 / q5 J# _/ L& v) o
POLLING_DATA equ 130 ;EC RAM INDEX要访问的ECRAM地址 7 |$ `- \9 W5 P
data ends3 ?' T* \4 R4 C
# H* L) [) ]& d4 k
code segment 7 Z" @- v4 s- W: J, x6 @( |
start: & F! E) n9 M; e. d+ S
mov al,CMD_READ_EC 6 T: ?) P3 m& y; M
call write_ec_cmd ;写80h到0x66h端口
7 H1 s+ M g3 N$ a! U& | mov ax,POLLING_DATA
2 X4 E4 l2 @! U8 D, j3 s* s3 V call write_ec_data ;写ECRAM地址到0x62h端口
; j! z F& l) v6 O call read_ec_data ;从0x62h读数据5 u8 r3 p2 C1 R$ u: g2 k) s& f
# m0 a/ H# j" ]* m" [ mov ax,4c00h
" ~! C6 y t2 d; E4 _) [6 r3 G int 21h: \" t. q5 N k9 F
; H9 n8 a6 W' S0 R" pwrite_ec_cmd:
( I0 R: P- O" `! F mov ah,al
. p. y) Z( |5 i1 [. _ call pmuWait4IBE
4 d* E- t2 ~; Y. ] mov al,ah9 p! D+ B) \3 _' n% H% Q% G; E- |( K; G
out EC_CMD_PORT,al
9 N' F: p2 z9 d" I ret0 U$ H3 n( {6 `
) p* n. V. c; m0 z
write_ec_data:' L3 o9 j' H, m
mov ah,al
- x' I/ j7 P r call pmuWait4IBE* r- m6 B) S- {3 O+ P
mov al,ah
6 b& M3 K" ^( O* V5 r+ r out EC_DATA_PORT,al3 @+ r8 _- e9 d1 K" i$ e0 E1 F
ret
! @5 y( X; d8 P
7 ]. q4 R0 P4 _7 ?7 U& ^! K! h" Dread_ec_data:; [8 ?4 Z; P1 O! w* }2 ?9 O
call pmuWait4OBF
! d4 P- A2 H2 U N& e, w jcxz $+2! W4 T- ^ b# |! N
jcxz $+2
! u* C' f$ @; F4 A2 S8 ?1 V% f in al,EC_DATA_PORT
/ ]* A" w2 W% z2 S ret
* O* s! K0 w2 K4 H0 C; t) C 3 {5 E5 H) r3 I* a( v; Z
pmuWait4IBE:" d. N+ H5 [3 L V
JCXZ $+2- d1 r3 G5 B$ v- Z$ c
JCXZ $+2 6 f/ I+ g& B2 z
IN AL,EC_CMD_PORT ;Read PMU status % u: [# P$ k. y$ V( C) _) ?; j
TEST AL,2 ;Is Input Buffer Empty? ; E; F5 T- {/ [! A9 K& J2 w
JNZ pmuWait4IBE ;Jmp if no
+ `/ J( |8 D) q4 Y6 q ret2 y8 ?3 o' ^/ s% w; Z% v8 {
K+ I% F, N4 b: ^ `* [pmuWait4OBF:' _. s5 X% W5 M( W! M
JCXZ $+2' {9 {4 f# \" J' U
JCXZ $+2
2 Y- q! x+ L( Z; [4 c) @ IN AL,EC_CMD_PORT ;Read PMU status
) g7 {7 f/ C' L( o1 L, L TEST AL,1 ;Is Output Buffer Full?
3 |& v& }1 e- u9 Q JZ pmuWait4OBF ;Jmp if no 4 v, \) U A& M$ v
ret
5 b/ o; c' c f3 `
7 X$ F' o* ^* [code ends - w: ?1 I) `, Y- Y5 ?' q
end start
. [) ]' `% y0 b5 l: ], g% J; f. Z. I# _. u! V
还有一个问题,就是像RW这种类型的软件是怎么做到稳定读取EC RAM数据。也是使用62h/66h端口么?望指点。。。。。。0 s3 o9 \3 E. ]6 h- `" H
" `# i; X- P9 [8 c, t2 s% }
[ 本帖最后由 yejieku 于 2010-5-23 01:43 编辑 ] |
|