tranZPUterFusionX

概要

tranZPUterFusionX は tranZPUter シリーズから派生したコンセプトです。目的は同じで、Sharp やその類似システムの物理的な Z80 を置換し、より高速な CPU、追加メモリ、仮想デバイス、SD カードからの高速アプリケーションロード、そして娘ボードを通じてより優れたグラフィックスとサウンドを提供します。
FusionX ボードは、ホスト上でのテスト、開発、そして全く異なるソフトウェアプラットフォームとアプリケーションを提供するための代替 CPU の電源供給にも使用できます。ホストの基盤となるキーボード、モニター、I/O を使用でき、さらに FusionX が提供する優れたグラフィックスとサウンドも利用できます。
tranZPUterFusion との共通点がありますが、FPGA を介したハードウェアで実現するのではなく、ソフトウェアとしてアプリケーションで実現します。これは SOM(System On a Module)によって可能であり、FPGA デバイスよりはるかに大きくないにも関わらず、デュアルコア 1.2GHz Cortex-A7 ARM CPU、128MB RAM、256MB FlashRAM、WiFi、HD ビデオ、SD カード、USB ポートを内蔵し、Linux オペレーティングシステムを実行します。
tranZPUterFusion と同じベース設計を使用し、Z80 ホストを SOM に接続してサイクル精度の Z80 タイミングを提供する CPLD を組み込んでいます。SOM は 72MHz SPI チャンネルと 8 ビットバスを介して CPLD にインターフェースし、信号状態を照会して Z80 トランザクションを開始します。
Z80 設定では、Linux カーネルドライバーが Z80 エミュレーションをインスタンス化し、ソフトウェアで Z80 CPU を実現して、ホストシステムを制御・指揮できます。カーネルドライバーと制御アプリケーションは、このメカニズムを通じてホストに豊富な機能を提供できます。SOM は SD ドライブと USB 2.0 ポートにも接続されているため、提供できる機能に制限はありません。
tranZPUterFusion と同様に、tranZPUterFusionX もホストに拡張ビデオとサウンドを提供できます。SOM にはデュアル DAC オーディオと設定可能な解像度の 2D GPU が組み込まれており、ソフトウェア制御でホストのビデオとオーディオ出力に切り替えられます。
FusionX ボードは、WiFi および USB/シリアルポート接続を持つ Linux プラットフォームを使用してレトロハードウェアを物理的にプログラム・操作したい開発者に最適です。
ほとんどのレトロユーザーにとって、FusionX 開発の初期段階ではあまり用途がないかもしれません。プロジェクトが成熟するにつれ、ボードを入手して Sharp や同様の Z80 ベースシステムの Z80 ソケット(このボードを収納できる十分なスペースがある場合)にインストールし、次のようなアップグレードされた機能を活用できます:
  • オリジナルホスト仕様
    - マシンは物理的な Z80 が内蔵されているかのように動作します。Z80 の機能にわずかな差異があるかもしれませんが、Z80 ハードウェアタイミングは正確です。
  • アクセラレーター
    - 豊富なメモリと 1.2GHz デュアルコアプロセッサのため、Z80 はより高速で動作でき、通常 500MHz Z80 に相当するパフォーマンスが期待できます。
  • エミュレーション
    - すべての Sharp MZ シリーズマシンのエミュレーションを、ホストシステムのキーボード、モニター、I/O を通じて体験できます。
  • グラフィックス
    - ホストに関係なく、HD までの追加解像度を含むすべてのオリジナル Sharp MZ グラフィックスモードが利用可能で、Basic などの言語でホスト上から選択・プログラムできます。
  • サウンド
    - ホストはステレオ DAC コンバーターにアクセスでき、48KHz CD 品質のサウンドを再生したり、SN76489 や Sharp シリーズの基本的なビット/タイマーサウンドをエミュレートしたりできます。マイク入力からのサウンド録音も可能です。
  • プロセッサ
    - このプラットフォームでは多くのソフトウェア CPU 実装が動作可能で、例えば BBC PiCoPro の ARM プラットフォーム CPU エミュレーションを容易にポートできます。これにより、SOM の高度なグラフィックスとサウンドを必要に応じて使用し、BBC などのマシンのエミュレーションをこの Sharp ホスト上で実行できる可能性があります。
  • Linux
    - ホストのキーボード、スピーカー、モニターなどを使用して、WiFi を含む完全な Linux をホストコンソールで利用できます。

ハードウェア

バージョン 1.0 は tranZPUterFusionX 設計の最初の公式リリースです。
FusionX ボードは、Altera 7000A MAX CPLD デバイスを使用した試行錯誤した Z80 ホストインターフェースを基盤にしています。CPLD は 5V の Z80 ホスト信号をより新しいデバイスの 3.3V 信号にインターフェースするだけでなく、50MHz クロックを使用して Z80 ホストクロックをサンプリングし、公開された Z80 ステートダイアグラムに従って信号をアクティブ化する正確な Z80 タイミングを実行するロジックも組み込んでいます。
さらに FusionX には SigmaStar System-On-a-Module が含まれています。これはデュアルコア Cortex-A7 CPU、128MB DRAM、256MB FlashNAND、WiFi トランシーバーを組み込んだ小型 29mm×29mm のスタンプデバイスです。SigmaStar SOM は選択可能な解像度で HD 形式までの RGB 888 形式で 2D グラフィックスを出力できます。また 48KHz でステレオオーディオ DAC 出力も可能です。SigmaStar の製品概要をクリックしてご覧ください。
tranZPUter SW-700 での経験を活かして、2R-R ラダーではなく SigmaStar SOM のビデオをレンダリングするために 30 ビットビデオ DAC が選択され、MZ-80A/MZ-2000 で見られるようなモノクロ CRT モニターのカラーシェーディングを対応するために 8 ビット DAC が追加されました。
ハードウェア設計はすべての主要回路を保持するメインサーキットボードと、各娘ボードが 1 つのホスト(MZ-700、MZ-80A、MZ-2000 など)専用のいくつかの娘ボードを中心としています。娘ボードはホストのビデオ/オーディオサブシステムを傍受し、ホストのビデオ/オーディオとメインボードのビデオ/オーディオをホストのモニター/スピーカーに切り替えることをサポートします。メインボードは娘ボードなしで使用でき、後者は SOM のビデオ/オーディオが必要な場合にのみ使用されます。
このセクションでは tranZPUterFusionX のメインボード回路図とサーキットボード設計の概要を説明します。

回路図

回路図 1 - Z80 ホストソケットから CPLD
この回路図は Z80 を CPLD にインターフェースします。CPLD は 5V 耐性で内部 3.3V で動作します。出力はロー電圧 TTL として選択されており、'1' はホストシステムの 5V に対して 3.3V で表現されます。5V TTL の仕様ではスイッチング閾値が約 2.4V であるため、CPLD は 5V 回路を駆動でき、ピンあたり 25mA の十分な駆動電流を持ちます。
CPLD 内部のステートマシンは外部 50MHz 発振器によってクロックされ、典型的な 1MHz ~ 6MHz の Z80 ホストのための適切なサンプリングと状態変化を可能にします。

FusionX Schematic2

