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 であるかのようにメモリ空間全体をアドレス指定する。
/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 組み込みオペレーティングシステムを実行します。その役割は:
MAX 7000A CPLD(512 マクロセル)
- 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 マザーボードのネイティブ周波数以外の速度で動作できるようにする。
Altera MAX 7000A は 512 マクロセルを持つ 5V 耐性 CPLD です。MZ 拡張バスに直接接続し、3 つの機能を実行します:
Altera FPGA
- レベル変換 — 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 アドレス空間にゲートする。
ボードリビジョン全体で 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 が実装するもの:
512 KB スタティック RAM(AS6C4008)
- T80 ソフト Z80 — バスマスタリングがアクティブなときにバスを引き継ぐ合成された Z80 互換 CPU。
- ZPU Evolution ソフト CPU — SRAM から ZPU バイナリを実行できる 32 ビットスタックベースのソフトプロセッサ。
- ビデオコントローラ — すべての Sharp MZ ビデオモードをサポートし、VGA 出力を提供する(ビデオモジュール参照)。
- GPU — ハードウェアアクセラレートされたグラフィックスプリミティブ(VRAM クリア、矩形フィル、GRAM クリア)。
単一の 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 | — | 予約済み、ゼロを書き込む |
| ビット | フィールド | 説明 |
|---|---|---|
| 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 間で調整されます。
切り替え手順
- Z80 プログラムが K64F API(ポート 0x68)経由で
CPU_SETT80またはCPU_SETZPUEVOサービスリクエストを発行する。 - K64F がターゲット CPU に必要なファームウェアイメージを SD カードから 512 KB SRAM にロードする。
- K64F が FPGA に新しい CPU コアを有効化するよう通知する。CPLD が Z80 に
/BUSRQをアサートする。 - Z80 がバスをリリースすると(
/BUSAKがアサート)、FPGA ソフト CPU がアドレスバス、データバス、コントロールバスの所有権を取得し、SRAM から実行を開始する。 - 物理 Z80 はソフト CPU 実行の間、バスリリース状態に保持される。
- Z80 実行に戻るには、動作中のプログラム(または K64F)が
CPU_SETZ80を発行し、FPGA が/BUSRQをリリースする。Z80 はバスを取り戻して再開する。SRAM の内容は保持される。
| コア | ポート 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 つの方法で実行できます:
VGA 出力
- ダイレクトモード — GRAM→CPU 有効(ポート 0xAD ビット 0)をセットし、Z80 コードから GRAM アドレスを直接読み書きする。各バンクはポート 0xA9 ビット 1:0 で個別に選択される。
- カラーライターモード — VRAM キャラクタアドレスに 1 回書き込む;カラーライターハードウェアがポート 0xAA、0xAB、0xAC に書き込まれた 8 ピクセルマスクを使用してすべての 3 つの GRAM バンクを同時に更新する。これにより 1 回の書き込みでカラーキャラクタセルを描画できる。
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 が I/O ポート ?F6(パラメータ)と ?F7(コマンド/ステータス)経由でアクセス可能です。サポートされるプリミティブ:
- VRAM クリア — キャラクタディスプレイを指定されたキャラクタと属性で埋める。
- 矩形フィル — GRAM の矩形領域をカラーで埋める。
- GRAM クリア — 3 つのすべての GRAM バンクをゼロにする。
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 ビルドフロー(
K64F ファームウェア — ARM GCC
quartus_sh --flow compile)を使用するか、Quartus GUI でプロジェクトを開いてください。
合成後、生成された .sof(SRAM オブジェクトファイル)または .rbf(ロウバイナリファイル)は Quartus プログラマを使用して EPCS フラッシュに書き込まれるか、K64F が起動時にロードするために SD カードに配置できます。
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 |