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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下:
2 h0 b. F0 e3 W4 _
6 h9 q- I- {' e8 ?  M! U  .model small
8 o( n) B( y* R, m9 C- ]( J8 ^; D4 J  .386+ ]3 o$ M2 ]  U
  CFG_ADDR EQU 0CF8h
3 W- k7 A5 Z  E# B  r6 W  CFG_DATA EQU 0CFCh% z, E, l, f9 e9 y
  SMBUS_BUS EQU 0" d% R+ P  D4 e
  SMBUS_DEVICE EQU 314 z% N* F, e6 f, ?% b9 K7 ]- @
  SMBUS_FUNC EQU 3/ H2 O- ~) l3 T9 a7 s1 g) v7 Y
  
0 W2 x7 b8 q- G- g  U5 Y$ k  .stack 100h) n' x7 c. H+ f" R0 N4 D
  .data! V4 H: p. S0 t5 r
base dw ?  ;smbus I/O space8 P2 v4 f6 ^. A: T3 b) m
num  db 0  ;byte select( F2 d! ?6 \5 V6 E" c) G
SmbStatus db ?
. y/ D& v6 Y' C: P& U2 k+ ^, p+ N& j1 O# W" m$ ^, I* g
  .code
6 y8 m0 L$ K1 `: n' ?1 w
2 @$ T. e. i  b/ k% [LF_CR MACRO0 O% T, T9 X: P  I
  pusha/ X2 K3 f- j. l0 Q8 h
  mov     dl,0dh      ) D" W2 n9 i& I
mov     ah,2
/ [% H# [/ a1 T  ], ?  x  int     21h
5 X5 A7 e, ]- Y$ k7 N) V  mov     dl,0ah   ;next line   - ]1 H2 p. C( @% k/ U
  mov     ah,2* u1 x* s, n6 D) ?8 ^/ f
  int     21h: s0 U$ [! V0 P- C# S
  popa  
* N7 O; d9 T/ ]. J     ENDM5 p. F4 P6 d$ {

- A" [" C/ d* O# C. S
0 A, x# \0 |% _main proc far
( X* j+ w; e: l1 Z mov ax,@data
1 t, B: F- A$ A5 v( v mov ds,ax
2 Y8 S, x, o5 n2 p- Y; a3 S
( g4 f% f- _8 C mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h
3 s$ u1 Q  @5 X! ^: i9 c" |1 g( f7 I mov dx,CFG_ADDR
( F, S! G+ l. b out dx,eax
6 k. Z' }' W) a" p mov dx,CFG_DATA
! I9 [8 O$ \, m. x in eax,dx+ C2 g$ H$ A: d/ S1 H' a
  ' f6 }9 D3 B# H; U) w
shr ax,5     ;bit 15-5,the base address
3 V7 w# E+ q% x. e1 e4 a and ax,0000011111111111b# b! n$ T# J1 a6 ^& R
mov base,ax
. v7 w( V" ?2 f9 _) I) l% \  " _, |( x2 q/ l! v/ P$ S+ U9 E$ G
call ReadSpd4 S# j0 B5 a' k
exit:
! ?$ V2 C# ^* E+ B mov ax,4c00h% V6 d( E9 X3 s0 p
int 21h
- M. |- H/ n& }% V; Imain endp; U1 W2 g! I' b1 D
8 |$ u5 K# E. D# u
* j5 J+ k5 h& g0 }4 ]2 k1 a

. X9 ?: l/ r1 q9 }" t' g  \) J/ w5 FReadSpd proc" ~4 x+ j% l- D
pusha
' y6 I  h8 F0 W( YAgain:4 B+ o) o7 a9 T! ]1 {/ l
mov ah,num
( P7 U: z3 m( Z/ l* z  and ah,00001111b
, G' x, Y; C( i7 \; v: X( Q .if(ah==15d) ;CR_LF
/ m6 L8 S' S# Q  LF_CR
3 O1 m7 `! C7 ], m .endif
$ B2 E6 {" N  h9 w0 Y 1 W, ?! U7 C. \5 F
.repeat
6 H4 F4 J- M* [4 A4 Q2 U( v! P  mov dx,base   ;reset host,claim host in use
, L& f9 y1 A6 W% `: {  add dx,04 y) t* b& X9 c* l
  mov al,40h
* x* Q! `% P& B. I" u1 l  out dx,al7 L; }2 h6 n3 n  P+ r
  
* l$ ]$ |5 |! Y1 o* |' m  mov dx,base   
3 q8 h9 l% g9 X  Q" h  in al,dx
) J' P5 ]. ^' ~- \( d  mov SmbStatus,al
% n: P" Y2 g' |/ f$ c3 d5 I* j0 Z2 X  o  
( A+ K9 }- O( b+ I/ O  mov dx,base   ;clear all status bits
! e6 d# ?  r- m- t) ~) G- [  mov al,1Eh   ;host status register
+ T6 l& T9 R2 Q- a) H+ W  out dx,al0 k+ J5 L7 L% R' ]$ ?6 Q& \$ p& I
  . e' l5 t' {* M4 u; X: h# P
  mov dx,base   ;set offset to read
& u# t+ T; Y/ v. Q, Y  add dx,3    ;host command register0 D4 k' M  t, G( g( x8 {3 Q
  mov al,num8 ~! I9 D3 {0 b, s
  out dx,al$ v3 P$ L; v- P2 |' n0 N2 X8 r
    c8 m4 p0 F2 j) I; g* Q
  mov dx,base   ;Transimit Slave Address register" |* U3 \- Z) [; Q+ s
  add dx,4( F$ k+ o: {" C$ H+ B! F) |
  mov al,0a1h% q" R5 U2 e9 r# I7 A/ @9 ~
  out dx,al
- U1 N. S( Z* J  
$ u$ _& t9 b7 q5 T( e& \  mov dx,base   ;set "Read Word" protocol and start bit- {0 {7 J1 c& o
  add dx,2    ;Host Control register7 Q. _0 d, l/ R$ r+ X/ o
  mov al,48h  
* ?2 U* p5 l& u5 o7 `' p  out dx,al6 f( V) s( O# a) s

6 h7 E! n# x' U0 J' Q1 c
. [, ~( v, P) x4 @' y1 h: ]2 [6 |0 Y  ! J9 O% u" r; Y5 V
  mov dx,base
& S5 O" s  p# {( D  in al,dx
7 [; |$ X9 s+ ~) s5 z$ R  R  mov SmbStatus,al
5 v4 @7 r* p1 g  and al,1Eh
: U9 z" k: ?( C3 \- l$ B  .while (al==0) ;check repeatly until any of. u& x8 C  U4 f  C  U6 Q
    mov dx,base      ;FAIL,BERR,DERR,INTR
- p+ D1 ^5 p( c+ U2 ], d. X  l    in al,dx
2 Z2 o5 w% s1 a; U: \: f, W    mov SmbStatus,al0 L+ `( T2 R9 Y, W) D0 a/ |8 x3 t
    and al,1Eh
4 r7 _0 f, b) M! I6 N  .ENDW
/ y6 \) Q  v2 c  
: p/ X( u; T/ o* P2 m% z  mov al,SmbStatus   3 f' d, n% Y7 T9 L& O
  and al,1Ch5 W( u4 A& Y: B# K
  .if (al!=0)    ;check for errors  
& G6 }: w( y" z   mov al,SmbStatus
- u! L+ z9 _! E7 _# V; M   and al,08h   , g: L9 }3 w1 ~% ^5 U% ^. Y0 q
   .continue .if (al!=0)  
* q+ U$ l" Q* E8 X5 [8 d) u   jmp @F  
8 k4 b  H  X$ Q- b1 T2 n .else% d% ^& ^4 e+ C& M7 G" a$ H( d
  mov dx,base
& w7 H6 E9 N3 K8 }! I/ w  X  add dx,5h
! [* ]$ z4 [# U5 |  in al,dx  
( _& u  c9 c2 d: p- K+ b! K& z  call binhex * a, t: c1 ]6 f; m! F' t" b
  .break
5 P4 C8 _+ s+ S .endif) O5 D5 D* Z9 h2 l; Z
  
$ k" V% [5 ~8 z- ]- ]0 p+ W  .until (0)
9 W, D# w! }' o  
, ?+ {, S$ y) Y! k1 z% B; S . p9 X" ^$ v* O7 D

6 u- R- v4 `) l mov dl,20h ;output a space
6 j* r9 p  R' m8 g mov ah,2
4 t+ B7 n" k- t, h pusha! b7 @! l/ ~" `* B
int 21h% T4 g! t, j3 ?) I- D, x) X( B
popa
5 C9 D4 D. p! y! x inc num( n; j: a+ J* f0 s
  Q$ Z0 ?; C. l5 n% d! Z  _9 N
cmp num,80h ;get first spd 128 bytes 4 h& ^5 g1 e) y& B
jnz Again
. U3 Z: |9 |8 T+ ]0 I0 D  z 4 n" n, i% \" Y: d
@@:/ A, j- z5 i8 j! e' V3 [
popa
/ \; @! A# S, n  l+ Q. M ret
% b& O6 L; d5 O/ S$ ZReadSpd endp
5 e3 q- O! O4 V0 L8 A
$ b* p: A7 ]# U1 M2 [
/ ^4 l9 y' }' p/ F1 b7 C. E
; M# A5 J+ H7 Z% C# l& sbinhex proc , j  F- ?& W& ]( I7 I- H3 J# k! M& h( h. h
pusha
9 [3 W9 T+ K" r4 G( q5 _/ Y + C/ D& ~$ E9 F8 V; P
mov ch,2 ;2 hexadecimal digits to be printed% T8 K2 j7 ?' V2 r, s6 P
loop3:* {( v* \) R2 j6 q. W5 `3 ^
mov cl,4 ;bits to be shifted0 R9 }# i5 S' s" R; W
rol al,cl/ l2 e" T' R0 r+ {8 P. g# s9 z
mov bl,al& k+ m# U0 @8 A0 U) A( ?: N  l2 ]
and bl,0fh ;mask the 4-bit Msb$ ^- {* K! [0 `* x
add bl,30h
1 c. M* ~. G+ v; g cmp bl,3ah
: l2 I1 _2 i( R7 x jl next1  ;number or alpha?3 C+ V. y( t# ~$ _: {
add bl,7 6 I% ~4 w/ J  Y2 _1 Q! S
next1: 8 d% V4 Q! `3 ?: ]9 W: D( g$ U
mov ah,2  ;print one hexadecimal digit6 A1 \  @  H7 u% r+ U
mov dl,bl
6 V3 B% Q( D: Y5 k( ~' L pusha
& |  G% U- F% d, H& s" t int 21h
/ H. r2 f; j: J" p- x- D popa6 k/ U  q: t0 d9 g0 o7 b
dec ch
0 t7 w+ j6 g# j6 P( Y6 } jnz loop37 X4 t+ G2 W3 t: R
popa. q0 ]: F  L5 A
ret
, N, ]$ y, E  j& abinhex endp
8 j. w# M$ j# a( X& o2 S+ S# Z2 ^   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-15 06:45 , Processed in 0.665397 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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