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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下: , K1 D7 i7 e: M3 v- u" w* J( ]
! H- ]' B9 [: S6 f  j2 D1 }
  .model small
1 l) e, u! y( @7 C% |- ^  .386
; }0 H# W/ ]4 A$ q  CFG_ADDR EQU 0CF8h( D) o% R, p. G* |( j' h( y
  CFG_DATA EQU 0CFCh
' g! q5 ?7 ?! v6 z$ ]" d  SMBUS_BUS EQU 0  b* T. D% m5 j. `
  SMBUS_DEVICE EQU 31) O% K# F/ L  W$ w
  SMBUS_FUNC EQU 3
, ^9 [4 c3 p! _+ w2 ^; V) b7 ~6 F" t  9 x; ?- x3 _8 C! z# h
  .stack 100h
$ A4 u( c; n' {! n' {6 r1 Y  .data
+ r2 ?1 L; k. d/ Kbase dw ?  ;smbus I/O space
- H7 |- C; a! E# Y3 |/ G: G. knum  db 0  ;byte select, N4 P! z1 {& F) m+ |
SmbStatus db ?& n) \: \& j' W0 {, ?% r3 Q0 `
; V( X( |. o: J) @5 b8 z) z
  .code
; D5 Y7 Q! F+ {# i6 t 0 a: n1 L+ I( V+ w
LF_CR MACRO2 k' C( M; H$ D/ H. n
  pusha0 \4 o  B4 W% T
  mov     dl,0dh      
1 i0 M8 b9 N  ^9 a% n6 Q mov     ah,2
: J6 e% z: p+ Z6 D7 g  int     21h" W4 Y. W7 [6 g( X+ F1 E
  mov     dl,0ah   ;next line     M$ I0 c6 }/ @9 p
  mov     ah,23 S- K; r7 ]* [" p5 h1 B
  int     21h0 T4 i% t) d8 z& U3 A
  popa  
$ `+ |9 n2 z/ M. ~2 j/ o. D     ENDM
5 P2 I4 j' V% L* @+ `. v* |/ o
% i7 X: ^/ U* y! \1 G  S- m8 J" c0 R* @3 B! ?- U
main proc far
$ c+ ^% R3 i! ^; | mov ax,@data+ o' y# h" Z" _1 n1 k
mov ds,ax( B! _4 P( g1 R
) S. |. k; V1 q1 L# S+ F! P1 t. |! q
mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h+ q( f% X% l: f+ m/ `
mov dx,CFG_ADDR
9 N. t2 V) I7 f2 b8 Z+ B out dx,eax; @* q: \8 l$ ~) v+ w6 E
mov dx,CFG_DATA
! A( E1 \4 L5 |! F5 t+ r! Q) d in eax,dx0 E; g0 c% ~% R( Q; `
  
  c- A9 R6 d3 X; k shr ax,5     ;bit 15-5,the base address
& e, [6 j, q% C) k& l and ax,0000011111111111b
( U' F. G" q1 g* r$ k mov base,ax
! x. m# U, q8 u! J5 V6 R- t  - {' z, B* s+ |6 f1 S
call ReadSpd
  A5 E& i. z+ P( }! Y' Gexit:
$ Q1 K( U/ ^! ?' \! q( G mov ax,4c00h
( r) S/ i2 u' ?, F0 {3 B, `" n int 21h
5 u$ p# r% R: E( f4 j1 ^main endp
" C/ k" `# W) V5 V
6 d. h" }+ r( U& F
+ k7 q& d6 X; Y7 z$ ?
( Q3 }9 u! P9 K, p5 FReadSpd proc9 p) h$ f! ?/ C8 N3 u
pusha2 x' T- X' t# [. b" h4 Q7 `% X' X
Again:0 M" g1 P2 Y, T- A! Q, `0 P
mov ah,num1 V. N/ ?+ B4 Q) `) [4 c/ U
  and ah,00001111b
2 c2 [3 h$ P2 q' y. q .if(ah==15d) ;CR_LF
% G; Z' v6 X, ~+ I  LF_CR. c1 N  \' s' J6 h; v! n
.endif- e: \' G" w' _% ?
5 ^+ M9 r: y) O) n5 n! M' J: _
.repeat
" E0 S  {. B, E- Z& |  mov dx,base   ;reset host,claim host in use
, Z$ t8 ]0 O5 ^2 ^, R2 F5 ~  J  add dx,0) n- _9 J# X' r  _& u1 F0 l. c
  mov al,40h
$ ]! x5 j% W+ W$ G  out dx,al% p* \3 [  `6 }  F+ O
  
3 B5 p* W! o5 M- X4 X, A- e  mov dx,base   3 i) O+ {8 U% J+ O% H
  in al,dx
6 j$ Q) w. q4 h1 v  mov SmbStatus,al$ U+ d; ~0 d3 f  U! A* r
  6 z  u6 x9 K: ]4 W$ U
  mov dx,base   ;clear all status bits