回路図 2 - I/O(オーディオ、UART、USB)
SOM は豊富なペリフェラルを持ち、この回路は FusionX での使用のためにそのいくつかをインターフェースします:
  • ステレオオーディオマイク入力
    - デジタルマイク入力も利用可能ですが、ピンは CPLD インターフェースで使用されています。
  • ステレオオーディオ DAC 出力
    - 48KHz でクロック可能なサウンド出力用デュアルデジタルアナログコンバーター。
  • WiFi アンテナ
    - 2.4GHz 帯域で動作し 500M 範囲を持つ SSW101B 20/40MHz IEEE 802.11 b/g/n/e/l/n/w WiFi トランシーバー。SOM には 100MHz ETH PHY も含まれていますが、有線イーサネットはレトロマシン内部に設置されるボードには実用的でないため、この設計では使用されていません。
  • USB シリアル
    - Linux を実行する際、コンソールは UART シリアルデバイスに提示されます。このシリアルデバイスは使いやすくするために USB に変換されます。
  • USB
    - 追加ストレージ、マウスなどのデバイス拡張を可能にする Linux 接続 USB ポート。
  • 高速 UART
    - ハードウェアハンドシェイク付き高速全二重 UART。
  • UART
    - 最大 500KHz で動作する標準 2 ピン UART。
  • SD カード
    - SOM には内蔵 FlashNAND があるため簡単な Linux ファイルシステムを収容できます。SD カードの追加によりホストアプリケーションと Linux ユーティリティの大容量ストレージが可能になります。また SD カードはアップグレードを容易にします。SOM は起動時に適切に準備された SD カードが存在すると自動アップグレードします。

FusionX Schematic2

回路図 3 - ビデオ(VideoDAC、コントラスト DAC)
SOM はカラーあたり 8 ビットの TTL RGB を出力します。これは 30 ビット VideoDAC にインターフェースされ、カラーあたりの下位 2 ビットは CPLD によって制御されます。
さらに Sharp MZ-80A/MZ-80B/MZ-2000 の内部モノクロモニターを駆動するために、332 RGB カラー入力(SOM 888 TTL 出力の MSB)を使用して 4V ~ 5V 範囲のビデオ信号を出力する 8 ビット VideoDAC が追加されています。これをコントラスト DAC と呼んでいます。カラー情報を電圧制御されたコントラスト信号としてビデオ信号に送信し、モニター上でコントラストの差として表示されることでグレーレベルとしてカラーをシミュレートするためです。
真の黒を得るために、CPLD はブランキング信号 MONO.BLANK を生成し、モノクロモニターを駆動する娘ボードの MUX 0V クランプとペアになります。これにより 00000000 が存在するときは RGB332 が 0V と見なされ、ゼロ以外のときは 4.01V ~ 5V の間で変化します。

FusionX Schematic4

回路図 4 - 電源(3.3V、USB)
SOM と CPLD の電源は、Z80 ソケットの 5V を高効率バックコンバーターを使用して 3.3V に変換します。これは熱を最小限に抑え、SOM/CPLD に最大電流を提供するために必要です。
さらに、ソフトウェア制御の USB 電源スイッチが USB 拡張ポートへの +5V 電源を有効(および必要に応じてリセット)するために設置されています。

FusionX Schematic5

回路図 5 - CPLD インターフェース
最後の回路図は SOM と CPLD 間のインターフェースです。当初は Read/Write とストローブ信号を持つ双方向 16 ビットバスが想定されていましたが、テスト後、SOM 内の GPIO レジスタレイアウトと操作、および SOM 内の I/O 操作速度により、トライステート切り替えによる 16 ビット信号のセットアップ時間が SPI 接続より遅いことが判明しました。
使用される解決策は、Z80 トランザクションリクエストを送信するための SOM と CPLD 間の双方向 72MHz SPI バスと、より高速な Z80 データの読み取りと個別の Z80 状態情報のための 8 ビット読み取り専用パラレルバスを持つことです。

FusionX Schematic6

PCB

PCB はインストールされる様々なマシンの主要要件として最小サイズで設計されました。また tranZPUterFusion との互換性も必要でした。
主な懸念は放熱でした。MZ-700 内部にインストールされる PCB は、密閉されたコンパクトな筐体内に空気循環なしで多くの熱を発する既存のマザーボードコンポーネントに非常に近接しています。これにより PCB 裏面にアクティブコンポーネントを配置できず、結果的に最終 PCB サイズが増加しました。
手動アセンブルが可能な最小コンポーネント、つまり 0402/0603 パッシブデバイスと 0.5mm IC ピッチスペーシングが全体サイズを削減するために使用され、すべての必要なコンポーネントを収めるために 4 層スタックアップが選択されました。
PCB トップ概要

FusionX PCB Top

PCB ボトム概要

FusionX PCB Bottom

PCB 4 層ルーティング概要

FusionX Routing

組み立て済み PCB

FusionX Assembled

FusionX Assembled

PCB コンポーネント配置と部品表
インタラクティブな PCB コンポーネント配置図と部品表を表示するにはこちらをクリックしてください。

CPLD
tranZPUterFusionX は Altera MAX7000AE CPLD(具体的には EPM7512AETC144-10)を SOM とホスト Z80 ソケット間の中央インターフェースとして使用します。これは 512 マクロセル、144 ピン TQFP デバイスで、出力側は 3.3V LVTTL で動作しながら入力側は 5V TTL レベルを受け入れ、追加のレベルシフトなしでビンテージ Sharp MZ や他の Z80 ベースハードウェアと直接互換性があります。
CPLD 設計は VHDL で書かれ、Altera Quartus II 13.0.1 SP1(Web エディション)でビルドされます。各ホストマシンはわずかに異なるバスタイミング要件とメモリマップ制約があるため、サポートされている各ホスト向けに個別の VHDL 実装が維持されています:
VHDL バリアント ホストマシン ディレクトリ
tzpuFusionX.vhd(MZ80A) Sharp MZ-80A CPLD/v1.0/MZ80A/
tzpuFusionX.vhd(MZ700) Sharp MZ-700 CPLD/v1.0/MZ700/
tzpuFusionX.vhd(MZ2000) Sharp MZ-2000 CPLD/v1.0/MZ2000/
tzpuFusionX.vhd(PCW8256) Amstrad PCW-8256 CPLD/v1.0/PCW8256/

