ROMファイリングシステム (RFS) — テクニカルガイド

RFS テクニカルガイド

このガイドは、Rom Filing System のハードウェア統合、メモリアーキテクチャ、ソフトウェアモジュールレイアウト、SD カードファイリングシステムの設計、CP/M の実装、および完全なビルドシステムを文書化します。システムレベルで RFS の仕組みを理解したい、RFS を新しいハードウェアに移植したい、またはソースからフルビルドを実行したいユーザーを対象としています。
日常的な使用方法とモニターコマンドリファレンスについては ユーザーマニュアル を参照してください。Z80 アセンブリソースコードの解説については デベロッパーズガイド を参照してください。

ハードウェアプラットフォーム

RFS は 4 種類のハードウェアプラットフォームをターゲットとしています。各プラットフォームは asm/include/rfs_definitions.asm のフラグによってコンパイル時に選択されます。生成されるバイナリイメージはバンクレイアウト、機能セット、使用される ROM アドレスが異なります。

RomDisk カード
最も能力の高い RFS のオリジナルターゲット。RomDisk 基板は Sharp MZ-80A 拡張スロットに差し込み、以下を提供します:
  • 最大 4 × 512 KB SST39SF040 Flash RAM — モニター ROM を置き換え、3 個のユーザー ROM チップを提供し、最大 2 MB の Flash ベース ROM ストレージを実現します。
  • 512 KB スタティック RAM — 追加のページドワークスペースとして使用可能(将来の使用向け)。
  • SDXC カードリーダー(v2+ ボードではハードウェア SPI インターフェース、v1 ボードではプリンターパラレルポート経由のソフトウェアビットバン SPI)。
  • コード化ラッチ(v2.0+ ボード)— バンク制御レジスターを保護します。ラッチはユーザー ROM アドレス範囲の上位 8 バイト(0xEFF8〜0xEFFF)への固定シーケンスの読み取り後にのみ開き、通常動作中の偶発的なバンク切り替えを防止します。
モニター ROM チップ(MZ-80A では 0x0000〜0x0FFF)は、512 KB チップ全体への 4 KB ウィンドウとして表示されるようにソケットアダプターされたページド Flash RAM ソケットに置き換えられます。同様にユーザー ROM(0xE800〜0xEFFF)はページド 2 KB ウィンドウに置き換えられます。

SFD-700 フロッピーインターフェース
SFD-700 mkII フロッピーディスクインターフェースカードには 512 KB Flash ROM が含まれています。RFS はフロッピー AFI ブートコードとともにこの Flash ROM のページを占有します:
  • 0x00000〜0x00FFF — MZ-80A AFI フロッピーブート ROM(オリジナル、2 MHz DRQ トリック用に必要)。
  • 0x01000〜0x01FFF — MZ-700 AFI フロッピーブート ROM。
  • 0x02000〜0x0BFFF — RFS ファームウェア(10 × 2 KB ユーザー ROM バンク、ユーザー ROM バンク 0〜4 に相当)。
  • 0x0C000 以降 — ROM ファイルシステム(MZF イメージとして保存されたプログラム)。
SFD-700 ビルドでは、ユーザー ROM コードは 0xE000 から始まり 0xE300 に揃えてアセンブルされます(MZ-700 メモリマップド I/O 範囲を考慮)。SD カードはなく、SD カードコマンドはこのビルドから除外されます。

picoZ80
picoZ80 ボード(RP2350 ベースの Z80 交換)は MZ-80A の完全なメモリマップを PSRAM と Flash でエミュレートします。RFS はエミュレートされた ROM 空間内で動作し、RomDisk ビルドと同じバンクアドレスを使用します。picoZ80 は独自の SPI 接続 SD カードストレージを提供するため、完全な RomDisk 機能セット(SD カードドライブ、テープ↔SD コピーなど)が使用できます。

RFS は picoZ80 がホストに提示するマシンペルソナのもとで動作します。MZ-80A に加えて、これには Sharp MZ-80K ペルソナが含まれるようになりました。これは MZ-80A と同じ Sharp インターフェースカード(RFS、MZ80AFI、MZ-1E14/E19、MZ-1R12/R18/R37、PIO-3034)に加え、独自のネイティブ MZ-80FD(T3444M)フロッピーコントローラーをバインドできます。MZ80AFI カードを使用すると、RFS の CP/M CBIOS はオリジナルの MZ-80K CP/M ディスク(128 バイトセクター、非反転)を自動検出し、CP/M ドライブ C:/D: としてマウントします。

