普段は XやMastodon等のSNSでリアルタイムで書いてるのもあり、 2021年を除くと過去に振り返り記事というものはあまり書いていませんでした。
一方で今年はOSCの物理ブース展示とセミナー発表が本格的に再開したにもかかわらずイベント駆動開発がいまいちだったなあ という思いがあり、振り返りを書いてみたいと思います。
OSC大阪とVAXstation 3100/m30展示・セミナー
コロナ前の2020年1月にSun3/60を展示して以来の久しぶりのOSCセミナーとブース展示ということで何を持っていくかを悩んだのですが、こういう時のAIか、ということで相談した時の結果がこれ:
Amiga以外はだいたい持ってるマシンを挙げられたのにちょっと笑いましたが、セミナー資料で書いている通りで展示した VAXstation 3100/30 を入手したのは前回(?)のOSC大阪直後の2020年2月でした。
それからなんやかんやで2023年1月から実際に動かし始めて各種修正をコミットして一段落はしていたのですが、せっかくいろいろ結果は出てるし知名度もあるからOSC復帰第一線はVAXか、ということで決めました。
が、展示のためのSSD化などの準備を始めると「HDDから起動したときは問題なく動作するがネットワークブートするとHDDアクセスで中身が壊れる」というトラブルに見舞われて、ネットワークブートを使った新規インストールができない、と言う問題にハマりました。
HDDから起動すれば問題ないことは見えていたので、結局「インストールHDD(実際には SATA SSD + SCSI変換) を NetBSD/i386 マシン上で作成してそのまま VAXstation に装着する」という、クロス環境が整備された NetBSDならでは(?)の手法を使い、無事 Xserverを使った nanotodon による SNSデモというところまで動かすことができました。
なお、いざ Xserverを動かそうとしたら 2023年にコミットしていたフレームバッファドライバがいくつかバグっていた問題に今さら気づいてしまい、ここだけはちょっとだけイベント駆動でした。
X.Org サーバーの修正としてはセミナー資料にある通り以下の実質1行だけの修正でした。
セミナー終わって Xserver起動確認して、液晶の調子が少し悪かったのも電源抜き差しで解消して、会場ブースで予定してた NetBSD/vax デモがすべて想定どおり動いてもう満足です #osc24os pic.twitter.com/YNY3Sl2Dol
— Izumi Tsutsui (@tsutsuii) January 27, 2024
「ネットブートだとHDDアクセスが壊れる問題」については、後日いろいろ調べて「VAXstation 3100/30 のファームウェアはネットワークブートの場合に SCSI DMA設定レジスタを初期化しない」かつ「NetBSD/vax のドライバがバグっていて SCSI DMA設定レジスタのアドレスが間違っている」の組み合わせによるバグということが判明して修正しました。
VAXstation 3100 は NetBSD/vax では結構メジャーな機種と思っていたのですが、フレームバッファサポートも壊れていたことといい、案外実機で動かしている人は少ないのか? と意外に思ったバグでした。
ちなみに事前のネタ出しで挙がったけどセミナーではボツにしたネタが以下
OSC東京春 ATARI TT030展示
前年の2023年春のOSC東京でのNeXT展示で「OSC東京も関西とは違った意味で濃い(?)方々が来られる」という実感があったのもあり「今年も何か持っていくか」ということで、前述のておくれロボ相談結果でも挙がっていた ATARI TT030を持っていくことにしました。
最初は TT030に載っているPSG音源チップを使って何かデモを作るかと考えていたのですが、本業がバタバタしていたのもありなかなかモチベが上がらず、いったんイベント駆動開発にはこだわらずにリハビリ的にSNSデモをやるか、という方向で進めました。
来週の都産貿のOSC東京には ATARI TT030を持って行こうと考えていますが、ネタ出しが進んでません pic.twitter.com/0BqbQWtFMu
— Izumi Tsutsui (@tsutsuii) March 2, 2024
misskey. io local timeline via sayaka 3.7.4 on ATARI TT030 (MC68030 33MHz 64MB RAM) running NetBSD/atari 10.0_RC5 pic.twitter.com/w5kPPyNH7o
— Izumi Tsutsui (@tsutsuii) March 6, 2024
セミナー発表がない代わりに展示説明的なものを4枚程度作ったのですが、説明パネルを配置する方法を考えておかないと単純にパネルを机上に置いてしまうと本体が隠れてしまう、というところが反省点でした。
事前のておくれロボとのネタ出し議論では以下のような話もあったのですが、これは結局お蔵入りのままなのでここで貼っておきます。
GW開発活動(1) NetBSD/hp300 topcatフレームバッファ修正
これはOSC展示とは直接関係ないというか、内容がマニアック過ぎて展示セミナーネタにしづらいというシリーズその1という感じ。
NetBSD/hp300の古い topcat フレームバッファについては「動作がなんかおかしい」というレポートを複数もらっていたのですが、さすがにフレームバッファに関してはバグレポートのテキストログだけではなんともならないことが多くちゃんと対応できないままになっていました。
ただ、コロナ禍の最中に eBayで HP9000/360, 370, 380, 320等々をちまちま買い集めていたこともあり、それら動作テストも兼ねていっちょやるかと取り掛かったのがこのネタ。
マイナー機種のフレームバッファ仕様について語りだすといつまでも終わらないのでコミットログ抜粋にとどめますが、このあたりの「動的な実行時タイミング依存の仕様」は逆アセンブルやコードリバースではなかなか読み取れなくて難しいところです。「動いているものは触るな」みたいな教訓もあったりする
GW開発活動(2) NetBSD/hp300 ブータブルインストールCD-ROM
これもマイナー機種のマイナーネタで、OSCでも取り上げづらいどころか、機種別メーリングリストでも議論ができる人の少ないネタ。
ブートローダの設計の話をしだすといくら書いても終わらないのですが、ざっと書くと以下
- ブートロードは通常ファイルシステム先頭にある空き領域(FFSv1なら 8KB、FFSv2やISO9660では 32KB空いている)に埋め込む
- NetBSD/i386だと、BIOSが読むプライマリブートローダーがFFSを解釈してその中にあるセカンダリブートローダーを読む
- NetBSD/sun3をはじめとする古い機種だと、ブートローダーインストールツールの installboot(8) で「ファイルシステム中のセカンダリブートローダーが置かれているブロック番号とクラスタサイズをプライマリブートローダーの中に情報として埋め込む」という操作を行う
- NetBSD/hp300では、ブートローダのデバイスのアクセスで本体ファームウェアを一切使わずすべて自前でドライバを持つ構成のためサイズが80KB近くあり、ISO9660先頭の空き領域 32KBには入らない
- OpenBSD/hp300では、CDブート専用に「他に不要なドライバを削りまくった専用ブートローダー」を作ることで対処していたが、NetBSD/hp300のブートローダーだと削っても 32KB以下に収めるのがキツい
topcatフレームバッファの次はこれをやるか、ということでGW後半に作業した内容としては以下
- HP9000/300シリーズのマシンのブートストラップの仕様をコードその他から読み取ると、HP-BASIC等で使われていた「LIFファイルシステム」のディレクトリエントリ的な情報としてブートローダの先頭ブロックとサイズを書き込めばファームウェアがそれを読み込んで実行する
- LIFファイルシステムの仕様として、いわゆる「クラスタ」というものは存在せず、すべてのファイルはフラグメントなしの連続配置がされる
- HDD上のFFSの場合は上記のような「連続配置」をすること(特殊な操作をしない限り)できないので、 NetBSD/hp300 では「ブートローダー配置用の専用 bootパーティション」を用意してそこに LIFフォーマットのブートローダーを置いている
- 一方、ISO9660の場合はすべてのファイルがフラグメントなしの連続配置になるので、「ISO9660ファイルシステムの中のセカンダリブートローダーの位置とサイズ」が分かれば、それをISO9660先頭のLIFディレクトリエントリ情報のみの部分に書き込めば、現状の32KBの空きだけでも起動可能にできるはず
「ISO9660ファイルシステムの中のセカンダリブートローダーの位置とサイズを取得する実装」については、後述する NetBSD/macppcのブートCD作業で過去に作っていたので、作業の本題としては NetBSD/hp300のブートローダーそのものよりも「MIでクロスビルド用ツールとしても使われる installboot(8) の ISO9660対応のほうが大変だった(≒NetBSD以外の各種ホストOSでもツールのビルドが通るか確認する必要がある)、という内容でした。
こういう作業をしていると突然出てくる「20年前の自分が埋め込んだバグ」「NetBSD 9.0からのバグだけどマイナー機種しか影響しないので誰も気づいていなかったバグ」に直面したりするのが時の流れを感じたりしてよろしくないですね……
NetBSD/macppc, NetBSD/mac68k ブータブルCDのための mkhybrid(8) 追加
これは以下の別エントリで書いているもの。
これも「Apple Partition Mapの仕様」とか「OpenFirmware 1.x と 2.x のマシンが Apple Partition Map 情報をどう解釈してどこからブートローダーを読み込むのか」とか「HFS/ISO9660ハイブリッド形式とは」とか語りだすといろいろあるのですが、Appleというメジャーマシンの仕様であってもマイナーネタすぎる(だから20年かかったとも言える)ので、需要があればまたいずれ。
OSC京都 LUNA+NWS-3260展示と「OSC京都展示」セミナー
昨年2023年に復活したOSC2023京都ではセミナーなしの展示のみだったのもありリハビリ(?)を兼ねて「LUNA-IIでのX.orgカラーサーバー展示」というおとなしめ(?)の展示でした。
今年は久しぶりにセミナーもあるしイベント駆動でなにかしたいと思っていたのですが、本業がドタバタしていたうえに前述のGW以降の作業三連発でエネルギーが切れてしまい、これといったネタが浮かばないままずるずると時が過ぎていってしまいました。
結局「去年のKOFで見られなかったNWS-3260が見たい」というリクエストを受けたことと、2019年のOSC京都で「LUNAがIPv6の表示を出しているのを見られるとは感慨深いです」というコメントをいただいて嬉しかったのを思い出して、2019年に突発的に作ったセミナー資料をベースに「OSC展示をどんな感じでやっているのか」という「来場者の方目線のネタ」の展示とセミナーで行くことにしました。
NetBSDブースです #osckyoto pic.twitter.com/uoKcbqVA4M
— Izumi Tsutsui (@tsutsuii) July 27, 2024
過去の資料を使いまわすのはどうかと思いつつ、いざ出来上がってみると後半1/3は「こういう機会でもないと書かない」という内容で、結果としてはこれで作ってみてよかったと思っています。
セミナー後にブースに来られた方からも「セミナー面白かったです!」というコメントをいただけたので、こういう方向のイベント駆動もありか、と思った回でした。
OSC広島 Macintosh LC630展示
OSC京都から約2か月後、相変わらず本業がバタバタしていて、 NetBSD本体へのコミットもまったくできていない状態で迎えてしまったのがこのOSC広島です。
ネタがないのに無理に出ることもないかとも一瞬思ったのですが、引きこもっていると余計に気分がサガってしまうし、OSC京都での「見に来てくれた方のために」というコンセプト継承ということで気合いを入れ直して、「今までに展示したことのないマシンで、新幹線での輸送もできて、1日あれば展示準備できるもの」という企画縛りを兼ねて持っていったのがこの LC630です。
OSC広島はだいたいこじんまり(?)しているので展示ネタとしてはどうかと思っていたのですが、さすがに天下の Appleというか、年配(?)の方からは「68k Macなつかしいです」、若い方からは「知ってはいましたが初めて見ました」といったコメントをいただけました。
開始直後には近隣で開催されていたセキュリティイベントに参加されていた若手の方が多数来られて、こちらの予想もしなかった濃い質問をいろいろいただけたのが良かったです。
開場直後に https://t.co/UWDWJKwubRサーバーを起動する前から団体の方が来られて、ネットワーク設定をしつついろいろと説明をしていました #osc24hi pic.twitter.com/bEWGrJAD6y
— Izumi Tsutsui (@tsutsuii) September 29, 2024
Macintosh LC630 の sayakaさんで misskey. io ローカルタイムライン #osc24hi pic.twitter.com/VMgmQgLYeK
— Izumi Tsutsui (@tsutsuii) September 29, 2024
技術的には、上記ポスト添付2枚目の展示説明写真に書いている通り
LC630を含む FPUなし版CPUの XC68LC040wo使用した機種では、カーネルのLC040用FPUエミュレーションコード実装の問題でFPU命令を使うバイナリが正しく動かないという問題がありましたが、実は正規場のMC68LC040ではそれなりに動きます。
というところが誰にもわからないアピールポイントだったりしたのですが、@isaki68kさんの NetBSD/m68k FPUエミュレーション実装のモチベ(?)には微妙に効果あったようなので結果オーライ?
OSC広島ブースでは LC630以外に PC-6001エミュレータの PC6001VXデモと称して4色の芸術画像をひっそり展示するということをやっていたのですが、これが次項のKOFおよびOSC愛媛展示の布石(?)だったりします。
ブースにスペースがあったのでルーターをさせてた Let's Noteを置いてなんとなく PC6001VX 4.2.9を動かして PC-6001の4色の芸術デモ #osc24hi pic.twitter.com/3DpgQEcIOn
— Izumi Tsutsui (@tsutsuii) September 29, 2024
KOF2024 PC-6001 PSG演奏デモ(1)
9月末のOSC広島の後、次は11月前半のKOFに向けてどうするか、となったわけですが、相変わらずこれといったモチベの出るネタがないまま10月も後半を迎えることとなってしまいました。
結局、過去の成功体験(?)のせいで
「NetBSDブースとしての謎マシン展示」
「一般来場者の方にもわかるネタ」
「自分のやりたいことをやる」
という3つを欲張って全部やろうとするからダメなんだ、と割り切って、
「展示発表するかどうかは関係なく、自分がやりたいと思ってたことをやろう」
ということで始めたのが Xその他でも何度も書いている「PC-6001でのPSG演奏デモ」でした。
具体的には、セミナーの資料にあるように 2016年頃に一時期いくつかやっていた「PSG 3和音を耳コピ採譜して演奏させるデモ」をもう少しちゃんとした手順でもう一度やってみたい、というものです。
適当に当時の記録をいろいろ掘り出して時系列を見ると
- 10/14週: 元動画の花梨先輩のP6 4色画像を作り始めたのがこのあたり ?
- 10/19(土): 元動画の原曲を YorkTrailでパート分離して試聴
ベースパートはほぼそのまま wavetone の自動採譜の後に微調整だけして完了 - 10/20(日): ほぼ1日を使って花梨先輩パートを採譜
- 10/21週: 花梨先輩のリップシンク画像や千冬さんパートの「テケテケ」想定の画像も作成(したはずだけど、深夜作業なのでちゃんとした記録がない)
- 10/25(金): 深夜に六花さんパートをざっくり採譜
- 10/26(土): 各減色画像をP6 VRAM形式に落とし込み
(このあたりで先が見えてきたのでやっとこさでGit管理開始) - 10/27(日)〜11/1(金): 元の採譜で入れてしまった 64分音符を48分音符他に置き換える作業を少しずつ実施
- 11/1(金)夜: おもむろに動画投稿を見据えて PC-6001mkIIで歌詞を表示するプログラムを改変して表示テンポを調整しながら動画収録
字幕の出るタイミングは実は手動でタイミングを見てスペースキーを叩く必要がある - 11/2(土): PC-6001 PSGドライバでコンパイル通るようにして PC6001VXで初演奏
わりといい感じだったので気を良くする - 11/3(日): 採譜したデータのスラーのためのタイ付与、音節区切り付与、リップシンクのための歌詞付与とリップシンクデータ付与、リップシンク表示実装とデバッグ、実行結果からリップシンクや演奏データ微調整等々、ほぼまる一日作業
- 11/4(祝): MML調整、音量調整、演奏データエンベロープ付与、P6実機での実行のためのローダプログラム設計と実装とデバッグ
- 11/5(火): Macroassembler ASを使うように修正して P6ファイル生成まで自動化
- 11/7(木): 花梨先輩パートにビブラートを設定してPSGデータも微調整
ここまでやって、11/8(金)中に PC-6001実機で動画を撮ってニコ動に投げて 11/9(土)のKOFでそのままデモするか、と考えていたのですが、実際には以下のハマりがあって挫折。
- PC-6001初代実機で演奏すると、3和音同時に演奏するところで音が割れ気味に聞こえてしまう
- PC-6001mkIIだと問題なくエミュ同等に聞こえる
- 1年ほど前に PC-6001の電解コン交換作業をしていたのと、その時にボリュームを破損してしまって交換したのでそのへんで何か別の部品を壊したか、といろいろ交換するも変わらず
- 出力のアンプ回路が悪いのか、とLM386を使ったアンプを作って置き換えてみても変わらず
- PSGチップの AY-3-8910を手配して、PC-6001本体基板をICソケット化して交換するも変わらず
- これは故障ではなく、根本的に「PC-6001初代ではPSGの3チャンネル出力を直結で合成している」という回路構成がダメなのか、と考えて 4558オペアンプを使って mkII同様の3チャンネル合成回路を作ってみたところ、ようやくエミュ同様の再生音が鳴る
- これでなんとか動画撮れるか、とセッティングをしていところ PC-6001本体の電源のヒューズが飛ぶ
後から考えると、3チャンネル合成回路の5V電源配線の絶縁が不十分でシールドに接触したせいではないかという予想
この時点で 11/8(金) 19時で近所のホームセンターも閉店しており、その時点ではセミナー資料が1枚もできてなかったのもあり、折れそうになる心を立て直しつつ代替の mkIIでのデモに切り替えることにして、仮眠後の深夜に7時間ほどでスライドを作成。
が、スライド作成後の梱包前に最後の動作確認をしたところ「CLOADでのロードができない」という問題が発覚。このあたりは X (Twitter)での実況でも書いていたところですが、OSC/KOFの展示では久しぶりの当日ハマリで、「前日夕方に完成した時点で展示を決める」などというナメた姿勢ではダメだ、と反省することになりました。
PC-6001mkII実機でCLOADできない問題が発生していて、エミュレータの PC6001VXでデモを流しています #KOF2024 pic.twitter.com/3sUzrJV0hX
— Izumi Tsutsui (@tsutsuii) November 9, 2024
ただ、KOFではいつものように「(細かい説明は不要な)濃い方々」がたくさん来られ、意外な方が PC-6001の熱い思いを語ってくれたりで、「NetBSDネタにこだわらず自分が楽しいと思うことをやる」という方向性でも問題ないのだ、という気づきも得ることができました。みなさんありがとうございます
BSDセミナーでPC-6001の話をしたあと、「初代PC-6001のヘビーユーザーは電源の3Aのヒューズを持っていた」というお話をうかがって、「スイマセンでした」という気持ちです #KOF2024
— Izumi Tsutsui (@tsutsuii) November 9, 2024
ご報告その2:
— Izumi Tsutsui (@tsutsuii) November 10, 2024
KOF会場のPC-6001mkII実機でCLOADができなかった問題は、ケーブル側のPLAY信号プラグの信号線とGNDがまさかのショートという故障でした。(写真の箇所で切断すると解消)
おそらくテスト中にPCとの接続でケーブル根本に力をかけ過ぎたことが原因で、作業の基本ができていなかったと反省 pic.twitter.com/fKgsg8uOPj
OSC愛媛 PC-6001 PSG演奏デモ(2)
12年ぶりのOSC愛媛ですが、広島とは違い電車での移動は困難なこと、車での移動も片道300km程度あり前日の資料作成で徹夜気味になることを考えると運転もしんどいということで当初は参加を迷っていました。
ただ、OSC京都の際に実行委員長の方から「(NetBSDにはいつの通り)お願いしたい」というご挨拶をもらったこと、前述の通りKOFでのPC-6001実機デモが叶わずリベンジを期したいということから、KOF会場で「OSC愛媛では今度こそP6実機展示デモをする」と決めていました。
やると決めてしまえば現金なもので、早速KOF明けの 11/10(日)を使って
- アバウトだった花梨先輩のビブラートについて、原曲の周波数計測波形データを見つつ、P6音源ドライバのビブラート設定仕様の調査するのを含め実機でパラメータを微調整
- KOF会場でも気になっていた不自然な発声部分を3か所ほどひたすら調整
と月曜明け方までデータ修正をして、そのまま続きで
- 11/11(月)に動画撮影リハーサルと 3MLピアノロール・mkII歌詞表示との合成と再エンコの事前トライ調整
- 11/12(火)夜に本番撮影をして動画投稿
という感じで仕上げを行いました。
宇宙戦艦ヤマトを熱唱する花梨先輩 feat. PC-6001https://t.co/gTIixjJKIk#sm44314683#ニコニコ動画
— Izumi Tsutsui (@tsutsuii) November 12, 2024
初代PC-6001実機での演奏動画をアップしました
ここからOSC愛媛の準備で、11/13(水)になってようやく宿の手配と愛媛大の展示会場直近の駐車場の手配をして、11/14(木)深夜にスライドの事前ネタ出し。
前日の 11/15(金)は19時半頃からスライド構成検討、22時頃からスライドを作り始めて、翌 11/16(土)の3時前に90枚のスライド完成。そこから最終テスト後に梱包が終わったのが4時過ぎで、そこから2時間ほど仮眠して車で愛媛に向かうという、やはりこうなったかという行程でした。
スライドに書いているように、大学での開催で「初心者向け」と銘打ったセミナーで学生さんも来られるかもしれないとなると、KOFのように「わかっている人前提」の内輪ネタだとアレか、と考えて、久しく取り上げていなかった NetBSDの過去の歴史を前身のBSD全体を含めて解説を押し込むことにしました。
当日のセミナーでは残念ながら学生の方は来られていなかったようですが、ブースでPC-6001の説明を聞いてセミナーに来てくれた方が複数いて、歴史のページも興味深く聞いていただけたようで良かったのではないかと思っています。P6部分の説明は時間が足りず駆け足になってしまいましたが、セミナー後に「4色のミクさんよかったです!」というコメントをいただけたのがうれしかったですね。ありがとうございます
思いのほか PC-6001に興味を持ってくれる方がブースに来られてうれしいですね#osc24eh pic.twitter.com/avFRiW6VDr
— Izumi Tsutsui (@tsutsuii) November 16, 2024
まとめ
ここまでで文字数が1万字を超えていて「溜め込んでまとめて書いてないで、各見出し分をその都度書けよ」と怒られそうですが、展示直後は力尽きていてたいてい気力が残っていないので、こういう長期休暇を機会にでも書いただけヨシ!、と笑って流していただければと思います。どちらかというと将来の自分がむかしを懐かしむために書いている、みたいな側面のほうが大きかったり
来年以降も「OSC/KOF展示をどうしていくか」というのはいろいろ考えることになると思いますが、「自分がやってみて楽しいことをやる」という基本を思い出しながらやっていきたいと思います。