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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下: * Q8 j# P- d8 {7 i$ g  |( M

" r8 [1 h, C" l  .model small
+ \: N% {. p+ A9 u  .386) Z& Q" V) r$ ~, s: U
  CFG_ADDR EQU 0CF8h% V( i0 u, Y9 [
  CFG_DATA EQU 0CFCh' Z# h9 G1 {9 A# S
  SMBUS_BUS EQU 08 z0 {' F% T& t  ]
  SMBUS_DEVICE EQU 319 B# ~$ r* [; f: N" W
  SMBUS_FUNC EQU 3, o" D! b3 o& v9 w, e
  
) }( F6 O) O% m  |- R  .stack 100h
" M" D/ s8 G0 @, c: Y  .data
. @; `# r6 P0 t6 N4 |$ [9 x/ x  jbase dw ?  ;smbus I/O space/ A% U" b/ O4 g9 K
num  db 0  ;byte select" q" J. I; b( L5 z7 K  R- c
SmbStatus db ?% J; b) E; @' u$ b# R

$ f+ B* M, Z) i0 y# _' O3 C! P% x  .code
4 ?7 c: Q2 W5 {7 v& V
3 F; W3 @- F) A+ V9 _0 F7 J: }! V/ KLF_CR MACRO2 p4 X/ ?+ B  D5 O
  pusha
3 X" o6 f: ^2 i+ R' y  mov     dl,0dh      3 v  M9 o' j& W4 O$ M6 y. Q, J
mov     ah,2
% x7 ~! t+ {: y# n9 U( r7 {  int     21h7 I7 {+ _# Q$ ~" C7 |
  mov     dl,0ah   ;next line   
. U5 V  E( ^+ c- Z  mov     ah,2
; b8 \+ Z5 u9 O+ B/ Y- B3 k  int     21h
+ }" C6 d. ]8 z. I* P( O  popa  $ `# w$ M, z3 V
     ENDM
& z* {+ O' [% ?# o5 h8 w( [1 t' M) G% e! q$ D
+ a6 T4 n1 z& d
main proc far% g4 r0 T* H( d+ Y
mov ax,@data
& h9 s$ P/ D5 C# V! e' Y mov ds,ax, V+ {& E! D# @* [' f: p
/ Y+ x# `' Q' ], f
mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h! {, F5 o& {  H" h3 P# h
mov dx,CFG_ADDR
# h8 [5 }2 G* J4 `4 T7 b out dx,eax
! F2 G8 C! l. X. Y mov dx,CFG_DATA
9 M- E- b( {& F in eax,dx
7 ^& l, K/ `% h9 \) g( J3 {  ) w4 a0 T5 P+ |& Q
shr ax,5     ;bit 15-5,the base address- F: S$ N1 X+ U0 ~2 Z
and ax,0000011111111111b
3 w4 F3 [0 f; S! {( O( u# v mov base,ax
5 [3 v" Z$ i1 o8 u  
! `* y, l9 E8 a: v2 Y call ReadSpd: N, D2 W2 m3 l5 ~$ F2 S
exit:
+ b9 I) u3 o+ b9 e5 h mov ax,4c00h6 P6 Y. t( v# c0 w& S
int 21h( q* V  n" C- u7 w: g) b9 O
main endp
0 k* x0 I. N+ ]1 h% @3 c% e
, u  F( R/ H% K! ~. A  r( |  ]5 a5 A# X" @# U4 Y  w# l# K) m) y
; d8 U/ N* g6 A: t' J" d
ReadSpd proc
, E5 U' [! l9 H! D- ?, P pusha, z" u5 i2 g# U
Again:  P) u; V0 ^6 f5 W/ G' v( {7 K
mov ah,num
5 I- U% J- q+ G3 r1 C6 X9 `  and ah,00001111b
1 b- w! l7 u! z( P2 _" z1 A .if(ah==15d) ;CR_LF8 j$ Q& v+ H+ Z' q! l
  LF_CR' y' {+ [, V4 ?6 ]5 t
.endif: Q7 e/ _) k' E: k6 Z" z, M4 J
& b4 J* f; y5 B9 Y8 j/ {9 t
.repeat$ b* P% y) e& R( N
  mov dx,base   ;reset host,claim host in use
% C* H/ h9 c1 ~0 @  x5 Y1 v  add dx,0
/ ?; ]# I+ b/ g2 v6 |/ Q  mov al,40h4 T" y8 L9 b3 x* d: ~' _
  out dx,al
5 o* x3 F/ W$ v; |, K  - r# C& j; T5 p& J# p
  mov dx,base   ; x7 m% S! @  b" y7 z
  in al,dx- C/ g$ T, R# {2 T! d2 F
  mov SmbStatus,al
9 h5 b/ L( U/ A  
9 z2 N5 B0 Z" }( a8 V  mov dx,base   ;clear all status bits
+ S' b3 b7 K# r" H  mov al,1Eh   ;host status register4 E; `) U7 m( q6 L$ Q
  out dx,al3 T+ K2 `) |$ m" [9 Z' Z8 U' z' g
  * V8 |0 d1 }( w' W: s' C
  mov dx,base   ;set offset to read
8 Q0 s% @- u8 ]! H9 g$ a6 o# {+ o+ }  add dx,3    ;host command register& ]5 o3 j: l8 C/ y
  mov al,num) }- _& o+ N1 Z6 C" f9 v
  out dx,al. H% k# A. k* \# N# H4 q
  
( n- T- n: e* z8 j  mov dx,base   ;Transimit Slave Address register6 ^# A$ U: w) _# G; z
  add dx,4% I, U/ l0 j8 Y' z, |
  mov al,0a1h/ S. R% N1 |9 O
  out dx,al
3 K2 ^% x1 J  C: o! @  / e9 m0 R& I! p
  mov dx,base   ;set "Read Word" protocol and start bit
) V4 r* g# z1 _5 X* h- n  add dx,2    ;Host Control register
' ]0 z' C6 p7 _( }9 R7 a+ ]# D  mov al,48h  . H) j9 `6 k5 |  A# c
  out dx,al$ D/ e- M" h) @, Y5 H
* E6 t7 i4 i" k+ O2 a; d
  v2 F( ^! ?8 e: U% l% \" r3 E1 [  ]
  
# V/ C- N  e3 r( Y  mov dx,base
5 Y7 E- n0 `+ N+ A6 ]  in al,dx
6 @  B: T6 P: Q% D  mov SmbStatus,al
& h% [0 `. L" d5 Z8 a' o- n$ [  and al,1Eh4 j4 Q9 N5 B, L
  .while (al==0) ;check repeatly until any of
0 ]. m3 G( E% E2 J# T' k  ~; K    mov dx,base      ;FAIL,BERR,DERR,INTR
3 [; [; a! u7 `& g1 X    in al,dx
  g3 v- u0 Z$ p7 z    mov SmbStatus,al
2 C4 x1 w6 [" |* U3 y5 i    and al,1Eh
% O! }% n( U$ f0 R  U' Z0 R) y! l6 ~  .ENDW
; J- z5 C$ U, S  
1 A1 j1 G; \2 n2 Y& Q. m  mov al,SmbStatus   
5 W- }, S. x0 S+ L  ]$ X4 M+ l4 h  and al,1Ch$ @: E: K) p/ ~+ ]7 G6 w
  .if (al!=0)    ;check for errors  
' f/ g! @: j5 }3 c9 H- A5 p   mov al,SmbStatus# d! g: w9 k1 K1 v0 Y6 ~9 ]9 o: \
   and al,08h   & O# r- Y$ F; c% a  f8 h
   .continue .if (al!=0)  
' k" j0 Q- }/ }  v   jmp @F  
8 ~' ?* J/ \, ?" ^; x) s .else; c' U2 T, l0 V$ K; q
  mov dx,base
# r' N  v0 u3 R, _4 P1 i% P3 O  add dx,5h3 g, {! B2 _1 W  V6 |  W6 y: V
  in al,dx  
! F: D! ~+ }4 n4 p, o4 c$ Q  call binhex
& F5 H* a5 ?1 X3 k' g/ D  .break
7 k& ~3 ?# h1 Y' v .endif
2 u+ o# D+ [& _( S0 L: m" j  8 _$ B4 e2 P) \, ^9 h0 C
  .until (0) 7 \; C/ Z" U5 R/ t! ~, s1 B. @
  
, o7 a5 X# y- }; g  F0 x$ o. D! A3 M4 i0 r $ ~2 L! n& j; J" D$ x2 P

6 }+ o+ G( C. X5 \9 ^# ?, H7 q mov dl,20h ;output a space: V' H6 `& j) S$ m3 v
mov ah,2+ N  m  @2 H" x' Y8 ?" H
pusha
  t/ S% o: K6 _( g6 k) [$ [ int 21h
" Z- f2 Q2 x/ N* h7 V6 ~ popa
' q5 i  N% U  ^1 Y8 ^& @& j inc num
0 C+ I) ]1 C- g. H$ c6 o1 n
9 g+ Y% C3 j# _/ ~' Y cmp num,80h ;get first spd 128 bytes
- `; _$ E3 ?( S: f5 d+ _ jnz Again! Y; O8 I/ {% [0 d: F% Q3 Z
2 P* `# @: p' t2 @# B( p5 z$ g
@@:
# S2 B: `  g0 U& b* _1 M* \ popa1 u4 u# u1 T  c3 d# A  N. A
ret
% |4 r% ~, J, R6 D4 ?8 P# |ReadSpd endp
: K2 S. C! B$ W+ q) E1 P9 _; B7 q* P/ f8 N9 [2 o4 p" m  G. Z
6 ~5 F- i' L6 y0 P( s
$ t5 z; X* i" F4 ^! H7 M
binhex proc
( U; y1 P. d( _2 F: ~ pusha ; v0 T; \' H2 j; F9 ^5 K# D

2 d9 u) |+ T" C8 L& D5 p# f mov ch,2 ;2 hexadecimal digits to be printed8 s/ ^0 ]- u/ F6 Z
loop3:, L$ h( n, W4 x( [  L; t( J1 k
mov cl,4 ;bits to be shifted
$ E4 @& w3 `$ \; ] rol al,cl
0 z; |& Y1 p2 ]) I) H( Z6 { mov bl,al- F% s9 w# a; O8 w# P# R
and bl,0fh ;mask the 4-bit Msb
" P/ O7 y+ A8 i3 P6 x add bl,30h. D+ o) T1 Y1 Y0 K1 q
cmp bl,3ah& v7 @& l8 |: R7 m% d3 w( |
jl next1  ;number or alpha?
0 A  W( _8 u/ d" ?4 C add bl,7 7 \2 ]$ [+ Q% `4 R  l3 b5 f( h
next1:
( e1 C3 x. b5 a+ J mov ah,2  ;print one hexadecimal digit" Y8 r2 q/ B9 k8 n
mov dl,bl
- l* _3 z5 t3 R0 @2 U  [" p pusha
+ J, g5 f* m, }! U" r int 21h
' |6 T2 v6 Q9 a% A2 r: D4 N popa
4 |$ S4 D( N8 c4 A5 [ dec ch
5 K0 G, H$ P' S3 d" m# | jnz loop3
! y/ p+ {# a6 n9 E+ f popa
8 [* M9 N* y& |0 x8 x: X ret6 ~/ V  B! b$ }+ M  e% }9 H1 n
binhex endp& A$ i9 V; `# P  B; {6 T$ N; I8 `0 S
   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-2-1 05:35 , Processed in 0.079782 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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