MC6800 SDFS/68を作る その2 ~モニタではなく小さいDOSへ~

SDFS/68MC6800 SDFS/68を作る その2 ~モニタではなく小さいDOSへ~

前回は、ROMからfixed LBAのstage1を読み、stage1がFAT rootの SDFS.BIN を起動するところまでを書きました。

SDFS/68 v1では、SDFS> L filename でS-RecordやIntel HEXをロードできます。

でも、ここで少し悩みが出てきました。

SDFS/68はROMモニタの延長なのか、それともDOSなのか、です。

LOADしてEXITしてG、はちょっと違う

最初は、SDFS/68側でファイルをロードして、実行したいときはROMモニタへ EXIT して、モニタ側の G コマンドで飛べばよいかな、と思っていました。

でも、実際の操作として考えると、ちょっと変な感じ。

`SDFS> L HELLO.S
OK
SDFS> EXIT
] G0200`

これは「SD上のDOSっぽいものを起動したのに、実行するためにモニタへ戻る」流れです。デバッグ時ならよいのですが、通常運用としてはカッコ悪い。

DOSっぽくするなら、ファイルを選んで実行する入口はSDFS/68側にあったほうがよさげ。

`SDFS> DIR
SDFS> RUN HELLO.S`

この方が自然ですネ。

役割を分ける

そこで、SDFS/68 v2へ進む前に、ROMモニタとSDFS/68の責務を分けることにしました。

ROMモニタとSDFS/68の責務分担

ざっくり言うとこうです。

  • ROMモニタは、救命具、デバッガ、復旧口
  • stage1は、SD/FATを読むboot services
  • SDFS/68は、通常運用の小さい第2段DOS
  • ユーザープログラムは、SDFS/68からロードして実行するもの

SDFS/68の中に、ROMモニタの MBCRU を全部入れるのはやめます。

モニタコマンドが使えると便利ですが、それをやるとSDFS/68がもう一個のモニタになってしまいます。RAMも食いますし、設計も濁ります。

低レベルデバッグがしたいときは、SDFS/68から EXIT してROMモニタへ戻る。これでよいことにしませう。

SDFS/68 v2でやること

v2では、UARTコンソール前提のまま、小さいDOSとしての基本操作を入れます。

SDFS/68 ロードマップ

v2の候補はこうです。

  • DIR: root directoryを表示する
  • TYPE filename: テキストファイルを表示する
  • RUN filename: ファイルをロードし、entryが取れれば実行する
  • RUN addr: 指定アドレスへジャンプする
  • LOAD filename: ロードだけ行う
  • L filename: LOAD filename の短縮エイリアス
  • EXIT: ROMモニタへ戻る

ここで大事なのは、RUN を通常実行の本線にすることです。

LOAD は開発補助です。ロードして、メモリを見たり、あとで実行したりするための入口です。L はv1からあるので残しますが、v2では LOAD の短縮形という位置づけにします。

実行ファイル形式はまだ作らない

DOSっぽくするなら、CP/Mの FOO.COM みたいに、FOO と打ったら外部装置からロードして実行、という形も考えたくなります。

でも、v2でそこまでやると仕様が大きくなりすぎます。

今はまだS-record / Intel HEXをロードする世界です。S-recordには S9S8 で開始アドレスを持てますが、Intel HEX側は今の実装では拡張アドレスや開始アドレスを扱っていません。

なのでv2では、まず RUN filename という明示コマンドにします。

entryが取れれば実行する。取れなければエラーにしてプロンプトへ戻る。これくらいが、今のRAM容量と実装規模には合っていそうです。

本格的な実行ファイル形式や、FOO 入力で FOO.COM を探すトランジェントコマンドは、もっと後で考えます。

スタンドアロン化はv3へ送る

もうひとつ、VDGとキーボードの話もあります。

K68-VDGの VDGTEST はできていますし、KKBD-USBを2nd ACIAへつなぐPoCもできています。SDFS/68をDOSとして使うなら、最終的にはVDG画面とキーボードで使いたくなります。

でも、これもv2には入れません。

VDGを標準出力にするには、画面スクロール、カーソル、BS、CR/LF、UART fallbackなどが絡みます。DIRRUN と同時にやると切り分けが悪いです。

なので、v2はUARTコンソール前提でDOSとしての形を作る。VDG/KKBD統合はv3で扱う。これで分けます。

通常運用とデバッグ時の流れ

使い方としては、こういうイメージです。

通常運用とデバッグ時の流れ

通常はSDFS/68内で完結します。

`SDFS> DIR
SDFS> RUN BASIC.S`

デバッグしたいときは、ロードだけしてROMモニタへ戻ります。

`SDFS> LOAD TEST.S
OK
SDFS> EXIT
] U0200
] M0200
] BOOT
SDFS>`

こうすると、SDFS/68はDOS、ROMモニタはデバッガ、という役割が保てます。

Issueを分けた

この方針を忘れないように、先にIssueとdocsへ残しました。

  • Issue #136: モニタと第2段DOSの責務境界
  • Issue #137: SDFS/68 v2の親Issue
  • Issue #138: DIR
  • Issue #139: TYPE
  • Issue #140: RUN
  • Issue #141: LOAD
  • Issue #142: EXIT

この整理を入れたのがPR #143です。

実装はこれからですが、先に迷いそうなところを固定できたのはよかったと思います。

次にやること

次は、v2の最初として DIR を実装します。

ただし、いきなりROM側の DIR を消すわけではありません。ROM側 DIRsbcio profileの互換機能として残します。

SDFS/68側の DIR は、sbcio_vdg / k6802_vdg の本線で使うDOS側の機能です。

まずはUART前提、root限定、8.3 filename限定で進めます。

関連リンク

SDFS/68