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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下: 4 ?4 g2 M3 Z: I1 v; e
( X2 b) ]7 Q" L
  .model small
) W3 ^* X. k" Q' q$ n3 Z7 Y) U3 j  .386
0 B- `7 t9 l- X9 {& U4 O( K  CFG_ADDR EQU 0CF8h' v0 j% r  N: Q/ ^: b
  CFG_DATA EQU 0CFCh( Q, |1 i, |( P& J: Y* P# [+ n
  SMBUS_BUS EQU 0* h  h) a$ Y9 Z+ W# v1 |; L( \
  SMBUS_DEVICE EQU 31; V4 K  d: F( D5 k
  SMBUS_FUNC EQU 3
# p- c4 m' l( L: }6 r2 d  
7 A3 }4 |  T4 l' a9 x0 p  .stack 100h
2 I# G3 n& g2 L/ V& M  .data( C( Y* I* z5 Z1 ^5 R8 t0 C
base dw ?  ;smbus I/O space
) j/ x% q3 C# w" o3 P! mnum  db 0  ;byte select
/ \( B) Z! X2 U- c! k$ C; G' mSmbStatus db ?8 o( I& K- K! {( a7 Z+ E4 P: n
1 r# l) W1 g4 \8 q& D' B6 U
  .code- O7 n. O! n9 L$ G/ c/ q( |& m

3 f- i0 d# G! r1 oLF_CR MACRO
" ~. Y) H. Y$ E  pusha! |% D9 N$ n3 q7 |# d# \$ r  A
  mov     dl,0dh      
3 R/ ]: I" X" V2 h( b  o6 |& \ mov     ah,2- x  W4 k4 r4 ^4 }( \* b1 l% }
  int     21h+ r) T& G+ h' `9 V* Y5 {3 E
  mov     dl,0ah   ;next line   
1 i4 \' M7 B# Y0 {7 H$ `8 g  mov     ah,2' y/ ]! S" \4 }( B% U% c; @4 t
  int     21h
& x! W& d. {9 F* I' W  q( P0 q  popa  6 B, F7 ]2 T4 Z! v: ^' g
     ENDM  C" `6 v) n) s0 s; S) {

, @; o1 h& y6 t: Z' {7 l; p1 r) _  \0 O0 R4 q9 P
main proc far
5 G, D2 q4 V! f' F5 j$ \ mov ax,@data. e4 n% g, [( j5 O- E. T: `% L5 A
mov ds,ax
/ c7 T& E1 E* }6 m; f4 \
) z8 L1 r% V. j( G mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h
3 K  w8 X; k& c" ]0 z  A mov dx,CFG_ADDR
' K0 W! `  [& s# O1 J* b out dx,eax
2 i6 S% \' z1 F4 D0 {  x( E mov dx,CFG_DATA4 p( Z: v5 O- R1 ?* C, H; }
in eax,dx8 c  k6 h, Y! Y$ W: \/ i. l
  
7 {2 c  ~1 p1 f1 i- P: C; O$ n# G shr ax,5     ;bit 15-5,the base address% S1 y) r* D/ i4 x" |
and ax,0000011111111111b  {, @; g: }4 N9 h
mov base,ax& ~2 }5 N+ p: ?) E
  
