Sharp MZシリーズ FPGAエミュレータ v1.0
概観
このプロジェクトはPhilip Smartによって作成され、GitHub上のMiSTer-devel組織の下でホストされています。ソースリポジトリはSharpMZ_MiSTerです。後継バージョン(v2.0)は設計をtranZPUter SW-700カードに移植し、物理的なSharp MZホストマシン内でエミュレーションを実行可能にします — 下記のv1とv2の比較をご覧ください。
v1.0をMiSTerプロジェクトにリリースした後、Cyclone VのCortexコア上で動作するMiSTerバイナリに管理メニューを配置することはできないと助言を受けました。FPGA内にインスタンス化された管理CPUを作成し、そこに管理コードとメニューを組み込むよう求められました。しかし、エミュレーション実行中はCyclone VのCortexコアは使用されておらず、ユーザーが別のコアを選択したりリブートしたりできるMiSTer互換の基本メニューを提供する限り、開発者の判断でコアに専用利用すべきだと考え、この決定には同意できませんでした。ZPUプロセッサの開発にかなりの時間を費やし、それがZPU Evo(lution)の誕生につながりました。最終的にMiSTerプロジェクト向けのエミュレーション開発の勢いを失ってしまいました。MiSTerプロジェクトが安定し、管理CPUを作成せずに最新の開発成果を追加できる道筋が見えた段階で、MiSTerをv2.0以降の変更で更新する予定です。
概要
このプロジェクトはSharp MZシリーズコンピューターの完全なハードウェアエミュレーション(拡張機能含む)の提供を目指しています。
初期バージョンはTerasic DE10 Nanoボードをベースとし、MiSTer_Develプロジェクトの下でUI操作にHPSプロセッサーを使用してホストされています。
以下のエミュレーションが作成されています:
| エミュレーター | ステータス | エミュレーター | ステータス | |
|---|---|---|---|---|
| MZ80K | 開発済み | MZ80C | 開発済み | |
| MZ1200 | 開発済み | MZ80A | 開発済み | |
| MZ700 | 開発済み | MZ80B | 開発済み | |
| MZ2000 | 一部開発済み | MZ800 | 開発中 |
現在のエミュレーターバージョンが提供する機能:
| MZ80K、C、1200、A用 48K RAM |
| MZ700、MZ80B用 64K RAM |
| 1x〜32x高速モード選択可能なハードウェアテープ読み書き |
| MZ80B/MZ2000用 APSSテープドライブ — メニューキューシステムを使用した完全自動APSS。 |
| 1x〜32xターボモード(例:MZ700で112MHz) |
| プログラマブルキャラクタージェネレーター(PCG-8000/PCG-1200) |
| 40x25、80x25 モノクロおよびカラー表示モード |
| 320x200、640x200 8色ビットアドレスグラフィックス |
| VGAスケーリング |
| エミュレーションタイプごとに更新可能なモニターROM、CGRom、キーマップ、ユーザーROM、FDC ROM。 |
| i8253 モノオーディオまたはテープオーディオ |
テスト中/開発中の拡張機能
| フロッピーディスクドライブ/コントローラー 5.25” |
| クイックディスクコントローラー |
| デュアルデジタルジョイスティック入力(MZ700) |
既知の問題
| キーボードマッピングの改善が必要です。特にMZ80Aの日本語版であるMZ1200について。 |
| HDMIを設計で再有効化する必要があります。 |
| ZPU I/Oプロセッサーがステータス情報表示に使用するステータスフレームバッファーを完成させる必要があります — 使用上は重要ではありません。 |
設計概要
FPGAアーキテクチャ
コアコンポーネント
sharpmz.sv)はすべてのサブシステムをインスタンス化し、MiSTerフレームワークに接続します。主要なVHDLモジュールは以下の通りです:
| モジュール | ソース | 機能 |
|---|---|---|
| T80 CPU | rtl/T80/*.vhd |
Z80 CPUコア — サイクル精度のオープンソースZ80実装。FPGAロジックに直接合成され、オリジナルのクロック速度(MZ-80Kは2 MHz、MZ-700は3.5 MHz、MZ-80Bは4 MHz)で動作し、最大32倍(MZ-700で112 MHz)のターボモードを選択可能。 |
| マシンコントローラー | rtl/mctrl.vhd |
各Sharp MZモデルのメモリマップ、I/Oポートデコード、バンク切り替えロジックを実装する中央ステートマシン。設定されたマシンタイプに基づいてアクティブな周辺機器を選択。 |
| ビデオコントローラー | rtl/video.vhd |
40x25および80x25モード、カラー/モノクロ出力、VGA同期生成およびスケーリングを備えたキャラクターベースのディスプレイ。ダブルバッファリングレンダリングを使用 — 垂直ブランキング中にVRAMをピクセルに展開してスノー/ティアリングを排除。 |
| MZ-80Bビデオ | rtl/mz80b/mz80b_video.vhd |
MZ-80B/MZ-2000モデルの異なるビデオアーキテクチャと640x200モノクログラフィックスに対応する拡張ビデオコントローラー。 |
| CMT(カセット) | rtl/cmt.vhd, rtl/mz80b/cmt.vhd |
カセットマグネットテープインターフェース。完全なテープイメージを保持する64K RAMキャッシュを使用してテープハードウェア信号をエミュレート。1x〜32x高速モードとMZ-80B/MZ-2000用APSS(自動プログラム検索システム)をサポート。 |
| i8253 タイマー | rtl/i8253/*.vhd |
Intel 8253プログラマブルインターバルタイマー — Sharp MZハードウェアで使用された実際のICに一致するシステムタイミングとモノオーディオ生成を提供。 |
| i8255 PPI | rtl/i8255/i8255.vhd |
Intel 8255プログラマブルペリフェラルインターフェース — オリジナルのSharp MZ設計に従い、キーボードスキャン、カセット制御信号、汎用I/Oを処理。 |
| Z80 PIO (z8420) | rtl/z8420/*.vhd |
MZ-80B/MZ-2000モデルで追加の周辺機器インターフェースに使用されるZ80パラレルI/Oコントローラー。 |
| キーボードマトリクス | rtl/keymatrix.vhd |
PS/2キーボード入力をSharp MZキーマトリクスフォーマットに変換。マシンモデルごとにアップロード可能な設定可能なROMベースのキーマッピングテーブルを使用。 |
| クロックジェネレーター | rtl/clkgen.vhd, rtl/clk_div.vhd |
DE10-Nanoの50 MHzオシレーターからのPLLベースのクロック合成。必要なすべてのクロックドメインを生成 — CPUクロック(選択可能なターボ乗数付き)、ビデオドットクロック、周辺機器タイミング。 |
| MZ-80B/2000ロジック | rtl/mz80b/mz80b.vhd |
MZ-80BおよびMZ-2000モデルの完全なグルーロジックとメモリマップ。フロッピーコントローラーインターフェース(mb8876.vhd、fd55b.vhd)、システム制御(sysctrl.vhd)、拡張I/Oを含む。 |
| MZ-80K/Cロジック | rtl/mz80c/mz80c.vhd |
MZ-80K、MZ-80C、MZ-1200、MZ-80A、MZ-700ファミリーのグルーロジックとメモリマップ。 |
| ブリッジ | rtl/bridge.vhd |
FPGAエミュレーションロジックとMiSTer HPS(ARMプロセッサー)間のインターフェース。制御レジスターアクセス、ROM/テープイメージアップロード、OSDメニュー通信チャンネルを処理。 |
| Configパッケージ | rtl/config_pkg.vhd |
すべての設定定数、マシン固有のパラメーター、メモリアドレス、I/Oポート定義を含むVHDLパッケージ。 |
| SPIマスター | rtl/spi_master.vhd |
SDカードアクセス用SPIバスコントローラー(テープおよびフロッピーイメージストレージ)。 |
メモリアーキテクチャ
| メモリ | サイズ | 用途 |
|---|---|---|
| メインRAM | 48K / 64K | システムRAM — MZ-80K/C/1200/Aは48K、MZ-700/80Bは64K。T80 CPUコアから直接アクセス可能。 |
| ビデオRAM | 2K + 2K | キャラクターVRAM(2K)とカラー情報用アトリビュートRAM(2K)。 |
| キャラクタージェネレーターROM | モデルごと | 各マシンモデルの内蔵CGROM、およびPCG-8000/PCG-1200互換の切り替え可能なCGRAM(2K)。 |
| モニターROM | モデルごと | すべてのエミュレートされたマシンのモニターROM完全セット(SA-1510、SP-1002など)、単一ROMバンクに連結。 |
| キーマッピングROM | モデルごと | 各マシンのキーボード変換テーブル。日本語レイアウト(MZ-1200)やその他のバリアントのカスタムアップロードをサポート。 |
| CMTキャッシュ | 64K | フルテープイメージキャッシュ — MZFプログラム全体(ヘッダー+データ)がHPSによってここにロードされ、ビットストリームとしてCMTハードウェアエミュレーションに供給。 |
| グラフィックスフレームバッファー | 3 x 16K | 640x200 / 320x200 8色グラフィックスディスプレイ用の赤、緑、青ピクセルプレーン。バンク切り替えによりC000H〜FFFFHでCPUから直接アドレス可能。 |
| ステータスフレームバッファー | 約8K | OSDメニューとステータスインジケーター(Record、Play、フロッピーアクティビティ)用のピクセルマップオーバーレイ。メインディスプレイエリア外。 |
HPS統合
- OSDメニューシステム — マシン選択、テープ/フロッピー操作、表示設定、ROM管理、デバッグ用のF12オンスクリーンディスプレイ。メニュー状態はブリッジモジュールの制御レジスターを介してFPGAに通信。
- SDカードアクセス — MZFテープイメージとDSKフロッピーイメージはMiSTer SDカードに保存。HPSがFATファイルシステムからファイルを読み取り、ブリッジを介して完全なイメージをFPGAのCMTキャッシュRAMに転送。
- 制御レジスター — マシンモデル選択、CPU速度、表示モード、オーディオ設定、デバッグ設定はすべて、HPSがブリッジモジュールのメモリマップされたレジスターに書き込むことで設定。
- ROMアップロード — カスタムモニターROM、キャラクタージェネレーターROM、キーマッピングテーブル、ユーザーROM、フロッピーディスクROMは、起動時にブリッジを介してSDカードファイルからアップロード可能。
インストール
| 1. | セットアップガイドに従って新しいSDブートディスクを作成します。https://github.com/MiSTer-devel/Main_MiSTer/wiki/Setup-Guide |
| 2. | releasesフォルダーから最新のRBFファイルをSD(scpまたはWindows/Linux下でSDをマウントしてローカルコピーコマンドを使用)にコピーします: |
| scp SharpMZ_MiSTer/releases/SharpMZ_<日付>.rbf root@<de10のIPアドレス>/media/fat/SharpMZ.rbf | |
| ターゲット名は.rbfで終わるものであれば何でも構いません。「root」パスワードはデフォルトのインストールでは1です。IPアドレスはコアをロードする前のMiSTerメインシステムメニューでESCを押すと確認できます。 | |
| 3. | SDカードにSharpMZディレクトリを作成します: |
| ssh root@<de10のIPアドレス> | |
| mkdir /media/fat/SharpMZ | |
| 4. | 新しいディレクトリにROMファイル、MZFテープファイル、DSKファイルをコピーします: |
| scp *.mzf root@<de10のIPアドレス>:/media/fat/SharpMZ/ | |
| 5. | MiSTerメニューを起動します(表示されていない場合はDE10リセットボタンを押します)。 |
| 6. | SharpMZコア(または付けた任意の名前のもの)を選択します。 |
| 7. | エミュレーターはSA-1510モニターでMZ80Aモデルとして起動します。 |
| 8. | F12を押して設定を変更し、「Save Config」を選択して保存します。 |
エミュレーターの使い方
メニューシステム
MiSTerメニューシステムはこの設計でフロントエンド制御として広く使用されています。カセットやフロッピーディスクのロード/保存、マシンパラメーターの設定、表示パラメーターの設定、デバッグ、MiSTer制御メニューへのアクセスが可能です。
テープストレージ
エミュレーションを本格的に使用するためには、既存のプログラムをロードおよび保存できる必要があります。最初は(元のマシンでは)CMT(テープ)ユニット経由で、その後フロッピー/クイックディスクに移行しました。
このメニューはハードウェアCMTユニットを制御し、以下の選択肢があります:
-
RAMへ直接ロード
このオプションでMZF形式のテープファイル(128バイトヘッダー+コード)をRAMに直接ロードできます。ヘッダーに格納されたロードアドレスとサイズを使用してコードを正しく配置し、カセットワークエリア(10F0H)にヘッダーを保存します。ロード完了後にウォームリセットを行うと、テープの詳細が画面に表示されます。ロードされたプログラムを実行するには、正しいモニターコマンドを入力します(例:J1200 — 1200Hはテープ概要に表示された実行アドレス)。
-
テープのキュー
実際のカセットには1つ以上のプログラムが順次格納されています。エミュレーションキャッシュは1つのフルプログラムしか保存できないため、複数のプログラムを並べてキャッシュが空になると次のプログラムが供給される仕組みで、実際のカセットをシミュレートします。このオプションを選択するとすべてのMZFファイルのディレクトリリストが表示されます。1つずつ選択するとキューに追加されます。キューに入れられたプログラムはメニューに表示されます。
MZ80B/MZ2000の場合、元のテープドライブはプログラムを前後に検索できるAPSS自動化ドライブでした。キューはAPSS信号を解釈して必要に応じてキューを前後に移動させることでこれをエミュレートします。複数ボリュームを持つデータベースプログラムなどを使用する場合は、プログラムが正常に機能するようにテープキューに追加する必要があります。
-
キューのクリア
このオプションですべてのキューエントリーを削除できます。
-
テープの保存エミュレーションキャッシュにあるプログラムをMiSTer SDカードに保存できます。通常、エミュレーションはBASICの「SAVE」コマンドなどでプログラム/データをテープ(実際にはエミュレーションキャッシュ)に書き込みます。テープはエミュレーション保存コマンドで付けた名前で保存されます(例:BASIC「SAVE "myfile"」の場合、myfile.mzfとして保存されます)。 -
テープ自動保存エミュレーションキャッシュを自動保存できます。エミュレーション保存が完了するとフラグが立ち、MiSTerプログラムがそれを検出してエミュレーションで付けた名前のSDカードにキャッシュが保存されます。 -
テープボタン
アクティブなテープボタン(再生、録音、または自動)を設定できます。自動はエミュレーションがテープへの読み書きを検出して適切に処理するハードウェアメカニズムです。通常は自動に設定しますが、テープの読み書きを防ぎたい場合は設定を変更してください。
-
テープ高速ロード
テープドライブの速度を設定できます。元のマシンではテープが1200baudで動作しており非常に遅いため、このオプションの使用をお勧めします。以下から選択できます:
オフ 2x 4x 8x 16x 「オフ」を選択するとテープドライブが元の速度で動作します。
-
ヘッダーのマッピング(ASCII)
Sharp ASCIIとANSI ASCIIの間のリアルタイム変換を設定できます。大文字のみが1対1でマッピングされるため、エミュレーターで小文字を使用してファイルを保存すると、SDカードにタイトルが文字化けしたファイルが保存されます。逆に、PC上で標準ASCIIを使用して作成したファイルをエミュレーター内で読み込むと文字化けが発生します。このオプションで必要に応じて2つの文字セットをマッピングできます:
オフ 録音 再生 両方 「オフ」はマッピングなし、「録音」はエミュレーターファイルをSDカードに保存する際にマッピング、「再生」はSDカードからエミュレーターにファイルを読み込む際にマッピング、「両方」は録音と再生の両方でマッピング。
注:APSSの機能導入により、テープ保存とテープ自動保存は不要になりました。エミュレーション上で実行中のプログラムが保存を実行すると、名前がMiSTer Mainバイナリに転送され、SDカードにそのファイルが作成されます。
マシン
エミュレーションはいくつかのSharp MZコンピューターをエミュレートし、このメニューでエミュレートするSharpモデルを選択できます。
-
マシンモデル
どのSharp MZコンピューターをエミュレートするか選択できます。現在の選択肢は:
MZ80K MZ80C MZ1200 MZ80A MZ700 MZ80B MZ2000 MZ800(開発予定) -
CPU速度
エミュレーションの動作速度を設定できます。一般的に高速設定はグラフィックスを使用しないアプリケーションで有益ですが、一部のゲームでは若干の速度向上が効果的です。選択肢は:
MZ80K/C/1200/A = 2MHz 4MHz 8MHz 16MHz 32MHz 64MHz MZ700 = 3.5MHz 7MHz 14MHz 28MHz 56MHz 112MHz MZ80B/2000 = 4MHz 8MHz 16MHz 32MHz 64MHz -
オーディオソース
オーディオ出力から再生されるものを選択できます。選択肢は:
ソース 説明 サウンド エミュレーションが生成するモノラルオーディオをL/Rチャンネルに出力。 テープ CMT信号をサウンドとして出力。右チャンネルに再生、左チャンネルに録音。理論上は右チャンネルを外部テープドライブに接続して物理テープに録音できます。 -
オーディオボリューム
出力音量を設定できます。最小〜最大の16段階から選択。
-
オーディオミュート
オーディオ出力をミュートできます。
-
ROM管理
エミュレーションには各エミュレートされたマシン用のモニター、キャラクタージェネレーター、キーマッピングROMが内蔵されています。このオプションはサブメニューを選択して、エミュレーション起動時(コア選択時)に非標準のROMをアップロードできます。
-
マシンモデル
カスタムROMイメージが影響するエミュレートされたSharp MZコンピューターを選択できます:
MZ80K MZ80C MZ1200 MZ80A MZ700 MZ80B MZ2000 MZ800(開発予定) -
ユーザーROM
一部のマシンモデル(例:MZ80A)にはユーザーROMを配置するソケットがあり、最初のバイトが0で書き込み不可の場合に制御が渡されます。このオプションはユーザーROMを有効または無効にします(有効にするとハードウェアセレクトが有効になるだけで、最初のバイトが0に設定されたROMをアップロードする必要があります)。
-
フロッピーディスクROM
フロッピーディスクドライブはSharp MZコンピューターの拡張オプションでした。MZ700の登場とともにクイックディスクドライブもオプションとなりました。これらのオプションはF000Hの位置にROMで制御ソフトウェアを保持していました。このオプションでこの機能を有効にできます(ROMをアップロードする必要があります)。
-
カスタムROMの有効化 このセクションでカスタムROMを有効にしてアップロードするイメージを選択できます。各ROMを有効または無効にできます。有効な場合、必要なファイルを選択できます。カスタマイズ可能なROMは:
モニター(40x25) モニター(80x25) キャラクタージェネレーター キーマッピング ユーザーROM フロッピーディスク モニターROMは特別なケースです。ほとんどのSharp MZパーソナルコンピューターは40x25文字のみを表示できるため、ROMにこのパラメーターがハードコードされています。CP/Mで使用するためにより広い画面が必要な人がいたため、80x25表示を作成するためにハードウェア改造が行われました。エミュレーションは両方のモードに対応していますが、正しく動作させるためには80x25表示用の異なるモニターROMが必要です。
-
表示
Sharp MZコンピューターの元の表示はかなりシンプルでした。各モデルおよびサードパーティーベンダーによる拡張に対応するため、エミュレーションにはこのメニューにまとめられた複数の設定可能なパラメーターがあります。
-
表示タイプ
使用する表示を選択できます。通常、マシンモデルを選択するとデフォルトの表示になりますが、このオプションでデフォルトを上書きできます。選択肢は:
モノ 40x25 モノ 80x25 カラー 40x25 カラー 80x25 -
VGAスケーリング
様々なVGAモニターに対応するため、このオプションは同期ジェネレーターが標準のVGA信号を模倣するようにプログラムします。元のSharp MZ 40x25画面(320x200ピクセル)よりVGA解像度が高いため、元のフォーマットからVGAフォーマットへのスケーリングが行われます。選択肢は:
640x480@60Hz オフ 他のフォーマットはハードウェアに組み込まれていますが、ステータスバッファー(Record、Play、フロッピー使用中ランプなどの情報を出力するための表示周囲のピクセルマップエリア)と連動しているため、現在は有効化されていません。
-
ビデオ
元の設計への拡張としてグラフィックスフレームバッファーが追加されました。元の表示ビデオとグラフィックスフレームバッファーをブレンドすることができます。このオプションで元の表示ビデオを有効または無効にできます(グラフィックスのみを表示したい場合など)。
-
グラフィックス
ビットアドレス可能なピクセルグラフィックスを表示するためのアドオンボードが様々に用意されていました。これは元の設計への拡張であり、他のアドオンボードの情報が集まり次第、これらのオプションに対応するためにハードウェアインターフェースを適応させる予定です。このオプションでグラフィックスフレームバッファーの表示を有効または無効にできます(元のキャラクターベースのビデオ出力とブレンドされます)。
-
グラフィックスアドレス
エミュレーションは複数のSharp MZモデルに対応しており、元々グラフィックスを持たないマシンへのグラフィックス追加も行っているため、グラフィックスモードとオプションを選択するI/Oアドレスの衝突が生じる可能性があります。このオプションでグラフィックス制御レジスターにアクセスするためのデフォルトのIOアドレスを設定します。
-
VRAM CPUウェイト
ピクセルベースの表示バッファーを追加することで元の設計から逸脱しました。垂直ブランキング期間中、キャラクターベースのVRAMとアトリビュートRAMをピクセルに展開して表示バッファー(ダブルバッファリング技術)に保存します。これによりCPUが可視表示期間中にVRAM/アトリビュートRAMにアクセスしてもスノー/ティアリングが発生しなくなります。元の設計はスノー/ティアリングを排除するためにソフトウェアウェイト(MZ80K)とハードウェアCPUウェイトステート(MZ80A/700)を追加していましたが、ダブルバッファリングの追加により不要になりました。このオプションでウェイトステートを無効にして速度を上げるか、互換性のために有効にするかを選択できます。
-
PCGモード
すべてのSharp MZコンピューターはROMにハードコードされたキャラクタージェネレーターを使用していました。外部ベンダーはRAMベースのプログラマブルキャラクタージェネレーター用のアドオンを提供していました。このオプションはHAL PCG-8000/PCG-1200アドオンと互換性のあるプログラマブルキャラクタージェネレーターを有効にします。選択肢は:
ROM RAM -
アスペクト比このオプションはアスペクト比を4:3から16:9に変換するMiSTerフレームワークの拡張です。現在VGA出力では動作しませんがHDMIでは動作するはずです。このオプションで希望のフォーマットを選択します。 -
スキャンダブラーこのオプションは古いコンピューターディスプレイの画像を広げ/改善するためにスキャンラインを2倍にするMiSTerフレームワークの拡張です。現在VGA出力では正しく動作しませんがHDMIでは動作するはずです。選択肢は:「なし」、「HQ2x」、「CRT 25%」、「CRT 50%」、「CRT 75%」
注:アスペクト比とスキャンダブラーはVGAスケーリングハードウェアの追加により現在無効化されています。近い将来HDMIが設計に組み込まれると再有効化されます。
デバッグ
デバッグはコンパイル時オプションになりました。RTLとMiSTer Mainバイナリでデバッグロジックが有効化されている場合、以下のデバッグオプションが利用可能です。
FPGAでは、すべての信号が内部にあり、貴重なIOピンに引き出さない限りオシロスコープなどで簡単に評価できません。Alteraにはデザインにロジックを追加してリアルタイムでPCに信号状態を読み込むSignal Tapアナライザーがあります。これには適切なタップポイント、トリガー、エッジの設定、コンパイルが必要で、考慮すべき点と十分なメモリ/空きロジックが必要です。それでも、リアルタイムで信号を見てオシロスコープで確認する魔法のような体験があり、エミュレーションに影響を与えることなくいつでも使用できるデバッグモードを追加しました(デバッグ周波数を選択した場合はエミュレーションがその周波数で動作します)。
基本的に、DE10メインボードの8つのLEDが選択可能な信号セットを表示できます(自動モード:一定期間後にセットを移動、または静的セット)。LEDに表示される信号のサンプルレートはZ80 CPU周波数から1Hzまで選択可能です。LEDにオシロスコープを接続することで、単純な点滅では不十分な場合に波形を見ることもできます。さらに、CPU周波数を1MHzから1/10Hzまでの段階で落として内部の動作を確認できます。このデバッグ追加はコンピューターの内部を理解してZ80の動作を見る優れた方法でもあります。
デバッグモードを使用するには、F12を押してMiSTerメニューに入り、Debugを選択すると以下の選択肢が表示されます:
-
メモリバンクの選択
ローカル(DE10 SDカード)ファイルに書き込むメモリバンクを1つ選択できます。
SysROM = システムROM。すべてのエミュレーション用モニターROMの完全な連結セット。 SysRAM = システムRAM。64KメインRAM。 KeyMap = キーマッピングROM。すべてのエミュレーション用キーマッピングの完全な連結セット。 VRAM = ビデオRAM。2Kビデオと2Kアトリビュートを連結したRAM。 CMTHDR = カセットヘッダー。最後にロードまたは保存したテープヘッダーを保持する128バイトメモリ。 CMTDATA = カセットデータ。最後にロードまたは保存したテープデータを保持する64Kメモリ。 CGROM = キャラクタージェネレーターROM。すべてのエミュレーション用CGROMの完全な連結セット。 CGRAM = キャラクタージェネレーターRAM。プログラマブルキャラクタージェネレーターRAMの2Kコンテンツ。 All = 1つのファイルとしての完全なメモリセット。 -
<メモリバンク名>へダンプ
選択したメモリバンクをダンプします。ダンプに使用されたファイル名が表示されます。
-
デバッグモード
有効または無効を選択
-
CPU周波数
CPU周波数を選択(以下のいずれか):
CPU/CMT 1MHz 100KHz 10KHz 5KHz 1KHz 500Hz 100Hz 50Hz 10Hz 5Hz 2Hz 1Hz 0.5Hz 0.2Hz 0.1Hz -
デバッグLEDS
有効または無効を選択
-
サンプル周波数
表示信号のサンプリング周波数(以下のいずれか):
CPU/CMT 1MHz 100KHz 10KHz 5KHz 1KHz 500Hz 100Hz 50Hz 10Hz 5Hz 2Hz 1Hz 0.5Hz 0.2Hz 0.1Hz -
シグナルブロック
表示する信号ブロック(以下のいずれか):
T80 = CPUアドレス/データバスと関連信号。 I/O = ビデオ、キーボード、セレクト信号。 IOCTL = 外部I/O制御。アドレス/データとセレクト信号。 Config = レジスター設定信号。 MZ80C I = MZ80K/C/1200/A/700/800に関連する5セットの信号。 MZ80C II = 追加の5セットの信号。 MZ80B I = MZ80B/MZ2000に関連する5セットの信号。 MZ80B II = 追加の5セットの信号。 -
バンク
LEDに表示されるブロック内のバンク(以下のいずれか):
T80 = 自動 A7-0 A15-8 DI シグナル I/O = 自動 ビデオ PS2Key シグナル IOCTL = 自動 A23-16 A15-8 A7-0m シグナル Config = 自動 Config 1 Config 2 Config 3 Config 4 Config 5 MZ80C I = 自動 CS 1 CS 2 CS 3 INT/RE Clk MZ80C II = 自動 CMT 1 CMT 2 CMT 3 MZ80B I = 未定義。 MZ80B II = 未定義。
システム
コアの選択、キーマッピング、Bluetoothの設定、IPアドレスの確認などができるMiSTerメインコントロールメニューです。
コントロールオプション
メニューシステムには以下の追加コントロールオプションがあります:
| オプション | 説明 |
|---|---|
| ブートリセット | MZ80B/MZ2000モードで動作中のエミュレーターにIPLリセットを実行します(IPLを表示してイニシャルプログラムをロードするために押すブートスイッチに相当)。 |
| リセット | エミュレーションをリセットします(リセットラインをトグル)。 |
| 設定のリロード | 以前に保存した設定をリロードします。このメニューで行った変更は保存して将来使用できますが、追加の変更が不要な場合はこのオプションで最後の良好な設定をリロードします。 |
| 設定の保存 | SDカードに設定を保存します。メニューシステムで行った変更が保存されます。 |
| 設定のリセット | 設定を標準のデフォルトにリセットします。 |
グラフィックスフレームバッファー
元の設計への追加として640x200/320x200 8色グラフィックスフレームバッファーがあります。Sharp MZシリーズにはグラフィックス表示のための多くの追加が行われており(例:MZ80Bには標準のモノクログラフィックスが付属)、これらのサードパーティーアップグレードの詳細情報をまだ持っていないため、標準のSharp MZシリーズビデオおよびグラフィックスロジックと互換性のある独自の拡張を設計しました。将来的には外部ベンダーのアドオンとの互換性を追加するためのハードウェア抽象化レイヤーを追加する意図があります。
このフレームバッファーは3×16K RAMブロック(1色あたり1ブロック)で構成されており、解像度640x200は出力表示バッファーとビット単位で一致します。40x25文字で動作している場合の解像度は320x200で、80x25の場合は640x200です。
グラフィックスフレームバッファーのRAMはプログラマブルレジスターによりメインCPUアドレス範囲C000H〜FFFFHに1バンクずつ(赤、緑、青のバンク)切り替えることができます。これにより直接CPUアドレス可能なピクセルの読み書きができます。各ピクセルは8個のグループ(RAM内の1バイト)で保存され、バイトごとに右から左へスキャン、行ごとに左から右へ、上から下へスキャンします。例:赤バンクがCPUアドレス空間にマップされている場合、C000HのバイトはY = 0のピクセル0での320/640(X)のピクセル7〜0を表します。C000Hに01Hを書き込むとピクセル7(X)行0(Y)が設定されます。これは緑と青のバンクについても同様です。
表示を高速化するためにカラーライトレジスターがあり、グラフィックスRAMへの書き込みが3つのバンクすべてを同時に更新できます。
プログラマブルレジスターの詳細は以下の通りです。
グラフィックスRAMバンクをZ80 CPUアドレス範囲に切り替え
グラフィックスバンクスイッチセットレジスター:I/Oアドレス:E8H(10進数232)
このアドレスの読み込みにより、16KbグラフィックスRAMページの1つ(3ページのうち)がC000〜FFFFに切り替わります。切り替えられるバンクは読み取り操作にはビット1/0で、書き込み操作にはビット3/2で制御レジスターに設定されます。このバンクスイッチはすべてのMZ80A/MZ700のページスイッチング機能を上書きします。
グラフィックスバンクスイッチリセットレジスター:I/Oアドレス:E9H(10進数233)
このアドレスの読み込みによりグラフィックスRAMが切り離され、以前のメモリ状態に戻ります。
制御レジスター(0xEA - 10進数234)
| ビット | 説明 |
|---|---|
| 1:0 | 読み込みモード(00=赤バンク、01=緑バンク、10=青バンク、11=未使用)。CPUアドレス空間で有効な場合に読み込まれるバンクを選択。 |
| 3:2 | 書き込みモード(00=赤バンク、01=緑バンク、10=青バンク、11=間接)。CPUアドレス空間で有効な場合に書き込まれるバンクを選択。 |
| 4 | VRAM出力。0=有効、1=無効。表示にキャラクターRAMを出力。 |
| 5 | GRAM出力。0=有効、1=無効。表示にグラフィックスRAMを出力。 |
| 7:6 | ブレンドオペレーター(00=OR、01=AND、10=NAND、11=XOR)。キャラクター表示とグラフィックス表示をブレンドするオペレーター。 |
カラーライターレジスター(0xEB - 10進数235 〜 0xED - 10進数237)
| ビット | ピクセル | I/Oアドレス | 色 | 説明 |
|---|---|---|---|---|
| 0 | 7 | 0xEBH | 赤 | 間接書き込み時に赤に設定。 |
| 1 | 6 | 0xEBH | 赤 | |
| 2 | 5 | 0xEBH | 赤 | |
| 3 | 4 | 0xEBH | 赤 | |
| 4 | 3 | 0xEBH | 赤 | |
| 5 | 2 | 0xEBH | 赤 | |
| 6 | 1 | 0xEBH | 赤 | |
| 7 | 0 | 0xEBH | 赤 | 間接書き込み時に赤に設定。 |
| 0 | 7 | 0xECH | 緑 | 間接書き込み時に緑に設定。 |
| 1 | 6 | 0xECH | 緑 | |
| 2 | 5 | 0xECH | 緑 | |
| 3 | 4 | 0xECH | 緑 | |
| 4 | 3 | 0xECH | 緑 | |
| 5 | 2 | 0xECH | 緑 | |
| 6 | 1 | 0xECH | 緑 | |
| 7 | 0 | 0xECH | 緑 | 間接書き込み時に緑に設定。 |
| 0 | 7 | 0xEDH | 青 | 間接書き込み時に青に設定。 |
| 1 | 6 | 0xEDH | 青 | |
| 2 | 5 | 0xEDH | 青 | |
| 3 | 4 | 0xEDH | 青 | |
| 4 | 3 | 0xEDH | 青 | |
| 5 | 2 | 0xEDH | 青 | |
| 6 | 1 | 0xEDH | 青 | |
| 7 | 0 | 0xEDH | 青 | 間接書き込み時に青に設定。 |
間接モード(制御レジスタービット3/2が11に設定)では、CPUアドレス空間C000H〜FFFFHにマップされたグラフィックスRAMへの書き込みが赤カラーライターレジスターでマスクされたバイトを赤バンクに書き込み、緑と青についても同様の操作が行われます。これにより3つのバンクにわたるカラーの高速設定が可能です。
ステータスフレームバッファー
エミュレーターへのI/Oプロセッサーの組み込みを意図した変更の一環として、通常の画面レンダリング外の垂直ラインを占有する追加フレームバッファーを追加しました。640x480 VGAディスプレイの場合、通常の表示外で見える80行があります(80x25文字表示 = 80x8水平 = 640ピクセル、25×8×2垂直 = 400ピクセルで80行空き)。上に40行、下に40行です。800x600 SVGAモードでは上下それぞれ100行に増えます。ステータスフレームバッファーはグラフィックスモードに応じてサイズが変わるMiSTerスタイルのメニューを持つビデオRAMブロックをメイン表示にも重ね合わせます(プログラマブルOR、XOR、AND & NANDビットブレンディング)。メニューは水平256ピクセル×垂直128ピクセルです。
このステータスフレームバッファーの目的は、オンボードIOプロセッサーが基礎となるエミュレーターに影響を与えることなく独自のメニューシステムを重ね合わせ、Record、Play、QuickDisk、フロッピーアクティビティランプやステータスなどの有用な情報を表示できるようにすることです。これによりエミュレーターを完全にスタンドアロンにし、MiSTer Mainバイナリの要件を削減して様々なFPGA開発ボードで動作する能力を高めます。
ステータスフレームバッファー制御はエミュレーターのドメイン外に存在し、MiSTer設計で使用されるIOCTLメカニズムを通じてのみアクセスできます。これによりIOプロセッサーへの適応が容易になります。
ステータスフレームバッファーのアドレス:
| RAM | アドレス | 説明 |
|---|---|---|
| ステータス | 0x320000 | エミュレーター出力の上下の画面エリアのピクセルを保持するRAM。80桁モード = 640x200で、VGAタイミングで動作している場合、このRAMは上部40行と下部40行のピクセルを保持し、各行640ピクセルです。 |
| メニュー | 0x322000 | 256x128ピクセルの重ね合わせメニューのピクセルを保持するRAM。 |
| コントロール | 0x324000 | すべてのタイミング値を見つけるためのビデオパラメーターアレイを読み込みます。32×32アレイで、ビット4:0がパラメーターを選択し、ビット9:5がモードエントリーを選択します。以下のパラメーターテーブル例を参照してください。 |
| モード | 0x324400 | 現在のライブビデオモードを読み込みます。 |
ステータスRAMとメニューRAMの両方について、メモリ幅は8ピクセル8色で24ビット幅です。
| ビット | 色 | 情報 |
|---|---|---|
| 7:0 | 緑 | ビット7が左端の可視ピクセルです。 |
| 15:8 | 赤 | ビット15が左端の可視ピクセルです。 |
| 23:15 | 青 | ビット23が左端の可視ピクセルです。 |
| 最低メモリアドレスが最初のピクセルブロックです(0x320000ビット7+ビット15+ビット23 = 最初のステータスピクセル)。 |
ビデオパラメーターのテーブル例。実際のライブ値はIOプロセッサー(またはIOプロセッサーが組み込まれていない場合はMiSTer Main)がコントロールから読み込めます:
| モード | 説明 | H_DSP_START | H_DSP_END | H_DSP_WND_START | H_DSP_WND_END | H_MNU_START | H_MNU_END | H_HDR_START | H_HDR_END | H_FTR_START | H_FTR_END | V_DSP_START | V_DSP_END | V_DSP_WND_START | V_DSP_WND_END | V_MNU_START | V_MNU_END | V_HDR_START | V_HDR_END | V_FTR_START | V_FTR_END | H_LINE_END | V_LINE_END | MAX_COLUMNS | H_SYNC_START | H_SYNC_END | V_SYNC_START | V_SYNC_END | H_PX | V_PX |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | MZ80B/2000は40桁モードで320x200の可視エリアを持つ512x260スキャンのモノクロ60Hz表示。 | 0 | 320 | 0 | 320 | 32 | 288 | 0 | 0 | 0 | 0 | 0 | 200 | 0 | 200 | 36 | 164 | 0 | 0 | 0 | 0 | 511 | 259 | 40 | 320 + 73 | 320 + 73 + 45 | 200 + 19 | 200 + 19 + 4 | 0 | 0) |
| 1 | MZ80B/2000は80桁モードで640x200の可視エリアを持つ1024x260スキャンのモノクロ60Hz表示。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 0 | 0 | 0 | 0 | 200 | 0 | 200 | 36 | 164 | 0 | 0 | 0 | 0 | 1023 | 259 | 80 | 640 + 146 | 640 + 146 + 90 | 200 + 19 | 200 + 19 + 4 | 0 | 0) |
| 2 | MZ80K/C/1200/Aは320x200の可視エリアを持つ512x260スキャンのモノクロ60Hz表示。 | 0 | 320 | 0 | 320 | 32 | 288 | 0 | 0 | 0 | 0 | 0 | 200 | 0 | 200 | 36 | 164 | 0 | 0 | 0 | 0 | 511 | 259 | 40 | 320 + 73 | 320 + 73 + 45 | 200 + 19 | 200 + 19 + 4 | 0 | 0) |
| 3 | MZ80K/C/1200/Aは適応型モノクロ60Hz表示で640x200の可視エリアを持つ1024x260スキャン。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 0 | 0 | 0 | 0 | 200 | 0 | 200 | 36 | 164 | 0 | 0 | 0 | 0 | 1023 | 259 | 80 | 640 + 146 | 640 + 146 + 90 | 200 + 19 | 200 + 19 + 4 | 0 | 0) |
| 4 | MZ700は320x200の可視エリアを持つ568x320スキャンのカラー50Hz表示。 | 0 | 320 | 0 | 320 | 32 | 288 | 0 | 0 | 0 | 0 | 0 | 200 | 0 | 200 | 36 | 164 | 0 | 0 | 0 | 0 | 567 | 311 | 40 | 320 + 80 | 320 + 80 + 40 | 200 + 45 | 200 + 45 + 3 | 0 | 0) |
| 5 | MZ700は640x200の可視エリアを持つ1136x320スキャンのカラー50Hz表示。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 0 | 0 | 0 | 0 | 200 | 0 | 200 | 36 | 164 | 0 | 0 | 0 | 0 | 1134 | 311 | 80 | 640 + 160 | 640 + 160 + 80 | 200 + 45 | 200 + 45 + 3 | 0 | 0) |
| 6 | MZ80K/C/1200/AはMZ700スタイルカラー@60Hzで320x200の可視エリアを持つ512x260スキャン。 | 0 | 320 | 0 | 320 | 32 | 288 | 0 | 0 | 0 | 0 | 0 | 200 | 0 | 200 | 36 | 164 | 0 | 0 | 0 | 0 | 511 | 259 | 40 | 320 + 73 | 320 + 73 + 45 | 200 + 19 | 200 + 19 + 4 | 0 | 0) |
| 7 | MZ80K/C/1200/AはMZ700スタイルカラー@60Hzで640x200の可視エリアを持つ1024x260スキャン。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 0 | 0 | 0 | 0 | 200 | 0 | 200 | 36 | 164 | 0 | 0 | 0 | 0 | 1023 | 259 | 80 | 640 + 146 | 640 + 146 + 90 | 200 + 19 | 200 + 19 + 4 | 0 | 0) |
| 8 | 40桁モードモノクロ用 640x480 @ 60Hz タイミング。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 640 | 0 | 640 | 0 | 480 | 39 | 439 | 111 | 367 | 8 | 24 | 444 | 479 | 831 | 519 | 40 | 640 + 16 | 640 + 16 + 96 | 480 + 10 | 480 + 10 + 2 | 1 | 1) |
| 9 | 40桁モードモノクロ用 640x480 @ 60Hz タイミング。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 640 | 0 | 640 | 0 | 480 | 39 | 439 | 111 | 367 | 8 | 24 | 444 | 479 | 799 | 524 | 40 | 640 + 16 | 640 + 16 + 96 | 480 + 10 | 480 + 10 + 2 | 1 | 1) |
| 10 | 80桁モードモノクロ用 640x480 @ 60Hz タイミング。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 640 | 0 | 640 | 0 | 480 | 39 | 439 | 111 | 367 | 8 | 24 | 444 | 479 | 831 | 508 | 80 | 640 + 16 | 640 + 16 + 96 | 480 + 10 | 480 + 10 + 2 | 0 | 1) |
| 11 | 80桁モードモノクロ用 640x480 @ 60Hz タイミング。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 640 | 0 | 640 | 0 | 480 | 39 | 439 | 111 | 367 | 8 | 24 | 444 | 479 | 799 | 524 | 80 | 640 + 16 | 640 + 16 + 96 | 480 + 10 | 480 + 10 + 2 | 0 | 1) |
| 12 | 80桁モードカラー用 640x480 @ 60Hz タイミング。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 640 | 0 | 640 | 0 | 480 | 39 | 439 | 111 | 367 | 8 | 24 | 444 | 479 | 831 | 508 | 40 | 640 + 16 | 640 + 16 + 96 | 480 + 10 | 480 + 10 + 2 | 1 | 1) |
| 13 | 40桁モードカラー用 640x480 @ 60Hz タイミング。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 640 | 0 | 640 | 0 | 480 | 39 | 439 | 111 | 367 | 8 | 24 | 444 | 479 | 799 | 524 | 40 | 640 + 16 | 640 + 16 + 96 | 480 + 10 | 480 + 10 + 2 | 1 | 1) |
| 14 | 80桁モードカラー用 640x480 @ 60Hz タイミング。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 640 | 0 | 640 | 0 | 480 | 39 | 439 | 111 | 367 | 8 | 24 | 444 | 479 | 831 | 508 | 80 | 640 + 16 | 640 + 16 + 96 | 480 + 10 | 480 + 10 + 2 | 0 | 1) |
| 15 | 80桁モードカラー用 640x480 @ 60Hz タイミング。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 640 | 0 | 640 | 0 | 480 | 39 | 439 | 111 | 367 | 8 | 24 | 444 | 479 | 799 | 524 | 80 | 640 + 16 | 640 + 16 + 96 | 480 + 10 | 480 + 10 + 2 | 0 | 1) |
| 16 | 40桁モードモノクロ用 640x480 @ 72Hz タイミング。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 640 | 0 | 640 | 0 | 480 | 39 | 439 | 111 | 367 | 8 | 24 | 444 | 479 | 831 | 519 | 40 | 640 + 24 | 640 + 24 + 40 | 480 + 9 | 480 + 9 + 2 | 1 | 1) |
| 17 | 80桁モードモノクロ用 640x480 @ 72Hz タイミング。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 640 | 0 | 640 | 0 | 480 | 39 | 439 | 111 | 367 | 8 | 24 | 444 | 479 | 831 | 519 | 80 | 640 + 24 | 640 + 24 + 40 | 480 + 9 | 480 + 9 + 2 | 0 | 1) |
| 18 | 40桁モードカラー用 640x480 @ 72Hz タイミング。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 640 | 0 | 640 | 0 | 480 | 39 | 439 | 111 | 367 | 8 | 24 | 444 | 479 | 831 | 519 | 40 | 640 + 24 | 640 + 24 + 40 | 480 + 9 | 480 + 9 + 2 | 1 | 1) |
| 19 | 80桁モードカラー用 640x480 @ 72Hz タイミング。 | 0 | 640 | 0 | 640 | 192 | 448 | 0 | 640 | 0 | 640 | 0 | 480 | 39 | 439 | 111 | 367 | 8 | 24 | 444 | 479 | 831 | 519 | 80 | 640 + 24 | 640 + 24 + 40 | 480 + 9 | 480 + 9 + 2 | 0 | 1 |
v1.0 vs v2.0 — 主な違い
プラットフォームの違い
| 項目 | v1.0 — MiSTer (DE10-Nano) | v2.0 — tranZPUter SW-700 |
|---|---|---|
| FPGA | Intel Cyclone V SE (DE10-Nano) | Intel Cyclone V (tranZPUter SW-700ボード) |
| ホスト | スタンドアロン — Sharp MZハードウェア不要 | 物理的なMZ-700またはMZ-2000にZ80 CPUソケット経由で接続 |
| I/Oプロセッサー | ARM Cortex-A9 HPS (Linux) — DE10-Nano SoCの一部 | ARM Cortex-M4 (tranZPUterボード上のK64F)、ZPU Evolutionへの置き換えを計画中 |
| ビデオ出力 | FPGA I/OピンからのVGA、MiSTerアドオンボード経由のHDMI | ホストMZ-700/2000のCRTに直接接続、またはVideo Module経由の外部VGA |
| キーボード | MiSTer I/Oボード経由のPS/2キーボード | 物理的なSharp MZキーボード(直接配線)またはSharpKeyインターフェース経由のPS/2 |
| オーディオ | MiSTer I/Oボード上のオーディオDAC | 物理的なSharp MZスピーカーおよび/またはオーディオ出力ジャック |
| カセット | エミュレートのみ — MiSTer SDカードからのMZFファイル | 物理CMTテープドライブまたはSDカードからのMZFファイルによるFPGAエミュレートドライブを選択可能 |
| ストレージ | MiSTer SDカード(Linuxファイルシステム) | tranZPUter上のSDカード(FAT32) |
| メニューシステム | MiSTer F12 OSD(HPS ARM Linuxバイナリでレンダリング) | 内蔵OSD(tranZPUter上のARM Cortex-M4またはZPUでレンダリング)、TZFS mzコマンドで呼び出し |
アーキテクチャの違い
I/Oプロセッサーの独立性 — v1.0はOSDメニュー、SDカードファイルI/O、設定にMiSTer HPS(Linuxを実行するARM Cortex-A9)に依存しています。MiSTer Mainバイナリがすべてのユーザーインタラクションを処理し、エミュレーションをMiSTerエコシステムに結びつけています。v2.0はI/Oプロセッサー(最初はK64F ARM Cortex-M4、後にZPU Evolutionソフトコア)をFPGA設計自体に組み込みます。OSD、ファイルブラウザー、テープキューイング、設定はすべて、この組み込みプロセッサー上で実行されるファームウェアによって処理され、エミュレーションを完全に自己完結型にし、HPSが利用できない任意のFPGAプラットフォームに移植可能にします。
ホストハードウェア統合 — v2.0で最も重要な違いは、ホストマシンの実際のハードウェアを使用できる点です。エミュレーションがtranZPUter SW-700を介してMZ-700上で動作する場合、ユーザーは物理CMTテープドライブ(実際のカセットへの読み書き)またはFPGAエミュレートドライブ(SDカードからのMZFファイルの読み込み)を選択できます。物理キーボードは直接使用されます。ホストマシンのメモリ、ROM、I/Oポートは、tranZPUterのバスアービトレーションロジックによって制御され、エミュレートされたリソースと並んでアクセス可能なまま維持されます。
Video Moduleの拡張 — v2.0はtranZPUterプロジェクト用に開発された改良版Video Module設計を組み込んでいます。これによりマシンモデルごとのより正確なビデオタイミング、パレットベースのカラー(8ビットカラー用のv2.0プログラマブルパレットレジスターを含む)、およびZPUで駆動される場合の32ビットインターフェースが提供されます。v1.0のビデオコントローラーはよりシンプルで、スケーリング付きVGA出力をターゲットとし、パレット拡張を持ちません。
エミュレーション精度 — tranZPUterプロジェクト中の物理Sharp MZマシンでの作業により、v1.0エミュレーションのタイミング不正確さが明らかになりました。v2.0は実際のハードウェアからの測定に基づく修正を組み込んでおり、特にMZ-80BおよびMZ-2000モデルのビデオタイミング、メモリウェイトステート、I/Oポートの動作に反映されています。
機能比較
| 機能 | v1.0 | v2.0 |
|---|---|---|
| MZ-80K/C/1200/Aエミュレーション | 対応 | 対応 |
| MZ-700エミュレーション | 対応 | 対応 |
| MZ-80Bエミュレーション | 対応 | 対応(精度向上) |
| MZ-2000エミュレーション | 一部 | 対応(精度向上) |
| MZ-800エミュレーション | 開発中 | 開発中 |
| 物理テープドライブ | 非対応 | 対応 — 実CMTまたはエミュレート、選択可能 |
| 物理キーボード | 非対応(PS/2のみ) | 対応 — ネイティブSharp MZキーボード |
| ターボモード(最大32倍) | 対応 | 対応 |
| PCG(プログラマブルキャラクタージェネレーター) | 対応 | 対応 |
| 8色グラフィックス(320x200 / 640x200) | 対応 | 対応 |
| プログラマブルカラーパレット | 非対応 | 対応(Video Module v2.0) |
| カスタムROMアップロード | 対応 | 対応 |
| APSSテープドライブ(MZ-80B/2000) | 対応 | 対応 |
| OSDメニューシステム | MiSTer F12メニュー | 内蔵OSD(ファイルブラウザー付き) |
| I/Oプロセッサー | HPS(FPGA外部) | 組み込み(K64F / ZPU、設計内) |
| HDMI出力 | MiSTerアドオンボード経由 | 該当なし(CRTまたはVGA) |
| フロッピーディスク | 開発中 | 開発中 |
| クイックディスク | 開発中 | 開発中 |
| スタンドアロン動作 | MiSTerフレームワーク必要 | tranZPUter SW-700上で自己完結 |
| ホストプラットフォーム | DE10-Nanoのみ | tranZPUter SW-700(MZ-700/2000内)、将来的にDE10-Nano復帰を計画 |
移行ロードマップ
リンク
Sharp MZシリーズコンピューターはCommodore、Atari、Sinclairほど広まりませんでしたが、熱心なファンがいました。オープンな設計のためBASICインタープリターなどのアプリケーションを改造・拡張することが容易で、同様にハードウェア拡張も簡単でした。そのため、ウェブを調べると非常に充実したユーザーグループと貴重なリソースが見つかります。マニュアル、プログラム、情報が必要な場合は(まず)以下のサイトをご覧ください:
| サイト | 説明 |
|---|---|
| Engineers At Work | 私個人のプロジェクトサイト。 |
| SharpMZ.org | オリジナルのSharpMZサイト、優れたリソースですが現在はオーナーが引退しています。 |
| SharpMZ.no | オリジナルSharpMZサイトの後継として開発中のサイト。 |
| mz-80a.com | MZ-80Aセクターによる Sharp MZ-80Aガイド |
| Sharp Users Club | まだ活動中のSharp Users Club。 |
| SharpMZ Forum | 全モデル対応のアクティブなSharp MZフォーラム。 |
| SCAV | Sharp情報とダウンロードのチェコサイト、Chromeでチェコ語の自動翻訳を使用 |
クレジット
元々はNibbles Labが書いたMZ80CエミュレーターhttPS://github.com/NibblesLab/mz80c_de0をTerasic DE10 Nanoに移植する意図でした。分析してNIOSIIの依存関係を取り除こうとした後、MISTerプロジェクトを発見し、独自のエミュレーションを書くことにしました。そのためこのコードのいくつかのアイデアはNibbles Labに起源があり、i8253/Keymatrixモジュールはこの実装で動作するよう適応されました。Nibbles Labの優れた作業への適切なクレジットを。またMiSTerフレームワークの作成と優れたハードウェアアドオンの設計でのSorgeligの努力に感謝します。MiSTerフレームワークはエミュレーションの設計/移植をかなり容易にします。サードパーティーの設計に基づいたコンポーネントを使用した場合は、ヘッダー内に元の著者の著作権表示を含めるか、適切なクレジットを付与しています。私の知る限り、すべてのサードパーティーソフトウェアはオープンソースであり自由に使用可能です。ライセンスに制限があるコンポーネントが見つかった場合は、このリポジトリから削除し、適切なリンクまたは設定を提供します。
ライセンス
このデザイン(ハードウェアおよびソフトウェア)はGNU Public Licence v3のもとでライセンスされています。
GNU Public License v3
ソースファイルは有用であることを願って配布されていますが、いかなる保証もありません。商品性や特定目的への適合性の黙示的な保証も含みません。詳細についてはGNU一般公衆ライセンスをご参照ください。
このプログラムとともにGNU一般公衆ライセンスのコピーを受け取っているはずです。受け取っていない場合はhttp://www.gnu.org/licenses/をご覧ください。