ROMファイリングシステム (RFS) — ユーザーマニュアル

RFS ユーザーマニュアル

Rom Filing System (RFS) は Z80 アセンブリ言語で書かれたファームウェアパッケージで、Sharp MZ-80A(および互換ハードウェア)をモダンな感覚のレトロコンピュータに変えます。オリジナルのモニターおよびユーザー ROM を拡張ファームウェアに置き換え、SD カードファイリングシステム、CP/M 2.2 ブート、複数の BASIC インタープリター、内蔵 Z80 アセンブラおよびディスアセンブラ、30 以上の新しいモニターコマンドを追加しながら、馴染みある SA-1510 の * プロンプトとすべてのオリジナルコマンドをそのまま維持します。
このマニュアルでは、RFS の日常的なインストールと使用に必要なすべての情報を説明します。ハードウェアアーキテクチャとビルドシステムの詳細については テクニカルガイド を参照してください。Z80 アセンブリソースコードの詳細とファームウェア開発については デベロッパーズガイド を参照してください。

対応ハードウェア

RFS はコンパイル時に選択される 4 種類のハードウェアプラットフォームをサポートしています。生成される ROM イメージと機能セットはターゲットによって若干異なります:
プラットフォーム 説明 主な機能
RomDisk カード RFS のオリジナルターゲット。MZ-80A の拡張スロットに差し込む基板で、モニター ROM とユーザー ROM ソケットを最大 4×512 KB Flash RAM、512 KB SRAM、SDXC カードリーダーに置き換えます。 フル機能セット:SD カード、全モニターコマンド、CP/M、BASIC バリアント、テープ操作
SFD-700 SFD-700 mkII フロッピーディスクインターフェースカード。RFS はカードの Flash ROM 領域を占有します。 フロッピーブート、フロッピーディレクトリ、ROM ベースのプログラム、インライン Z80 アセンブラ/ディスアセンブラ;SD カードコマンドなし
picoZ80 RP2350 ベースの Z80 交換ボード。RFS はエミュレートされた ROM 空間内で動作します。 RomDisk と同等のフル機能セット
tranZPUter FusionX FPGA ベースの Z80 拡張ボード。RFS はその Flash ROM 空間内で動作します。 フル機能セット
以下のモニターコマンドリファレンスで (R) と表示されているコマンドは、RomDisk / picoZ80 ビルドにのみ存在します。(S) と表示されているコマンドは SFD-700 ビルドにのみ存在します。

RFS の入手

ビルド済みの ROM イメージと SD カードイメージは、Gitea リポジトリの releases/ ディレクトリで入手できます。これらはビルドツールなしで直接プログラムできます。ソースからビルドしたい場合は、テクニカルガイド — ビルドシステム を参照してください。
RomDisk および picoZ80 ビルドには以下のファイルが必要です:
  • MROM_ROMDISK_256.bin または MROM_PICOZ80_256.bin — モニター ROM イメージ(モニター ROM Flash チップにプログラムします)。
  • USER_ROM_256.binUSER_ROM_II_256.binUSER_ROM_III_256.bin — ユーザー ROM イメージ(ユーザー ROM Flash チップ 1〜3 にプログラムします)。
  • SHARP_MZ80A_RFS_CPM_IMAGE_1.img — SD カードイメージ(dd を使ってマイクロ/標準 SD カードに書き込みます)。
SFD-700 ビルドの場合:
  • SFD700_256.bin — SFD-700 結合 ROM イメージ(SFD-700 mkII Flash ROM にプログラムします)。

Flash ROM のプログラミング
ROM イメージは、minipro ユーティリティを使用した TL866 II+ または互換プログラマーで SST39SF040(512 KB)Flash チップに書き込みます:
# Monitor ROM (RomDisk build):
minipro --infoic /path/to/minipro/infoic.xml -p SST39SF040 -s -w roms/MROM_ROMDISK_256.bin


# User ROM 1:
minipro --infoic /path/to/minipro/infoic.xml -p SST39SF040 -s -w roms/USER_ROM_256.bin


# SFD-700:
minipro --infoic /path/to/minipro/infoic.xml -p SST39SF040 -s -w roms/SFD700_256.bin

