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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下: ) d# o' _5 f6 t+ y7 K' X

. Q' g  m7 i7 [: c- q( Y& W  .model small
9 s7 }5 o4 V+ J& m( V  .386. u0 Z' e, Y7 Y3 \6 g1 s
  CFG_ADDR EQU 0CF8h
% _1 t, H% H% x$ s$ Q  CFG_DATA EQU 0CFCh
6 l( x8 j) J7 M5 J7 f6 H6 Y  SMBUS_BUS EQU 0
- }1 C" g; v; z  SMBUS_DEVICE EQU 31% U8 Q# }! E# p8 w, M
  SMBUS_FUNC EQU 3
* d5 I0 e& l8 T' I4 _' k  t7 t4 W  
6 H/ ]7 \8 E4 k  .stack 100h# C2 S5 T: V6 q6 M0 A
  .data
3 X) ^1 l  }( D' ?7 O& Bbase dw ?  ;smbus I/O space0 ^" R9 |0 c& N/ G8 U
num  db 0  ;byte select# [4 z! z# x$ w# g; K+ u4 M; d
SmbStatus db ?
" E  B5 y) k0 f7 s/ n5 S. h' T
9 p9 V4 g$ U1 e) v% L5 i. }  .code
0 L% A1 c! H8 P ' ]% N" a$ _( a
LF_CR MACRO
" k$ _9 o1 c" {# q9 D: P  pusha
$ d/ H, B, E8 a8 q- u$ c5 }+ @% o  mov     dl,0dh      9 S! P% t1 ?# u8 W4 W" p  S
mov     ah,2# _0 Q* U+ i  Z* |/ J( ~
  int     21h0 Y5 {( z8 C# d! B3 H: _4 p9 R
  mov     dl,0ah   ;next line   & @# ~% n# I# q1 D' w  b0 \6 f
  mov     ah,2: r7 l0 v: K- M) Z
  int     21h. p  r! ], W+ o
  popa  
5 I5 N3 f3 {6 d1 A9 L! Z2 b     ENDM4 A9 A4 R8 i0 g
5 F' @' k- \) `1 i
: W" v+ k% q. g, w+ t
main proc far
' T, w" A9 Y# D0 z/ V; t  Q8 i mov ax,@data
7 V# `2 G/ z; d1 G mov ds,ax% a0 x4 Z$ @# W9 r( J

