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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下:
( x+ O  U: P, W5 {! M
* c& V+ v, R* _, e8 N  .model small
3 C2 p4 k/ _  R& p' |; l  .386
4 T1 E* Z( [7 B" h8 a2 m  CFG_ADDR EQU 0CF8h
5 n* e1 {+ ~  J" B6 M  CFG_DATA EQU 0CFCh0 o- O& C! c( e1 z
  SMBUS_BUS EQU 06 o; t. r3 `6 ^* A
  SMBUS_DEVICE EQU 31% {3 u1 h  c6 M6 q( w  O+ |& ~$ x
  SMBUS_FUNC EQU 3! d# S4 n" y- B$ d
  
+ ?4 m8 ~& A  V4 }  .stack 100h
: a7 U# U% l! w; G: y! U# C3 Q  .data
7 A% G; w* G6 q+ @8 lbase dw ?  ;smbus I/O space
; v* Q: b0 \( I1 |. x) W' Inum  db 0  ;byte select) p2 y: _5 C% \$ G/ w
SmbStatus db ?
. r) m& I* P% W% K& q- K: [
$ M, ^, M& a, B  V  .code5 k& H) t% E% [% p) D

. e2 [( v5 l) W" u/ u4 r1 \; I+ V0 gLF_CR MACRO
* V1 \( c' n& x7 v% d  pusha
4 c# g0 E# D' b: U: ]6 O2 o  mov     dl,0dh      8 }7 B& @  I& {0 C3 [! J. O
mov     ah,2$ j  z0 ~; p) i0 P7 r% d
  int     21h5 G2 ~6 d% \7 U9 W( c+ |3 u8 c
  mov     dl,0ah   ;next line   . a" b/ N, u( x" e
  mov     ah,2( z  f& x9 _; K: T/ _( l% H1 p
  int     21h' J2 ?6 O# }+ j+ w# p
  popa  
. X( y% j8 l" v1 Z. a" A2 d     ENDM
& A+ I5 ~) r! x% T: [8 f0 y4 u8 W3 y, |8 L( L" J
  U2 z+ H+ L' q" R. V; u" j# F: e' b
main proc far  U7 [6 K& z  g/ I8 A3 r7 y
mov ax,@data+ m! j; C( `- Y7 [
mov ds,ax  p$ N2 s4 V) H

$ e, j' q( N" x" G* x  Q. J mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h
+ y0 A, o5 F1 S; P mov dx,CFG_ADDR  F( B. _9 C/ o, ]  _# v. g
out dx,eax$ a. w# `# w, f& J# ]. X& T/ k
mov dx,CFG_DATA
/ L" N% {& C0 l0 Y# P3 V( b in eax,dx5 _+ T  ~3 D* t* _: Y* ~
  + J- F1 t  I' G) q" `
shr ax,5     ;bit 15-5,the base address
3 x! A' Y1 J. r; D4 S$ ` and ax,0000011111111111b
& M& |: ?1 |& D$ I' X( _2 \ mov base,ax
& y" W+ j" p9 A+ C. C  # w: O6 _' B. l# N7 M8 e
call ReadSpd/ k; Y  U: d$ ]
exit:4 M8 }1 p9 Q* e7 Z) k
mov ax,4c00h& U  S1 E9 O: J' ]+ a3 w4 P
int 21h7 t$ V% d2 [+ a! K9 u/ D
main endp
4 E6 }9 {8 G" a" v; y; q* T$ Y7 C; Q- @

* {* r, w0 e# Z: A! l6 u" I# u$ p; Z/ ~
ReadSpd proc  a* G; ^7 `7 M- {! [! q- x
pusha
/ C; i2 R' I$ c8 }Again:$ W. W8 \1 `  Q- J' v! i. B" e
mov ah,num# t/ Q& E' `1 c9 W0 ?3 n9 T1 D
  and ah,00001111b
+ ?; w7 j9 j# f4 W! g .if(ah==15d) ;CR_LF
. h1 ?! h$ q; R  LF_CR
) i2 H( ], Q; v6 Y1 K7 O' `" X .endif2 Z8 S" L0 O; {; G% a0 m5 z7 c* m

, F7 I3 m) g6 g .repeat
2 v8 b1 x3 }( c  mov dx,base   ;reset host,claim host in use
# B- h: j& X$ O  add dx,0
: O! D! `' T. j, b: o8 C, K& L  mov al,40h2 g. o* b5 [9 E4 B9 v
  out dx,al" Y% \- n1 J4 q7 b1 J
  9 }; Z% D7 ?$ g6 e
  mov dx,base   ! P4 @/ j) G/ a) K! v0 O) i
  in al,dx, o! u+ F( R$ J1 e
  mov SmbStatus,al, ~1 N: A  \/ J8 p* K! D4 k
  
/ ?; y  z+ G. z$ z  mov dx,base   ;clear all status bits
. D4 _  a1 N. x0 u+ B  mov al,1Eh   ;host status register/ Q3 R1 k+ g3 _) z) ]
  out dx,al; n0 k; o- L, s1 A
  
. `2 |" q" Y. T' C5 c4 w' p, H  mov dx,base   ;set offset to read ' @" Y! P* G: j
  add dx,3    ;host command register1 ?+ [- M4 [' |% a  @
  mov al,num, f( u2 Z. K5 \) U  w# C/ K
  out dx,al
6 D$ B4 y5 N6 d: q( d8 u* b    n; `! y$ q3 ]; x& v
  mov dx,base   ;Transimit Slave Address register$ s, P; F! b+ P) o- I
  add dx,4
/ p7 D7 ]8 T/ J1 q  A0 k  mov al,0a1h; G3 V3 V; h4 {: M5 x8 f
  out dx,al" `5 n& F  q8 d
  
! U5 [0 V$ Q7 h  mov dx,base   ;set "Read Word" protocol and start bit
  m& O/ C6 Y3 o  B( `& p  add dx,2    ;Host Control register& |$ M! T  }  b# A5 ]
  mov al,48h  
0 F( M4 {  [- H( ?6 w- n4 `  out dx,al
4 p4 h# i8 i6 Z( V9 K" G7 Y( } % H5 r2 n1 e0 Z+ r( r, E& W
! F( A4 `. t1 W. e! N
  4 g5 P! B/ \' J6 U
  mov dx,base9 Y8 u8 b$ H3 X$ I& W
  in al,dx0 \* ?" I( s2 x) j5 [! M
  mov SmbStatus,al
" A! \$ e& a+ d$ t. E5 k  and al,1Eh
2 h) f) m% b2 y- g' U  f$ o; X  .while (al==0) ;check repeatly until any of) B4 T8 i0 P1 H' ~& b
    mov dx,base      ;FAIL,BERR,DERR,INTR! j9 D0 p: K6 ^- z$ K
    in al,dx- L1 H5 g* H6 E
    mov SmbStatus,al
8 C( {7 D8 L/ u    and al,1Eh
- i$ G( ?; @+ m" f  .ENDW6 j& s$ {0 u8 ]4 j% N& s3 x
  
# a3 W5 y) o$ \" f9 C% G  mov al,SmbStatus   - c& d9 G/ L0 C. {( W# V
  and al,1Ch
3 H1 T, l  |1 t# I- z  B" k  .if (al!=0)    ;check for errors  
7 G. N2 M& O, G6 u   mov al,SmbStatus
7 W, J0 l! W) F; K9 ^6 E# ?) h: ~   and al,08h   ) ?: e5 r( O1 n, ?0 s
   .continue .if (al!=0)  ' V: U$ L( t$ |5 Y$ ~9 m
   jmp @F  $ V) h* b9 B& e) K: `, ]; _
.else
+ ~  Z4 r9 ?& q7 V: q6 Q) s5 R: i  mov dx,base" m( |- S% A% _
  add dx,5h' ?4 ^) f! i5 N/ }0 s, f+ ~' C- \3 G
  in al,dx    }: m: O" J% @% [8 x7 J
  call binhex 8 ~" G" @' i0 n0 v& B0 ]8 Q0 Q
  .break$ T/ i# [1 O- J- {2 N& W: g" X
.endif
* a/ N* W2 m! c  ' o' N! u# o" [/ Y
  .until (0) % R" U; _5 g5 ]! M
  
$ L. F$ T6 U! [6 s- I  ?- R( C  _' |0 i ' a( J& N9 j0 N1 M0 v- T; t' T
# V' `  C  Y4 a  G, K2 H
mov dl,20h ;output a space. O$ ~' ]; I/ B) U; V
mov ah,28 v# n) ]8 Q' J/ K/ Z! p
pusha
3 }6 U; U7 y' j, O. P int 21h- V; ~8 u0 x  n; o7 f
popa
. `( ]+ P& v+ K( s inc num
% d. T2 m6 [. V) x1 a7 R8 Q" l5 A0 M; S' |& @! n( |
cmp num,80h ;get first spd 128 bytes ) @6 n- G; @5 d: t$ F+ `$ Y, F8 J
jnz Again+ ^6 P3 s' W* p, M2 C& L4 U" r1 M
6 s: N/ c$ B/ C/ J8 u
@@:1 s. s' G& g+ @5 o% Y( L
popa7 m$ w$ [) M" u3 b
ret
  r" S7 V% L) v( l* K1 E  R/ X2 Q2 }) ZReadSpd endp
7 C5 }- G+ j* z( O
* S4 S5 `3 M& ?$ f# f3 ^
3 I7 I4 q! C- A
" z$ k% V* ]% M3 C4 M8 e8 L% _% }binhex proc
" W' v7 A9 F# ?7 p0 P( }5 r pusha & n4 K! p3 y; j1 B
; q3 R" S" n2 c# S% Z" T
mov ch,2 ;2 hexadecimal digits to be printed& ~4 N% r& l. T0 e% K1 @
loop3:) ^/ Z; `2 K% s
mov cl,4 ;bits to be shifted( R1 t+ \& e. e" ^: U0 f
rol al,cl
) \7 }2 W7 k( Q# b3 s mov bl,al; P7 N& R  w5 n# J$ h# @: Z
and bl,0fh ;mask the 4-bit Msb8 K+ }* x& _# l* s, s
add bl,30h
3 T, n' Q1 V2 {* D3 Y cmp bl,3ah
6 v$ B# `6 y& A& @6 R jl next1  ;number or alpha?! ]$ y6 Z0 N; ?' Y3 P2 z
add bl,7
8 }) g8 G) m2 m- V! Z' Jnext1:
# V6 L/ S. B7 K7 ?. }7 X- C mov ah,2  ;print one hexadecimal digit
" {: b; _5 N: P8 @ mov dl,bl
/ B1 E' A& |' {) {* C. Y pusha
+ T) ]$ L2 G# k( [ int 21h5 N" f. L/ E2 F2 K
popa
6 y& ~8 {. C( L6 j; p2 a% r2 h dec ch' M# J; R# |3 Z
jnz loop3' Y( z, ^4 W. F7 _
popa
3 D4 T! O; f% s1 Y ret
6 p( N) e7 o$ l/ qbinhex endp
5 O- _" }& S& G* P/ L$ i   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, 2024-5-20 17:19 , Processed in 0.062019 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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