Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
KOF2016 NetBSD dreamcast IDE HDD
Search
Izumi Tsutsui
November 12, 2016
Programming
1
2.1k
KOF2016 NetBSD dreamcast IDE HDD
KOF2016のNetBSDセミナーで発表した『NetBSD/dreamcast IDE HDD接続 ふたたび』のスライドです。OSC2016東京秋のバージョンからちょっと更新しています
Izumi Tsutsui
November 12, 2016
Tweet
Share
More Decks by Izumi Tsutsui
See All by Izumi Tsutsui
PC-6001のPSG演奏デモを機会にNetBSDを真面目に説明してみる / OSC2024Ehime
tsutsui
0
56
PC-6001のPSG演奏デモをなるべくNetBSD環境を使って作った話 / KOF2024
tsutsui
1
53
OSC展示とLUNAとNetBSD / OSC2024Kyoto
tsutsui
1
81
digital VAX, NetBSD/vaxの歴史と VAXstation 3100/m30 展示 / OSC2024Osaka
tsutsui
0
470
SONY NEWS NetBSD移植作業とNWS-3260展示 / KOF2023
tsutsui
0
1.3k
37年前の Sun 3/60 のために最新のNetBSDと最新のX.orgをメンテする話 / KOF2022
tsutsui
1
480
お歳暮で Sun3 が送られてきたので NetBSD/sun3 を展示デモしました / OSC2020Osaka
tsutsui
5
2.8k
NetBSD/zaurus 8.1 を直したあと ブース展示デモ内容を作った話 / OSC2019Tokyo-Fall
tsutsui
0
700
NetBSD/zaurus 8.1 をテストしたら動かなかったので動くまで直した話 / KOF2019-NetBSD
tsutsui
1
1.1k
Other Decks in Programming
See All in Programming
Асинхронность неизбежна: как мы проектировали сервис уведомлений
lamodatech
0
710
Fibonacci Function Gallery - Part 1
philipschwarz
PRO
0
210
HTTP compression in PHP and Symfony apps
dunglas
2
1.7k
Scalaから始めるOpenFeature入門 / Scalaわいわい勉強会 #4
arthur1
1
300
開発者とQAの越境で自動テストが増える開発プロセスを実現する
92thunder
1
180
テストコード文化を0から作り、変化し続けた組織
kazatohiei
2
1.5k
ゆるやかにgolangci-lintのルールを強くする / Kyoto.go #56
utgwkk
1
370
CSC305 Lecture 26
javiergs
PRO
0
140
快速入門可觀測性
blueswen
0
340
CQRS+ES の力を使って効果を感じる / Feel the effects of using the power of CQRS+ES
seike460
PRO
0
120
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
110
テストケースの名前はどうつけるべきか?
orgachem
PRO
0
130
Featured
See All Featured
Building Adaptive Systems
keathley
38
2.3k
For a Future-Friendly Web
brad_frost
175
9.4k
Six Lessons from altMBA
skipperchong
27
3.5k
Docker and Python
trallard
42
3.1k
Become a Pro
speakerdeck
PRO
26
5k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Automating Front-end Workflow
addyosmani
1366
200k
How to Ace a Technical Interview
jacobian
276
23k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
2
290
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
Transcript
NetBSD/dreamcast IDE HDD接続 ふたたび KOF 2016 KOF では 7年ぶりの展示です Izumi
Tsutsui
[email protected]
Twitter: @tsutsuii OSC東京版からちょっと更新
NetBSD/dreamcast 2000年 12月に本家ツリーにマージ http://mail-index.netbsd.org/source-changes/2000/12/11/0081.html
DC IDE HDD Interface http://homepages.compuserve.de/bITmASTER32/dc/dc-ide.html 2000年にはすでにトライしている人が
IDE I/F 概要 PC/AT用 回路 • コントローラがドライブ側にある • データバス、レジスタ選択、割り込み
の信号をつなぐだけで動く ⇒簡単なロジック回路だけで構成可能
2001年 3月 4日 「NetBSD/dreamcast を入れた」 というとある後輩に向かってメール (前ページのURLを示して) 「IDE-HDDのインターフェースを作って NetBSDのドライバを書くとかどう?」
2001年 3月 24日 後輩からの返信メール 「というわけで、作ってみました」 「DEVICE IDENTIFY の結果です」
( ゚д゚)
2001年 3月 27日 後輩からの返信メール 「READに成功しました」
2001年 5月 1日 後輩からの返信メール 「WRITEも動きました」
2001年 6月 某 名大祭 元祖(?) 謎マシン展示
2001年 NeBSD BoF http://www.jp.netbsd.org/ja/JP/JNUG/event/20010630BOF/dcwdc/mgp00001.html
2001年 12月 ISA NE2000と謎マシンの関係
2002年 6月 CPLDバージョン登場
「俺も遊ぶから もう一台作って」 と横暴な先輩モードを発動
拡張バス割り込み探索 ハックしよう! • 適当な割り込みハンドラを書く • ハンドラに printf を入れる •
機能が不明なピンにプルアップ抵抗を 順に当てていく • 触った瞬間にカーネルが反応したら そのピンが割り込み端子? ⇒13番ピンがそれっぽい?
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)
2002年当時は OSC も KOF も無くて 「謎マシンの展示」 という概念自体が 無かったんですよね…
時は流れて 2005年10月
KOF2005 @大阪産業創造館 https://k-of.jp/2005/
謎マシン展示@Kansai http://www.soum.co.jp/~jun/KOF2010.pdf EWS4800/360AD NetBSD/ews4800mips マージ直前展示 ドリキャス キーボードとマウス ドリキャス 本体はこのへん ドリキャス接続
IDE-HDD と NE2000 画面は NetBSD/dreamcast のXサーバー
NetBSD/dreamcast で Xサーバーを動かして NetBSD/ews4800mips のシリアルコンソール端末 にしてました 誰にもわからなさ過ぎる展示でしたね……
さらに時は過ぎ KOF2009
MPlayer on dreamcast http://www.soum.co.jp/~jun/KOF2010.pdf
謎マシン展示でも マニアックすぎるネタは 気づいてもらえない という反省 (´・ω・`)
2010年に入って https://twitter.com/tsutsuii/status/16513319813
8年も経つと 自作の基板は いろいろ劣化が… ISAスロット抜き差しがきつかった模様
デバッグを試みるも…… NetBSD/dreamcast カーネル起動方法 • CD-Rにカーネルを焼いて起動 ⇒カーネル作るたびに焼くとかやっとれん • NetBSDカーネルが起動した状態で NFS等のファイルシステムから
カーネルを読み込み ⇒NE2000もダメ、BbAもつなげられない
SDカード接続等を試みるも、 結局挫折したまま5年 https://twitter.com/tsutsuii/status/669927653701390336
2016年2月
検索でこんなページが http://www.dc-swat.ru/blog/hardware/874.html
衝撃の事実 • ドリキャスの GD-ROMは 実は IDE/ATAPI • IDE が接続可能なランドが基板上にある
• GD-ROM が master で、配線だけすれば slave 設定の HDD が直接つながる!? ATA on Dreamcast http://www.dc-swat.ru/blog/hardware/874.html
本当に ATA なら、 NetBSDだったら ちょっとドライバ書けば 一瞬で動くんじゃ……
とりあえず 工作してみる
シールドその他でガードが固い どこから配線するか
わりと豪快な解決策 実施例を見てみる https://fnhack.wordpress.com/2014/10/16/soldering-to-the-motherboard/
板金加工は 大変なので 手抜きを 考える
このへんに すきまがある?
電源コネクタ横も 一応すきまがある
とりあえずボード取り外し
IDEケーブル準備
はんだめっき
ランド確認
黙々と配線
さらに配線
配線整頓
すきまから引き出し
さらに引き出し
エッジ注意
電源基板取り付け
で、ドライバ作成開始
https://twitter.com/tsutsuii/status/706303710536728577
https://twitter.com/tsutsuii/status/706305209673211904
https://twitter.com/tsutsuii/status/706317376434757632
https://twitter.com/tsutsuii/status/706322812412100608
https://twitter.com/tsutsuii/status/706323002904850434
https://twitter.com/tsutsuii/status/706323584365436928
https://twitter.com/tsutsuii/status/706339280436596736
https://twitter.com/tsutsuii/status/706350693385252864
https://twitter.com/tsutsuii/status/706388037987487744
https://twitter.com/tsutsuii/status/706396799968215040
https://twitter.com/tsutsuii/status/706397480439533568
https://twitter.com/tsutsuii/status/706398442801623040
https://twitter.com/tsutsuii/status/706411492216705024 https://gist.github.com/tsutsui/713a2cb010435effad08
配線工作:2時間 デバッグ:6時間 やっぱり一瞬でした
どこがおかしいのかわからない • ドライバが悪いのかハード工作が悪いのか • 最初テストに使った SATA-IDE 変換が Slave 設定ではちゃんと動かないという罠
• NetBSDのドライバはコピペだけでも動く ⇒設計をサボって実装漏れとかやらかす • デバドラでやらかすとデバッガが使えない ⇒いきなりリブートしたりする ハマりポイント
CFスレーブ動作テスト
OSC展示用 適当加工(展示2日前)
カッターナイフ工作
でろーん
というわけで展示物完成
GD-ROMドライバ • HDD用に MI ATA ドライバを使ったので GD-ROM も MI
ATAPI ドライバを使って 書き直す必要がある • が、GD-ROMは微妙に ATAPI 準拠してない ……本題ではないせいで気合い入らず保留中 今後の課題
ATAPI とは • IDE はもともとハードディスク用の規格 ⇒セクタ単位の READ, WRITE 転送のみ
• CD-ROM だと他にもいろんな操作が必要 ⇒音楽演奏 とか Eject とか (☝ ՞ ਊ )☝ ՞ ウイーン ➢ HDD用の転送のしくみはそのままに、 各種コマンドも送れるようにした仕様が ATAPI の規格 GD-ROM と ATAPI
ATA と ATAPI IDEバス 物理ドライブ マスター HDD スレーブ CD-ROM ディスクドライバ
CD-ROMドライバ ATA 層ドライバ: ATAデータ転送・割り込み処理 ATAPI層ドライバ: コマンドパケット処理 ATAコマンド・データ転送 データ転送要求 データ転送要求 各種アクセス
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>
データ転送時のバス状態 ドライブ 選択 ATA HDD アクセス ATA コマンド データ転送 1,2…
ドライブ 選択 ATAPI アクセス ATA コマンド データ転送 データ 転送 コマンド パケット HDDにはコマンドパケットも データ転送に見える
データ転送 データ 転送 コマンド パケット GD-ROM の困った点 ドライブ 選択 ATA
コマンド ATAPI黎明期の混乱? • リセット動作が ATA標準と違う? • AUXレジスタの RST を叩いてもダメ? • ATAPI_SOFT_RESETコマンドが必要? • コマンドパケット転送で割り込みが入らず データ転送完了時のみ割り込みが入る ➔MI ATA/ATAPI ドライバの修正から必要
•HDDがあると結構使える感じです •標準ハードだと一瞬で動きます •規格から外れたハードを作ると ドライバ書く人が泣きます •ハード工作してドライバ書いての 自作自演楽しいです まとめ