! G2 ?4 b) b$ `5 X, H6 Z  ~5 B% k4 W call ReadSpd5 g8 E" `1 ]* {& W' F" ?* }
exit:
( ], k4 ]1 l1 @  n" F1 h6 V mov ax,4c00h7 B1 P6 y" f- t
int 21h# L3 L0 Z& N. Q- }
main endp
! W4 w( v8 p1 |2 ^
% w4 J" m$ }) P* U
  ?" h0 W3 a. e6 U* @
; {6 Q1 K& K8 gReadSpd proc
0 `! k6 W/ C% p  V- d, G) x* T pusha6 ~+ o7 Y# `& M- U+ s
Again:. ]7 W  ?/ C" o0 Z6 j
mov ah,num
5 t4 a; H3 j+ J8 |  and ah,00001111b
( n! `6 u& F- r6 E5 @" [! M .if(ah==15d) ;CR_LF
+ H  {3 n& }$ ^5 F4 n+ B# U! W  LF_CR* b( O! p6 D# O7 w& D/ w+ ]# b* p
.endif, D* a+ c/ |2 Y; E" B" \) U

. M6 g$ s& W  f .repeat0 m! V) O$ m6 P& D0 q. G" G
  mov dx,base   ;reset host,claim host in use7 H. _# ^+ }' L! k" q
  add dx,0
. K- e; X0 x( [' d8 t- V  mov al,40h
/ t2 T' P6 Y' N# G  out dx,al* Q6 Z, n) v, k  o" l6 A$ M
  0 }+ p  i1 X# `/ Z! \
  mov dx,base   7 o1 }( I8 `- h, w/ j$ S: }0 ?
  in al,dx7 Z5 {* g& J: [( a
  mov SmbStatus,al
6 N5 k& V! Z6 X  z$ L  4 T; [: U, X4 b* n0 r/ o. G% R8 t
  mov dx,base   ;clear all status bits* r- u: C% h, b# W7 e! N% |5 ]4 Y+ t
  mov al,1Eh   ;host status register% Y) F8 A  v/ J! B0 H
  out dx,al
- y7 {  o" O7 W' `8 M1 P7 g7 R1 j  
8 E' c' h' L0 [7 j  mov dx,base   ;set offset to read
! I9 X( U7 L' W  add dx,3    ;host command register5 i; R& @! A" O; Y5 ^/ f
  mov al,num3 ^( V1 l: F2 Y# ]
  out dx,al
$ v+ c+ z* z! j. k$ a4 m  . N+ L( D  \% X. q  `% h
  mov dx,base   ;Transimit Slave Address register
. A3 w9 l. k9 P" p+ M$ o  add dx,4+ j: u* U+ D4 H6 @3 E& v
  mov al,0a1h6 @# D- G0 y4 n% m1 Y
  out dx,al
) J% B5 \7 E7 ]' B: d  R  
6 m* f( B$ N  |. Q/ {  mov dx,base   ;set "Read Word" protocol and start bit5 c% h! C3 F& j: a
  add dx,2    ;Host Control register; V" x0 j1 g6 v' W  _4 h# A/ X9 t$ B
  mov al,48h  
) \% K  B" \4 `5 V. k$ P; ~* H% O8 T2 Z  out dx,al/ e. N( A8 X# h( F4 l9 Z

* j) ~0 k# A) p
8 b1 B* x4 J; r. R! f- f/ {6 |9 v2 i  
  }8 j2 C: B3 j$ V0 _& x  mov dx,base
- n/ C0 i" @- f: Z  in al,dx
( r* {; b1 D% e$ }; d  mov SmbStatus,al
' W- U8 p2 Q+ q2 u0 `  and al,1Eh& z; C1 l8 [: r" b
  .while (al==0) ;check repeatly until any of
: m/ i2 o: X9 O! A. U    mov dx,base      ;FAIL,BERR,DERR,INTR0 a/ V$ @. I9 Q0 T- `
    in al,dx
# H# v/ ~0 {4 B3 x" l1 ^) ?    mov SmbStatus,al# b% x4 d6 ?- N( l3 m
    and al,1Eh
9 [! _0 F* b) f/ f  C( A  .ENDW- |5 p" W' q& ]0 r: R+ c
  3 i" i4 p* W8 c2 E9 K
  mov al,SmbStatus   , g  v1 Q: I+ r4 [! _
  and al,1Ch# I& W# y" U5 D  Z( H& ]
  .if (al!=0)    ;check for errors  
+ ]/ f  H8 \, x+ h- F  e  ?   mov al,SmbStatus2 ?- E- k& F- D: i! S# d
   and al,08h   
0 e( M: K4 K4 w' j   .continue .if (al!=0)  ; G3 s9 x. v* [
   jmp @F  
' v. @: i. w( v' ~  X9 u2 d .else
1 Y* h8 T# X2 X( Y1 k- b1 y) m6 [  mov dx,base/ `; M' W: B% ^
  add dx,5h) k$ e( y5 Z! `. H' O. Q
  in al,dx  
, @) g, ^: j5 ]2 L0 q  call binhex
- F& K8 Y2 [& ]: o. k  .break
% a8 R/ L# w8 `. _ .endif
8 c/ y8 P% a5 q0 y( _  
1 A6 l. ^4 ?# e$ @  .until (0) : S' M, m6 O+ j
  
1 \$ Z- u; z, Z2 V7 g
/ |! e+ ]0 Z- q
6 u. q4 V( p' \ mov dl,20h ;output a space2 m9 W' [: X8 R' q( K1 L
mov ah,2# R% H/ T" ~% g  x) B
pusha) v$ r- z2 {& _' S6 b6 [+ K
int 21h
! B) z- A- \$ M* k( U popa
. _2 M+ Z. ^/ ]! f9 j, Z! B inc num$ H! e# j; r0 k4 k$ v$ s# x3 Z
- a) v" p$ G4 O
cmp num,80h ;get first spd 128 bytes
7 e8 i( L. ?. `; G, k, l jnz Again
7 i& f, V8 [. g) V# o% S4 x! T8 p , I# e6 K1 Q) {( a4 c' L
@@:9 |, F0 y) f& ?+ ]
popa
( Q# W) V, ?& s! c6 r& ~  ] ret9 ^2 u- z: Q9 o, Y- `
ReadSpd endp+ N3 C3 b. Z1 F9 m
. W& |% D7 R0 C" l: t# g( E

! Y4 F' u9 @" J+ j( ?/ A- ?# j' P7 O% g5 \7 ^* V
binhex proc ( {; ], R! t0 x
pusha
6 |& ]2 x. y' H 0 g# M/ C: R1 C" i6 Q1 F8 u. ^1 ?
mov ch,2 ;2 hexadecimal digits to be printed- v; X/ M3 J7 U, B0 k) M4 |( n9 d
loop3:
2 }+ x" L" B! B( k+ e$ C# d mov cl,4 ;bits to be shifted
. _: |2 Y7 ?! g8 H* C% d; \: z0 N rol al,cl
  ]+ N0 `! u0 s8 u, a' a$ f2 i) L9 |8 s mov bl,al
* _! r+ s# w- c& v* g and bl,0fh ;mask the 4-bit Msb
6 y: G. y5 K/ A) h add bl,30h
- f, v/ x6 v& R cmp bl,3ah
, b% d! Y/ C9 \+ k, L jl next1  ;number or alpha?
- L* U( L. J8 X, s' ^ add bl,7 1 y' {+ u* a" V& D
next1: ) [! }7 J% z8 t
mov ah,2  ;print one hexadecimal digit/ N4 Q& ~3 s! D, p1 Y7 t
mov dl,bl. G4 _# ]2 [7 c
pusha2 O) I. J( J- f8 t% Y4 E, H2 B
int 21h
: P, K0 `# m, a* E& \$ m popa" U( v8 [9 S: J! o+ B
dec ch" t# z) L+ d, t
jnz loop30 J1 o9 r4 P' b! B9 x8 b' O3 c
popa
3 d4 m+ ]  B! k  ^, q0 i* c ret- q% p& o: n: l) Y! s& e) r( g
binhex endp8 S) W0 t2 ^6 K9 ^
   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-7-19 19:03 , Processed in 0.122767 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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