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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下: 6 C/ |: b; o: J' j3 R

% Y3 t- j. b! T; a* g* z  .model small
6 u' m1 l% W- ~4 `! V5 |  .386, ?! ?& H  s6 ]2 p
  CFG_ADDR EQU 0CF8h
( M5 ^3 U0 Y5 \2 S9 B  CFG_DATA EQU 0CFCh2 |: e1 P- K9 l/ c6 h
  SMBUS_BUS EQU 0! z1 j8 _8 z' M! E
  SMBUS_DEVICE EQU 31: \$ s( g3 ?3 ?7 X! o
  SMBUS_FUNC EQU 3  y/ s4 b; ~4 {3 V; j
  
2 i) a0 z: b! {7 }; Q! C  .stack 100h
% y1 b# g9 K* Q/ G( i  .data$ D  c; l" z" [9 {- u% a3 S
base dw ?  ;smbus I/O space
$ P+ v. E1 I" f1 E! f) j- anum  db 0  ;byte select
' i8 q0 v) Z& q1 b* ?  KSmbStatus db ?, p7 t  `) [" l0 |0 y2 n8 S

5 o! {, ?8 M2 f' G% g  V  .code- z' R- L5 p$ q5 r7 y( w

! }6 j, x9 q/ t9 XLF_CR MACRO$ w8 E# Z- j! M
  pusha2 J' s* d5 E) M! E4 t
  mov     dl,0dh      & O9 X2 S7 r; }) G% P
mov     ah,2! b+ t, y2 e0 e* O8 K: e# N# @7 E
  int     21h6 G! o. z2 T4 K8 X
  mov     dl,0ah   ;next line   
4 f  u" ^/ V8 y0 r  mov     ah,2
9 m  W" M; \- }. _9 k  _  int     21h
0 I% r, q6 v& y  popa  
, D2 F" B' ]0 ?& j# W5 j     ENDM5 |* m: c& b$ c4 }; `

2 V+ m# W* ?/ s. M/ u+ M' D
- A$ k# h$ }( Z4 m" bmain proc far
' [$ I& s' i3 E! q5 D+ F5 } mov ax,@data. M3 ]* E- p, W
mov ds,ax, b) ]0 b& s9 D$ C, ^( g( Y$ y. K4 c- ]; K
" w6 }2 Z6 |# w! r
mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h
! o2 K% ~2 [; N( J% L" `+ T' I mov dx,CFG_ADDR
  o7 t; X) x6 x$ U2 z% e5 I( S+ q out dx,eax
* ^( m1 _4 V  Y( A9 | mov dx,CFG_DATA) A3 V; }( P4 [1 O
in eax,dx
8 _0 I. ^: m1 V6 O; ?' X5 K0 o! `  
( C) z! Q( n8 U7 S shr ax,5     ;bit 15-5,the base address
* K: W/ l# m$ N* ^. X and ax,0000011111111111b
! O! ?* S& I3 x$ T! A- v mov base,ax: l, P7 S$ m/ j" F' K: Y7 d
  ) f9 w# a1 t. h8 q1 b
call ReadSpd
! ]% F! G+ k' A) Fexit:( h) ~# A: ^* W- m$ T# X
mov ax,4c00h
$ g6 o% j4 J" x9 [' V3 P int 21h
* e2 G6 u# \$ x; h* z. Q1 W. o4 \  Emain endp
8 j: A/ S2 b( h" w- O7 B$ I+ Z0 e! I1 W  X
3 S9 X+ f8 M; ~  W4 B# F3 ~
- }& D8 T; I6 H: E: Z3 x& h
ReadSpd proc
( U* x9 {* o( Y9 X8 ~6 B# F" j3 [ pusha  a: i3 x0 ~0 z0 [1 `8 s% Q
Again:
1 I% E2 e. L$ c" z1 r mov ah,num9 U2 t% i" I- e+ T# D# |
  and ah,00001111b7 z- P+ F0 o5 Q; P5 r
.if(ah==15d) ;CR_LF8 w) J" C# I* r9 ~
  LF_CR6 j  M$ X: I- _; c9 M
.endif0 c4 ?9 A* M. [7 Y" |5 r7 D! ~  N

- e& j( P! y+ m' \# m1 U; @5 o8 @& M .repeat
) E( j! W2 D. J: _- v( `  mov dx,base   ;reset host,claim host in use. R6 L7 x' x) I+ U' q$ g
  add dx,0
( w: Y& J8 V2 ~9 S" U+ x8 N  mov al,40h$ p9 F- S. L- e. `8 S
  out dx,al+ ?- |: z1 n2 Y. V
  " w( x( _- Z7 n1 X
  mov dx,base   
8 f2 k# a: g6 m" F8 l3 J9 M  in al,dx
+ P! `# d  G$ r7 T* `  mov SmbStatus,al
  a" ^: d, w' N7 T  
" ^" f" M% g& K7 S3 [7 R! c3 a  mov dx,base   ;clear all status bits
4 x' @5 n8 f4 N0 Y  I4 y  mov al,1Eh   ;host status register* j1 U6 B( t6 q3 U/ \4 `
  out dx,al
! ]4 y9 ?3 z4 c8 @  . x: y% a& ~+ U0 v) o& m" W) f  [* x
  mov dx,base   ;set offset to read 9 A  {' B( i. J4 ^& o, N
  add dx,3    ;host command register
- I2 v7 K, b! n; \  L; \5 Q  mov al,num  X) r* _8 }# z2 ]
  out dx,al
) |* b/ v+ s2 J  - \& D" c( x1 g8 A/ ^
  mov dx,base   ;Transimit Slave Address register0 {0 ]. B4 k7 v1 X' }
  add dx,4
( _  z, N+ F" N' W6 M* h  mov al,0a1h, ?% f. U7 Z  f" X$ F; a) A
  out dx,al1 r  K$ y2 Y3 {. q! K  u" |
  
6 W  l/ ]( r0 u, h4 ^: t" s- C  mov dx,base   ;set "Read Word" protocol and start bit( o$ R% j8 r7 z
  add dx,2    ;Host Control register
! k3 A) g) U0 u& r- Y  mov al,48h  
/ _$ d0 j3 e+ v0 m! k0 e5 k3 k! V  out dx,al
# \+ D8 J& n' O3 g% L+ v
5 }- L6 L# i( `: D: e  k, V" p3 C* z; `" E
  
, u" q& G0 `3 T9 j. Q7 M7 Q  mov dx,base. f2 l- ]' T% K/ f
  in al,dx; Q- Q3 ]; r& o' s: l
  mov SmbStatus,al  W: f7 H" Y, M3 w7 M9 o3 C& q3 p
  and al,1Eh
5 v4 {* C. j# H4 n  .while (al==0) ;check repeatly until any of
$ |; P; f0 B  _# c; W2 n" F$ Y* K    mov dx,base      ;FAIL,BERR,DERR,INTR( v, {+ Y4 x  C! {1 _
    in al,dx( K  k9 ^6 D- P8 S
    mov SmbStatus,al
/ e4 g7 ^5 l: U( i) c    and al,1Eh ( y- N" t) p1 j* f; _' `
  .ENDW, v- @; R1 D2 h8 [
  " r& [0 S: X9 e- Q/ I% G
  mov al,SmbStatus   
: S' X9 E# T% G1 H7 f7 Y  and al,1Ch
: R+ M' p- b6 [9 a* }  .if (al!=0)    ;check for errors  
  S5 o# c( b  B% k7 q, u   mov al,SmbStatus% L$ o0 O$ M) A0 H# H' W' n
   and al,08h   
" v8 z+ ~, c' V2 n. X6 ?   .continue .if (al!=0)  
, d# y) I7 d) _; |" Q, M   jmp @F  
1 x' @" k) ~3 a3 o2 z% Q, M' G. Y .else
1 O9 m' R( h" D7 Y& c  mov dx,base/ k+ W4 l0 V$ E$ Y
  add dx,5h
2 B3 `. M- \8 X  d  in al,dx  
6 a5 |) z( T' Y: i2 Y) R8 o  call binhex * I1 Z$ H) |- ]0 r: z! _+ K
  .break
! f3 d' W. Q7 G7 c  a' d .endif
) N% {- A0 B3 J6 D  
: a! f+ k# h6 r" h% a+ v  .until (0)
$ |2 E1 {  g8 |$ w2 M) u9 ?  
* m) w; @- }6 k+ ~& i5 ? 4 [  Q, P. W3 \

: |$ N' X7 A) S5 f8 H( ] mov dl,20h ;output a space
1 k3 M# {4 i6 S  J) C. H% | mov ah,2
: ?! }( F4 @3 |( z0 p pusha
# Y) \5 p+ t5 R: e. ^5 L, Q4 E+ D1 Q int 21h, F* P8 W4 @% o0 q" `) B
popa. ^/ `/ `5 w5 T4 E% w: O' C5 B9 T
inc num  @3 {" u, G& \  f) C" t( E9 W6 p
8 l  y$ }2 u% @+ P. m
cmp num,80h ;get first spd 128 bytes
/ I; D; W  j" r" S jnz Again$ G0 G  R: T9 A6 P$ ^# W
0 J7 F6 Y) V' ~/ g0 e) A
@@:
7 z, w6 Q# o9 p: s5 f popa/ x4 H* W+ I# j' u$ b" D
ret
; `" w, V; Q& c! i; F; bReadSpd endp" g$ S6 N# `+ H5 c' W
0 O' n9 o! n4 I% P
5 K% f/ W+ Z0 [3 G1 D1 T

4 E# ]& p9 P  H+ y  `! X3 L) E, Lbinhex proc % F5 g3 X9 |. C& R) j$ H5 p+ h
pusha
/ R4 ^8 D9 r( x! }" F: z7 y) v
& C, \* s0 c/ |/ S- ~; Y0 `% N9 H mov ch,2 ;2 hexadecimal digits to be printed
% c) B% M6 d0 ?3 ~# c2 G% Wloop3:
3 `$ e. K3 d# h6 o2 ]! S mov cl,4 ;bits to be shifted* K- x- M6 t- g- U* k
rol al,cl/ X( g; Q( H8 T: B. Z( C
mov bl,al1 N, v0 L& U) a9 J9 z
and bl,0fh ;mask the 4-bit Msb' |, t/ }% O# k) N
add bl,30h
% @. f+ \* o: {% q% l, g cmp bl,3ah, L0 [7 g6 M4 S7 S
jl next1  ;number or alpha?
! l  o0 _, g5 B$ d. }3 b: v4 L add bl,7 ( C) J' L# x  p$ g# {; y8 c' k6 u
next1: 1 V* m4 \* p+ `6 X
mov ah,2  ;print one hexadecimal digit4 c, ~, W5 m; T5 h: U
mov dl,bl# J+ I) ]$ d) q: s" {2 p
pusha0 c6 j7 V1 x7 d
int 21h. `; \9 c5 a5 H7 s$ m
popa3 Y# L9 d9 L! ]; D$ z
dec ch% A. s4 l! X4 e1 J$ S
jnz loop3
, w& e6 C7 \! s0 w' q  ]1 Z6 H- Q popa
6 K' x' Q+ O+ Y9 a% Z& A% _ ret/ I6 G9 p4 A) S$ v& \, V0 @
binhex endp+ V3 }/ ^1 b) p: v
   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-22 11:05 , Processed in 0.069558 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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