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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下:
* S# {" t3 H4 Z- b) d  f! F! s8 [0 E* T; U5 J4 t
  .model small
& P" ^7 `9 O& t# k7 C! I3 _4 o9 \  .3866 I/ Y% Y/ s  v: F- S8 G
  CFG_ADDR EQU 0CF8h
$ y1 f0 K+ Y% y8 \3 q/ h  CFG_DATA EQU 0CFCh
# Y$ O& I4 p6 \- S$ y6 K1 I  SMBUS_BUS EQU 09 n" W0 B2 o$ z7 u- w
  SMBUS_DEVICE EQU 31
  g( v0 }# a; k- Z- C% @. q  SMBUS_FUNC EQU 3/ p) T# `- b2 l  {" \; ~
  
$ f5 r' N5 q5 ~6 X7 D4 ^  .stack 100h
: d2 u: W- ?: }* k  .data* {" A/ d/ d7 m7 K# I" g, q
base dw ?  ;smbus I/O space
$ f1 o* o( t  {& Vnum  db 0  ;byte select
; c" |- r' s# q; |% y, p0 [# uSmbStatus db ?
5 j, q9 V2 J" l4 u2 I# F( V' H+ g# w$ ]) l7 N6 E: B& J
  .code+ Q1 z+ t- A2 j1 B: h3 e0 Q
8 A( C2 L. f8 @
LF_CR MACRO
  j9 i2 I6 X9 _0 J! V  pusha3 p! \) c0 m# V0 t
  mov     dl,0dh      ; T8 x: S* C9 S6 t) r& U
mov     ah,21 s) N1 J2 v; Z+ \4 t9 \( M
  int     21h
0 J. O4 x! j6 r) O1 F' N4 V! w  mov     dl,0ah   ;next line   # X1 u4 Y" l4 i) z7 {2 I
  mov     ah,2: o# T6 W5 m' h- o% J8 B" o
  int     21h
$ c2 q; r7 d& R  popa  
( B2 U9 e! v) W, {- H     ENDM
* k7 e) Y- r( J
0 i$ q1 b; I: J+ Y
; B* o+ s% W$ n* W3 _main proc far' q4 P7 o# f' x6 Q' |) w% R
mov ax,@data
* C- S+ N3 z* |, c; H, K2 A7 f4 q! O mov ds,ax
* h( j2 Q$ B) M5 A1 J: ? 2 M7 C' ^3 {- l; ?: K! D4 n4 C; y$ s
mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h
- Q6 L0 y1 F) A mov dx,CFG_ADDR8 _. R$ t+ ?5 m. i: d& h% Y
out dx,eax
3 {. N+ M$ K4 O mov dx,CFG_DATA
' E* Q+ P8 e" V; R in eax,dx
0 j' N+ X, u" `1 c) Q+ i( v  
! ~  R. B5 h) y# V8 G& I6 T. J shr ax,5     ;bit 15-5,the base address* ~9 a0 P$ F& k0 `1 h8 Z
and ax,0000011111111111b
; g) X1 Y2 A  h' U2 Z4 p; }# t) e mov base,ax$ g' o# I* V! }
  
