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
OSC展示とLUNAとNetBSD / OSC2024Kyoto
tsutsui
1
59
digital VAX, NetBSD/vaxの歴史と VAXstation 3100/m30 展示 / OSC2024Osaka
tsutsui
0
440
SONY NEWS NetBSD移植作業とNWS-3260展示 / KOF2023
tsutsui
0
1.3k
37年前の Sun 3/60 のために最新のNetBSDと最新のX.orgをメンテする話 / KOF2022
tsutsui
1
450
お歳暮で Sun3 が送られてきたので NetBSD/sun3 を展示デモしました / OSC2020Osaka
tsutsui
5
2.7k
NetBSD/zaurus 8.1 を直したあと ブース展示デモ内容を作った話 / OSC2019Tokyo-Fall
tsutsui
0
680
NetBSD/zaurus 8.1 をテストしたら動かなかったので動くまで直した話 / KOF2019-NetBSD
tsutsui
1
1.1k
OSC京都 LUNA展示 9年目 / OSC2019Kyoto
tsutsui
0
620
NetBSDておくれLive Image UEFI対応 設計仕様検討メモ / NetBSD UEFI Live Image
tsutsui
0
430
Other Decks in Programming
See All in Programming
AWS IaCの注目アップデート 2024年10月版
konokenj
3
3.1k
Go言語でターミナルフレンドリーなAIコマンド、afaを作った/fukuokago20_afa
monochromegane
2
140
推し活としてのrails new/oshikatsu_ha_iizo
sakahukamaki
3
1.7k
破壊せよ!データ破壊駆動で考えるドメインモデリング / data-destroy-driven
minodriven
16
4.1k
Generative AI Use Cases JP (略称:GenU)奮闘記
hideg
0
160
PHP でアセンブリ言語のように書く技術
memory1994
PRO
1
150
Piniaの現状と今後
waka292
5
1.5k
Sidekiqで実現する 長時間非同期処理の中断と再開 / Pausing and Resuming Long-Running Asynchronous Jobs with Sidekiq
hypermkt
6
2.7k
飲食業界向けマルチプロダクトを実現させる開発体制とリアルな現状
hiroya0601
1
400
RailsのPull requestsのレビューの時に私が考えていること
yahonda
5
1.7k
Vue SFCのtemplateでTypeScriptの型を活用しよう
tsukkee
3
1.5k
Streams APIとTCPフロー制御 / Web Streams API and TCP flow control
tasshi
1
290
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
48
10k
Navigating Team Friction
lara
183
14k
Designing Experiences People Love
moore
138
23k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
27
1.9k
Testing 201, or: Great Expectations
jmmastey
38
7k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
355
29k
We Have a Design System, Now What?
morganepeng
50
7.2k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
Fashionably flexible responsive web design (full day workshop)
malarkey
404
65k
Music & Morning Musume
bryan
46
6.1k
It's Worth the Effort
3n
183
27k
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があると結構使える感じです •標準ハードだと一瞬で動きます •規格から外れたハードを作ると ドライバ書く人が泣きます •ハード工作してドライバ書いての 自作自演楽しいです まとめ