tranZPUter SW-700 (v1) — ユーザーマニュアル

tranZPUter SW-700 v1 ユーザーマニュアル

tranZPUter SW-700 は Sharp MZ-700 用の Z80 拡張ボードです。オリジナルの Z80 を娘基板に乗せ、tranZPUter SW とビデオモジュール v2.0 の機能を 1 枚のボードに統合し、K64F ARM Cortex-M4 I/O プロセッサ、MAX7000A CPLD、Altera Cyclone FPGA を追加します。その結果、MZ-700 は 512 KB の追加スタティック RAM、選択可能な CPU クロックレート、FPGA 内のソフト CPU コア(T80 と ZPU Evolution)、他の Sharp MZ モデルのハードウェアエミュレーション、強化された VGA ビデオ出力、SD カードファイリングシステムにアップグレードされます — 機能が明示的に有効化されるまで、電源投入時はマシンを完全にオリジナルのまま保ちます。
ファームウェアコンポーネントは TZFS(tranZPUter ファイリングシステム)で、すべての起動時に K64F によって SD カードから自動的にロードされます。TZFS は SD カードファイリング、CP/M 2.2 ブート、組み込みの Z80 アセンブラとディスアセンブラ、ハードウェアエミュレーションコマンド、ソフト CPU 切り替え、VGA 出力制御、40 以上の新しいモニタコマンドを追加します — 親しみやすい SA-1510 の * プロンプトとすべてのオリジナルコマンドをそのまま保ちながら。
このマニュアルは tranZPUter SW-700(v1.2 / v1.3 ハードウェア、オリジナルファームウェア)の日常的なインストールと使用に必要なすべてを説明します。ハードウェアアーキテクチャとビルドシステムの詳細については TZFS テクニカルガイドを参照してください。ソースコードの内部については TZFS デベロッパーズガイドを参照してください。
V1 / オリジナルファームウェアに関する注意
このガイドは tranZPUter SW-700 のオリジナル(v1)ファームウェアリリースを対象とし、Sharp MZ-700 のみをターゲットとしています。このバージョンのビデオ制御レジスタは I/O ポート 0xF8–0xFD にあります。

ボードが 現行ファームウェア(MZ-2000 サポートを追加し I/O ポートを 0xA8–0xAD に再割り当て)に更新されている場合、このガイドのレジスタアドレスは一致しません。代わりに 現行バージョンのユーザーマニュアルを使用してください。TZFS H コマンドまたは表示された TZFS バージョン番号が、インストールされているファームウェアを識別するのに役立ちます。

サポートされるハードウェア

このガイドは 2 つのボードリビジョンをカバーします。どちらも同じ K64F ARM Cortex-M4 I/O プロセッサ、MAX7000A CPLD、Altera Cyclone FPGA を搭載しています。唯一の違いは FPGA デバイスとそのパッケージです:
ボードバージョン FPGA デバイス ロジックエレメント ブロック RAM パッケージ 備考
v1.2 Altera Cyclone III EP3C25 25K LE 76 KB 144ピン TQFP 最初の製品リリース。低コスト PCB。
v1.3 Altera Cyclone IV EP4CE75 75K LE 約340 KB 484ピン BGA 推奨。より高解像度グラフィックス、より多くのソフト CPU リソース。
どちらのバージョンもファームウェアの観点から電気的に互換性があります — 同じ TZFS バイナリと同じ K64F ファームウェアがどちらのボードでも動作します。v1.2 は製造コストが低く、v1.3 はより大きな FPGA のため新しいビルドに推奨される選択肢です。どちらのバージョンも git リポジトリに独自のブランチを持っています。
サポートされるホストマシン(V1 ファームウェア): Sharp MZ-700 のみ。MZ-2000 サポートはオリジナルファームウェアには含まれていませんでした。MZ-2000 サポートが必要な場合は、現行ファームウェアと現行バージョンのユーザーマニュアルを使用してください。

必要なもの

tranZPUter SW-700 をインストールして使用するには以下が必要です:
  • 完全に組み立てられテスト済みの tranZPUter SW-700 v1.2 または v1.3 ボード。
  • 正常動作する Sharp MZ-700 ホストマシン。
  • マイクロ SD カード(FAT フォーマット済み、class 10 推奨、最大 32 GB)。
  • Gitea の releases/ ディレクトリにある TZFS ファームウェアバイナリと SD カードファイルコレクション。
  • Altera デバイス互換の JTAG プログラマ(USB Blaster またはクローン)— CPLD と FPGA シリアル設定デバイスのプログラムに必要。初期セットアップ時、または FPGA/CPLD ロジック更新時のみ必要。
  • JTAG/SWD プログラマ(OpenSDA 互換、Freescale FRDM-K64F ボードなど)またはオプションの PJRC MCU — K64F ファームウェアのフラッシュに必要。初期セットアップ時のみ必要。
  • Altera Quartus II(Cyclone III/IV 用バージョン 13.1)— FPGA ロジックをソースからビルドする場合のみ必要。

インストール

