ROMファイリングシステム (RFS)

概要

ROM Filing System(RFS)は、Sharp MZ-80A および互換ハードウェア向けに、インタラクティブなモニター・大容量ストレージファイルシステム・アプリケーション起動・メモリユーティリティ・デバッグツールを提供する Z80 アセンブリ言語製ファームウェアパッケージです。
RFS は、拡張ボードに接続されたソケットリフターを介してホストマシンのモニター ROM とユーザー ROM を置き換えます。使い慣れた * プロンプトを持つ SA-1510 モニタープログラムの拡張版としてユーザーに提供され、オリジナルのコマンド群をすべて維持しつつ、SD カードや ROM のファイル操作・CP/M 起動・BASIC ロードなど多彩な新コマンドが追加されています。
本ファームウェアは 4 種類のハードウェアプラットフォームに対応しており、rfs_definitions.asm のフラグをコンパイル時に設定して選択します:
  • RomDisk カード — 最初のターゲット。最大 4×512 KB の Flash RAM・512 KB スタティック RAM・SDXC カードリーダーを搭載。モニター ROM とユーザー ROM は Flash RAM 上でバンク切り替えされます。
  • SFD-700 — Sharp フロッピーディスクインターフェースボード。RFS は SFD-700 の CPLD/ROM 空間を占有し、モニター・BASIC ロード・フロッピー起動・組み込み Z80 アセンブラ/逆アセンブラを提供します。
  • tranZPUter FusionX — FPGA ベースの Z80 強化ボード。RFS は Flash ROM 空間内で動作します。
  • picoZ80 — Raspberry Pi Pico ベースの Z80 代替/エミュレーターボード。

RFS モニター

起動時には使い慣れた SA-1510 サインオンバナーが表示され、ファイルシステムの初期化が成功した場合には "+ RFS" が末尾に付加されます。オリジナルの SA-1510 コマンドセットはすべて利用可能で、さらに拡張コマンドが追加されています。一部の拡張コマンド(SD カード操作・ドライブ選択)は RomDisk / picoZ80 ビルドのみで使用可能で、SFD700 ビルドでは代わりにインラインアセンブラと逆アセンブラが追加されます。
完全なコマンドセットを以下に示します。(R) と表記されたコマンドは RomDisk / picoZ80 ビルドのみ、(S) と表記されたコマンドは SFD700 ビルドのみで利用可能です。
コマンド パラメータ 説明
0 .. 9 (R) アクティブな RFS SD カードドライブを選択(0〜9)。
40 (R) 40 桁表示モードに切り替え(Kuma 40/80 アップグレードまたはビデオモジュールが必要)。
80 (R) 80 桁表示モードに切り替え(Kuma 40/80 アップグレードまたはビデオモジュールが必要)。
ASM (S) <アドレス> インタラクティブ Z80 アセンブラ。指定アドレスから直接メモリへアセンブリニーモニックを入力します。
B キーボードのベル音を切り替えます。
BASIC アクティブな SD ドライブまたは ROM から BASIC SA-5510 を検索し、ロードして実行します。
C [<8 ビット値>] 0x1200 から RAM の最上位までのメモリを 0x00 または指定バイト値で初期化します。
CP <src> <dst> <size> メモリブロックをコピーします。3 つの引数(コピー元アドレス・コピー先アドレス・バイト数)はすべて 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> から <addr2> までの Z80 マシンコードを逆アセンブルします。
EC (R) <名前> または <ファイル番号> アクティブな SD カードドライブからファイルを名前またはファイル番号で削除します。
F / FL [<ドライブ>] 指定したフロッピードライブから起動します。省略した場合はドライブ番号の入力が求められます。
FD [<ドライブ>] フロッピーディスクのディレクトリ一覧を表示します。オプションのドライブ番号でドライブ 1〜4 を選択します(デフォルト:1)。
f 0xF000 のオリジナルフロッピー AFI 起動コードを実行します。
H コマンドヘルプ画面を表示します(ページ単位、スペースキーで継続)。
IC (R) アクティブな SD カードドライブのファイルをページ単位で一覧表示します。各エントリには 16 進ファイル番号とファイル名が表示されます。
IR Flash ROM ドライブに保存されているプログラムをページ単位で一覧表示します。
J <アドレス> 指定アドレスへジャンプ(実行)します。
L | LT [<ファイル名>] テープ(CMT)からファイルをロードして実行します。
LTNX [<ファイル名>] テープ(CMT)からファイルをロードします(実行しません)。
LR <名前> または <ファイル番号> ROM からプログラムを名前またはファイル番号でロードして実行します。
LRNX <名前> または <ファイル番号> ROM からプログラムを名前またはファイル番号でロードします(実行しません)。
LC (R) <名前> または <ファイル番号> SD カードからプログラムをロードして実行します。
LCNX (R) <名前> または <ファイル番号> SD カードからプログラムをロードします(実行しません)。
M <アドレス> <アドレス> から始まるインタラクティブメモリエディタを起動します。
P 接続されたプリンターのテストを実行します。
R DRAM メモリテストを実行します。
S | ST <start> <end> <exec> メモリ範囲をテープ(CMT)に保存します。ファイル名の入力が求められます。例:S120020001203 は 0x1200〜0x2000 を実行アドレス 0x1203 で保存します。
SC (R) <start> <end> <exec> メモリ範囲をアクティブな SD カードドライブに保存します。ファイル名の入力が求められます。
SD2T (R) <名前> または <ファイル番号> SD カードから CMT テープへファイルをコピーします。
T 8253 タイマーをテストします。
T2SD (R) テープからプログラムをロードし、アクティブな SD カードドライブへ書き込みます。
V テープへの保存内容をメモリ上のデータと照合します。
X (R) DRAM が 0x0000〜0xCFFF の全範囲をカバーするハイロード ROM バリアントに切り替えます。