目的と役割
CPLD は SOM でソフトウェアとして直接実装することが非実用的または不可能ないくつかの機能を実行します:
  • 電圧レベル変換
    — 5V TTL Z80 ホストバスを SOM が使用する 3.3V LVTTL 信号にブリッジします。MAX7000AE は入力側が 5V 耐性で出力側は 3.3V で駆動し、5V TTL 受信機のスイッチング閾値 2.4V を超えるため、ピンあたり最大 25mA で 5V ホストロジックを直接駆動できます。
  • サイクル精度の Z80 バスタイミング
    — CPLD は 50MHz 外部発振器でクロックされるハードウェア FSM を実装し、ホスト Z80 クロックをサンプリングしてすべてのバスサイクルタイプの正確な T ステートシーケンスを再現します。これにより重要なタイミングはすべて SOM から CPLD にオフロードされ、SOM は CPLD FSM によって定義されたウィンドウ内でデータで応答するだけで済みます。
  • SOM インターフェースブリッジ
    — Z80 パラレルバスプロトコルと SOM カーネルモジュールで使用される SPI + 8 ビット GPIO インターフェース間を変換し、バスイベントを SSD202 が Linux カーネルスレッドから効率的にサービスできる形式に変換します。
  • ビデオとオーディオの切り替え
    — ホストマシンのネイティブビデオ/オーディオ出力と SOM のビデオ/オーディオを選択するマルチプレクサーを制御し、娘ボードコネクターを介してモニターとスピーカーにルーティングします。切り替えは SOM から SPI でコマンドされます。
  • ビデオ同期とクロック生成
    — SOM の VSync と HSync 信号からコンポジット同期(VGA_CSYNCn)を生成し、ブランキングインターバルを検出し、モノクロ DAC 用の 25MHz ピクセルクロックを生成(50MHz 発振器を分周)し、コンポジットカラー出力用のカラーキャリア周波数信号(VGA_COLR)を生成します。
  • リセット管理
    — ホスト Z80 RESET ラインを監視し、デュアルプレスリセットプロトコルを実装します。1 回のリセット押下は SOM にソフトリセットを送信し(Z80 アプリケーションが再初期化できる)、1 秒以内の 2 回目の押下は SOM PM_RESET ラインを駆動して完全な SOM 電源サイクルリブートを強制します。
  • USB 電源制御
    — SOM コマンドのもとで USB VBUS 電源有効信号を制御します。

Z80 バス FSM
CPLD 設計の中核は、50MHz 解像度で Z80 バスサイクル状態を追跡・再現する有限ステートマシン(SOMFSMState)です。FSM はホスト Z80 クロックエッジとバス制御信号(MREQ、IORQ、RD、WR、M1、RFSH、BUSRQ、HALT、WAIT)を監視して各バスサイクルを分類し、正確な T ステートシーケンスをステップします:
FSM 状態 Z80 バスサイクル 説明
IdleCycle バスがアイドル。MREQ または IORQ のアサートを待機中。
FetchCycle オペコードフェッチ(M1) M1 + MREQ + RD アクティブ;アドレスとデータフェーズが T1〜T3 でタイム。
RefreshCycle DRAM リフレッシュ RFSH + MREQ アクティブ;DRAM 行リフレッシュのためアドレスの下位 7 ビットを提示。
ReadCycle メモリ読み取り MREQ + RD アクティブ;T1 でアドレス提示、T3 でデータサンプリング。
WriteCycle メモリ書き込み MREQ + WR アクティブ;T1〜T2 でアドレスとデータ提示、T3 で書き込みストローブ。
ReadIOCycle I/O 読み取り IORQ + RD アクティブ;WAIT サポート付き I/O アドレスとデータフェーズ。
WriteIOCycle I/O 書き込み IORQ + WR アクティブ;WAIT サポート付き I/O アドレスとデータ提示。
HaltCycle HALT Z80 HALT アサートを検出;繰り返し NOP フェッチサイクルを抑制。
BusReqCycle バスリクエスト BUSRQ アサート;BUSACK を駆動、バスラインをトライステート、SOM に通知。
各状態にはナンバー付きのサブ状態(例:FetchCycle_11FetchCycle_20)があり、T ステート内の個々のハーフサイクルに対応し、CPLD がホスト CLK エッジに対してサブクロックサイクル精度で制御信号をアサートまたはディアサートできます。
二次の CTRLFSMState FSM は SPI コマンド処理(CTRLCMD_IdleCTRLCMD_ReadIOWrite)をメインバスサイクル FSM とは独立して処理するため、SOM からの SPI トランザクションが Z80 バスサイクルサービスをブロックしません。

SOM インターフェース
CPLD は SOM に 2 つの異なるインターフェースを提供します:
  • SPI スレーブ(書き込みパス)
    — 4 ワイヤ SPI スレーブ(VSOM_SPI_CLKVSOM_SPI_MOSIVSOM_SPI_MISOVSOM_SPI_CSn)が SOM からコマンドとデータを受信します。フレームあたり最大 4 バイトがシリアルシフトレジスタを介してシフトインされ、バス制御コマンド(メモリ書き込みデータ、I/O 書き込みデータ、ビデオ/オーディオソース選択、USB 電源制御)にデコードされます。
  • 8 ビットパラレルバス(読み取りパス)
    VSOM_HBYTE 選択ラインを持つ 8 ビット出力バス(VSOM_DATA_OUT[7:0])が現在の Z80 アドレス/データワードの下位または上位バイトを SOM GPIO 入力に提示します。追加のシングルビットステータスラインが報告します:VSOM_READY(FSM アイドル)、VSOM_LTSTATE(現在のサイクルの最終 T ステート)、VSOM_BUSRQVSOM_BUSACKVSOM_INTVSOM_NMIVSOM_WAITVSOM_RESET
この分割アーキテクチャ(書き込みには SPI、読み取りには GPIO パラレルバス)は SSD202 の相対的なパフォーマンス特性に合致しています。SPI はクロックされており複数バイト書き込みに信頼性があり、GPIO 直接レジスタアクセスは Z80 T ステートウィンドウ内でバス状態をサンプリングするための最低限の読み取りレイテンシを提供します。

CPLD イメージのビルド
CPLD ビットストリームは Altera Quartus II 13.0.1 SP1 Web エディションで生成されます。これは Intel FPGA(旧 Altera)のウェブサイトから無料でダウンロードできます。Web エディションはすべての MAX7000AE デバイスをサポートし、このプロジェクトには十分です。
プロジェクトを開く
各ホストマシンバリアントは対応するサブディレクトリに独自の Quartus プロジェクトがあります。例えば MZ-80A バリアントをビルドするには:
# Quartus II GUI で開く:
File -> Open Project -> CPLD/v1.0/MZ80A/build/tzpuFusionX_MZ80A.qpf


# または Quartus シェルを使用してコマンドラインから起動:
quartus_sh --flow compile tzpuFusionX_MZ80A
プロジェクトは 3 つの VHDL ソースファイルを参照しています(プロジェクト build/ ディレクトリからの相対パス):
  • ../tzpuFusionX_Toplevel.vhd — トップレベルエンティティのインスタンス化と I/O ピン定義
  • ../tzpuFusionX_pkg.vhd — 共有パッケージ(型、定数)
  • ../tzpuFusionX.vhd — メイン RTL アーキテクチャ(FSM、SPI、バスインターフェース、ビデオ/オーディオ制御)
コンパイル
Quartus GUI で Processing → Start Compilation(または Ctrl+L)を選択します。ツールは解析 & 合成、フィッター、アセンブラー、タイミング解析を順に実行します。成功したビルドでは以下が生成されます:
build/output_files/tzpuFusionX_MZ80A.pof   # プログラマーオブジェクトファイル(JTAG プログラミング)
build/output_files/tzpuFusionX_MZ80A.fit.rpt  # フィッターレポート(リソース使用状況)
build/output_files/tzpuFusionX_MZ80A.sta.rpt  # タイミング解析レポート
.pof ファイルは物理 CPLD デバイスをプログラムするために使用されるバイナリイメージです。
CPLD のプログラミング
プログラミングは Altera USB-Blaster または互換 JTAG アダプターを FusionX ボードの 10 ピン JTAG ヘッダーに接続して JTAG 経由で行います:
  1. USB-Blaster を FusionX JTAG ヘッダーとホスト PC に接続します。
  2. FusionX ボードに電源を供給します(CPLD はプログラミング中に電源が必要です)。
  3. Quartus II で Tools → Programmer を開きます。
  4. チェーン記述ファイルをロードします:build/output_files/tzpuFusionX_MZ80A.cdf
  5. USB-Blaster がハードウェアリストで検出されていることを確認してから Start をクリックします。
  6. プログラミングは数秒で完了し、CPLD は完了後すぐにアクティブになります。
