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
最初の量産ボードです。主な特徴:
  • モニター 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 と比較して低速です。
v1.1 ボードは PP_SPI_ENA ビルドフラグを使用します。コード化ラッチはなく、バンクレジスタはいつでも書き込み可能です。

バージョン 2.0
ハードウェア SPI、追加の Flash スロット、オプションの SRAM、バンクレジスタのセキュリティメカニズムを追加した大幅な改訂版です:
  • コード化ラッチ — 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 回路のどちらを実装するかを選択します。
既知のバグ: Z80 は DRAM リフレッシュサイクルにアドレスバスピン A0–A7(リフレッシュアドレス)を使用します。これらのサイクルが 0xEFF8–0xEFFF 範囲のアドレスを生成した場合、74HCT191 カウンターが誤ってインクリメントされ、コード化ラッチが意図せず開いてバンクレジスタへの偶発的な書き込みが可能になります。

バージョン 2.1(現行版)
v2.0 のリフレッシュアドレス問題に対処した対象を絞ったバグ修正リビジョン。v2.0 からの変更点:
  • カウンタークロック入力にディスクリートダイオードによる AND ゲート(D1/D2)を追加。ゲートはアドレスデコード信号と Z80 の /MREQ 信号を組み合わせるため、真のメモリ読み取りバスサイクル(/MREQ がアサートされたもの)のみが 74HCT191 カウンターをインクリメントできます。リフレッシュサイクルは /RFSH をアサートし /MREQ をデアサートするため、D1/D2 AND ゲートによってブロックされます。
  • 0xEFF9 を専用のコード化ラッチクリアアドレスとして再配線。 0xEFF9 への 1 回の読み取りで 74HCT191 カウンターが 0 にリセットされ、I/O 制御レジスタアクセスが即座に無効化されます。
  • PCB シルクスクリーンの整理 — 部品参照指定子を修正。
バージョン 2.1 は現在推奨されているバージョンです。すべての新しいビルドは v2.1 を使用してください。

メモリアーキテクチャ

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 (空) 未使用。

ユーザー ROM バンク(各 2KB)
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 バンクを誤って切り替えることを防ぎます。
動作:
  1. 電源投入時またはラッチリセット読み取り後、74HCT191 カウンターは 0 にあります。I/O 制御レジスタデコードロジックが無効化され、0xEFF8–0xEFFF からの読み取りは通常通り Flash ROM データを返し、BNKSELMROM/BNKSELUSER/BNKCTRL への書き込みは効果がありません。
  2. 制御レジスタのロックを解除するには:0xEFF8–0xEFFF の範囲の任意のアドレスへの読み取りサイクルを正確に 16 回実行します。各読み取りでカウンターが 1 つインクリメントされます。v2.1 ボードでは、真のメモリ読み取りバスサイクル(/MREQ がアサートされたもの)のみがカウントされます。Z80 DRAM リフレッシュサイクル(/RFSH をアサートし /MREQ をデアサートするもの)は D1/D2 AND ゲートによってブロックされ、カウンターをインクリメントしません。
  3. カウンターがターミナルカウント(16)に達すると、TC 出力がアクティブになり、I/O 制御レジスタデコードロジックを有効にします。バンク選択レジスタが書き込み可能になります。
  4. 再ロックするには:アドレス 0xEFF9 から 1 回読み取ります。これによりカウンターロード/リセットラインがアサートされ、カウンターが 0 に戻り、I/O 制御レジスタが即座に無効化されます。
ロック解除に必要な読み取り回数は、BNKCTRL レジスタの CDLTCH1–3 ビットで調整できます。これらのビットはカウンターの開始オフセットを設定し(実質的に 1〜16 回の読み取りが必要になるように)、デフォルトのファームウェアは完全な 16 回読み取りシーケンスを使用します。