メモリアーキテクチャ

Sharp MZ-80A の Z80 CPU は 64 KB のメモリをアドレス指定します。RFS はファームウェア全体を 2 つの ROM ウィンドウに収め、RAM を一切消費しないため、ユーザープログラム用に 0x1200〜0xCFFF の範囲をすべて解放します。

Z80 アドレス空間レイアウト
Address     Size    Contents
─────────────────────────────────────────────────────────────────────
0x0000      4 KB    Monitor ROM (MROM)  — 4 KB window into 512 KB Flash
                    Paged across 16 banks:
                      banks 0–5 = monitor variants + CP/M CBIOS + RFS mrom utils,
                      banks 6–7 = ASM/DASM opcode tables,
                      bank 8 = IPL, bank 9 = RFS message strings,
                      banks 10–15 = reserved
0x1000      256 B   MZ-80A system variables / stack
0x1200    ~46 KB    User RAM  (main program area)
0xCFFF
0xD000      12 KB   Video RAM + memory-mapped I/O (MZ-80A hardware)
0xE800       2 KB   User ROM (UROM) — 2 KB window into 512 KB Flash
                    Paged: banks 0–11 = RFS modules,
                           banks 12–15 = CP/M CBIOS banks
                    Note: on the SFD-700 build the UROM window starts at
                    0xE300 (0xE000–0xE2FF is MZ-700 memory-mapped I/O).
                    The command table (CMDTABLE2) is placed at 0xE300 and
                    the main bank code remains at 0xE800 as on other builds.
0xEFFF
0xF000       4 KB   Floppy AFI ROM / FDC ROM (SFD-700 MROM location)
─────────────────────────────────────────────────────────────────────

モニター ROM バンク(各 4 KB)
0x0000〜0x0FFF のモニター ROM ウィンドウは、モニター ROM Flash チップに格納された 16 ページをバンク切り替えします。このうち 3 ページ(バンク 6、7、9)が RFS 専用で、それぞれ Z80 アセンブラー/ディスアセンブラーのオペコードテーブルとメッセージ文字列を保持します:
バンク モジュール 説明
0 monitor_sa1510.asm オリジナル SA-1510 モニター ROM — 40 列。電源投入時のデフォルトバンク。
1 monitor_80c_sa1510.asm 80 列表示用にパッチされた SA-1510(Kuma アップグレードが必要)。
2 cbios.asm CP/M 2.2 CBIOS カーネル — CP/M ブート中にここに再配置されます。
3 rfs_mrom.asm RFS モニター ROM ユーティリティ。ユーザー ROM コードは自分自身をページアウトできないため、ユーザー ROM Flash に保存された MZF ファイルをスキャンしてロードするために MROM 空間から実行されます。
4 monitor_1z-013a.asm MZ-1Z-013A モニター(MZ-700 / MZ-1200 バリアント)。
5 monitor_80c_1z-013a.asm 80 列表示用にパッチされた 1Z-013A モニター。
6 rfs_mrom_bank6.asm Z80 アセンブラー/ディスアセンブラーのオペコードテーブル 1。
7 rfs_mrom_bank7.asm Z80 アセンブラー/ディスアセンブラーのオペコードテーブル 2。
8 ipl.asm Initial Program Loader。
9 rfs_mrom_bank9.asm RFS メッセージ文字列リポジトリ。
10–15 予約 / 未使用。