CPLD はプログラムされたロジックを電源なしで永続的に保持します(MAX7000AE は EEPROM ベースの設定セルを使用)。したがって、デバイスはビルドごとまたは新しいビットストリームに更新する際に一度だけプログラムする必要があります。

ソフトウェア

FusionX ソフトウェアスタックは Linux オペレーティングシステムから専用カーネルモジュールとユーザー空間ユーティリティまで及びます。完全なソフトウェアセットは SigmaStar ビルド環境のカスタマイズ版を使用してビルドされ、SOM の SPI NAND フラッシュにロードされます。起動時に U-boot が SOM を初期化して Linux カーネルに引き渡し、カーネルは Buildroot ルートファイルシステムをロードします。その後 FusionX スタートアップスクリプトがシステムを設定して Z80 エミュレーターをオンラインにします。
ソフトウェアコンポーネントは:
  • Linux OS
    — SigmaStar SSD202 デュアルコア Cortex-A7 で動作するカーネル 4.9-rt(PREEMPT_RT)と Buildroot ルートファイルシステム。
  • z80drv.ko
    — Z80 CPU エミュレーターとホストハードウェアインターフェースを実装する Linux カーネルモジュール。Z80 エミュレーションループを専用 CPU コアで実行します。
  • ttymzdrv.ko
    — Sharp MZ キーボードと表示を標準 Linux ターミナルデバイス(/dev/ttymz0)として提示する Linux TTY カーネルモジュール。
  • z80ctrl
    — z80drv カーネルモジュールを制御するユーザー空間コマンドラインユーティリティ:ROM イメージをロード、仮想ハードウェアデバイスを追加、エミュレーションの開始/停止、エミュレートされたメモリの検査。
  • k64fcpu
    — K64F 仮想 CPU をエミュレートするユーザー空間デーモン。TZFS モードで ROM ローディングと Z80 エミュレーターとのプロセッサ間通信を管理するために使用されます。
  • sharpbiter
    — Sharp MZ アービターデーモン。Z80 エミュレーターと Linux TTY ドライバー間で共有 Sharp MZ ハードウェアリソースへのアクセスを調整します。
起動は start_FusionX.sh によって処理されます。これは ttymzdrv.ko をロードし、/dev/ttymz0 に getty ログインセッションを開始し、すべての Linux プロセスと IRQ を CPU0 にピン留めし、z80drv.ko を分離された CPU1 にロードして、k64fcpusharpbiter デーモンを起動します。2 つのプリビルドスタートアップモードが提供されています:
  • RFS モード
    startZ80_RFS.sh)— ROM ファイリングシステム仮想ハードウェアデバイスをロードし、40 列または 80 列 ROM イメージで MZ-80A エミュレーターを開始します。
  • TZFS モード
    startZ80_TZFS.sh)— tranZPUter SW 仮想ハードウェアデバイスをロードし、モニターと TZFS ROM イメージのローディングを管理する k64fcpu K64F デーモンを開始します。

アーキテクチャ
FusionX ソフトウェアアーキテクチャは階層化されており、各層が個別の責任を処理します。ホストマシンの視点からは、フローは完全に透明です。Z80 ソケットは通常の Z80 CPU のように動作しながら、SOM はすべてのバスサイクルを静かに傍受してエミュレートしています。

デュアルコア設計
SSD202 の 2 つの Cortex-A7 コアは厳格な責任の分離のもとで動作します。起動時にすべての Linux プロセスとすべてのハードウェア IRQ アフィニティが CPU0 に移行され、CPU1 は Z80 エミュレーションカーネルスレッド専用になります。エミュレーターが起動した後、CPU 周波数ガバナーはパフォーマンスモード(1.2GHz 固定)に設定され、周波数スケーリングの移行がエミュレーションループのタイミング変動を引き起こさないようにします。
CPU0 — Linux とユーザー空間サービス
完全な Linux 4.9-rt オペレーティングシステム、すべてのユーザー空間デーモンを実行し、すべてのハードウェア割り込みを処理します。CPU0 の主な責任には以下が含まれます:
  • ttymzdrv.ko
    — Sharp MZ キーボードと表示を /dev/ttymz0 にマップする Linux TTY カーネルモジュール。サスペンドとレジュームをサポートし、どちらのセッションの状態も失うことなく、ホストマシンで Z80 セッションと Linux コンソール間をシームレスに切り替えられます。
  • z80ctrl ユーティリティ
    — Z80 エミュレーターのランタイム制御のためのコマンドラインツール:ROM イメージのロード、仮想ハードウェアデバイスの登録、エミュレーションループの開始/停止、エミュレートされたメモリの検査。カーネルキャラクターデバイスを介して z80drv.ko と通信します。
  • k64fcpu デーモン
    — K64F 仮想 CPU をエミュレートするユーザー空間デーモン。TZFS モードでアクティブで、エミュレーターのメモリ空間へのモニターと TZFS ROM イメージのローディングを管理し、プロセッサ間コマンドを z80drv.ko にリレーします。
  • sharpbiter デーモン
    — Sharp MZ アービター。TTY ドライバーと Z80 エミュレーターの間で共有 Sharp MZ キーボードと表示ハードウェアへのアクセスを調整し、両方が基盤となる I/O レジスタで競合することなく動作できるようにします。
  • WiFi と Web サーバー
    — SOM の統合 802.11 b/g/n トランシーバー(SSW101B)がネットワーク接続を提供します。CPU0 上の軽量 Web サーバーが設定とステータスページを提供でき、WiFi スタックは起動時の SD カード自動アップグレードによる OTA ファームウェア配信を処理します。
CPU1 — Z80 エミュレーター(専用)
z80drv.ko によって生成された kthread_z80 カーネルスレッドを専用で実行します。初期化後、CPU1 には他のプロセスや割り込みがスケジュールされません。CPU1 のエミュレーションループは:
  • 各命令実行ステップのために Zeta Z80 CPU コアを呼び出します
  • 結果として生じる各メモリまたは I/O アクセスを適切なハンドラーにディスパッチします—物理ホストハードウェア、カーネル常駐 RAM イメージ、または仮想ハードウェアモジュール関数
  • CPLD を通じて Z80 バス信号をアサートまたはサンプリングするために z80io.c を介して GPIO と SPI ハードウェアを駆動します
  • PREEMPT_RT カーネルにより CPU0 アクティビティからの割り込みジッターを最小化しながら 1.2GHz で実行されます

