找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 11400|回复: 2

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下:
6 v6 }, j- L# E% P8 }' R* t  b" \( ]  j( F6 h: j
  .model small
8 M: i7 t$ A' {  .386
' I$ t) N: D$ |$ M0 h8 i  CFG_ADDR EQU 0CF8h7 M7 N/ J0 J, k: s: o: R
  CFG_DATA EQU 0CFCh
1 C7 k3 M; E( Q9 o$ x- i) @: h  SMBUS_BUS EQU 0
" W% e- Q; w$ N6 G0 }  u  SMBUS_DEVICE EQU 31# I/ Y3 W+ i2 G, N3 j
  SMBUS_FUNC EQU 3; v2 r% E, j' a$ t
  
. F- A- M. a' G2 }  .stack 100h7 G3 s  I; w5 w* l& K- S) V
  .data
2 `* ^% s7 M1 L; ^; h/ [0 tbase dw ?  ;smbus I/O space
  }4 Z3 S1 x1 L1 xnum  db 0  ;byte select
0 ]) j2 ]" z( j" ^6 T) d2 XSmbStatus db ?
1 B+ K) V; T$ p7 L% }6 s4 x# V% R
  .code
; D1 K6 e: s/ @& o+ ]
! g5 @, D2 \! o9 }( qLF_CR MACRO, ]4 f5 E) W5 [  b$ R2 s2 g3 B2 A
  pusha; A& q( F, g1 _: G( ~, m8 V
  mov     dl,0dh      ! ~# ]/ ]3 a( e- ~
mov     ah,2) ^4 v; ?# ?1 N, [3 M6 {7 s2 _5 b, R
  int     21h
! ^' O! Z/ L6 {6 M9 N& H  mov     dl,0ah   ;next line   
& ^# s1 M/ Y, X5 f8 p. G  mov     ah,2
! X* c& ^  M8 S- L1 c4 y. Q  int     21h( i% _. b9 z) C; a6 [; b: R8 U3 D
  popa  5 Q+ L' P8 r6 d
     ENDM! M/ i5 S% I1 v& K7 g4 i. U: Y

. h& Z. Y0 j  Z7 ^2 g- s+ v& @( y- R5 o5 h& u' V! p! L. P6 q
main proc far9 D& P! n/ I6 t& a$ ^
mov ax,@data
! ~8 {( t, u* Z0 W% j mov ds,ax
) m; u8 C; r* I& _
+ f8 h, N1 t" y/ z4 N: C mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h% D1 @8 _" W1 ^' D: ?& t3 F/ q
mov dx,CFG_ADDR( T3 ~) D8 N% J( B% J
out dx,eax
6 p$ m9 w; P4 T8 [5 Y# h mov dx,CFG_DATA2 D9 [& Y& q1 E3 T
in eax,dx
% h' O& a& w, s: t  
& s5 I% H7 }$ C: f shr ax,5     ;bit 15-5,the base address/ j# M' j) G3 f$ ?- S
and ax,0000011111111111b! X- N) {8 `( b1 }! Z
mov base,ax/ C% q  C/ D- J& e- K
  ; \/ ~* N' b4 d; W
