tranZPUter SW-700 — テクニカルガイド

tranZPUter SW-700 テクニカルガイド(現行版)

このガイドは、tranZPUter SW-700 の現行バージョンのハードウェアアーキテクチャ、バスマスタリングメカニズム、メモリ管理モード、システムレジスタ、K64F サービス API、CPU 切り替え、ビデオモジュール、FPGA 仕様、ビルドシステムを解説します。tranZPUter SW-700 は、Sharp MZ-700(および現行バージョンでは Sharp MZ-2000)に K64F I/O プロセッサ、CPLD、Altera FPGA を追加する拡張ボードです。
現行バージョンは MZ-2000 ハードウェアエミュレーションをサポートし、v1.2 ベースライン(Cyclone III EP3C25)と比較して大型の FPGA デバイス(Cyclone IV EP4CE75 または EP4CE115)を使用しています。バージョン修飾子(v1.2 / v1.3)が明示されていない限り、このガイドのすべての内容は現行ハードウェアに適用されます。
日常的な使用と TZFS コマンドリファレンスについてはユーザーマニュアルを参照してください。Z80 アセンブリと FPGA ソースのウォークスルーについてはデベロッパーズガイドを参照してください。

バスマスタリング

tranZPUter SW-700 は Sharp MZ-700(または MZ-2000)の拡張バスに接続します。CPLD がバスを監視し、いつでも Z80 の /BUSRQ ラインをアサートできます。/BUSRQ がアサートされると、Z80 は現在のマシンサイクルを完了してから、アドレスバス、データバス、コントロールバスをトライステート化し、/BUSAK 経由でバスリリースを通知します。
Z80 がバスをリリースすると、FPGA が 3 つのバスすべての所有権を取得します。この状態で FPGA は次のように機能できます:
  • DMA エンジン — Z80 を介さずに 512 KB SRAM とメインボードメモリの間でデータをバルク転送する。
  • ソフト CPU — T80 または ZPU Evolution コアが SRAM から直接実行し、まるでシステム CPU であるかのようにメモリ空間全体をアドレス指定する。
FPGA が /BUSRQ をリリースすると、Z80 はバスを取り戻し、中断されたまさにその時点から実行を再開します — Z80 はリセットされなかったため、すべてのレジスタ状態が保持されます。SRAM の内容もハンドオフ間で保持されるため、FPGA がそこに配置したコードやデータは Z80 プログラムから引き続き利用可能です。
CPLD は 5V MZ バス信号と 3.3V FPGA I/O の間のレベル変換を処理し、tranZPUter レジスタが MZ マザーボードのペリフェラルと競合することなく Z80 I/O 空間に現れるようにアドレスデコードを実行します。

ハードウェアコンポーネント

K64F ARM Cortex-M4(I/O プロセッサ)
NXP/Freescale K64F は 120 MHz で動作し、システムの I/O プロセッサとして機能します。Z80 および FPGA とは独立して動作し、zOS 組み込みオペレーティングシステムを実行します。その役割は:
  • SD カード管理 — SD カードへの FAT32 ファイルシステムアクセスを提供する。すべての MZF プログラムファイル、ROM イメージ、FPGA ビットストリームはここに保存される。
  • ファームウェア/ROM ロード — SD カードから ROM イメージと FPGA ビットストリームを読み取り、512 KB SRAM または FPGA 設定フラッシュにロードする。
  • TZFS サービス API — TZFS(tranZPUter ファイリングシステム)で動作している Z80 プログラムからのリクエストを処理する。Z80 は 0xED80 の共有メモリ領域にコマンドとパラメータを書き込み、I/O ポート 0x68 の SVCREQ レジスタ経由で K64F をトリガーする。K64F はリクエストをポーリングし、実行し、結果を共有メモリに書き戻し、SVCREQ フラグをクリアする。
  • CPU 周波数合成 — オンデマンドで Z80 に切り替えられる代替 CPU クロックを生成し、Z80 が MZ マザーボードのネイティブ周波数以外の速度で動作できるようにする。
