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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下: , O6 O4 d) N5 u5 d# @3 M9 l

. P7 V& I1 A! l" T' W  .model small2 s8 s1 l6 v1 w/ J) l0 u  O7 o$ \
  .386/ V! {( E+ t% _0 Q/ f
  CFG_ADDR EQU 0CF8h
  `5 P3 X/ S* h& J5 C/ x6 G" O  CFG_DATA EQU 0CFCh7 c9 o/ a4 S3 U+ S5 x# ?
  SMBUS_BUS EQU 0; p1 f3 R" j4 }) C
  SMBUS_DEVICE EQU 31
! }: [( J& P( b, V) E% G& g  SMBUS_FUNC EQU 33 e5 s; W, [- ?2 K5 Z! l
  
. d8 ^8 |1 ~: x( L2 W0 _- p2 X  .stack 100h, Q' z" G# @2 @) N- i: g' T. R
  .data  z% L" ~) J/ h* u5 R" G; U
base dw ?  ;smbus I/O space: q# w7 D" E$ [  U
num  db 0  ;byte select* u5 j4 r7 e' s- e4 U3 R
SmbStatus db ?; m& C6 y% [. v' N% `$ \3 n, n& S" q

: R/ o" |7 r+ L% a3 n9 Y. z$ B  Q  .code' N# U: n' Q- \

1 ]) K- g9 o! y6 ALF_CR MACRO: v8 c- f# B2 S
  pusha7 k! e) I& J& p5 \- n
  mov     dl,0dh      
& u9 m" v! G  R  c1 c mov     ah,2* q0 Z# A: \5 u' \4 }7 B3 w
  int     21h6 A% R9 J( m2 ?6 a, T. K) T
  mov     dl,0ah   ;next line   
8 `1 ^8 t# }* H  mov     ah,2: l6 b+ k- y1 x8 F1 K9 I- x% l
  int     21h0 C- m6 G) {* l: S7 {
  popa  
/ ?" ~/ \* j; m# ^+ x. i4 ]# `     ENDM
1 Q) ?. l8 Z) p( U6 B5 r$ e4 N# Y# A

" L$ P3 ?8 u! L/ p$ P" W, fmain proc far, c8 j% @# p% T7 t3 G3 x- {
mov ax,@data0 t) Q  |  b/ B: j  V9 T$ D
mov ds,ax$ g* F* R7 ~" W; e
; M: b9 s* o. W/ H
mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h
, ^$ h. n6 ]6 J$ G/ c9 } mov dx,CFG_ADDR: M6 B6 O! P! D6 |
out dx,eax
) m8 q" s- @/ X5 H mov dx,CFG_DATA
) |* o1 B5 A2 M8 U+ a$ C, r in eax,dx
) B, N$ n4 |. @- X  s- O5 X  {7 [: G  
) {; a' F( [" d3 m- g$ Z shr ax,5     ;bit 15-5,the base address" m8 G0 ~$ a6 l' f) b% e
and ax,0000011111111111b( O7 q& D, K3 }8 P6 W1 l& g
mov base,ax/ _! o& ?& M; \
  # y$ x3 z: r! p! |
call ReadSpd
' U+ Y0 H* T0 V3 J! Q7 Dexit:
6 k5 O; J- U5 H9 y) w5 z mov ax,4c00h
: Y$ v9 O9 z& D) {: p; t: x int 21h( K5 N! e# C# V
main endp
( J3 H$ y) E0 k0 x. q0 J, U9 o2 z' a* V4 V5 T; i/ N( M# T

& q! m1 ?* Q8 t% r# K. \) `' H9 T" f1 q- i
ReadSpd proc# V5 q: ~+ E& |" |3 V+ N
pusha! T* z! e% I7 \+ t
Again:
6 m" b% l$ a  m" M- p8 I3 d mov ah,num+ Q$ C$ x  O4 B
  and ah,00001111b! ~7 F( {& k. g1 c6 X& {9 }0 x
.if(ah==15d) ;CR_LF
/ P3 z$ t; z9 M  LF_CR
: @( j3 {, ?+ t# C .endif
; ^# s! w% L" i4 I2 B& c& D0 X , S7 D. L8 ?6 {) U# _
.repeat2 _1 c) J& r, P; o+ p" Z
  mov dx,base   ;reset host,claim host in use& n4 \0 @, C9 G/ i# j" V4 h5 y* ^, b
  add dx,0' d/ b7 V- L3 G$ q- s( M: e  M! l; {
  mov al,40h/ r/ W8 R/ g9 M) N
  out dx,al. z+ Y  s, b9 E% }. T) h
  4 k3 e$ L& Y0 r# w4 o+ U# i
  mov dx,base   
8 m4 l: w4 u) g  in al,dx
5 Y0 u3 h1 {% t  Y+ k3 U  mov SmbStatus,al# e" |6 X" ?" i( p6 O7 P% F
  
4 X) w! z6 A) [8 P: c. x( f/ j1 ?: ?5 J  mov dx,base   ;clear all status bits
) ]! Y& l* p' S  mov al,1Eh   ;host status register
/ m$ b  W+ l$ t, D8 N2 d  out dx,al8 @& m6 P+ e9 y3 ~3 V- e
  ; z# E8 h; l  N( u2 E2 [, x
  mov dx,base   ;set offset to read 0 t2 h# r; C2 e+ |4 ^0 |8 z
  add dx,3    ;host command register
