Sharp MZシリーズ FPGAエミュレータ v1.0

概観

Sharp MZシリーズFPGAエミュレーションのバージョン1.0は、Sharp MZコンピューターファミリーの完全なハードウェアレベルの再現であり、VHDLで実装され、MiSTer FPGAプラットフォーム(Terasic DE10-Nanoボード)上でホストされています。命令を解釈するソフトウェアエミュレーターとは異なり、この設計はCyclone V SE FPGA内部に各Sharp MZモデルの実際のデジタルロジックを合成します — Z80 CPU、ビデオコントローラー、メモリマップ、キーボードスキャナー、カセットインターフェース、オーディオ、およびI/O周辺機器のすべてがリアルタイムで動作する並行ハードウェアとして存在します。

このプロジェクトは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プロセッサーがステータス情報表示に使用するステータスフレームバッファーを完成させる必要があります — 使用上は重要ではありません。

設計概要

この設計のコンセプトは、エミュレーションをできる限りHPSから独立させることです(スタンドアロンで動作するように)。HPSには制御レジスターの設定、完全なイメージによるテープ/フロッピーキャッシュRAMの読み書き、メニュー制御システムのオーバーレイのみが必要です。MiSTer/HPSシステムはエミュレーションをホストするための優れた基盤ですが、Xilinx Zynq 7000など別のターゲットにこのエミュレーターを移植したい方もいるかもしれません(私も試しています)。理論上、このエミュレーターを別のプラットフォームに移植して、PC(パラレルポート)、HPS、または別のCPUをメニュー制御システムとして使用したい場合にポーティングが容易になります。 Terasic DE10のCyclone V SEには5.5Mbitsのメモリがあるため、エミュレーションで使用するRAMのほとんどはFPGA上にあります。フロッピーディスクコントローラーはCMTユニットのようにフロッピーディスク全体をキャッシュするか、セカンダリSDカードを使用するかの決定により、HPSメモリ/外部SDRAMを使用する可能性があります。

FPGAアーキテクチャ

エミュレーションは完全にVHDLで記述されており、Terasic DE10-NanoボードのIntel(Altera)Cyclone V SE FPGAをターゲットとしています。設計はSharp MZコンピューターの実際のハードウェアサブシステムを反映するモジュラーコンポーネントのセットとして構成されています。各コンポーネントは並行ロジックとして動作します — 命令の逐次的なソフトウェア解釈は行いません。

コアコンポーネント

トップレベルエンティティ(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.vhdfd55b.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バスコントローラー(テープおよびフロッピーイメージストレージ)。

メモリアーキテクチャ

Cyclone V SEは5.5 Mbitsの組み込みブロックRAMを提供しており、設計はこれを活用して、決定論的な単一サイクルアクセスのためにほぼすべてのエミュレートされたメモリをオンチップに保持します。メモリレイアウトは以下の通りです:
メモリ サイズ 用途
メイン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統合

DE10-NanoにはFPGAファブリックと並んでデュアルコアARM Cortex-A9ハードプロセッサーシステム(HPS)が搭載されています。MiSTerアーキテクチャでは、HPSは以下を提供するLinuxシステムを実行します:
  • OSDメニューシステム — マシン選択、テープ/フロッピー操作、表示設定、ROM管理、デバッグ用のF12オンスクリーンディスプレイ。メニュー状態はブリッジモジュールの制御レジスターを介してFPGAに通信。
  • SDカードアクセス — MZFテープイメージとDSKフロッピーイメージはMiSTer SDカードに保存。HPSがFATファイルシステムからファイルを読み取り、ブリッジを介して完全なイメージをFPGAのCMTキャッシュRAMに転送。
  • 制御レジスター — マシンモデル選択、CPU速度、表示モード、オーディオ設定、デバッグ設定はすべて、HPSがブリッジモジュールのメモリマップされたレジスターに書き込むことで設定。
  • ROMアップロード — カスタムモニターROM、キャラクタージェネレーターROM、キーマッピングテーブル、ユーザーROM、フロッピーディスクROMは、起動時にブリッジを介してSDカードファイルからアップロード可能。
重要なことに、エミュレーション自体はFPGA内で自己完結しています — HPSは設定とファイルI/Oサービスのみを提供します。T80 CPU、ビデオ、オーディオ、キーボード、テープロジックはすべて、一度設定されればARMプロセッサーとは独立して動作します。この分離は、HPSが利用できない他のFPGAプラットフォームへの移植を容易にするための意図的な設計上の決定でした。

インストール

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 — 主な違い

バージョン2.0は、v1.0のSharp MZシリーズFPGAエミュレーションをスタンドアロンのMiSTer DE10-NanoプラットフォームからtranZPUter SW-700拡張カードに移植したものです。このカードは物理的なSharp MZ-700またはMZ-2000ホストマシンに直接接続されます。これによりエミュレーターと実際のハードウェアの関係が根本的に変わります — 合成された周辺機器を備えた自己完結型FPGAボードではなく、v2.0エミュレーターは実際のSharp MZコンピューター内部で動作し、FPGAエミュレートされた同等物と並んで物理的なキーボード、カセットドライブ、サウンドハードウェア、ディスプレイを使用できます。

プラットフォームの違い

項目 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コマンドで呼び出し

アーキテクチャの違い

モジュール化 — v2.0はVHDLをより細かいモジュールに再構成し、物理リソースとエミュレートされたリソースを混在させることができます。例えば、ビデオコントローラーはネイティブ表示モード用にホストマシンのCRTを駆動しながら、同時にVideo Moduleを通じて拡張モード(80カラム、カラー、グラフィックス)を提供できます。v1.0ではすべての周辺機器が常にエミュレートされます。

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復帰を計画

移行ロードマップ

長期計画はv2.0の改良をMiSTerプラットフォームに還元することです。ZPU Evolution I/OプロセッサーがtranZPUter設計のK64Fを置き換えると、同じVHDL — 組み込みI/Oプロセッサー、OSD、すべての周辺機器を含む — をMiSTer HPSのARMバイナリのメニューサポートなしにDE10-Nano用に合成できます。これによりSharp MZシリーズコアはMiSTer上で完全に自己完結し、MiSTerフレームワークの変更を追跡するメンテナンス負担を大幅に削減します。追加のマシンエミュレーション(MZ-1500、MZ-2200、MZ-2500)が両プラットフォーム向けに計画されています。

リンク

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

このプロジェクトでGPL v3とマークされたソースファイルおよびバイナリファイルはフリーソフトウェアです。フリーソフトウェア財団が発行するGNU一般公衆ライセンスのバージョン3、またはそれ以降のバージョンの条件のもとで、再配布および改変することができます。

ソースファイルは有用であることを願って配布されていますが、いかなる保証もありません。商品性や特定目的への適合性の黙示的な保証も含みません。詳細についてはGNU一般公衆ライセンスをご参照ください。

このプログラムとともにGNU一般公衆ライセンスのコピーを受け取っているはずです。受け取っていない場合はhttp://www.gnu.org/licenses/をご覧ください。