tranZPUter SW-700 は、Sharp MZ-700 のソケットからオリジナルの Z80 を取り外し、その場所にボードを挿入することでインストールします。ボードのパススルー Z80 ソケットにオリジナルの CPU が搭載されます。ボードからの 2 番目のケーブルが MZ-700 モジュレータコネクタに接続し、FPGA がビデオ信号をインターセプトして任意に置き換えられるようにします。
インストール手順:
  1. Sharp MZ-700 の電源を切り、ケースの蓋を取り外す。
  2. MZ-700 マザーボードの Z80 CPU ソケットを探す。
  3. チップエクストラクターまたは平刃ツールを使用してオリジナルの Z80 CPU を慎重に取り外す。ピンを曲げないよう注意する。オリジナルの CPU は安全に脇に置いておく — tranZPUter ボードのパススルーソケットに再インストールする。
  4. オリジナルの Z80 を tranZPUter ボード底面のパススルー Z80 ソケットに挿入する。ノッチの向きが一致していることを確認する。
  5. tranZPUter ボードを MZ-700 マザーボードの Z80 ソケットに挿入する。ボードは K64F と CPLD が上を向く向きで差し込む。すべての 40 ピンが完全に差し込まれていることを確認する。
  6. tranZPUter ボードから MZ-700 モジュレータコネクタにビデオケーブルを接続する。これにより FPGA がビデオ信号をインターセプトして強化出力を提供できるようになる。
  7. 準備済みのマイクロ SD カードを tranZPUter ボードの SD カードスロットに挿入する。
  8. ケースの蓋を元に戻し、すべてのケーブルを再接続する。
ボードは、機能が有効化されない状態で電源投入すると、MZ-700 が完全にオリジナルとして動作するように設計されています。K64F は静かに初期化し、SD カードから tranZPUter の 512 KB SRAM に TZFS をロードし、Z80 をリセットから解放します。ユーザーの操作は不要です。

FPGA と CPLD のプログラミング

CPLD(MAX7000A)と FPGA シリアル設定デバイス(v1.2 の EPCS16、v1.3 の EPCS64)は、ボードを初めて使用する前にプログラムする必要があります。事前ビルド済みの JTAG プログラミングファイルは Gitea リポジトリの releases/ ディレクトリで入手できます。プログラミングにはボードの JTAG ヘッダーに接続された USB Blaster または互換インターフェースが必要です。
JTAG チェーン
tranZPUter SW-700 の JTAG チェーンは Altera のベストプラクティスに従います:最高電圧デバイス(CPLD、5V 耐性)が最初にチェーンに入り、FPGA にデイジーチェーンされます。両デバイスとも Altera Quartus II プログラマを使用して単一の JTAG ヘッダーからプログラムされます。
CPLD のプログラミング
リリースの .pof ファイルで MAX7000A CPLD をプログラムする:
# Quartus II プログラマ(コマンドライン)を使用:
quartus_pgm -c "USB-Blaster" -m JTAG -o "p;tranZPUter_SW_700_CPLD.pof@1"
FPGA 設定デバイスのプログラミング
FPGA はすべての電源投入時または CONFIG スイッチが押されたとき(v1.2 のみ;v1.3 では削除)にオンボードのシリアル設定デバイス(EPCS16/EPCS64)から設定されます。リリースの .jic ファイルで設定デバイスをプログラムする。これは Cyclone FPGA を AS(アクティブシリアル)プログラミングモードのプログラミングプロキシとして使用します:
# FPGA 経由で EPCS デバイスをプログラム(Quartus プログラマの AS モード):
quartus_pgm -c "USB-Blaster" -m AS -o "p;tranZPUter_SW_700_FPGA.jic@2"
EPCS デバイスをプログラムした後、ボードの電源を再投入(または v1.2 で CONFIG スイッチを押す)して設定デバイスから新しい FPGA ビットストリームをロードします。

K64F ファームウェアのフラッシュ

K64F ARM Cortex-M4 I/O プロセッサには独自のファームウェア(zOS と TZFS サービスレイヤー)が必要です。事前ビルド済みの K64F ファームウェアバイナリは releases/ ディレクトリで提供されています。ボードのはんだジャンパー設定に応じて 2 つのプログラミング方法がサポートされています:
方法 1 — PJRC MCU(オプションの工場実装)
オプションの PJRC ブートストラップ MCU が実装されており、はんだジャンパー JP1–JP5 がパッド 1-2 に設定されている場合、ボードの USB ポートに接続された USB ケーブル経由で K64F をプログラムできます。ボードを PC に接続し、マスストレージドライブが表示されるまで待ち、ファームウェア .hex ファイルをドライブにコピーします:
cp releases/tzfs_k64f_firmware.hex /media/K64F_DRIVE/
方法 2 — JTAG/SWD(OpenSDA)
PJRC MCU がない場合は、JTAG/SWD プログラマを使用します。OpenSDA ファームウェアを実行する Freescale FRDM-K64F 開発ボードが便利で低コストなオプションです。はんだジャンパー JP1–JP4 パッド 2-3、JP5 ピン 1-2 を設定し、SWD ヘッダーを接続し、pyOCD または J-Link Commander を使用してファームウェアをフラッシュします:
# pyOCD を使用:
pyocd flash --target k64f releases/tzfs_k64f_firmware.hex
SD カードの準備
K64F ファームウェアがフラッシュされたら、リリースの TZFS ファームウェアバイナリと SD カードファイルコレクションで FAT フォーマット済みのマイクロ SD カードを準備します:
  • PC で SD カードを FAT32 としてフォーマットする。
  • TZFS ファームウェアバイナリ(tzfs.bin または同等のもの)をカードのルートにコピーする。
  • SD カードファイルコレクションディレクトリ(MZF ゲームとプログラムファイル、CP/M ディスクイメージ、BASIC イメージ)をリリースアーカイブに提供されている通りカードにコピーする。