% G2 M) B/ I7 b! r mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h' V1 m9 V" L. M1 r8 [, g
mov dx,CFG_ADDR# g4 r6 N) d5 J( I) y: g
out dx,eax
: M/ F% d0 N: {- I4 }, ?, p mov dx,CFG_DATA* }% P% {) ~  ~
in eax,dx/ {0 J+ S& ?5 L* l% J$ `
  
) \, B4 ?7 a% ~6 u5 e1 s shr ax,5     ;bit 15-5,the base address1 Y$ K% M2 x/ F
and ax,0000011111111111b
. h* J, S" t( [. B- K# R& L% U mov base,ax
4 a7 ~; l% a7 y/ r, \! v9 M  
: M- H5 A6 U/ r  Y6 |# Z call ReadSpd' ~' \! R8 M) [) ^; ?' f
exit:5 N7 _7 H7 e5 j8 v+ }: t$ I+ _# v  s
mov ax,4c00h
4 C1 l  y! A% S" }8 l! I int 21h
& c! G6 x& S' y/ G# P9 v8 L* @main endp$ l$ w, @$ ~) Z/ q5 _5 _0 }- @$ K2 G
. C; X* Y/ S0 o1 i
4 |% ^! A  O1 l" X/ l

9 [* @- j! T6 S& {2 W- PReadSpd proc+ e% o  ?9 v* w3 @4 A
pusha
6 a7 ?" \$ p& n1 u# k; p) O, AAgain:
7 }5 d& K0 E: A8 t, ~ mov ah,num
. q: S  @& q7 o7 C! Z; d1 }  and ah,00001111b
' B9 Y- O* \! I" s) I: v .if(ah==15d) ;CR_LF
2 k$ H' A! h" u( x. Y$ T  LF_CR* @0 O3 j0 m9 [3 x1 k  C& r
.endif% O5 ~# \+ P" X5 u7 W) w2 d

1 w4 @0 O2 ?/ a) v .repeat
) E+ D' |9 [, a& e5 J. f6 r  mov dx,base   ;reset host,claim host in use
9 v" i( S7 v# l* n) d' l  add dx,00 l9 r8 G( k; X7 D) |3 O# Y
  mov al,40h$ `% g( `, p  `/ N  Z3 A* U0 o
  out dx,al4 T! M( X  ]6 a
    w+ k9 e7 e' i
  mov dx,base   
6 a7 O9 u1 E9 G  in al,dx
' j8 C4 A& o3 F2 w: S" t  ?/ b  mov SmbStatus,al
! q( T* l" j0 B8 k9 ^" n  
8 Y, F* x; m! M6 M9 y  mov dx,base   ;clear all status bits
/ e6 W/ \) p# E, H$ @9 t  mov al,1Eh   ;host status register2 j, _* M* R. Y
  out dx,al# V$ T' h8 I2 G8 M$ s. Z+ N: k& t
  
: v$ S5 z: Q4 b3 b  p  mov dx,base   ;set offset to read / O# n1 Z2 V4 o
  add dx,3    ;host command register4 R, l% y, @5 w0 [: _
  mov al,num0 n" ^7 i& E& Z. \) }! g1 Y* r
  out dx,al! m6 A" v7 M: b2 i/ {* a  b
  ' b# W/ i- ?. `* h
  mov dx,base   ;Transimit Slave Address register
+ E4 G- F" o* n8 G( Q% A  add dx,4
6 i5 W+ ]' Y* n! y  mov al,0a1h
* S( A+ A+ R9 c  out dx,al( [1 |1 I: ]: ?) D( U
  
$ L7 c( U2 s) D& A  mov dx,base   ;set "Read Word" protocol and start bit
5 _  T) \/ P8 |7 C/ {  j" n  add dx,2    ;Host Control register0 o; O8 }- L/ J7 u0 x) _7 J( e
  mov al,48h  5 M1 T# _' [' S. S
  out dx,al9 `" C. o* R3 G% I

! U% p& U& I3 L& s2 \8 w( d- Y
$ u% I2 P+ e* d% U# F, @  7 v- i# e% H) W( E$ M1 }) W2 h& w
  mov dx,base' y; p) W: T1 t/ _5 x  b% T4 F
  in al,dx
' F6 a% a( P- i9 t& N8 u3 G: E% ^8 p  mov SmbStatus,al, G' g# z! `8 e, S; Q2 E# M
  and al,1Eh0 p1 ]& u7 T3 S* A
  .while (al==0) ;check repeatly until any of
7 Q4 }. i3 W5 f# X3 E& L    mov dx,base      ;FAIL,BERR,DERR,INTR
1 O7 t% E1 Y$ c- i; M    in al,dx; m0 r5 [% {  e9 j' S8 r
    mov SmbStatus,al; ?% A+ K: \% @+ t5 P
    and al,1Eh 1 R+ L, T& A9 x; Y" J- r5 @5 F
  .ENDW
" u( B8 w4 N( v& S4 `4 q  
' f  b& E) J7 K, y. v; Y# R  mov al,SmbStatus   8 e. a. W8 @5 M! B- ?- U: A
  and al,1Ch
: c; s2 ^4 Y& n4 l! L  .if (al!=0)    ;check for errors  . p4 Z5 M- W5 R8 \' A, Y1 P" F9 X
   mov al,SmbStatus! |9 }& p7 A( [4 b* t; n' k
   and al,08h   
9 U, R" N3 x' b6 C  [   .continue .if (al!=0)  8 P% Y6 E! @6 U* G+ E
   jmp @F  5 ^. T8 G" U) s$ ^% @0 C+ g
.else
) v  k. T% p$ U2 T( i  mov dx,base" w' q5 J* {1 [1 N+ I5 n- ?' G; U& y
  add dx,5h1 V, c% t+ x( Y& T; ?. ]
  in al,dx  7 J+ S/ R9 n0 P+ |
  call binhex , P' Y# I1 L, R  H9 ?9 ?" y
  .break: e5 q$ i9 G( c3 H9 I+ L
.endif# Y. O3 ~2 a* P2 M! S+ r6 J$ m0 b. e4 F5 E( ~
  : w2 d+ u1 R9 }; l% c
  .until (0)
1 J1 u: A0 e6 o9 w  
: _; x2 |  Q7 Y, w: ?( B1 C1 k8 | ' z* w0 R1 O- }1 A
& V) n# m# A/ T2 U! H
mov dl,20h ;output a space9 R* M, _6 @- n& n! B
mov ah,2
8 p* A* z. N9 J pusha/ z* U- I9 h4 i# w7 k
int 21h* P. ~# f; a/ A. @! y" c
popa7 c& V$ k. T' v; X5 q
inc num- O) c- v- `8 {9 e$ {# |

1 k5 u$ U. g& R. Y+ q. Q8 ?/ W cmp num,80h ;get first spd 128 bytes 2 \) n) V( E7 L
jnz Again& H0 T  C# v& R

6 v. x% ~2 Q1 _/ j  W: ?' a6 `$ `@@:9 _4 @( W" |; f& I2 k
popa1 g7 |# c- ?: J( J5 b4 u7 O, u. {
ret
' e; u  I4 i( W* O% DReadSpd endp- ]% p+ t0 z( Z; R
* V9 r. }) u# Z( e/ f

5 n9 Y: }% y( A9 ?
9 q- a6 m0 S5 [4 L" b+ }% B) [+ q2 q7 xbinhex proc
3 g" Q" H8 ]7 b) e# u pusha
; e- d6 E; d: z - R' W/ B( |7 S6 W5 v) S3 ^$ }
mov ch,2 ;2 hexadecimal digits to be printed7 _; x% h3 o6 \' y4 N
loop3:
- o) f2 c6 I% T) c mov cl,4 ;bits to be shifted
% _0 s9 ^2 O& l rol al,cl- r0 ~  G! M! W' A5 Z
mov bl,al: f1 F4 l4 `8 N$ }* d7 r! m( P
and bl,0fh ;mask the 4-bit Msb
/ N) R, X9 V0 p+ M# e8 K add bl,30h5 E- c0 @' I/ t3 q; Z# J9 a2 T
cmp bl,3ah
  q) x. n/ N7 A, ?8 i) _' x jl next1  ;number or alpha?
0 O9 h' E% ~, M+ R$ ]$ k! n- s add bl,7
4 H; z5 }/ ?. w; Nnext1: , @. W( z. B: m$ x
mov ah,2  ;print one hexadecimal digit2 G% }0 Y3 a, w; ^; l2 p; ~
mov dl,bl
1 ~0 I+ _. U' [( n0 i6 x/ B pusha
" \) V' D3 s2 m' V int 21h
/ Y% ?$ c" A- l; g, v7 ~1 q( | popa
: l5 R1 X& @# L( f dec ch5 B% I, A# [- \6 ^, r
jnz loop3
! |, k0 G7 ?/ Y0 t4 S- p9 N& o8 | popa: }9 D' D' C- {: c
ret- c% c+ M/ a2 h1 o8 A
binhex endp
7 s1 ]$ c. B/ n' T1 W, f  I  G   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-11-3 23:08 , Processed in 1.223085 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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