SD カードへの書き込み
Linux の dd を使って、SD カードイメージを直接カードに書き込みます。パーティショニングは不要です — SDCFS イメージはセクター 0 から始まります:
# /dev/sdX をお使いの SD カードデバイスノードに置き換えてください:
dd if=roms/SHARP_MZ80A_RFS_CPM_IMAGE_1.img of=/dev/sdX bs=512
sync

初回起動

プログラムされた ROM チップと(RomDisk の場合は)SD カードを挿入した後、Sharp MZ-80A の電源を入れます。馴染みある SA-1510 のサインオンバナーが表示されます。RFS が SD カードファイリングシステムの初期化に成功すると、バナーに "+ RFS" が追加されます:
SHARP MZ-80A
Monitor SA-1510  + RFS

*
* はモニタープロンプトです。すべてのオリジナル SA-1510 コマンドが変更なしで使用できます。H と入力すると、すべての RFS コマンドを一覧表示するページ形式のヘルプ画面が表示されます。Space キーでページを進めます。
+ RFS のテキストが表示されない場合、SD カードが検出されていません — カードが正しく挿入されており、フォーマットされ、SDCFS イメージがセクター 0 に含まれているか確認してください。

モニターコマンドリファレンス

RFS の完全なコマンドセットを以下に示します。RomDisk / picoZ80 ビルドにのみ存在するコマンドには (R)、SFD-700 ビルドにのみ存在するコマンドには (S) が付いています。その他のコマンドはすべてのビルドで使用できます。
コマンド パラメータ 説明
0 .. 9 (R) アクティブな RFS SD カードドライブを選択します(0〜9)。選択されたドライブ番号がプロンプトに表示されます。
40 (R) 40 列表示モードに切り替えます(Kuma 40/80 アップグレードまたはビデオモジュールが必要)。
80 (R) 80 列表示モードに切り替えます(Kuma 40/80 アップグレードまたはビデオモジュールが必要)。
ASM (S) <address> インタラクティブ Z80 アセンブラ。指定した 16 進アドレスからメモリにアセンブリニーモニックを直接入力します。空行で Enter を押すと終了します。
B キーボードベルのオン/オフを切り替えます。
BASIC アクティブな SD ドライブまたは ROM 上の Sharp BASIC SA-5510RFS を検索し、ロードして実行します。
C [<byte>] 0x1200 から RAM の末尾まで 0x00 または指定した 8 ビット 16 進値でメモリを初期化(クリア)します。
CP <src> <dst> <size> メモリのブロックをコピーします。すべての引数は 4 桁の 16 進数:ソースアドレス、デスティネーションアドレス、バイト数。
CPM アクティブな SD ドライブまたは ROM 上の CP/M 2.2 を検索し、ロードして起動します。
D <addr> [<addr2>] <addr> から <addr2>(または終了アドレスなしの場合は 20 行)までのメモリの 16 進および ASCII ダンプ。任意のキーで続行、U で前ページ、X で終了。アドレスなしで D を繰り返すと最後の位置から続行します。
DASM (S) <addr> [<addr2>] <addr> から Z80 マシンコードをディスアセンブルします。
EC (R) <name> または <file#> アクティブな SD カードドライブからファイルを名前またはファイル番号で削除します。
F / FL [<drive>] 指定したフロッピードライブ番号からブートします。省略するとドライブ番号の入力を求めるプロンプトが表示されます。ブートセクタを読み取り、ブートプログラムをメモリにロードして実行します。
FD [<drive>] フロッピーディスクのディレクトリ一覧を表示します。オプションのドライブ番号でドライブ 1〜4 を選択します(デフォルト:1)。各ファイルのファイル名、ロードアドレス、実行アドレス、ファイルサイズを表示します。
f 0xF000 のオリジナルフロッピー AFI ブートコードを実行します。
H コマンドヘルプ画面を表示します(ページ形式;Space キーで進みます)。
IC (R) アクティブな SD カードドライブのファイルのページ形式ディレクトリ一覧。ファイル番号とファイル名を表示します。
IR Flash ROM ドライブに保存されているプログラムのページ形式ディレクトリ一覧。
J <address> 指定した 16 進アドレスにジャンプ(実行)します。
L / LT [<filename>] テープ(CMT)からファイルをロードして実行します。
LTNX [<filename>] テープ(CMT)からファイルを実行せずにロードします。
LR <name> または <file#> 名前またはファイル番号で ROM からプログラムをロードして実行します。
LRNX <name> または <file#> 名前またはファイル番号で ROM からプログラムを実行せずにロードします。
LC (R) <name> または <file#> アクティブな SD カードドライブからプログラムをロードして実行します。
LCNX (R) <name> または <file#> アクティブな SD カードドライブからプログラムを実行せずにロードします。
M <address> インタラクティブメモリエディター。現在のバイト値を表示;新しい 16 進値を入力して Enter を押すか、Enter のみで現在値をスキップします。X で終了。
P 接続されたプリンターのテストを実行します。
R DRAM メモリテストを実行します。
S / ST <start> <end> <exec> メモリの範囲をテープ(CMT)に保存します。ファイル名の入力を求めるプロンプトが表示されます。例:S120020001203 は 0x1200〜0x2000、実行アドレス 0x1203 を保存します。
SC (R) <start> <end> <exec> メモリの範囲をアクティブな SD カードドライブに保存します。ファイル名の入力を求めるプロンプトが表示されます。
SD2T (R) <name> または <file#> アクティブな SD カードドライブからテープ(CMT)にファイルをコピーします。
T 8253 タイマーチップをテストします。
T2SD (R) テープ(CMT)からプログラムをロードし、アクティブな SD カードドライブに書き込みます。
V テープへの保存をメモリ内の現在のデータと照合して確認します。
X (R) DRAM が 0x0000〜0xCFFF にまたがるようにハイロード ROM バリアントに切り替えます。

