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候補として温存したいと思っています。
ビルドプロファイルのイメージ

まずは base と sbcio だけでよいと考えています。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できるようになったので、次は「何を載せるか」ではなく「どこに載せるか」をちゃんと考える段階に来た、という感じです。
関連リンク
- Issue #70: https://github.com/kuninet/mc6800-rom-monitor/issues/70
- PR #71: https://github.com/kuninet/mc6800-rom-monitor/pull/71
- Issue #54: https://github.com/kuninet/mc6800-rom-monitor/issues/54
- SBC-IO Rev02: https://sbc738827564.wordpress.com/2018/08/11/sbc-io-rev02/
- K68-VDG: https://github.com/kuninet/K68-VDG