K64F は起動時に TZFS バイナリを検出し、Z80 をリセットから解放する前に自動的に tranZPUter の 512 KB SRAM にロードします。

最初の起動

準備済みの SD カードを tranZPUter ボードの SD カードスロットに挿入し、ボードが MZ-700 に正しくインストールされていることを確認して、電源を入れます。K64F が初期化し、SD カードの TZFS ファームウェアを見つけ、tranZPUter の 512 KB SRAM にロードし、Z80 をリセットから解放します。Z80 は TZFS を直接実行します。親しみやすい MZ-700 サインオンバナーが表示され、TZFS が正常に初期化されたことを確認する「+ TZFS」が付加されます:
SHARP MZ-700
Monitor 1Z-013A  + TZFS

*
* は標準の SA-1510 / 1Z-013A モニタプロンプトです。すべてのオリジナル MZ-700 モニタコマンドは無修正マシン上でのように正確に動作します。H と入力してすべての TZFS コマンドを一覧するページ分割されたヘルプ画面を表示します。スペースでページを進めます。
+ TZFS テキストが表示されない場合、TZFS は正しく初期化されていません。最も一般的な原因は:
  • SD カードが挿入されていないまたは正しく差し込まれていない。
  • SD カードが FAT フォーマット済みでないまたは TZFS ファームウェアバイナリがルートにない。
  • K64F ファームウェアが古いまたは正常にフラッシュされなかった。
  • FPGA 設定デバイスがプログラムされていないまたはビットストリームが破損している — FPGA が初期化されていることを確認する(v1.2 のステータス LED 動作)。

TZFS モニタコマンド