ユーザー ROM バンク(各 2 KB)
0xE800〜0xEFFF のユーザー ROM ウィンドウは、ユーザー ROM Flash チップ内の 16 バンクをバンク切り替えします — RFS 用に 12 バンク(バンク 0〜11)、CP/M CBIOS 用に 4 バンク(バンク 12〜15):
バンク モジュール 説明
0 rfs.asm RFS のプライマリエントリポイント、コマンドディスパッチャー、コマンドテーブル、全バンクで共有されるバンク切り替えインフラ。
1 rfs_bank1.asm フロッピーディスクコントローラー(FDC)機能 — フロッピーブート(FL)、フロッピーディレクトリ(FD)、フロッピーコピー(FC)、フロッピーからテープ(FD2T)、テープからフロッピー(T2FD)、ドライブ選択。FDC コマンドセット全体はすべてのビルドでアセンブルされます。
2 rfs_bank2.asm SD カードコントローラー — SPI ドライバー、SD カード初期化、SDCFS ディレクトリおよびファイル読み書き。SFD-700 ビルドではアセンブルされません(SD カードハードウェアなし)。
3 rfs_bank3.asm モニターメモリユーティリティ — 16 進ダンプ(D)、メモリ編集(M)、メモリコピー(CP)、SD カードファイルダンプ(DUC)、I/O ポート読み書き(IN / OUT)。テープ↔SD コピー(T2SD/SD2T)は RomDisk / picoZ80 ビルドにのみ含まれます。
4 rfs_bank4.asm CMT(カセット)コントローラー — テープのロード、保存、確認。
5 rfs_bank5.asm 汎用ユーティリティ機能 — フォーマット印刷、文字列ルーチン、共有ヘルパーコード。
6 rfs_bank6.asm Z80 アセンブラー/ディスアセンブラーのオペコードテーブル 1、PRINTMSG 機能、メッセージ文字列インフラ。
7 rfs_bank7.asm Z80 アセンブラー/ディスアセンブラーのオペコードテーブル 2、Z80 ディスアセンブラー(DASM)、DRAM メモリテスト、8253 タイマーテスト。
8 rfs_bank8.asm Z80 インタラクティブアセンブラー(ASM)。
9 rfs_bank9.asm ROM ディレクトリ、ファイル検索、ロードおよび印刷機能(空き領域確保のためバンク 0 から移動)。
10 rfs_bank10.asm 予約 / 未使用。
11 rfs_bank11.asm ヘルプ画面。
12 cbios_bank1.asm CP/M CBIOS — オーディオ機能、RTC、キーボード、低レベルユーティリティ。
13 cbios_bank2.asm CP/M CBIOS — スクリーンドライバーと ANSI ターミナルエミュレーション。
14 cbios_bank3.asm CP/M CBIOS — SD カードドライバー(CP/M ドライブ A:〜G: を提供)。
15 cbios_bank4.asm CP/M CBIOS — フロッピーディスクコントローラー。MZ80AFI カードを介してセクターサイズ(256 バイトの MZ-80A と 128 バイトの MZ-80K ディスク)を自動検出し、オリジナルの MZ-80K CP/M ディスクを直接読み取って CP/M ドライブ C:/D: にマッピングできます。

バンク切り替えの仕組み
Z80 は一度にユーザー ROM の 2 KB スライスしか見ることができないため、すべてのバンクには バンク切り替えスタブ のコピーが含まれています — 2 KB ウィンドウ内の既知のアドレスに位置する小さな固定コードブロックです。バンク 0 がバンク 3 のルーチンを呼び出す必要がある場合:
  1. デスティネーションバンク番号をハードウェアバンクラッチレジスターに書き込みます。
  2. 新たにマッピングされたバンクの既知のエントリポイントにジャンプします。
  3. 必要なルーチンを実行します。
  4. バンク 0 をラッチに書き戻して返ります。
このメカニズムにより、一度に 2 KB しか見えないにもかかわらず、12 個の RFS バンク全体(12 × 2 KB = 24 KB)に加え 4 個の CBIOS バンク(4 × 2 KB = 8 KB)— 合計 32 KB — が任意の実行コンテキストからアクセス可能です。バンク切り替えスタブは各バンクの最初の 32 バイト(0xE800〜0xE81F)を占有し、バンク切り替えテーブルは 0xE800 + 0xB0 から始まります。重要な点:v2+ RomDisk ボードでは、0xEFF8〜0xEFFF の範囲にまたがるループ命令を決して使用してはなりません。これらのアドレスがコード化ラッチのアンロックシーケンスを起動するためです。

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