K64F は専用のコントロールラインで FPGA および CPLD に接続し、FPGA と SRAM バスを共有します。

MAX 7000A CPLD(512 マクロセル)
Altera MAX 7000A は 512 マクロセルを持つ 5V 耐性 CPLD です。MZ 拡張バスに直接接続し、3 つの機能を実行します:
  • レベル変換 — 5V MZ-700/MZ-2000 バス信号を 3.3V FPGA I/O レールにブリッジする。
  • バスマスタリングロジック — Z80 に /BUSRQ をアサートし、/BUSAK を監視して Z80 と FPGA 間のバス所有権を調停する。
  • アドレスデコード — tranZPUter I/O レジスタ(0x60–0x6F、0xA8–0xAD、0xF0 など)を Z80 I/O 空間にマップし、アクティブな TZMM メモリ管理モードに従って SRAM を Z80 アドレス空間にゲートする。

Altera FPGA
ボードリビジョン全体で 2 種類の FPGA バリアントが使用されています:
バージョン デバイス ロジックエレメント BRAM パッケージ
v1.2 Cyclone III EP3C25E144C8 25K LE 76 KB 144ピン TQFP
v1.3 Cyclone IV EP4CE75F484C8 75K LE 360 KB 484ピン BGA
v1.3 Cyclone IV EP4CE115F484C8 115K LE 480 KB 484ピン BGA
FPGA が実装するもの:
  • T80 ソフト Z80 — バスマスタリングがアクティブなときにバスを引き継ぐ合成された Z80 互換 CPU。
  • ZPU Evolution ソフト CPU — SRAM から ZPU バイナリを実行できる 32 ビットスタックベースのソフトプロセッサ。
  • ビデオコントローラ — すべての Sharp MZ ビデオモードをサポートし、VGA 出力を提供する(ビデオモジュール参照)。
  • GPU — ハードウェアアクセラレートされたグラフィックスプリミティブ(VRAM クリア、矩形フィル、GRAM クリア)。
FPGA 設定は SPI フラッシュに格納されています:EPCS16(v1.2)または EPCS64(v1.3)。K64F は SD カード上のビットストリームからこのフラッシュを再プログラムできます。

512 KB スタティック RAM(AS6C4008)
単一の 512 KB × 8 AS6C4008 SRAM デバイスが tranZPUter の拡張メモリを提供します。CPLD は、アクティブな TZMM モードに応じて、この SRAM の異なる領域を Z80 の 64 KB アドレス空間にページングします(メモリ管理モード参照)。SRAM は Z80(CPLD アドレスデコーダ経由)と FPGA(直接接続経由)の両方からアクセス可能であり、その内容はバスマスタリングハンドオフ間で保持されます。

電源
3 つのオンボード LDO レギュレーターが MZ 拡張バスの 5V 電源から必要な電源レールを生成します:
レール 消費元
3.3V CPLD、K64F、汎用 I/O、SRAM
2.5V FPGA I/O バンク
1.2V FPGA コア

メモリ管理モード

