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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下: - u/ ~' ]8 y. G7 n4 b8 R

) e5 `  ]0 O$ s9 Z6 Y- L0 R1 i9 S  .model small
" t3 _  _! N) a  .386' ^" R/ w2 _8 j- P; o- [
  CFG_ADDR EQU 0CF8h- {# e6 M4 H# G$ S
  CFG_DATA EQU 0CFCh
$ n3 Z1 J, I7 X  SMBUS_BUS EQU 0' D" ]0 B# u( R# g
  SMBUS_DEVICE EQU 313 M6 b. N2 X5 I7 ^! ^6 |
  SMBUS_FUNC EQU 3
9 B8 f) p( A. c% Y; ?  
/ U1 B2 h* i) w- Q- S! D  .stack 100h" u6 C: j8 i2 J( ~4 F# r
  .data
' P% i5 n; i4 p- f* j( f8 Mbase dw ?  ;smbus I/O space
7 H( G* E' `. q8 @( S# {. y5 s9 k' ynum  db 0  ;byte select) x& l! Y) |/ w3 `4 |, e: O+ @
SmbStatus db ?; I( Q! F2 H, W& d9 g/ D

9 _8 _9 A4 a8 Z+ b5 K  .code# z$ h8 J1 s5 L9 p% x3 w8 b- b

" |* [, n$ s1 F; Y* WLF_CR MACRO
7 G% _: T4 e( n3 U  pusha
! E( S/ s5 ^4 W  mov     dl,0dh      
# @, n# I/ D4 a- U mov     ah,2
& @7 r4 C* a( B- Y+ S& e& f& k( r& K  int     21h
& u; u& W. i6 C: o0 M1 ?5 s  mov     dl,0ah   ;next line   
+ G" \+ c) s+ j& V( j$ Q# y& B  r  mov     ah,2) C0 c* X- u, @! @0 {# I% Z
  int     21h8 r) F! R3 ?; Z: K- f
  popa  9 m0 e  g/ o1 Q* ?/ D' ?
     ENDM
! R" _) n7 H) a8 a$ V' L6 |. q" H* t% M0 C; k9 w
% Z7 \  @% W+ ~% h
main proc far
: F5 _! l  V8 H- F1 m0 A: u mov ax,@data' a1 Z: W9 I7 N. f( e1 o  O
mov ds,ax
- b& x7 d" N2 R& L4 V3 @
; ~. m6 [) P9 F( R mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h
  f$ m0 Y. U. B- _$ B, C mov dx,CFG_ADDR
, M6 b) ]- L- a: H out dx,eax
  W) g* N8 s5 \0 U mov dx,CFG_DATA
( X6 m% Q5 P: p; T9 P+ l% x9 V in eax,dx
- O% J  a  `9 c! o& [* W! \8 N  - L" p3 n8 w/ r' n! D# w
shr ax,5     ;bit 15-5,the base address
* Y3 P; u8 }6 D  L) Q and ax,0000011111111111b! V: O# D" O# U. B$ d# b% I
mov base,ax+ |7 y+ y3 F- L
  
7 C% g  ]/ T" F: T+ @" S: M call ReadSpd6 E0 d. H. _& G9 @
exit:3 T3 z& s- g6 j8 E
mov ax,4c00h* y) @1 A( b) b  |. v
int 21h: z9 i* _9 W/ j0 I5 v' {: W/ x' n6 g
main endp
* h: G( m. M( ^* |; A4 a- P8 R# @9 m$ f2 B
7 {5 o- ~8 a- J: x5 o4 A
4 v; Y9 P; c/ R" `% w) h2 X
ReadSpd proc* D3 d. I2 \5 _: A
pusha: O9 R7 S/ C) {  C6 N* K8 ~, p
Again:
. Q! \* J, w8 h mov ah,num, P1 {: V  B) N5 S
  and ah,00001111b/ u0 l+ u  h9 c2 n, @9 \
.if(ah==15d) ;CR_LF' _; j4 o4 \( G* p2 l
  LF_CR
; N  U( o. O5 L  q: b7 f" W .endif
  P: N9 F  e" @6 L3 O
) m7 C% y! z2 @1 H .repeat3 i; @! f4 o1 t! L' i- z' T
  mov dx,base   ;reset host,claim host in use
  A) s5 p& ]6 h. U$ y  add dx,0
7 g) W- R) T. S% {% X) z; q  mov al,40h/ T- l2 i+ d& S  j
  out dx,al. `' U( M+ r1 E& h4 A$ v
  3 |! X/ T6 l- ?/ e$ X  \
  mov dx,base   7 ^! h" D, r1 E+ E8 I0 K& \
  in al,dx
2 v8 R8 [: i9 v: I. T5 }  mov SmbStatus,al8 b& b6 c. F( c6 v# A. H
  
# w  L+ E0 F8 X, w, e! U8 i  mov dx,base   ;clear all status bits& n. @% H8 I# ~3 G+ G: `. U
  mov al,1Eh   ;host status register
. P: r: T% K+ a  out dx,al+ s# O$ G# W  Q2 d3 T! Z
  
( N8 d2 v, ?! {* z3 F  mov dx,base   ;set offset to read
$ I; V) a) K2 I  add dx,3    ;host command register1 a. Z" E: g) X" i) U
  mov al,num