完全なモジュールテーブル — すべてのソースファイル、ターゲット ROM、バンク、機能:
モジュール ROM バンク サイズ 説明
rfs.asm ユーザー 0 2 KB コマンドディスパッチャー、コマンドテーブル、バンク切り替えインフラ。
rfs_bank1.asm ユーザー 1 2 KB フロッピーディスクコントローラー — ドライブ選択、FDC ブート、フロッピーコピー(FC)、フロッピーからテープ(FD2T)、テープからフロッピー(T2FD)(RomDisk/picoZ80);FDCK AFI ジャンプのみ(SFD-700)。
rfs_bank2.asm ユーザー 2 2 KB SD カードコントローラー — SPI、SDCFS ディレクトリ、ファイル読み書き。SFD-700 ビルドではアセンブルされません。
rfs_bank3.asm ユーザー 3 2 KB メモリユーティリティ — D、M、CP、DUC、IN、OUT(全ビルド);T2SD、SD2T(RomDisk / picoZ80 のみ)。
rfs_bank4.asm ユーザー 4 2 KB CMT コントローラー — テープのロード、保存、確認。
rfs_bank5.asm ユーザー 5 2 KB 汎用ユーティリティ — 印刷ルーチン、文字列ヘルパー。
rfs_bank6.asm ユーザー 6 2 KB Z80 アセンブラー/ディスアセンブラーのオペコードテーブル 1、PRINTMSG 機能、メッセージ文字列インフラ。
rfs_bank7.asm ユーザー 7 2 KB Z80 アセンブラー/ディスアセンブラーのオペコードテーブル 2、DASM、DRAM テスト、タイマーテスト。
rfs_bank8.asm ユーザー 8 2 KB Z80 インタラクティブアセンブラー(ASM)。
rfs_bank9.asm ユーザー 9 2 KB ROM ディレクトリ、ファイル検索、ロードおよび印刷機能(バンク 0 から移動)。
rfs_bank10.asm ユーザー 10 2 KB 予約 / 未使用。
rfs_bank11.asm ユーザー 11 2 KB ヘルプ画面。
cbios_bank1.asm ユーザー 12 2 KB CP/M CBIOS — オーディオ、RTC、キーボード、低レベルユーティリティ。
cbios_bank2.asm ユーザー 13 2 KB CP/M CBIOS — スクリーンドライバー、ANSI ターミナルエミュレーター。
cbios_bank3.asm ユーザー 14 2 KB CP/M CBIOS — SD カードドライバー(CP/M ドライブ A:〜G:)。
cbios_bank4.asm ユーザー 15 2 KB CP/M CBIOS — フロッピーディスクコントローラー。
monitor_sa1510.asm モニター 0 4 KB オリジナル SA-1510 モニター ROM(40 列)。
monitor_80c_sa1510.asm モニター 1 4 KB 80 列表示用にパッチされた SA-1510。
cbios.asm モニター 2 4 KB CP/M 2.2 CBIOS カーネル(CP/M ブート中に 0xC000 に再配置)。
rfs_mrom.asm モニター 3 4 KB RFS モニター ROM ユーティリティ — ROM スキャン、MZF ロード。
monitor_1z-013a.asm モニター 4 4 KB MZ-1Z-013A モニター(MZ-700 / MZ-1200 バリアント)。
monitor_80c_1z-013a.asm モニター 5 4 KB 80 列表示用にパッチされた 1Z-013A。
rfs_mrom_bank6.asm モニター 6 4 KB Z80 アセンブラー/ディスアセンブラーのオペコードテーブル 1。
rfs_mrom_bank7.asm モニター 7 4 KB Z80 アセンブラー/ディスアセンブラーのオペコードテーブル 2。
ipl.asm モニター 8 4 KB Initial Program Loader。
rfs_mrom_bank9.asm モニター 9 4 KB RFS メッセージ文字列リポジトリ。
CP/M 2.2 は 47 KB の使用可能なプログラム RAM を提供します。CCP と BDOS は RAM に存在し、大規模なアプリケーションによって上書きされる可能性があります(ウォームブート時に再ロードされます)。CBIOS はモニター ROM バンク 2 とユーザー ROM バンク 12〜15 に完全に存在し、プログラム RAM を消費しません。
モニター ROM はビルド時にいくつかの追加バリアントイメージも生成します:SA-1510 と 80c SA-1510 のハイロードバリアント(DRAM が 0x0000〜0xCFFF にまたがる必要がある場合に使用)、および Kuma-80 バリアント(KUMA80_ENA フラグで選択)。

SD カードファイリングシステム(SDCFS)

FAT の実装(利用可能な 2 KB ROM バンクには大きすぎる)の代わりに、RFS は SD カードファイリングシステム(SDCFS)と呼ばれる専用のファイリングシステムを使用します。この設計は柔軟性より単純性とコンパクトな ROM フットプリントを優先しています。

