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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下:
% w3 t* W* H) r6 Q0 h  i
) m) w$ u5 C/ N2 w3 d  .model small
8 u0 v3 Q) f$ K% G+ V& i9 _  .3861 e8 q9 r. [9 D  F' E
  CFG_ADDR EQU 0CF8h( d8 q$ K" j. G
  CFG_DATA EQU 0CFCh
0 t) m8 p/ o) e# w, M, \  SMBUS_BUS EQU 0$ Y4 b( U# M4 [6 C" V
  SMBUS_DEVICE EQU 31
6 r" V+ @; E1 }  Z  SMBUS_FUNC EQU 34 I$ J4 Y9 v# S& ]8 q+ _- R
  
5 b( v, c+ g# f! D  .stack 100h1 Y, ~" w# }8 d. k* H0 ^
  .data
: ~% L$ G' e8 [3 m( nbase dw ?  ;smbus I/O space% W& c) {2 a6 Z7 M8 J& Q( l
num  db 0  ;byte select
) h5 b( V2 |5 R& |. q1 s& HSmbStatus db ?* \/ W& p) g: m1 W, t# u  m

' U. M! d( `$ s% j& w( r0 P  .code! y4 p( Q# R$ V( g% j6 H
. ?# Q4 {0 j* l! S! a; k9 e
LF_CR MACRO
4 e9 v! f  K" s5 H2 t  pusha" H; Q: ]' D8 V$ P" m; u% o) I
  mov     dl,0dh      
) \" @/ F* w* ^9 |0 A6 } mov     ah,2  s7 T9 Q" X- F: a6 u1 f
  int     21h+ ~1 b* g! d. W% X8 [
  mov     dl,0ah   ;next line   
" n/ X) r/ f$ B% s, j( O# l  mov     ah,2$ _5 |' A: A5 T% l# U+ F( m
  int     21h7 |: e  ]. P% }! j
  popa  ' [- A6 }: l: a  x! X5 L
     ENDM
) |% j# n/ z: q
, a( Q8 F' E+ B( p$ Q3 j% f! G  S4 E7 D; Q1 D. Z
main proc far
. ~" o+ K" V1 s! R mov ax,@data1 k* F9 Y$ [2 a' j4 Z
mov ds,ax
6 A1 ?4 G2 X* a, }* D1 J ( d9 M0 S1 [8 V
mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h
8 Q/ i- {3 n3 b  l; u0 { mov dx,CFG_ADDR
3 G. H  m, d1 A, U; H5 ] out dx,eax# b; ~7 x2 z3 S5 X$ v8 ]
mov dx,CFG_DATA
; L; e+ N1 Q/ l. e3 k/ ` in eax,dx( w' \8 y: P) {0 c( K# A: w3 Y
  
3 v* d5 `: D. j4 Y shr ax,5     ;bit 15-5,the base address
) S" |% I+ T- r9 R and ax,0000011111111111b
7 f" M1 ~6 w$ z  Q0 E, x  [- D mov base,ax
/ q! A( ]: S& A  
6 d5 T7 e# B1 W1 {! d) S, n call ReadSpd6 j/ [" x! D+ y- ]2 p; p' W' ~6 u; [
exit:
7 E1 }" x8 j& s  s mov ax,4c00h
: Q, T4 q" e" n9 Q1 w$ x' C int 21h
6 p4 h0 }2 o0 S( `main endp
& A% x  T! C; x. u& h% Z/ U" _
/ F  w0 y* Z" V. J
) Q8 I) t- c4 z4 ~5 Y- q
+ _0 _; s. _, p, O( e9 KReadSpd proc
6 _( [& G) I, ?4 u# Q pusha; H% _! _, O, \- S/ j& }
Again:. H2 D5 V4 f7 \  M# {4 u
mov ah,num1 l0 ]; S& L& _1 ]: Y
  and ah,00001111b
- N2 d5 c) ]( u6 Q2 Z  `( v( a .if(ah==15d) ;CR_LF1 l, ]- u: q) Y  H/ k1 h1 X
  LF_CR9 l2 v. U1 n) e0 }) j6 K
.endif
$ l' i. m$ K2 j  }
& y- g! e6 |0 v! f .repeat
# Z% i. ~1 J. Z, g2 Y7 U  mov dx,base   ;reset host,claim host in use
  t4 T5 n$ [- K% i  add dx,0' S- ?. @5 ?9 g7 ^$ `
  mov al,40h
% m7 f% ?) e' Z* ~  out dx,al
& f. N5 S! X: Q9 W' q; y5 P  
+ m# c& t3 b! q( P( @% S  mov dx,base   % T3 ]7 B- L( I7 P) [/ V
  in al,dx
, c& R) |8 A( I) E  mov SmbStatus,al
3 @( f5 m: t  k9 [7 k+ b( m) u  
$ ~  C- a" ?, ]! j2 s' b: v* ]# T* d  mov dx,base   ;clear all status bits
: m" S+ Y, T& L5 ?/ F( \; [  mov al,1Eh   ;host status register
! r# m1 J0 I" F9 ^( P0 S& N  out dx,al
0 A3 m1 H& k6 j- N! d) f) t  
+ L# V. V& o6 v" b# x! e& a  mov dx,base   ;set offset to read
# _% T5 |! w$ j) [% U& L* o9 H  add dx,3    ;host command register
3 u1 M$ y/ }& U' @) F# |2 q* ^6 P4 y  n  mov al,num3 \8 q6 W5 Q7 m" {- H# [# G
  out dx,al