完全な TZFS コマンドセットを以下に示します。(T)とマークされたコマンドは K64F I/O プロセッサと tranZPUter ハードウェア(すべての SW-700 ボードに存在)を必要とします。これらは FusionX と picoZ80 のビルドには存在しませんが、ここに列挙されているすべてのコマンドは tranZPUter SW-700 で利用可能です。
コマンド パラメータ 説明
4 40 桁表示モードに切り替える。
8 80 桁表示モードに切り替える。
ASM <address> <address> から始まる組み込み Z80 アセンブラを起動する。ニーモニックを 1 行ずつ入力;アセンブルされたバイトは RAM に書き込まれ、アドレスは自動的に進む。空行で Enter を押して終了。
B キーエントリのビープ音を有効または無効にする。
BASIC SD カードで SA-5510 BASIC(または MZ-700 BASIC)を見つけ、ロードして実行する。
CD [<directory>] アクティブな SD カードディレクトリを変更する。引数なしで現在のパスを表示する。標準的なディレクトリナビゲーションをサポートする。
CP <src> <dst> <size> メモリブロックをコピーする。すべての引数は 4 桁の16進:ソースアドレス、デスティネーションアドレス、バイト数。
CPM SD カードから CP/M 2.2 をロードして起動する。
D <addr> [<addr2>] <addr> から <addr2> まで(または終了アドレスがない場合 20 行)のメモリの16進および ASCII ダンプ。各画面分で一時停止;D でページダウン、U でページアップ、X で終了。
DASM <addr> [<addr2>] <addr> から <addr2> まで Z80 マシンコードを逆アセンブルする。アドレス、16進バイト、ニーモニックを表示する。
DIR [<wildcard>] アクティブな SD カードディレクトリのページ分割されたディレクトリ一覧。オプションのワイルドカードパターン(例:DIR *.MZF)。
EC <名前またはファイル番号> 名前または番号で SD カードからファイルを消去する。
EX TZFS を終了してオリジナルモード(TZFS なし)でマシンを再起動する。
F [<drive>] フロッピーディスクから起動する。指定されない場合はドライブ番号の入力を促す。
FILL <start> <end> [,<value>] <value>(デフォルト 0x00)で <start> から <end> までメモリを埋める。
FREQ <kHz> CPU 周波数を kHz 単位で設定する。0 はボードデフォルトを復元する。K64F サービスリクエスト API を使用する。
H ページ分割されたヘルプ画面を表示する。スペースで進む。
J <address> 指定した16進アドレスにジャンプ(実行)する。
L / LT [<filename>] [,<M>] テープ(CMT)からロードして実行する。オプションの ,M でテープタイミングのマシンモデルを指定する。
LTNX [<filename>] [,<M>] 実行せずにテープからロードする。
LC <名前または番号> [,<M>] SD カードからプログラムをロードして実行する。オプションの ,M でターゲットマシンモデルを指定する。
LCNX <名前または番号> [,<M>] 実行せずに SD カードからロードする。
M <address> インタラクティブメモリエディタ。アドレスと現在の値を表示;16進値を入力して書き込む、Enter でスキップ、Ctrl-C で終了。
MZ (T) [<mc>] マシンコード mc のハードウェアエミュレーションを有効化する。デフォルトは MZ-700。有効なコード:80K80C120080A70080080B
MZ80K (T) Sharp MZ-80K ハードウェアエミュレーションを有効化する。
MZ80C (T) Sharp MZ-80C ハードウェアエミュレーションを有効化する。
MZ1200 (T) Sharp MZ-1200 ハードウェアエミュレーションを有効化する。
MZ80A (T) Sharp MZ-80A ハードウェアエミュレーションを有効化する。
MZ700 (T) Sharp MZ-700 ハードウェアエミュレーション(ホストネイティブモード)を有効化する。
MZ1500 (T) Sharp MZ-1500 ハードウェアエミュレーションを有効化する。
MZ800 (T) Sharp MZ-800 ハードウェアエミュレーションを有効化する。
MZ80B (T) Sharp MZ-80B ハードウェアエミュレーションを有効化する。
P 接続されたプリンタでテストを実行する。
R 包括的な DRAM メモリテストを実行する。失敗したアドレスを報告する。
RIO <port> I/O ポートを読み取って値を表示する。ポートは 4 桁の16進。
S / ST <start> <end> <exec> [,<M>] メモリ範囲をテープ(CMT)に保存する。ファイル名の入力を促す。オプションの ,M でマシンテープタイミング。
SC <start> <end> <exec> メモリ範囲を SD カードに保存する。ファイル名の入力を促す。
SD2T <名前または番号> [,<M>] SD カードからテープ(CMT)にファイルをコピーする。オプションの ,M でマシンモデルのテープタイミング。
T 8253 タイマーチップをテストする。
T2SD [B] [,<M>] テープから SD カードにコピーする。B フラグでバルクモードを有効化(複数ファイルを連続)。オプションの ,M でマシンモデル。
T80 (T) ハードウェア Z80 から内部ソフト T80 CPU コアに切り替える。
TC [-]<value> テープ遅延補正をステップ単位で設定する。- プレフィックスで減少。引数なしで現在の値を表示。
V テープに保存されたファイルをメモリの現在のデータと照合する。
VBORDER (T) <colour> VGA 出力のボーダーカラーを設定する(0–15)。
VGA (T) <mode> VGA 出力モードを設定する(0=オフ、1=640×480、2=800×600)。
VMODE (T) <mode> エミュレートされたマシンのアクティブなビデオモードを設定する。
WIO <port> <value> I/O ポート <port>(4 桁16進)に <value>(2 桁16進)を書き込む。ハードウェアデバッグに便利。
Z80 (T) ソフト CPU からハード(外部)Z80 に切り替える。
ZPU (T) FPGA の ZPU Evolution ソフト CPU コアに切り替えて zOS を起動する。

SD カード操作

TZFS は tranZPUter の K64F I/O プロセッサを使用して、サービスリクエスト API 経由で FAT フォーマット済みの SD カードにアクセスします。ファイルは標準の MZF 形式のファイルとして従来のディレクトリ構造に格納されており、PC から SD カードを管理するのが簡単です。すべての SD カードコマンドは現在アクティブなディレクトリで動作し、CD で変更できます。
ディレクトリの一覧表示
DIR を使用してアクティブな SD カードディレクトリのページ分割された一覧を表示します。オプションのワイルドカードパターンで一覧を制限できます:
* DIR               ; アクティブなディレクトリのすべてのファイルを一覧表示
* DIR *.MZF         ; .MZF ファイルのみを一覧表示
* DIR INVADERS*     ; INVADERS で始まる名前のファイルを一覧表示
各一覧エントリはファイル番号とファイル名を表示します。各画面分で一時停止;続行するにはスペースを押す。
ディレクトリの変更
CD を使用して SD カードのディレクトリ構造をナビゲートします。引数なしの CD は現在のパスを表示します:
* CD                ; 現在のディレクトリパスを表示
* CD MZ700          ; サブディレクトリ MZ700 に移動
* CD ..             ; 1 レベル上に移動
プログラムのロード
LC を使用してアクティブな SD カードディレクトリからプログラムをロードして実行します。LCNX で実行せずにロードします。ファイルは名前または DIR 一覧に表示された番号で指定できます。番号によるロードは文字列マッチングが不要なため高速です。オプションの ,M パラメータは異なる MZ バリアント用に設計されたプログラムのターゲットマシンモデルを指定します:
* LC INVADERS        ; アクティブなディレクトリから INVADERS をロードして実行
* LCNX INVADERS      ; 実行せずにロード(デバッグに便利)
* LC 04              ; ファイル番号 04 をロードして実行
* LC STARTREK,7      ; MZ-700 メモリモデルをターゲットとして STARTREK をロード
プログラムの保存
SC を使用してメモリ範囲をアクティブな SD カードディレクトリに保存します。構文はテープの S コマンドと同じです — 連続した 4 桁の16進値としての開始アドレス、終了アドレス、実行アドレス、その後プロンプトでファイル名を入力:
* SC120020001200
FILE NAME? MYPROG
SAVED
ファイルの消去
EC を使用してアクティブな SD カードディレクトリからファイルを消去します。ファイルは名前または DIR 一覧に表示された番号で識別できます:
* EC OLDPROG         ; OLDPROG という名前のファイルを消去
* EC 07              ; ファイル番号 07 を消去