ディレクトリ構造
各 SDCFS ドライブイメージには最大 256 エントリのフラットなディレクトリが含まれています。各エントリは標準の MZF テープヘッダーフォーマットに基づいた正確に 32 バイトです:
フィールド バイト数 説明
FLAG1 1 ビット 7 = 1:有効なエントリ。ビット 7 = 0:無効 / 削除済み。
FLAG2 1 MZF 実行タイプ(0x01 = バイナリプログラム)。
FILE NAME 17 標準の 17 文字 MZF ファイル名(Sharp 文字エンコーディング)。
START SECTOR 4 このドライブイメージ内でファイルのデータブロックが始まる最初のセクター。
SIZE 2 ファイルデータの実際のバイト数。
LOAD ADDR 2 ファイルデータをロードする Z80 RAM アドレス。
EXEC ADDR 2 バイナリファイルの自動実行アドレス(ロード後にジャンプ)。
RESERVED 3 現在未使用。
ディレクトリは各ドライブイメージの最初の 8 KB を占有します(256 エントリ × 32 バイト)。ファイルデータはすぐ後に続き、256 番目の 32 バイト境界から始まります。各ファイルには固定の 64 KB ブロックが割り当てられます — CMT テープブロックの最大サイズに一致 — これによりレイアウトが非常にシンプルになり、SD↔テープコピーが直接のバイト対バイト転送になります。

SD カードレイアウト
ADDRESS    CONTENT
────────────────────────────────────────────────────────────
0x00000000  RFS DRIVE 0
              0x00000000–0x00001FE0  Directory (256 × 32 B)
              0x00002000–0xFF2000    File blocks (256 × 64 KB)
0x01002000  RFS DRIVE 1  (same structure)
...
0x09012000  RFS DRIVE 9  (same structure)
0x0A014000  (padding to 256 MB boundary)
────────────────────────────────────────────────────────────
0x10000000  CP/M DISK IMAGE 0   (16 MB — 32 sectors × 1024 tracks)
0x11000000  CP/M DISK IMAGE 1
...
0xXX000000  CP/M DISK IMAGE 6
────────────────────────────────────────────────────────────
パーティションテーブルは書き込まれません。SDCFS イメージは SD カードのバイト 0 から始まります。CP/M ディスクイメージは 256 MB 境界から始まり、10 個の RFS ドライブがどれだけ満杯になっても全体の領域を確保できるようにします。

CP/M 2.2 の実装

ブートプロセス
RFS での CP/M ブートは 2 段階で行われます:
  1. フェーズ 1 — AFI ブート: 0xF000 のオリジナル MZ-80A AFI(Auto Floppy Interface)ROM コードがフロッピーの最初のセクターまたは SD カードブートブロックを読み取ります。バイト 0 のマーカーバイト 0x02 + "IPLPRO"(MZ-80A CP/M ブータブルディスクシグネチャー)を確認します。見つかった場合、そのセクター内のカプセル化された第 2 ステージローダーに制御を渡します。
  2. フェーズ 2 — CCP+BDOS+CBIOS ロード: 第 2 ステージローダーは CCP、BDOS、CBIOS をディスクから 0x9C00 から始まる RAM に読み込みます。ロード完了後、CBIOS コールドブートエントリポイントが呼び出されます。CBIOS がハードウェア(キーボード、スクリーン、ディスクドライブ)を設定し、0x9C00 の CCP に制御を渡します。

CBIOS アーキテクチャ
カスタム BIOS(CBIOS)は利用可能なバンク空間に収まるように 5 つの ROM モジュールに分割されています:
モジュール ROM の場所 内容
cbios.asm MROM バンク 2(0xC000〜0xCFFF) CBIOS エントリポイント(17 の API ベクター全部)、コールド/ウォームブート、割り込みハンドラー、ROM ディスクコントローラー、ディスクパラメーターテーブル。
cbios_bank1.asm UROM バンク 12 オーディオ(ベル、メロディー)、リアルタイムクロックルーチン、オートリピート付きキーボードハンドラー。
cbios_bank2.asm UROM バンク 13 スクリーンドライバー(文字出力、スクロール、カーソル)、ANSI ターミナルエミュレーター(VT52/VT100 サブセット)。
cbios_bank3.asm UROM バンク 14 SD カードディスクドライバー — 256 MB 境界以降の SDCFS ドライブイメージから 128 バイト CP/M セクターを読み書き。
cbios_bank4.asm UROM バンク 15 フロッピーディスクコントローラー — 物理 CP/M ディスク用の標準 8 インチ/5.25 インチドライブサポート。