* x6 I5 N$ p/ o- H8 S4 h: r, }5 _  
; d* @( z7 E0 d* h- E  b' `  mov dx,base   ;Transimit Slave Address register
8 E. K$ u% G2 N7 X4 M* g$ A  add dx,4
. y5 @7 l) B! h2 M6 ]. U  mov al,0a1h' N# A5 l3 j, V, }; J3 m2 Y! X
  out dx,al
6 _/ M" ~  A5 t/ r# C5 J  : d/ ^! p" n  J6 a) j
  mov dx,base   ;set "Read Word" protocol and start bit* \9 L$ {( G, R, _* Y" V
  add dx,2    ;Host Control register; d. y5 e) n* u; J
  mov al,48h  % r( ?" z: |* E) u  V# E! ^! C
  out dx,al, v; p9 R& U7 w) u4 m& d5 M& ^
- k' C2 b$ Q  |3 _- t
: {. |9 [, c" Z5 ]' f) W  d
  9 H$ `* s* v1 v. g) ?9 M% @" X0 Y
  mov dx,base& M: H! v# J, o/ N6 S
  in al,dx  ]( z* D/ I3 D5 i( T# j
  mov SmbStatus,al
- {: _/ }3 U$ R  T: R0 T' e9 R0 h  and al,1Eh; N& P6 [+ J1 J. t' V' {0 T1 f5 _% b
  .while (al==0) ;check repeatly until any of) Q7 H. w) O9 m9 c) O
    mov dx,base      ;FAIL,BERR,DERR,INTR
! t# U" E! e5 ~    in al,dx% H# M& l1 d$ e$ X; |1 W/ N- G& X
    mov SmbStatus,al3 @/ i( t6 l+ N5 P1 |& o
    and al,1Eh
+ R0 T1 L3 D4 C* Y  .ENDW
  w3 ^; q: `0 W- t6 h  
' c( v  h! f  K- @2 F% x  mov al,SmbStatus   
+ E1 U: M( `; l6 G# G$ x  and al,1Ch
5 y' j1 f5 E) n. L1 i: V4 i" U  .if (al!=0)    ;check for errors  
9 V' L( T; J( f+ [, J   mov al,SmbStatus3 j% p  i; L9 w# g
   and al,08h   " e" N  B3 ^0 i. ]
   .continue .if (al!=0)  
" W3 j8 B2 P. q- ]. R   jmp @F  $ }. L9 m6 I+ t0 R6 v( k  G( `/ g; p
.else
% t( E+ a# E7 L5 K. h. H. G- f  mov dx,base# T8 I" g- K0 Z, U
  add dx,5h
1 }/ i0 v7 \. e* S' N  in al,dx  ; a& x; {, U: f2 J
  call binhex " t; [  D: T4 s9 S( i
  .break! M' l0 u. ~; u. f
.endif  a: i- S# {$ X/ ]7 g$ f
  
! ]  ?( A# C0 S4 r" N  .until (0) 2 |1 o' m! C+ F; y5 @2 F
  
! h, j* w8 t9 N# k
2 }, x0 V  y9 x/ |  \ ) N3 {7 I- x; G! D1 p# w
mov dl,20h ;output a space
& C' m, \. ~0 n3 r3 I mov ah,26 p, h) `( ]! a
pusha; k- ?3 y. K  l4 R$ a4 E6 |1 ?
int 21h
9 H% ~. W% I. T. T popa
- n. o' t9 K# Q inc num
9 B9 c7 ?# S9 k+ D( r2 r  e: c# `$ Y" y3 D7 ]
cmp num,80h ;get first spd 128 bytes * g  z# u1 h1 M9 _& ?
jnz Again7 n- [* b9 g5 E9 b

" y/ ?: t& o# A" s@@:
9 [! u6 N, E, c popa/ T5 y3 q/ b' u+ N- b* z% }
ret8 l. a3 k4 }$ X# n: S! C4 H
ReadSpd endp
) ?6 j, r! E2 P
& z" a6 Z8 ]% `0 f0 ]" R& J: I# Q) M) P2 D; M
! T6 R0 d6 k: I' C8 E# b! L
binhex proc
  U3 p0 P9 a" s& q' g pusha $ I  D; ?' {' z: e% u- L7 T
" O' t9 _# f, u( z7 {
mov ch,2 ;2 hexadecimal digits to be printed
; g) Q% |; E2 o3 R& xloop3:
( O! S% o3 _7 r: i4 u# J& U mov cl,4 ;bits to be shifted
, Z5 u; s5 H+ r- k  p7 a rol al,cl
$ U- z4 t. m1 ~, u3 R+ i mov bl,al5 z5 B/ u1 Y+ U- [4 B& x0 R: j+ C, L. m
and bl,0fh ;mask the 4-bit Msb9 D2 ^& j6 B5 H0 ~3 h+ n
add bl,30h# A! \( e8 ^% y0 C8 N  y
cmp bl,3ah
. e0 B* O  a8 Z2 Q2 h jl next1  ;number or alpha?
3 j! Y0 V* D6 L8 M add bl,7
. d8 X4 G. o, Z7 I9 R, _" ]next1: : K2 j, t% V8 j8 V, U7 |- {! q
mov ah,2  ;print one hexadecimal digit
2 z5 k5 ^" o2 t' Y( T mov dl,bl' X' ?) ^" H8 O
pusha
, E  |$ n/ o# E3 D int 21h
/ a2 ?. J( y& ?: T0 i popa
) X5 ?6 ?- `% c+ V/ v6 D8 \ dec ch! Z* _5 g: Z& v( t; `2 n1 P
jnz loop38 M, j  q9 \- W
popa8 n6 y# E( I2 `# z: k
ret$ F9 @1 R  K' O1 _1 ]/ h9 D
binhex endp
9 w- S9 X1 f  L- w* K. M6 e, i/ P   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-2-1 12:04 , Processed in 0.229609 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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