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 ロード・フロッピーブートを提供します。
  • tranZPUter FusionX — FPGA ベースの Z80 強化ボード。RFS はその Flash ROM 空間内で動作します。
  • picoZ80 — Raspberry Pi Pico ベースの Z80 代替/エミュレーターボード。picoZ80 では、RFS はホストに提示されるマシンペルソナのもとで動作します。MZ-80A に加えて、現在は Sharp MZ-80K も含まれており、MZ-80A と同じ Sharp インターフェースカード(RFS、MZ80AFI、MZ-1E14/E19、MZ-1R12/R18/R37、PIO-3034)に加え、独自のネイティブな MZ-80FD(T3444M)フロッピーコントローラを使用できます。

RFS モニター

起動時には使い慣れた SA-1510 サインオンバナーが表示され、ファイリングシステムの初期化が成功した場合には "+ RFS" が末尾に付加されます。オリジナルの SA-1510 コマンドセットは拡張コマンドのセットとともに完全に利用可能です。一部の拡張コマンド(SD カード操作・ドライブ選択)は RomDisk / picoZ80 ビルドのみで使用可能です。組み込みの Z80 アセンブラと逆アセンブラはすべてのビルドで利用可能です。
完全なコマンドセットを以下に示します。(R) と表記されたコマンドは RomDisk / picoZ80 ビルドのみで利用可能です。
コマンド パラメータ 説明
0 .. 9 (R) アクティブな RFS SD カードドライブを選択(0〜9)。
40 (R) 40 桁表示モードに切り替え(Kuma 40/80 アップグレードまたはビデオモジュールが必要)。
80 (R) 80 桁表示モードに切り替え(Kuma 40/80 アップグレードまたはビデオモジュールが必要)。
ASM <address> インタラクティブ 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 <addr> [<addr2>] <addr> から <addr2> までの Z80 マシンコードを逆アセンブルします。
DUC (R) [H|T] <name> or <file no.> SD カードファイルの内容をダンプします。デフォルト:16 進ダンプ。DUCH:MZF ヘッダー情報(ロードアドレス・実行アドレス・サイズ)付きの 16 進ダンプ。DUCT:テキストダンプ(印字可能 ASCII のみ)。
EC (R) <name> or <file no.> アクティブな SD カードドライブからファイルを名前またはファイル番号で削除します。
F / FL [<drive>] 指定したフロッピードライブからブートします。省略した場合はドライブ番号の入力が求められます。
FD [<drive>] フロッピーディスクのディレクトリ一覧を表示します。オプションのドライブ番号でドライブ 1〜4 を選択します(デフォルト:1)。
FC <start> <end> <exec> メモリ範囲をフロッピーディスクファイルに保存します。
FD2T <name> or <file no.> フロッピーディスクからテープにファイルをコピーします。
T2FD テープからロードしてフロッピーディスクに保存します。
f 0xF000 のオリジナルフロッピー AFI ブートコードを実行します。
H コマンドヘルプ画面を表示します(ページ単位、スペースキーで継続)。
IC (R) アクティブな SD カードドライブのファイルをページ単位でディレクトリ一覧表示します。各エントリには 16 進ファイル番号とファイル名が表示されます。
IN <port>[,<port>…] 1 つ以上の I/O ポートを読み取ります。各ポートは 2 桁または 4 桁の 16 進アドレスです。値は 2 桁の 16 進数でスペース区切りで表示されます。
IR Flash ROM ドライブに保存されているプログラムをページ単位でディレクトリ一覧表示します。
J <address> 指定アドレスへジャンプ(実行)します。
L | LT [<filename>] テープ(CMT)からファイルをロードして実行します。
LTNX [<filename>] テープ(CMT)からファイルをロードします(実行しません)。
LR <name> or <file no.> ROM からプログラムを名前またはファイル番号でロードして実行します。
LRNX <name> or <file no.> ROM からプログラムを名前またはファイル番号でロードします(実行しません)。
LC (R) <name> or <file no.> SD カードからプログラムをロードして実行します。
LCNX (R) <name> or <file no.> SD カードからプログラムをロードします(実行しません)。
M <address> <address> から始まるインタラクティブメモリエディタを起動します。
OUT <port>:<value>[,<port>:<value>…] 1 つ以上の I/O ポートに書き込みます。各ポートは 2 桁または 4 桁の 16 進アドレスに続けてコロンと 2 桁の 16 進値を指定します。
P 接続されたプリンターのテストを実行します。
R DRAM メモリテストを実行します。
S | ST <start> <end> <exec> メモリ範囲をテープ(CMT)に保存します。ファイル名の入力が求められます。例:S120020001203 は 0x1200〜0x2000 を実行アドレス 0x1203 で保存します。
SC (R) <start> <end> <exec> メモリ範囲をアクティブな SD カードドライブに保存します。ファイル名の入力が求められます。
SD2T (R) <name> or <file no.> 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 を介して移植されました。この CBIOS は、オリジナル(未変換)の MZ-80K CP/M ディスクを MZ80AFI フロッピーカード経由で自動検出して読み取り、CP/M ドライブ C: および D: として直接マウントできるようにもなりました。詳細は RFS 向け CP/M ガイドを参照してください。

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 "<filename>" MZ-80A カセットからトークン化された BASIC プログラムをロードします。
CSAVE "<filename>" MZ-80A 現在の BASIC プログラムをトークン化形式でカセットに保存します。
CLOAD "[<drive>:]<filename>" RFS40, RFS80 テープまたは SD カードからロードします。<drive> は 0〜9;<filename> は 17 文字の MZ 名または 2 桁の RFS 16 進番号。例:CLOAD "8:13" または CLOAD "8:othello"
CSAVE "[<drive>:]<filename>" RFS40, RFS80 オプションのドライブ修飾子付きでテープまたは SD カードに保存します。
DIR "[<drive>:]" 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