SD カードドライブの使用

RFS は SD カード上に順次格納された 10 個の論理ドライブ(0〜9)を提供します。各ドライブは最大 64 KB のファイルを最大 256 個保持できます。現在アクティブなドライブはモニタープロンプトに表示されます — 1 桁の数字(0〜9)を入力してドライブを切り替えます。

ディレクトリの表示
IC と入力すると、アクティブな SD ドライブのファイル一覧が表示されます。各エントリには 2 桁の 16 進ファイル番号とファイル名が表示されます。80 列モードでは 4 列が同時に表示されます。
* IC

00 INVADERS     01 DEFENDER     02 GALAXIANS    03 SPACE ATTACK
04 PACMAN       05 SNAKE        ...
Press SPACE to continue, X to exit
IR と入力すると、Flash ROM ドライブに保存されているプログラムの一覧が表示されます。これらは読み取り専用で、SD カードが挿入されているかどうかに関わらず使用できます。

プログラムのロード
プログラムは名前またはファイル番号でロードできます。番号によるロードは文字列照合が不要なため高速です:
* LC INVADERS       ; アクティブな SD ドライブから INVADERS をロードして実行
* LCNX INVADERS     ; 実行せずにロード(デバッグに便利)
* LC 04             ; アクティブな SD ドライブからファイル番号 04 をロード
* LR SA-5510RFS     ; ROM ドライブから SA-5510RFS をロードして実行

プログラムの保存
SC を使用してメモリの範囲をアクティブな SD カードドライブに保存します。構文はテープの S コマンドと同一です — 開始アドレス、終了アドレス、実行アドレスをまとめた 4 桁の 16 進値に続いて、ファイル名の入力を求めるプロンプトが表示されます:
* SC120020001200
FILE NAME? MYPROG
SAVED

テープ ↔ SD カード転送
テープ(CMT)と SD カードの間でファイルをどちらの方向にもコピーできます:
  • T2SD — テープから次のファイルをロードし、アクティブな SD カードドライブに保存します。ロードが始まる前に、テープデッキの Play ボタンを押すよう求めるプロンプトが表示されます。
  • SD2T <name> — アクティブな SD カードドライブから指定したファイルをロードし、テープ間コピーと同様にテープに書き込みます。プロンプトが表示されたらテープデッキの Record ボタンを押してください。