6 ?2 `/ I; ~6 T. h6 E  mov al,num
! x. K! D1 ]/ j* E  out dx,al: [$ U) T) g1 C+ d% b
  
- H$ s4 V0 v% Y7 q# l  mov dx,base   ;Transimit Slave Address register
" t- F& ~/ p4 H* N* ]  {  add dx,4
: `& y) b9 T; ~- e8 U* k: H" _6 B  mov al,0a1h4 I* k& X0 }( i* l0 {1 z
  out dx,al3 Y5 `- n2 x+ v' V$ s# J
  
% M$ Q# K/ c. }8 A$ l3 S( l  O  mov dx,base   ;set "Read Word" protocol and start bit8 E* L! h. M2 x5 E& ?3 v, o
  add dx,2    ;Host Control register
: W4 I0 ?. K! I- V/ d; I# T' ^9 V* F! @- {  mov al,48h  
1 F, y3 G8 v1 E/ K3 |$ C  out dx,al' \" Q5 ~# |$ T8 f  a

2 u. }1 p- s, v1 C! `
+ X( N4 W! K7 |3 B; O: l) d7 S  ; q; O2 z# L( @  H* p
  mov dx,base- S$ ?( R1 Q- o4 ?- h$ b
  in al,dx
3 a1 v& o7 `# s/ L  mov SmbStatus,al9 M; g0 V! T9 u6 j2 M4 [: [
  and al,1Eh
7 Y1 g$ V0 f% N( f9 N  .while (al==0) ;check repeatly until any of3 L! l1 H7 L' U& b
    mov dx,base      ;FAIL,BERR,DERR,INTR
# R5 [7 P, K8 s    in al,dx
# j5 U; s# A4 ^' n( \! O    mov SmbStatus,al
) y7 [+ l" k, m' y. m- q- I. n    and al,1Eh
  ?6 G7 n' W3 h: F  d. Y  .ENDW# t" C9 c9 P8 `. Z: M2 M: T8 ~2 c
  , T, m) X$ l, ^; m
  mov al,SmbStatus   1 `3 z0 E4 m1 Z1 _; d: u9 ~
  and al,1Ch) m/ I5 A3 ^4 _
  .if (al!=0)    ;check for errors  " |$ s! z% e- P- r$ ?' w
   mov al,SmbStatus
, V! {/ i; p% U, n   and al,08h   
4 a, k! W5 j8 `# I" D: c   .continue .if (al!=0)  2 Y" O2 ^2 d' P: Y$ c3 x2 }. U
   jmp @F  + o, R# _( C" f; d4 w( C