Kuma 40/80 カラムアップグレードまたはビデオモジュールが搭載されている場合、4 を入力すると 40 桁表示、8 を入力すると 80 桁表示に切り替わります。80 桁モードでは、ディレクトリ一覧コマンド(IC / IR)が 4 列表示になります。


アップグレード済みアプリケーション

Sharp MZ シリーズは「クリーンマシン」として知られており、ほぼすべてのソフトウェアが ROM に恒久的に保存されておらず、テープやフロッピーからロードする仕組みになっています。そのため既存のアプリケーションは RFS が提供する拡張ストレージの存在を知らず、RFS モニターから高速にロードできることが主な恩恵でした。
マシンをより使いやすくするため、主要なアプリケーションを RFS をネイティブに使用するよう更新し、Microsoft BASIC インタープリターをこのプラットフォームに移植しました。CP/M 2.2 も RFS 機能を使用するカスタム CBIOS を介してサポートされています。

Sharp BASIC SA-5510

オリジナルの Sharp SA-5510 BASIC を逆アセンブルし、RFS 対応の LOAD・SAVE・DIR コマンドで拡張しました。既知の固定アドレスに依存するプログラムが引き続き動作するよう、インタープリターのバイトレイアウトは変更していません。拡張機能はメインインタープリターイメージの外部に適用されています。
拡張版は ROM ドライブおよび SD ドライブ上で SA-5510RFS という名前で提供されます。起動時にはアクティブな SD ドライブ(ドライブ 0〜9)を全ファイル操作に使用します。標準の LOAD・SAVE 構文は変わらず、ドライブ修飾子プレフィックスが唯一の追加点です。
コマンド パラメータ 説明
LOAD "TEST" アクティブドライブで TEST という名前のプログラムを検索し、ロードして実行します。
LOAD   アクティブドライブから次の連番ファイルをロードします。ファイル 5 が最後にロードされた場合、ファイル 6 をロードします。
LOAD "3:TEST" RFS ドライブ 3 から TEST をロードし、ドライブ 3 をアクティブにします。
LOAD "C:TEST" 内蔵カセット(CMT)から TEST をロードし、CMT をアクティブドライブにします。
SAVE "TEST" アクティブドライブ上の TEST という名前のファイルを上書き保存、または存在しない場合は新規作成します。CMT の場合は現在のテープ位置に即時書き込みます。
SAVE   自動生成された名前 DEFAULT<n><n> は現在のシーケンス番号)で現在のプログラムを保存します。
SAVE "3:TEST" RFS ドライブ 3 に TEST を保存/作成し、ドライブ 3 をアクティブにします。
SAVE "C:TEST" TEST という名前で CMT に保存し、CMT をアクティブにします。
DIR   アクティブドライブの SD カードディレクトリを RFS 形式(ファイル番号+ファイル名)で表示します。
DIR "3:" ドライブ 3 のディレクトリを表示し、ドライブ 3 をアクティブにします。

デフォルトのドライブレイアウトについては下記の SD カード構成 をご参照ください。

Microsoft BASIC