Required:
  -i | --image  <file>   Cassette image file to convert.
  -o | --output <file>   Output file for converted BASIC data.

Options:
  -l | --loadaddr <addr> MZ-80A BASIC start address.
  -n | --nasaddr  <addr> Original NASCOM BASIC start address.
  -h | --help            Show this help.
  -v | --verbose         Verbose output.

Example:
  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」というタイトルで起動します。この BASIC は picoZ80 の MZ-1500 ペルソナでも動作し、NETx: ネットワークアクセスを含む同じデバイスサポートを提供します。ファイル名にデバイスプレフィックスを使用して、対応するすべてのデバイスにわたってプログラムをロード・保存・一覧表示できます。
コマンド パラメータ 説明
LOAD "RFSx:filename" RFS SD カードドライブ x(1〜7、SD ドライブ 4〜10 にマップ)から BASIC プログラムをロードします。
SAVE "RFSx:filename" 指定した RFS SD カードドライブに現在の BASIC プログラムを保存します。
DIR RFSx: 指定した RFS SD カードドライブのディレクトリ一覧を表示します。
LOAD "FDx:filename" フロッピーディスクドライブ x から BASIC プログラムをロードします。
SAVE "FDx:filename" フロッピーディスクドライブ x に現在の BASIC プログラムを保存します。
DIR FDx: フロッピーディスクのディレクトリ一覧を表示します。
LOAD "QDx:filename" Quick Disk ドライブ x から BASIC プログラムをロードします。
SAVE "QDx:filename" Quick Disk ドライブ x に現在の BASIC プログラムを保存します。
DIR QDx: Quick Disk のディレクトリ一覧を表示します。
LOAD "NETx:filename" ネットワークファイルサーバーユニット x(1〜7)から BASIC プログラムをロードします。Celestite ボードと PC 上で実行中の netfs.py が必要です。
SAVE "NETx:filename" ネットワークファイルサーバーユニット x に現在の BASIC プログラムを保存します。
DIR NETx: ネットワークファイルサーバーユニット x のディレクトリ一覧を表示します。
LOAD "CMT:filename" カセットテープから BASIC プログラムをロードします。
SAVE "CMT:filename" カセットテープに現在の BASIC プログラムを保存します。

BASIC MZ-2Z009E(Floppy Disk)

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

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