メモリアーキテクチャ
SSD202 SOM 上の 128MB DRAM は Linux オペレーティングシステムと Z80 カーネルモジュール間で共有されます。カーネルモジュールはエミュレートされた Z80 用の ROM と RAM イメージを保持するために物理アドレスのカーネルメモリの連続領域を割り当てます。この領域には CPU1 で実行されている kthread_z80 が内部エミュレーションループで仮想メモリ変換のオーバーヘッドなしに直接アクセスします。
エミュレートされた Z80 は標準 64KB(0x0000〜0xFFFF)アドレス空間全体で設定可能なメモリマップを見ます。各領域は次のアクセスタイプのいずれかに割り当てられます:
タイプ 説明
kernel RAM カーネル割り当て DRAM バッファでバックアップされた読み書き領域。エミュレートされたマシンの標準 RAM。
kernel ROM カーネル DRAM の読み取り専用領域。書き込みサイクルは静かに廃棄されます。モニター ROM、BASIC ROM、ユーザー ROM、TZFS ROM ページに使用。
PHYSICAL 実際のホストハードウェアへのパススルー—SOM は CPLD バスを解放し、ホストハードウェアが直接サイクルに応答します。実際のハードウェアとやり取りする必要があるホストビデオ RAM と I/O レジスタに使用。
VIRTUAL 各アクセスがカーネルモジュール内の C ハンドラー関数をトリガーします。任意の実際のハードウェアなしでペリフェラルデバイス(フロッピーコントローラー、QuickDisk、RFS バンキングロジック)をエミュレートするために使用。

娘ボード

tranZPUter シリーズは最初に Sharp MZ-80A で開発され、主に Z80 の置換でした。コンセプトが進化し、MZ-700 向けに tranZPUter SW-700 が開発されると、既存の信号を傍受・ルーティングすることでオリジナルおよびアップグレードされたビデオとオーディオ機能を提供するマシンのより不可欠なコンポーネントになりました。
現在、MZ-700、MZ-80A、MZ-2000 向けの 3 つの娘ボードが開発されており、設計が進むにつれて追加される予定です。

クレジット

第三者の設計を使用またはベースにした場合は、元の著者の著作権表示を含めています。すべての第三者ソフトウェアはオープンソースで自由に使用可能です。ライセンス制限のあるコンポーネントが見つかった場合は削除し、適切なリンク/設定を提供します。

ライセンス

このデザイン(ハードウェアおよびソフトウェア)は GNU Public Licence v3 の下でライセンスされています。
SSD202 SOM 上の 128MB DRAM は Linux オペレーティングシステムと Z80 カーネルモジュールで共有されています。カーネルモジュールはエミュレートされた Z80 の ROM および RAM イメージを保持するために、物理アドレス指定されたカーネルメモリの連続領域を割り当てます。この領域は CPU1 上で動作する kthread_z80 が内部エミュレーションループにおいて仮想メモリ変換のオーバーヘッドなしに直接アクセスします。
エミュレートされた Z80 は標準の 64KB (0x0000–0xFFFF) アドレス空間にわたって設定可能なメモリマップを持ちます。各領域には以下のアクセスタイプのいずれかが割り当てられます。
タイプ 説明
kernel RAM カーネル割り当てDRAMバッファを基盤とする読み書き可能領域。エミュレートされたマシンの標準RAM。
kernel ROM カーネルDRAM上の読み取り専用領域。書き込みサイクルは無視されます。モニターROM、BASIC ROM、ユーザーROM、TZFS ROMページに使用。
PHYSICAL 実ホストハードウェアへのパススルー — SOMはCPLDバスを解放し、ホストハードウェアがサイクルに直接応答します。実ハードウェアとやり取りする必要があるホストビデオRAMおよびI/Oレジスタに使用。
VIRTUAL 各アクセスがカーネルモジュール内のCハンドラ関数をトリガします。実ハードウェアなしでペリフェラルデバイス(フロッピーコントローラー、QuickDisk、RFSバンキングロジック)をエミュレートするために使用。
ROM イメージは起動時に z80ctrl --loadrom によって(またはアクティブな仮想ハードウェアモジュールや TZFS モードの k64fcpu デーモンによって自動的に)カーネルメモリにロードされます。複数の ROM ページセットを同時に常駐させることができます — たとえば RFS 仮想ハードウェアモジュールは、40 桁および 80 桁構成用に最大 4 つの切り替え可能な ROM ページ(MROM、ユーザーROM I/II/III)を保持します。
サポートされる各ホスト(MZ-80A、MZ-700、MZ-2000、PCW-8256)のマシンタイミング定数は z80driver.h で定義されており、エミュレーションループがホストクロックに対して正しい速度でバスサイクルを実行するために使用されます。これにより、タイミングに敏感なソフトウェア(テープモーター制御、シリアルI/O、ディレイループ)がオリジナルハードウェアと同じように動作します。

仮想ハードウェアモジュール
仮想ハードウェアモジュールは特定のホストマシンまたはペリフェラルセットの動作を定義する C ソースファイル(z80vhw_*.c)です。個別にリンクされたオブジェクトとしてコンパイルされるのではなく、z80driver.c に直接 #include されるため、ハンドラ関数は関数呼び出しのオーバーヘッドなしにエミュレーションディスパッチパスにインライン展開されます。
最大 5 つの仮想ハードウェアデバイスを同時にアクティブにできます(MAX_VIRTUAL_DEVICES 5)。デバイスはエミュレータ起動前に z80ctrl --adddev --device <name> を使用してランタイムに登録されます。登録された各デバイスは、要求するアドレス範囲のメモリ読み込み、メモリ書き込み、I/O 読み込み、I/O 書き込みコールバックを受け取り、オプションで初期化中に独自の ROM イメージをインストールしてメモリマップを設定できます。
利用可能なモジュールとサポートするホストマシンは以下の通りです。
モジュール ホスト 役割
z80vhw_mz80a.c Sharp MZ-80A オリジナルの MZ-80A メモリマップ、キーボードマトリクスおよびディスプレイ I/O — 拡張なし。
z80vhw_mz700.c Sharp MZ-700 MZ-700 バンク切り替え、ビデオおよびキーボード I/O エミュレーション。
z80vhw_mz2000.c Sharp MZ-2000 MZ-2000 メモリマップ、拡張ビデオモードおよび I/O。
z80vhw_pcw.c Amstrad PCW-8256 PCW-8256 メモリ/バンクページングおよびペリフェラル I/O。
z80vhw_rfs.c MZ-80A + RFS ボード ROM ファイリングシステム:40 桁および 80 桁セット用の 4 つの切り替え可能な ROM ページ(MROM、ユーザーROM I/II/III)を管理し、SD ベースの MZF プログラムロードとバンク切り替えを実行。
z80vhw_tzpu.c MZ-80A + tranZPUter SW tranZPUter SW 仮想ハードウェア;カーネル側ドライバはユーザースペースの k64fcpu デーモンと連携して K64F 仮想 CPU 動作、TZFS ROM ページ管理および CP/M サポートを提供。
TZPU モジュール(z80vhw_tzpu.c)は他のモジュールとはアーキテクチャ的に異なります。K64F コプロセッサの動作が複雑でステートフルであるため、2 つのコンポーネントに分割されています:z80vhw_tzpu.c カーネル側スタブが高速なバスサイクルディスパッチを処理し、CPU0 上のユーザースペースデーモン k64fcpu が ROM ロード、メモリバンク選択、および高レベルの K64F コマンド処理を管理します。2 つのハーフはカーネルモジュール内の共有メモリ領域を介して通信します。

