Upgrade to Pro — share decks privately, control downloads, hide ads and more …

KOF2016 NetBSD dreamcast IDE HDD

Izumi Tsutsui
November 12, 2016

KOF2016 NetBSD dreamcast IDE HDD

KOF2016のNetBSDセミナーで発表した『NetBSD/dreamcast IDE HDD接続 ふたたび』のスライドです。OSC2016東京秋のバージョンからちょっと更新しています

Izumi Tsutsui

November 12, 2016
Tweet

More Decks by Izumi Tsutsui

Other Decks in Programming

Transcript

  1. 拡張バス割り込み探索  ハックしよう! • 適当な割り込みハンドラを書く • ハンドラに printf を入れる •

    機能が不明なピンにプルアップ抵抗を 順に当てていく • 触った瞬間にカーネルが反応したら そのピンが割り込み端子? ⇒13番ピンがそれっぽい?
  2. 2002年 7月  割り込み駆動で動作 NetBSD 1.6B (DIGNITY) #30: Sat Jul

    13 19:43:13 JST 2002 tsutsui@mirage:/home/spool/src/sys/arch/dreamcast/compile/DIGNITY SEGA Dreamcast : dppbus0 at shb0 ne0 at dppbus0 port 0x0a00 irq 0x0008 ne0: NE2000 (RTL8019) Ethernet ne0: Ethernet address 00:00:f4:69:34:49 ne0: 10base2, 10baseT, 10baseT-FDX, auto, default [0x00 0x10] auto wdc0 at dppbus0 port 0x1000 irq 0x0010 wd0 at wdc0 channel 0 drive 0: <QUANTUM FIREBALL1280A> wd0: drive supports 8-sector PIO transfers, LBA addressing wd0: 1222 MB, 2484 cyl, 16 head, 63 sec, 512 bytes/sect x 2503872 sectors wd0: drive supports PIO mode 4, DMA mode 2 : # dd if=/dev/rwd0a of=/dev/null bs=64k 1031+1 records in 1031+1 records out 67576320 bytes transferred in 61.470 secs (1099338 bytes/sec)
  3.  衝撃の事実 • ドリキャスの GD-ROMは 実は IDE/ATAPI • IDE が接続可能なランドが基板上にある

    • GD-ROM が master で、配線だけすれば slave 設定の HDD が直接つながる!? ATA on Dreamcast http://www.dc-swat.ru/blog/hardware/874.html
  4.  どこがおかしいのかわからない • ドライバが悪いのかハード工作が悪いのか • 最初テストに使った SATA-IDE 変換が Slave 設定ではちゃんと動かないという罠

    • NetBSDのドライバはコピペだけでも動く ⇒設計をサボって実装漏れとかやらかす • デバドラでやらかすとデバッガが使えない ⇒いきなりリブートしたりする ハマりポイント
  5.  GD-ROMドライバ • HDD用に MI ATA ドライバを使ったので GD-ROM も MI

    ATAPI ドライバを使って 書き直す必要がある • が、GD-ROMは微妙に ATAPI 準拠してない    ……本題ではないせいで気合い入らず保留中 今後の課題
  6.  ATAPI とは • IDE はもともとハードディスク用の規格 ⇒セクタ単位の READ, WRITE 転送のみ

    • CD-ROM だと他にもいろんな操作が必要 ⇒音楽演奏 とか Eject とか (☝ ՞ ਊ )☝ ՞ ウイーン ➢ HDD用の転送のしくみはそのままに、 各種コマンドも送れるようにした仕様が ATAPI の規格 GD-ROM と ATAPI
  7. ATA と ATAPI IDEバス 物理ドライブ マスター HDD スレーブ CD-ROM ディスクドライバ

    CD-ROMドライバ ATA 層ドライバ: ATAデータ転送・割り込み処理 ATAPI層ドライバ: コマンドパケット処理 ATAコマンド・データ転送 データ転送要求 データ転送要求 各種アクセス
  8. ATA関連ドライバ dmesg wdc0 at isa0 port 0x1f0 irq 14 atabus0

    at wdc0 wd0 at atabus0 drive 0: <HDD NAME> atapibus0 at atabus0: 2 targets cd0 at atapibus0 drive 1: <CD-ROM NAME>
  9. データ転送時のバス状態 ドライブ 選択 ATA HDD アクセス ATA コマンド データ転送 1,2…

    ドライブ 選択 ATAPI アクセス ATA コマンド データ転送 データ 転送 コマンド パケット HDDにはコマンドパケットも データ転送に見える
  10. データ転送 データ 転送 コマンド パケット GD-ROM の困った点 ドライブ 選択 ATA

    コマンド  ATAPI黎明期の混乱? • リセット動作が ATA標準と違う? • AUXレジスタの RST を叩いてもダメ? • ATAPI_SOFT_RESETコマンドが必要? • コマンドパケット転送で割り込みが入らず データ転送完了時のみ割り込みが入る ➔MI ATA/ATAPI ドライバの修正から必要