Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
The history of NetBSD/atari and support for ATA...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Izumi Tsutsui
January 27, 2018
Programming
1.9k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The history of NetBSD/atari and support for ATARI compatible Milan / OSC2018Osaka
OSC2018 大阪の NetBSDセミナーで発表した『NetBSD/atari の歴史と ATARI互換機 Milan サポート』のスライドです。
Izumi Tsutsui
January 27, 2018
More Decks by Izumi Tsutsui
See All by Izumi Tsutsui
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
120
CPUクロック20MHz RAM 16MBの LUNAで 30秒アニメGIF再生デモ / OSC2026Kyoto
tsutsui
0
82
OSC東京でいただいた UIAPduinoマイコンボードで PSG演奏と液晶ドッド絵デモ / osc2026Kagawa
tsutsui
0
390
NetBSD+Raspberry Piで 本物のPSGを鳴らすデモを ブラッシュアップしました / osc2026Tokyo-spring
tsutsui
1
120
NetBSD+Raspberry Piで 本物のPSGを鳴らすデモを OSC駆動の7日間で作った話 / OSC2026Osaka
tsutsui
1
210
PC-6001でPSG曲を鳴らすまでを全部NetBSD上の Makefile に押し込んでみた / osc2025hiroshima
tsutsui
0
400
今年もNetBSD環境を使って PC-6001のPSG演奏デモを作った話 / KOF2025
tsutsui
0
400
NetBSD/luna68kの歴史解説と、LUNAでアニメGIF再生デモと ついでにPC-6001デモも作った話 / OSC2025Kyoto
tsutsui
0
190
NetBSDの解説と NetBSD/luna68kの歴史と ついでにPC-6001展示 / OSC2025Tokyo-spring
tsutsui
0
270
Other Decks in Programming
See All in Programming
setup-vp GitLab対応の裏側
naokihaba
0
110
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
0
1.5k
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
150
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
560
Building an Out-of-Order CPU
latte72
1
790
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
180
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
310
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
180
The Rails Doctrine Decade
koic
2
150
アクセシビリティから考える情報設計
high_g_engineer
0
380
wkhtmltopdfの次どうするか問題2026
willnet
2
1.5k
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
620
Featured
See All Featured
Being A Developer After 40
akosma
91
590k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
エンジニアに許された特別な時間の終わり
watany
109
250k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
240
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
280
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
580
Optimising Largest Contentful Paint
csswizardry
37
4k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
460
Transcript
NetBSD/atari の歴史と ATARI互換機 Milan サポート オープンソース カンファレンス2018大阪 ひさしぶりの「謎マシン起動しました」展示 Izumi Tsutsui
[email protected]
去年のOSC大阪 PC-6001実機展示と PC6001VX エミュのデモ
pkgsrcに入れてしまえば なんでもNetBSD関連と 言い張れる という手法 ♪〜(´ε`)
いつものブース説明 「OSとは」 •「OSの展示」というのが実に難しい • 作る人はシングルユーザ起動で満足しがち • 見る人にとっては、ブートメッセージとか ログインプロンプトとか見ても意味不明 ➔
外観勝負の謎マシン展示 or テストを兼ねた mikutter 等のアプリ展示 というのが定番の説明
今回のOSC大阪 ♪〜(´ε`) https://twitter.com/tsutsuii/status/954750277642416128
ひさしぶりに ガチの NetBSDカーネルネタです ふつーの方にウケるかは 非常に謎です……
NetBSDとは えびはらさん「NetBSDのご紹介」より NetBSDは、4.3/4.4BSD&386BSDベースの OSです。プロジェクトは1993年3月21日か ら開始していて、現在も活発に開発が進ん でいます。60種類以上のハードウェアを、 単一ソースツリーでサポートしています。
今も60種類以上? 2018年1月現在 acorn32 algor alpha amd64 amiga amigappc arc
atari bebox cats cesfic cobalt dreamcast emips epoc32 evbarm evbmips evbppc evbsh3 ews4800mips hp300 hpcarm hpcmips hpcsh i386 ibmnws hppa iyonix landisk luna68k mac68k macppc mipsco mmeye mvme68k mvmeppc netwinder news68k newsmips next68k ofppc playstation2 pmax prep rs6000 sandpoint sbmips sgimips shark sparc sparc64 sun2 sun3 vax x68k zaurus
ATARI とは Wikipediaより引用 アタリ(ATARI)は、アメリカ合衆国のビデオ ゲーム会社で、ビデオゲームを作ることを主眼に 創立された会社としては世界初。 ノーラン・ブッシュネルにより1972年に創業。 囲碁の日本棋院初段を持つブッシュネルが 囲碁用語「アタリ」から社名を取った。
https://ja.wikipedia.org/wiki/アタリ_(企業)
ATARI のコンピュータ ATARI ST • 1985年発売 …80386やHP300登場の年 • MC68000
8MHz 採用 • 外部バス16ビット(Sixteen) 内部演算32ビット(ThirtyTwo) から ST の名に • NetBSDは非サポート(MMU無し) だが、後の ATARI 機種の原型 https://en.wikipedia.org/wiki/Atari_ST © Bill Bertram, 2006 CC-BY-2.5 Attribution
ATARI 用OS “The Operating System” • DOSに似た GEMDOS と
GUI の GEM で構成 • CP/M作成元のデジタルリサーチにより開発 • Free版の “EmuTOS” が今でも開発継続 https://en.wikipedia.org/wiki/Atari_TOS
ATARI のコンピュータ ATARI TT030 • 1990年発売 …なおX68030は1993年 • MC68030
32MHz 採用 • 外部バス32ビット(ThirtyTwo) 内部演算32ビット(ThirtyTwo) から TT の名に • 当初からUNIX Workstation を 目指したが、開発遅れで振るわず https://en.wikipedia.org/wiki/Atari_TT030
NetBSD/atari の始まり 「NetBSD移植勢」としては古参 •1994年の NetBSD/amiga 1.0 をベースに Leo Weppelman
氏により TT030 を対象に移植作業開始 •1995年3月にNetBSDに正式portに •同年11月の NetBSD 1.1 が最初のリリース 当時は amiga, atari, mac68k, x68k 等々の68k勢が活発でした http://www.netbsd.org/ports/atari/history.html
NetBSD/atari と TT030 と 私 https://twitter.com/tsutsuii/status/954767562893479936
2009年 OSC関西@京都 http://www.ceres.dti.ne.jp/tsutsui/osc2010kobe/img02.html とりあえず展示しました
2010年 OSC関西@神戸 http://www.ceres.dti.ne.jp/tsutsui/osc2010kobe/SMC_TT-OSC2010Kobe.html 謎NIC作成 + ドライバ作成 して展示
2011年 OSC関西@神戸 http://www.ceres.dti.ne.jp/tsutsui/osc2011kobe/NetBSD-EtherNEC.html 謎NICその2 + ドライバ作成 + セミナー
その後はメンテナンスモードに リリース区切りで動作確認 •NetBSD 6.0: 2012/10/17 •NetBSD 7.0: 2015/9/25 •NetBSD
8 ブランチ 2017/6
KOF2017での転機 https://twitter.com/tsutsuii/status/929229302146596865 NWS-800 メインボード画像の差し入れ
NetBSD/news68k 8.0_BETA
zlib NULLチェックの罠 ふたたび •zlib が展開先アドレスのNULLチェックしてる •NetBSD/news68kカーネルはアドレス0にロード ➔NULLチェックでコケる罠
NetBSD/atari もテスト https://twitter.com/tsutsuii/status/930768218553122816
いろいろおかしい(´・ω・`) https://twitter.com/tsutsuii/status/930796600741453825 https://twitter.com/tsutsuii/status/930797987529342976
インストールFD 1.44MB問題 複数フロッピーサポートが待たれる…… •NetBSD/atari のインストーラは 2HD FDにファイルシステムが入っている •いろいろバイナリが太るとあふれる •デイリービルドを通すために
使ってなさそうなコマンドを消す人がいる •実は使われてて落ちる罠 ⇒実機テスト重要……
とりあえず 8.0_BETA は直しました https://twitter.com/tsutsuii/status/931170150929199104
とかいうやりとりを
[email protected]
のメーリングリストに 投げていたら
port-atariメンテナからのメール デジャヴュ MLのメールやりとりが一段落した11/25 「Milan (ATARI clone) いらない?」 「持ってたけどずっと作業してなくて」 「実際に作業する人に送りたい」
お、おぅ
Milanとは http://www.uweschneider.de/en/projects_milan.php
Milanとは 非x86な ATマザーボードの謎マシン •ドイツ Milan-Computer-Systems社による ATARIクローン •MC68040 と安価なPC用パーツを使用して ATARI機とソフトコンパチなマシンを作る
……というコンセプト
Milanとは • 1997年10月頃アナウンス、1998年登場? • PC-ATフォームマザーボード • MC68040 25MHz (68060オプションも存在) •
72pin EDO SIMM x4 (max 512MB) • モトローラ 68901 MFP (タイマ、シリアル他) • Intel 82371 サウスブリッジ + SuperIO ➢PCI×4, ISA×3, IDEx2, FDD ➢PS/2キーボード・マウス ➢シリアル、パラレル
NetBSD/atari での Milan サポート •2000年 2月:MLで最初の問い合わせ •2000年 8月:MLで TODOリストに挙がる •2001年
4月:カーネルコンフィグ追加 •2001年 6月:Milanテスト用カーネル公開 •2002年 3月:PCIサポートカーネル公開 •2002年 9月:NetBSD 1.6 で正式サポート http://mail-index.netbsd.org/port-atari/oindex.html
NetBSD/atari その後 続けるのは大変…… 2003年12月を最後に、Milan その他 NetBSD/atari に精力的にコミットしていた Leo Weppelman
氏のアクティビティが低下 なお NetBSD 2.0 リリースは 2004年12月
https://twitter.com/tsutsuii/status/575350376796405761
https://twitter.com/yojiro/status/575350578982735872
◯| ̄|_
というわけで今度はイギリスから https://twitter.com/tsutsuii/status/944590685327339520
とりあえず 動かしてみる
ATケースは高い (´・ω・`) https://www.amazon.co.jp/dp/B00JJ7UF7I
こいつで代用 https://twitter.com/tsutsuii/status/944598980746293249
さらに発掘 https://twitter.com/tsutsuii/status/944607656144117760
これも必要 https://twitter.com/tsutsuii/status/944607041728823299
AT電源 Tips https://twitter.com/tsutsuii/status/944614712154644480
とりあえず起動はOK
カーネル起動にはFDDも必要
ケーブルも発掘が大変 https://twitter.com/tsutsuii/status/952490340740603904
FDDもヘッド固着してたり…… https://twitter.com/tsutsuii/status/952490597171916800 https://twitter.com/tsutsuii/status/952499725248315392
IDE HDD 8GB の壁 https://twitter.com/tsutsuii/status/952571925431181312
PCI PIO NIC https://twitter.com/tsutsuii/status/952537950037803008
NetBSD/atari 1.6.2 からテスト https://twitter.com/tsutsuii/status/952515661552480262
1.6.2 のカーネルは起動
……が、panic https://twitter.com/tsutsuii/status/952517934429057024
2.1 のカーネルも起動 https://twitter.com/tsutsuii/status/952527952419287040
……が、途中でハングる https://twitter.com/tsutsuii/status/952529526885462016
netbsd-3 ブランチのカーネルも NetBSD 2.1 とほぼ同じ感じ ちなみに NetBSD 3.0 リリースは 2005年12月
netbsd-4 ブランチカーネル なぜか一部のデバイスが アクセスできていない? (HDDも見えていない) なお NetBSD 4.0 リリースは 2007年12月
NetBSD 5.2.3 のカーネルも netbsd-4 と同じくおかしい NetBSD 5.0 リリースは 2009年 4月
NetBSD 6.1.5 のカーネル なお NetBSD 6.0 リリースは 2012年10月 起動直後のVGAの初期化の デバッグメッセージの後で
ハングアップ?
前途多難
なぜ動かなくなるのか 「何もしてないのに」「何もしないから」 なぜ時とともに動かなくなるのか? ➔ NetBSDのソース構成を見る必要がある ➢「機種依存部分」(Machine Dependent, MD) ➢「機種独立部分」(Machine
Independent, MI)
MI/MD構成 OS共通部分 メモリ管理 タスク管理 ファイルシステム ネットワークプロトコル …… 共通(MI) デバイス ドライバ
SCSI ATA Ethernet …… CPU 固有部 割り込み アドレス変換 …… 機種依存(MD)部 ←OSの全体の5%くらい?
MI/MD構成 OS共通部分 メモリ管理 タスク管理 ファイルシステム ネットワークプロトコル …… 共通(MI) デバイス ドライバ
SCSI ATA Ethernet …… CPU 固有部 割り込み アドレス変換 …… 機種依存(MD)部 ←OSの全体の5%くらい? 「移植」というのはこの部分の実装 ポートメンテナが作業するのもここ
MI/MD構成 OS共通部分 メモリ管理 タスク管理 ファイルシステム ネットワークプロトコル …… 共通(MI) デバイス ドライバ
SCSI ATA Ethernet …… CPU 固有部 割り込み アドレス変換 …… 機種依存(MD)部 ←OSの全体の5%くらい? OS全体共通部分が変わった場合、 機種別の接続I/Fも書き直す必要がある
MI/MD構成 OS共通部分 メモリ管理 タスク管理 ファイルシステム ネットワークプロトコル …… 共通(MI) デバイス ドライバ
SCSI ATA Ethernet …… CPU 固有部 割り込み アドレス変換 …… 機種依存(MD)部 ←OSの全体の5%くらい? 共通のドライバのI/Fが変わった場合も 機械的な置き換えだけをすると 機種固有の問題にハマることが……
MI変更の例 NetBSD 2.0:M:Nスレッド SMPサポート (Scheduler Activation) NetBSD 4.0:VMレイアウト変更、gcc 4.1 NetBSD
5.0:SMP構成変更、softint(9) NetBSD 6.0:gcc 4.5 メンテナ的にはインパクトあっても ユーザーには見えない変更も多くあります
NetBSD 4, 5 それぞれの VM変更、SMP変更では atari, x68k, luna68k 等々 持ってないマシンのコードを
直すのが結構大変でした…… なぜか今はどれも持っていたり
まずは NetBSD/atari が まだ活発だったころの NetBSD 2.1 をベースに デバッグを開始 デバッグ開始
クロスビルド環境 https://twitter.com/tsutsuii/status/952557435700494337
NFS root 設定 https://twitter.com/tsutsuii/status/952564344436408320
デバッグサイクル 適当に修正したカーネルをビルド カーネルを gzipする gzipカーネルをDOSフォーマットFDに書く Milanを起動して
TOSを立ち上げる "loadbsd.ttp” のローダーアプリを起動 フロッピーからgzipカーネルをロード NetBSDカーネルが起動
デバッグサイクル 適当に修正したカーネルをビルド カーネルを gzipする gzipカーネルをDOSフォーマットFDに書く Milanを起動して
TOSを立ち上げる "loadbsd.ttp” のローダーアプリを起動 フロッピーからgzipカーネルをロード NetBSDカーネルが起動 数秒〜数十秒 ほぼ一瞬 約30秒 約2分 フロッピー入れ替えと ダブルクリックと コマンドタイプ 約2分 ⇒ 合計 5〜6分
デバッグ用に カーネル内部に printfを足して 様子を見るだけでも 5〜6分かかる しかもフロッピーを入れ替える必要あり
つらい (ヽ´ω`)
ドイツ語キーボード問題 NetBSD/atari の起動後に再起動すると なぜかNVMの設定が壊れる NVM設定が初期化されるとTOSの表示と キーボード配列がドイツ語設定になる ‘-’
を打とうとすると 'ß' になる netbsd.gz の ‘z’ を打つと ‘y’ になる 起動するのも一苦労になったり……
None
None
NVMドライバをいじって 初期化しないように修正 /* XXX: Milan's firmware seems to use different
check method */ if ((machineid & ATARI_MILAN) == 0) { if (!nvram_csum_valid(nvram_csum())) { printf(": Invalid checksum - re-initialized"); for (nreg = MC_NVRAM_START; nreg < MC_NVRAM_CSUM; nreg++) mc146818_write(RTC, nreg, 0); nvram_set_csum(nvram_csum()); } }
HDD起動できるように CD-ROMからHDDに バイナリを展開してみる
https://twitter.com/tsutsuii/status/952583345468203008
https://twitter.com/tsutsuii/status/952594463569805312
負荷をかけると 確率的にハングするので ブートローダーと カーネルだけを 入れてみる
ブートストラップ
フローピーの呪縛からは 開放されたので、 -current に追従するため NetBSD 4.0以降で おかしい問題をチェック
netbsd-4でデバイスが見えない問題 なぜか一部のデバイスが アクセスできていない? (HDDも見えていない)
netbsd-4でデバイスが見えない問題 タイマやキーボードは検出されている PCIもデバイス検出はできているが レジスタアクセスができていない 見えているデバイスと見えないものとでは アドレスのマップ方法が違う?
NetBSD 3 → 4 で VM APIが変わっている
netbsd-4でデバイスが見えない問題 仮想アドレスを見えているデバイスと 同じ領域にしてみる ⇒ダメ 見えているデバイスと見えないものとで ページテーブル設定を比べてみる ⇒見えていない方は PMAP_WIRED
設定? ↓ pmap_enter(9) で PMAP_WIRED を 外したらうごくようになりました (3.0ではなんで動いてたのか不明)
netbsd-6で起動直後に止まる問題 起動直後のVGAの初期化の デバッグメッセージの後で ハングアップ?
netbsd-6で起動直後に止まる問題 コンソール初期化付近にデバッグprintfを 入れつつ、怪しい関数をコメントアウト という手法で探索 ISAのコンソールデバイス(キーボード)の 初期化でハングしているっぽい? 5.0
と 6.0 の差分を確認 ⇒デバイス構造体変更でNULLアクセス発生 そこを修正して起動まで進むように
その他の雑多な問題 ISA割り込みを設定したらハング ⇒locore.s のハンドラに typo 入ってた FDDが検出されない ⇒MIドライバ変更でATARI固有設定の
変更漏れ tar ball 展開でハングする問題 ⇒存在しないメモリをアクセスしている? メモリ量を16MBのみとすることで とりあえずそれなりに動いている?
-current動作確認とコミット netbsd-6 と同様の修正で 8.0_BETA も -current も無事に起動して動作
-current動作確認とコミット 結局修正したのは実質 5つのファイルだけ 都度メンテしないと調査が大変……
今後の課題 メモリ検出の問題 各SIMMの物理アドレス配置調査が必要? 直せれば 512MB なビルドマシンも可能!? 高負荷でハングする問題 とにかく
race condition っぽいところを 調べるしか無い? 各PCIデバイス動作の検証
まとめ • カーネルデバッグは大変ですが 自分で調べて動くと楽しいです • 放置してると動かなくなるので 定期的なメンテが重要です • OSC展示駆動がおすすめです 「-currentが動いたら
OSC大阪展示するよ!」 と元オーナーに宣言してたのでした