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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下: ( w+ G; b. n% }7 h4 ]: K
( K8 {8 v* f& \" K& q  e
  .model small
9 N( d! }9 |7 u9 B; p  .386
8 F1 i2 l5 Q% M2 W  CFG_ADDR EQU 0CF8h
: _& @) [4 \. n* n3 p/ ?  CFG_DATA EQU 0CFCh9 ~* S' W+ v: ]/ d2 n, ~$ T
  SMBUS_BUS EQU 0! A: i2 D& p2 D: y
  SMBUS_DEVICE EQU 31
2 P9 c% @4 F- m  SMBUS_FUNC EQU 3) Q" W7 I; }/ ~* I: m% O
  0 j: A; u3 L% U" G# ]
  .stack 100h
4 X; q8 k; @& o# v- D5 C! e  .data. j, E# s0 q+ V0 n
base dw ?  ;smbus I/O space7 i0 b( E3 W5 q
num  db 0  ;byte select
  ~3 o) q3 l  O8 tSmbStatus db ?
/ o( z8 Q! j1 j4 P' y! @# X) L
. V3 ~5 l9 B( w6 p9 c& L  .code
& E0 {, r- {: \7 _$ [* {0 m. e6 l7 [9 z  h
/ h. s- N3 C' u: Q0 e) oLF_CR MACRO
, @6 _; [4 n) P7 T; N  pusha7 ?. l* T: d$ ]
  mov     dl,0dh        \0 E' l" _6 k* l
mov     ah,26 N4 y: n" z! N) J
  int     21h4 s% @2 p) h1 v" R5 L- n( G
  mov     dl,0ah   ;next line   0 n* w6 `! Y$ f1 b
  mov     ah,2
6 o4 W8 b- }: o  int     21h7 ^3 a9 G6 c2 e6 _8 j$ t! Z- [
  popa  
! i' S- G1 Z" |4 l- f. p" t     ENDM/ a, D  X% [) }+ `( k
8 r# _! [3 C- |7 T
# p# E9 e  c9 A  N
main proc far
7 u2 |# p1 s# U0 o& T7 I mov ax,@data+ v' L5 \- C& n( i5 O
mov ds,ax- A2 c* O1 J4 U' X% `

1 h; x# [5 A* N3 @; ]' k5 ~ mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h
9 d1 c  z- L# T; r9 ^! q mov dx,CFG_ADDR4 ?0 m* Q9 I6 m9 W& c
out dx,eax2 m% o1 z1 I, j( N
mov dx,CFG_DATA( G3 K9 k. J1 C- }" a) v7 g  h0 l
in eax,dx
( c! f4 R7 A; y4 Y* [8 G  
' T3 |! T) V) q% C  R; [6 l4 A shr ax,5     ;bit 15-5,the base address
) ]7 c, C4 P% H, o( A, i and ax,0000011111111111b1 [, n/ _* X" {1 v0 Q& ^
mov base,ax
! Y( V! `: _; o0 U) o# [) H  # J/ i/ E$ K, M
call ReadSpd! x0 q1 n  ~0 v* N
exit:
6 }$ T! \) X) b8 I/ ~! o# v mov ax,4c00h
7 Y3 @" I% x2 a" r% Y int 21h+ \+ L: m+ t/ Z7 s) N) N; [
main endp5 h7 G1 b$ ~8 f, E4 t7 ]

3 Y: G/ i, h3 Q: G7 u8 L7 R0 c3 i5 W( c/ g$ J( |
+ F; J8 L7 S. @/ n
ReadSpd proc
- @! z$ `& V9 i% I; J3 T* h pusha6 K, B, F* C$ E4 O1 W
Again:- T- e5 J% N+ w( w$ S
mov ah,num* z$ O0 _9 [/ v8 u9 T
  and ah,00001111b+ F% L4 ?0 ~* C5 ]3 o
.if(ah==15d) ;CR_LF
1 F. R) ^6 ?9 z0 M1 j  h  LF_CR, Y8 t5 k- V- ?$ l0 q" W" D
.endif+ B5 J% P9 e  O5 _/ t6 {

- O; ~. }" ]0 v/ F  R4 @& Z .repeat. A% {7 m: A8 K1 n! H
  mov dx,base   ;reset host,claim host in use
4 i- f+ d/ {6 J, j) F, N  add dx,04 W- J8 k) e9 [
  mov al,40h
4 d" k# C& u0 u7 M1 \: m  R, |* B  out dx,al5 O% P4 H. u3 R/ ]$ H+ n
  
8 j3 E0 `; ?/ S  mov dx,base   7 o) N. }% Y+ G; V/ ^
  in al,dx
0 v$ b# \/ [" `5 C) @4 J4 r  mov SmbStatus,al+ g0 q& y- Z/ q8 {; @
  
6 J- {6 M3 _$ U/ w) O* I  u; \  mov dx,base   ;clear all status bits! C. H( x( E: t" d
  mov al,1Eh   ;host status register
6 T2 |( K  A" R0 d- e. x" g8 |  out dx,al
; p7 n3 k# ~/ P  
% |3 B, x! G% o" b' [. P' J% _; N  mov dx,base   ;set offset to read
) V8 R+ v4 y# m# {  add dx,3    ;host command register
( ~' A" L8 U5 a  mov al,num
# a# }" y  |' X- I! x  out dx,al
! Z6 k2 r" M  D. Z+ C6 _  
6 C! o2 N/ p7 V" n8 }* M  mov dx,base   ;Transimit Slave Address register8 h- p4 ~; o9 u/ Z# _, k; E
  add dx,4) p. |* f& K7 p& }' \' S  G
  mov al,0a1h
+ b" X4 ^% c2 t+ [  out dx,al
4 G/ E8 Y6 i- a* _$ e# {3 @6 O8 J  
' ~+ }# M8 `9 X$ [! Z% i5 C5 P- q: [  mov dx,base   ;set "Read Word" protocol and start bit' ~$ b5 X+ b0 Z5 U2 _5 f! x+ H
  add dx,2    ;Host Control register
* L3 ]" p( [3 D; [; k  mov al,48h  
5 J, d0 m: _# d; ]# i6 j3 }; ~  out dx,al& o& b( m- H0 N+ b& a

+ b5 _! {. [" R! m& R
) _5 {! R+ a& |3 B) R( K4 X: J4 u  
0 b* J, M% ?/ w% t  mov dx,base: U8 V3 e9 D( x) z; ?( ]
  in al,dx2 l/ o. l* B" Y# N. o9 C
  mov SmbStatus,al
9 j* X% I! p  M+ B' e  and al,1Eh
) @% N; c0 K$ |) s6 P8 d8 \  .while (al==0) ;check repeatly until any of
2 P$ R- S: l8 q+ z- @/ A+ A7 D6 S    mov dx,base      ;FAIL,BERR,DERR,INTR' j3 [! M6 f0 o6 R
    in al,dx
0 g4 Z- ?7 y4 _5 ]/ H7 t    mov SmbStatus,al2 ]+ _) j% [& v5 y2 |
    and al,1Eh
% |/ V; ]: d, b5 G  .ENDW
! I4 [  \& |+ {% t$ ~  ' c( K& p" g2 H6 U
  mov al,SmbStatus   6 z$ _/ \9 T* I, {' j; F" I
  and al,1Ch3 U* B! E9 e. z1 `5 J! f+ V
  .if (al!=0)    ;check for errors  
" Y! k& M) D9 f   mov al,SmbStatus
! h3 I3 k: }& n8 @: V0 y' }2 N   and al,08h   + t* `' N8 n6 K$ V% d+ P
   .continue .if (al!=0)  
, o3 K! c' s/ N9 L& g   jmp @F  
' @( F8 f3 M8 ]8 ` .else( r1 [$ m  h% I( b3 e
  mov dx,base/ p7 Z. J) I' Q
  add dx,5h
8 k1 T3 k( K, i. Z  in al,dx  2 }1 V! n6 I) h6 [$ z) ^  `
  call binhex
& l! s. W( d9 b0 Z3 Y- g  .break
8 `8 d* |7 _/ Y9 n .endif' k6 `5 R1 Y( b5 A1 R  |
  
( V8 J/ p5 Q7 v4 H, O  .until (0) # S3 g* c  n) a, x" ^/ x
  * s- D+ {: f7 M2 y8 H8 B/ z
" p9 J+ X, s% w7 w! j* ^* @7 U
! Y/ i' e. G# w* f9 J2 z+ X) u
mov dl,20h ;output a space
$ O# V. O7 b# Z, X/ L& w mov ah,2
9 D/ G$ f- S9 v( \ pusha4 H" o8 ?( @  o% H* d
int 21h
7 S" o0 J/ g2 s popa
* J& J7 s5 b$ D6 _; q* J inc num* j+ F0 B. G( V1 M, Y; d" r

4 }7 A9 K( z/ t: c- M6 |) _ cmp num,80h ;get first spd 128 bytes
% i& s# M% W" W- W( G* B" | jnz Again
$ I# z) m6 ~7 z' p 9 H0 c9 k" y* \5 F" M$ \6 b; g
@@:
5 \1 {2 ]9 w- e1 y: U5 d& f popa
; e6 Y) C5 r6 k ret# a. r. w7 R3 E% c9 S" U8 ]$ x
ReadSpd endp
! t5 C) J# j4 W0 r3 _
9 T. I! r! B. c: ]& {: \4 S) y( A/ E& z  a$ v) Q4 W3 }
  U$ D( q8 P: n9 T. I$ l/ S+ ~& ~
binhex proc - l0 s) Q! |% a
pusha 7 p* a6 b' g+ @

( I0 `: H2 ~5 r# r6 S- K; O# I, M mov ch,2 ;2 hexadecimal digits to be printed
" ~/ P3 {) q# ~loop3:: c3 @8 B, C. p2 [; M" H
mov cl,4 ;bits to be shifted3 ?6 h* C# l7 b9 W7 i6 b, G; q- c/ W
rol al,cl$ I% M* `$ F, j- h6 m% m. l
mov bl,al0 U! C/ @" {, _( W) P2 u+ V4 A
and bl,0fh ;mask the 4-bit Msb. h/ z( K( u1 X3 F
add bl,30h
) e/ z! F% K  L2 _4 b7 H cmp bl,3ah5 Q0 s) r' |' ]! }7 U' `
jl next1  ;number or alpha?
) X* _( K% i! J+ c$ z: F add bl,7 . P! c, I2 ?6 F$ h* F( c
next1:
' c( A/ f6 ^6 z* e2 Z2 {+ c mov ah,2  ;print one hexadecimal digit# [% j5 P- y; ?2 R! b
mov dl,bl
5 z& R3 C$ R$ N" B' G9 s0 }# l- q pusha
1 m7 r9 X& J6 N int 21h8 V$ P' B3 R/ E9 {9 {4 h5 W
popa, B& Z1 ]. }% d$ i  T# f( K) w' ^
dec ch; |! _# y) ^9 [7 F7 a2 y( \
jnz loop3
3 `! K  p/ l8 N; i2 ? popa' E4 u0 q, Q' \! n, E  n& I* u8 ?
ret
! w7 @. n6 O( K$ ~( W  j$ dbinhex endp9 G% Y. ]$ ?! a2 ~$ ]
   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-4-4 14:42 , Processed in 0.120964 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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