これにより、既存のテープソフトウェアを SD カードにアーカイブしたり、SD カードコレクションからテープにソフトウェアを配布したりすることが容易になります。

BASIC の使用

Sharp SA-5510RFS BASIC
オリジナルの Sharp SA-5510 BASIC インタープリターは、RFS 対応の LOAD、SAVE、DIR コマンドで拡張されています。ROM ドライブに SA-5510RFS として保存されています。起動するには:
* BASIC
BASIC に入ると、以下の拡張コマンドが使用できます:
コマンド 説明
LOAD LOAD "TEST" アクティブドライブから TEST という名前のプログラムをロードして実行します。
LOAD LOAD "3:TEST" RFS ドライブ 3 から TEST をロードし、ドライブ 3 をアクティブにします。
LOAD LOAD "C:TEST" 内蔵カセット(CMT)から TEST をロードします。
LOAD LOAD アクティブドライブから次の順番のファイルをロードします。
SAVE SAVE "TEST" アクティブドライブの既存の TEST というファイルを上書きするか、新規作成します。
SAVE SAVE "3:TEST" RFS ドライブ 3 に保存し、ドライブ 3 をアクティブにします。
SAVE SAVE "C:TEST" CMT に TEST という名前で保存します。
DIR DIR アクティブドライブの SD カードディレクトリを一覧表示します。
DIR DIR "3:" ドライブ 3 を一覧表示し、アクティブにします。

Microsoft BASIC
Microsoft BASIC(NASCOM BASIC v4.7b ベース)は 3 つのバリアントで提供されます:
  • MS-BASIC(MZ-80A) — 標準 MZ-80A ハードウェア、カセットストレージのみ。
  • MS-BASIC(RFS40) — 40 列表示の RFS;SD カード CLOAD、CSAVE、DIR コマンドを追加。
  • MS-BASIC(RFS80) — 80 列表示の RFS;SD カード CLOAD、CSAVE、DIR コマンドを追加。
ROM ドライブから適切なバリアントをロードします:
* LR MS-BASIC(RFS40)
MS-BASIC の RFS 拡張は SA-5510RFS と同様に動作します — ドライブ修飾子プレフィックスがファイル名の前の RFS ドライブ番号を選択します:
CLOAD "8:STARTREK"    ; RFS ドライブ 8 から STARTREK をロード
CSAVE "8:MYPROG"      ; RFS ドライブ 8 に保存
DIR "5:"              ; ドライブ 5 を一覧表示
ANSITERM コマンドは内蔵の ANSI ターミナルプロセッサーを有効または無効にします(デフォルトでオン)。これにより、カーソル位置指定やカラーに ANSI エスケープシーケンスを使用する BASIC プログラムを変更なしで実行できます:
ANSITERM 0    ; ANSI 処理を無効化
ANSITERM 1    ; ANSI 処理を有効化(デフォルト)

NASCOM カセットプログラムの変換
カセットイメージファイル(.cas)として配布される NASCOM BASIC プログラムは、付属の nasconv ツールを使用して MZ-80A 用に変換できます。テープフレーミングデータを取り除き、RFS MS-BASIC 拡張に合わせてトークン値を再マッピングします:
nasconv --image startrek.cas --output startrek.bas \
        --nasaddr 0x10fa --loadaddr 0x4341