ほとんどの MZ-80A BASIC インタープリターはバイナリのみの提供ですが、Microsoft BASIC(NASCOM 4.7b)はソースコードが自由に利用可能で、既存プログラムのライブラリも豊富に存在します。RFS にはターゲットハードウェアに合わせた 3 つの構成で、ネイティブな RFS ストレージをサポートする移植・拡張版が含まれています:
  • MS-BASIC(MZ-80A) — オリジナル MZ-80A ハードウェア用、カセットストレージのみ対応。
  • MS-BASIC(RFS40) — 40 桁表示の RFS 用;SD カード・CLOAD・CSAVE・DIR を追加。
  • MS-BASIC(RFS80) — 80 桁表示の RFS 用;SD カード・CLOAD・CSAVE・DIR を追加。

各バリアントは RFS ROM ドライブおよび SD ドライブに収録されています。完全な標準コマンドセットについては NASCOM Basic Manual をご参照ください。以下の表は RFS 向けに追加された拡張機能を示します。

コマンド パラメータ バージョン 説明
CLOAD "<ファイル名>" MZ-80A カセットからトークン化された BASIC プログラムをロードします。
CSAVE "<ファイル名>" MZ-80A 現在の BASIC プログラムをトークン化形式でカセットに保存します。
CLOAD "[<ドライブ>:]<ファイル名>" RFS40, RFS80 テープまたは SD カードからロードします。<ドライブ> は 0〜9;<ファイル名> は 17 文字の MZ 名または 2 桁の RFS 16 進番号。例:CLOAD "8:13" または CLOAD "8:othello"
CSAVE "[<ドライブ>:]<ファイル名>" RFS40, RFS80 オプションのドライブ修飾子付きでテープまたは SD カードに保存します。
DIR "[<ドライブ>:]" RFS40, RFS80 アクティブドライブまたは指定 RFS ドライブの内容を表示します。
ANSITERM 0 = オフ、1 = オン 全バージョン 組み込み ANSI ターミナルプロセッサを有効/無効にします(デフォルトはオン)。ANSI エスケープシーケンスを画面操作に変換するため、ポータブルな BASIC プログラムをそのまま実行できます。(Star Trek V2 BASIC プログラムは ANSI エスケープシーケンスを使用しています。)
NASCOM カセットイメージコンバーター
NASCOM BASIC プログラムは一般的に、トークン化された BASIC をテープフレーミングデータで包んだカセットイメージファイルとして配布されています。同梱の nasconv ツールはテープフレーミングを取り除き、RFS 下の MZ-80A でロード可能な形式に BASIC コードを再構築します。また、RFS MS-BASIC 拡張が新しいトークンを追加することでテーブルがずれるため、トークン値の自動リマップも行います。
nasconv v1.0

必須:
  -i | --image  <ファイル>   変換するカセットイメージファイル。
  -o | --output <ファイル>   変換後の BASIC データの出力ファイル。

オプション:
  -l | --loadaddr <addr> MZ-80A BASIC 開始アドレス。
  -n | --nasaddr  <addr> 元の NASCOM BASIC 開始アドレス。
  -h | --help            このヘルプを表示。
  -v | --verbose         詳細出力。

例:
  nasconv --image 3dnc.cas --output 3dnc.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 "RFSx:ファイル名" RFS SD カードドライブ x(1〜7、SD ドライブ 4〜10 にマップ)から BASIC プログラムをロードします。
SAVE "RFSx:ファイル名" 指定した RFS SD カードドライブに現在のプログラムを保存します。
DIR RFSx: 指定した RFS SD カードドライブのディレクトリ一覧を表示します。
LOAD "FDx:ファイル名" フロッピーディスクドライブ x から BASIC プログラムをロードします。
SAVE "FDx:ファイル名" フロッピーディスクドライブ x に現在のプログラムを保存します。
DIR FDx: フロッピーディスクのディレクトリ一覧を表示します。
LOAD "QDx:ファイル名" Quick Disk ドライブ x から BASIC プログラムをロードします。
SAVE "QDx:ファイル名" Quick Disk ドライブ x に現在のプログラムを保存します。
DIR QDx: Quick Disk のディレクトリ一覧を表示します。
LOAD "CMT:ファイル名" カセットテープから BASIC プログラムをロードします。
SAVE "CMT:ファイル名" カセットテープに現在のプログラムを保存します。

BASIC MZ-2Z009E(Floppy Disk)

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

ソフトウェアアーキテクチャ