CBIOS API
CP/M CBIOS はすべての標準 CP/M 2.2 API エントリポイント 17 個を実装しています:
エントリポイント 説明
BOOT コールドスタート — 全ハードウェアを初期化し、ディスクパラメーターテーブルを設定し、CCP を呼び出します。
WBOOT ウォームスタート — ハードウェア状態を復元し、ディスクから CCP+BDOS を再ロードし、CCP を呼び出します。
CONST コンソールステータス — キーが待機中なら 0xFF、なければ 0x00 を返します。
CONIN コンソール入力 — キー押下を待ち、ASCII コードを返します。
CONOUT コンソール出力 — 画面に文字を書き込みます。
LIST プリンター出力 — 接続されたプリンターに文字を出力します。
PUNCH パンチ/テープ出力 — テープパンチデバイスに出力します。
READER リーダー入力 — テープリーダーデバイスから読み取ります。
HOME 現在選択されているディスクのトラック 0 にシークします。
SELDSK ディスクドライブ(A:〜G:)を選択し、ディスクパラメーターヘッダーアドレスを返します。
SETTRK 次の読み書き操作のディスクトラックを設定します。
SETSEC 次の読み書き操作のディスクセクターを設定します。
SETDMA ディスクメモリアドレスを設定します — データの読み込み先または書き込み元。
READ 選択されたディスクから DMA バッファーに 128 バイトセクターを 1 つ読み取ります。
WRITE DMA バッファーから選択されたディスクに 128 バイトセクターを 1 つ書き込みます。
LISTST プリンターステータス — リストデバイスの準備状態を返します。
SECTRN セクター変換 — ディスクのスキューテーブルを使用して論理セクター番号を物理位置にマッピングします。

CP/M ドライブ設定
CP/M ドライブは、使用可能なディスクコントローラーに応じて CBIOS によってコールドブート中に動的に作成されます。フル装備の RomDisk / picoZ80 システムでの標準ドライブマッピング:
CP/M ドライブ コントローラー イメージ
A: SD カード CPM_SYSTEM — OS プログラム、Turbo Pascal、Hi-Soft C、Fortran 80、MS-BASIC 80
B: SD カード Pascal MTP v5.61、Turbo Pascal v3.00a、Pascal User Group ディスク
C: SD カード PLI、PLM 80、WordStar v3.0/v3.3/v4.0
D:〜G: SD カード Grant Searle CP/M コレクションディスク C0〜F9

ビルドシステム

RFS は Linux(Debian/Ubuntu)・macOSWindows(WSL2 経由)でビルドできます。ビルドシステムはほぼ完全にリポジトリ内に自己完結しています。推奨されるビルド方法は、お使いのプラットフォーム向けの自動セットアップスクリプトです(下記の 自動セットアップとビルド を参照)。以降の手動フラグと手順は、上級者および部分的な再ビルド向けです。

前提条件
ツール 用途
Java JRE 8+ GLASS Z80 アセンブラー(tools/glass.jar)を実行します。javaPATH に含まれている必要があります。
bash すべてのビルドスクリプトは bash シェルスクリプトです。
perl MZF ファイル操作用の tools/mzftool.pl に必要です。
gcc / make 最初のビルド時に cpmtools をソースからコンパイルします(自動)。
dd, cat, stat パッケージングスクリプトで使用される標準 Linux ユーティリティ。
GLASS Z80 アセンブラーは tools/glass.jar に同梱されています — 別途インストールは不要です。

