Slide 1

Slide 1 text

digital VAX, NetBSD/vaxの歴史と VAXstation 3100/m30 展示 オープンソースカンファレンス 2024 大阪 久しぶりの展示デモ駆動開発 Izumi Tsutsui [email protected] 𝕏 (Twitter): @tsutsuii Mastodon: @[email protected]

Slide 2

Slide 2 text

4年ぶりOSC大阪ブース展示  2020年はお歳暮のsun3でした https://twitter.com/ebijun/status/1220906094391779333

Slide 3

Slide 3 text

4年ぶりOSC大阪ブース展示  今年2024年はVAXです https://twitter.com/tsutsuii/status/1750592533024117202

Slide 4

Slide 4 text

VAXについて UNIXやOSの勉強をしたことがある方は 教科書で必ず目にしますよね

Slide 5

Slide 5 text

VAX 11/780  1977年 …ボイジャー1号打ち上げの年 ●メモリ空間 512MB! ●実メモリも 8MB 搭載 ●5MHz 2KBキャッシュ ●NECワンボードマイコン TK80が出たのは1976年 Joe Mabel, CC 表示-継承 3.0, https://commons.wikimedia.org/w/index.php?curid=7469039 による

Slide 6

Slide 6 text

VAXの歴史  OSのVMSユーザーが多かった? ●1985年 MicroVAX II ●1987年 VAXstation 3100 ●1991年 VAXstation 4000 ●1999年にEOLアナウンス https://web.archive.org/web/20000815201016/http://www.compaq.com/alphaserver/vax/vax_letter_final.html/

Slide 7

Slide 7 text

NetBSD/vaxの歴史  もちろん 4.4BSD由来です ●1994年8月 NetBSD本家にマージ VAX 11/750 のみサポート ●1995年1月 MicroVAX サポート ●1996年 VAXstation 2000,3100サポート ●1998年 VAXstation 4000/60サポート ●2000年6月 VAX8200 SMPサポート! https://www.netbsd.org/ports/vax/history.html VAX 11/750 Retro-Computing Society of Rhode Island - 投稿者自身による著作物, CC 表示-継承 3.0, https://commons.wikimedia.org/w/index.php?curid=4894062 による

Slide 8

Slide 8 text

VAXエミュレータ simh https://www.netbsd.org/ports/vax/emulator-howto.html  誰でもお手軽に試せます

Slide 9

Slide 9 text

VAXエミュレータ simh  MicroVAX3900 メモリ256MB

Slide 10

Slide 10 text

VAX入手方法?  わりと買えそうな価格で eBay とかにあります

Slide 11

Slide 11 text

VAX入手方法?  キーボード LK201 or LK401

Slide 12

Slide 12 text

VAX入手方法?  シリアルコンソール用ケーブル

Slide 13

Slide 13 text

VAX入手方法?  増設メモリ?

Slide 14

Slide 14 text

VAX接続のために  ディスプレーはSync on Green対応必要 変換はピンアサインを調べて適当に自作 http://www.vanade.com/~blc/DS3100/pinouts.html#video

Slide 15

Slide 15 text

VAX接続のために  あとはいつもの謎マシングッズ ●MAU (10BASE-5⇔10BASE-T変換) ⇒なぜか今でも 10BASE-Tはサポートされる ●2GBくらいの SCSIディスク 今どきだと SDカード接続のとかあります ●あとは臨機応変で中身を見たり配線したり

Slide 16

Slide 16 text

私とVAX  古典履修? ●一時期simhでいろいろ遊んでいたものの、 実機がないこと、活動が活発なので様子見 ●2020年2月に eBayでお手頃価格の VAXstation 3100を見つけて思わずポチる ●本体 $179.00 送料関税込み計 $242.14 ●当時は $1=100円くらいだったような?

Slide 17

Slide 17 text

届いたものの…  海外通販の罠? 安かろう悪かろう? ●中を見るとHIC割れが…… ●気持ちが萎えてしまいしばらく押し入れに

Slide 18

Slide 18 text

コロナ禍を経て再始動  2022年12月~2023年1月 ●やるか、とシリアルとキーボード入手 ●VGA変換も作成 ●一応無事に起動してSCSIディスクも認識? ●割れてたHICは ST-506 I/Fのほうなのかも?

Slide 19

Slide 19 text

いろいろテスト  動いてしまえば NetBSDマシンです ●カーネルロード後に画面が出ないと思ったら 後付けのgpxフレームバッファが未サポート ●OpenBSD/vaxにはドライバあったので 3時間くらいゴソゴソ移植して無事動作! ●モノクロフレームバッファも10年以上前から バグってコンソールで動いてなかったので 適当に修正

Slide 20

Slide 20 text

フレームバッファドライバ 「どうやって書くんですか?」と聞かれたので ふつうは以下が必要 ●文字表示、カーソル描画 ●行内編集 つまり部分的横スクロール ●右端での折り返しと下端での縦スクロール ●描画のためのVRAMの読み書き ●画面消去やエスケープシーケンス等の 特殊描画や表示文字切り替え

Slide 21

Slide 21 text

