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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下:
) G" _/ c4 T' a5 B1 U: b
) b" }. d* j# W) h) d  .model small7 V' I/ U+ Y6 Q; A- i
  .386
" W- W, `) e5 I" b+ s$ G$ ^  CFG_ADDR EQU 0CF8h
7 _% Z9 C3 O) [  CFG_DATA EQU 0CFCh
$ S+ [: Q9 D' N0 I7 V  SMBUS_BUS EQU 0
0 ^1 |* i; b& Y$ u8 T  SMBUS_DEVICE EQU 31, E$ I, F1 [6 s2 i7 v" |4 q
  SMBUS_FUNC EQU 3
. @0 e6 ?5 ]! n/ |: g  
* X9 [8 [) |( j+ N" a  .stack 100h, ^/ f/ s' ?+ A( `' I3 D0 \
  .data
( v: n7 W8 C: G4 Vbase dw ?  ;smbus I/O space
, S# ?# u: I: t- R$ w( Enum  db 0  ;byte select9 b' N3 z9 {2 c$ ~5 @- {
SmbStatus db ?
" Z( }# V5 r; a# g
% r* l5 i% I5 Z; y* E. s) l  .code
4 d- f2 `8 `3 k) H3 M1 O/ O # X& L) p7 @6 q! v+ A, ]
LF_CR MACRO
. u0 j' O. t) a, m+ y0 ]$ Z2 A  pusha
( g  `1 j( ?9 A9 u# C) g; ?* x: q  mov     dl,0dh      
6 z1 o" x4 n# c8 u* C mov     ah,2: a  x% T4 ]2 N, Z
  int     21h. Y! g' n* f: ]6 \
  mov     dl,0ah   ;next line   
* h& M# ~# b/ Y7 ~* s  mov     ah,2' P% s# @$ q  e: x! v# O- y
  int     21h! \) I  ]) C/ J
  popa  ! ~& n7 @0 l+ _3 O& z
     ENDM7 m% X1 b- h" W- P4 X6 E
: Y, v: E: \6 V1 x) p
* l0 V7 J3 k2 I" R
main proc far
* `3 u- U! ^" {: w: i mov ax,@data
  ?3 v( n" m  N mov ds,ax
' B: l1 U1 S7 ] " H4 @4 F9 m% ~
mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h/ O9 P3 T. h' L
mov dx,CFG_ADDR5 R$ ?* L* ?" Z, ]  d
out dx,eax
7 w6 }! x0 L: L mov dx,CFG_DATA. P! C2 y% f9 r
in eax,dx5 z- I" P3 G8 p; f2 a
  & D- b4 B% g# _/ ~6 e" n
shr ax,5     ;bit 15-5,the base address  K. t/ |* @- Y! [
and ax,0000011111111111b
, Y0 y) j( _- q mov base,ax' Z  `/ v/ e! U  h9 P; T5 @
  4 z  \6 A! Y; J- n# {
call ReadSpd$ S) Y' S8 S! v5 \( @
exit:
# V/ O8 b5 J- n5 O" a mov ax,4c00h# G/ ?6 `0 N: A+ l. d& ]3 @2 X
int 21h5 ?+ |# j0 p& t! x5 g& X$ y! L1 e; T
main endp
0 @1 w8 U& b2 U: V4 ?
5 v' g9 ~7 ?- D0 k/ B2 U4 |* J! b: q8 _; }
( B& w; `4 \7 Z7 |
ReadSpd proc  k, r; Q3 t. C/ ~0 m8 P
pusha
4 b0 S7 ^3 f: Y( j% SAgain:6 B; c: x; K# K$ _) i0 U
mov ah,num1 a& Z- d( Y' u. }, e& P
  and ah,00001111b
. z  x, E# m& r" ]: t7 s: L, Y .if(ah==15d) ;CR_LF
% n* A* N% {  S. \1 v  LF_CR
7 C* G: x! D0 s5 ~& @, ]' L .endif
4 Z4 M2 j8 \% P# X. t
8 R& i; V, O1 u .repeat5 \! r/ Y5 A& w; @! M
  mov dx,base   ;reset host,claim host in use
8 d/ {9 c/ y1 H5 P$ ~  add dx,0
- u8 A0 N5 O$ f4 v8 e: @1 I) e8 W  mov al,40h2 V: f3 h8 }9 p5 L. O
  out dx,al
! G! L) n3 c! d7 I& o  ~  
& Z) \; R% Q, H6 g  mov dx,base   $ {; I$ e' R4 B! T- w( ^
  in al,dx, k* Q2 {; p; N+ y9 |: U) ~- M
  mov SmbStatus,al
* R* v  W9 T2 x2 t  * G# k, }* ~3 d8 M8 }
  mov dx,base   ;clear all status bits0 s5 `' d+ |; b
  mov al,1Eh   ;host status register
: Y% l/ p. ?$ f/ H1 X: B6 q1 V  out dx,al3 M( C$ s! I/ r% Y
  
# @. e. ?0 l3 ~( Z# o/ |3 ?! Z  mov dx,base   ;set offset to read
' v+ b0 H$ o  L, C- w  \  add dx,3    ;host command register
% b7 v* S+ f. e0 }  mov al,num' q2 R: J1 p0 z# [: p/ T0 I
  out dx,al. t! k; d( ?( C/ o% Q. a
  
! L& w- C7 j( B/ j( o  mov dx,base   ;Transimit Slave Address register$ b7 n6 U. |6 M" d7 _
  add dx,4
/ Y( r8 l7 J  L# ^3 c6 ]8 i- K( Q  mov al,0a1h
6 X* l5 J9 r+ C% |: m$ I  out dx,al
9 T& d& }$ h% }+ P% d2 T  ! _$ [) b0 e' r8 r
  mov dx,base   ;set "Read Word" protocol and start bit
) g+ q( G1 l( i3 J. K  add dx,2    ;Host Control register- O3 b/ h5 H" J8 N8 x' _$ \
  mov al,48h  
2 D- d  J. a( s4 |  out dx,al
9 Z2 I0 ~! X/ P5 [% N; I
0 _* T1 [" `5 R- R- X1 S" g  M, v. G6 a  _: l* D5 U: o3 m
  8 z# A' q8 q" Y( Z
  mov dx,base
% V9 S. ^- U/ O+ [/ h+ L; t* v  in al,dx
( {% S7 `, y* w/ p  mov SmbStatus,al, j  Z# J8 O; K6 d* k
  and al,1Eh  k7 ]( k- F) l$ Q' f3 V
  .while (al==0) ;check repeatly until any of* V6 t- z# j6 @. f
    mov dx,base      ;FAIL,BERR,DERR,INTR+ J! g1 o5 g( T3 u) @
    in al,dx' {5 r# x* f& t+ }
    mov SmbStatus,al
' p# X+ I, h3 x, |; ^6 v& m    and al,1Eh : R8 x9 u) ^1 C5 f4 M" Y
  .ENDW# M3 ~7 K3 ^* e/ N- {( I% N! b; b" t% e
  
2 O& V; g. x6 t: G' c8 O7 Y4 _  mov al,SmbStatus   6 t% @- U- t  J1 [, {2 }% M& d3 y
  and al,1Ch
4 B' R8 }/ f0 B% A5 i  .if (al!=0)    ;check for errors  ) E+ x2 s. T  [; e3 t# a2 D
   mov al,SmbStatus
& C- b, ]7 n9 K6 f; c4 a   and al,08h   
! ]# x& v0 I% E- {" K3 W/ Q3 f   .continue .if (al!=0)  & Y0 M7 C# f& C( n; Z* N/ }3 ]" z
   jmp @F  . h, }% W# P" V; Q* `
.else
9 r9 w/ i' r& g8 r  G( q8 J  mov dx,base
. n; E, S# K+ s+ |$ j  add dx,5h. w: ]0 Q. I9 |% S' e1 Q9 ^6 V
  in al,dx  
* _: X) C% Q# L2 R- l3 _  call binhex
1 m2 ^( W. x8 a* Y( v( N  .break- K4 S, ~( j9 z1 z5 l
.endif
9 R2 c4 }/ l& o$ F- G  H7 v  
6 [$ p  g2 L1 T. H  .until (0)
/ t# [$ U+ a, |2 d" N  ( r, o! g2 A* t. [
6 \3 Q8 |+ U  X% [/ u. j
* Y- I& X$ o" Z9 Z+ U/ G3 |2 ~
mov dl,20h ;output a space3 K5 X5 r: w0 `- j9 K
mov ah,2
2 _- h5 [& P4 g: B, K  e9 b/ s# k pusha
3 Y; c0 U& a( E0 F) s7 r int 21h. x4 F" c* s* `: J* o
popa* ^0 x& \/ _7 Z: A0 X3 p! G
inc num
. C: o* \0 B/ b5 w' k) s
6 H( u# [8 O1 i) D cmp num,80h ;get first spd 128 bytes & D# q' K( v, e2 c5 b, a, ]
jnz Again1 L5 n+ B+ H! V+ k3 N) p6 }

) Z6 x5 z3 d8 u! P/ y$ Z@@:
0 P: w( l' S2 v6 E# E3 w/ L popa' C8 C0 ^2 T8 @
ret
! F4 s0 Y9 I$ C3 }( @' }ReadSpd endp4 @6 J4 a# u& _$ _0 R) j8 x9 ~
& t2 l- Y( {# J+ u; o5 l" O

) F4 s% T+ k5 h8 [2 w
( Q. N- }" {4 d0 ^4 d6 Dbinhex proc
! B2 v+ T7 A/ v5 X4 S. c pusha
+ w. W4 ]' y. C
. L, ~4 F. `6 | mov ch,2 ;2 hexadecimal digits to be printed+ z5 I3 }3 k+ Q0 Q
loop3:
( T7 q9 Y) J8 f1 A- c4 {1 i mov cl,4 ;bits to be shifted, C! u# I. y9 x; d+ d5 `& ]2 }
rol al,cl
/ Y' a  D- C  Y) c5 Y1 | mov bl,al) d4 i7 y( N9 N: z
and bl,0fh ;mask the 4-bit Msb$ i2 T5 ^/ ~3 p/ Y/ y9 A) `, w
add bl,30h
; T/ e" {/ l; v, k. g) j cmp bl,3ah
' o: `+ J1 X4 `5 ^9 E/ w. W! b' s jl next1  ;number or alpha?
/ O! f. I# w6 ` add bl,7 : J# X' S; d# ]1 j2 U
next1: 6 Y; B2 B' ~: G& e- i
mov ah,2  ;print one hexadecimal digit
4 O7 n9 Y% t$ V4 }, d9 { mov dl,bl& Q) j$ ~. N* `& ]. @0 n& }% C% |
pusha. P6 l$ T, _" B% q3 N
int 21h7 I6 ~$ s# A9 {$ `+ q8 `
popa
" m3 w; {7 @6 W  W dec ch! \& t4 ~4 j: }' t4 [; |
jnz loop3
+ i4 [: Y* Z9 E% \5 V! c# q  q popa
/ {# t5 k' ?3 V ret& E- X* r$ U' O8 ~0 `0 H; l' z& L# Y
binhex endp
) w- O! {. U( ^/ N  Y   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:34 , Processed in 0.190447 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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