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 ロード・フロッピー起動・組み込み Z80 アセンブラ/逆アセンブラを提供します。
- tranZPUter FusionX — FPGA ベースの Z80 強化ボード。RFS は Flash ROM 空間内で動作します。
- picoZ80 — Raspberry Pi Pico ベースの Z80 代替/エミュレーターボード。
RFS モニター
+ 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 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 | "<ファイル名>" |
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 カセットイメージコンバーター
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)
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)
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 のディレクトリ一覧を表示します。 |
ソフトウェアアーキテクチャ
| モジュール | ターゲット 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.asm の KUMA80_ENA フラグで選択)、および DRAM が 0x0000〜0xCFFF の全範囲をカバーする必要がある場合に使用する SA-1510 と 80 桁 SA-1510 のハイロードバリアント。
ビルドシステム
前提条件
| ツール | 備考 |
|---|---|
| Java(JRE 8 以上) | GLASS Z80 アセンブラの実行に必要。java が PATH に含まれている必要があります。 |
| 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 は以下の手順を順番に実行します:
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 イメージ。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.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 | ファイル名 | 開始セクター | サイズ | ロードアドレス | 実行アドレス | 予約済み |
|---|---|---|---|---|---|---|---|
| 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 |
マニュアル
| マニュアル | 説明 |
|---|---|
| ユーザーマニュアル | RFS の入手方法、モニターコマンドリファレンス、SD ドライブの使用方法、BASIC、CP/M、トラブルシューティング |
| テクニカルガイド | ハードウェアプラットフォーム、メモリアーキテクチャ、バンク切り替え、SDCFS 設計、CP/M CBIOS、完全なビルドシステムリファレンス |
| デベロッパーズガイド | Z80 アセンブリ入門、完全なソースモジュールの解説(バンク切り替えの内部動作を含む)、新コマンドや新ハードウェアターゲットの追加ガイド |
クレジット
ライセンス
本設計または任意のハードウェア/ファームウェアコンポーネントの商業利用は、作者の明示的な許可なしに行うことはできません。この条件は GNU GPL 3 ライセンスが付与するいかなる権利にも優先します。
GNU Public License v3
ソースファイルは有用であることを期待して配布されていますが、商品性や特定目的への適合性に関する保証を含め、いかなる保証も行いません。詳細については GNU 一般公衆利用許諾書をご参照ください。
本プログラムとともに GNU 一般公衆利用許諾書のコピーを受け取っているはずです。受け取っていない場合は http://www.gnu.org/licenses/ をご覧ください。