CPLD は I/O ポート 0x60 へのモード値の書き込みで制御されるメモリ管理ユニットを実装します。各モードは、512 KB SRAM の領域が Z80 の 64 KB アドレス空間にページングされる方法、および MZ マザーボードの ROM と RAM、または tranZPUter SRAM が各アドレス範囲を提供するかどうかを選択します。
モードレジスタは TZMM(tranZPUter メモリモード)レジスタと呼ばれます。主なモードは:
モード 説明
TZMM_ORIG 0x00 オリジナル MZ-700 モード — マザーボード IPL ROM、DRAM、VRAM が通常通り見える。tranZPUter SRAM は非アクティブ。
TZMM_BOOT 0x01 TZFS ブートストラップを保持するために 0xE800–0xEFFF に tranZPUter SRAM がマップされる。他のすべてのアドレスはマザーボードのリソースを使用。
TZMM_TZFS 0x22 TZFS モード — 64 KB アドレス空間全体が tranZPUter SRAM から提供される。K64F が TZFS コードと ROM イメージをプリロード済み。
TZMM_TZFS2 0x23 TZFS バンクモード — 代替コードバンク 2 がアクティブ。
TZMM_TZFS3 0x24 TZFS バンクモード — 代替コードバンク 3 がアクティブ。
TZMM_TZFS4 0x25 TZFS バンクモード — 代替コードバンク 4 がアクティブ。
TZMM_CPM 0x26 CP/M モード — 完全な 64 KB SRAM マップ済み、K64F が CBIOS と CCP をロード。
TZMM_CPM2 0x27 CP/M モードバリアント — 代替 CBIOS バンクがアクティブ。
TZMM_MZ700_0 MZ-700 互換ページング — マザーボード ROM と VRAM レイアウトが保持される。
TZMM_MZ2000 MZ-2000 互換ページング — MZ-2000 ROM と VRAM レイアウトがエミュレートされる。現行バージョンのみ。
電源投入時、CPLD は TZMM_ORIG(0x00)から開始し、標準 MZ-700 メモリマップを提示します。0xE800 の TZFS ブートストラップ ROM は TZMM_BOOT に切り替えて自分自身を可視化し、K64F が完全な TZFS イメージを SRAM にロードすると TZMM_TZFS に切り替えます。
TZMM_ORIG (0x00) — オリジナル MZ-700 レイアウト
  0x0000–0x0FFF   MZ マザーボード IPL ROM
  0x1000–0xCFFF   MZ マザーボード DRAM
  0xD000–0xDFFF   MZ マザーボード VRAM / メモリマップド I/O
  0xE000–0xE7FF   MZ マザーボード VRAM 拡張 / I/O
  0xE800–0xEFFF   MZ マザーボード ROM(ユーザー ROM 領域)
  0xF000–0xFFFF   MZ マザーボード ROM / 未使用

TZMM_TZFS (0x22) — 完全 SRAM モード
  0x0000–0xFFFF   tranZPUter 512 KB SRAM(64 KB ウィンドウ)
                  K64F がロード済み: 0x0000 に IPL、0xE800 に TZFS、ROM 全体

TZMM_CPM (0x26) — CP/M モード
  0x0000–0xFFFF   tranZPUter 512 KB SRAM(64 KB ウィンドウ)
                  K64F がロード済み: CP/M CCP+BDOS+CBIOS

システムレジスタ

tranZPUter はコントロールレジスタを Z80 I/O アドレス空間にマップします。すべてのレジスタは Z80 の IN および OUT 命令でアクセスします。CPLD が I/O アドレスをデコードし、アクセスを適切なハードウェアにルーティングします。

レジスタマップ
ポート   レジスタ                      R/W   説明
──────────────────────────────────────────────────────────────────────────────
0x60    メモリ管理設定                 W    TZMM モード選択(メモリモード参照)
0x62    CPU 代替周波数設定             W    Z80 クロックを K64F 生成代替周波数に切り替え
0x64    CPU ベース周波数設定           W    Z80 クロックを MZ マザーボード周波数に戻す
0x66    CPU 周波数変更                 W    CPU 周波数を Hz 単位で設定(共有メモリ経由の 32 ビット値)
0x68    サービスリクエスト(SVCREQ)  W    K64F サービスリクエストをトリガー; K64F が完了時にポーリングしてクリア
0x6B    システムコマンドレジスタ       W    システムレベルコマンド(リセット、モード変更)
0x6C    CPU 設定                      R/W  アクティブ CPU コアを選択(Z80、T80、ZPU Evolution)
0x6D    CPU 情報                      R    利用可能な CPU 機能とソフト CPU の存在を読み取る
0x6E    システム設定                   R/W  システム機能フラグ
0x6F    システム情報                   R    ボード識別とハードウェアステータス
0xA8    ビデオ制御                     R/W  マシンモデル、桁幅、カラー有効、PCG、VGA モード
0xA9    ビデオグラフィックスモード     R/W  GRAM バンク選択、VRAM/GRAM 出力有効、ブレンド演算子
0xAA    カラーライター赤               W    間接 GRAM 書き込み用 8 ピクセル赤チャンネルフィルタマスク
0xAB    カラーライター緑               W    間接 GRAM 書き込み用 8 ピクセル緑チャンネルフィルタマスク
0xAC    カラーライター青               W    間接 GRAM 書き込み用 8 ピクセル青チャンネルフィルタマスク
0xAD    メモリページ/ステータス        R/W  GRAM→CPU 有効(W ビット 0)、CGROM→CPU 有効(W ビット 7);
                                          H/V ブランキングステータス(R ビット 5–6)