テープ操作

TZFS は SD カードファイリングシステムと並行して完全な CMT(カセット)サポートを保持します。すべてのオリジナルのテープコマンドは無修正の MZ-700 モニター上でのように動作します。TZFS はマシンモデルのタイミング選択で拡張し、テープと SD カード間でファイルを転送するための便利なコマンドを追加します。
テープからのロード
L(またはエイリアスの LT)を使用してテープからプログラムをロードして実行します。LTNX で実行せずにロードします。オプションのファイル名を指定できます — 指定すると TZFS は一致するヘッダーを見つけるまでテープを検索します。ファイル名なしでは、最初に遭遇したファイルがロードされます。
オプションの ,M パラメータは、ロードに使用するテープタイミングパラメータのマシンモデルを選択します。これは異なるボーレートまたはビットセル幅を使用する異なる MZ モデルで作られたテープを読む場合に必要です。
コード マシンモデル
K Sharp MZ-80K
C Sharp MZ-80C
1 Sharp MZ-1200
A Sharp MZ-80A
7 Sharp MZ-700
8 Sharp MZ-800
B Sharp MZ-80B
* L              ; 次のテープファイルをロードして実行(デフォルトタイミング)
* LT INVADERS    ; テープで INVADERS を検索して実行
* LTNX ,7        ; MZ-700 テープタイミングを使用して次のファイルをロード、実行しない
テープへの保存
S(または ST)を使用してメモリ範囲をテープに保存します。連続した 4 桁の16進値として開始アドレス、終了アドレス、実行アドレスを入力し、プロンプトでファイル名を入力します:
* S120020001200
FILE NAME? MYPROG
SAVING...
テープ保存の検証
保存直後に V を使用して、テープに書き込まれたものがまだメモリにあるデータと一致するかどうかを確認します。TZFS はテープを読み返してバイト単位で比較し、不一致を報告します。
テープから SD カードへのコピー
T2SD はテープから次のファイルをロードしてアクティブな SD カードディレクトリに直接保存します。コマンドを実行する前にテープデッキで再生を押します。オプションの B フラグでバルクモードを有効化します — テープからファイルを連続して読み取り、1 回の操作でテープ全体をアーカイブするのに便利です:
* T2SD          ; 次のテープファイルを SD カードにコピー(デフォルトタイミング)
* T2SD B        ; バルクコピー — テープからすべてのファイルを SD カードに読み取る
* T2SD B,7      ; MZ-700 テープタイミングを使用してバルクコピー
SD カードからテープへのコピー
SD2T はアクティブな SD カードディレクトリから名前付きファイル(またはファイル番号)をロードし、テープ間コピーを行うのと同じようにテープに書き込みます。プロンプトが表示されたらテープデッキで録音を押します:
* SD2T INVADERS      ; SD カードから INVADERS をテープに書き込む
* SD2T 04,7          ; MZ-700 タイミングを使用してファイル 04 をテープに書き込む
テープ遅延補正
異なる CMT デッキとテープヘッドにはわずかに異なる読み書きタイミング特性があります。TC コマンドはすべてのテープタイミング計算に適用される補正値を調整します。一度に 1 または 2 ステップ調整すれば、通常は断続的なロード失敗を解決するのに十分です:
* TC            ; 現在の補正値を表示
* TC 2          ; 補正を 2 ステップ増加
* TC -1         ; 補正を 1 ステップ減少

ソフト CPU

tranZPUter SW-700 FPGA はハード外部 Z80 と並行して 2 つのソフト CPU コアを実装します:T80(ソフトコア Z80 実装)と ZPU Evolution(32 ビットスタック CPU)。CPU を切り替えると、FPGA がリクエストされたコアを有効化する前に K64F が必要なファームウェアをロードするよう要求します。TZFS はこのための 3 つのコマンドを公開しています:
コマンド 説明
Z80 ハード(外部)Z80 に切り替える。これは起動後のデフォルト状態。
T80 FPGA に実装された T80 ソフトコア Z80 に切り替える。
ZPU FPGA に実装された ZPU Evolution ソフト CPU に切り替えて zOS を起動する。
切り替え後、TZFS ファームウェアは中断なく新しい CPU で動作し続けます。Z80、T80、ZPU コアは同じ tranZPUter 512 KB SRAM を共有するため、メモリの内容は切り替え前後で同じです。CPU 切り替えはサイクル正確な Z80 タイミングに依存しないプログラムに対して透明です。
FREQ コマンドはどの CPU がアクティブかに関係なく CPU クロック周波数を調整します。K64F が代替クロックを生成し、Z80 が維持できる任意の周波数に設定できます(Z84C0020 で 24 MHz まで信頼性を持ってテスト済み):
* T80            ; ソフト T80 コアに切り替え
* Z80            ; 外部 Z80 に戻す
* ZPU            ; ZPU Evolution コアに切り替えて zOS を起動
* FREQ 8000      ; CPU 周波数を 8 MHz に設定
* FREQ 0         ; ボードのデフォルト周波数(3.54 MHz)を復元