ビルド
完全な FusionX OS およびアプリケーションセットは Build_FusionX.sh スクリプトを使用してビルドされます。このスクリプトは SigmaStar SDK ビルドシステムをラップし、フラッシュ書き込み準備が完了した NAND イメージを生成します。ビルドには ARM クロスコンパイラーツールチェーンがインストールされた Linux ホストが必要です。
前提条件
  • ARM クロスコンパイラー:arm-linux-gnueabihf-gcc(例:gcc-arm-linux-gnueabihf パッケージ)
  • SigmaStar SDK ソースツリー(カーネル、U-boot、Buildroot)が Build_FusionX.sh の想定する親ディレクトリ構造に配置されていること
  • FusionX アプリケーションソースが Linux ビルドディレクトリからの相対パス ../FusionX ディレクトリに配置されていること
  • 標準ビルドツール:makecmakebclibssl-dev
完全な OS イメージのビルド ビルドは software/linux/ ディレクトリから起動します。
# FusionX 用フルイメージのビルド(プロジェクト 2D06、SPI NAND、SSD202、256MB フラッシュ)
./Build_FusionX.sh -f nand -p ssd202 -o 2D06 -m 256
これにより順に U-boot ブートローダー、Linux カーネル(FusionX カスタム defconfig infinity2m_spinand_fusionx_defconfig を使用)、Buildroot ルートファイルシステム、および FusionX アプリケーションセットがビルドされます。出力イメージは project/image/output/images/ に書き出されます。 標準の SigmaStar リファレンス構成を使用する場合は、代わりにプロジェクト 2D07 を使用してください。
カーネルモジュールのみのビルド カーネルモジュールは既にビルドされたカーネルツリーに対して独立して再ビルドできます。これは開発時に便利です。
# z80drv カーネルモジュールのビルド
cd software/FusionX/src/z80drv/src.mz80a
make

# ttymzdrv カーネルモジュールのビルド
cd software/FusionX/src/ttymz
make
生成された z80drv.ko および ttymzdrv.ko ファイルは、SSH または SD カード経由で動作中の SOM の /apps/FusionX/modules/ ディレクトリに直接コピーし、insmod でロードできます。
フラッシュ書き込みとアップデート ビルドスクリプトが生成したフラッシュイメージは、USB 経由の SigmaStar ISP ツールを使用して SOM SPI NAND に書き込まれます。初期イメージがインストールされた後、以降のアップデートは SD カード経由で提供できます — SOM が適切に準備された SD カードを挿入した状態で起動すると、USB 接続を必要とせずに NAND イメージを自動アップグレードします。

Linux
Linux プラットフォームは SigmaStar SSD202 (Infinity2M) SOM 上で動作します — 1.2GHz のデュアルコア ARM Cortex-A7、128MB DRAM、256MB SPI NAND フラッシュ、および統合 802.11 b/g/n WiFi トランシーバーを搭載した 29mm × 29mm のスタンプモジュールです。カーネルは Linux 4.9 に PREEMPT_RT リアルタイムパッチを適用したもので、スケジューリングレイテンシを最小化します。これはレスポンシブな Z80 エミュレーションに不可欠です。
完全な OS イメージ(U-boot ブートローダー、Linux カーネル、Buildroot ルートファイルシステム、FusionX アプリケーションセット)は Build_FusionX.sh スクリプト(SigmaStar SDK ビルドシステムのカスタマイズ版)を使用して組み立てられます。2 つのプロジェクトターゲットが定義されています。
  • 2D06
    infinity2m_spinand_fusionx_defconfig カーネル defconfig を使用する FusionX カスタム構成。
  • 2D07
    infinity2m_spinand_ssc011a_s01a_minigui_defconfig を使用する標準 SigmaStar リファレンス構成。
ビルドスクリプトの起動方法:Build_FusionX.sh -f nand -p ssd202 -o 2D06 -m 256。これにより SOM NAND への書き込み準備が完了した完全なフラッシュイメージが生成されます。
Linux 構成の重要な点は CPU 分離です。起動時にすべての Linux プロセスとハードウェア IRQ が CPU0 に移行されます。CPU1 は Z80 エミュレーションループを実行する kthread_z80 カーネルスレッドに専用に割り当てられます。この CPU アフィニティの分離と PREEMPT_RT カーネルの組み合わせにより、Z80 エミュレーターはホストハードウェアインターフェースへの最も一貫した最低レイテンシのアクセスを得ます。また、Z80 エミュレーターの動作後に CPU パフォーマンスガバナーを最大周波数(1.2GHz)に設定することで、周波数スケーリングがエミュレーションループのタイミング変動を引き起こすことを防ぎます。
ルートファイルシステムは SOM NAND フラッシュに保存された Buildroot ベースの最小限の Linux 環境です。オプションの SD カードで Sharp MZ アプリケーションソフトウェア、ROM イメージ、追加の Linux ユーティリティのストレージを拡張できます。起動時に適切に準備された SD カードがある場合、SOM は自動的にそこからアップグレードするため、ファームウェアのアップデートが簡素化されます。

Z80 エミュレーター
Z80 エミュレーターは Linux カーネルモジュール z80drv.ko(v1.4、2023 年 4 月)として実装されています。Z80 命令セットコアとして Manuel Sainz de Baranda y Goñi による Zeta Z80 CPU エミュレーターライブラリを使用し、SSD202 GPIO ハードウェアおよび CPLD Z80 ホストインターフェースと連携するカーネルスペースドライバーにラップされています。
SOM から Z80 ホストソケットへのハードウェアパスは:SSD202 GPIO / SPI → CPLD → Z80 DIP-40 ソケットです。CPLD は 50MHz クロックを使用して正確な Z80 バスタイミングを処理するため、カーネルモジュール自体は正確な T ステートタイミングを再現する必要がありません。GPIO インターフェースは z80io.c によって管理され、初期化には SigmaStar HAL を呼び出しますが、レイテンシを最小化するためにビットレベルの読み書き操作ではレジスタに直接アクセスします。SSD202 GPIO 構造の実用的な読み取りスループットは 8 ビットバイトで約 2MB/s であるため、プログラムはバスを介した物理ホストメモリからではなくエミュレート(カーネル)メモリから実行されます。
エミュレーターは以下のホストマシンをサポートし、それぞれ独自の仮想ハードウェアモジュールを持ちます。
仮想ハードウェアモジュール ホストマシン 説明
z80vhw_mz80a.cSharp MZ-80Aオリジナルの MZ-80A 動作、追加なし
z80vhw_mz700.cSharp MZ-700オリジナルの MZ-700 動作、追加なし
z80vhw_mz2000.cSharp MZ-2000MZ-2000 エミュレーション
z80vhw_pcw.cAmstrad PCW-8256PCW-8256 エミュレーション
z80vhw_rfs.cMZ-80A + RFSMZ-80A 用 ROM ファイリングシステム仮想ハードウェア
z80vhw_tzpu.cMZ-80A + tranZPUter SWtranZPUter SW 仮想ハードウェア;カーネルドライバーとユーザースペースの k64fcpu デーモンを組み合わせて使用
仮想ハードウェアモジュールは個別のオブジェクトとしてリンクされるのではなく z80drv.ko にインラインでコンパイルされます。これにより、エミュレーションのホットパスにおける関数呼び出しのオーバーヘッドが排除されます。最大 5 つの仮想ハードウェアデバイスを同時にアクティブにできます(MAX_VIRTUAL_DEVICES 5)。デバイスはエミュレーター起動前に z80ctrl --adddev --device <name> を使用してランタイムに追加されます。
z80ctrl ユーティリティは Linux コマンドラインからエミュレーターのランタイム制御を完全に提供します。
  • --adddev --device <name> — 仮想ハードウェアデバイスを追加(rfs、tzpu、mz700、mz80a、mz2000、pcw)
  • --start / --stop — Z80 エミュレーションループの開始または停止
  • --loadrom --file <path> --addr <hex> --type <n> — ROM バイナリをエミュレートメモリにロード
  • --mem --addr <hex> --len <n> — エミュレートメモリの内容を検査
  • --cmd <hex> — コマンドバイトを直接 CPLD/Z80 ゲートウェイに送信
