chakokuのブログ(rev4)

日々のごった煮ブログです

DN-G200(Century MA-300)BIOSを読むの続き

なぜBIOSの起動メッセージがシリアルに出されないのかを調べていたのだけど、232ポートに接続されているのはCOM0の方で、BIOSで使用しているのはCOM1であった。だから表示されなかったのだ。COM1はどこかに繋がっているのかもしれないが、回路図が無いので分からない。なんとかしてBIOS内でどのように走っているのか(実行パスを)知りたい、また、できれば隠蔽されている機能を使ってみたい。。そこで、、以下の手法を取った。

  1. BIOSDRAM空間にコピー
  2. BIOS内のputc()相当のルーチンに手パッチを当てて、COM0を指定するように変更
  3. その他、絶対ジャンプでFFFEXXXXに戻ろうとするのをこれまた手パッチを当ててコピー先で閉じるように修正
  4. 最後にコピー先にジャンプ

このような細工をした結果、シリアルでBIOS起動メッセージを取得することができた。以下がそのメッセージ


***
*** IBM405GP Monitor (Ver. 1.8, REV-01 H/W) ***
*** Century Version (MA-300) (Oct. 30, 2001) ***
***
*** FLASH BASE is 0xff800000
*** FLASH SIZE is 4MBytes
*** MON SIZE is 128KBytes
*** FLASH TYPE is Top
*** SDRAM SIZE is 64MBytes
*** Abort Sw is OFF
***

[main] Going to Application
[main] Entry EEPROM contents

0x00 0x80 0x6d 0x51 0x0a 0x97 0x32 0x30
0x30 0x31 0x31 0x31 0x30 0x39 0x31 0x33
0x35 0x36 0x30 0x37 0x39 0x35 0x30 0x32
0x41 0x43 0x65 0x6e 0x74 0x75 0x72 0x79
0x02 0x01 0x00 0x00 0x00 0x33 0x00 0x00
0x00 0x00 0x00 0x00 0x3d 0x01 0x00 0x00
0x3e 0x09 0x00 0x00 0x00 0x00 0x00 0x20
[main] Application RAMSize 64 MB FlashSize 4 MB Base 0xff800000 MonitorSize 128 KB

[main] Application FlashType top AbortSwitch OFF RootFileSystem Hard disk
Initializing data
Initializing data finished
Device 1 not present
Device 2 not present
Device 3 not present
Device 4 not present
Device 5 not present
Device 6 not present
Device 7 is present
*********************
Vendor ID = 0x10ec
Device ID = 0x8139
Class code = 0x0200
Header Type = 0x00
14336 Read Base Addr Reg 0 = 0xffffff01
14336 Read Base Addr Reg 1 = 0xffffff00
PCI Memory space = 0x1000 bytes, base 0x80000000
Device 8 is present
*********************
Vendor ID = 0x1180
Device ID = 0x0475
Class code = 0x0607
Header Type = 0x02
16384 Read Base Addr Reg 0 = 0xfffff000
PCI Memory space = 0x1000 bytes, base 0x80001000
16384 Read Base Addr Reg 1 = 0x020000dc
PCI Memory space = 0x1000 bytes, base 0x80002000
16384 Read Base Addr Reg 2 = 0xf8ffffff
16384 Read Base Addr Reg 3 = 0xfffff000
PCI Memory space = 0x1000 bytes, base 0x80003000
16384 Read Base Addr Reg 4 = 0xfffff000
PCI Memory space = 0x1000 bytes, base 0x80004000
16384 Read Base Addr Reg 5 = 0xfffff000
PCI Memory space = 0x1000 bytes, base 0x80005000
Device 9 not present
Device 10 not present
Device 11 not present
Device 12 not present
Device 13 not present
Device 14 not present
Device 15 not present
Application MAC 0 80 6d 51 XX XX

[Ethernet_Tests] Reset HUB chip Entry Point 450000
Copying 3342336 bytes flash to RAM
Copying finished
Jumping to 450000

こうやって見てみるとSimulatorでも結構いい線いってたのだけど、やっぱり少しずつ差異が発生している。周辺ハードがないため差異が発生するのは想定内として、、Simulator環境では、Apprication Recoverと出ていたのだけど、これが出るのはやはりおかしい様だ。BIOSとして異常を検知してリカバリーモードに入ったのではないかと思われる。このせいで、Simulator環境ではコピーサイズも0になってしまったのではなかろうか。