BASIC MZ-5Z008(Quick Disk)
オリジナルの Sharp MZ-5Z008 Quick Disk BASIC は、ネイティブのフロッピーディスク、Quick Disk およびカセットテープデバイスに加えて RFS SD カードストレージをサポートするようにアップグレードされました。RFS バージョンは「BASIC 5Z-008BRFS」というタイトルで起動します。デバイスプレフィックスを使用してターゲットストレージを選択します:
コマンド 説明
LOAD LOAD "RFS1:MYPROG" RFS SD カードドライブ 1(SD ドライブ 4 にマップ)から BASIC プログラムをロードします。RFS ドライブ 1〜7 が使用可能です。
SAVE SAVE "RFS1:MYPROG" RFS SD カードドライブ 1 に現在のプログラムを保存します。
DIR DIR RFS1: RFS SD カードドライブ 1 のディレクトリ一覧を表示します。
LOAD LOAD "FD1:MYPROG" フロッピーディスクドライブ 1 から BASIC プログラムをロードします。
SAVE SAVE "FD1:MYPROG" フロッピーディスクドライブ 1 に現在のプログラムを保存します。
DIR DIR FD1: フロッピーディスクドライブ 1 のディレクトリ一覧を表示します。
LOAD LOAD "QD:MYPROG" Quick Disk から BASIC プログラムをロードします。
SAVE SAVE "QD:MYPROG" Quick Disk に現在のプログラムを保存します。
DIR DIR QD: Quick Disk のディレクトリ一覧を表示します。
LOAD LOAD "CMT:MYPROG" カセットテープから BASIC プログラムをロードします。
SAVE SAVE "CMT:MYPROG" カセットテープに現在のプログラムを保存します。

BASIC MZ-2Z009E(Floppy Disk)
オリジナルの Sharp MZ-2Z009E Floppy Disk BASIC は、ネイティブのフロッピーディスクおよび Quick Disk デバイスに加えて RFS SD カードストレージをサポートするようにアップグレードされました。RFS バージョンは「BASIC 2Z-009ERFS」というタイトルで起動します。デバイスプレフィックスを使用してターゲットストレージを選択します:
コマンド 説明
LOAD LOAD "RFS1:MYPROG" RFS SD カードドライブ 1(SD ドライブ 4 にマップ)から BASIC プログラムをロードします。RFS ドライブ 1〜7 が使用可能です。
SAVE SAVE "RFS1:MYPROG" RFS SD カードドライブ 1 に現在のプログラムを保存します。
DIR DIR RFS1: RFS SD カードドライブ 1 のディレクトリ一覧を表示します。
LOAD LOAD "FD1:MYPROG" フロッピーディスクドライブ 1 から BASIC プログラムをロードします。
SAVE SAVE "FD1:MYPROG" フロッピーディスクドライブ 1 に現在のプログラムを保存します。
DIR DIR FD1: フロッピーディスクドライブ 1 のディレクトリ一覧を表示します。
LOAD LOAD "QD:MYPROG" Quick Disk から BASIC プログラムをロードします。
SAVE SAVE "QD:MYPROG" Quick Disk に現在のプログラムを保存します。
DIR DIR QD: Quick Disk のディレクトリ一覧を表示します。

CP/M 2.2 の実行

CP/M 2.2 はすべての RFS プラットフォームで使用できます。モニタープロンプトから:
* CPM
RFS はアクティブな SD カードドライブまたは ROM 上の CP/M を検索し、ロードして CP/M CCP に制御を移します。プロンプトが A> に変わります。
CP/M は 47 KB のプログラム RAM を提供します。CBIOS は完全に ROM 内に存在するため、47 KB 全体がアプリケーション用に解放されています。ハードウェアに応じて最大 7 つの CP/M ディスクドライブ(A:〜G:)が使用できます:
CP/M ドライブ 内容
A: SD カード — CP/M システムプログラム、Turbo Pascal、Hi-Soft C など
B: SD カード — Pascal ユーティリティおよび Pascal User Group ディスク
C: SD カード — PLI、PLM、WordStar
D:〜G: SD カード — Grant Searle CP/M コレクション(C0〜F9)
内蔵の ANSI ターミナルエミュレーターが標準の ANSI エスケープシーケンスを MZ-80A 画面にマッピングするため、スクリーン制御に依存するほとんどの CP/M アプリケーションが変更なしで正しく動作します。キーボードにはオートリピートと全 MZ-80A キーの ASCII への適切なマッピングが含まれています。
CP/M から RFS モニターに戻るには、ウォームブート(CCP から Ctrl+C)を使用して CCP を再ロードします。SA-1510 モニターへの完全な終了にはハードウェアリセットが必要です。

表示モード