0xE800 のユーザー ROM 空間は 2 KB バンクに分割されており、各バンクにはバンク切り替えスタブのコピーが含まれているため、任意のバンクから他のバンクのコードを実行フローを乱さずに呼び出すことができます。0xC000 / 0xF000 のモニター ROM 空間は 4 KB バンクに分割されています。RFS および CP/M CBIOS バンクを合わせると、RAM を一切消費せずに実質的に 16 KB の ROM プログラム空間が確保されます。
以下の表にすべてのソースモジュール、ターゲット ROM、バンク、機能を示します:
モジュール ターゲット ROM サイズ バンク 説明
rfs.asm ユーザー 2 KB 0 RFS のプライマリエントリポイント、コマンドディスパッチャーとコマンドテーブル。全バンクで共有されるバンク切り替えインフラを含む。
rfs_bank1.asm ユーザー 2 KB 1 フロッピーディスクコントローラー(FDC)機能 — フロッピーブート(FL)、フロッピーディレクトリ(FD)、ドライブ選択。FDC コマンドセットはすべてのビルドでアセンブルされます。
rfs_bank2.asm ユーザー 2 KB 2 SD カードコントローラ。SPI ドライバ、SD カード初期化、SDCFS ディレクトリとファイルの読み書き。
rfs_bank3.asm ユーザー 2 KB 3 モニターメモリユーティリティ:16 進ダンプ、メモリ編集、メモリコピー、テープ↔SD コピー(T2SD / SD2T)。
rfs_bank4.asm ユーザー 2 KB 4 CMT(カセット)コントローラ:テープのロード・保存・検証。
rfs_bank5.asm ユーザー 2 KB 5 汎用ユーティリティ関数:書式付き印刷、文字列ルーチン、共有ヘルパーコード。
rfs_bank6.asm ユーザー 2 KB 6 ヘルプ画面、メッセージ文字列、ASCII↔Sharp 文字セット変換テーブル。
rfs_bank7.asm ユーザー 2 KB 7 完全な Z80 インタラクティブアセンブラ、Z80 逆アセンブラ、DRAM メモリテスト、8253 タイマーテスト。
cbios_bank1.asm ユーザー 2 KB 8 CP/M CBIOS:オーディオ関数と低レベルユーティリティ。
cbios_bank2.asm ユーザー 2 KB 9 CP/M CBIOS:スクリーンドライバーと ANSI ターミナルエミュレーション。
cbios_bank3.asm ユーザー 2 KB 10 CP/M CBIOS:SD カードドライバー(CP/M ドライブ A:〜G: を提供)。
cbios_bank4.asm ユーザー 2 KB 11 CP/M CBIOS:フロッピーディスクコントローラ。
monitor_sa1510.asm モニター 4 KB 0 オリジナル SA-1510 モニター ROM(40 桁)。
monitor_80c_sa1510.asm モニター 4 KB 1 80 桁表示対応にパッチを当てた SA-1510 モニター。
cbios.asm モニター 4 KB 2 CP/M 2.2 CBIOS カーネル(0xC000〜0xCFFF へロード)。
rfs_mrom.asm モニター 4 KB 3 RFS モニター ROM ユーティリティ。ユーザー ROM から実行するコードは自身をページアウトして残りの ROM をスキャンできないため、これらのルーティンはモニター ROM バンク 3 から実行され、ユーザー ROM Flash RAM に保存された MZF ファイルをスキャンしてロードします。
monitor_1z-013a.asm モニター 4 KB 4 MZ-1Z-013A モニター ROM(MZ-700 / MZ-1200 バリアント)。
monitor_80c_1z-013a.asm モニター 4 KB 5 80 桁表示対応にパッチを当てた MZ-1Z-013A モニター。
ipl.asm モニター 4 KB 6 初期プログラムローダー(IPL)。

CP/M 2.2 は 47 KB の使用可能プログラム RAM でサポートされています。RAM に常駐するのは CCP と BDOS のみ(アプリケーションによって上書き可能)で、CBIOS 自体はモニター ROM バンク 2 とユーザー ROM バンク 8〜11 に常駐しており、プログラム RAM を一切消費しません。

モニター ROM には、同時にビルドされる複数のバリアントモニターイメージも含まれます:標準 SA-1510、80 桁 SA-1510、Kuma-80 バージョン(rfs_definitions.asmKUMA80_ENA フラグで選択)、および DRAM が 0x0000〜0xCFFF の全範囲をカバーする必要がある場合に使用する SA-1510 と 80 桁 SA-1510 のハイロードバリアント。

ビルドシステム

