はじめに
ファミコンでUNIX風OSのLUnixが動作するということで、エミュレータのMesenとファミコンクラシックミニを使った起動実験を行いました。
本稿では、実機での動作実験の結果を報告します。
本稿の内容は、「鹿児島Linux勉強会 2024.03(オンライン開催)」での発表内容を含みます。
LUnixの説明は、kazuedaの活動記録2024の12月19日の記事「ファミコンエミュレータMesenでUNIX風OSのLUnixを動かす話」を参照してください。
ファミコン本体、EverdriveN8Famiとファミリーベーシックキーボードでの起動
ファミコンで自作ソフトを動作させる際に利用可能なカートリッジにEverdriveN8Famiがあります。
このカートリッジでは、ディスクシステムのエミュレーションが搭載されていますので、ディスクシステムが無くても、LUnixの動作実験可能です。
このカートリッジで使用するマイクロSDカードに「lunix.fds」を保存し、起動時に表示されるファイルリストから「lunix.fds」を選択すると、LUnixが起動します。
「.」が表示されたら、ファミリーベーシックキーボードから「l sh」と入力します。
この組み合わせでは、「[0001] unhandledd: I/O error」のエラーが表示されました。
ファミコン本体、RAMアダプタ、FDSKeyとファミリーベーシックキーボードでの起動
ファミコンディスクシステムのドライブ部分のエミュレータとして、FDSKeyがあります。
作者のClusterさんは、ファミコンクラシックミニのツールとして知られる「hakchi2」の作者としても知られています。
さて、他にもディスクドライブのエミュレータはありますが、このディスクドライブエミュレータの特徴はドライブの動作状況がLCDに表示されることです。
このディスクドライブエミュレータを使って、どこでエラーが出ているか確認しました。
「lunix.fds」を起動すると、LCDに以下のエラーが表示されます。
"Error, Wrong block CRC"
FDSKeyはオープンソースですので、ディスクドライブエミュレータのソース内のCRCチェック部分をスキップするよう修正したもので、動作確認しました。
エラー表示は無くなりました。LCDの表示では、ディスクの先頭に移動してディスクの最初の部分を読み込んでしばらく移動したところで、移動が止まりました。
「lng-fds」では、先頭部分にブートローダーとミニシェルがあり、そのあとに各種コマンドが存在します。コマンドが入力されると、ディスクの先頭に戻り、コマンドのある場所まで移動してコマンドのプログラムを読み込むようです。
想像の域を出ませんが、ディスクの終わりにディスクの最後を示すコードが書かれていなくて、2周目の始めは、ディスクの最後の続きの様に判定されているのかもしれません。
FDSのフォーマットの勉強をして、lunix.fdsのソースファイルを調べてみます。
おわりに
ファミコンの実機でLUnixを動かそうとしましたが、起動までしか成功しませんでした。この記事を書くために、githubのページを見ていると、作者による修正が少し行われているようです。
最近の修正で動作がどのようになっているか確認してみます。