ttymzdrv.ko モジュール(ttymz.c、v1.2、2023 年 7 月)は Sharp MZ キーボードおよびディスプレイハードウェアを基盤として /dev/ttymz0 に標準 Linux TTY インターフェースを提供します。これにより、ホストマシンのコンソールを Linux ターミナルとして使用でき(getty ログインセッションの実行)、サスペンドとレジュームによって状態を失わずに Linux と Z80 エミュレーションセッション間でディスプレイを切り替えることもサポートします。サポートされるホストは MZ-80A、MZ-700、MZ-2000 です。

ドーターボード

tranZPUter シリーズは最初に Sharp MZ-80A 向けに開発され、主に Z80 の代替品でした。コンセプトが発展し MZ-700 用の tranZPUter SW-700 が開発されるにつれ、既存の信号を傍受・ルーティングすることでオリジナルおよびアップグレードされたビデオ・オーディオ機能を提供する、マシンのより統合されたコンポーネントとなりました。
tranZPUter SW-700 での大幅な開発の後、MZ-80A および MZ-2000 に移植することが望まれましたが、これらのマシンは CPU の向きと信号要件が異なっていました(内部および外部モニターの駆動など)。この要件がドーターボードのコンセプトにつながり、特定のボードをターゲットホスト用に設計・開発して tranZPUter SW-700 カードに差し込む形となりました。理想的には SW-700 を MZ-800/MZ-1500 および X1 に移植したかったのですが、カードのサイズと Z80 の向きが制約となっていました。
tranZPUterFusionX の設計において主な要件のひとつは、ボードを小型にすること、Z80 の向きを変更可能にすること、そして多くのマシンに対応して互換性を持つよう tranZPUterFusion との互換性を保つことでした。SW-700 がマシンのビデオおよびオーディオにもインターフェースしており、それぞれが大きく異なっていたため、tranZPUterFusionX はターゲットホストに応じた異なるビデオ/オーディオインターフェースを可能にするコンセプトを含む必要があることが明らかになりました。このコンセプトはドーターボードによって実現されました。2 つのコネクターが tranZPUterFusionX を意図したホスト用に特別に設計されたドーターボードに接続します。
ドーターボードはビデオ/オーディオ信号の切り替えとミキシング、内部モニターの駆動、および設置を容易にするための適切な入出力コネクターの提供を担います。
現在、MZ-700、MZ-80A、MZ-2000 用の 3 つのドーターボードが開発されており、設計の進展に伴いさらに追加される予定です。

MZ-700 ドーターボード
MZ-700 ドーターボードの目的は、FusionX ボードのビデオ/オーディオ回路と MZ-700 のものをインターフェースすることです。メインボードのモジュレーター出力に挿入し、モジュレーターコネクターをドーターボードに接続するよう設計されています。これにより MZ-700 を標準モニターで使用でき、ビデオ出力は FusionX の制御のもとで MZ-700 と FusionX 間で切り替えられます。
MZ-700 のオリジナルのサウンド回路はスピーカーを直接駆動します。FusionX のオーディオを MZ-700 スピーカーに注入するために、メインボードのスピーカー出力をドーターボードにルーティングし、レベル変換して FusionX の制御のもとで切り替えます。FusionX はステレオサウンドを提供するため、これはオリジナルの MZ-700 サウンドと選択的に切り替え/ミキシングされ、Class D アンプに送られ内部スピーカーを駆動します。ライン出力のステレオ出力は追加の 4 ピンコネクターを介して実現され、必要に応じて使用できます。
この構成により、FusionX 上のアプリケーションとして動作する Linux またはエミュレートされたマシンが内部スピーカーにサウンドを出力できます。
MZ-700 ビデオインターフェース回路図
MZ-700 ドーターボードは FusionX の制御のもとでビデオおよびオーディオ信号をルーティングする 3 つの 4 回路 SPDT アナログスイッチと Class D パワーアンプで構成されます。

MZ700 VideoInterface Schematic6

MZ-700 ビデオインターフェース PCB
MZ-700 ドーターボード PCB はスペースの制約から小型でコンパクトです。既存のモジュレーターコネクターに取り付けられ、利用可能な空きスペース内に収まる必要があります。

MZ-2000 ドーターボード
MZ-2000 ドーターボードの目的は、FusionX ボードのビデオ/オーディオ/リセット回路と MZ-2000 のものをインターフェースすることです。MZ-2000 はモノクロ CRT 内蔵モニター、外部 RGB ビデオ出力、および CRT 制御ボード上のアンプを持つ内部オーディオを備えています。
ドーターボードはメインボードのモニターおよび IPL コネクターに同時に挿入するよう設計されています。IPL/RESET スイッチ、内部モニター、および外部モニターを接続するために必要なすべてのコネクターを同一ボード上に提供します。
IPL および RESET 入力はドーターボードで傍受され FusionX に送信されます。MZ-2000 は Z80 リセット中にどの RESET キーが押されたかによって異なるモードで動作するためです。
メインボードからのビデオ信号は FusionX のビデオモノクロ信号と切り替えられ、内部 CRT モニターに送られます。これにより CRT モニターでオリジナルのビデオ出力、またはモニターのタイミング制約に応じた解像度の高度な FusionX テキストとグラフィックスが表示できます。
FusionX の RGB 出力は MZ-2000 の外部 RGB ビデオソケットにルーティングされ、フル HD までの外部カラービデオ表示が可能です。
MZ-2000 のサウンド回路は CRT モニターのオーディオアンプに送られます。この信号は傍受され、FusionX のオーディオと切り替えられた後、CRT モニターアンプを駆動します。ライン出力のステレオ出力は追加の 4 ピンコネクターを介して実現され、必要に応じて使用できます。
MZ-2000 ビデオインターフェース回路図
MZ-2000 ドーターボードは FusionX の制御のもとでビデオおよびオーディオ信号をルーティングする 2 つの 4 回路 SPDT アナログスイッチで構成されます。1 つの SPDT スイッチは FusionX ボードで生成される修正ビデオ信号に純粋な黒を作り出すために使用されます。

MZ2000 VideoInterface Schematic6

MZ-2000 ビデオインターフェース PCB
MZ-2000 ドーターボード PCB はスペースの制約と搭載しなければならない多数のコネクターから小型でコンパクトです。メインボードのモニター/IPL オス型コネクターに差し込み、既存の内部配線用に新しい CRT モニター、外部ビデオ、および IPL/RESET スイッチコネクターを提供します。

