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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下: * @7 ?5 D8 F! H) w
/ L' s- _* _* D0 N' U0 n$ o" b- ^' ~  p
  .model small8 H, Z" v5 t4 v% r5 t
  .386; {' k9 l8 L& i$ }
  CFG_ADDR EQU 0CF8h
. \9 o2 S/ }; B1 Q, s$ r  CFG_DATA EQU 0CFCh
' J+ d3 v; Q/ Y: a) O3 S3 S7 g  SMBUS_BUS EQU 0
7 d# x" w: S0 g7 c3 [" ~  SMBUS_DEVICE EQU 31
" z$ z3 F& k, a  SMBUS_FUNC EQU 3
. l, l3 ]4 O6 ^7 X  
) \4 \/ F+ b: Q. W2 v  .stack 100h
: o3 b6 @. @" q- Y  .data! _! r0 S) g7 U: Z% \5 X8 C
base dw ?  ;smbus I/O space
8 ^2 ?; H! J. r" _9 v  z6 f) O5 Pnum  db 0  ;byte select3 d* l) }9 ~; k  z3 n1 C
SmbStatus db ?! T/ h# `4 ?( x% r

1 y9 {! d, N* _  .code
0 u, Q8 J4 |& M7 w6 `3 W* K: |! w, R/ n
1 Q( F/ ]3 u( B4 q0 a$ t1 D& W% MLF_CR MACRO
( p' ~- n$ `  b( A  pusha$ W4 F" e; @/ Q; z1 U" J
  mov     dl,0dh      
- n4 S! V+ N: _" ?- W: X6 w5 H. r" a; R mov     ah,2' P6 F  I  }9 `( r( x* i' x
  int     21h5 I  p% u* c, L. ]
  mov     dl,0ah   ;next line   6 E. D3 T7 K" N/ g& A7 X" D" V- S
  mov     ah,2, G/ h$ v0 v2 I3 K/ Y% b' s
  int     21h
8 ?3 o+ j! H- B8 E( a, Y; y+ G  popa  : y) g2 V4 F* a, w6 k. N4 Z
     ENDM
" C9 d, ?: N! v# G- k8 a3 p9 d9 m, I, w

, {2 b0 u: W! Jmain proc far
) h' o0 B* u4 L/ B mov ax,@data& [. Y" P6 F6 ^& `/ F8 s8 i/ e
mov ds,ax
) m! n6 k# i% q3 K3 ~
0 i5 c6 o+ k( R; o mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h% E  l% I( g$ h: c5 g/ A
mov dx,CFG_ADDR
6 p/ b$ ~2 a5 P& } out dx,eax
/ [! f$ }2 y% j1 q* O; a. j9 @ mov dx,CFG_DATA! N' j$ D: O: h* S
in eax,dx( f0 W2 o# X0 g* X$ h/ o8 u  M
  
5 Q1 l- I% Z& I shr ax,5     ;bit 15-5,the base address
1 Y0 D& |! m* q% f  ` and ax,0000011111111111b  D1 l$ E) \  l4 I' j9 M9 A4 J
mov base,ax
) T- H1 t% r( t+ V  1 a1 h# ]% g# V! m4 ^1 \& B
call ReadSpd% b& \! |- d6 M7 |# a) A' @
exit:- t/ }4 U- f, G! i% ?' Q& A5 i0 {+ }
mov ax,4c00h
. G+ t& e- {4 H& F  d& F int 21h3 }- x7 {) [( v1 ~- Q2 v
main endp
: _5 B2 d& N1 }* r1 k" b
* X% v8 }4 ~; t0 ?% B
- m  r: a* w3 D  v+ Y4 E6 O4 C+ K, V) R0 Z& ^! @/ p
ReadSpd proc; @; L; W2 a- N1 _( K: T0 Y( T
pusha/ A, k: _$ h/ c9 `% E! l
Again:
6 G/ Y/ a2 S2 h! H3 I mov ah,num
/ n( g& F, k/ V4 T) i+ j4 o  and ah,00001111b0 k( C0 z! l( U: ~/ c$ W
.if(ah==15d) ;CR_LF
) ]3 S7 }% H  V1 `; G9 m  LF_CR4 W9 a! O$ m# W/ _
.endif& r, r  y/ m, {* W  h; L

- ]. `% [- d$ I# ?8 \8 h0 } .repeat
/ l: Y) e# }! J# H  Z1 {2 M  mov dx,base   ;reset host,claim host in use
9 |& u. Q" ?7 g' N  add dx,0* Y% m4 L7 n+ t* ~/ I: ]# I
  mov al,40h
5 ~: T$ ~) u8 a: V. m9 z) y$ m  out dx,al
: ^3 G. K+ K/ P- w" z  
+ A7 k7 S, D$ A" \  mov dx,base   % a3 n' b% J7 L) O, L8 j- l
  in al,dx