( N( a+ m9 _% S! |3 ]5 e9 {  mov al,1Eh   ;host status register
9 Q/ p! Q/ ?1 _  out dx,al. \2 H6 T) f. J+ ^' ^. k
  # I+ S. ~# Y& B5 {  }7 w
  mov dx,base   ;set offset to read $ [& {8 Y- V: R$ L
  add dx,3    ;host command register1 _2 N: E; E. ?, h3 a4 R: w
  mov al,num
: l( g# L1 f6 Z3 l  out dx,al9 N+ p* `0 \- ?" ^
  
9 O9 k0 |7 R, Q$ X3 C5 E  mov dx,base   ;Transimit Slave Address register* [$ A0 P- @; J8 L
  add dx,4
( ]$ R. K; M4 r" A  ]. K% c  mov al,0a1h8 F# ]9 \5 n, d- j+ K
  out dx,al8 U( ~' n/ p1 _2 y
  8 L) p5 Z- V( [2 F) z& \# v
  mov dx,base   ;set "Read Word" protocol and start bit9 W8 S( A' P+ d6 f
  add dx,2    ;Host Control register! b4 i4 \! e* Q
  mov al,48h  
6 C! I* m# R+ M  out dx,al
) M$ U/ D& |- t3 v9 x  W, u
" k, T' h, W+ Q" L: p- Z, a+ @# n4 Z+ C8 b6 K: E  Z' R& {) o" l  g$ a
  
" r* ]8 Q4 x/ }# E- }. |2 z( d! ?  mov dx,base, y% A  r4 K0 Y* C" V
  in al,dx
8 |: ~7 L9 L! E# S  mov SmbStatus,al
% [  ~/ O, S1 x+ ]6 b  and al,1Eh
9 m" ?! G0 V9 Z/ N& C- n9 g  .while (al==0) ;check repeatly until any of
( E# c! N7 ?, [    mov dx,base      ;FAIL,BERR,DERR,INTR
' x) C6 |5 o0 \3 ?" S! b    in al,dx, w# f( Y7 D3 ^( o0 r9 G
    mov SmbStatus,al& v8 B7 x' |' |8 X0 g& E
    and al,1Eh % j/ l  k( B9 D& t# h) R
  .ENDW0 q' \3 [- L! J* U* u  V7 K
  
, E8 ~" [- e, G  mov al,SmbStatus   
" t) A! {- J; A5 F7 U: Y  and al,1Ch1 }1 z- x& F1 v# l- r1 F2 A
  .if (al!=0)    ;check for errors  , V5 c9 S4 K, G* V
   mov al,SmbStatus
/ K% [& z* `; |) @   and al,08h   , o- s/ W  {* x* A0 f# X- i
   .continue .if (al!=0)  
2 X, t0 P8 M0 d8 y   jmp @F  
$ N9 J% c) _* u% Q .else
# n3 T4 Q' r  u  o* u  mov dx,base
* e: t5 t. d" B8 S  add dx,5h- q! t7 P0 x2 l
  in al,dx  " a# y% `. Y7 N4 G/ Z
  call binhex 2 G- _; ~; F/ m" I) g
  .break2 E) ~/ `# Y8 a8 T- B
.endif
8 b) |/ O8 {2 V4 r# K. \  2 P8 V  z: c$ ~, D# w7 c2 j
  .until (0)
6 n; W2 D+ V: M  + N7 |- }# h$ W8 r4 l( S* t
5 V" L# G1 P" ^2 h9 ^  f6 R
8 G/ b3 U4 D' j- R, e9 g$ G
mov dl,20h ;output a space
1 B  t+ @! F' X$ S1 G2 D. h1 v mov ah,2
( {  ?' u& P* o' P  Z2 { pusha' }  J. n9 T; ^8 h
int 21h' a+ x3 k0 _7 e& A  b
popa
+ n% V% W' j' b* Y& U2 c inc num
- Z7 n6 U4 k3 R2 m( m5 R) [4 ?5 n4 p/ ~9 T8 t3 V; W
cmp num,80h ;get first spd 128 bytes 0 J" f5 j* n) b( y" S9 ~
jnz Again
) e( D$ Y9 i0 \( H ; Q6 ~) v7 J' j% E0 B, i' G
@@:
9 ]8 E, W, ]" z+ k# b) k popa+ g# n6 v/ W  L- \* c
ret
! M1 G9 b/ X: I: n& \ReadSpd endp
, w( Y2 a" u! F9 c/ y1 |, l
' Z3 e- L* p/ V7 r3 }, s( Q& N% e+ |' c' d! k. Y
% \. W8 y  w! U
binhex proc 5 e( M1 V5 u. B" u4 ?# H
pusha # U) T# z, S) N$ T" M; M: J

# r* C4 r$ p/ A9 I! a mov ch,2 ;2 hexadecimal digits to be printed
+ U; U7 q4 P* ~+ H! z0 d- Ploop3:
$ _: }$ o; L8 Q5 p6 b3 A mov cl,4 ;bits to be shifted
# z/ h8 A$ v  o rol al,cl; t3 c7 L# G0 @1 R3 Q$ s, \8 |
mov bl,al! ?+ E9 g. b* X. p6 V/ w9 R3 B
and bl,0fh ;mask the 4-bit Msb3 l* K$ R& \/ d4 m# I# M5 A6 F
add bl,30h2 l8 \/ M" M9 ^: H& @
cmp bl,3ah  _" ^$ o# K; R' [% n8 W6 y' U6 K2 A
jl next1  ;number or alpha?
% x2 C4 g& o, V9 y( ] add bl,7 ; g' R% Q) K' J
next1:
. I0 d$ M. N$ [7 j) X7 h: n mov ah,2  ;print one hexadecimal digit
* S+ a  s0 G" E( W  D mov dl,bl
0 S5 Q! d' Z. x: M pusha6 F6 C+ M' E4 t; b& D
int 21h+ M/ w  q' o, K$ J+ c7 ?2 y. p
popa7 k( K" O8 }: o# E  w/ U9 v
dec ch. d/ c" e0 v+ C: t7 q% |+ W  I
jnz loop3( e' _  H" D  O
popa
# A9 ]9 O$ o5 p6 B# U6 s ret
( {, X  C6 U5 Y: D; W* a7 |6 z% Wbinhex endp
3 g' M5 M$ Y, k+ H   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-6-15 17:14 , Processed in 0.527608 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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