6 ~3 J( N/ ?8 g& D! c* v: Z call ReadSpd
7 I1 L+ m3 V2 v; J0 aexit:& v0 z% [- a: V' }
mov ax,4c00h
: i+ z' r, e+ h: }- z2 b( z int 21h- O5 E' D, V/ }
main endp- H% k: k1 R& M/ H( `. h

, T# ^9 {! m/ C/ \5 h4 p: a. w# b9 r$ L
- {7 G, U: |  {
ReadSpd proc5 S& W" p$ j  Q" k7 I
pusha- x, [6 E' Z* l8 Z3 T, i8 L' ?3 G
Again:- E5 \- u6 x. j, q
mov ah,num
* Y$ h* @0 t) d3 T! U2 e# @  and ah,00001111b6 ?3 K3 p* K) L' W8 C0 E; ~
.if(ah==15d) ;CR_LF
2 `( M. ]5 v) a+ x+ V  LF_CR
, ]: D% O, u$ C9 @) t .endif. X4 J7 W( e7 H5 r" |5 a: Z

- H. q0 ~7 \( h! g7 l  M" \* G .repeat
+ d  i, J% h% I1 Z% n+ R+ n  mov dx,base   ;reset host,claim host in use; a1 N5 Z9 W* J' E
  add dx,0. ~8 U# q' r! V8 X
  mov al,40h
  m. e' G# S5 D: M. E$ i% J  out dx,al* c8 G+ Z( Y& @' n6 P
  . W$ K) q- y8 Z
  mov dx,base   
; j: v( I# B  ^  @: N  in al,dx
( z! Q& l( L8 ^  mov SmbStatus,al. A) G! d- K: ]$ B8 P8 Y
  
( [$ \0 G/ @! S6 C" r4 q  mov dx,base   ;clear all status bits& ]& O1 X0 R' Y
  mov al,1Eh   ;host status register$ F4 R; O7 r" M# a
  out dx,al
, K( z/ \( _/ f  
& K4 L% C6 }" d# X% S  mov dx,base   ;set offset to read ) f, K% s; F4 h+ T, E. G1 p
  add dx,3    ;host command register
/ B& s$ n2 u5 y* y- x! y  mov al,num
% R. M5 W+ K' g( I" q% ]  out dx,al1 j* {7 b% ^! x2 |4 {
    [5 R) Q  l! i5 p0 E( o& w5 r7 y
  mov dx,base   ;Transimit Slave Address register
$ c( _( j. ]' a; G5 K0 r  add dx,4: x4 N( A' u3 Q, ~1 M: D" G
  mov al,0a1h
9 n% H( S) S# R4 m: F  out dx,al1 h; r- R- g- K4 A6 H  j
  4 i! T, m$ F$ r4 z, L2 m
  mov dx,base   ;set "Read Word" protocol and start bit
6 a7 m- U* U. _, O, d3 J  add dx,2    ;Host Control register- n6 H# X9 }- {, \5 B6 n1 d
  mov al,48h  ; e6 }3 n( D5 }3 E2 l6 ^& I% g
  out dx,al+ }9 j- T* |/ p: `) V- B8 |

3 h: \( ]6 d. {; _: h* @) Q& Z& H; j9 M$ a$ e
  " d/ F: e; h; Y3 K% q
  mov dx,base
4 C: x/ _2 T" L# ^9 c* a: Q; v8 J  in al,dx+ S% {1 ^0 A7 }8 `
  mov SmbStatus,al
  u* i  u8 h5 J: ^  and al,1Eh
  P& o' S. b' r  X  .while (al==0) ;check repeatly until any of
! ^5 r; j2 R1 D3 p    mov dx,base      ;FAIL,BERR,DERR,INTR
0 d8 j% B% t, [# o9 f( {( p    in al,dx
  L6 g  `' }( S+ R    mov SmbStatus,al
$ }& d! F6 O5 F' i$ ^* K0 Q7 n    and al,1Eh
' |- ^* B5 p- v  .ENDW* i% Z( Z2 }% L8 j9 N3 a; K9 n0 |
  
  l, `- n6 k( s! X0 s  mov al,SmbStatus   
. p; E9 B5 s: @5 F! h* J1 y% P  and al,1Ch
4 [: |. [1 J9 n( y* J  .if (al!=0)    ;check for errors  0 _. Z$ x  z% X. i9 w1 V. X9 r
   mov al,SmbStatus2 {7 x1 n2 Q4 ]4 z6 p7 P' d
   and al,08h   # D: h, \& @3 J5 L& M
   .continue .if (al!=0)  " B! X: n* b6 I3 v- V
   jmp @F  4 W; M2 |( f' R/ L: ^3 m/ l
.else
1 b2 G/ o, a5 W  M( y) X! H  mov dx,base" N8 u6 K' v9 `& t0 S2 o
  add dx,5h0 N" e- ^# c# {! }! |: d
  in al,dx  
6 A- U, ^2 m: n# w5 t. x- \  call binhex 8 c7 s# p' f2 `4 ^2 e6 d! a0 }
  .break
9 k, ]1 a2 O4 ?1 K  B. U: M' E5 J .endif
8 s- d2 o. A2 X3 d  F: y: K; u; E  3 e7 G6 V9 I& v: a
  .until (0) & c: u' U3 G; L9 i& r" z
  
4 ?* x; Y" N, R * T+ f/ B3 |  X/ P& o
4 F& g* |8 @* ]2 Q' t5 n
mov dl,20h ;output a space
9 O' i: G* C+ B7 h7 h* r6 y% W mov ah,2! G2 k* E% b# C
pusha" d( E( W; v' u- @$ p
int 21h
3 r; H' `" S8 R  d- q7 Y& t popa
6 o$ V$ ^6 K$ f$ x inc num
+ W- E8 L, I! E5 t8 o
' b. @: y0 c& S0 F( W) C cmp num,80h ;get first spd 128 bytes * Z; a  R2 ]% u' p5 c1 q1 H( Z
jnz Again/ {2 Q; ^1 H& i! E: v: x$ r

0 o0 V6 }. [8 Z! W6 c- M: N4 o) L1 k" n! o@@:/ I. D3 W0 H, O* `; T
popa
1 T- o3 B1 t* j7 a/ z5 h ret
3 o. g8 O/ G3 c) I& ^ReadSpd endp: D6 M- L. g. S. U- F# f5 p& q  M

" m& c" d- I2 r4 f* ~" |/ h" E. a5 _
) X6 c- b" J1 c# P" [9 R$ W6 J; N% _8 b3 z. Z  X
binhex proc
4 G) U% N+ H5 H% V7 b" \0 E" O pusha
/ V5 e4 q! `# D6 ~/ N" b/ M# k % }  a5 |" T# w- @
mov ch,2 ;2 hexadecimal digits to be printed" j+ O7 E, a, ]& {% g; @
loop3:
2 P5 U+ [% V4 d5 u- V mov cl,4 ;bits to be shifted* y5 \  M6 Y+ E( t
rol al,cl4 t4 G# I) U3 f* S" Z( B
mov bl,al# T. r8 l9 Q# U0 l
and bl,0fh ;mask the 4-bit Msb  z- }' Z+ R/ |/ a4 k& P+ J* t
add bl,30h) w2 e4 x& t; S" b
cmp bl,3ah
* X/ i7 A' ~' }( J' ]6 g4 J! A jl next1  ;number or alpha?
% z3 T) a& f- i3 a add bl,7 , K( x7 @% P) S/ i* g- k9 c
next1: + R5 g( l* ^8 o' n0 Z, b/ d
mov ah,2  ;print one hexadecimal digit
; p8 W, ~' w: v mov dl,bl& F$ k0 d! B. t% f+ S) V
pusha8 k. V6 g; ]0 \9 u
int 21h
/ |0 e5 {- I( U8 H popa
, X3 I: [- X+ z3 r% d# n dec ch
" [* E% x+ G9 v  P% f3 a7 I jnz loop3' `  }* E, Y% F
popa" {6 D1 a' u+ U. l9 {6 w
ret
4 Z% `5 j. O5 {; T/ m, V" Nbinhex endp5 L1 d9 f1 o9 x  `4 l  u
   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, 2025-5-2 04:44 , Processed in 0.030146 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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