すべての開発は Linux(Debian / Ubuntu)上で行います。RFS のビルドには、Z80 ソースのアセンブル・ROM イメージのパッケージング・SD カードイメージの作成が含まれます。ツールチェーンはほぼ完全にリポジトリ内に収録されています。

前提条件

ツール 備考
Java(JRE 8 以上) GLASS Z80 アセンブラの実行に必要。javaPATH に含まれている必要があります。
bash すべてのビルドスクリプトは bash 用です。
perl mzftool.pl に必要。
gcc / make cpmtools をソースからコンパイルするために必要(初回ビルド時に自動実行)。
dd, cat, stat パッケージングスクリプトで使用される標準 Linux ユーティリティ。

GLASS Z80 アセンブラ(glass.jar)は tools/ ディレクトリに同梱されており、別途インストールは不要です。

ビルドターゲット

ビルドターゲットは asm/include/rfs_definitions.asm を編集し、以下のフラグのうち正確に 1 つを 1 に設定(その他は 0)することで選択します:

フラグ ターゲット 説明
BUILD_ROMDISK RomDisk カード 4×512 KB Flash RAM + SDXC カード拡張搭載の MZ-80A。
BUILD_SFD700 SFD-700 Sharp フロッピーディスクインターフェースボード。SD カードなし;ASM/DASM を追加。
BUILD_PICOZ80 picoZ80 Raspberry Pi Pico ベースの Z80 代替ボード。

同ファイル内の追加オプションフラグ:

フラグ デフォルト 説明
KUMA80_ENA 0 Kuma 40/80 桁アップグレードが搭載されている場合は 1 に設定。
VIDEOMODULE_ENA 0 40/80 桁カラービデオモジュールが搭載されている場合は 1 に設定。
FUSIONX_ENA 0 tranZPUter FusionX ボードで RFS を実行する場合は 1 に設定。
HW_SPI_ENA 1 ハードウェア SPI(RomDisk v2 以降の PCB)。現行ボードではすべて 1 のまま。
ENADEBUG 0 アセンブル時デバッグログを有効化。

ビルド手順

リポジトリをクローンし、トップレベルのビルドスクリプトを実行します:

git clone https://git.eaw.app/eaw/RFS.git
cd RFS

# フルビルド(全 ROM のアセンブル・ROM イメージのパッケージング・SD カードイメージのビルド):
./build.sh

# MZF アプリケーションファイルの再処理を含むフルビルド
# (MZF/ 内の MZF ソースファイルが変更された場合のみ必要):
./build.sh -m