自動セットアップとビルド(推奨)
お使いのプラットフォーム向けの自動セットアップスクリプトは、前提条件のインストール、リポジトリのクローン(すでにチェックアウト内にいる場合を除く)、コンテンツイメージのダウンロード、環境ファイルの書き込みを行い、初回ビルドの実行も提案します — すべて対話式で、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(GLASS アセンブラ用)をインストールし、リポジトリをクローンし、コンテンツバンドルを取得し、Git Bash 経由で ./build.sh を実行します — WSL、Docker、再起動は不要です。2 つのビルド済みホストツール(tools/cpmcp.exetools/sdtool.exe)がバンドルされているため、Windows では 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 を一度起動してユーザーを作成し、再実行してください。
Repo URL [https://git.eaw.app/eaw/RFS.git] public repo 公開リポジトリの場合は Enter、別の URL(例:非公開の開発リポジトリ)を使う場合は貼り付けます。

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

プロンプト デフォルト 対応方法
Install now? [Y/n](ツールが不足している場合) Yes Enterapt/dnf/pacman または Homebrew(macOS)で不足ツールをインストールします。sudo を求められることがあります。macOS では Xcode CLT も起動し、Homebrew が必要です。
Repo URL [https://git.eaw.app/eaw/RFS.git]:(すでにチェックアウト内にいる場合を除く) public repo 公開の場合は Enter、非公開リポジトリの URL を使う場合は貼り付けます。(Windows ではスキップ — すでに選択済み。)
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 で MZF/ディスク/CP/M/BASIC コンテンツを取得します(フルビルドに必要)。隣接する SharpSoft チェックアウトですでに供給されている場合のみ n
Run the first build now (./build.sh -m …)? [Y/n] Yes Enter ですぐにビルドします(環境を検証)。初回ビルドは -m を使って MZF を MZB/ に処理します。

sudo パスワードや、非公開リポジトリの場合は git の認証情報も求められることがあります。

セットアップ後は、./build.sh -m(初回ビルド)、続いて ./build.sh で再ビルドします。macOS では先に source ./rfs_env.sh を実行してください。build.sh はデフォルトですべてのバリアントをビルドします。バリアント名(sfd700romdisk_mz80apicoz80_mz80apicoz80_kumapicoz80_mz700picoz80_mz1500picoz80_mz80k)を渡すと 1 つだけビルドします — バリアントを選択するとビルドフラグが自動的に設定されます。オプション:-m(MZF を処理)・-s(共有アセンブリをスキップ)・-c(クリーン)・-v(詳細)・-h(ヘルプ)。

上級:ビルドフラグ(手動)
ほとんどのビルドではこれは不要です — build.sh <variant> がこれらを自動的に設定します。ターゲットを手動で構成するには、asm/include/rfs_definitions.asm を編集し、ターゲットフラグを正確に 1 つだけ 1 に設定します(他はすべて 0 にする必要があります):
フラグ ターゲット
BUILD_ROMDISK EQU 1 RomDisk カード
BUILD_SFD700 EQU 1 SFD-700 フロッピーインターフェース
BUILD_PICOZ80 EQU 1 picoZ80 ボード
追加のオプション機能フラグ:
フラグ デフォルト 説明
KUMA80_ENA 0 Kuma 40/80 列アップグレードが装着されている場合は 1 に設定。
VIDEOMODULE_ENA 0 40/80 カラービデオモジュールが装着されている場合は 1 に設定。
FUSIONX_ENA 0 tranZPUter FusionX ボードで動作している場合は 1 に設定。
HW_SPI_ENA 1 ハードウェア SPI(RomDisk v2+ 基板)。現在のすべてのボードでは 1 のままにしてください。
SW_SPI_ENA 0 ソフトウェアビットバン SPI(パラレルポート経由の RomDisk v1)。
ENADEBUG 0 アセンブリ時のデバッグ出力を有効にします。

手動ビルド手順と build.sh の動作
セットアップスクリプトを使いたくない場合(または CI ビルドをスクリプト化する場合)は、直接クローンしてビルドします。前提条件をインストール済みである必要があり、新規の単独クローンでは自分でコンテンツイメージを取得する必要があります(または、それを代行してくれる setup_RFS.sh を実行してください)。
git clone --recurse-submodules https://git.eaw.app/eaw/RFS.git
cd RFS

# フルビルド — すべての ROM をアセンブルし、イメージをパッケージ化し、SD カードイメージをビルドします:
./build.sh

# 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 と CCP+BDOS を roms/*.rom にアセンブルします。
  4. tools/assemble_roms.sh — すべてのモニターバリアントと MZF アプリケーションをアセンブルします。各パスの前に include/msbasic_buildversion.asmBUILD_VERSION EQU を書き込むことで 4 つの MS-BASIC ビルドバリアントを処理します。
  5. tools/make_roms.sh — ROM と MZF バイナリを各ターゲットの Flash ROM イメージにパッケージ化します。
  6. tools/make_cpmdisks.sh — CP/M ディスクイメージを RAW フォーマット(SD カード用)と CPC 拡張ディスクフォーマット(フロッピーエミュレーター用)でビルドします。
  7. tools/make_sdcard.sh — 10 個の RFS ドライブイメージと 7 個の CP/M ディスクイメージを結合して最終的な SD カードイメージを作成します。

出力ファイル
ビルド成功後、roms/ ディレクトリには以下が含まれます:
ファイル Flash チップ 説明
MROM_ROMDISK_256.bin モニター ROM Flash RomDisk 用モニター ROM:SA-1510、80c SA-1510、CP/M CBIOS、RFS mrom utils、1Z-013A モニター、ASM/DASM オペコードテーブル、IPL、メッセージ文字列が 16×4 KB ページに収録。
MROM_PICOZ80_256.bin モニター ROM Flash picoZ80 用モニター ROM(バンク順が RomDisk と異なります)。
USER_ROM_256.bin ユーザー ROM 1 Flash RFS バンク 0〜11、CP/M CBIOS バンク 12〜15、CP/M 2.2 イメージ、パックされた MZF アプリケーション。
USER_ROM_II_256.bin ユーザー ROM 2 Flash 追加の MZF アプリケーション。
USER_ROM_III_256.bin ユーザー ROM 3 Flash 追加の MZF アプリケーション。
SFD700_256.bin SFD-700 Flash AFI ROM + RFS ファームウェア + ROM ファイルシステム。
SHARP_MZ80A_RFS_IMAGE_0–9.img SD カード 個別の RFS ドライブイメージ(ドライブ 0〜9 の各 1 枚)。
SHARP_MZ80A_RFS_CPM_IMAGE_1.img SD カード 結合イメージ:10 個の RFS ドライブ + 7 個の CP/M ディスクイメージ。これを SD カードに書き込みます。

ROM ドライブへのアプリケーションの追加
MZF フォーマットのアプリケーションファイルは、ROM ドライブに含める前にセクターパディングされたバイナリイメージに変換する必要があります。MZF ファイルを MZF/ の適切なサブディレクトリに配置してから実行します:
tools/processMZFfiles.sh
これにより 128 バイトおよび 256 バイトのセクターパディングされたイメージが MZB/ に生成されます。各 ROM ドライブに表示するアプリケーションを選択するには、tools/make_roms.sh を編集して addMZFToROMImageList の呼び出しを調整します:
# Format: addMZFToROMImageList <ROMDISK> <SFD700> <picoZ80> <reserved> "<path>"
#
# Include in all builds:
addMZFToROMImageList 1 1 1 0 "${MZB_PATH}/Common/sa-5510_rfs.${SECTORSIZE}.bin"
#
# RomDisk and picoZ80 only (no SFD700 — needs SD card):
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 コアモジュールをアセンブルします。
tools/assemble_cpm.sh CP/M 2.2 CBIOS とカーネルをアセンブルします。
tools/assemble_roms.sh モニターバリアントと MZF アプリケーションバイナリをアセンブルします。
tools/make_roms.sh バイナリを Flash ROM イメージにパッケージ化します。
tools/make_cpmdisks.sh CP/M ディスクイメージを作成します。
tools/make_sdcard.sh イメージを結合して最終的な SD カードイメージを作成します。
tools/processMZFfiles.sh MZF ファイルをセクターパディングされたバイナリに変換して MZB/ に出力します。
tools/mzftool.pl MZF フォーマットイメージを作成、抽出、検査します。
tools/sdtool RFS SD カードディレクトリを構築し、ファイルを投入します。
tools/nasconv NASCOM カセットイメージを MZ-80A ロード可能フォーマットに変換し、MS-BASIC トークンを再マッピングします。
tools/glass.jar 同梱の GLASS Z80 アセンブラー(Java)。すべてのアセンブリスクリプトで使用されます。
tools/MZFD/MZFDTool MZ-700 FDC 用のロー・フロッピーディスクイメージを作成・管理します。コマンド: formatdiraddextractboot。デフォルトイメージ: MZ700.img
tools/MZQD/MZQDTool MZ-700 Quick Disk システム用の QD イメージを作成・管理します。コマンド: formatdiradd。デフォルトイメージ: MZ700.qd
cpmtools/ cpmcpcpmlscpmrm などのソース。最初のビルド時にコンパイルされます。

参考サイト

リソース リンク
RFS プロジェクトページ /ja/sharpmz-upgrades-rfs/
RFS ユーザーマニュアル /ja/sharpmz-upgrades-rfs-usermanual/
RFS デベロッパーズガイド /ja/sharpmz-upgrades-rfs-developersguide/
RFS ギャラリー /ja/sharpmz-upgrades-rfs-gallery/
MZ-80A での CP/M に関するメモ _pages/MZ80A_RFS_CPM_README.md に収録
SFD-700 mkII テクニカルガイド /ja/sfd700-technicalguide/
picoZ80 テクニカルガイド /ja/picoz80-technicalguide/
GLASS Z80 アセンブラー tools/glass.jar に同梱