マシンエミュレーション

tranZPUter SW-700 FPGA は複数の Sharp MZ モデルのハードウェアレベルエミュレーションを実装します。ハードウェアエミュレーションコマンドが発行されると、TZFS は K64F に SD カードから正しいモニタ ROM をターゲットマシン用の SRAM にロードするよう要求します。ロードされると、FPGA はそのビデオとメモリマッピングロジックをターゲットマシンに合わせて再設定し、マシンは完全互換モードで再起動します。この時点から、ターゲットモデル用に設計されたソフトウェアは変更なしで動作します。
注(V1 ファームウェア): MZ-2000 エミュレーションは V1 ファームウェアでは利用できません。現行ファームウェアは MZ-2000 と MZ-2200 サポートを I/O ポートの変更とともに追加します。MZ-2000 エミュレーションが必要な場合は、現行バージョンのガイドを参照してください。
MZ コマンドは名前付きマシンコードのエミュレーションを有効化します。個々の名前付きコマンドは便利なエイリアスです:
* MZ 700         ; MZ-700 ハードウェアエミュレーションを有効化(ホストネイティブ)
* MZ700          ; 同等のエイリアス
* MZ80A          ; MZ-80A ハードウェアエミュレーションを有効化
* MZ80B          ; MZ-80B ハードウェアエミュレーションを有効化
別のモデルをエミュレートした後でホスト MZ-700 ネイティブモードに戻るには、MZ700 を発行するかマシンを電源オフにします。ハードウェアエミュレーションの変更はソフトリセットをまたいで持続します。

ビデオ制御

tranZPUter SW-700 FPGA は MZ-700 のビデオ信号をインターセプトし、オリジナルのビデオをそのまま通過させるか、独自の強化された VGA 出力に置き換えることができます。3 つの TZFS コマンドが VGA 出力を制御します:
コマンド パラメータ 説明
VGA <mode> VGA 出力モードを設定する。0=オフ(オリジナルビデオ)、1=640×480、2=800×600。
VBORDER <colour> VGA ボーダーカラーを設定する(0–15)。カラー値は標準 Sharp MZ パレットに従う。
VMODE <mode> エミュレートされたマシンのアクティブなビデオモードを設定する。モード値はアクティブなハードウェアエミュレーションターゲットによって異なる。
* VGA 1          ; 640x480 で VGA 出力を有効化
* VGA 2          ; 800x600 で VGA 出力を有効化
* VGA 0          ; VGA 出力を無効化(オリジナルビデオに戻す)
* VBORDER 4      ; VGA ボーダーカラーを 4 に設定
* VMODE 2        ; アクティブなエミュレーションターゲットのビデオモード 2 を設定
ビデオ制御レジスタ(V1 — I/O ポート 0xF8)
V1 ファームウェアでは、FPGA ビデオコントローラは I/O ポート 0xF8(制御レジスタ)経由で直接アクセスされます。V1 の完全なレジスタマップは:
ポート レジスタ 説明
0xF8 制御レジスタ VGA モード、色深度、桁幅、マシンモデル選択
0xF9 グラフィックスモード グラフィックスモード選択
0xFA カラーライター(R) 赤チャンネルカラーパレット書き込み
0xFB カラーライター(G) 緑チャンネルカラーパレット書き込み
0xFC カラーライター(B) 青チャンネルカラーパレット書き込み
0xFD メモリページ メモリページレジスタ
0xF8 の制御レジスタはいくつかのフィールドをエンコードするバイト値を受け付けます:
ビット フィールド 説明
7:6 VGA VGA 出力モード: 00=オフ、01=640×480、10=800×600
5 カラー 0=モノクロ、1=カラー出力
4 80col 0=40 桁、1=80 桁
3:0 モデル マシンモデル: 0100=MZ-700、0000=MZ-80A、その他モデルごと
例:VGA 640×480、カラー出力、80 桁、MZ-700 モデルを有効化:
LD A, 0x59    ; VGA=01、カラー=1、80col=1、モデル=0100 (MZ-700)
OUT (0xF8), A ; V1 ファームウェア: 制御レジスタは 0xF8 にある
V1 vs 現行 — レジスタアドレスの違い
V1 ファームウェアではビデオ制御レジスタは 0xF8 にあります。MZ-2000 サポートのための I/O ポート再割り当て後の現行ファームウェアでは 0xA8 に移動しました。TZFS バージョンが v2.2 以降のビルド番号を表示する場合、または OUT (0xF8), A がビデオに影響を与えない場合、ボードは現行ファームウェアで動作しており、ポート 0xA8 を使用する必要があります — 現行バージョンのユーザーマニュアルを参照してください。

CP/M 2.2 の実行