" Z: m: n6 W" d8 P" u7 a$ j$ n" o  mov SmbStatus,al$ ~2 g1 C3 `1 y: E
  
# o+ c/ O% b( O  k9 A! Q- W9 W  mov dx,base   ;clear all status bits
0 r: a- s6 }- U/ Y" Y  mov al,1Eh   ;host status register2 C4 F2 ]) {9 j) b" m
  out dx,al
% W5 j2 S, y  l$ n6 _5 y1 f  ! O) i% [$ C" P+ J8 r5 |& k
  mov dx,base   ;set offset to read . W9 @: i4 N; J9 L
  add dx,3    ;host command register. J$ N* O" q8 F: v
  mov al,num; a3 z4 b! n( V, m; J
  out dx,al
; ]. S' c3 v5 C7 w  $ Z3 w% J8 c6 h7 q
  mov dx,base   ;Transimit Slave Address register9 i* X& s4 J" c: ~! p
  add dx,4
- E: ?  u1 t/ ?( y" c) H; ]$ j  mov al,0a1h/ h4 M8 U% E0 T& D# \
  out dx,al
- c  h) i* o/ ]  G  u' {  % `9 R$ ^6 G, }: }- G+ f2 f
  mov dx,base   ;set "Read Word" protocol and start bit
' W4 e0 b: i9 k, v; O  add dx,2    ;Host Control register
1 Z  g! ~: @2 c% m9 l  mov al,48h  
$ @: S1 y1 }7 U. l  out dx,al6 `4 k& H- ~( }: I6 L: e
+ ]  U% i! I# S9 I, X, H8 r9 O
2 S9 {; f; U2 P
  
. n2 {* [3 M7 r9 P+ Q/ L* ?  mov dx,base2 X3 Q6 c8 V* e! P) Y
  in al,dx
7 S, s+ D8 Q- L6 r! V  mov SmbStatus,al
! k3 v: e/ B: {9 l4 g2 D% M. o2 l  and al,1Eh
5 T; d' ?3 n7 R9 y+ K  .while (al==0) ;check repeatly until any of
/ m5 [2 I% N$ @. _+ {  e% C! O    mov dx,base      ;FAIL,BERR,DERR,INTR* G; l: b( {7 T6 @
    in al,dx
- }# x% z7 \8 W9 n' @$ J& D    mov SmbStatus,al& y9 \  g( t6 c: e$ s4 s
    and al,1Eh
0 v, s, y7 Z+ M+ k( O; k9 I4 }  .ENDW
) y* s$ H. ]2 o- O. E  
, }) r" L0 P& {- C  mov al,SmbStatus   / G2 }2 \1 A3 M% y5 J
  and al,1Ch! i& ?4 X: a/ d6 d/ j: c* v, n. X
  .if (al!=0)    ;check for errors  3 t8 [, F: D6 y/ i: G5 `: h
   mov al,SmbStatus9 X) I, z; m# D
   and al,08h   " Y0 x1 x( i$ d4 ^- z' w0 x3 r
   .continue .if (al!=0)  
) K/ w2 g6 Z, m+ a3 D   jmp @F  ( }% y; `! X% s8 `& ?( n5 \
.else
" K! E2 ~- M! N3 @: h. s  mov dx,base) c8 o6 B! u; x2 R" {
  add dx,5h4 c6 L  k4 x: \* V" h8 h, F, d% R5 A- h
  in al,dx  ' [2 s$ ^+ q( ^+ g
  call binhex
! q/ A. @$ a, n" s  .break; t, }  l. d- V+ L. |( r8 }" [9 Q
.endif' H0 g! T4 J6 M$ X+ }3 N5 |1 W3 w/ P
  7 p5 ~  I6 v4 s& `
  .until (0) $ D- H* L6 x8 g0 c3 A! |. ]: K$ J
  
$ S! H! _& S$ `6 r& ` , S) ^$ M2 q  x8 d' n2 ?9 q+ v! l
5 g! z1 T8 \6 }! n
mov dl,20h ;output a space8 Z  p6 l1 ?8 V& f' B/ N' K
mov ah,2; l3 y1 y3 {, L7 G! T/ A; h
pusha* X- Z6 L. C, |0 \, [8 E( p
int 21h; A6 d3 K9 |- T  f2 H
popa2 T5 s! f& ?' ]& p
inc num
$ B6 E/ o  l( V' H' e2 Q
* r. o9 P% q2 W. q. a! v cmp num,80h ;get first spd 128 bytes
" x2 M5 v  c" f  i# n* c jnz Again: A7 x8 I  I2 X  m
8 F) Z' b5 S& g( r1 T
@@:4 Y. ?5 L5 g/ S: e+ n( k% \6 j: f
popa) ?+ L0 Q! T; ?+ K2 a( k: S0 K" w
ret
' V( i- C) I$ Z0 ]  R9 |ReadSpd endp
/ R( _  O* F  m9 T; [  g  X3 f6 O! o( C6 _

/ h! D" ^, I( e& Q5 l$ v' \3 X. t* O0 g; z5 x
binhex proc
- u* B5 t( Y0 K6 Y, ^ pusha
! l* A1 v+ F# S1 O/ \ 8 J# w& e2 q+ V+ l% c
mov ch,2 ;2 hexadecimal digits to be printed5 y, K( N8 {, }1 w$ U7 V: g7 N1 c
loop3:
0 d( V- U0 w; }: M* i8 P, o* K/ C7 v( M mov cl,4 ;bits to be shifted
- h1 s7 }& x9 l+ |1 a' R8 y rol al,cl# s. u0 A; v4 i+ m  y/ v+ [
mov bl,al9 Z9 C: I* y$ v4 B7 l( d+ t6 X
and bl,0fh ;mask the 4-bit Msb
: e+ Z* J0 Q3 b0 U# [# V0 n2 q add bl,30h
1 n% X; h8 w; f" r3 c5 i- n cmp bl,3ah
: U/ t& e1 L; O# b* `; f jl next1  ;number or alpha?
5 W. A7 O, R; R9 T add bl,7
* W' L8 f5 J4 h& k; D0 Rnext1:
  V3 N( O( `( e+ P  `# K mov ah,2  ;print one hexadecimal digit1 S& R5 \# r7 q7 {2 U6 q1 q/ s( z; H
mov dl,bl
$ S" g& }$ g  \$ z1 w" e! t pusha
% r: K; u- O1 G  p# l, C7 l6 a# ~; B int 21h
# |; b+ Q) L' F2 \ popa
/ F! t, K4 i. f5 N. b* O( M dec ch
# g+ P$ f7 Q( u3 H: v& N% I jnz loop3# o' \& Q  o5 s5 Q1 C" [
popa
2 ?% f/ b$ U6 y ret$ q9 I" U5 `8 N9 P: o( p- F6 h# C
binhex endp
4 [/ Q  s' i9 l( L  w2 ^) 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-9-19 21:04 , Processed in 0.079766 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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