バンク制御レジスタ(BNKCTRL、0xEFFF)
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 ボード):
  1. HWSPIDATA(0xEFFB)にデータバイトを書き込みます。74HCT595 シフトレジスタが送信準備のためにバイトをロードします。
  2. 任意の値を HWSPISTART(0xEFFC)に書き込んで転送を開始します。シフトレジスタは 16MHz 発振器に同期して MOSI ラインにバイトをクロックアウトしながら、74HCT165 が SD カードから MISO ビットを同時にシフトインします。
  3. HWSPIDATA(0xEFFB)を読み取って受信バイトを取得します。完全な 8 ビット交換が 1 回の Z80 メモリ読み取りサイクルより短い時間で完了します。これがハードウェア SPI スループットが Flash ROM アクセス速度と同等である理由です。
ソフトウェアビットバン SPI 動作: ファームウェアは BNKCTRL レジスタ(0xEFFF)の BBCLK(ビット 0)、BBMOSI(ビット 2)、SDCS(ビット 1)フィールドをタイトなループで直接操作し、送信ビット値を BBMOSI に設定しながら 1 ビットごとに BBCLK を 1 回トグルします。MISO は専用の入力ポートビットからサンプリングされます。これにより約 300KB/s が達成され、SD カード転送には十分です。
パラレルポートビットバン(v1.1 のみ): Sharp MZ-80A プリンターパラレルポートのデータラインとステータスラインを SPI 信号として使用します。プリンターポート I/O タイミングの制約により、3 つのオプションの中で最も低速です。

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

完全なモジュールテーブル — すべてのソースファイル、ターゲット 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 を消費しません。
ブートプロセス
  1. RFS の CPM コマンドはモニター ROM をバンク 2(CBIOS カーネル)に切り替えます。これには 0x0000 に CP/M コールドブートエントリーポイントが含まれています。
  2. CBIOS コールドブートルーティンは、すべてのハードウェア(キーボード、画面、SD カード、フロッピーが存在する場合)を初期化し、利用可能な各ドライブのディスクパラメータヘッダーを構築します。
  3. CBIOS は SD カードの CP/M システムディスクから CCP および BDOS イメージを 0x9C00 の RAM に読み込みます。
  4. 制御は 0x9C00 の CCP に移ります。CP/M が実行中です。
ウォームブート時(例:大きなアプリケーションが CCP を上書きした後)、0x0003 の CBIOS ウォームブートベクターはディスクから CCP と BDOS を再ロードして CCP に再入します。
CBIOS モジュールレイアウト
カスタム 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 ドライブ設定
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)を実行します。javaPATH に含まれている必要があります。
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 は以下の手順を順に実行します:
  1. まだビルドされていない場合は cpmtools をソースからコンパイルし、PATH に追加します。
  2. tools/assemble_rfs.sh — すべての RFS ファームウェアバンク(rfs.asm、rfs_bank1–7.asm)を個別の ROM イメージにアセンブルします。
  3. tools/assemble_cpm.sh — CP/M 2.2 CBIOS(cbios.asm、cbios_bank1–4.asm)と CP/M CCP+BDOS カーネルをアセンブルします。
  4. tools/assemble_roms.sh — すべてのモニターバリアント(SA-1510、80c、1Z-013A、IPL)と MZF アプリケーションバイナリをアセンブルします。
  5. tools/processMZFfiles.sh-m フラグ付きのみ)— MZF/ からの生の MZF ファイルを MZB/ 内の 128 バイトおよび 256 バイトセクターパッディングイメージに変換します。
  6. tools/make_roms.sh — アセンブルされた ROM イメージと MZF アプリケーションバイナリを各 Flash チップ用の 512KB Flash ROM イメージにパッケージ化します。
  7. tools/make_cpmdisks.sh — RAW 形式(SD カード用)と CPC 拡張ディスクフォーマット(フロッピーエミュレーター用)で CP/M ディスクイメージを作成します。
  8. 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 製品ページ