CP/M 2.2 は tranZPUter SW-700 で利用できます。モニタプロンプトから:
* CPM
TZFS はアクティブな SD カードディレクトリで CP/M イメージを見つけ、ロードして制御を CP/M CCP に転送します。プロンプトが A> に変わります。
ディスクドライブへの CP/M アクセスは、CP/M BIOS コールを SD カードファイル操作に変換する tranZPUter の K64F I/O プロセッササービス API を通じて提供されます。tranZPUter は CP/M に 64 KB のプログラム RAM を提供します。CBIOS は tranZPUter の上位 SRAM に置かれ、アプリケーション用に下位 64 KB 全体を空けます。
事前ビルド済みの SD カードイメージには入力済みの CP/M ディスク領域が含まれています。CPM を入力する前に CD で CP/M ブートイメージを含むディレクトリに移動してください。標準的な CP/M アプリケーション — Turbo Pascal、WordStar、Hi-Soft C、アセンブラ — は変更なしで動作します。
CP/M から TZFS モニタに戻るには、ウォームブート(CCP からの Ctrl-C)を使用して CCP を再ロードします。完全に TZFS に終了するには、TZFS モニタプロンプトから EX コマンドを使用するか、電源を入れ直します — TZFS は SD カードから自動的に再ロードされます。

BASIC の使用

TZFS は SD カードから BASIC インタープリタを自動的に見つけてロードできます。モニタプロンプトから入力:
* BASIC
TZFS はアクティブな SD カードディレクトリで現在のハードウェアエミュレーションターゲットに適切な BASIC イメージを検索し、RAM にロードして実行します。BASIC プロンプトが表示され、インタープリタはオリジナルハードウェア上でのように動作します。
TZFS が SD カードから BASIC をロードするため(ROM からでなく)、カードに複数の BASIC バージョンが共存できます:
  • ネイティブ MZ-700 モードで動作しているとき、MZ-700 BASIC イメージ(1Z-013A BASIC 相当)がロードされます。
  • MZ-80A ハードウェアエミュレーション下で動作しているとき、SA-5510 BASIC イメージがロードされます。
SD カードに MZF ファイルとして格納された BASIC プログラムは、適切なファイルに向けられた標準のテープ LOAD コマンドを使用して BASIC 内からロードするか、TZFS モニターに戻って(利用可能な場合は BYE または MON コマンド)LC を使用してロードできます。
BASIC から TZFS モニタに戻るには、BASIC インタープリタで利用可能な場合は BYE または MON コマンドを使用するか、マシンをリセットします — TZFS は SD カードから自動的に再ロードされます。

V1 vs 現行ファームウェア — 主な違い

tranZPUter SW-700 ファームウェアはオリジナルの v1 リリース以来大幅に進化しました。以下の表は、V1 ファームウェア(このガイドでカバー)と現行ファームウェア(現行バージョンのユーザーマニュアルでカバー)の主な違いを要約しています:
機能 V1(このガイド) 現行バージョン
サポートされるホスト Sharp MZ-700 のみ Sharp MZ-700 と Sharp MZ-2000
ビデオ制御レジスタ 0xF8 0xA8
グラフィックスモードレジスタ 0xF9 0xA9
カラーライター(R/G/B) 0xFA、0xFB、0xFC 0xAA、0xAB、0xAC
メモリページレジスタ 0xFD 0xAD
MZ-2000 ハードウェアエミュレーション 利用不可 利用可能
MZ-2000 グラフィックスモード 利用不可 利用可能
TZFS コマンドセット 40 以上のコマンド 40 以上のコマンド(同じセット;レジスタアドレスのみ内部で異なる)
CP/M、BASIC、テープ、SD 完全サポート 完全サポート
どのファームウェアがインストールされているかを識別する方法:
  • TZFS プロンプトで H と入力して表示されるファームウェアバージョン番号を読む。V1 ファームウェアバージョンは v2.2 ブランチでラベル付けされている(Git ブランチ v2.2-tranZPUter-SW-HW_700_v1.3 以前)。現行ファームウェアは後のブランチにある。
  • WIO F8 00 と入力する。ビデオが変わる場合、V1 ファームウェアを実行中(ポート 0xF8 がアクティブ)。応答がない場合は WIO A8 00 を試す — それが効果を持つ場合、現行ファームウェアを実行中。
  • MZ2000 が認識されたコマンドであれば、現行ファームウェアを実行中。
V1 から現行バージョンにファームウェアを更新する場合、ビデオレジスタを書き込むすべての Z80 アセンブリコードを更新してください:ポート 0xF8–0xFD へのすべての参照を 0xA8–0xAD にそれぞれ置き換えてください。

トラブルシューティング

モニタは起動するがバナーに "TZFS" が表示されない

  • SD カードが挿入されていないまたは検出されない — カードが tranZPUter ボードの SD カードスロットに完全に差し込まれていることを確認してください。
  • SD カードが FAT フォーマット済みでない — K64F は標準の FAT32 フォーマット済みカードを期待します。再フォーマットし、TZFS ファームウェアバイナリと SD カードファイルコレクションを再度コピーしてください。
  • TZFS ファームウェアバイナリがない — TZFS ファームウェアバイナリ(tzfs.bin または同等のもの)が SD カードのルートに存在することを確認してください。
  • K64F ファームウェアがフラッシュされていないまたは古い — K64F が releases/ ディレクトリの正しいファームウェアでプログラムされていることを確認してください。プログラムされていない K64F は起動時に TZFS をロードしません。
  • FPGA が設定されていない — EPCS 設定デバイスが正しくプログラムされていることを確認してください。FPGA が設定されていない場合(ロジックがアクティブでない)、ボードは機能しません。v1.2 では CONFIG スイッチを押す;v1.3 では EPCS64 をプログラムした後に電源を再投入する。

