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

KOF2016 NetBSD dreamcast IDE HDD

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Izumi Tsutsui Izumi Tsutsui
November 12, 2016

KOF2016 NetBSD dreamcast IDE HDD

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

Avatar for Izumi Tsutsui

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 ドライバの修正から必要