MZ-80A ROMディスク — テクニカルガイド
RomDisk テクニカルガイド
このガイドは、Sharp MZ-80A RomDisk PCB のハードウェア設計、メモリアーキテクチャ、バンク制御メカニズム、SPI インターフェイスオプション、ソフトウェアモジュールレイアウト、SD カードファイリングシステムの設計、CP/M 実装、および完全なビルドシステムを解説します。RomDisk がシステムレベルでどのように動作するかを理解したい、ソースからファームウェアをビルドしたい、またはバンク ROM 環境を使用する新しいソフトウェアを開発したいユーザーを対象としています。
日常的な使用とモニターコマンドリファレンスについては RFS ユーザーマニュアル を参照してください。Z80 アセンブリソースコードのウォークスルーについては RFS 開発者ガイド を参照してください。
ハードウェアバージョン
RomDisk PCB は Sharp MZ-80A 用の娘基板です。MZ-80A の拡張コネクタに差し込み、リフターソケットを使用してモニター ROM(0x0000–0x0FFF の 4KB)とユーザー ROM(0xE800–0xEFFF の 2KB)のチップセレクトラインを傍受し、両方をページ切り替え式 Flash RAM に置き換えます。3 つのハードウェアリビジョンが製造されています。
バージョン 1.1
最初の量産ボードです。主な特徴:
バージョン 2.0
- モニター ROM ソケット(U1)に 512KB SST39SF040 Flash RAM が 1 個 — 8 個の 4KB バンクスロットを提供。
- ユーザー ROM ソケット(U4)に 512KB Flash RAM が 1 個 — 256 個の 2KB バンクスロットを提供しますが、RFS は最初の 12 個のみを使用します。
- バンク選択用のシンプルな D タイプラッチ — バンクレジスタには保護メカニズムなしに常時アクセス可能。
- Sharp MZ-80A パラレルプリンターポートピンを介したソフトウェアビットバン SPI による SD カードアクセス。この方法は機能しますが、後のハードウェア SPI と比較して低速です。
PP_SPI_ENA ビルドフラグを使用します。コード化ラッチはなく、バンクレジスタはいつでも書き込み可能です。
ハードウェア SPI、追加の Flash スロット、オプションの SRAM、バンクレジスタのセキュリティメカニズムを追加した大幅な改訂版です:
バージョン 2.1(現行版)
- コード化ラッチ — 74HCT191 4 ビットアップカウンターが I/O 制御レジスタデコードロジックをゲートします。電源投入時またはリセット読み取り後、カウンターは 0 にあり、バンクレジスタにはアクセスできません(0xEFF8–0xEFFF からの読み取りは通常通り Flash ROM データを返します)。制御レジスタは、0xEFF8–0xEFFF 範囲への正確に 16 回の連続読み取りでカウンターがターミナルカウント出力に達した後にのみアクティブになります。これにより、Z80 コードが通常の実行中にそのアドレス領域にたまたまアクセスした場合の偶発的なバンク切り替えを防ぎます。
- ハードウェア SPI 回路 — 74HCT595 シリアル-パラレル変換シフトレジスタ(MOSI/CLK 出力)と 74HCT165 パラレル-シリアル変換シフトレジスタ(MISO 入力)を 16MHz 水晶発振器から 8MHz でクロック。SD カードソケットは PCB に直接搭載。
- 第 2 および第 3 のユーザー ROM Flash スロット(U5 および U6)— それぞれさらに 512KB SST39SF040。BNKCTRL レジスタの BK2A19/BK2A20 ビットが 3 つのユーザー ROM チップのどれがアクティブかを選択します。
- オプションの 512KB SRAM — AS6C4008、ソケット実装。追加のページ切り替えワークスペースとして将来の使用を想定。
- JP6 はんだジャンパーで、ハードウェア SPI 回路またはソフトウェアビットバン SPI 回路のどちらを実装するかを選択します。
v2.0 のリフレッシュアドレス問題に対処した対象を絞ったバグ修正リビジョン。v2.0 からの変更点:
- カウンタークロック入力にディスクリートダイオードによる AND ゲート(D1/D2)を追加。ゲートはアドレスデコード信号と Z80 の
/MREQ信号を組み合わせるため、真のメモリ読み取りバスサイクル(/MREQがアサートされたもの)のみが 74HCT191 カウンターをインクリメントできます。リフレッシュサイクルは/RFSHをアサートし/MREQをデアサートするため、D1/D2 AND ゲートによってブロックされます。 - 0xEFF9 を専用のコード化ラッチクリアアドレスとして再配線。 0xEFF9 への 1 回の読み取りで 74HCT191 カウンターが 0 にリセットされ、I/O 制御レジスタアクセスが即座に無効化されます。
- PCB シルクスクリーンの整理 — 部品参照指定子を修正。
メモリアーキテクチャ
Sharp MZ-80A の Z80 CPU は 64KB のメモリをアドレス指定します。RomDisk は両方の ROM ウィンドウをページ切り替え式 Flash RAM に置き換え、ユーザー ROM アドレス範囲の上位 8 バイトに 8 つの I/O 制御レジスタを追加します。0x1200–0xCFFF の完全な範囲はユーザープログラムに引き続き使用できます。
Z80 アドレス空間レイアウト
アドレス サイズ 内容
─────────────────────────────────────────────────────────────────────────────
0x0000 4 KB モニター ROM ウィンドウ — 512KB MROM Flash(U1)への 4KB ページ
バンク:0 = SA-1510(40 列、電源投入時のデフォルト)
1 = SA-1510 80 列
2 = CP/M CBIOS カーネル
3 = RFS モニター ROM ユーティリティ
4 = 1Z-013A MZ-700 モニター
5 = 1Z-013A 80 列
6 = IPL(初期プログラムローダー)
7 = (空)
0x1000 256 B MZ-80A システム変数とスタック
0x1200 ~46 KB ユーザー RAM(メインプログラム領域、0x1200–0xCFFF)
0xCFFF
0xD000 12 KB ビデオ RAM + メモリマップド I/O(Sharp MZ-80A マザーボードハードウェア)
0xE800 2 KB ユーザー ROM ウィンドウ — 512KB UROM Flash(U4/U5/U6)への 2KB ページ
バンク 0–7:RFS ファームウェアモジュール
バンク 8–11:CP/M CBIOS モジュール
0xEFF8 8 B コード化ラッチ読み取り領域(v2+):ここへの 16 回の読み取りで制御レジスタのロックを解除
ラッチが閉じているときは Flash RAM データも返す
0xEFF9 1 B コード化ラッチリセット:1 回の読み取りで制御レジスタを再ロック(v2.1+)
0xEFFB 1 B HWSPIDATA — ハードウェア SPI データレジスタ(v2+)
0xEFFC 1 B HWSPISTART — ハードウェア SPI 開始/トリガーレジスタ(v2+)
0xEFFD 1 B BNKSELMROM — モニター ROM バンク選択レジスタ
0xEFFE 1 B BNKSELUSER — ユーザー ROM バンク選択レジスタ
0xEFFF 1 B BNKCTRL — バンク制御レジスタ
0xF000 4 KB フロッピー AFI ROM 空間(元の Sharp フロッピーコントローラー ROM)
─────────────────────────────────────────────────────────────────────────────
モニター ROM バンク(各 4KB)
0x0000–0x0FFF のモニター ROM ウィンドウは、U1 の MROM Flash チップに格納された 8 つの 4KB バンクにわたってバンク切り替えされます。バンク 0 は電源投入リセット時に選択されます。
| バンク | モジュール | 説明 |
|---|---|---|
| 0 | monitor_sa1510.asm |
オリジナル SA-1510 40 列モニター。電源投入時のデフォルトバンク。 |
| 1 | monitor_80c_sa1510.asm |
80 列表示用にパッチされた SA-1510(Kuma 80 列アップグレードが必要)。 |
| 2 | cbios.asm |
CP/M 2.2 CBIOS カーネル — CP/M ブート時に実行時 0xC000–0xCFFF に再配置。 |
| 3 | rfs_mrom.asm |
RFS モニター ROM ユーティリティ — MZF イメージスキャンとロード。ユーザー ROM をページ切り替えする際に自身をページアウトしないよう MROM スペースから実行。 |
| 4 | monitor_1z-013a.asm |
MZ-700 1Z-013A モニターバリアント。 |
| 5 | monitor_80c_1z-013a.asm |
80 列表示用にパッチされた 1Z-013A モニター。 |
| 6 | ipl.asm |
初期プログラムローダー。 |
| 7 | (空) | 未使用。 |
0xE800–0xEFFF のユーザー ROM ウィンドウは、3 つのユーザー ROM Flash チップ(U4、U5、U6)にわたる 12 個のアクティブバンクにバンク切り替えされます。BNKSELUSER レジスタはアクティブなチップ内の 2KB ページを選択し、BNKCTRL の BK2A19 および BK2A20 ビットはどのチップがアドレス指定されるかを選択します。
| バンク | モジュール | 説明 |
|---|---|---|
| 0 | rfs.asm |
主要 RFS エントリーポイント、コマンドディスパッチャー、コマンドテーブル、すべてのバンクが共有するバンク切り替えインフラ。 |
| 1 | rfs_bank1.asm |
フロッピーディスクコントローラー(FDC)機能 — ドライブ選択と FDC ブート。 |
| 2 | rfs_bank2.asm |
SD カードコントローラー — SPI ドライバー、SD カード初期化、SDCFS ディレクトリとファイル読み書き。 |
| 3 | rfs_bank3.asm |
メモリユーティリティ — 16 進ダンプ(D)、メモリ編集(M)、メモリコピー(CP)、テープ↔SD コピー(T2SD/SD2T)。 |
| 4 | rfs_bank4.asm |
CMT(カセット)コントローラー — テープロード、保存、検証。 |
| 5 | rfs_bank5.asm |
(予約済み / 未使用。) |
| 6 | rfs_bank6.asm |
ヘルプ画面、メッセージ文字列、ASCII ↔ Sharp 文字セット変換テーブル。 |
| 7 | rfs_bank7.asm |
メモリテスト(R)、8253 タイマーテスト(T)。 |
| 8 | cbios_bank1.asm |
CP/M CBIOS — オーディオ機能と低レベルユーティリティ。 |
| 9 | cbios_bank2.asm |
CP/M CBIOS — 画面ドライバーと ANSI ターミナルエミュレーション。 |
| 10 | cbios_bank3.asm |
CP/M CBIOS — SD カードディスクドライバー(CP/M ドライブ A:–G:)。 |
| 11 | cbios_bank4.asm |
CP/M CBIOS — フロッピーディスクコントローラー。 |
バンク制御
コード化ラッチメカニズム
v2.0 および v2.1 ボードでは、バンク制御レジスタはコード化ラッチとして機能する 74HCT191 4 ビットアップカウンターによって保護されています。このメカニズムにより、プログラム RAM から実行中の Z80 コードが 0xEFF8–0xEFFF 範囲内のアドレスを読み書きするだけで ROM バンクを誤って切り替えることを防ぎます。
動作:
バンク制御レジスタ(BNKCTRL、0xEFFF)
- 電源投入時またはラッチリセット読み取り後、74HCT191 カウンターは 0 にあります。I/O 制御レジスタデコードロジックが無効化され、0xEFF8–0xEFFF からの読み取りは通常通り Flash ROM データを返し、BNKSELMROM/BNKSELUSER/BNKCTRL への書き込みは効果がありません。
- 制御レジスタのロックを解除するには:0xEFF8–0xEFFF の範囲の任意のアドレスへの読み取りサイクルを正確に 16 回実行します。各読み取りでカウンターが 1 つインクリメントされます。v2.1 ボードでは、真のメモリ読み取りバスサイクル(
/MREQがアサートされたもの)のみがカウントされます。Z80 DRAM リフレッシュサイクル(/RFSHをアサートし/MREQをデアサートするもの)は D1/D2 AND ゲートによってブロックされ、カウンターをインクリメントしません。 - カウンターがターミナルカウント(16)に達すると、TC 出力がアクティブになり、I/O 制御レジスタデコードロジックを有効にします。バンク選択レジスタが書き込み可能になります。
- 再ロックするには:アドレス 0xEFF9 から 1 回読み取ります。これによりカウンターロード/リセットラインがアサートされ、カウンターが 0 に戻り、I/O 制御レジスタが即座に無効化されます。
BNKCTRL レジスタは SPI ビットバン信号、SD カードチップセレクト、コード化ラッチ設定、ユーザー ROM チップ選択を制御します。(コード化ラッチのロック解除後)書き込み専用です。
| ビット | 名前 | 説明 |
|---|---|---|
| 0 | BBCLK | ビットバン SPI クロック出力。SPI クロック信号を生成するためにソフトウェア SPI ルーチンによってトグルされます。 |
| 1 | SDCS | SD カードチップセレクト — アクティブロー。SD カードを選択するには 0 に、解除するには 1 に設定します。 |
| 2 | BBMOSI | ビットバン SPI MOSI データ出力。BBCLK をトグルする前にビット値に設定します。 |
| 5:3 | CDLTCH1–3 | コード化ラッチ設定ビット。カウンターの初期オフセットを設定し、レジスタのロック解除に 0xEFF8–0xEFFF への何回の読み取りが必要かを制御します。デフォルト 0 = 16 回読み取りが必要。 |
| 6 | BK2A19 | ユーザー ROM デバイス/アドレス選択ビット 0。BNKSELUSER と組み合わせて各ユーザー ROM チップの完全な 512KB をアドレス指定し、U4、U5、U6 のいずれかを選択します。 |
| 7 | BK2A20 | ユーザー ROM デバイス/アドレス選択ビット 1。BK2A19 を参照。 |
BK2A19/BK2A20 ビットは、BNKSELUSER だけで利用可能な 256 個の 2KB バンク以上の実効ユーザー ROM アドレス空間を拡張します。BNKSELUSER と組み合わせることで、3 つのユーザー ROM Flash チップへの複合アドレスを形成し、どのチップがアクティブ(U4、U5、または U6)で、その中のどの 2KB ページが 0xE800–0xEFFF ウィンドウにマッピングされるかを選択します。
SPI インターフェイス
3 つの SPI 実装がサポートされており、
rfs_definitions.asm で 1 つのフラグのみを 1 に設定することでビルド時に選択されます。1 つのファームウェアビルドで有効にできるのは 1 つのみです。
| フラグ | 値 | 方式 | 速度 | 必要なハードウェア |
|---|---|---|---|---|
HW_SPI_ENA |
1 | ハードウェア SPI — 74HCT595/74HCT165 シフトレジスタ、16MHz 水晶 | 8MHz — Flash ROM アクセス速度と同等 | JP6 がハードウェア SPI 用に設定された v2.0/v2.1 PCB |
SW_SPI_ENA |
1 | BNKCTRL の Z80 I/O ポートビット操作によるソフトウェアビットバン SPI | ~300KB/s — フロッピーより速く、ROM より遅い | JP6 がソフトウェア SPI 用に設定された v2.0/v2.1 PCB |
PP_SPI_ENA |
1 | パラレルプリンターポートビットバン(元の v1.1 方式) | 最も低速 | v1.1 PCB のみ |
ハードウェア SPI 動作(v2.0/v2.1 ボード):
- HWSPIDATA(0xEFFB)にデータバイトを書き込みます。74HCT595 シフトレジスタが送信準備のためにバイトをロードします。
- 任意の値を HWSPISTART(0xEFFC)に書き込んで転送を開始します。シフトレジスタは 16MHz 発振器に同期して MOSI ラインにバイトをクロックアウトしながら、74HCT165 が SD カードから MISO ビットを同時にシフトインします。
- HWSPIDATA(0xEFFB)を読み取って受信バイトを取得します。完全な 8 ビット交換が 1 回の Z80 メモリ読み取りサイクルより短い時間で完了します。これがハードウェア SPI スループットが Flash ROM アクセス速度と同等である理由です。
ソフトウェアアーキテクチャ
完全なモジュールテーブル — すべてのソースファイル、ターゲット Flash チップ、ROM バンク、および機能:
| モジュール | Flash チップ | バンク | サイズ | 説明 |
|---|---|---|---|---|
rfs.asm |
ユーザー(U4) | 0 | 2 KB | コマンドディスパッチャー、コマンドテーブル、バンク切り替えインフラ。 |
rfs_bank1.asm |
ユーザー(U4) | 1 | 2 KB | フロッピーディスクコントローラー — ドライブ選択と FDC ブート。 |
rfs_bank2.asm |
ユーザー(U4) | 2 | 2 KB | SD カードコントローラー — SPI ドライバー、SDCFS ディレクトリ、ファイル読み書き。 |
rfs_bank3.asm |
ユーザー(U4) | 3 | 2 KB | メモリユーティリティ — D、M、CP、T2SD、SD2T。 |
rfs_bank4.asm |
ユーザー(U4) | 4 | 2 KB | CMT コントローラー — テープロード、保存、検証。 |
rfs_bank5.asm |
ユーザー(U4) | 5 | 2 KB | (予約済み / 未使用。) |
rfs_bank6.asm |
ユーザー(U4) | 6 | 2 KB | ヘルプ画面、メッセージ文字列、文字セット変換。 |
rfs_bank7.asm |
ユーザー(U4) | 7 | 2 KB | メモリテスト(R)、タイマーテスト(T)。 |
cbios_bank1.asm |
ユーザー(U4) | 8 | 2 KB | CP/M CBIOS — オーディオ、低レベルユーティリティ。 |
cbios_bank2.asm |
ユーザー(U4) | 9 | 2 KB | CP/M CBIOS — 画面ドライバー、ANSI ターミナルエミュレーター。 |
cbios_bank3.asm |
ユーザー(U4) | 10 | 2 KB | CP/M CBIOS — SD カードディスクドライバー(ドライブ A:–G:)。 |
cbios_bank4.asm |
ユーザー(U4) | 11 | 2 KB | CP/M CBIOS — フロッピーディスクコントローラー。 |
monitor_sa1510.asm |
モニター(U1) | 0 | 4 KB | オリジナル SA-1510 モニター ROM(40 列)。 |
monitor_80c_sa1510.asm |
モニター(U1) | 1 | 4 KB | 80 列表示用にパッチされた SA-1510。 |
cbios.asm |
モニター(U1) | 2 | 4 KB | CP/M 2.2 CBIOS カーネル(CP/M ブート時に 0xC000 に再配置)。 |
rfs_mrom.asm |
モニター(U1) | 3 | 4 KB | RFS モニター ROM ユーティリティ — ROM スキャン、MZF ロード。 |
monitor_1z-013a.asm |
モニター(U1) | 4 | 4 KB | MZ-700 1Z-013A モニターバリアント。 |
monitor_80c_1z-013a.asm |
モニター(U1) | 5 | 4 KB | 80 列表示用にパッチされた 1Z-013A。 |
ipl.asm |
モニター(U1) | 6 | 4 KB | 初期プログラムローダー。 |
Z80 は一度に 2KB のユーザー ROM のスライスしか見えないため、すべてのユーザー ROM バンクにはウィンドウ内の固定アドレスにバンク切り替えスタブのコピーが含まれています。バンク 0 がバンク 3 のルーティンを呼び出す必要がある場合、宛先バンク番号を BNKSELUSER に書き込み、新しくマッピングされたバンクの既知のエントリーポイントにジャンプし、必要なコードを実行し、バンク 0 を BNKSELUSER に書き戻して返します。このメカニズムにより、12 × 2KB = 24KB のすべてのユーザー ROM コードがどの実行コンテキストからもアクセス可能になります。
v2.0/v2.1 ボードに関する重要な制約:ユーザー ROM バンクコードのタイトなループ命令シーケンスは、0xEFF8–0xEFFF のアドレス範囲にわたってはなりません。その範囲への繰り返しの読み取りがコード化ラッチカウンターをインクリメントし、最終的にバンクレジスタが予期せずロック解除される可能性があるためです。
SD カードファイリングシステム(SDCFS)
FAT の実装(利用可能な 2KB ROM バンク内に収まらないほど大きすぎる)ではなく、RomDisk ファームウェアは SD カードファイリングシステム(SDCFS)と呼ばれる専用のファイリングシステムを使用しています。この設計は柔軟性より単純さと最小限の ROM フットプリントを優先しています。
SD カードはパーティションテーブルなしにロー(生)で使用されます。SDCFS イメージはカードのバイト 0(セクター 0)から始まります。CP/M ディスクイメージは、10 個の RFS ドライブがどれだけ満杯になっても十分なスペースがあるよう、256MB の境界に配置されます。
ディレクトリ構造
各 SDCFS ドライブには最大 256 エントリのフラットディレクトリが含まれています。各エントリは正確に 32 バイトで、標準の MZF テープヘッダー形式(Sharp MZ カセットテープで使用されるのと同じ 32 バイトレイアウト)から派生した構造を使用しています:
| フィールド | バイト | 説明 |
|---|---|---|
| FLAG1 | 1 | ビット 7 = 1:有効なエントリ。ビット 7 = 0:非アクティブ / 削除済み。 |
| FLAG2 | 1 | MZF 実行タイプ(0x01 = バイナリプログラム)。 |
| FILE NAME | 17 | 標準の 17 文字の MZF ファイル名(Sharp 文字エンコーディング)。 |
| START SECTOR | 4 | ファイルのデータブロックが始まるこのドライブイメージ内の最初の SD カードセクター。 |
| SIZE | 2 | ファイルデータの実際のバイト数。 |
| LOAD ADDR | 2 | ファイルデータをロードする Z80 RAM アドレス。 |
| EXEC ADDR | 2 | バイナリファイルの自動実行アドレス(ゼロ以外の場合、ロード後にジャンプします)。 |
| RESERVED | 3 | 現在は未使用。 |
ディレクトリは各ドライブイメージの最初の 8KB を占有します(256 エントリ × 32 バイト)。ファイルデータはその直後に続きます。各ファイルには固定の 64KB ブロックが割り当てられています — これは最大の Sharp MZ カセットテープブロックサイズに一致し、ディスク上のレイアウトをわかりやすくシンプルにし、SD ↔ テープのコピーをセクターアライメントされたバイトごとの直接転送にします。
SD カードレイアウト
アドレス 内容
────────────────────────────────────────────────────────────────────────
0x00000000 RFS ドライブ 0 (16 MB)
0x00000000–0x00001FE0 ディレクトリ(256 × 32 B)
0x00002000–0xFF2000 ファイルブロック(256 × 64 KB)
0x01002000 RFS ドライブ 1 (同じ構造)
...
0x09012000 RFS ドライブ 9 (同じ構造)
0x0A014000 (256MB 境界までのパディング)
────────────────────────────────────────────────────────────────────────
0x10000000 CP/M ディスクイメージ 0 (A:) — 16 MB
0x11000000 CP/M ディスクイメージ 1 (B:) — 16 MB
...
0x16000000 CP/M ディスクイメージ 6 (G:) — 16 MB
────────────────────────────────────────────────────────────────────────
CP/M 2.2 実装
CP/M 2.2 は RomDisk の組み込み機能として利用できます。RFS モニタープロンプトで
ブートプロセス
CPM を入力すると、SD カードから CP/M が直接ブートされます。CP/M TPA は 47KB で、CCP は BDOS の上に 0x9C00 に配置され、CBIOS 全体は ROM(モニター ROM バンク 2 とユーザー ROM バンク 8–11)に存在し、プログラム RAM を消費しません。
- RFS の
CPMコマンドはモニター ROM をバンク 2(CBIOS カーネル)に切り替えます。これには 0x0000 に CP/M コールドブートエントリーポイントが含まれています。 - CBIOS コールドブートルーティンは、すべてのハードウェア(キーボード、画面、SD カード、フロッピーが存在する場合)を初期化し、利用可能な各ドライブのディスクパラメータヘッダーを構築します。
- CBIOS は SD カードの CP/M システムディスクから CCP および BDOS イメージを 0x9C00 の RAM に読み込みます。
- 制御は 0x9C00 の CCP に移ります。CP/M が実行中です。
カスタム BIOS は、単一の 2KB バンクを超えないよう 5 つの ROM モジュールに分割されています:
| モジュール | ROM 位置 | 内容 |
|---|---|---|
cbios.asm |
モニター ROM バンク 2(アクティブ時 0x0000–0x0FFF) | すべての 17 個の CP/M CBIOS API ベクター、コールド/ウォームブートハンドラー、割り込みハンドラー、ディスクパラメータテーブル。 |
cbios_bank1.asm |
ユーザー ROM バンク 8 | オーディオ(ベル、メロディー)、リアルタイムクロックルーティン、低レベルキーボードハンドラー。 |
cbios_bank2.asm |
ユーザー ROM バンク 9 | 画面ドライバー(文字出力、スクロール、カーソル制御)、ANSI/VT100 ターミナルエミュレーター。 |
cbios_bank3.asm |
ユーザー ROM バンク 10 | SD カードディスクドライバー — CP/M 128 バイトセクターの読み書きを 256MB 境界の SDCFS ドライブイメージに変換します。 |
cbios_bank4.asm |
ユーザー ROM バンク 11 | フロッピーディスクコントローラー — 物理 CP/M フロッピーディスクをサポートします。 |
CP/M ドライブは CBIOS コールドブート時に SD カードディスクイメージにマッピングされます。標準のドライブマッピングは:
| CP/M ドライブ | イメージ | 内容 |
|---|---|---|
| A: | CP/M ディスクイメージ 0 | OS プログラム、Turbo Pascal、Hi-Soft C、Fortran 80、MS-BASIC 80。 |
| B: | CP/M ディスクイメージ 1 | Pascal MTP v5.61、Turbo Pascal v3.00a、Pascal ユーザーグループディスク。 |
| C: | CP/M ディスクイメージ 2 | PLI、PLM 80、WordStar v3.0/v3.3/v4.0。 |
| D:–G: | CP/M ディスクイメージ 3–6 | Grant Searle CP/M コレクションディスク。 |
ビルドシステム
すべての開発は Linux(Debian/Ubuntu)で行われます。ビルドシステムはリポジトリ内に自己完結しています。トップレベルのエントリーポイントは
前提条件
software/RFS/ ディレクトリの build.sh です。
| ツール | 目的 |
|---|---|
| Java JRE 8+ | GLASS Z80 アセンブラー(tools/glass.jar)を実行します。java が PATH に含まれている必要があります。 |
| bash | すべてのビルドスクリプトは bash シェルスクリプトです。 |
| perl | MZF ファイル操作のために tools/mzftool.pl で必要です。 |
| gcc / make | 最初のビルド時に cpmtools をソースからコンパイルします(自動)。 |
| dd, cat, stat | パッケージングスクリプトが使用する標準の Linux ユーティリティ。 |
GLASS Z80 アセンブラーは
ビルドフラグ
tools/glass.jar としてバンドルされています — 個別のインストールは不要です。
ビルド前に
asm/include/rfs_definitions.asm を編集してください。SPI インターフェイスフラグは相互排他的です — 正確に 1 つを 1 に設定してください:
| フラグ | デフォルト | 説明 |
|---|---|---|
HW_SPI_ENA |
1 | ハードウェア SPI(v2.0/v2.1 PCB、JP6 がハードウェア SPI 用に設定)。すべての現行ボードのデフォルト。 |
SW_SPI_ENA |
0 | ソフトウェアビットバン SPI(v2.0/v2.1 PCB、JP6 がソフトウェア SPI 用に設定)。 |
PP_SPI_ENA |
0 | パラレルポートビットバン SPI。v1.1 ボードのみ。 |
FUSIONX_ENA |
1 | tranZPUter FusionX サポートを含める。 |
ENADEBUG |
0 | アセンブリ時のデバッグ出力を有効にする。 |
git clone https://git.eaw.app/eaw/RFS.git cd RFS/software/RFS # フルビルド — すべての ROM をアセンブルし、Flash イメージをパッケージ化し、SD カードイメージをビルド: ./build.sh # MZF アプリケーションファイルの再処理を含むフルビルド # (MZF/ 内のファイルが変更された場合のみ必要): ./build.sh -m
build.sh は以下の手順を順に実行します:
- まだビルドされていない場合は
cpmtoolsをソースからコンパイルし、PATHに追加します。 tools/assemble_rfs.sh— すべての RFS ファームウェアバンク(rfs.asm、rfs_bank1–7.asm)を個別の ROM イメージにアセンブルします。tools/assemble_cpm.sh— CP/M 2.2 CBIOS(cbios.asm、cbios_bank1–4.asm)と CP/M CCP+BDOS カーネルをアセンブルします。tools/assemble_roms.sh— すべてのモニターバリアント(SA-1510、80c、1Z-013A、IPL)と MZF アプリケーションバイナリをアセンブルします。tools/processMZFfiles.sh(-mフラグ付きのみ)—MZF/からの生の MZF ファイルをMZB/内の 128 バイトおよび 256 バイトセクターパッディングイメージに変換します。tools/make_roms.sh— アセンブルされた ROM イメージと MZF アプリケーションバイナリを各 Flash チップ用の 512KB Flash ROM イメージにパッケージ化します。tools/make_cpmdisks.sh— RAW 形式(SD カード用)と CPC 拡張ディスクフォーマット(フロッピーエミュレーター用)で CP/M ディスクイメージを作成します。tools/make_sdcard.sh— 10 個の RFS ドライブイメージと 7 個の CP/M ディスクイメージを最終的な SD カードイメージに結合します。
ビルドが成功すると、
roms/ ディレクトリに以下のファイルが含まれます:
| ファイル | ターゲットチップ | 説明 |
|---|---|---|
MROM_ROMDISK_256.bin |
モニター ROM Flash(U1) | モニター ROM イメージ:SA-1510、80c SA-1510、CP/M CBIOS、RFS mrom ユーティリティ、1Z-013A モニター、IPL が 7 × 4KB バンクにわたって格納。 |
USER_ROM_256.bin |
ユーザー ROM Flash U4 | RFS バンク 0–7、CP/M CBIOS バンク 8–11、パックされた MZF アプリケーション。 |
USER_ROM_II_256.bin |
ユーザー ROM Flash U5 | 追加の MZF アプリケーション(U4 からのオーバーフロー)。 |
USER_ROM_III_256.bin |
ユーザー ROM Flash U6 | 追加の MZF アプリケーション(U5 からのオーバーフロー)。 |
SHARP_MZ80A_RFS_IMAGE_0–9.img |
SD カード | 個別の RFS ドライブイメージ、ドライブごとに 1 つ(ドライブ 0–9)。 |
SHARP_MZ80A_RFS_CPM_IMAGE_1.img |
SD カード | 結合イメージ:10 個の RFS ドライブ + 7 個の CP/M ディスクイメージ。このファイルを SD カードに書き込みます。 |
Flash チップをプログラムするには、適切な SST39SF040 互換プログラマーを使用します。
MROM_ROMDISK_256.bin を U1 に、USER_ROM_256.bin を U4 に、オーバーフローイメージを U5 と U6 が実装されている場合はそれらに書き込みます。SD カードイメージを書き込むには dd を使用します:
dd if=roms/SHARP_MZ80A_RFS_CPM_IMAGE_1.img of=/dev/sdX bs=512 status=progress
参考サイト
| リソース | リンク |
|---|---|
| RomDisk プロジェクトページ | /sharpmz-upgrades-romdisk/ |
| RFS プロジェクトページ | /sharpmz-upgrades-rfs/ |
| RFS ユーザーマニュアル | /sharpmz-upgrades-rfs-usermanual/ |
| RFS 開発者ガイド | /sharpmz-upgrades-rfs-developersguide/ |
| RFS テクニカルガイド | /sharpmz-upgrades-rfs-technicalguide/ |
| RFS ギャラリー | /sharpmz-upgrades-rfs-gallery/ |
| SFD-700 mkII テクニカルガイド | /sfd700-technicalguide/ |
| picoZ80 テクニカルガイド | /picoz80-technicalguide/ |
| GLASS Z80 アセンブラー | tools/glass.jar にバンドル |
| SST39SF040 Flash データシート | Microchip / Greenliant 製品ページ |
| AS6C4008 SRAM データシート | Alliance Memory 製品ページ |