% p% O! L; T4 L: V/ C5 Y  out dx,al0 t% |; d/ @' J2 T0 o4 r
  7 `' h6 T9 @( q% }
  mov dx,base   ;Transimit Slave Address register- x& I. i) j! k1 ]% w- Z
  add dx,42 Z1 ]3 U4 ^0 C& a, D6 S$ u+ A+ j
  mov al,0a1h
5 t! B* c6 N. \, t& B) ^  out dx,al0 @1 \1 n+ A8 q, T
  5 k. v. r1 m3 a+ T+ K
  mov dx,base   ;set "Read Word" protocol and start bit
. ^' d' |3 A* {$ d6 A  add dx,2    ;Host Control register. G/ d$ F: X, f& p
  mov al,48h  
( `3 B( Q# c" k! E  out dx,al
) R( w; ~* P* J- W1 f" c  E: i / S1 H; Q9 }0 S7 e6 K( v

3 ~! l" J& g! a& S( o- l  ) [" p  O6 _; k1 C+ M$ P2 {
  mov dx,base
* C  m7 q" r3 A/ h) Q  in al,dx  n$ I* T* q3 p. `  Z
  mov SmbStatus,al+ X2 O, A4 Z7 {# C! T' s
  and al,1Eh2 n: ^! R& u0 u( u
  .while (al==0) ;check repeatly until any of
* J7 d  m* ~# W3 r4 d: j3 r; g; x    mov dx,base      ;FAIL,BERR,DERR,INTR, l& r! r/ c6 ?4 c
    in al,dx4 k1 j2 w1 \! S9 R
    mov SmbStatus,al
# T4 E' V$ v; [7 s    and al,1Eh % R' s2 p, u, d1 e
  .ENDW4 ~7 W  }$ U/ M7 N* q; Y
  
. l, x2 c1 \' m8 w# I- M  mov al,SmbStatus   2 ^! M3 z5 {8 F0 x
  and al,1Ch+ l; `; v; N. l, P1 h9 |- f
  .if (al!=0)    ;check for errors  
! H" v  _# x$ ?4 ^: K   mov al,SmbStatus5 m: {/ j) M; U& [9 J) a
   and al,08h   
! r& N% J- Y6 P0 d3 H+ Z   .continue .if (al!=0)  9 e4 Y4 M3 l; E7 n- n' J1 w
   jmp @F  # O) B8 v* Y$ h* V# D% a) ]/ a
.else( u0 m6 W0 |- m8 h" y8 g+ U
  mov dx,base
; E6 o# ]: G" X  add dx,5h
7 B2 p1 r# J3 A7 |. Q! n  in al,dx  
# \( {8 h& ~5 m& F5 i" {  call binhex 5 A, d4 k/ m4 Z% s5 a4 v9 X: i( o
  .break
, _( F- ~- p) G' I .endif
, F0 P' K3 y% c' ~7 a/ l  
3 `5 F$ R- e% Z& k2 ^! t  .until (0) 0 I$ {1 T' ]8 n% x6 \* |, T: A
  * O# |8 h  E' Q3 `7 h' ~
+ X& n+ W2 K) t" `
# ^% q; r4 a0 J
mov dl,20h ;output a space2 }! A6 w, P4 ]( x7 x9 m
mov ah,23 D6 R# J" m8 }) Y2 A1 h
pusha# G8 }1 n5 M. Y) T
int 21h7 m5 _( [4 {/ e
popa
. t9 Y, }  g) p$ x$ `% V. }5 E inc num
7 G; F* l2 q4 A* ?; v# c2 a8 {0 o& T/ k
cmp num,80h ;get first spd 128 bytes   E% o7 b/ z2 s
jnz Again8 j! M+ Q% \% M5 `7 Y! L, K

$ ^6 {% o9 ]" V: Y) Z; k7 q4 }@@:- f) P$ E2 q8 c7 T" ~
popa
9 y5 D/ F7 Z# n# T ret* J. J8 {  c  @" ?7 R' k; Z; x* ^
ReadSpd endp% T9 n. Z' _5 v5 o6 ~+ s
6 [/ @' h) f( L8 z0 i; V/ u( x4 @4 F
1 {1 y1 P/ B; w# p* e7 e6 P
3 N/ N+ c9 E4 [5 I, `" J
binhex proc
1 B+ B$ [1 T8 _ pusha ) z1 \' e1 y6 |- r, q1 ?

/ l9 A7 _. Y0 V4 P7 C; p8 l- H mov ch,2 ;2 hexadecimal digits to be printed: z/ M% o; Z9 A7 V. h9 X
loop3:
; Z. i6 Y: _( I. V" R mov cl,4 ;bits to be shifted: ~& a! `3 `1 }* i7 R% B
rol al,cl' t! x( W. Y5 u( z. j2 ~% L
mov bl,al7 A8 B2 p) P7 g; n. ~$ Q1 V
and bl,0fh ;mask the 4-bit Msb
5 J5 J0 V( p7 F add bl,30h
6 Q9 M4 g+ c  M& O. ]& ~& R cmp bl,3ah
8 a5 L0 p  q8 z5 Q, k jl next1  ;number or alpha?2 _8 S4 |, p, a' L
add bl,7 8 v3 [- h9 R% ^  b7 @
next1:
2 G0 Q. ?6 |7 q( Y* Z) \- v8 c. n2 F mov ah,2  ;print one hexadecimal digit, R) `/ \- r6 [4 V) _5 ?) X! }
mov dl,bl
8 a* I' @( m5 C% w pusha+ K' i+ }; }2 u( d. N
int 21h
: _$ M" j! M8 }  n  u; a popa
. N" b- Q% @# r; s dec ch; o( H" U5 U8 F  ^
jnz loop32 F7 y( Q4 m/ Y" i1 `: \0 ~3 A
popa
2 h4 n3 h4 J; n' Y2 {# _3 e/ j: w5 X ret, W) X1 [% h, V9 u
binhex endp" X2 [& V. C' k2 Z5 \8 o
   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-3-5 15:55 , Processed in 0.279996 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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