MZ-80A ドーターボード
MZ-80A ドーターボードの目的は、FusionX ボードのビデオ/オーディオ/リセット回路と MZ-80A のものをインターフェースすることです。MZ-80A はモノクロ CRT 内蔵モニター、外部 RGB ビデオソケット用のくり抜き穴、および CRT 制御ボード上のアンプを持つ内部オーディオを備えています。
ドーターボードはデータカセットコネクターが同時に接続できるようにギャップを設けて垂直メインボード CRT ビデオコネクターに差し込むよう設計されています。CRT ビデオコネクターが背面側壁に近い位置にあるため、ドーターボードはキーボード側に向かって前方に延びる必要があり、このギャップが必要です。

RESET スイッチ(入力と出力の両方)、内部モニター、および外部モニターを接続するために必要なすべてのコネクターを同一ボード上に提供します。

RESET 入力はドーターボードで傍受され FusionX に送信されます。技術的には必須ではありません(FusionX はこの入力に基づく Z80 リセットをサンプリングするため)が、たとえば MZ-80A 回路ではなく SOM の再起動要求を検出する(ダブルプレス)などの用途に役立てることができます。

メインボードからのビデオ信号は FusionX のビデオモノクロ信号と切り替えられ、内部 CRT モニターに送られます。これにより CRT モニターでオリジナルのビデオ出力、またはモニターのタイミング制約に応じた解像度の高度な FusionX テキストとグラフィックスが表示できます。

FusionX の RGB 出力は MZ-80A の外部 RGB ビデオソケット(取り付けられている場合)にルーティングされ、フル HD までの外部カラービデオ表示が可能です。

MZ-80A のサウンド回路は CRT モニターのオーディオアンプに送られます。この信号は傍受され、FusionX のオーディオと切り替えられた後、CRT モニターアンプを駆動します。ライン出力のステレオ出力は追加の 4 ピンコネクターを介して実現され、必要に応じて使用できます。

</div>

MZ-80A ビデオインターフェース回路図
MZ-80A ドーターボードは FusionX の制御のもとでビデオおよびオーディオ信号をルーティングする 2 つの 4 回路 SPDT アナログスイッチで構成されます。1 つの SPDT スイッチは FusionX ボードで生成される修正ビデオ信号に純粋な黒を作り出すために使用されます。

MZ80A VideoInterface Schematic6

MZ-80A ビデオインターフェース PCB
MZ-80A ドーターボード PCB はメインボードの CRT コネクターとの接続およびデータカセット信号コネクターのスルー接続を可能にする大きなくり抜き穴を持つ小型でコンパクトなボードです。メインボードの CRT モニターコネクターに差し込み、既存の内部配線すべてに使用するための新しい CRT モニター、外部ビデオ、および RESET 入出力スイッチコネクターを提供します。

参考サイト

以下の表は tranZPUterFusionX の設計およびプログラミングで参照したすべてのサイトを含みます。
サイト 言語 説明
Z80 エミュレーション 英語 C で記述された高精度の Z80 エミュレーション。FusionX の中核。
WhyCan フォーラム 中国語 SigmaStar 製品に関するスレッドが充実した貴重なフォーラム。
SSD20X システム開発マニュアル 中国語 SSD20X CPU のシステム開発マニュアル。
SigmaStarDocs 中国語 SDK および API 開発マニュアル。
SOM2D0X 入門ガイド 中国語 SOM2D0X の入門ガイド。
CivetWeb ユーザーマニュアル 英語 CivetWeb 組み込み Web サーバーのユーザーマニュアル。

マニュアルおよびデータシート

以下の表は tranZPUterFusionX の設計およびプログラミングで参照したすべてのデータシートおよびマニュアルを含みます。
データシート 言語 説明
ADV7123 英語 オリジナルの 5V 30bit VideoDAC(製造終了)
GM7123 中国語 ADV7123 の中国製 3.3V バージョン 30bit VideoDAC コンバーター。
CH340E 中国語 USB - シリアル UART コンバーター。
EPM7512AEQFP144 英語 Altera 512 マクロセル 5V 耐性 CPLD。
HXJ8002 英語 Class D パワーアンプ。
SOM2D01 英語 SigmaStar SOM データシート(初期モデル)。
REF3040 英語 精密 4V 基準電圧発生器。
SY6280 英語 電力分配スイッチ。USB バス電力の有効化と供給に使用。
TLC5602C 英語 8bit VideoDAC コンバーター。
TLV62569 英語 高効率バックコンバーター。
TMUX1134 英語 精密 SPDT アナログスイッチ(Mux)。
VCUT0714BHD1 英語 ESD 保護ダイオード。
USB プログラマー 英語 SSD202 プロセッサ用 SigmaStar USB プログラマー。
SSD201 HW チェックリスト v10 英語 SigmaStar SSD201 ハードウェアチェックリスト。
SSD202D リファレンス v04 英語 SigmaStar SSD202 CPU リファレンスマニュアル。
SOM2D02 ピン配置 英語 SigmaStar SOM2D02 ピン配置。
Z80 ユーザーマニュアル 英語 Z80 ユーザーマニュアル。
SSD202D 製品概要 英語 SigmaStar SSD202 CPU 製品概要。
SOM2D01 データシート 英語 SigmaStar SOM2D01 データシート。

プロジェクトプレビュー

tranZPUterFusionX の開発の進捗は、各マイルストーンに達するたびに X(旧 Twitter)でシェアされました。以下の投稿は最初のハードウェア立ち上げから RFS、MZ-700、MZ-2000 エミュレーションの動作までの主要な段階を記録しています。
https://x.com/engineerswork1/status/1579209688495054849
https://x.com/engineerswork1/status/1583918702415577089
https://x.com/engineerswork1/status/1596925535787286528
https://x.com/engineerswork1/status/1616571495957909510
https://x.com/engineerswork1/status/1630985022604804109

デモンストレーション動画
MZ-80A デモ(仮想 RFS ボードを含む) MZ-2000 デモ MZ-700 デモ

クレジット

FusionX で使用されている Z80 エミュレーションは Manuel Sainz de Baranda y Goñi による著作権 (c) 1999-2022 のもので、LGPL v3 ライセンスの下でライセンスされています。ソースは Gitea で確認できます。
SSD202/SOM2D0X ビルドシステムは Linux をベースに SigmaStar および Industio による拡張が加えられたものです。ライセンスは更新されたソースファイルに記載されています。

ライセンス

本設計、ハードウェアおよびソフトウェア(個別にライセンスされたソフトウェアを除く帰属コンポーネント)は GNU Public Licence v3 の下でライセンスされており、個人、グループ、および教育機関が自由に使用、応用、改変できます。
著者からの明示的な許可なしに、本設計またはハードウェア/ファームウェアのコンポーネントを商業的に使用することはできません。

GNU パブリックライセンス v3

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

ソースファイルは有用であることを期待して配布されますが、いかなる保証もありません;商品性または特定目的への適合性についての暗黙の保証さえも含みません。詳細は GNU 一般公衆利用許諾書を参照してください。

このプログラムと共に GNU 一般公衆利用許諾書のコピーを受け取っているはずです。受け取っていない場合は http://www.gnu.org/licenses/ を参照してください。