NetBSDをX68030に移植したときの話

既に同趣旨のまとめが作られていますが自分の保存用です。
0
勝(まさる) @masaru0714

「勝たん」は「まさるたん」ですか? (ちがいます) ゾンビランドサガと佐賀が好き。だいたい半袖。パソコンとゲームとマンガ、アニメ、コンカフェ通いとか好き。お酒も好き。昔の名前は沖@沖。RT多めです。おつかれさまbotではありません。インスタ、note他リンクはこちら https://t.co/iqgWYX9Dcw

勝(まさる) @masaru0714

そうか、ちょうど30年前の1993年のいまごろだ。GWにX68030を買ってNetBSDの移植を始めたの。シングルユーザブートしたの9月なので移植には3〜4ヶ月くらいかかった計算。インターネットから情報を拾うなんてことができなかった時代に、一人で移植。

2023-06-07 12:57:05
勝(まさる) @masaru0714

画面とかキーボードのドライバ動くまではコンソールはシリアルで、でもシリアルドライバ動くまではどこまで動いたかLチカで確認。とかやってました。いつごろなにができてみたいな進捗の記録は残っていませんが、書籍とかになんか書いたっけ? 忘れました。。

2023-06-07 13:26:28
yunk @yunkya2

@masaru0714 以前Qiitaに書かれてましたよね? / NetBSDを手探りで移植したときの話 qiita.com/masru0714/item… #Qiita

2023-06-07 18:57:49
勝(まさる) @masaru0714

@yunkya2 ですね。焼き直ししてる感じですが、記憶を掘り起こし直してます。笑

2023-06-07 18:59:52
勝(まさる) @masaru0714

で、仮想記憶オンで死ななくなって、ようやくmain()が呼べるところまでたどり着く。シリアルコンソールも一応文字が出せるようになって(cnput.c)、でも本来の起動時に出てくるはずのCopyrightはまだ出ない。各種初期化の途中? で詰まる。

2023-06-07 20:15:22
勝(まさる) @masaru0714

ここからいくつかデバイスドライバ用意したような記憶。起動したらファイルシステムからinitを呼び出す必要があるので、まずはSCSIドライバから。X68000と同じ富士通のチップで、ハードウェア解説書にも一応情報あったけど、チップのドキュメントを提供いただいて非常に助かった記憶があります。

2023-06-07 20:19:08
勝(まさる) @masaru0714

でも、ディスクふっとばされると死んじゃうので、最初はread onlyで。とかやった記憶。実際に読みに行く動作を検証するのはもっとだいぶ先でした。

2023-06-07 20:21:15
勝(まさる) @masaru0714

シリアルコンソールもいい加減しんどいので、画面のドライバも作ることに。当時他のマシンは文字コードを特定のアドレスに書き込むと画面に文字が表示される仕組みが多く採用されてたけどX680x0はビットマップを書く。フォントイメージのROM領域からVRAMに転送する。

2023-06-07 20:25:18
勝(まさる) @masaru0714

iteとかgrfとかあのへんの名前は元はamigaのコンソールドライバでつけられたのを大枠流用したので、名前もそのまま持ってきたって感じでした。

2023-06-07 20:30:41
勝(まさる) @masaru0714

そうそう、起動うまくいかないときよーく調べたら、スタック領域ちゃんと作れてなかった(マップ忘れ)とか、スタックポインタが変なところ指してたとかいうのもありました。

2023-06-07 20:32:23
勝(まさる) @masaru0714

どうにかこうにかして、Copyright表示てたのって夏だったかなー。よく覚えてない。ファイルシステムは、ホントの最初はamiga用に用意された構築済みファイルシステムイメージをそのまま使ってました。MOにベタっと書き込んで。でカーネル起動して出たメッセージは cannot mount root

2023-06-07 20:35:29
勝(まさる) @masaru0714