フレームバッファドライバ 「だいたい同じ構造」なら共通化されてる NetBSDだと rasops や wscons ドライバがある ●文字表示、カーソル描画 ●行内編集 つまり部分的横スクロール ●右端での折り返しと下端での縦スクロール ●描画のためのVRAMの読み書き ●画面消去やエスケープシーケンス等の 特殊描画や表示文字切り替え 一般的なVRAM構成であれば VRAMアドレス、画面サイズ、bpp 等の個別パラメータだけ渡せば rasopsドライバが全部やってくれる VT100のような端末エミュレータの 表示処理は wsconsドライバが全部 やってくれる

Slide 22

Slide 22 text

VAXモノクロフレームバッファ問題  「幅8ドットのフォントしか使えない?」 ● かつてのPC-9801などを含め、 1bpp つまり 1ドット=1ビットのVRAMでは 「1バイトのMSB側ビットが画面の左側のドット」 「1バイトの LSB側ビットが画面の右側のドット」 というのが普通 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |0 1 1 1 1 1 1 1|1 0 0 0 0 0 1 0|0 1 1 1 1 0 0 0|0 1 1 1 1 1 1 1|0 0 0 0 0 0 0 0| MSB LSB MSB LSB MSB LSB MSB LSB MSB LSB 7F 82 78 7F 00

Slide 23

Slide 23 text

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |1 1 1 1 1 1 1 0|0 1 0 0 0 0 0 1|0 0 0 1 1 1 1 0|1 1 1 1 1 1 1 0|0 0 0 0 0 0 0 0| MSB LSB MSB LSB MSB LSB MSB LSB MSB LSB FE 41 1E FE 00  「LSB First!」 ● VAX(というかDEC?)のマシンでは 1bpp つまり 1ドット=1ビットのVRAMでは 「1バイトの LSB側ビットが画面の左側のドット」 「1バイトのMSB側ビットが画面の右側のドット」 というハードウェア接続になっている VAXモノクロフレームバッファ問題 ●しかし、バイト列は「 (演算上の) MSBバイトが左」のまま

Slide 24

Slide 24 text

VAXモノクロフレームバッファ問題  ハードウェアとソフトウェアの関係 ● 1バイトの中では LSB側ビットが画面の左側のドット ●しかしバイト列はMSB側バイトが画面の左側のドット ●8ドット超のフォントを描画するにはフォント幅で シフト演算やビットマスクをする必要がある ➔こんなVRAM構成だと通常のCPU命令にあるような 4バイトレジスタのシフト演算は使えない ●なので「1バイト」に収まる「8ドット幅」フォント しか使えない、という状況に

Slide 25

Slide 25 text

ビットオーダーリトルエンディアン  10年前にLUNAでいろいろ調べてました ●LUNAは「READとWRITEでVRAMアドレスが異なる」 ので、自前のフォント描画ルーチンを持っていた ●フォントの描画は4バイト(32ドット)単位で処理 ➔ビットオーダー反転はめんどくさいけど、 バイトオーダー反転は簡単じゃん、と思いつく ●フォントのバイト並びもLSB Firstの順番で保持する ●LSB Firstの4バイト単位でシフト・マスクする ●最後に4バイト単位でVRAMに書きこめば 「LSBバイトが先頭バイト」つまり左側に書かれる

Slide 26

Slide 26 text

エンディアン迷宮  頭の中だけではむずかしい

Slide 27

Slide 27 text

エンディアン迷宮  4回くらい直したら意図通り動きました!

Slide 28

Slide 28 text

次はX.orgサーバー?  展示デモで日本語を出すために ●Xサーバーでも「通常のVRAMでNetBSD的なAPI」なら 「xf86-video-wsfbドライバが共通に使える」 ●とりあえず NetBSD/vax Xorgサーバーを動かしてみる ●が、libfb.soのモジュールがないと怒られる ➔旧X.org 1.10の機種用のファイルリストがバグってた ●直したら今度はいきなりカーネルが落ちる ➔フレームバッファドライバのmmap実装が間違ってた ●それも直して再度X.orgサーバーを起動すると……

Slide 29

Slide 29 text

 まあそうなるよね ビットオーダー反転サーバー

Slide 30

Slide 30 text

Xserver謎マシン対応力  実はNetBSDよりも歴史があります ●Xサーバー実装は実はあらゆるVRAMに対応している ●バイトオーダー、ビットオーダーも指定できるはず、 と古いXserver実装を探すとそれっぽいのがある ●それを見て xf86-video-wsfb ドライバに 以下の設定を足すと…… if (wstype == WSDISPLAY_TYPE_VAX_MONO) { pScrn->bitmapBitOrder = LSBFirst; }

Slide 31

Slide 31 text

Xserver謎マシン対応力  1行で動きました

Slide 32

Slide 32 text

というわけで展示準備 一昨日動いて 当日朝まで準備

Slide 33

Slide 33 text

 いつものように動かしているわけですが NetBSDは「どんなマシンでも使える」 というドライバとI/Fが用意されてる 「変なデバイスにも対応する設計と実装」 =アーキテクチャとI/F設計の良い実践 Xserverも歴史があるだけあって 意外と「どんなデバイスでも動く」 「うごいた わーい!」は SunでもLUNAでも VAXでも、どんなマシンでも楽しい! まとめ