.else
" r: g9 K# x& F. Y, {+ s  mov dx,base8 f" Q& }5 |- c% R; M6 ?. E
  add dx,5h
! @4 W- Z5 B6 e  in al,dx  : g0 Y' {9 d9 L2 F! z
  call binhex 1 x# I7 l# M0 s
  .break
, Z' o) Q" g. M' l6 s/ E/ @ .endif
- w& D! B8 l8 M  O  
/ z7 T& L" {. X9 L: N/ H" V  .until (0)
+ x# W6 r2 F9 ^0 c, u( n' m& }8 p  $ s  R/ s/ `* `
% T& o; T* l& m( P

; P5 G4 d8 o: r4 S! ? mov dl,20h ;output a space
  \( l& A! n0 F" u& n mov ah,27 e! L+ a% r* |8 A. }# Q2 m
pusha0 u; C- B  \- I7 m- ~: v
int 21h
8 p& [5 Z8 w5 R1 Y popa
% w. V& \( f* |* h) I& G inc num2 @3 p9 W( i  E8 Y& L6 w; t

% t4 F& a1 P0 x! R5 L' {4 M3 O2 H cmp num,80h ;get first spd 128 bytes
/ M8 ]; Y, c* ]% {" v$ o jnz Again
) q9 H, c! G& m2 k8 i
" C& l& @7 p& v6 _@@:
8 h* m- D5 o- v' l8 T/ ]5 S: N popa
$ |, L! ?$ ~2 ~3 x+ o4 m ret
0 v" k7 a: Z1 O5 [ReadSpd endp
1 ?0 l0 U, {; B4 h  ~6 o
+ e1 o" ^- U+ w: U# b, s
( W7 j5 r* S3 q6 h& ^& U) I' h
0 y( {6 Z. t4 z; Y2 @0 l% o4 Abinhex proc
( U$ p) B3 h. b; I pusha
) ^% u% n4 ~3 f# V5 U
7 l8 ]8 j8 X2 {" ~ mov ch,2 ;2 hexadecimal digits to be printed0 a; [& u5 r4 n8 C5 N: [# @
loop3:
1 k, T4 H( w" z4 u4 v9 E mov cl,4 ;bits to be shifted/ Z+ r" `0 W; q* W3 z
rol al,cl
2 ?3 z4 N% d7 ?' F/ p! x mov bl,al2 K  k% ~, C2 W: m* Y. K
and bl,0fh ;mask the 4-bit Msb6 l4 P- q* V3 W0 @
add bl,30h
7 {9 \! I: ^; o# y! @8 z/ m0 G cmp bl,3ah
0 C1 Z, x. X+ D jl next1  ;number or alpha?) H, h; d, [4 M: _3 W
add bl,7 - u, f. g1 v; }. s- t
next1:
5 X# H9 r' E* w; A7 m3 f" z mov ah,2  ;print one hexadecimal digit! q! `( ?& ]2 z) e4 R: Y
mov dl,bl
9 u+ B* R7 ?3 n8 ^! B8 r' Z* t6 s+ s pusha
/ U# Q& y/ c& S) S) H6 a' x' x int 21h! H" |0 M6 ^- |' h. m- S. ^
popa+ Y4 [& m# Q' d# x& f/ R* d
dec ch1 ^( c& v4 m3 k: V! A$ M
jnz loop3* f1 F+ v6 d# S8 O% X. }8 V
popa- \! N& r- X" t& _; E
ret. e1 N  s: e8 o5 n$ C9 U
binhex endp+ s& S& s2 ?- e' F& o
   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-8-11 17:52 , Processed in 0.111306 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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