call ReadSpd, x% t" [; z3 U! ~# n0 r
exit:/ @- f- ?# A2 ^4 _
mov ax,4c00h
9 @  \; H  d- w7 ~# _$ m9 z* s$ C int 21h5 i3 i2 o. c2 S+ y5 A# z
main endp
* B# D* _8 e) D! p* E4 s9 g$ C1 z/ |  J, ?& T. S9 J

) e$ ?6 L! O% f& x, S: y: ^4 E1 Y6 G0 ?; }
ReadSpd proc1 }" }/ E$ u+ ~; L
pusha
; a/ G9 A1 j; LAgain:
" t+ `; [5 e2 N2 @" b* \! Q  w mov ah,num
* a; N! B- K9 ^* e  and ah,00001111b
& B& ?8 {7 i6 z7 t" q% }0 ] .if(ah==15d) ;CR_LF
1 Q7 M0 q: _% ~: `7 J- N  LF_CR
7 \, d. S/ {! }, C .endif
2 _0 A5 P3 _, e. x) p$ J2 n& U* ^" m0 S
4 r3 L2 R! t/ r# b% y% l .repeat. w: U: U/ L- t3 |* w4 a
  mov dx,base   ;reset host,claim host in use
. |4 ]: W5 f, d( i$ d  add dx,0/ t4 w* ]; u, z
  mov al,40h
: L/ \+ p2 |' z  s! ~7 j4 g  out dx,al* A9 c  b  w( B* X: L
  1 w7 Q( d+ O& D/ x/ m
  mov dx,base   - U, X/ }, N5 b; ^& p9 ]
  in al,dx, p) ?0 b: j* B1 x: X& A' Y
  mov SmbStatus,al
9 Y8 I1 K& |" t* O9 y  ; ?6 j, z' q* ~3 R8 r
  mov dx,base   ;clear all status bits
- _" c8 \. v, N5 I: ]- ?( _  mov al,1Eh   ;host status register
: V$ q5 G8 B8 Z1 X1 f) ^: Y  out dx,al
$ G" N% r1 V8 I; ~! d" A% V$ k  
% k4 {6 ~* [' }, `8 c  mov dx,base   ;set offset to read   x) f$ O8 l2 j, _- Q/ x
  add dx,3    ;host command register/ c3 [% v& y0 z, w* x
  mov al,num9 g" _/ A6 e0 Z1 Q) d9 b
  out dx,al
' i0 A) Y" Y3 C  Z7 i/ z$ o: C  
4 A. ?; X  p$ r( M, t9 I  mov dx,base   ;Transimit Slave Address register  \% [5 w& C: c- k
  add dx,4
/ s- C% P6 u6 B, d8 I1 S7 z  mov al,0a1h- K% R! Q6 G6 V2 Q  V) K  D
  out dx,al
8 ~( z; ]" r' @6 ?. B' o/ V3 O  
+ j+ |# F# X3 M  mov dx,base   ;set "Read Word" protocol and start bit
& H, W+ U7 G4 G  add dx,2    ;Host Control register
* U# a- j; a9 B7 w  mov al,48h  5 j; t0 q4 l2 x/ y$ v
  out dx,al9 g) {8 H, @2 g% [9 I$ U8 H
2 s& N! O% d* S' d$ j. x
/ b! {' V3 s  f9 @& @
  * U& ]. S2 a4 @# ^8 v1 W
  mov dx,base
) F* R3 p- r  V4 }2 e: N  in al,dx! r4 K! {! p; {2 a& h# L4 q$ T
  mov SmbStatus,al) |0 [/ `3 l/ e. S: D' ^
  and al,1Eh
3 B- d* G* n0 `& E' c" A  .while (al==0) ;check repeatly until any of& U5 |5 D. k/ a5 _# c# [6 P, h! h
    mov dx,base      ;FAIL,BERR,DERR,INTR* g- R6 m& |. Q5 H5 L; r' A% `
    in al,dx
, b) n7 O! X9 j- e. K: u    mov SmbStatus,al
# [  S7 N  [/ O% i% s% j    and al,1Eh + c4 A8 C) M# a, P8 b; e3 T" D
  .ENDW
8 N# W. W* Q0 G  
* i( P- Z# i6 s' B: x) c( x: l: d  mov al,SmbStatus   ) w9 u% H8 ^* q. `) m- b
  and al,1Ch
/ ?& f+ Y/ y" C- D4 R" A  .if (al!=0)    ;check for errors  
: q) r* Y+ K3 ~- b   mov al,SmbStatus/ N6 e8 Z( S5 z, Q" Q& L
   and al,08h   4 q  C9 O: Y7 }9 O7 Z
   .continue .if (al!=0)  5 E: ^0 L9 p7 L5 Y+ f) ?
   jmp @F  7 k" X( ~( S8 v) c9 X1 v7 Q
.else
: q3 @9 x7 C7 y* u# l" q: C& J  mov dx,base! E6 c8 P& F+ a( z
  add dx,5h# d9 ^) a8 X2 c) u# C: A
  in al,dx  ( i- j7 l4 w: k/ Y
  call binhex . g, z; ~9 z5 _1 r
  .break
9 B) [7 r$ v7 F4 ]# N .endif
( h9 ]9 k7 U6 ^, n! |- Z% c) K  2 R2 E( R# E9 E- X2 X# Q1 \
  .until (0)
& b/ \) p- W: q  0 W, z% g% {" H( O
; u9 {  a" q' L1 n' V
+ ^7 B, {& L9 s* d4 g0 y& f
mov dl,20h ;output a space
' T& ^2 k9 x: i, O$ Q mov ah,2
* |% d$ H9 z" X/ t. B8 n' ^" T pusha" v2 r4 f- J( [* _7 X6 L
int 21h
0 Q( |8 z* F% p) b3 k popa
  A$ X# `; R/ i% L4 `4 o inc num; z, f9 f% I4 {6 ]4 m! d
1 ]$ T! B4 m; C+ i5 c8 Z$ q
cmp num,80h ;get first spd 128 bytes $ H) w2 B9 A1 M( [: b( t' t2 C
jnz Again1 e: b2 W- b; I6 s7 h# Z6 e
' \) D5 Z9 C% E, u4 N
@@:
# Y( ?  w4 P$ L6 T popa
& X! j6 C! a  k2 k& n/ b! l ret
2 k; T6 T" C9 Z2 |# u: \ReadSpd endp* x! f6 X) Z( w! W7 t5 r
' W* p4 C+ d& t
5 G/ o6 r( g% A: j3 A- P1 l

- G" T. e' N! x1 Ibinhex proc
6 L- C# k% b) H( ?* O% d pusha
0 c: l/ f: A$ L0 A
7 `" I, L( E1 k  B  l) Q mov ch,2 ;2 hexadecimal digits to be printed
) \- r5 W( d& q& P8 ploop3:
9 W+ V: ~# e# Z! @% |9 a mov cl,4 ;bits to be shifted
" t2 _2 f9 v$ {$ Q0 ? rol al,cl
7 ~5 C( `, A. V5 X% w mov bl,al* ?# M$ p) t& |- d' k% O
and bl,0fh ;mask the 4-bit Msb
2 C& M0 k3 q' i+ k add bl,30h  G6 x1 g/ W; ^; e# S; d
cmp bl,3ah! c- A" }  z' W$ h2 B+ j9 \$ v5 X
jl next1  ;number or alpha?
# ]) x. @. M( Z; |3 N6 o add bl,7 " T! k( o, r* D$ ?7 G$ I7 t
next1: , ?+ @+ R- P; I2 [
mov ah,2  ;print one hexadecimal digit
8 [5 `! G, s6 o! a mov dl,bl
( X9 t, v* x. [; T( h/ W; i pusha
; ]0 j+ }4 t$ x5 Z; i4 V int 21h9 P" o6 @; q9 m/ B5 d1 ?
popa
; ]' }" N9 d& C4 _% c# U2 i) ~ dec ch
: G6 S$ _# e4 N2 O jnz loop3) N% O+ V+ }! o; \
popa
2 U3 c6 \8 l+ z# m ret
# V8 f* m- M  N1 s. T/ Q. ]binhex endp
7 o& B" m7 O/ b) U4 K3 E   end main
 楼主| 发表于 2009-7-21 12:30:37 | 显示全部楼层
问题已解决
回复

使用道具 举报

发表于 2009-7-21 13:40:23 | 显示全部楼层
我做过一个可以支持SIS968/962/961 VIA8235 Intel ICHx/ICH7/8/9 ATI SB400/600 NV CK804的SPD tool.  ICH9的读法应该是和ICH7/8一致的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2026-6-8 08:30 , Processed in 0.134679 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表