0xD0    ビデオモードパラメータ 0       R/W  ビデオタイミング/モードパラメータ
0xD1    ビデオモードパラメータ 1       R/W  ビデオタイミング/モードパラメータ
0xD2    ビデオモードパラメータ 2       R/W  ビデオタイミング/モードパラメータ
0xD3    パレットエントリ 0             W    パレットカラーデータ
0xD4    パレットエントリ 1             W    パレットカラーデータ
0xD5    パレットエントリ 2             W    パレットカラーデータ
0xD6    パレットエントリ 3             W    パレットカラーデータ
0xD7    パレットエントリ 4             W    パレットカラーデータ
0xF0    システム制御(CPLD)           W    CPLD 直接制御レジスタ
0xF3    VGA ボーダーカラー             W    VGA 出力のボーダーカラー
0xF5    パレット選択                   W    後続のパレット書き込み用のアクティブパレットエントリを選択
?F6     GPU パラメータ                 W    GPU プリミティブコマンドのパラメータ
?F7     GPU コマンド/ステータス        R/W  GPU コマンド発行(W); GPU ビジー/完了ステータス読み取り(R)
──────────────────────────────────────────────────────────────────────────────

CPU 設定レジスタ — ポート 0x6C
ビット フィールド 説明
2:0 CPU 選択 000 = Z80(マザーボードのハード CPU)、001 = T80(FPGA のソフト Z80)、010 = ZPU Evolution(FPGA のソフト 32 ビット CPU)、011–111 = 予約済み
7:3 予約済み、ゼロを書き込む

CPU 情報レジスタ — ポート 0x6D(読み取り)
ビット フィールド 説明
2:0 CPUMODE_IS_SOFT_MASK / CPUMODE_IS_SOFT_AVAIL 現在のビットストリームで 1 つ以上の FPGA ソフト CPU コアが利用可能な場合は非ゼロ
3 CPUMODE_IS_T80 T80 ソフト Z80 コアが存在する場合にセット
4 CPUMODE_IS_ZPU_EVO ZPU Evolution コアが存在する場合にセット
5 CPUMODE_IS_EMU_MZ マシンエミュレーション(MZ モデル切り替え)が利用可能な場合にセット
7:6 予約済み

K64F サービス API

K64F は TZFS で動作している Z80 プログラムにサービス API を公開します。メカニズムは SRAM 内の共有メモリ領域です — Z80 はコマンドとパラメータをその領域に書き込み、K64F をトリガーし、完了をポーリングします。バスマスタリングは不要です;K64F が SVCREQ レジスタを監視している間、Z80 と K64F は通常のメモリ読み書きで通信します。

リクエスト/レスポンスメカニズム
共有メモリベース: 0xED80(SRAM 内、TZMM_TZFS および関連モードで Z80 から見える)

オフセット  シンボル      説明
──────────────────────────────────────────────────────────────
0x00    TZSVCCMD      サービスコマンドコード(1 バイト、Z80 が書き込む)
0x01    TZSVCSTS      ステータス/結果コード(1 バイト、K64F が完了時に書き込む)
0x02    TZSVCREQ      リクエストセマフォ(Z80 がセット、K64F がクリア)
0x04    TZSVCP1       パラメータ 1(コマンド固有)
...     ...           パラメータ 2–N(コマンド固有のサイズと意味)
──────────────────────────────────────────────────────────────

Z80 手順:
  1. TZSVCCMD(0xED80)にコマンドコードを書き込む。
  2. TZSVCP1 以降にパラメータを書き込む。
  3. OUT (0x68), A          ; SVCREQ をアサート — K64F を起動
  4. TZSVCSTS が非ゼロになるまでポーリング(K64F がリクエストを完了した)。
  5. 共有メモリから結果データを読み取る。