MZ-80A に Kuma 40/80 列アップグレードまたは 40/80 カラービデオモジュールが装着されている場合、RFS はモニタープロンプトで 40 列と 80 列の表示モードを切り替えることができます:
* 40       ; 40 列表示に切り替え
* 80       ; 80 列表示に切り替え
80 列モードでは、IC および IR ディレクトリコマンドが 4 列を表示するため、目視でプログラムを探すのが大幅に速くなります。MS-BASIC(RFS80) バリアントは 80 列専用に構築されており、すべての画面出力が 80 列を前提としています。
40/80 アップグレードがない場合でも、RFS ファームウェアは正常にブートして動作します — これらのコマンドは単に使用できません。

SD カードの構成

ビルド済みの SD カードイメージは、プログラムを 10 個の RFS ドライブと 7 個の CP/M ディスクイメージに整理しています:
RFS ドライブ 内容
0 共通および MZ-80A マシンコードプログラム
1 MZ-80K マシンコードプログラム
2 MZ-700 マシンコードプログラム
3 MZ-800 / MZ-1500 マシンコードプログラム
4 MZ-80B / MZ-2000 マシンコードプログラム
5 BASIC プログラム、タイプ 2(MZ-80A)
6 BASIC プログラム、タイプ 2(MZ-80K)
7 BASIC プログラム、タイプ 5(MZ-700 / MZ-800)
8 その他のプログラム
9 その他のプログラム

トラブルシューティング

モニターは起動するが "RFS" がバナーに表示されない

  • SD カードが挿入されていない — RomDisk ボード上のリーダーにカードが正しく装着されているか確認してください。
  • SD カードのフォーマットが正しくない — SDCFS イメージはパーティションテーブルなしでセクター 0 から始まる必要があります。上記の通り dd で再書き込みしてください。
  • ROM イメージが間違っている — モニター ROM とユーザー ROM チップがハードウェアターゲット(RomDisk vs picoZ80)に適切なイメージでプログラムされているか確認してください。
  • SPI が接続されていない — RomDisk v2+ ボードでは、ビルド前に rfs_definitions.asmHW_SPI_ENA = 1 を確認してください。v1 ボードでは PP_SPI_ENA = 1 を使用してください。

プログラムのロード後にマシンがクラッシュしたり不規則な動作をする

  • ROM イメージの不一致 — モニター ROM とユーザー ROM は同じソースツリーから同じターゲット用にビルドされている必要があります。異なるビルドのイメージを混在させると、予測できないバンク切り替えアドレスが生じる可能性があります。
  • プログラムが RFS ワークスペースを上書きする — 0x1200〜0xCFFF のすべてを使用するプログラムは、0xE800 の RFS バンク切り替えスタブを上書きする可能性があります。オリジナルモニター用に設計されたプログラムは通常影響を受けません;自己修正プログラムや任意のアドレスにジャンプするプログラムは影響を受ける場合があります。

CP/M が起動しないかエラーが表示される

  • SD カードイメージが不完全 — CP/M ディスクイメージは SD カードの 256 MB 境界から始まります。SHARP_MZ80A_RFS_CPM_IMAGE_1.img 全体が書き込まれているか確認してください — 不完全な書き込みでは CP/M ディスク領域が未初期化のまま残ります。
  • アクティブドライブに CP/M ブートセクターがない — CPM を入力する前にドライブ 0 を選択してください。ビルド済みイメージは CP/M ブートセクターをドライブ 0 に配置しています。
  • フロッピーが接続されていない — SFD-700 ビルドを使用していてフロッピーが接続されていない場合、フロッピー関連の CBIOS 操作がタイムアウトします。代わりに SD カードの CPM ブートを使用してください。

参考サイト

リソース リンク
RFS プロジェクトページ /sharpmz-upgrades-rfs/
RFS テクニカルガイド /sharpmz-upgrades-rfs-technicalguide/
RFS デベロッパーズガイド /sharpmz-upgrades-rfs-developersguide/
RFS ギャラリー /sharpmz-upgrades-rfs-gallery/
SFD-700 mkII(フロッピーコントローラー) /sfd700/
picoZ80(RP2350 Z80 交換) /picoz80/
GLASS Z80 アセンブラー tools/glass.jar に同梱
NASCOM Basic マニュアル リポジトリの docs/ ディレクトリに同梱