build.sh は以下の手順を順番に実行します:

  1. cpmtools をソースからコンパイルし(初回のみ)、結果を PATH に追加。
  2. tools/assemble_rfs.shrfs.asmrfs_mrom.asmroms/rfs.romroms/rfs_mrom.rom にアセンブル。
  3. tools/assemble_cpm.sh — CP/M 2.2 CBIOS(cbios.asmcbios_bank1–4.asmcpm22.asm)を roms/*.rom にアセンブル。
  4. tools/assemble_roms.sh — 全モニターバリアント(SA-1510・80c SA-1510・1Z-013A・ハイロードバリアント・Kuma バージョン・IPL)と MZF アプリケーションファイル(SA-5510・MS-BASIC バリアントなど)を roms/MZB/ にアセンブル。
  5. tools/make_roms.sh — アセンブルされた ROM と MZF アプリケーションを Flash ROM イメージにパッケージング(下記「出力ファイル」参照)。
  6. tools/make_cpmdisks.sh — 各プリポピュレート CP/M ドライブセット用に RAW 形式と CPC 拡張ディスク形式の CP/M ディスクイメージをビルド。
  7. tools/make_sdcard.sh — 10 個の RFS ドライブイメージと 7 個の CP/M ディスクイメージを組み合わせた最終的な SD カードイメージを作成。

個々のスクリプトは部分的な再ビルドのために tools/ ディレクトリ内から直接実行することもできます。

出力ファイル

ビルド成功後、roms/ ディレクトリに以下のファイルが生成されます:

ファイル Flash チップ 説明
MROM_ROMDISK_256.bin SST39SF040(モニター ROM) RomDisk ビルド用モニター ROM イメージ。8×4 KB バンクに SA-1510・80c SA-1510・CP/M CBIOS・RFS mrom ユーティリティ・1Z-013A モニター・IPL を収録。
MROM_PICOZ80_256.bin SST39SF040(モニター ROM) picoZ80 ビルド用モニター ROM イメージ(ROMDISK とバンク順が異なる)。
USER_ROM_256.bin SST39SF040(ユーザー ROM 1) ユーザー ROM 1:RFS バンク 0〜7・CP/M CBIOS バンク 8〜11・CP/M 2.2 イメージ・圧縮 MZF アプリケーションセット。
USER_ROM_II_256.bin SST39SF040(ユーザー ROM 2) ユーザー ROM 2:追加 MZF アプリケーション。
USER_ROM_III_256.bin SST39SF040(ユーザー ROM 3) ユーザー ROM 3:追加 MZF アプリケーション。
SFD700_256.bin SST39SF040 SFD-700 ROM:MZ-80A AFI フロッピー ROM(0x00000〜0x00FFF)・MZ-700 フロッピー ROM(0x01000〜0x01FFF)・RFS ファームウェア(0x02000〜0x0BFFF)・ROM ファイルシステム。
SHARP_MZ80A_RFS_IMAGE_0–9.img SD カード 10 個の RFS ドライブイメージ(ドライブ 0〜9 ごとに 1 個)。
SHARP_MZ80A_RFS_CPM_IMAGE_1.img SD カード 統合 SD カードイメージ:10 個の RFS ドライブに 7 個の CP/M ディスクイメージを続けたもの。これを SD カードに直接コピーします。

Flash ROM のプログラミング

ROM イメージは TL866 または互換プログラマーを使用して SST39SF040(512 KB)Flash RAM チップに書き込みます:

# モニター ROM(RomDisk ビルド):
minipro --infoic /path/to/minipro/infoic.xml -p SST39SF040 -s -w roms/MROM_ROMDISK_256.bin

# ユーザー 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 カードイメージの書き込み

統合 SD カードイメージを dd で SD カードに直接書き込みます:

# /dev/sdX を実際の SD カードデバイスに置き換えてください:
dd if=roms/SHARP_MZ80A_RFS_CPM_IMAGE_1.img of=/dev/sdX bs=512
sync

パーティション設定は不要です。SDCFS イメージはセクター 0 から始まります。SD カードを RomDisk ボードのリーダーに挿入してください。

ROM ドライブへのアプリケーション追加

Flash ROM ドライブに保存するアプリケーションは、MZF 形式からセクターパッドされたバイナリイメージに変換する必要があります。MZF ファイルを MZF/ 以下の適切なサブディレクトリに配置し、以下を実行します:

tools/processMZFfiles.sh

これにより、すべての MZF ファイルが MZB/ に 128 バイトおよび 256 バイトセクターパッドイメージとして変換されます。これらは make_roms.sh によって自動的に取り込まれます。

各 ROM ドライブに収録するアプリケーションを選択するには、tools/make_roms.sh を編集し、addMZFToROMImageList の呼び出しを調整します。各呼び出しは 4 つのフラグ(ROMDISK ビルドに含める・SFD700 ビルドに含める・picoZ80 ビルドに含める・予約済み)とセクター化バイナリのパスを受け取ります:

# 書式:
#   addMZFToROMImageList  <ROMDISK>  <SFD700>  <picoZ80>  <予約済み>  "<MZB パス>"
#
# 例 — 全ビルドに含める:
addMZFToROMImageList 1 1 1 0 "${MZB_PATH}/Common/sa-5510_rfs.${SECTORSIZE}.bin"

# 例 — RomDisk と picoZ80 のみ:
addMZFToROMImageList 1 0 1 0 "${MZB_PATH}/MZ-80A/defender.${SECTORSIZE}.bin"

アプリケーションはリストの順番に詰め込まれ、ユーザー ROM 1 → ユーザー ROM 2 → ユーザー ROM 3 の順に格納されます。常に利用可能にしたいアプリケーションはリストの先頭に配置してください。

ビルドツールリファレンス

スクリプト / ツール 説明
build.sh トップレベルのビルドスクリプト。以下のすべての手順を順番に実行します。-m を渡すと MZF アプリケーションファイルも再処理します。
tools/assemble_rfs.sh rfs.asmrfs_mrom.asm を → roms/rfs.romroms/rfs_mrom.rom にアセンブル。
tools/assemble_cpm.sh CP/M 2.2 CBIOS とカーネルを → roms/*.rom にアセンブル。
tools/assemble_roms.sh 全モニター ROM バリアントと MZF アプリケーションバイナリをアセンブル。各パス前に include/msbasic_buildversion.asmBUILD_VERSION EQU を書き込むことで 4 種類の MS-BASIC ビルドバリアントを処理します。
tools/make_roms.sh ROM と MZF バイナリを ROMDISK・SFD700・picoZ80 ターゲット用 Flash ROM イメージにパッケージング。
tools/make_cpmdisks.sh SD カード用の RAW 形式とフロッピーエミュレータまたは物理コピー用の CPC 拡張ディスク形式で CP/M ディスクイメージを作成。
tools/make_sdcard.sh RFS ドライブイメージと CP/M ディスクイメージを 1 つの SD カードイメージに統合。
tools/processMZFfiles.sh MZF アプリケーションファイルを MZB/ に 128 バイトおよび 256 バイトセクターパッドイメージとして変換。
tools/mzftool.pl MZF 形式イメージの作成・展開・検査を行う Perl スクリプト。
tools/sdtool RFS SD カードディレクトリ構造を構築し MZF / バイナリアプリケーションを格納するバイナリツール。
tools/nasconv NASCOM カセットイメージファイルを MZ-80A ロード可能形式に変換し、MS-BASIC トークン値を必要に応じてリマップします。
tools/glass.jar 同梱の GLASS Z80 アセンブラ(Java)。3 つすべてのアセンブリスクリプトで使用。
tools/MZFD/MZFDTool MZ-700 FDC 用のフロッピーディスクイメージを作成・管理します。コマンド: format(空イメージ作成)、dir(ディレクトリ一覧)、add(MZF ファイル追加)、extract(ファイルを MZF に抽出)、boot(ブートプログラム設定)。デフォルトイメージ: MZ700.img
tools/MZQD/MZQDTool MZ-700 Quick Disk 用の QD イメージを作成・管理します。コマンド: format(空イメージ作成)、dir(ディレクトリ一覧)、add(MZF ファイル追加)。デフォルトイメージ: MZ700.qd
cpmtools/ cpmtools ソース(cpmcp・cpmls・cpmrm など)。初回ビルド時に自動コンパイルされ tools/ にインストールされます。

SD カードファイルシステム

FAT ファイルシステムの実装(2 KB および 4 KB の ROM バンクには大きすぎる)の代わりに、RFS は SD Card Filing System(SDCFS)と呼ばれる専用の簡易ファイルシステムを使用しています。初期の v1 ボードはソフトウェアビットバン SPI インターフェースを使用していましたが、v2.0 PCB でハードウェア SPI が追加され、ROM レベルのアクセス速度が実現しました。

SDCFS 構造

各 SDCFS イメージは、最大 256 ファイル分のエントリを収録した 32 バイト/エントリのディレクトリと、256 個の固定サイズファイルブロックで構成されています。10 個の SDCFS イメージ(ドライブ 0〜9)は SD カードの先頭に格納されます。SD カードの残りの領域には CP/M ディスクイメージが格納されます。
各ディレクトリエントリは標準の MZF ヘッダーに基づいています:
FLAG1 FLAG2 ファイル名 開始セクター サイズ ロードアドレス 実行アドレス 予約済み
1 バイト 1 バイト 17 バイト 4 バイト 2 バイト 2 バイト 2 バイト 3 バイト
フィールド 説明
FLAG1 ビット 7 = 1:有効なエントリ。ビット 7 = 0:無効 / 削除済み。
FLAG2 MZF 実行タイプ(0x01 = バイナリ)。
ファイル名 標準 17 文字の MZF ファイル名。
開始セクター このドライブイメージ内でファイルデータが始まる最初のセクター。
サイズ ファイルデータの実際のバイト数。
ロードアドレス ファイルデータをロードする RAM アドレス。
実行アドレス バイナリファイルの自動実行アドレス。
予約済み 現在は未使用。

各ファイルブロックは最大 CMT(テープ)ブロックサイズと一致する固定 64 KB です。これによりレイアウトがシンプルになり、テープ上のファイルとまったく同じようにファイルを読み書きできるため、透過的な SD↔CMT コピー操作が可能です。

SD カードレイアウト

アドレス    セクター   内容
00000000   00000  ┌─────────────────────────────────────────────────────────────┐
                  │  RFS ドライブ 0                                              │
00000000   00000  │  ディレクトリエントリ 000(32 バイト)                         │
                  │  ...                                                        │
00001FE0   0000F  │  ディレクトリエントリ 255(32 バイト)                         │
00002000   00010  │  ファイルブロック 0     (64 KB)                             │
                  │  ...                                                        │
00FF2000   7FF90  │  ファイルブロック 255   (64 KB)                             │
01001FFF   8000F  └─────────────────────────────────────────────────────────────┘
                  ...(RFS ドライブ 1〜8 は同じパターン)
09012000   48090  ┌─────────────────────────────────────────────────────────────┐
                  │  RFS ドライブ 9                                              │
0A013FFF   5009F  └─────────────────────────────────────────────────────────────┘
                  ... 256 MB 境界までのパディング ...
10000000   80000  ┌─────────────────────────────────────────────────────────────┐
                  │  CP/M ディスクイメージ 0   (16 MB、32 セクター × 1024 トラック)│
11000000   88000  ├─────────────────────────────────────────────────────────────┤
                  │  CP/M ディスクイメージ 1                                      │
                  │  ...                                                        │
XX000000          │  CP/M ディスクイメージ n                                      │
                  └─────────────────────────────────────────────────────────────┘

SD カード構成

リポジトリのツールでビルドされた SD カードイメージは以下の内容であらかじめ用意されています:

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 その他 / 雑多なプログラム。
CP/M ドライブ ユーザー# ディスクイメージ 内容
0 0 CPM00_SYSTEM CP/M システムプログラム
  1 CPM01_TURBOP Turbo Pascal
  2 CPM02_HI_C Hi-Soft C
  3 CPM03_FORTRAN80 Fortran 80
  4 CPM04_MBASIC Microsoft BASIC 80/85
  5–7 CPM05–07_COBOL80 Cobol v1.3、v2.0、Cobol 80
  8 CPM08_Z80FORTH Z80 Forth
  9 CPM09_CPMTEX CP/M TeX
  10 CPM10_DISKUTILFUNC5 ディスクユーティリティ
  11 CPM11_MAC80 Macro Assembler 80
  12 CPM29_ZSID_v14 ZSID デバッガー
  13–14 CPM32–33_ZCPR3 ZCPR3 CCP 拡張
1 0 CPM12_PASCALMTP_v561 Pascal v5.61
  1 CPM26_TPASCAL_v300a Turbo Pascal v3.00a
  2–11 CPM13–22_MTPUG_01–10 Pascal User Group ディスク 01〜10
2 0–2 CPM23–25_PLI / PLI80 PLI コンパイラ、PLI 80 v1.3、v1.4
  3 CPM28_PLM80 PLM 80
  4–6 CPM27,30,31_WORDSTAR WordStar v3.0、v3.3、v4.0
3–6 0–9 CPM_MC_C0–F9 Grant Searle CP/M コレクションディスク C0〜F9

マニュアル

ROM Filing System の詳細なドキュメントは 3 冊の別冊マニュアルとして提供されています:
マニュアル 説明
ユーザーマニュアル RFS の入手方法、モニターコマンドリファレンス、SD ドライブの使用方法、BASIC、CP/M、トラブルシューティング
テクニカルガイド ハードウェアプラットフォーム、メモリアーキテクチャ、バンク切り替え、SDCFS 設計、CP/M CBIOS、完全なビルドシステムリファレンス
デベロッパーズガイド Z80 アセンブリ入門、完全なソースモジュールの解説(バンク切り替えの内部動作を含む)、新コマンドや新ハードウェアターゲットの追加ガイド

クレジット

サードパーティの設計に基づいているか派生したコンポーネントについては、関連するソースファイルのヘッダーにオリジナル作者の著作権表示を含めています。サードパーティのソフトウェアはすべて、知る限りオープンソースで自由に使用可能です。もし何らかのコンポーネントにライセンス上の制限が発見された場合は、当該コンポーネントを削除し、代わりに適切なリンクを提供します。

ライセンス

本設計(ハードウェアおよびソフトウェア)は GNU Public Licence v3 のもとでライセンスされています。

本設計または任意のハードウェア/ファームウェアコンポーネントの商業利用は、作者の明示的な許可なしに行うことはできません。この条件は GNU GPL 3 ライセンスが付与するいかなる権利にも優先します。

GNU Public License v3

本プロジェクト中で GPL v3 と表記されているソースファイルおよびバイナリファイルはフリーソフトウェアです。Free Software Foundation が発行する GNU 一般公衆利用許諾書(バージョン 3 またはそれ以降のバージョン)の条件のもとで、再配布および改変することができます。

ソースファイルは有用であることを期待して配布されていますが、商品性や特定目的への適合性に関する保証を含め、いかなる保証も行いません。詳細については GNU 一般公衆利用許諾書をご参照ください。

本プログラムとともに GNU 一般公衆利用許諾書のコピーを受け取っているはずです。受け取っていない場合は http://www.gnu.org/licenses/ をご覧ください。