ROMファイリングシステム (RFS)
概要
* プロンプトを持つオリジナル 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 モニター
+ 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 BASIC SA-5510
| コマンド | パラメータ | 説明 |
|---|---|---|
| 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
- 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 カセットイメージコンバーター
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)
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)
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 のディレクトリ一覧を表示します。 |
ソフトウェアアーキテクチャ
| モジュール | ターゲット 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.asm の KUMA80_ENA フラグで選択)、および DRAM が 0x0000〜0xCFFF の全範囲を埋める必要がある場合に使用する SA-1510 と 80 桁 SA-1510 のハイロードバリアント。
ビルドシステム
RFS をビルドする推奨方法は、お使いのプラットフォーム向けの自動セットアップスクリプトです(下記の 自動セットアップとビルド を参照)。これは必要な少数の外部ツールをインストールし、コンテンツを取得し、環境を準備して初回ビルドまで実行できるため、ツールや設定の詳しい知識は不要です。以降の手動手順は、上級者および部分的な再ビルド向けです。
前提条件
| ツール | 備考 |
|---|---|
| Java(JRE 8 以上) | GLASS Z80 アセンブラの実行に必要。java が PATH に含まれている必要があります。 |
| bash | すべてのビルドスクリプトは bash 用です。 |
| perl | mzftool.pl に必要。 |
| gcc / make | cpmtools をソースからコンパイルするために必要(初回ビルド時に自動実行)。 |
| dd, cat, stat | パッケージングスクリプトで使用される標準 Linux ユーティリティ。 |
GLASS Z80 アセンブラ(glass.jar)は tools/ ディレクトリに同梱されており、別途インストールは不要です。
自動セットアップとビルド(推奨)
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.exe と tools/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 つ以上のバリアント名(sfd700・romdisk_mz80a・picoz80_mz80a・picoz80_kuma・picoz80_mz700・picoz80_mz1500・picoz80_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 は以下の手順を順番に実行します:
cpmtoolsをソースからコンパイルし(初回のみ)、結果をPATHに追加。tools/assemble_rfs.sh—rfs.asmとrfs_mrom.asmをroms/rfs.romとroms/rfs_mrom.romにアセンブル。tools/assemble_cpm.sh— CP/M 2.2 CBIOS(cbios.asm・cbios_bank1–4.asm・cpm22.asm)をroms/*.romにアセンブル。tools/assemble_roms.sh— 全モニターバリアント(SA-1510・80c SA-1510・1Z-013A・ハイロードバリアント・Kuma バージョン・IPL)と MZF アプリケーションファイル(SA-5510・MS-BASIC バリアントなど)をroms/とMZB/にアセンブル。tools/make_roms.sh— アセンブルされた ROM と MZF アプリケーションを Flash ROM イメージにパッケージング(下記「出力ファイル」参照)。tools/make_cpmdisks.sh— プリポピュレートされた各 CP/M ドライブセット用に、RAW 形式と CPC 拡張ディスク形式で CP/M ディスクイメージをビルド。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.asm と rfs_mrom.asm → roms/rfs.rom・roms/rfs_mrom.rom にアセンブル。 |
tools/assemble_cpm.sh |
CP/M 2.2 CBIOS とカーネル → roms/*.rom にアセンブル。 |
tools/assemble_roms.sh |
全モニター ROM バリアントと MZF アプリケーションバイナリをアセンブル。各パスの前に include/msbasic_buildversion.asm へ BUILD_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 カードファイリングシステム
SDCFS 構造
| 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 |
マニュアル
| マニュアル | 説明 |
|---|---|
| ユーザーマニュアル | RFS の入手方法、モニターコマンドリファレンス、SD ドライブの使用方法、BASIC、CP/M、トラブルシューティング |
| テクニカルガイド | ハードウェアプラットフォーム、メモリアーキテクチャ、バンク切り替え、SDCFS 設計、CP/M CBIOS、完全なビルドシステムリファレンス |
| デベロッパーズガイド | Z80 アセンブリ入門、完全なソースモジュールの解説(バンク切り替えの内部動作を含む)、新コマンドや新ハードウェアターゲットの追加ガイド |
クレジット
ライセンス
本設計または任意のハードウェア/ファームウェアコンポーネントの商業利用は、作者の明示的な許可なしに行うことはできません。この条件は GNU GPL 3 ライセンスが付与するいかなる権利にも優先します。
GNU Public License v3
ソースファイルは有用であることを期待して配布されていますが、商品性や特定目的への適合性に関する黙示的な保証を含め、いかなる保証も行いません。詳細については GNU 一般公衆利用許諾書をご参照ください。
本プログラムとともに GNU 一般公衆利用許諾書のコピーを受け取っているはずです。受け取っていない場合は http://www.gnu.org/licenses/ をご覧ください。
</div>