サービスコマンドリファレンス
以下の表は主要なサービスコマンドを示します。パラメータの詳細は TZFS ファームウェアソースに記載されています。
コマンド カテゴリ 説明
READDIR ファイル I/O SD カード FAT32 ボリュームからディレクトリエントリを読み取る
LOADFILE ファイル I/O SD カードから名前付きファイルを SRAM にロードする
SAVEFILE ファイル I/O SRAM の領域を SD カードの名前付きファイルとして保存する
LOAD40ABIOS BIOS ロード MZ-80A BIOS ROM イメージを SRAM にロードする
LOAD700BIOS40 BIOS ロード MZ-700 40 桁 BIOS イメージを SRAM にロードする
LOAD2000IPL BIOS ロード MZ-2000 IPL ROM イメージを SRAM にロードする(現行バージョンのみ)
ADDSDDRIVE CP/M ディスク SD カードの CP/M ディスクイメージを登録する
READSDDRIVE CP/M ディスク SD カードのディスクイメージから 128 バイトの CP/M セクタを読み取る
WRITESDDRIVE CP/M ディスク SD カードのディスクイメージに 128 バイトの CP/M セクタを書き込む
CPU_BASEFREQ CPU 周波数 Z80 クロックを MZ マザーボードネイティブ周波数に切り替える
CPU_ALTFREQ CPU 周波数 Z80 クロックを K64F 生成代替周波数に切り替える
CPU_CHGFREQ CPU 周波数 Z80 クロックを Hz 単位の特定周波数に設定する
CPU_SETZ80 CPU 切り替え 物理 Z80 を有効化する(バスマスタリングを解放する)
CPU_SETT80 CPU 切り替え T80 ファームウェアをロードして FPGA の T80 ソフト Z80 を有効化する
CPU_SETZPUEVO CPU 切り替え ZPU Evolution ファームウェアをロードして ZPU ソフト CPU を有効化する
EMU_SETMZ80K エミュレーション FPGA ビデオと I/O を MZ-80K エミュレートに設定する
EMU_SETMZ80C エミュレーション FPGA を MZ-80C エミュレートに設定する
EMU_SETMZ1200 エミュレーション FPGA を MZ-1200 エミュレートに設定する
EMU_SETMZ80A エミュレーション FPGA を MZ-80A エミュレートに設定する
EMU_SETMZ700 エミュレーション FPGA を MZ-700 エミュレートに設定する
EMU_SETMZ800 エミュレーション FPGA を MZ-800 エミュレートに設定する
EMU_SETMZ80B エミュレーション FPGA を MZ-80B エミュレートに設定する
EMU_SETMZ2000 エミュレーション FPGA を MZ-2000 エミュレートに設定する(現行バージョンのみ)
EMU_SETMZ2500 エミュレーション FPGA を MZ-2500 エミュレートに設定する

CPU 切り替え

tranZPUter は 3 つの CPU の選択肢で動作できます:MZ マザーボードの物理 Z80、FPGA に実装された T80 ソフト Z80、FPGA に実装された ZPU Evolution 32 ビットソフト CPU。CPU 切り替えは Z80 プログラム、K64F、FPGA 間で調整されます。

切り替え手順
  1. Z80 プログラムが K64F API(ポート 0x68)経由で CPU_SETT80 または CPU_SETZPUEVO サービスリクエストを発行する。
  2. K64F がターゲット CPU に必要なファームウェアイメージを SD カードから 512 KB SRAM にロードする。
  3. K64F が FPGA に新しい CPU コアを有効化するよう通知する。CPLD が Z80 に /BUSRQ をアサートする。
  4. Z80 がバスをリリースすると(/BUSAK がアサート)、FPGA ソフト CPU がアドレスバス、データバス、コントロールバスの所有権を取得し、SRAM から実行を開始する。
  5. 物理 Z80 はソフト CPU 実行の間、バスリリース状態に保持される。
  6. Z80 実行に戻るには、動作中のプログラム(または K64F)が CPU_SETZ80 を発行し、FPGA が /BUSRQ をリリースする。Z80 はバスを取り戻して再開する。SRAM の内容は保持される。