イメージをちゃんと書けてないのか、正しく読めてないのか、レイアウトが想定と合ってなくて正しい値を扱えてないのか。複合原因だったのかも含めてまるっと忘れましたが、けっこう長いことmountできなかった気がします。

2023-06-07 20:38:21
勝(まさる) @masaru0714

mountできたと思ったら次は init died でもようやくユーザープロセスだー。ここも長かった。コンテキストスイッチをそもそも実装し忘れてたとか(アホですね)、トランポリンコードがバグってたとか、execveからのマップ部分がバグってたとか、いろいろあった気がする。

2023-06-07 20:41:07
勝(まさる) @masaru0714

起動して症状見て、ソース広げてデバッグコード仕込んだりしてビルドして、起動して情報収集して、ソース広げて対策コード書いてビルドして、起動したらやっぱりまだおかしくて、の繰り返し。繰り返し。ずっとずっと繰り返してました。ICEもリモートデバッガもない。ひたすらトライアンドエラー。

2023-06-07 20:44:02
勝(まさる) @masaru0714

で、ようやくシングルユーザブートでshを起動できたのが9月。日付は忘れましたが、めっちゃ嬉しかった。苦労が報われた瞬間でした。たぶん速報をBBSに書き込んだと思うので、ログが残ってる人は探すと正確な日付が出てくるんじゃないかと。

2023-06-07 20:49:18
勝(まさる) @masaru0714

そのあと、SCSIドライバのwriteのほうを動かして、マルチユーザブートできるようになって。このあたりからデバイスドライバ(ADPCMとか)を書いてくれる人が現れたりして、大変ありがたかったです。

2023-06-07 20:55:00
勝(まさる) @masaru0714

NetBSD上でセルフビルドでカーネルを作って、BSD ffs上に置けるようになって、だったら直接起動できるようにするかってことでブートローダを書いたんだったかな。disklabelどうする問題を考えたのはいつだったか。このときは結局Human68kのパーティション情報を使ってfake disklabel。

2023-06-07 20:57:24
勝(まさる) @masaru0714

で、ブートローダを書いて。Human68kの複数パーティションがsd0a,b,d,e,とかに割り当てるようにして。(当時はcとdの使い分けとかまだなかったと思う)

2023-06-07 20:59:40
勝(まさる) @masaru0714

5月にNIFTY-Serve FUNIXからNetBSDカーネルのソースコードをダウンロードした時は初出の0.8でしたが、その後開発版(NetBSD-current)は0.8aとして更新が続き、最初に起動したのも0.8aだったと記憶しています。

2023-06-07 21:01:03
勝(まさる) @masaru0714

で、userland含めて全ビルドしてみたり、newfsした領域をmountしてファイル配置したり、そしたらa.outのフォーマットがamigaと微妙に食い違ってて調整し直したりとかやった記憶。

2023-06-07 21:03:03
勝(まさる) @masaru0714

このころ、秋葉原のジャンクショップでQIC-150ドライブが売られてて、これを買ってきてX68030につけてました。当時NEC勤務だった友人がNetBSD-currentのソースコードをQIC-150で持ってきてくれて(お互い田町勤務だったので昼休みとか仕事帰りに会って)、それを読むのに使ってました。

2023-06-07 21:06:25
勝(まさる) @masaru0714

そんなこんなで、初めて動くBSDを触ったのが自分が手がけた移植版という珍妙なことをやってました。動き出してから本当に色んな人の支援を頂いたと思います。たしかシャープさんからもMOのメディアを頂いたことがあったと記憶しています。その節は大変お世話になりました。

2023-06-07 21:11:44
勝(まさる) @masaru0714

040turboをお借りして、68040対応の作業もやったなあ。それで040turboの書籍にページを頂いて少し解説を書いたのが、ぼくの書籍執筆デビューのはずです。たぶんいま読むと恥ずかしくなるようなこと書いてそうな予感がします。

2023-06-07 21:14:28