0xE800 のユーザー ROM 空間は 2 KB バンクに分割されており、各バンクにはバンク切り替えスタブのコピーが含まれているため、任意のバンクから他のいずれのバンクのコードでも実行フローを乱さずに呼び出すことができます。RFS は 12 個のユーザー ROM バンク(0〜11、24 KB)を占有し、さらに 4 個のバンク(12〜15)が CP/M CBIOS を保持します。0xC000 / 0xF000 のモニター ROM 空間は 16 × 4 KB ページに分割されており、そのうち 3 つ(バンク 6・7・9)が RFS 専用で、Z80 アセンブラ/逆アセンブラのオペコードテーブルとメッセージ文字列を保持します。バンク切り替えされた ROM を合わせると、RAM を一切消費せずに 32 KB のユーザー ROM と 64 KB のモニター ROM プログラム空間が提供されます。
以下の表に、すべてのソースモジュール、そのターゲット ROM、バンク、機能を示します:
モジュール ターゲット ROM サイズ バンク 説明
rfs.asm ユーザー 2 KB 0 RFS のプライマリエントリポイント、コマンドディスパッチャーとコマンドテーブル。全バンクで共有されるバンク切り替えインフラを含む。
rfs_bank1.asm ユーザー 2 KB 1 フロッピーディスクコントローラー(FDC)機能。ドライブ選択・ブート・フロッピーコピー(FC)・フロッピーからテープ(FD2T)・テープからフロッピー(T2FD)を処理。
rfs_bank2.asm ユーザー 2 KB 2 SD カードコントローラ。SPI ドライバ、SD カード初期化、SDCFS ディレクトリとファイルの読み書き。
rfs_bank3.asm ユーザー 2 KB 3 モニターメモリユーティリティ:16 進ダンプ、メモリ編集、メモリコピー、SD カードファイルダンプ(DUC)、I/O ポート読み書き(IN / OUT)、テープ↔SD コピー(T2SD / SD2T)、プリンターテスト。
rfs_bank4.asm ユーザー 2 KB 4 CMT(カセット)コントローラ:テープのロード・保存・検証。
rfs_bank5.asm ユーザー 2 KB 5 汎用ユーティリティ関数:書式付き印刷、文字列ルーチン、共有ヘルパーコード。
rfs_bank6.asm ユーザー 2 KB 6 Z80 アセンブラ/逆アセンブラのオペコードテーブル 1、PRINTMSG 関数、メッセージ文字列インフラ。
rfs_bank7.asm ユーザー 2 KB 7 Z80 アセンブラ/逆アセンブラのオペコードテーブル 2、Z80 逆アセンブラ(DASM)、DRAM メモリテスト、8253 タイマーテスト。
rfs_bank8.asm ユーザー 2 KB 8 Z80 インタラクティブアセンブラ(ASM)。
rfs_bank9.asm ユーザー 2 KB 9 ROM ディレクトリ、ファイル検索、ロード、印刷関数(空き領域確保のためバンク 0 から移動)。
rfs_bank10.asm ユーザー 2 KB 10 予約済み / 空き。
rfs_bank11.asm ユーザー 2 KB 11 ヘルプ画面。
cbios_bank1.asm ユーザー 2 KB 12 CP/M CBIOS:オーディオ関数、RTC、キーボード、低レベルユーティリティ。
cbios_bank2.asm ユーザー 2 KB 13 CP/M CBIOS:スクリーンドライバーと ANSI ターミナルエミュレーション。
cbios_bank3.asm ユーザー 2 KB 14 CP/M CBIOS:SD カードドライバー(CP/M ドライブ A:〜G: を提供)。
cbios_bank4.asm ユーザー 2 KB 15 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 モニター。
rfs_mrom_bank6.asm モニター 4 KB 6 Z80 アセンブラ/逆アセンブラのオペコードテーブル 1(MROM コピー)。
rfs_mrom_bank7.asm モニター 4 KB 7 Z80 アセンブラ/逆アセンブラのオペコードテーブル 2(MROM コピー)。
ipl.asm モニター 4 KB 8 初期プログラムローダー(IPL)。
rfs_mrom_bank9.asm モニター 4 KB 9 RFS メッセージ文字列リポジトリ。

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

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