I/O ポート 0x6C の CPU 設定レジスタを直接書き込むことで CPU コアを選択することもできます;このレジスタへの書き込みは同じ K64F 調整フローをトリガーします。

利用可能な CPU コア
コア ポート 0x6C ビット 2:0 備考
Z80(ハード) 000 MZ マザーボードの物理 Z80。リセット後のデフォルト。
T80 001 FPGA ファブリックの合成された Z80 互換コア。完全な Z80 命令セット。
ZPU Evolution 010 FPGA の 32 ビットスタックベースのソフト CPU。ZPU バイナリを実行する。
予約済み 011–111 現在未割り当て。
CPU 切り替えを試みる前に CPU 情報レジスタ(0x6D)を読み取り、希望するコアがロードされた FPGA ビットストリームに存在することを確認してください。CPUMODE_IS_T80(ビット 3)と CPUMODE_IS_ZPU_EVO(ビット 4)フラグが可用性を示します。

ビデオモジュール

FPGA はすべての Sharp MZ ディスプレイモードをサポートし、VGA 出力を持つグラフィックスフレームバッファを追加する完全なビデオコントローラを実装します。ビデオレジスタは 0xA8–0xAD(プライマリコントロール)の Z80 I/O 空間にマップされ、追加のレジスタは 0xD0–0xD7(パレットとモードパラメータ)と 0xF3、0xF5(VGA ボーダーとパレット選択)にあります。
現行バージョンでは、以前にサポートされていたすべての MZ モデルに加えて MZ-2000 ビデオハードウェアのサポートが含まれています。

プライマリビデオレジスタ(0xA8–0xAD)
ポート 0xA8 — ビデオ制御レジスタ
  ビット 2:0   マシンモデル選択
               000 = MZ-80K
               001 = MZ-80C
               010 = MZ-1200
               011 = MZ-80A
               100 = MZ-700
               101 = MZ-800
               110 = MZ-80B
               111 = MZ-2000(現行バージョンのみ)
  ビット 3     桁幅: 0 = 40 桁、1 = 80 桁
  ビット 4     カラー有効: 0 = モノクロ、1 = カラー
  ビット 5     PCG(プログラマブルキャラクタジェネレータ)有効
  ビット 7:6   VGA 出力モード:
               00 = 640×480 @ 60 Hz
               01 = 800×600 @ 60 Hz
               10 = 1024×768 @ 60 Hz
               11 = 予約済み

ポート 0xA9 — グラフィックスモードレジスタ
  ビット 1:0   GRAM バンク選択(3 つの R/G/B バンクのどれがアクティブ書き込みターゲットか)
  ビット 2     VRAM 出力有効
  ビット 3     GRAM 出力有効
  ビット 5:4   ブレンド演算子(OR、AND、XOR、REPLACE)
  ビット 7:6   予約済み

ポート 0xAA — カラーライター赤フィルタ
  ビット 7:0   間接(カラーライター)GRAM 書き込み用 8 ピクセル赤チャンネルマスク
               各ビットは水平 8 ピクセルストライプの 1 ピクセルに対応

ポート 0xAB — カラーライター緑フィルタ
  ビット 7:0   8 ピクセル緑チャンネルマスク(0xAA と同じピクセルレイアウト)

ポート 0xAC — カラーライター青フィルタ
  ビット 7:0   8 ピクセル青チャンネルマスク(0xAA と同じピクセルレイアウト)

ポート 0xAD — メモリページ/ステータスレジスタ
  書き込み:
    ビット 0   GRAM→CPU 有効: 1 = GRAM を CPU アドレス空間に直接読み書きのためマップ
    ビット 7   CGROM→CPU 有効: 1 = キャラクタジェネレータ ROM を CPU アドレス空間にマップ
  読み取り:
    ビット 5   水平ブランキングステータス: 1 = 現在 HBlank 中
    ビット 6   垂直ブランキングステータス: 1 = 現在 VBlank 中

