tranZPUter SW-700 (v1) — テクニカルガイド
tranZPUter SW-700 V1 テクニカルガイド
注意 — V1 ファームウェア(オリジナルリリース)
このガイドは tranZPUter SW-700 のオリジナル V1 ファームウェアを対象とし、Sharp MZ-700 のみをターゲットとしています。V1 では、ビデオ制御レジスタは I/O ポート
ボードファームウェアが現行リリース(I/O ポート再割り当てビルド後)に更新されている場合、ビデオレジスタは
このガイドは tranZPUter SW-700 のオリジナル V1 ファームウェアを対象とし、Sharp MZ-700 のみをターゲットとしています。V1 では、ビデオ制御レジスタは I/O ポート
0xF8–0xFD にマップされており、0x6B システムコマンドレジスタは存在しません。MZ-2000 エミュレーションは V1 ではサポートされていません。ボードファームウェアが現行リリース(I/O ポート再割り当てビルド後)に更新されている場合、ビデオレジスタは
0xA8–0xAD に、0x6B システムコマンドレジスタが存在します。その場合、代わりに tranZPUter SW-700 現行テクニカルガイドを参照してください。このドキュメントのレジスタアドレスは現行ファームウェアとは一致しません。
このガイドは tranZPUter SW-700 V1 のハードウェアアーキテクチャ、バスマスタリングメカニズム、メモリ管理サブシステム、システムレジスタインターフェース、K64F I/O プロセッササービス API、CPU 切り替え、V1 ビデオモジュールレジスタインターフェース、FPGA 仕様、完全なビルドシステムを解説します。オリジナルの V1 ファームウェアがシステムレベルでどのように機能するかを理解したい、または現行ファームウェアに更新されていないボードのリファレンスが必要なユーザー向けです。
日常的な使用と TZFS モニタコマンドリファレンスについては TZFS ユーザーマニュアルを参照してください。Z80 アセンブリソースコードのウォークスルーについては TZFS デベロッパーズガイドを参照してください。
バスマスタリング
tranZPUter SW-700 のコア原理は Z80 バスマスタリングです:オリジナルの Z80 CPU をトライステート化し、Sharp MZ-700 のアドレスバス、データバス、コントロールラインの完全な制御を取得する能力。このメカニズムは元々 DMA 用に開発されました — Z80 がプログラムループを実行するよりもはるかに速く、I/O デバイスとメモリの間でデータを転送するためです。tranZPUter はこれをすべての拡張機能の基盤として再利用しています。
バスマスタリングは tranZPUter SW-700 設計で 3 つの異なる目的に使用されます:
- SD カードファイル I/O — K64F ARM プロセッサがバスを取得し、Z80 がまったく関与することなく SD カードと 512 KB SRAM の間でデータを直接転送する。
- メニューとビデオオーバーレイの表示 — K64F がネイティブビデオ速度でメニューやステータス情報を表示するために MZ-700 ビデオ RAM に直接書き込むことができる。
- ソフト CPU 実行 — ソフトプロセッサ(T80、ZPU Evolution)が FPGA でアクティブな場合、ハード Z80 は永続的にトライステート状態に保持され、ソフト CPU はローカル SRAM で実行し、必要に応じて制御された速度でのみ MZ-700 I/O とビデオ RAM にアクセスする。
ハードウェアコンポーネント
tranZPUter SW-700 ボード(PCB バージョン v1.2 および v1.3)は以下の主要コンポーネントを搭載しています。ハードウェアは V1 ファームウェアと現行ファームウェアで同一です — ファームウェアバージョン間の違いはすべて CPLD ロジックと K64F ソフトウェアにあります。
| コンポーネント | パーツ | 仕様 |
|---|---|---|
| Z80 CPU | Z84C0020(または同等品) | 20MHz 定格;テストで 24MHz にオーバークロック |
| I/O プロセッサ | Freescale K64F(MK64FN1M0VLL12) | ARM Cortex-M4F、120MHz、256KB SRAM、1MB フラッシュ |
| CPLD | Altera MAX7000A(EPM7512AETC144-10) | 512 マクロセル、144ピン TQFP、5V 耐性入力 |
| FPGA | Altera Cyclone III EP3C25 または Cyclone IV EP4CE22/EP4CE75/EP4CE115 | Cyclone IV 75K / 115K が v1.3 メインストリーム;Cyclone III は v1.2 で使用 |
| FPGA 設定フラッシュ | Altera EPCS16 | FPGA ビットストリーム用 16Mbit シリアルフラッシュ |
| SRAM | 512 KB スタティック RAM | すべての TZFS ファームウェア、モニターイメージ、作業メモリを保持 |
| SD カード | microSD スロット | K64F SPI に接続;FAT32 ファイルシステム |
| クリスタル | FPGA メインタイムベース | すべての内部およびビデオクロック用の FPGA PLL に供給 |
- v1.0 / v1.1 — 内部プロトタイプ設計、公開リリースなし。
- v1.2 — 最初の公開リリース設計。Sharp MZ-80A tranZPUter SW v2.2 とビデオモジュール v2.0 をベースとし、MZ-700 プラットフォーム用に最適化。Cyclone III FPGA を使用。完全に機能するが FPGA リソースの上限が低い。
- v1.3 — メインストリーム製品設計。Cyclone IV(75K または 115K ゲートカウント、ビルド時に選択可能)にアップグレードされ、より高い解像度グラフィックス機能、より多くのソフト CPU ヘッドルーム、追加のビデオモード用のスペースを提供。v1.2 と v1.3 はともに実証済みの設計;v1.2 は製造コストが低い。
MAX7000A CPLD は 3 つの理由でロジックキャパシティを超えて設計の中心です:
電源
- 電圧変換 — MZ-700 マザーボードは 5V で動作します。FPGA は 3.3V のみです。MAX7000A は 5V 耐性入力を持つため、両者の間に位置し、別個の変換 IC を必要とせずに両方向のレベルシフトを処理します。
- デコードと I/O リマッピング — CPLD は Z80 I/O アドレスをデコードし、tranZPUter I/O レジスタセットを実装し、ソフト CPU が MZ-700 キーボードに正しくアクセスできるようにキーボード I/O をリマップします。
- FPGA インターフェース — CPLD は FPGA が必要とする調整済みのバス信号を提供します。FPGA は I/O ピンに 3.3V しか許容できないため、CPLD 経由のルーティングは必須です。
CPLD は 3.3V を必要とします。FPGA は内部コアに 1.2V、PLL とアナログセルに 2.5V、I/O バンクに 3.3V を必要とします。3 つの別個の LDO レギュレーター(それぞれ 1A 定格)が MZ-700 の 5V 電源からこれらのレールを提供します。K64F は専用の 3.3V LDO を使用し、スイッチングノイズのカップリングを防ぐために意図的に CPLD/FPGA 電源から分離されています。Altera の電力解析ツールを使用して、LDO 定格が CPLD と FPGA の合計負荷に十分であることを確認しました。
ビデオインターフェース
tranZPUter SW-700 は MZ-700 マザーボードから IC を取り外しません。代わりに、コンポジットビデオ信号はマザーボードモジュレータコネクタから取り出され、CPLD 経由(CPLD が 5V→3.3V 信号調整を処理)で FPGA に入力され、FPGA はオリジナルのビデオをそのまま通過させるか独自の強化されたビデオ出力を生成します。ソフトウェアはビデオ制御レジスタ(V1 では
0xF8–0xFD)への書き込みで 2 つのモードを選択します。FPGA ビデオがアクティブな場合、CPLD は競合を防ぐために関連するマザーボード信号をトライステート化します。
カラー出力はアナログ RGB パスに 1 チャンネルあたり 4 ビット、デジタル RGB モニターとモジュレータ内部のコンポジット/TV 回路用に 1 チャンネルあたり 5 ビット目を使用します。5 ビット目はモジュレータ入力が 2V(TTL スイッチングしきい値)を超えるようにします。アナログ RGB モニターを駆動する場合、5 ビット目はモニター入力を過飽和させないよう Low またはハイインピーダンスに保つ必要があります;5 ビット目が 0 の場合、電流シンクとして機能し出力電圧をわずかに下げ、1 チャンネルあたり 32 の使用可能な電圧レベルを提供します。
メモリ管理モード
tranZPUter SW-700 CPLD は I/O ポート
0x60(メモリ管理設定レジスタ)へのモードコードの書き込みで制御されるハードウェアメモリ管理ユニットを実装します。各モードは tranZPUter の 512 KB SRAM と MZ-700 マザーボードメモリが Z80 の 64 KB アドレス空間にどのようにマップされるかを異なる組み合わせで選択します。
V1 ファームウェアでは、以下の TZMM モードが定義されています。MZ-2000 固有のモードは存在しません — 現行ファームウェアリビジョンで追加されました。
| モード | コード | 説明 |
|---|---|---|
| TZMM_ORIG | 0x00 | オリジナル Sharp MZ-700 モード。マザーボードの ROM と RAM を直接使用。tranZPUter SRAM は見えない。K64F I/O レジスタは引き続きアクセス可能。 |
| TZMM_BOOT | 0x01 | オリジナルモードだが 0xE800–0xEFFF が tranZPUter SRAM ブロック 0 にマップされ、TZFS ブートスタブが完全なファームウェアがアクティブになる前に実行して K64F にサービスリクエストを発行できるようにする。 |
| TZMM_TZFS | 0x02 | TZFS メイン動作モード。tranZPUter SRAM のすべてのメモリ。モニターは 0x0000–0x0FFF、ユーザー RAM は 0x1000–0xCFFF、0xE800–0xEFFF の固定 TZFS ウィンドウ(ブロック 0)、0xF000–0xFFFF の切り替え可能ウィンドウ(デフォルトではブロック 0)。 |
| TZMM_TZFS2 | 0x03 | TZMM_TZFS と同じだが 0xF000–0xFFFF がブロック 1 にマップ(tzfs_bank2 — メッセージ印刷、ASCII 変換、ヘルプ画面)。 |
| TZMM_TZFS3 | 0x04 | 0xF000–0xFFFF がブロック 2 にマップ(tzfs_bank3 — メモリユーティリティ、テープ速度補正、CPU 切り替え、MZ モデルエミュレーション)。 |
| TZMM_TZFS4 | 0x05 | 0xF000–0xFFFF がブロック 3 にマップ(tzfs_bank4 — Z80 アセンブラ/ディスアセンブラ)。このバンクはアセンブラとディスアセンブラのテーブルに 0x1200–0xCFFF を追加使用(最大 52 KB 作業スペース)。 |
| TZMM_CPM | 0x06 | CP/M モード。すべて SRAM、ブロック 4 がアドレス空間全体にマップ。 |
| TZMM_CPM2 | 0x07 | CP/M モード 2。0xF000–0xFFFF がブロック 4、0x0040–0xCFFF と 0xE800–0xEFFF がブロック 5。 |
| TZMM_MZ700_0 | 0x08 | MZ-700 互換: 下位 32 KB が SRAM、上位 32 KB がマザーボード(I/O マップ領域)。 |
| TZMM_MZ700_1 | 0x09 | MZ-700 互換: 下位 32 KB がマザーボード ROM/RAM、上位が SRAM。 |
| TZMM_MZ700_2 | 0x0A | MZ-700 互換: 0xE000–0xFFFF に SRAM オーバーレイを持つ完全なマザーボードマッピング。 |
| TZMM_MZ700_3 | 0x0B | MZ-700 互換: 完全なマザーボードメモリ、上位バンクに SRAM オーバーレイ。 |
| TZMM_MZ800_0 | 0x0C | MZ-800 エミュレーションメモリマップ、下位 SRAM。 |
| TZMM_MZ800_1 | 0x0D | MZ-800 エミュレーションメモリマップ、上位 SRAM。 |
| TZMM_MZ80A | 0x0E | MZ-80A エミュレーション — MZ-80A メモリマップ通りに設定された完全な 64 KB SRAM。 |
| TZMM_MZ80B | 0x0F | MZ-80B エミュレーション — MZ-80B メモリマップ通りに設定された完全な 64 KB SRAM。 |
すべてのアクティブな TZMM モードは CPLD によって内部的に
TZMM_TZFS モードでの Z80 アドレス空間
TZMM_ENIOWAIT ビット(0x20)がセットされており、信頼性の高い K64F サービスリクエスト通信を確保するために I/O ウェイトステートを挿入します。Z80 はこのビットを明示的に設定する必要はありません。
アドレス サイズ 内容
─────────────────────────────────────────────────────────────────────
0x0000 4 KB モニター ROM 領域 — SA-1510(または 1Z-013A、MZ-80B IPL など)
起動時に K64F が SD カードからロード;SRAM ブロック 0 に常駐。
TZFS サービスコマンド経由で別のモニターイメージをロードすることで変更;
物理アドレス範囲は固定のまま。
0x1000 256 B MZ-700 システム変数 / スタック
0x1200 ~46 KB ユーザー RAM(メインプログラム領域)
0xCFFF
0xD000 12 KB ビデオ RAM + メモリマップド I/O(Sharp MZ-700 マザーボードハードウェア)
0xE800 2 KB TZFS 固定コードウィンドウ — 常に SRAM ブロック 0 にマップ。
プライマリ TZFS エントリーポイント、コマンドディスパッチャ、
外部ジャンプテーブル(0xE880)、共有変数領域を含む。
0xEC80 256 B TZFS 変数(固定 0xE800–0xEFFF ウィンドウ内)
0xED80 640 B K64F サービス通信ブロック(TZSVCMEM)
0xEFFF
0xF000 4 KB 切り替え可能コードウィンドウ — TZMM モードで選択された SRAM ブロック。
アクティブな TZFS バンクに応じて別の 64 KB SRAM ブロックにマップ
(tzfs_bank2 / bank3 / bank4 / CP/M)。
0xFFFF
─────────────────────────────────────────────────────────────────────
システムレジスタ(V1)
tranZPUter SW-700 は制御インターフェースを Z80 I/O ポートレジスタのセットとして公開します。V1 ファームウェアでは、システムレジスタはポート
0x60–0x6F を占有します。0x6B システムコマンドレジスタは V1 には存在しませんでした — 現行ファームウェアリリースで導入されました。
特に記載がない限り、すべてのレジスタは書き込み専用です。書き込み専用レジスタからの読み取りは未定義の動作をします。
| ポート | レジスタ | 方向 | 説明 |
|---|---|---|---|
| 0x60 | メモリ管理設定 | W | アクティブなメモリ管理モードを切り替えるために TZMM モードコードを書き込む。有効なコードについては上記のメモリモードテーブルを参照。 |
| 0x62 | CPU 代替周波数設定 | W | Z80 クロックソースを K64F が生成する代替周波数に切り替える。周波数自体はまずポート 0x66 経由で設定する必要がある。 |
| 0x64 | CPU ベース周波数設定 | W | Z80 クロックソースを MZ-700 マザーボード周波数(3.54 MHz)に戻す。 |
| 0x66 | CPU 周波数変更 | W | 希望する代替 CPU 周波数を Hz 単位で書き込む(32 ビット値)。K64F はクロック出力を一致するように設定する。 |
| 0x68 | サービスリクエスト | W | このポートに任意の値を書き込むと、0xED80 の TZSVCMEM ブロックにサービスリクエストがポストされていることを K64F に通知する。Z80 は完了のために TZSVCRESULT をポーリングする。 |
| 0x6C | CPU 設定 | W | アクティブな CPU を選択する: 0 = ハード Z80(マザーボード)、1 = T80 ソフトコア Z80(FPGA)、2 = ZPU Evolution ソフト CPU(FPGA)。 |
| 0x6D | CPU 情報 | R | このボードで利用可能な CPU 機能のビットマスクを返す。ビット定義はファームウェアバージョン固有;ハードウェア機能を検出するために起動時に読み取る。 |
| 0x6E | システム設定 | W/R | システム機能の有効化/無効化フラグ。現在の設定を照会するために読み取る;変更するために書き込む。 |
| 0x6F | システム情報 | R | ボード識別コードを返す。tranZPUter SW-700 ハードウェアが存在することを確認し PCB リビジョンを特定するために読み取る。 |
V1 注意: ポート
0x6B(システムコマンドレジスタ)は V1 ファームウェアには存在しません。V1 ファームウェアで 0x6B に書き込むコードは効果がないか、未定義の CPLD 動作を生成する場合があります。0x6B レジスタは完全な K64F サービスサイクルを経由せずに直接マシンモデル切り替えを提供するために現行ファームウェアリリースで追加されました。
K64F / I/O プロセッサ サービス API
V1 のすべての SD カードファイル I/O、モニターファームウェアロード、CP/M ディスクアクセスは K64F ARM Cortex-M4 I/O プロセッサによって実行されます。Z80 は SD カード SPI ハードウェアに直接アクセスしません — SRAM の共有メモリブロックを通じてリクエストをポストし、完了をポーリングします。K64F は組み込み OS(zOS)を実行し、Z80 からの保留中のリクエストをサービス通信ブロックで継続的にポーリングします。
サービスリクエストメカニズム
- Z80 は 0xED80 のサービス通信ブロックを埋めます: コマンドコードを
TZSVCCMDに書き込み、必要なパラメータ(ファイル名、ロードアドレス、サイズなど)を設定し、TZSVCRESULTにTZSVC_STATUS_REQUEST(0xFE)を書き込む。 - Z80 が K64F に通知するために I/O ポート
0x68(サービスリクエスト)に任意の値を書き込む。 - K64F がポート書き込みを検出し、SRAM からコマンドブロックを読み取り、作業中に
TZSVCRESULTをTZSVC_STATUS_PROCESSING(0xFF)に設定する。 - Z80 は値が 0xFF(処理中)でも 0xFE(リクエストがまだ見られていない)でもなくなるまでタイトループで
TZSVCRESULTをポーリングする。他の値は完了を示す。 - 成功時、
TZSVCRESULTはTZSVC_STATUS_OK(0x00)。エラー時は非ゼロのエラーコードを保持する。結果データ(ディレクトリエントリ、ファイルブロックなど)はブロック内のTZSVCSECTORバッファに置かれる。
オフセット サイズ フィールド 説明 ──────────────────────────────────────────────────────────────────────────── +0x00 1 B TZSVCCMD サービスコマンドコード(下記のコマンドテーブル参照) +0x01 1 B TZSVCRESULT 結果/ステータスバイト(0x00=OK、0xFE=リクエスト、0xFF=ビジー) +0x02 1 B TZSVCDIRSEC マルチブロックディレクトリ読み取り用ディレクトリセクター番号 +0x03 2 B TZSVC_TRACK_NO 仮想ドライブトラック番号 / 32ビット LBA セクターアドレス +0x05 2 B TZSVC_SECTOR_NO 仮想ドライブセクター番号 +0x07 1 B TZSVC_FILE_NO ディレクトリ内のファイル番号 +0x08 1 B TZSVC_FILE_TYPE ファイルタイプ: 0=MZF、1=MZF ヘッダーのみ、2=CAS、3=BAS、10=ALL +0x09 2 B TZSVC_LOADADDR 動的ロードアドレス / 保存アドレス / CPU 周波数(Hz) +0x0B 2 B TZSVC_LOADSIZE ロードまたは保存するバイト数 +0x0D 20 B TZSVC_DIRNAME ディレクトリ名(CHANGEDIR と READDIR 用) +0x21 17 B TZSVC_FILENAME Sharp MZ ファイル名(17 文字、Sharp キャラクタエンコーディング) +0x32 20 B TZSVCWILDC ディレクトリワイルドカードフィルタ文字列 +0x46 512 B TZSVCSECTOR データセクターバッファ — ファイルブロック、ディレクトリエントリなど ──────────────────────────────────────────────────────────────────────────── 合計: 640 バイト(0xED80–0xEFFF、固定 TZFS ウィンドウ内)サービスコマンド(V1)
コマンドは機能別にグループ化されています。Z80 はポート
ファイルとディレクトリ操作
0x68 経由でリクエストをトリガーする前に TZSVCCMD にコードを書き込みます。
現行ファームウェアとの V1 の違い: MZ-2000 IPL ローダーコマンド(0x26 LOAD2000IPL)と LOADTZFS コマンド(0x2F)は V1 には存在しません。他のすべてのファイル I/O、CP/M ディスク、CPU 周波数コマンドは存在します。
| コード | 名前 | 説明 |
|---|---|---|
| 0x01 | READDIR | TZSVC_DIRNAME で指定されたディレクトリを開き、TZSVCSECTOR に最初のエントリブロックを返す。 |
| 0x02 | NEXTDIR | 現在開いているディレクトリから次のエントリブロックを返す。 |
| 0x03 | READFILE | TZSVC_FILENAME で指定されたファイルを開き、TZSVCSECTOR に最初の 512 バイトブロックを返す。 |
| 0x04 | NEXTREADFILE | 開いているファイルの次の 512 バイトブロックを返す。 |
| 0x05 | WRITEFILE | 新しいファイルを作成し TZSVCSECTOR から最初の 512 バイトブロックを書き込む。 |
| 0x06 | NEXTWRITEFILE | 開いているファイルに次の 512 バイトブロックを書き込む。 |
| 0x07 | CLOSE | 現在開いているファイルまたはディレクトリハンドルを閉じる。 |
| 0x08 | LOADFILE | SD から tranZPUter SRAM の TZSVC_LOADADDR に完全なファイルを直接ロードする。 |
| 0x09 | SAVEFILE | tranZPUter SRAM の領域(TZSVC_LOADADDR から TZSVC_LOADSIZE バイト)をファイルとして保存する。 |
| 0x0A | ERASEFILE | TZSVC_FILENAME で指定されたファイルを SD カードから削除する。 |
| 0x0B | CHANGEDIR | アクティブな SD カードディレクトリを TZSVC_DIRNAME に変更する。 |
| コード | 名前 | 説明 |
|---|---|---|
| 0x20 | LOAD40ABIOS | 40 桁 SA-1510 モニターを SRAM の 0x0000 にロードする。 |
| 0x21 | LOAD80ABIOS | 80 桁 SA-1510 モニターを SRAM の 0x0000 にロードする。 |
| 0x22 | LOAD700BIOS40 | MZ-700 1Z-013A 40 桁モニターをロードする。 |
| 0x23 | LOAD700BIOS80 | MZ-700 1Z-013A 80 桁モニターをロードする。 |
| 0x24 | LOAD80BIPL | MZ-80B IPL ファームウェアをロードする。 |
| 0x25 | LOAD800BIOS | MZ-800 9Z-504M BIOS をロードする。 |
注意: コマンド 0x26(LOAD2000IPL — MZ-2000 IPL のロード)は V1 には存在しません。MZ-2000 エミュレーションは現行ファームウェアリリースで追加されました。コマンド 0x2F(LOADTZFS)も V1 には存在しません。
CP/M ディスク操作
| コード | 名前 | 説明 |
|---|---|---|
| 0x30 | LOADBDOS | CP/M BDOS+CCP を RAM に再ロードする(ウォームブートサポート)。 |
| 0x31 | ADDSDDRIVE | SD カードディスクイメージを CP/M ドライブレターに割り当てる。 |
| 0x32 | READSDDRIVE | SD カードディスクイメージから 128 バイトの CP/M セクターを読み取る。 |
| 0x33 | WRITESDDRIVE | SD カードディスクイメージに 128 バイトの CP/M セクターを書き込む。 |
| コード | 名前 | 説明 |
|---|---|---|
| 0x40 | CPU_BASEFREQ | Z80 クロックをマザーボードのベース周波数(3.54 MHz)に切り替える。 |
| 0x41 | CPU_ALTFREQ | K64F が提供する代替周波数に切り替える。 |
| 0x42 | CPU_CHGFREQ | TZSVC_LOADADDR の値(Hz 単位)に代替周波数を設定する。 |
| コード | 名前 | 説明 |
|---|---|---|
| 0x50 | CPU_SETZ80 | マザーボードのハード Z80 CPU に切り替える。 |
| 0x51 | CPU_SETT80 | 必要なファームウェアをロードし、FPGA の T80 ソフトコア Z80 を有効化するよう FPGA に通知する。 |
| 0x52 | CPU_SETZPUEVO | 必要なファームウェアをロードし、FPGA の ZPU Evolution ソフト CPU を有効化するよう FPGA に通知する。 |
| 0x53–0x5C | EMU_SETMZ* | SD からターゲットマシン ROM/BIOS をロードし、その Sharp MZ モデルのエミュレーションを有効化するよう FPGA に通知する。MZ-2000(0x5D)は V1 では利用不可。 |
| コード | 名前 | 説明 |
|---|---|---|
| 0x7F | EXIT | TZFS を終了して TZMM_ORIG モードで再起動し、マシンをネイティブファームウェアに戻す。 |
| 値 | 名前 | 説明 |
|---|---|---|
| 0x00 | TZSVC_STATUS_OK | コマンドが正常に完了した。結果データがある場合は TZSVCSECTOR に。 |
| 0xFE | TZSVC_STATUS_REQUEST | Z80 がリクエストをポストし、K64F が確認するのを待っている。 |
| 0xFF | TZSVC_STATUS_PROCESSING | K64F が現在コマンドを実行中。Z80 はポーリングを続ける必要がある。 |
CPU 切り替え
tranZPUter SW-700 は 3 つの CPU モードをサポートします。CPU 設定レジスタ(ポート
利用可能な CPU
0x6C)に直接書き込むか、K64F サービス API コマンド 0x50–0x52 を使用してソフトウェアで選択可能です。
| モード | コード(0x6C) | サービスコマンド | 説明 |
|---|---|---|---|
| ハード Z80 | 0x00 | 0x50 CPU_SETZ80 | tranZPUter 娘基板のオリジナルの物理 Z80 チップがマザーボード周波数または K64F 生成代替周波数で動作する。電源投入後のデフォルト。 |
| T80 ソフトコア | 0x01 | 0x51 CPU_SETT80 | CPLD/FPGA に実装されたオープンソース Z80 互換ソフトコア T80 がハード Z80 を置き換える。K64F がソフトコアを有効化する前に必要なファームウェアをロードする。 |
| ZPU Evolution | 0x02 | 0x52 CPU_SETZPUEVO | FPGA に実装された ZPU Evolution ソフト CPU がハード Z80 を置き換える。ZPU 命令セットとその関連ツールチェーンの恩恵を受けるアプリケーションを意図している。 |
ソフト CPU に切り替えるとき、K64F は:
CPU 周波数制御
- BUSRQ 信号経由でハード Z80 をトライステート化する。
- 適切な SRAM 領域に必要なファームウェア(ブートベクタ、ROM イメージ)をロードする。
- リクエストされたソフトコアをインスタンス化してバスマスタシップをアサートするよう CPLD を通じて FPGA に通知する。
- TZFS サービスループに制御を返す。
Z80 クロックソースは MZ-700 マザーボード発振器(3.54 MHz)と K64F によって合成された周波数の間で切り替えることができます。K64F 周波数ソースは連続可変で、24 MHz まで信頼性を持ってテストされています(Z84C0020 20 MHz デバイスをオーバークロック)。より高い周波数は可能ですが、信頼性は使用する特定の Z80 部品とボードキャパシタンスによります。
代替周波数を設定するための推奨シーケンス:
# 1. TZSVC_LOADADDR(32 ビット)に希望する周波数(Hz)を配置する # 例: 16 MHz 用 16000000 LD (TZSVC_LOADADDR), HL ; 周波数の下位ワード # 2. CPU_CHGFREQ サービスコマンド(0x42)を発行する LD A, 0x42 LD (TZSVCCMD), A LD A, 0xFE LD (TZSVCRESULT), A OUT (0x68), A ; K64F をトリガー # 3. TZSVCRESULT が 0x00(OK)になるまでポーリングする # 4. 新しい周波数に切り替える OUT (0x62), A ; ポート 0x62 = CPU 代替周波数設定
MZ-700 ベース周波数に戻すには、ポート
0x64(CPU ベース周波数設定)に任意の値を書き込みます。
ビデオモジュール(V1 — ポート 0xF8–0xFD)
V1 ビデオレジスタアドレスの警告
V1 ファームウェアでは、ビデオ制御レジスタは I/O ポート
V1 ファームウェアでは、ビデオ制御レジスタは I/O ポート
0xF8–0xFD にあります。現行ファームウェアでは、一般的な I/O ポート再割り当ての一部としてこれらのレジスタが 0xA8–0xAD に移動されました。0xF8–0xFD にアクセスする V1 向けのコードは現行ファームウェアでは動作せず、その逆も同様です。
tranZPUter SW-700 はビデオモジュール v2.0 の機能をボードに直接統合しています。FPGA は Sharp MZ シリーズの元のキャラクタディスプレイハードウェアをエミュレートし、カラーグラフィックスと複数の出力モードで拡張する強化されたビデオサブシステムを実装します。V1 ファームウェアでは、ビデオサブシステムはポート 0xF8–0xFD の 6 つの I/O レジスタを通じて制御されます。
ビデオレジスタマップ(V1)
| ポート | レジスタ | 方向 | 説明 |
|---|---|---|---|
| 0xF8 | 制御 | W | プライマリビデオ制御レジスタ — マシンモデル、桁幅、カラーモード、PCG、VGA スキャンモードを選択する。 |
| 0xF9 | グラフィックスモード | W | グラフィックス RAM バンク選択、VRAM/GRAM 出力有効、ピクセルブレンド演算子。 |
| 0xFA | カラーライター赤 | W | 8 ピクセル赤カラーフィルター — 現在の 8 ピクセルグループのどのピクセルが赤成分を受け取るかを設定する。 |
| 0xFB | カラーライター緑 | W | 8 ピクセル緑カラーフィルター — 現在の 8 ピクセルグループのどのピクセルが緑成分を受け取るかを設定する。 |
| 0xFC | カラーライター青 | W | 8 ピクセル青カラーフィルター — 現在の 8 ピクセルグループのどのピクセルが青成分を受け取るかを設定する。 |
| 0xFD | メモリページ / ステータス | W/R | GRAM→CPU マッピング(ビット 0)と CGROM→CPU マッピング(ビット 7)を制御する。ビデオステータスを取得するために読み取る。 |
ビット 名前 説明
────────────────────────────────────────────────────────────────────────────
7:6 VGA モード 00 = オリジナル MZ-700 ビデオタイミング(15.6 kHz)
01 = VGA 640×200 アップスケール出力
10 = VGA 640×400 アップスケール出力
11 = 予約済み
5 PCG 有効 1 = プログラマブルキャラクタジェネレータアクティブ
(GRAM のカスタムキャラクタ定義が CGROM をオーバーライド)
0 = 標準 CGROM キャラクタ
4 カラー有効 1 = カラー属性 RAM アクティブ(カラーディスプレイ)
0 = モノクロディスプレイ
3 桁幅 1 = 80 桁ディスプレイ
0 = 40 桁ディスプレイ(MZ-700 デフォルト)
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 は V1 ではサポートされない)
────────────────────────────────────────────────────────────────────────────
グラフィックスモードレジスタ(0xF9)ビット定義
ビット 名前 説明
────────────────────────────────────────────────────────────────────────────
7:5 予約済み 0 でなければならない
4:3 GRAM バンク カラーライターレジスタ(0xFA–0xFC)経由で書き込む際に
どのグラフィックス RAM バンクがアドレス指定されるかを選択する
2 VRAM 出力 1 = キャラクタ VRAM が最終ビデオ出力に寄与
0 = VRAM 抑制(GRAM のみ表示)
1 GRAM 出力 1 = グラフィックス RAM が最終ビデオ出力に寄与
0 = GRAM 抑制(VRAM のみ表示)
0 ブレンド演算子 0 = OR — GRAM と VRAM ピクセルが OR される
1 = XOR — GRAM と VRAM ピクセルが XOR される
────────────────────────────────────────────────────────────────────────────
カラーライターレジスタ(0xFA–0xFC)
カラーライターは個々のピクセル書き込みを経由せずに FPGA グラフィックス RAM にカラーを高速に描画するメカニズムを提供します。3 つのカラーライターレジスタのそれぞれは 8 ビットマスクを保持し、水平 8 ピクセルグループの各ピクセルに 1 ビットが対応します。レジスタ 0xFA(赤)、0xFB(緑)、0xFC(青)にマスクバイトを書き込むと、対応するビットがセットされているピクセルが、グラフィックスモードレジスタ(0xF9 ビット 4:3)で現在選択されているグラフィックス RAM バンクでそのカラーコンポーネントを受け取ります。
例 — 現在のグループのすべての 8 ピクセルをカバーするソリッドな赤の水平バーを書き込む:
LD A, 0xFF OUT (0xFA), A ; すべての 8 ピクセルが赤を受け取る XOR A OUT (0xFB), A ; 緑なし OUT (0xFC), A ; 青なしメモリページ / ステータスレジスタ(0xFD)ビット定義
ビット 名前 説明
────────────────────────────────────────────────────────────────────────────
7 CGROM→CPU 1 = キャラクタジェネレータ ROM を CPU アドレス空間にマップ
(Z80 から読み取り可能)
0 = 通常動作;CGROM は CPU にマップされない
0 GRAM→CPU 1 = グラフィックス RAM を CPU アドレス空間にマップ
(ビデオ RAM ウィンドウ 0xD000–0xDFFF で Z80 から読み書き可能)
0 = 通常動作;GRAM は CPU にマップされない
────────────────────────────────────────────────────────────────────────────
ポート 0xFD を読み取るとビデオステータス情報が返されます。読み取りステータスの正確なビットレイアウトは V1 FPGA ビットストリームによって決定されます;確定的な定義については VHDL ソースを参照してください。
サポートされるマシンモデル(V1)
V1 ファームウェアは以下の Sharp MZ マシンビデオモードのエミュレーションをサポートします。MZ-2000 はサポートされません — 現行ファームウェアリリースで追加されました。
| モデルコード(0xF8 のビット 2:0) | マシン | 備考 |
|---|---|---|
| 000 | MZ-80K | 40 桁モノクロ、オリジナル MZ キャラクタセット |
| 001 | MZ-80C | 40 桁モノクロ |
| 010 | MZ-1200 | 40 桁モノクロ |
| 011 | MZ-80A | 40 桁モノクロ;RFS/TZFS MZ-80A モニターと互換 |
| 100 | MZ-700 | 40 桁カラー(デフォルト MZ-700 ハードウェアモード) |
| 101 | MZ-800 | 40/80 桁、拡張カラーモード |
| 110 | MZ-80B | 40 桁モノクロ、MZ-80B キャラクタセット |
| 111 | (予約済み) | MZ-2000 は V1 ではサポートされない |
FPGA 仕様
FPGA はビデオサブシステム、すべてのソフト CPU インスタンス化、ビデオ出力信号生成を担当します。ビットストリームは EPCS16 シリアルフラッシュに格納され、電源投入時または CONFIG ボタンが押されたときに自動的にロードされます。
FPGA デバイスオプション
| PCB リビジョン | FPGA デバイス | ゲートカウント | 備考 |
|---|---|---|---|
| v1.2 | Altera Cyclone III EP3C25 | 25K LE | 最初の製品設計。MZ-700 ビデオエミュレーションと T80/ZPU ソフト CPU に十分。 |
| v1.3 | Altera Cyclone IV EP4CE22 | 22K LE | v1.3 ボード用エントリーレベル Cyclone IV オプション。 |
| v1.3 | Altera Cyclone IV EP4CE75 | 75K LE | 標準 v1.3 メインストリーム。より高解像度グラフィックス;より多くのソフト CPU ヘッドルーム。 |
| v1.3 | Altera Cyclone IV EP4CE115 | 115K LE | 最大容量オプション;ビルド時に選択可能。 |
メインボードのクリスタルは Cyclone III/IV FPGA に直接供給され、4 つのオンチップ PLL デバイスを使用してすべての内部同期クロックとビデオピクセルクロックを導出します。以下の外部クロックソースも同期目的で FPGA に供給されます:
FPGA プログラミング
- SYSCLK — MZ-700 マザーボードシステムクロック(3.54 MHz)。マザーボードペリフェラルへの同期アクセスを可能にするために FPGA に供給される。
- CTLCLK — K64F 生成の代替 CPU クロック。代替周波数でのソフト CPU 実行が FPGA 内部ファブリックと適切に同期されるように FPGA に供給される。
FPGA は JTAG インターフェース経由でプログラムされます。推奨されるデイジーチェーン設定では、JTAG チェーンは Altera のベストプラクティスに従い、最初に CPLD(高電圧デバイス)を通り、次に FPGA に渡ります。EPCS16 は Altera の組み込み EPCS プログラミング IP を使用して Cyclone III/IV 経由でプログラムされ、標準の JTAG コマンドを EPCS16 SPI プログラミングサイクルに変換します。EPCS16 が書き込まれると、FPGA はすべての電源サイクルまたは CONFIG リセット時に EPCS16 から自動的にビットストリームをロードします。
V1 vs 現行ファームウェア — 違いのまとめ
このセクションは、V1 ファームウェア(このガイドでカバー)と現行ファームウェアリリースの間のすべての既知の違いを要約します。別のソースのレジスタアドレス、コマンドコード、機能がこのガイドと一致しない場合は、そのソースが現行ファームウェアをカバーしているかどうかを確認してください。
I/O ポートアサインメント
| 機能 | V1 アドレス | 現行アドレス |
|---|---|---|
| ビデオ制御レジスタ | 0xF8 | 0xA8 |
| ビデオグラフィックスモードレジスタ | 0xF9 | 0xA9 |
| カラーライター赤 | 0xFA | 0xAA |
| カラーライター緑 | 0xFB | 0xAB |
| カラーライター青 | 0xFC | 0xAC |
| メモリページ / ステータス | 0xFD | 0xAD |
| システムコマンドレジスタ | 存在しない | 0x6B |
| レジスタ | V1 | 現行 |
|---|---|---|
| 0x6B システムコマンドレジスタ | 存在しない | 存在する — K64F サービスサイクルなしの直接マシンモデル切り替え |
| 0x60–0x6F(他のすべてのシステムレジスタ) | 存在する、同じ機能 | 存在する、同じ機能 |
| コマンド | V1 | 現行 |
|---|---|---|
| 0x26 LOAD2000IPL | 存在しない | 存在する — MZ-2000 IPL ファームウェアをロード |
| 0x2F LOADTZFS | 存在しない | 存在する — オンボードモニターのないマシン用 TZFS をロード |
| 0x5D EMU_SETMZ2000 | 存在しない | 存在する — MZ-2000 ハードウェアエミュレーションを有効化 |
| 他のすべてのコマンド(0x01–0x5C、0x7F) | 存在する | 存在する、同じ機能 |
| マシン | V1 | 現行 |
|---|---|---|
| MZ-80K | サポート | サポート |
| MZ-80C | サポート | サポート |
| MZ-1200 | サポート | サポート |
| MZ-80A | サポート | サポート |
| MZ-700 | サポート | サポート |
| MZ-800 | サポート | サポート |
| MZ-80B | サポート | サポート |
| MZ-2000 | サポートされない | サポート |
V1 ファームウェアと現行ファームウェアはバイナリ互換性がありません。V1 から現行への更新には以下が必要です:
- 新しい CPLD ビットストリームのフラッシュ(新しい I/O ポートマップを実装し、0x6B を追加する)。
- 新しい FPGA ビットストリームのフラッシュ(MZ-2000 ビデオエミュレーションを実装し、ビデオレジスタを 0xA8–0xAD に再マップする)。
- K64F ファームウェアの更新(LOAD2000IPL、LOADTZFS、EMU_SETMZ2000 サービスコマンドを追加する)。
- SD カードの TZFS Z80 ファームウェアの更新(新しいレジスタアドレスと新しいサービスコマンドを使用するよう更新する)。
ビルドシステム
すべての開発は Linux(Debian/Ubuntu)で行われます。ビルドシステムは tranZPUter リポジトリ内に自己完結しています。V1 ファームウェアは現行ファームウェアとは別の git ブランチに存在します。
前提条件
| ツール | 目的 |
|---|---|
| Java JRE 8+ | GLASS Z80 アセンブラ(tools/glass.jar)を実行する。java が PATH にある必要がある。 |
| bash | すべてのビルドスクリプトは bash シェルスクリプト。 |
| perl | MZF ファイル操作用の tools/mzftool.pl に必要。 |
| gcc / make | 最初のビルドで cpmtools をソースからコンパイル(自動)。 |
| Quartus II / Quartus Prime | CPLD と FPGA ビットストリームの再ビルドに必要。Z80 ファームウェアのみのビルドには不要。 |
| dd、cat、stat | パッケージングスクリプトで使用される標準 Linux ユーティリティ。 |
GLASS Z80 アセンブラは
ビルドフラグ
tools/glass.jar としてバンドルされています — Z80 ファームウェアと SD カードイメージをビルドするために別途 Quartus のインストールは不要です。
asm/include/tzfs_definitions.asm を編集して適切なターゲットと機能フラグを設定します。V1 MZ-700 ビルドの標準設定は:
| フラグ | V1 デフォルト | 説明 |
|---|---|---|
BUILD_MZ700 EQU 1 |
1 | Sharp MZ-700 ホストマシン(V1 の唯一のターゲット) |
BUILD_MZ80A EQU 0 |
0 | Sharp MZ-80A ホストマシン |
BUILD_MZ1500 EQU 0 |
0 | Sharp MZ-1500 ホストマシン |
BUILD_MZ2000 EQU 0 |
0 | V1 ではサポートされない |
ENADEBUG EQU 0 |
0 | アセンブリ時デバッグ出力を有効化 |
git clone https://git.eaw.app/eaw/tranZPUter.git cd tranZPUter # V1 ファームウェアブランチをチェックアウト: git checkout v1 # 完全ビルド: ./build.sh
build.sh は以下の手順を順番に実行します:
- ソースから
cpmtoolsをコンパイルし(最初の実行のみ)PATHに追加する。 tools/assemble_tzfs.sh— V1 I/O レジスタマップ(0xF8–0xFDのビデオレジスタ、0x6Bなし)をターゲットとしてtzfs.asmとすべてのバンクファイル(tzfs_bank2.asm、tzfs_bank3.asm、tzfs_bank4.asm)をバイナリイメージにアセンブルする。tools/assemble_cpm.sh— CP/M 2.2 CBIOS を SRAM イメージにアセンブルする。tools/assemble_roms.sh— すべてのモニターファームウェアバリアント(SA-1510 40/80col、1Z-013A 40/80col、MZ-80B IPL)と MZF アプリケーションイメージをアセンブルする。tools/make_cpmdisks.sh— CP/M ディスクイメージ(K64F が READSDDRIVE / WRITESDDRIVE 経由で提供する RAW フォーマット)をビルドする。
ビルドが成功すると、
roms/ ディレクトリに以下が含まれます:
| ファイル | 説明 |
|---|---|
tzfs.bin |
プライマリ TZFS イメージ — 固定ウィンドウコード(0xE800–0xEFFF、ブロック 0)。V1 レジスタアドレスでビルド。 |
tzfs_bank2.bin |
バンク 2 イメージ — メッセージ印刷、ヘルプ画面(0xF000–0xFFFF にページ)。 |
tzfs_bank3.bin |
バンク 3 イメージ — メモリユーティリティ、I/O、CPU 切り替え(0xF000–0xFFFF にページ)。 |
tzfs_bank4.bin |
バンク 4 イメージ — Z80 アセンブラとディスアセンブラ(ページ、52 KB 使用)。 |
monitor_SA1510.bin |
SA-1510 40 桁モニターイメージ(0x0000–0x0FFF)。 |
monitor_80c_SA1510.bin |
SA-1510 80 桁モニターイメージ。 |
monitor_1Z-013A.bin |
MZ-700 用 1Z-013A 40 桁モニターイメージ。 |
monitor_80c_1Z-013A.bin |
MZ-700 用 1Z-013A 80 桁モニターイメージ。 |
MZ80B_IPL.bin |
MZ-80B IPL イメージ。 |
cbios.bin |
CP/M 2.2 CBIOS SRAM イメージ。 |
CPM_DISK_*.img |
CP/M ディスクイメージ(RAW フォーマット)。 |
参考サイト
| リソース | リンク |
|---|---|
| tranZPUter SW-700 プロジェクトページ | /transzputer-sw-700/ |
| tranZPUter SW-700 V1 README | /transzputer-sw-700-v1/ |
| tranZPUter SW-700 現行テクニカルガイド | /transzputer-sw-700-technicalguide/ |
| TZFS ユーザーマニュアル | /sharpmz-upgrades-tzfs-usermanual/ |
| TZFS デベロッパーズガイド | /sharpmz-upgrades-tzfs-developersguide/ |
| TZFS テクニカルガイド | /sharpmz-upgrades-tzfs-technicalguide/ |
| tranZPUter SW プロジェクトページ | /transzputer-sw/ |
| tranZPUter Fusion プロジェクトページ | /transzputer-fusion/ |
| ビデオモジュールテクニカルガイド | /video-module-technicalguide/ |
| RFS テクニカルガイド | /sharpmz-upgrades-rfs-technicalguide/ |
| GLASS Z80 アセンブラ | tools/glass.jar としてバンドル済み |