ビルドシステム

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

RFS をビルドする推奨方法は、お使いのプラットフォーム向けの自動セットアップスクリプトです(下記の 自動セットアップとビルド を参照)。これは必要な少数の外部ツールをインストールし、コンテンツを取得し、環境を準備して初回ビルドまで実行できるため、ツールや設定の詳しい知識は不要です。以降の手動手順は、上級者および部分的な再ビルド向けです。

前提条件

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

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

自動セットアップとビルド(推奨)

RFS をビルドする推奨方法は、お使いのプラットフォーム向けの自動セットアップスクリプトです。前提条件の確認とインストール、リポジトリのクローン(すでにチェックアウト内にいる場合を除く)、コンテンツイメージのダウンロード、環境ファイルの書き込みを行い、初回ビルドの実行も提案します — すべて対話式で、Enter を押すだけで受け入れられる妥当なデフォルト付きです。各スクリプトは自己完結型です。お使いのプラットフォーム向けのファイル 1 つだけをコピーして実行してください。

macOS / Linux / WSL — setup_RFS.sh

chmod +x setup_RFS.sh
./setup_RFS.sh

Windows 10 / 11 — setup_RFS_windows_native.ps1 (推奨 — ネイティブ、WSL 不要)。PowerShell プロンプトから:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_RFS_windows_native.ps1

ネイティブスクリプトは winget を使用して Git for Windows(bash、coreutils、perl、curl を提供)と Temurin JRE(Java、GLASS アセンブラ用)をインストールし、リポジトリをクローンし、コンテンツバンドルを取得し、Git Bash を通じて ./build.sh を実行します — WSL、Docker、再起動は不要です。2 つのビルド済みホストツール(tools/cpmcp.exetools/sdtool.exe)がバンドルされているため、Windows では RFS のビルドに C コンパイラは必要ありません。

Windows 10 / 11 — setup_RFS_windows.ps1 (代替 — WSL2 / Ubuntu 内でビルドします)管理者 PowerShell から:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_RFS_windows.ps1

この WSL バリアントは WSL2 + Ubuntu が未導入の場合はインストールします(この際、一度だけ再起動が必要です — 再起動し、スタートメニューから Ubuntu を一度起動して Linux のユーザー名/パスワードを作成してから、スクリプトを再実行してください)。その後、Ubuntu 内で setup_RFS.sh を実行します。特に WSL 環境が必要な場合を除き、上記のネイティブスクリプトを推奨します。

セットアップが尋ねる質問と対応方法

各プロンプトには角括弧内に安全なデフォルトが表示されます — 大文字のほうがデフォルトなので、Enter を押すと受け入れられます。プロンプトは以下の順で表示されます:

Windows のみ(PowerShell で、Linux セットアップが実行される前):