グラフィックスフレームバッファ
FPGA はキャラクタディスプレイと並行して 640×200(または 320×200)グラフィックスレイヤーを実装します。フレームバッファは 3 つの独立した 16 KB バンク — 赤、緑、青 — として整理され、3 ビット(8 色)ピクセルデータを提供します。各バンクは 640×200 で 1 ビット/ピクセルです。
GRAM への書き込みは 2 つの方法で実行できます:
  • ダイレクトモード — GRAM→CPU 有効(ポート 0xAD ビット 0)をセットし、Z80 コードから GRAM アドレスを直接読み書きする。各バンクはポート 0xA9 ビット 1:0 で個別に選択される。
  • カラーライターモード — VRAM キャラクタアドレスに 1 回書き込む;カラーライターハードウェアがポート 0xAA、0xAB、0xAC に書き込まれた 8 ピクセルマスクを使用してすべての 3 つの GRAM バンクを同時に更新する。これにより 1 回の書き込みでカラーキャラクタセルを描画できる。

VGA 出力
FPGA はネイティブ Sharp MZ ディスプレイを標準 VGA タイミングにスケールします。ポート 0xA8 ビット 7:6 で 3 つの出力解像度が選択可能です。v1.3 ハードウェアでは、すべてのモードでダブルバッファードディスプレイが利用可能です — Z80 または GPU が一方のバッファに書き込んでいる間、ディスプレイはもう一方のバッファから読み取ります。
VGA モード(ビット 7:6) 出力解像度 リフレッシュ
00 640 × 480 60 Hz
01 800 × 600 60 Hz
10 1024 × 768 60 Hz
11 予約済み

GPU
シンプルな GPU が I/O ポート ?F6(パラメータ)と ?F7(コマンド/ステータス)経由でアクセス可能です。サポートされるプリミティブ:
  • VRAM クリア — キャラクタディスプレイを指定されたキャラクタと属性で埋める。
  • 矩形フィル — GRAM の矩形領域をカラーで埋める。
  • GRAM クリア — 3 つのすべての GRAM バンクをゼロにする。
?F7 にコマンドコードを書き込むと操作が開始されます。?F7 を読み取るとビジー/完了ステータスフラグが返されます。Z80 は次のコマンドを発行する前にステータスフラグをポーリングする必要があります。

FPGA 仕様

tranZPUter SW-700 で使用される各 FPGA バリアントの完全な機能概要:
機能 v1.2(EP3C25) v1.3(EP4CE75 / EP4CE115)
ロジックエレメント 25K 75K / 115K
オンチップ BRAM 76 KB 360 KB / 480 KB
パッケージ 144ピン TQFP 484ピン BGA
設定フラッシュ EPCS16 EPCS64
ソフト CPU T80、ZPU Evolution T80、ZPU Evolution
MZ ビデオモデル MZ-80K/C/1200/80A/700/800/80B + MZ-2000(現行)
VGA 出力 640×480、800×600、1024×768 640×480、800×600、1024×768
ダブルバッファードディスプレイ なし あり(全モード)
GRAM バンク 3 × 16 KB(R/G/B) 3 × 16 KB(R/G/B)
GPU VRAM クリア、矩形フィル、GRAM クリア VRAM クリア、矩形フィル、GRAM クリア
サポートされる MZ ビデオモード(現行バージョン FPGA):
  MZ-80K    — 40×25 モノクロキャラクタディスプレイ
  MZ-80C    — 40×25 モノクロキャラクタディスプレイ
  MZ-1200   — 40×25 モノクロキャラクタディスプレイ
  MZ-80A    — 40×25 モノクロキャラクタディスプレイ
  MZ-700    — 8 色属性付き 40×25 キャラクタディスプレイ
  MZ-800    — 40×25 / 80×25 キャラクタ; 320×200 / 640×200 グラフィックス
  MZ-80B    — 40×25 キャラクタディスプレイ; 320×200 / 640×200 グラフィックス
  MZ-2000   — 40×25 / 80×25 キャラクタ; 320×200 / 640×200 グラフィックス(現行バージョンのみ)

