MC6800 ROMモニタ自作 その18 ~次はメモリマップの整理と将来構想~

MC6800 ROMモニタMC6800 ROMモニタ自作 その18 ~次はメモリマップの整理と将来構想~

前回までで、SBC-IO上のMC6821 PIAを使ってSDカードからファイルをLOADできるところまで来ました。DIR でFAT32のroot directoryを表示して、LF HELLO.S でS-RecordをRAMへLOADして、さらに MICBAS13.S をSDカードからLOADしてBASICを起動するところまで動きました。

ただ、ここから先へそのまま機能を足していくと、たぶん後で困ります。今のROMモニタは、SDカード用の512 byte sector bufferを $1C00、モニタのワークエリアを $1E00 付近に置いています。BASICや画面やキーボードを考えると、低RAMをモニタが握っているのがだんだん邪魔になりそうです。

まずはメモリマップ

今考えているのは、8KB互換ROMとSBC-IO拡張ROMを分ける案です。既定の make bin は、今までどおり8KB RAM構成で動くROMを作ります。一方で、SBC-IOのRAM拡張を前提にしたROMを別プロファイルとして作ります。

この図は、上が $0000、下が $FFFF です。8KB互換ROMでも、実際には $1FFF$8000 の間に大きな空きがあります。ただ、現行の8KB RAM構成ではそこにRAMがいるとは限らないので、モニタのワークを置く前提にはしません。

SBC-IO拡張ROMでは、$C000-$DFFF をモニタワークやSD/FAT bufferの退避先にしたい。そうすると $0000-$7FFF あたりをBASICやユーザープログラムに広く使わせられます。$A000-$BFFF はK68-VDGのVRAM候補として温存したいと思っています。

ビルドプロファイルのイメージ

まずは basesbcio だけでよいと考えています。base は現行互換。sbcio$C000-$DFFF へワークを逃がす構成。その次に、K68-VDGを使う sbcio_vdg、さらに画面、キーボード、タイマ、RTC、自動起動あたりを含んだ standalone 的な構成があるかな、という見立てです。

次の実装候補

最初はやはり「メモリ配置のビルド分離」です。ここができると、次に $C000-$DFFF のRAM確認コマンドを作れます。その次がK68-VDGです。画面がつくと、一気にスタンドアロン感が出ます。

画面がついたら入力も欲しくなります。1つめのACIAはPCとの保守コンソールとして残して、2つめのACIAをキーボード用にするのが良さそうです。PS/2は実装しやすいけれど入手性が不安、USBは将来性があるけれどMCU付きI/Fになりそう、というところで悩ましいです。

RTCと将来構成

PIAのPort BはSDカードのSPIに使っていますが、Port Aが空いているなら、そこにI2Cをbit-bangしてRTCをつなぐのも面白そうです。SDボード + RTCボード、みたいにするとちょっと実用的です。

SBC6800にSBC-IOをつなぎ、SBC-IO側でRAM拡張、2nd ACIA、PTM、PIAを使う。画面はK68-VDG。SDカードとRTCはPIAまたは専用ボード。キーボードは2nd ACIA側へ。1st ACIAはPCとの保守コンソールとして残しておきたいです。

ROMに入りきらない問題

FAT、VDG、キーボード、RTC、BOOT、自動起動。全部をROMへ入れるのは、かなりきついかもしれません。そこで、SDカードのシステム領域bootstrap案も、将来構想として残しておきたいです。ROMにはSD初期化と小さい第1段だけを置き、FAT/DIR/LF/VDG/キーボードなどはSDカード上の SDFS.BIN みたいな第2段へ逃がす。ちょっと大げさですが、ここまで行くとM6800 DOSみたいな話になります。

当面の結論

次にやるなら、まずはメモリ配置のビルド分離です。8KB互換ROMは壊さない。SBC-IO拡張ROMでは $C000-$DFFF へモニタワークとSD/FAT bufferを逃がす。$A000-$BFFF はK68-VDG用に温存する。SDカードからLOADできるようになったので、次は「何を載せるか」ではなく「どこに載せるか」をちゃんと考える段階に来た、という感じです。

関連リンク

MC6800 ROMモニタSBC6800