VGA 出力がない、または乱れている、またはビデオコマンドが効果を持たない

  • 誤ったレジスタアドレス — ポート 0xF8(V1 ファームウェア)を使用していることを確認してください。ボードが現行ファームウェアに更新されている場合、レジスタは 0xA8 に移動しています。上記の V1 vs 現行セクションの説明通りにファームウェアバージョンを確認してください。
  • ビデオケーブルが接続されていない — tranZPUter ボードと MZ-700 モジュレータコネクタの間のビデオケーブルが接続されている必要があります。両方のコネクタが完全に差し込まれていることを確認してください。
  • モニターまたはディスプレイが VGA 信号を受け付けない — ディスプレイが選択された VGA モード(640×480 または 800×600)を受け付けることを確認してください。まずモード 1 を試してください(640×480 は最も広くサポートされています)。
  • FPGA ビットストリームが誤ったボードバージョン用 — EPCS デバイスがご使用のハードウェア用のビットストリームでプログラムされていることを確認してください(v1.2 Cyclone III vs v1.3 Cyclone IV)。不一致のビットストリームは誤ったまたは存在しないビデオを生成します。

テープのロードが失敗するまたはエラーが発生する

  • テープタイミングの不一致 — テープが異なる MZ モデルで録音された場合、適切なマシンモデルタイミングを選択するために ,M パラメータを使用してください(テープ操作参照)。
  • テープヘッドの速度変動 — テープ遅延補正を調整するために TC コマンドを使用してください。1 または 2 ステップの増減で通常は断続的な失敗を解決できます。
  • テープの状態 — 古いまたは保存状態が悪いテープにはドロップアウトがある場合があります。再試行前にイソプロピルアルコールでテープヘッドとキャプスタンを清掃してください。

CP/M が起動しないまたは BIOS エラーが表示される

  • SD カードに CP/M イメージがない — SD カードに CPM が入力されたときにアクティブだったディレクトリに CP/M ブートイメージが含まれていることを確認してください。DIR で確認してください。
  • 誤ったアクティブディレクトリCPM を入力する前に CD で CP/M イメージを含むディレクトリに移動してください。
  • K64F サービスタイムアウト — K64F が期待されるウィンドウ内に BIOS サービスリクエストに応答しない場合、CP/M はストールします。ボードの電源を入れ直して再試行してください。問題が続く場合は K64F ファームウェアの互換性を確認してください。

プログラムをロードした後にマシンがクラッシュまたは予期せずリセットされる

  • プログラムが誤ったマシンモデルをターゲットとしている — 特定の MZ モデル用に書かれたプログラムは異なるモデルでクラッシュする場合があります。ロードする前に適切なハードウェアエミュレーションを有効化してください(例:MZ-80A ソフトウェアをロードする前に MZ80A)。
  • プログラムが TZFS ワークスペースを上書きする — TZFS は tranZPUter の 512 KB SRAM の領域を予約します。下位 64 KB 全体を使用するプログラムは TZFS データを破損する場合があります。LCNX を使用して実行せずにロードし、実行前にロードアドレスを D で検査してください。

T80 または ZPU コマンドが認識されないまたはクラッシュを引き起こす

  • FPGA ビットストリームにソフト CPU コアが含まれていない — EPCS が部分的またはテストビルドではなく、リリースの完全な製品ビットストリームでプログラムされていることを確認してください。
  • ZPU ファームウェアが SD カードにない — ZPU コマンドは切り替える前に K64F が SD カードから zOS をロードする必要があります。zOS ファームウェアイメージが SD カードの正しいディレクトリに存在することを確認してください。

参考サイト

リソース リンク
tranZPUter SW-700 V1 プロジェクトページ /sharpmz-700-upgrades-tranzputer-sw/
tranZPUter SW-700 現行プロジェクトページ /sharpmz-700-upgrades-tranzputer-sw-current/
現行バージョンのユーザーマニュアル /sharpmz-700-upgrades-tranzputer-sw-current-usermanual/
TZFS テクニカルガイド /sharpmz-upgrades-tzfs-technicalguide/
TZFS デベロッパーズガイド /sharpmz-upgrades-tzfs-developersguide/
tranZPUter プロジェクトページ(オリジナル SW) /tranzputer/
tranZPUter Fusion プロジェクトページ /tranzputerfusion/
TZFS ユーザーマニュアル(汎用、全プラットフォーム) /sharpmz-upgrades-tzfs-usermanual/
Sharp MZ-700 仕様 /sharpmz-700-specifications/
Sharp MZ シリーズ テクニカルリファレンス リポジトリの docs/ ディレクトリにバンドル済み
Altera Quartus II 13.1(Cyclone III/IV) Intel FPGA レガシーダウンロードから入手可能