グラフィックスフレームバッファ:
  解像度: 640×200 または 320×200 ピクセル
  色深度: 1 ピクセルあたり 3 ビット(8 色)
  構成: 3 つの独立した 16 KB プレーン — 赤、緑、青
  GRAM 合計: 3 × 16 KB = 48 KB

ビルドシステム

tranZPUter SW-700 ファームウェアは 3 つのコンポーネントにまたがり、それぞれ独自のツールチェーンがあります:FPGA ビットストリーム(Quartus Prime)、K64F ファームウェア(ARM GCC)、Z80 ソフトウェア(GLASS アセンブラ)。すべての開発は Linux で行われます。

FPGA — Quartus Prime
FPGA RTL は Altera/Intel Quartus Prime で合成されます。必要なバージョンはターゲットデバイスによって異なります:
ボードバージョン FPGA デバイス Quartus バージョン
v1.2 Cyclone III EP3C25 13.1(Cyclone III サポートがある最後のバージョン)
v1.3 Cyclone IV EP4CE75 / EP4CE115 現行 Quartus Prime Lite / Standard
各バージョンの正確なビルド環境を再現するための Docker コンテナがリポジトリに提供されており、開発ホストでのツールチェーンのインストールを回避できます。適切なコンテナを実行し、標準の Quartus ビルドフロー(quartus_sh --flow compile)を使用するか、Quartus GUI でプロジェクトを開いてください。
合成後、生成された .sof(SRAM オブジェクトファイル)または .rbf(ロウバイナリファイル)は Quartus プログラマを使用して EPCS フラッシュに書き込まれるか、K64F が起動時にロードするために SD カードに配置できます。

K64F ファームウェア — ARM GCC
K64F ファームウェア(zOS)は ARM ベアメタル GCC ツールチェーン(arm-none-eabi-gcc)でビルドされます。ビルドエントリーポイントは software.moved.to.TZFS/ の下にある buildhost.sh です:
cd software.moved.to.TZFS
./buildhost.sh
このスクリプトは zOS カーネル、SD カード FAT32 ドライバ、SVCREQ サービスディスパッチテーブル、およびすべてのサポートする I/O ドライバをコンパイルし、リンクして K64F にフラッシュするのに適したバイナリを生成します。フラッシュは K64F の USB DFU ブートローダー経由で実行されます(K64F が DFU モードで起動したときに現れるマスストレージデバイスへのドラッグアンドドロップ)。

Z80 / TZFS ソフトウェア — GLASS アセンブラ
TZFS および関連する Z80 ソフトウェアは GLASS Z80 アセンブラ(tools/glass.jar としてバンドル、Java 8+ 必須)でアセンブルされます。software.moved.to.TZFS/ ツリーのビルドスクリプトが GLASS を呼び出し、結果のバイナリを SD カード用の MZF イメージとしてパッケージ化します。

参考サイト

リソース リンク
tranZPUter SW-700 プロジェクトページ /sharpmz-upgrades-tranzputer-sw700/
tranZPUter SW-700 ユーザーマニュアル /sharpmz-upgrades-tranzputer-sw700-usermanual/
tranZPUter SW-700 デベロッパーズガイド /sharpmz-upgrades-tranzputer-sw700-developersguide/
tranZPUter SW-700 ギャラリー /sharpmz-upgrades-tranzputer-sw700-gallery/
RFS テクニカルガイド /sharpmz-upgrades-rfs-technicalguide/
Sharp MZ-700 ハードウェアリファレンス MZ-700 テクニカルマニュアル
Altera MAX 7000A データシート Intel/Altera MAX 7000A 製品ページ
NXP K64F サブファミリーリファレンス NXP K64 リファレンスマニュアル
GLASS Z80 アセンブラ tools/glass.jar としてバンドル済み
Quartus Prime(Intel FPGA) https://www.intel.com/content/www/us/en/collections/products/fpga/software/downloads.html