プロンプト デフォルト 対応方法
Continue anyway? [y/N]管理者として起動していない場合のみ) No N と答え、管理者として実行で PowerShell を開き直してやり直してください — WSL のインストールには管理者権限が必要です。
Install WSL2 + Ubuntu now? [y/N](WSL / Ubuntu が未導入の場合のみ) No y と答えます。Windows が WSL2 + Ubuntu をインストールし、再起動を求めます。再起動後、Ubuntu を一度起動して Linux ユーザーを作成してから、スクリプトを再実行してください。
Repo URL [https://git.eaw.app/eaw/RFS.git] public repo 公開 RFS リポジトリの場合は Enter、別の URL(例:非公開の開発リポジトリ)を使う場合は貼り付けます。

macOS / Linux / WSL(Linux / Ubuntu シェルで):

プロンプト デフォルト 対応方法
Install now? [Y/n](ツールが不足している場合のみ) Yes Enter を押します。スクリプトがお使いのパッケージマネージャ(apt / dnf / pacman、macOS では Homebrew)で不足ツールをインストールします。sudo パスワードを求められることがあります。macOS では最初に Xcode コマンドラインツールのインストーラを起動し、Homebrew が必要です。
Repo URL [https://git.eaw.app/eaw/RFS.git]:(すでにチェックアウト内にいる場合を除く) public repo 公開リポジトリの場合は Enter、非公開リポジトリの URL を使う場合は貼り付けます。(Windows ではスキップ — PowerShell のステップですでに選択済みです。)
Install directory [~/RFS]:(クローン時のみ) ~/RFS ~/RFS にクローンする場合は Enter、別のパスを使う場合は入力します。
Remove <dir> and re-clone …? [y/N](そのディレクトリにすでに別のリポジトリがある場合のみ) No そのディレクトリを削除して再クローンしてよいと確信している場合のみ y。そうでなければ N として、別のインストールディレクトリを選んでください。
Download and install them now? [Y/n](コンテンツイメージ、約 110 MB) Yes Enter を押して RFS_Files.zip から MZF / ディスク / CP/M / BASIC コンテンツをダウンロードします — フルビルドに必要です。隣接する SharpSoft チェックアウトですでに持っている場合のみ n と答えてください。
Run the first build now (./build.sh -m …)? [Y/n] Yes Enter を押すとすぐにビルドします — これで環境全体を検証できます。初回ビルドは -m を使って MZF ソースを MZB/ に処理するため、以降のビルドより時間がかかります。

sudo パスワード(パッケージインストール)や、非公開リポジトリを選んだ場合は git の認証情報も求められることがあります。

セットアップ後 — 再ビルド

セットアップが完了するとチェックアウトのパスが表示されます。後で再ビルドするには:

cd ~/RFS                 # or the directory you chose
source ./rfs_env.sh      # macOS only (adds GNU coreutils + the JRE to PATH); harmless elsewhere
./build.sh -m            # FIRST build: process MZF -> MZB, then build everything
./build.sh               # subsequent builds (re-run -m only when MZF sources change)
./build.sh -h            # list variants and options

Windows では、Ubuntu ターミナルを開き(スタートメニュー →「Ubuntu」、または PowerShell で wsl と入力)、~/RFS 内で同じコマンドを実行します。ROM イメージは ~/RFS/roms に生成されます。

build.sh はデフォルトですべてのハードウェアバリアントをビルドします。1 つ以上のバリアント名(sfd700romdisk_mz80apicoz80_mz80apicoz80_kumapicoz80_mz700picoz80_mz1500picoz80_mz80k、または all)を渡すと、それらのみをビルドします。バリアントを選択するとすべてが自動的に設定され、ソースの編集は不要です。オプション:-m(MZF を処理)・-s(共有アセンブリをスキップ)・-c(クリーン)・-v(詳細)・-h(ヘルプ)。

上級:ビルドターゲットフラグ

ほとんどのビルドではこのセクションは不要です — 上記の build.sh でバリアントを選択すると、すべてが自動的に設定されます。その内部メカニズムは asm/include/rfs_definitions.asm 内のフラグ群で、特定のターゲットに対して以下のうち正確に 1 つだけが 1(その他はすべて 0)に設定されます。これは build.sh がバリアントごとに行います。カスタム構成の場合のみ、手動で編集してください:

フラグ ターゲット 説明
BUILD_ROMDISK RomDisk カード 4×512 KB Flash RAM + SDXC カード拡張搭載の MZ-80A。
BUILD_SFD700 SFD-700 Sharp フロッピーディスクインターフェースボード。SD カードなし。
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 アセンブル時のデバッグログを有効化。

手動ビルドと build.sh の動作

セットアップスクリプトを使いたくない場合(または CI ビルドをスクリプト化する場合)は、直接クローンしてビルドできます — その場合も前提条件をインストール済みである必要があり、新規の単独クローンでは自分でコンテンツイメージを取得する必要があります(または、それを代行してくれる setup_RFS.sh を実行してください):

git clone --recurse-submodules https://git.eaw.app/eaw/RFS.git
cd RFS

# Full build (assembles all ROMs, packages ROM images, builds SD card image):
./build.sh

# Full build including re-processing all MZF application files
# (only needed when MZF source files in MZF/ have changed):
./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 イメージ。SA-1510・80c SA-1510・CP/M CBIOS・RFS mrom ユーティリティ・1Z-013A モニター・アセンブラ/逆アセンブラのオペコードテーブル・IPL・メッセージ文字列を 16×4 KB ページにわたって収録。
MROM_PICOZ80_256.bin SST39SF040(モニター ROM) picoZ80 ビルド用モニター ROM イメージ(バンク順は ROMDISK と異なる)。
USER_ROM_256.bin SST39SF040(ユーザー ROM 1) ユーザー ROM 1:RFS バンク 0〜11・CP/M CBIOS バンク 12〜15・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 チップに書き込みます:

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

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

# Replace /dev/sdX with your SD card device:
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 ファイルが 128 バイトおよび 256 バイトのセクターパッドイメージに変換され、MZB/ に保存されます。これらは make_roms.sh によって自動的に取り込まれます。

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

# Format:
#   addMZFToROMImageList  <ROMDISK>  <SFD700>  <picoZ80>  <reserved>  "<MZB path>"
#
# Example — include in all builds:
addMZFToROMImageList 1 1 1 0 "${MZB_PATH}/Common/sa-5510_rfs.${SECTORSIZE}.bin"

# Example — RomDisk and picoZ80 only:
addMZFToROMImageList 1 0 1 0 "${MZB_PATH}/MZ-80A/defender.${SECTORSIZE}.bin"

アプリケーションはリストに記載された順に詰め込まれ、まずユーザー ROM 1、次にユーザー ROM 2 と 3 が埋められます。常に利用可能にしたいアプリケーションはリストの先頭に配置してください。

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

スクリプト / ツール 説明
build.sh トップレベルのビルドスクリプト。以下のすべての手順を順番に実行します。-m を渡すと MZF アプリケーションファイルも再処理します。
tools/assemble_rfs.sh rfs.asmrfs_mrom.asmroms/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 FILE NAME START SECTOR SIZE LOAD ADDR EXEC ADDR RESERVED
1 バイト 1 バイト 17 バイト 4 バイト 2 バイト 2 バイト 2 バイト 3 バイト
フィールド 説明
FLAG1 ビット 7 = 1:有効なエントリ。ビット 7 = 0:無効 / 削除済み。
FLAG2 MZF 実行タイプ(0x01 = バイナリ)。
FILE NAME 標準 17 文字の MZF ファイル名。
START SECTOR このドライブイメージ内でファイルデータが始まる最初のセクター。
SIZE ファイルデータの実際のバイト数。
LOAD ADDR ファイルデータをロードする RAM アドレス。
EXEC ADDR バイナリファイルの自動実行アドレス。
RESERVED 現在は未使用。

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

SD カードレイアウト

ADDRESS    SECTOR   CONTENT
00000000   00000  ┌─────────────────────────────────────────────────────────────┐
                  │  RFS DRIVE 0                                                │
00000000   00000  │  Directory entry 000 (32 bytes)                             │
                  │  ...                                                        │
00001FE0   0000F  │  Directory entry 255 (32 bytes)                             │
00002000   00010  │  File block 0     (64 KB)                                   │
                  │  ...                                                        │
00FF2000   7FF90  │  File block 255   (64 KB)                                   │
01001FFF   8000F  └─────────────────────────────────────────────────────────────┘
                  ...  (RFS drives 1–8 follow the same pattern)
09012000   48090  ┌─────────────────────────────────────────────────────────────┐
                  │  RFS DRIVE 9                                                │
0A013FFF   5009F  └─────────────────────────────────────────────────────────────┘
                  ... padding to 256 MB boundary ...
10000000   80000  ┌─────────────────────────────────────────────────────────────┐
                  │  CP/M DISK IMAGE 0   (16 MB, 32 sectors × 1024 tracks)     │
11000000   88000  ├─────────────────────────────────────────────────────────────┤
                  │  CP/M DISK IMAGE 1                                          │
                  │  ...                                                        │
XX000000          │  CP/M DISK IMAGE 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/ をご覧ください。

</div>