picoZ80

概要

picoZ80 は tranZPUter のコンセプトを継承し、ホストコンピュータや産業用コンピュータの物理的な Z80 を、より高速な CPU・大容量メモリ・仮想デバイス・ネットワーク機能(WiFi・BT)・SD カードや WiFi からの高速アプリケーションロード・WiFi 管理機能へと置き換えるものです。
これはカスタム PCB であり、あらゆるレガシー Z80 ベースコンピュータの Z80 DIP-40 CPU ソケットに直接差し込める設計です。個別の Z80 プロセッサーを使用する代わりに、最大 300MHz で動作可能なデュアルコア 150MHz の Cortex-M33 デバイスである RP2350B マイクロコントローラーを搭載し、そのプログラマブル I/O(PIO)ステートマシンが Z80 のアドレスバス・データバス・制御バスをサイクル精度で完全に制御します。
picoZ80 は単純なエミュレーターアダプターではありません。すべてのバストランザクションは RP2350 の PIO エンジンによってリアルタイムで処理され、ホストシステムには実際の Z80 と同一のバスタイミングが提供されます。同時に、RP2350 の第 2 コアと豊富なオンチップ SRAM、8MB の外部 PSRAM、16MB の Flash により、加速実行・仮想化メモリ・ROM バンキング・仮想ディスクドライブ・完全なマシン・ペルソナエミュレーションなど、ほぼ無限の機能を生の Z80 インターフェースの上に重ねることができます。
ESP32 コプロセッサーが WiFi・Bluetooth 接続・SD カードマスストレージ・ブラウザーベースの管理インターフェースを提供します。すべての設定は SD カード上に保存された単一の人間が読みやすい config.json ファイルによって管理されるため、ボードのメモリマップ・ROM イメージ・ドライバーの選択を変更するために再コンパイルは不要です。
picoZ80 は複数の Sharp MZ マシン上での動作が実証されています。これらのマシン向け(将来的には他の Z80 システム向けも)にペルソナ群が開発されており、バンク切り替え RAM/ROM・フロッピーディスクエミュレーション・QuickDisk エミュレーション・ROM ファイリングシステム・TranZPUter ファイリングシステムなど、必要とされる機能を同時に使用可能な形で提供します。設定は完全に JSON ベースであり、新しい Z80 ベースのホストへのサポート追加は設定ファイルの編集で行い、新しい I/O 動作が必要な場合は小さな C ドライバーをコードベースに追加するだけです。
  • Z80 ドロップイン交換
    - 任意の Z80 DIP-40 ソケットに装着できます。ホストは常に正常な Z80 バスタイミングを認識します。
  • サイクル精度 PIO バスインターフェース
    - 3 つの RP2350 PIO ステートマシンがアドレス・データ・制御信号を Z80 バスのフル速度で同時に処理します。
  • 大容量メモリ空間
    - 8MB PSRAM を 64 バンク × 64KB として構成し、CPU コンテキストごとにアクセス可能な合計 4MB のバンク切り替えアドレス空間を提供します。
  • ROM/RAM バンキング
    - メモリブロックは 512 バイト単位で設定可能で、ROM・RAM・物理ホストメモリ・仮想関数ハンドラーとしてマッピングできます。
  • 仮想デバイスフレームワーク
    - 任意の 512 バイトのメモリブロックや I/O ポート範囲を C 関数でバックアップでき、完全に仮想化されたペリフェラルを実現します。
  • マシン・ペルソナ
    - Z80 ファームウェアは JSON 設定を通じて任意の Z80 ホスト上で動作するよう設定できます。複数の Sharp MZ マシン(MZ-80K、MZ-700、MZ-800、MZ-80A、MZ-80B、MZ-2000、MZ-2200、MZ-2500、MZ-1500)、Amstrad PCW-9512、Tatung Einstein TC-01 向けのペルソナが利用可能で、さらに picoZ80 を自作ボードや専用ドライバーのないマシンに搭載する実験者向けの OpenZ80 バニラペルソナも用意されています。ターゲット別ビルドバリアント(BaseZ80、SharpZ80、AmstradZ80、TatungZ80、OpenZ80)により、マシン固有のファームウェアでバイナリサイズを削減できます。
  • フロッピーおよび QuickDisk エミュレーション
    - WD1773 互換フロッピーディスクコントローラーと Sharp QuickDisk ドライブエミュレーション。SD カード上の DSK/RAW/D88 イメージを使用します。
  • 仮想カセット(CMT)ユニット
    - Sharp MZ シリーズ向けの波形レベルの仮想カセットデッキです。ローダーではなくテープの波形をエミュレートするため、モニターの LOAD、BASIC、カスタム/ターボローダー、SAVE のいずれも実機のデッキとまったく同じように動作します。最大 16 ファイルまで登録できる、Web GUI からライブ編集可能なキューから .mzf を「実機のカセットのように」ロードしたり、プログラムを SD カード上の新しい .mzf に録音(記録)したりできます。実行時の CMT: Virtual / Real トグルにより、再起動なしで仮想テープと物理的に接続されたデッキとを切り替えられます。詳細はユーザーマニュアルを参照してください。
  • TZFS からのフロッピーブート
    - MZ-80A・MZ-700・MZ-800 のフロッピーディスク(MZ-800 の CP/M を含む)を、TranZPUter ファイリングシステム(TZFS v1.8.3)内から直接ブートできます。フロッピーからブートした OS の使用後は、ハードウェアリセットスイッチで TZFS に戻ります。詳細はユーザーマニュアルを参照してください。
  • 仮想ペリフェラルデバイス
    - サポートチップを設定に宣言するだけで任意のマシンに組み込めます。ファームウェアを書く必要も、はんだ付けをする必要もありません。Zilog Z80 DMA(Z8410)・Z80 CTC(Z8430)・Z80 PIO(Z8420)、Intel 8253/8254 タイマーと 8255 パラレルインターフェース、WD1773 フロッピーコントローラーの正確なモデルに加え、テスト用のシグナルポートも用意されています。チップ同士はネットリストを介して相互に配線できます — 直接つなぐ、固定レベルに結線する、あるいは AND / OR / NOR などの論理条件を介する — 基板上のパターンとゲートでつなぐのとまったく同じです。すべては Web インターフェースから構築でき、チップを追加するたびに配線も自動で行われます。詳細はユーザーマニュアルおよびテクニカルガイドを参照してください。
  • Sharp X1 / X1 Turbo
    - Sharp X1 ファミリー向けの最初のペルソナです。マシンを物理モードで動作させ、2 つの仮想ペリフェラルを追加します:内蔵 MB8877A コントローラー上の SD カードによるフロッピードライブ(おなじみのライブ Virtual/Real デッキトグル付き)と、X1 のサブ CPU トランスポートを介して .tap イメージを再生・録音するサンプルレベルの仮想カセットデッキ(APSS を含む)です。詳細はユーザーマニュアルを参照してください。
  • WiFi および Web 管理
    - オンボード ESP32 が 7 ページ構成の Bootstrap Web インターフェースを提供し、設定・ファイル管理・OTA ファームウェアアップデート・ペルソナ選択が行えます。
  • ICE デバッグシェル
    - USB CDC シリアル経由でアクセス可能な 49 コマンドの ICE デバッガー。ブレークポイント(最大 8 個同時)、シングルステップ実行、実行トレース、Z80 レジスター検査、メモリおよび I/O の読み書き、内蔵 Z80 ディスアセンブラーおよびアセンブラー、ディスクイメージング、バス診断、システムステータス監視を提供します。
  • デュアルファームウェアパーティション
    - 2 つの独立した 5MB ファームウェアスロットにより安全な OTA アップグレードが可能。アクティブパーティションは Web インターフェースまたはブートローダーから選択します。
  • USB ファームウェアアップデート
    - ブートローダーがハードウェアデバッガー不要でファームウェアを書き込める USB ブリッジを公開します。
X (Twitter) プロジェクトプレビュー — picoZ80 の動作

ハードウェア

picoZ80 PCB(リビジョン 2.5)は、Z80 DIP-40 パッケージの物理的なフットプリントと、典型的なレトロコンピューターケース内で利用可能なクリアランスに収まるよう設計されたコンパクトな多層基板です。すべてのロジックは 3.3V で動作し、5V ホストバスに対するレベルシフトと駆動電流の考慮は回路図設計で対応しています。
基板は 1 枚の PCB 上に 5 つのサブシステムを統合しています。RP2350B プロセッサー・Z80 バスインターフェース・ESP32 コプロセッサー・電源回路・USB ハブです。

主要コンポーネント
  • RP2350B(Cortex-M33 デュアルコア)
    - メインプロセッサー。最大 300MHz で動作します。Z80 エミュレーションのホットループをコア 1 で実行し、ファイル I/O・USB・ESP32 リレーをコア 0 で処理します。512KB のオンチップ SRAM を搭載。RP2350A ではなく RP2350B バリアントを採用する理由は、Z80 バス全体に必要な 48 本の GPIO ピンを備えているためです。
  • 16MB SPI Flash
    - ブートローダー・2 つのアプリケーションファームウェアスロット・2 つの設定スロット・汎用設定パーティションを格納します。アドレス可能な全体レイアウトは 0x10000000〜0x11000000 に及びます。
  • 8MB PSRAM(SPI)
    - 外部の擬似スタティック RAM で、エミュレートされる CPU 向けに 64 バンク × 64KB のバンク切り替えアドレス空間を提供します。専用 SPI ペリフェラルを介して RP2350 に接続されます。
  • ESP32 コプロセッサー
    - WiFi(802.11 b/g/n、AP モードおよびクライアントモード)・Bluetooth・SD カードリーダー・Web サーバーを提供します。RP2350 とは 50MHz の FSPI 上のバイナリ IPC プロトコル(CRC32 整合性チェック、事前割り当て DMA チャンネル、1 トランザクションあたり最大 16 セクターのバーストセクター転送付き)と、制御コマンド用の 460.8kbaud UART を介して通信します。
  • SD カードスロット
    - FAT32 で、ESP32 が管理します。config.json・ROM イメージ・ディスクイメージ(DSK、QuickDisk、RAM ディスク)・TZFS/RFS ファイリングシステムツリーを格納します。
  • USB ハブ
    - ホスト接続およびファームウェアアップデートのブリッジングのためのオンボード USB ハブです。
  • 3.3V 電源
    - Z80 ソケットの VCC ピンに存在する 5V から電力を取り出す高効率降圧コンバーター。

基板設計
picoZ80 ハードウェアは KiCad で設計されています。現在のリビジョンは v2.5 です。回路図および PCB レイアウトファイルは、プロジェクトリポジトリの kicad/PICOZ80/ 配下で入手できます。
回路図は 5 枚のシートに分かれています。
シート 1 — RP2350B プロセッサー
すべての RP2350B GPIO 割り当て、デカップリング、12MHz 水晶発振子、16MB Flash、8MB PSRAM 接続。RP2350B QFN-80 パッケージは、その 48-GPIO の本数のために特別に選ばれています — Z80 バス全体(16 アドレス + 8 データ + 12 制御信号)に加えて ESP32 SPI/UART および USB 信号で、利用可能なほぼすべてのピンを消費します。

picoZ80 Schematic Sheet 1 — RP2350B Processor

シート 2 — ESP32 コプロセッサー
ESP32-S3-PICO-1 モジュール、SD カードインターフェース(SPI)、チップアンテナ、デバッグヘッダー、プロセッサー間通信線(50MHz の FSPI バス、460.8kbaud の UART)。SD カード信号とプロセッサー間 SPI/UART はこのシートで明確に分離されています。

picoZ80 Schematic Sheet 2 — ESP32 Co-processor

シート 3 — Z80 バスインターフェース
40 ピン DIP ソケット接続とバスインターフェースの抵抗ネットワーク。アドレス線 A0〜A15、データ線 D0〜D7、およびすべての Z80 制御信号(MREQ、IORQ、RD、WR、M1、RFSH、BUSREQ、BUSACK、HALT、INT、NMI、WAIT、CLK、RESET)は、直列抵抗を介して PIO ステートマシンが監視する専用の RP2350 GPIO ピンへ配線されます。

picoZ80 Schematic Sheet 3 — Z80 Bus Interface

シート 4 — 電源
入出力フィルタコンデンサ付きの TLV62590BV 5V-to-3.3V 同期整流降圧コンバーター。このコンバーターは、Z80 DIP-40 ソケットの単一の 5V VCC ピンから、最大 300MHz の RP2350B・8MB PSRAM・ESP32・USB ハブの合計負荷を供給しなければなりません。

picoZ80 Schematic Sheet 4 — Power Supply

シート 5 — USB ハブコントローラー
Mini-B コネクター・12MHz 水晶・ダウンストリームポートを備えた CH334F USB ハブコントローラー。ダウンストリームポートは RP2350(ファームウェアアップデートのブリッジング用)と ESP32(新しい基板リビジョンでの直接 USB アクセス用)の両方に配線されています。

picoZ80 Schematic Sheet 5 — USB Hub Controller

PCB
PCB は、必要なすべての回路を収め、DIP-40 ソケットの制約内に収まるよう、可能な限り小さく設計されました。
全体サイズを削減するため、手作業で組み立て可能な最小のコンポーネント(すなわち 0402/0603 の受動部品と 0.5mm の IC ピッチ間隔)を使用し、必要なすべてのコンポーネントを収めるために 6 層スタックアップを選択しました。
初期設計の v2.0 と v2.1 は、はんだの点付け・手作業による部品配置・ホットエアリワークステーションで手組みしました。バージョン 2.2 はステンシルとリフローオーブンで手組みしました。v2.3a と v2.5 は PCB Fab で組み立てられました。
PCB 概観
PCB 6 層配線概観
組み立て済み PCB
PCB 部品配置と部品表(BOM)
インタラクティブな PCB 部品配置図と部品表(BOM)を表示するにはこちらをクリックしてください。

アーキテクチャ

デュアルコア設計
RP2350B の 2 つの Cortex-M33 コアには完全に別々の責務が与えられており、コア間メッセージキュー(queue_t)を介して通信します。
コア 0 は、非リアルタイムのタスクをすべて処理します。USB ブリッジと CDC シリアル、ファームウェアアップデートの調整、ファイル I/O(UART 経由で ESP32 へ中継)、ESP32 コマンドのディスパッチ(フロッピー/QuickDisk イメージの変更、設定の再読み込み、バージョン照会)、パーティション管理、ウォッチドッグ監視です。ハードウェアウォッチドッグタイマーがブートシーケンスとメインループを監視し、ウォッチドッグリセットを生き延びる RP2350 スクラッチレジスターを通じてブート進捗を追跡します。包括的なフォルトハンドラーがレジスター状態と診断情報を PSRAM に取得し、ハードフォルト・バスフォルト・ユーセージフォルトのリセット後解析を可能にします。永続的な PSRAM ログ(plogf)は USB が利用可能になる前にブートクリティカルなメッセージを取得し、標準の debugf デバッグ出力システムを補完します。
コア 1 は、CPU エミュレーションのホットループを専有して実行します。PIO FIFO にサービスを提供して Z80 バストランザクションを処理し、各アドレスをメモリマップに対して解決し、トランザクションを物理ホストハードウェアに渡す(PHYSICAL タイプ)か、PSRAM から処理する(RAM/ROM タイプ)か、仮想デバイスハンドラー関数を呼び出します(FUNC タイプ)。このパスのレイテンシは、内側ループを SRAM に保持し、512KB の RP2350 SRAM をメモリブロックポインターの高速ルックアップテーブルとして使用することで最小化されています。

PIO バスインターフェース
Z80 バスインターフェースは完全に RP2350 PIO アセンブリ(z80.pio)で実装されています。RP2350 は 3 つの PIO ブロック(PIO 0、PIO 1、PIO 2)を提供し、それぞれに 4 つのステートマシンがあります。Z80 ファームウェアは 3 つの PIO ブロックすべてを使用します。
  • PIO 0 — アドレスバスおよびデータバス(GPIO 0〜23)
    - 16 ビットのアドレスバス(A0〜A15、GPIO 0〜15)と双方向の 8 ビットデータバス(D0〜D7、GPIO 16〜23)を処理します。ステートマシンは z80_addrz80_data プログラムを同時に実行し、アドレスワードをプッシュしつつデータバイトを駆動またはサンプリングします。
  • PIO 1 — 制御信号・サイクル実行・DRAM リフレッシュ(GPIO 16〜47)
    - 上位 GPIO 範囲に対して主要なバス制御プログラムを実行します。サイクルステートマシン(z80_cycle)は、統合された DRAM リフレッシュ生成を含むすべての Z80 バスサイクルをオーケストレートし、バスリクエスト/アクノリッジ(z80_busrq)、NMI 検出(z80_nmi)、クロック同期(z80_clk_sync)、割り込みアクノリッジ処理(z80_int_ack)を担います。
  • PIO 2 — ホストタイミング・リセット・ウェイトステート
    - コア 1 が内部メモリにサービスを提供している間でも正しく保たれなければならない、RP2350 とホスト Z80 バス間の時間的にクリティカルな相互作用を管理します。PIO 2 では 4 つの専用ステートマシンが動作します。
    • RESET 検出z80_reset)— ホストの RESET 線を監視し、すべてのハードウェアリセット時にエミュレーション状態をクリーンに再初期化できるようコア 1 に通知します。
    • ウェイトステートジェネレーターz80_wait)— ホストバスに /WAIT をアサートすることで、設定可能な T サイクルウェイトステート(tcycwait JSON パラメーターで制御)を挿入し、個々のバスサイクルを引き延ばして、より低速なペリフェラルやバンク切り替え ROM/RAM のタイミング要件に合わせます。
    • T1 同期z80_sync)— 各バスサイクルにおける T1 の立ち上がりエッジ(Z80 が有効なアドレスをバス上に置く時点)を検出し、IRQ を介してコア 1 に通知します。この同期は、ホストクロックに依存して正確なタイミングを取るアプリケーション(ソフトウェアによる遅延ループや、カセットモーター制御・シリアルのビットバンギングなどタイミングに敏感な I/O を含む)にとって不可欠であり、RP2350 の内部メモリ操作が知覚可能なタイミングドリフトをもたらさないことを保証します。
z80.pio 内の PIO プログラム一式を、PIO ブロックごとにグループ化したものです。
PIO プログラム 機能
0 z80_addr 16 ビットアドレス(A0〜A15)をバスに出力し、サイクル開始を通知します。
0 z80_data D0〜D7 を駆動またはサンプリングし、BUSRQ 中はトライステート制御を行います。
0 z80_cycle トップレベルのバスサイクルシーケンサー — フェッチ・リード・ライト・I/O・DRAM リフレッシュの各サイクルをオーケストレートします。
0 z80_fetch オペコードフェッチのバスサイクル(M1 + MREQ + RD)。
1 z80_mem_read メモリリードのバスサイクル(MREQ + RD)。
1 z80_mem_write メモリライトのバスサイクル(MREQ + WR)。
1 z80_io_read I/O リードのバスサイクル(IORQ + RD)。
1 z80_io_write I/O ライトのバスサイクル(IORQ + WR)。
1 z80_busrq BUSREQ/BUSACK を管理し、/IORQ、/MREQ、/RFSH、/M1、/HALT、/WR、/RD を解放します。
1 z80_nmi NMI のアサートを検出し、コア 1 に通知します。
1 z80_clk_sync PIO ステートマシンを Z80 の CLK 信号に同期させます。
1 z80_int_ack 割り込みアクノリッジサイクル(M1 + IORQ)を処理します。
2 z80_reset ホストの RESET 線を監視し、エミュレーション状態を再初期化するようコア 1 に通知します。
2 z80_wait ホストバスに設定可能な T サイクルウェイトステートを挿入します(tcycwait で制御)。
2 z80_sync 各バスサイクルで T1 を検出して IRQ 経由でコア 1 に通知し、内部メモリ操作をホストクロックに同期させます。
ステートマシンはポーリングではなく PIO IRQ フラグを介して通信するため、マシン間のレイテンシが排除されます。IRQ 0 はアドレス/サイクル開始を、IRQ 1 はデータフェーズを、IRQ 2 は T1 検出を、IRQ 3 は RESET イベントを、IRQ 4 は NMI を、IRQ 6 はアクティブな BUSRQ を通知します。
PIO プログラムは Cortex-M33 コアとは独立して実行されるため、コア 1 が PSRAM アクセスや仮想デバイス呼び出しで占有されている場合でも、バスインターフェースは決定論的に応答し続けます。

3 階層メモリモデル
メモリアクセスは、レイテンシが増加していく 3 つの階層を通じて解決されます。
階層 1 — RP2350 SRAM(512KB、ゼロウェイトステート)
64KB の Z80 アドレス空間全体の 512 バイトブロックごとに 1 つずつ、128 エントリの 32 ビット membankPtr 値の配列があり、コア 1 にすべてのバストランザクションに対する O(1) のブロックタイプルックアップを提供します。この配列が内側のディスパッチテーブルです。各エントリはブロックタイプと、PSRAM 裏付けブロックの場合は PSRAM オフセットをエンコードします。
階層 2 — 外部 PSRAM(8MB、SPI)
PSRAM は 64 バンクの 64KB RAM または ROM イメージに加えて、64KB の memPtr ポインター配列、64KB の memioPtr 関数ポインター配列、64KB の ioPtr I/O 関数ポインター配列を保持します。PSRAM アクセスレイテンシは決定論的で、DMA を備えた RP2350 の SPI ペリフェラルを介して処理されます。
階層 3 — 16MB SPI Flash
ファームウェア・ROM イメージ・最小化された config.json は Flash に格納されます。ROM イメージはブート時に Flash から PSRAM へコピーされ、実行時には PSRAM から提供されます。Flash は通常の Z80 バストランザクション中にはアクセスされません。
メモリブロックは 512 バイト単位で設定されます。利用可能なブロックタイプは次のとおりです。
タイプ 説明
PHYSICAL 実際のホストハードウェアへのパススルー — RP2350 がバスを解放し、物理ホストメモリに応答させます。
PHYSICAL_VRAM PHYSICAL と同様だが、ホストビデオ RAM のタイミングのために追加のウェイトステートを伴います。
PHYSICAL_HW ホストハードウェアレジスター向けのパススルー。
RAM 読み書き可能 — PSRAM バンクで裏付けられます。
ROM 読み取り専用 — PSRAM バンクで裏付けられ、ライトサイクルは黙って無視されます。
VRAM PSRAM 裏付けのビデオ RAM。ライトサイクルは物理ホスト VRAM にもミラーリングされます。
FUNC 仮想デバイス — アクセスごとに C 関数呼び出しがトリガーされ、任意の I/O エミュレーションを実現します。
PTR バイト単位リダイレクト — 512 バイトブロックの各バイトが他の任意のブロックやタイプを指せます。
Flash メモリレイアウト
16MB の Flash は次のようにパーティション分割されています。
パーティション アドレス範囲 サイズ 内容
Bootloader 0x10000000–0x1001FFFF 128KB USB ブリッジ、ファームウェアアップデート、パーティションセレクター
App Slot 1 0x10020000–0x1051FFFF 5MB メイン Z80 ファームウェア(パーティション 1)
App Slot 2 0x10520000–0x10A1FFFF 5MB メイン Z80 ファームウェア(パーティション 2)
App Config 1 0x10A20000–0x10C9FFFF 2.5MB ROM イメージ + 最小化 config JSON(スロット 1)
App Config 2 0x10CA0000–0x10F1FFFF 2.5MB ROM イメージ + 最小化 config JSON(スロット 2)
General Config 0x10F20000–0x10FFEFFF 892KB コア設定、スクラッチ領域
Partition Table 0x10FFF000–0x11000000 4KB アクティブスロット、チェックサム、メタデータ
各設定スロットは、最大 64 個の ROM イメージと 64KB の最小化 JSON 設定を保持できます。アクティブスロットはパーティションテーブルに記録され、Web インターフェースから、またはブート時に適切なボタンを押し続けることで切り替えられます。

マシン・ペルソナ

アクティブなペルソナは、Web インターフェースの Personality ページから、または config.json を編集することで選択します。
ペリフェラルおよびファイリングシステムドライバー
ファームウェアは、マシン固有のバイナリを生成するターゲット別ビルドシステムをサポートしています。pZ80-BaseZ80 はすべてのドライバー(Sharp + Amstrad + Tatung)を含み、pZ80-SharpZ80 は Sharp MZ ドライバーのみを含み、pZ80-AmstradZ80 は Amstrad PCW ドライバーのみを含み、pZ80-TatungZ80 は Tatung Einstein ドライバーのみを含み、pZ80-OpenZ80 はマシン非依存のインターフェースカードのみを公開するバニラ/実験者向けペルソナです(下記の OpenZ80 — 実験者向けペルソナ を参照)。各ターゲットはコンパイル時定義(INCLUDE_SHARP_DRIVERSINCLUDE_AMSTRAD_DRIVERSINCLUDE_TATUNG_DRIVERSINCLUDE_OPEN_DRIVERS)で制御されます。以下のペリフェラルドライバーが利用可能です。
Sharp MZ シリーズ
INCLUDE_SHARP_DRIVERS 付きでビルドすると、以下の Sharp ペリフェラルドライバーがコンパイルされ、JSON 設定を通じて任意の仮想ハードウェアペルソナにバインドできます。
  • MZ700.c — Sharp MZ-700 ペリフェラルセット
    - MZ-700 に特徴的なバンク切り替え・ビデオ・キーボード I/O をペリフェラルレベルで処理します。
  • MZ80K.c — Sharp MZ-80K ペリフェラルセット
    - Sharp が 1978 年に発売したオリジナルの MZ-80K のエミュレーションで、MZ-80A ドライバーをモデルとしています。SP-1002 モニター ROM(0x0000〜0x0FFF)、2KB VRAM(0xD000〜0xD7FF)、8255 PPI、8253 PIT、LS367 キーボードスキャナー(0xE000〜0xE7FF)、およびネイティブの MZ-80FD/MZ-80FIO フロッピーブート ROM 領域(0xF000〜0xF3FF)を提供します。MEMSW/MEMSWR メモリスワップ(SP-1002 モニターを 0x0000 と 0xC000 の間で再配置)を実装し、CP/M を動作可能にします。物理(実機 MZ-80K へのドロップイン交換)と仮想(PSRAM ベース)の両方の動作をサポートします。オリジナルの MZ-80K にはメモリスワップハードウェアがないため、CP/M には仮想モード(またはドライバーごとのメモリリマップパス)が必要です。MZ-80K は、自身のネイティブフロッピーコントローラーに加えて、MZ-80A のインターフェースカード一式をバインドできます。2 つの異なるフロッピーパスがサポートされます。(1) ネイティブの MZ80FIO インターフェース(東芝 T3444M コントローラー)— オリジナルの MZ-80FD ディスクインターフェース — は、ゲーム・アプリケーション・BASIC・CP/M を含むすべての MZ-80K ディスクをブートして読み取ります。(2) MZ80AFI カード(MZ-80A の WD ベース FDC)は CP/M で使用され、MZ-80K CP/M をブートでき、CP/M 内からオリジナルの MZ-80K CP/M ディスク(C:/D: ドライブとしてマウント)を読み取れます。一般的な MZ-80K ディスク使用には MZ80FIO を、CP/M 実行時には MZ80AFI を使用してください。サブインターフェース: RFS、MZ80FIO(ネイティブ T3444M フロッピー)、MZ80AFI、MZ-1E14、MZ-1E19、MZ-1R12、MZ-1R18、MZ-1R37、PIO-3034。
  • MZ80A.c — Sharp MZ-80A ペリフェラルセット
    - SA-1510 モニター ROM、2KB VRAM、Intel 8253 PIT(6 つのカウンターモードすべてを備えたプログラマブルインターバルタイマー)、Intel 8255 PPI(プログラマブルペリフェラルインターフェース)、LS367 キーボードスキャナー、および CP/M サポート用の MEMSW/MEMSWR メモリスワップ機構(0x0000 のモニター ROM を 0xC000 の RAM とスワップ)を含む、完全な MZ-80A マシンエミュレーション。物理(実ハードウェア)と仮想(PSRAM ベース)の両方の動作をサポートし、ドライバーは仮想で動作しつつ物理フロッピーコントローラーを使用する混合モードも含みます。サブインターフェース: RFS、MZ80AFI、MZ-1E14、MZ-1E19、MZ-1R12、MZ-1R18。
  • MZ2000.c — Sharp MZ-2000 ペリフェラルセット
    - ブート/通常メモリモード切り替え(BST/NST)、バンク選択付きキャラクター/グラフィック VRAM オーバーレイ、Intel 8253 PIT(4 MHz)、Intel 8255 PPI(カセットおよびメモリモード制御)、Z80 PIO(キーボードおよび VRAM ページング)、MB8866 FDC を備えた完全な MZ-2000 マシンエミュレーション。物理モード(自動ブート/通常モード検出付きの実機 MZ-2000 へのドロップイン Z80 交換)と仮想モード(IPL ROM ミラーリング付きの完全な PSRAM ベースエミュレーション)の両方をサポートします。サブインターフェース: RFS、MZ80AFI、MZ-1E14、MZ-1E19、MZ-1R12、MZ-1R18。
  • MZ2200.c — Sharp MZ-2200 ペリフェラルセット
    - 8253 PIT、8255 PPI、Z80 PIO、MB8866 FDC、カラー CRT を備えた、MZ-2000 アーキテクチャベースの MZ-2200 マシンエミュレーション。VRAM オーバーレイ付きの BST/NST メモリモード切り替えをサポートします。サブインターフェース: RFS、MZ-8BFI/E0054PA、MZ-1E14、MZ-1E19、MZ-1R12、MZ-1R18。
  • MZ80B.c — Sharp MZ-80B ペリフェラルセット
    - 2K IPL ROM、BST/NST モード切り替え、デュアルグラフィック VRAM ページ付きモノクロディスプレイ、8253 PIT(31.25 kHz)、8255 PPI、Z80 PIO、グラフィックページ選択を備えた MZ-80B マシンエミュレーション。10 個すべての拡張ボードインターフェースをサポートします。サブインターフェース: MZ-8BFI/E0054PA、MZ-1E14、MZ-1E19、MZ-1R12、MZ-1R18、MZ-1R23、MZ-1R37、PIO-3034、Celestite、MZ-1E30。
  • MZ2500.c — Sharp MZ-2500(SuperMZ)ペリフェラルセット
    - 8 ページ MMU(64 メモリブロック)、互換モード(MZ-2000、MZ-80B、ネイティブ)、OPN YM2203 FM+PSG サウンド、G-CRTC グラフィックスコントローラー、MB8876 FDC、16 エントリのグラフィックパレット、割り込みコントローラー、RTC、ジョイスティックポートを備えた MZ-2500 マシンエミュレーション。仮想モードは、物理 M1 バスサイクルを実行するカスタム fetchByte および RETI ハンドラー(ゲートアレイの M1 タイミング内部クロックに必要)を介した割り込み駆動ソフトウェア、スパース/連続の自動検出付き D88 ネイティブディスクフォーマット、初期化中のワンショット割り込み抑制をサポートします。サブインターフェース: MZ-8BFI/E0054PA、MZ-1E14、MZ-1E19、MZ-1R12、MZ-1R18、MZ-1R23、MZ-1R37、PIO-3034、Celestite、MZ-1E30。
  • MZ1500.c — Sharp MZ-1500 ペリフェラルセット
    - 内蔵 Quick Disk ドライブ、プログラマブルキャラクタージェネレーター(PCG)、ステレオ PSG サウンド(SN76489AN)、Z80 PIO プリンターインターフェース、8253 PIT、DIP スイッチによる MZ-700/MZ-1500 モード選択を備えた MZ-700 のスーパーセット。サブインターフェース: RFS、MZ-1E05、MZ-1E14、MZ-1E19、MZ-1R12、MZ-1R18、MZ-1R23、MZ-1R37、PIO-3034、Celestite。
  • MZ800.c — Sharp MZ-800 ペリフェラルセット
    - MZ-700 互換モードまたはネイティブ MZ-800 モードで動作し、GDG(Graphics Display Generator)の表示モードレジスター(ポート 0xCE)を介してオンザフライで切り替わるデュアルモードドライバー。ネイティブモードでは、4 色または 16 色パレット(VRAM プレーンは 0x8000〜0xBFFF)の 320×200 / 640×200 グラフィック、SN76489 PSG サウンド(ポート 0xF2)、メモリバンキングポート 0xE0〜0xE6、WD1773 FDC と QuickDisk が追加されます。MZ-700 モードでは、MZ-700 ソフトウェアと CP/M を動作させるためのメモリマップド 8255/8253 とテキスト VRAM を提供します。仮想モード時には実バス上で物理 RETI を再生することで、Z80-PIO 割り込みデイジーチェーン(IM2)が PSRAM から動作し続けます。サブインターフェース: RFS、MZ80FIO、MZ80AFI、MZ-1E05、MZ-1E14、MZ-1E19、MZ-1E30、MZ-1R12、MZ-1R18、MZ-1R23、MZ-1R37、MZ-8BFI、PIO-3034、Celestite、MZ-8BIO3、MZ-1E24。
  • WD1773.c — フロッピーディスクコントローラー
    - SD カードに格納された DSK・RAW・D88 フォーマットの 80 トラック・2 ヘッド・トラックあたり 8 セクターのディスクイメージをサポートする WD1773 FDC をエミュレートします。WD1773 レジスターは FUNC タイプの I/O ブロックとしてマッピングされます。
  • T3444M.c — 東芝 T3444M/T3444A フロッピーディスクコントローラー(MZ-80K)
    - Sharp MZ-80K の MZ-80FD フロッピーユニットで使用される東芝 T3444M/T3444A FDC をエミュレートします。MZ-80K のネイティブジオメトリ(35 トラック、2 ヘッド、トラックあたり 16 セクター、128 バイトの FM セクター)で CPC 拡張 DSK イメージを読み取り、最大 4 台の同時ドライブイメージに対応します。MZ-80K の CPC-DSK トラックサイズテーブルは信頼できないため、専用の DSK パーサーがディスク上の Track-Info シグネチャを辿ります。MZ80FIO インターフェースで使用され、MZ-80K のオリジナル/ネイティブコントローラーとして、CP/M だけでなくあらゆる種類の MZ-80K ディスクをブートして読み取ります。
  • MZ80FIO.c — MZ-80FD / MZ-80FIO フロッピーディスクインターフェース(MZ-80K)
    - 東芝 T3444M コントローラーを使用して、Sharp MZ-80FD/MZ-80FIO インターフェース — オリジナルの MZ-80K ディスクインターフェース — をエミュレートします。0xF000〜0xF3FF に FDIF ブート ROM を、0xF8〜0xFB に T3444M のレジスターおよびコマンドポートを提供します。すべての MZ-80K ディスク(ゲーム・アプリケーション・BASIC・CP/M)をブートして読み取り、最大 4 ドライブと Web インターフェースからの実行時ディスク交換をサポートします。CP/M を実行する場合は、代わりに MZ-80A の MZ80AFI コントローラーを使用できます。フロッピーインターフェースは一度に 1 つだけアクティブになり、両方が設定されている場合は MZ80FIO が優先されます。
  • QDDrive.c — QuickDisk ドライブ
    - SD カード上の QD イメージファイルを使用して、Sharp QuickDisk のシーケンシャルアクセス小型ドライブをエミュレートします。ドライバーは完全な Z80 SIO/2 エミュレーション(チャンネル A はスパイラルトラックデータ、チャンネル B はモーター/ステータス制御)を提供し、ハントフェーズの同期バイト検出、RTS によるモーター制御、SD カードアクセスのためのコア間非同期ファイル操作を備えています。
  • CMT.c — 仮想カセット(CMT)ユニット
    - すべての Sharp MZ ペルソナがバインド可能なインターフェースとして共有する、波形レベルの仮想カセットデッキです。ローダーではなくテープの波形をエミュレートするため、Sharp 側から見ると実機のデッキと区別がつきません — モニターの LOAD、BASIC、カスタム/ターボローダー、SAVE のいずれもそのまま動作します。1 つのドライバーエンジンが 2 つのハードウェアファミリーに対応します。シンプルファミリー(MZ-80K / MZ-80A / MZ-700 / MZ-800、8255 によるモーター オン/オフ、1200 ボー)と、制御ファミリー(MZ-80B / MZ-2000 / MZ-2200 / MZ-2500、コンピューター制御による PLAY/STOP/FF/REW/EJECT に加え APSS プログラムサーチ、2000 ボー)です。仮想テープは最大 16 個の MZF ファイルからなる Web GUI から編集可能なキューで、プログラム間を自動的に進めます(連続テープの挙動)。録音(記録)時はライトデータ線をサンプリングし、デコードおよびチェックサム検証を行って MZF を合成し、SD カードに CMT/taperecord_<name>_<timestamp>.mzf として保存します。Web GUI の Actions メニューにある実行時の CMT: Virtual / Real 項目は、ライブのドライバーフラグを切り替えます。Virtual は仮想カセットをオーバーレイし、物理デッキへのトランスポート書き込みを抑制します。Real は純粋な読み取り専用パススルーです — したがって、仮想テープからロードして物理デッキに SAVE したり、その逆を行ったりできます。詳細はユーザーマニュアルを参照してください。
  • RFS.c — ROM ファイリングシステム
    - RFS のバンキングおよびファイリングインターフェースを実装し、SD カードから MZF プログラムファイルをロードできるようにします。RFS ペルソナには CP/M v2.23(48K)、カスタムの SA-1510 BASIC インタープリター、Microsoft BASIC v4.7 が含まれ、いずれも SD カード読み書きアクセスで拡張されているため、カセットやフロッピーのハードウェアなしで SD カードから直接プログラムやデータをロード・保存できます。
  • TZFS.c — TranZPUter ファイリングシステム
    - tranZPUter SW の TZFS とその K64F 仮想 I/O プロセッサーをモデルとした、動作するマルチバンクの低レベルモニター兼ファイリングシステムで、MZ-700 ペルソナ上の選択可能なインターフェースとして提供されます(MZ700.c 内で RFS と並んで登録され、実際には RFS と排他的に使用されます)。オリジナルの MONITOR 1Z-013A を SD カードアクセス、ROM バンキング、アセンブラー / ディスアセンブラーおよびツールで拡張し、モニターの下で CP/M をブートします。マシンのメモリモードは、tranZPUter モード(TZMM_ORIG/BOOT/TZFS/TZFS2/TZFS3/TZFS4/CPM/CPM2/COMPAT)を I/O ポート 0x60 に書き込むことで切り替えられ、バンクポインターが再設定されます。Z80 は OUT (0x68) でファイリングシステムおよび CP/M サービスを要求し、これが Core 0 へサービスリクエストをキューイングします(ディレクトリ一覧、ファイルロード、および CP/M ドライブサービス)。picoZ80 には直接の SD アクセスがないため、CP/M の 512 バイトセクターは ESP32 を介してイメージ全体のファイルに対して読み書きされ、ドライブごとのイメージパスはインターフェース JSON の param[].file エントリから取得されます(フォールバックテンプレートは CPM/SDC16M/RAW/CPMDSK<nn>.RAW)。TZFS ROM は SD カード上の roms/tzfs.bin で、付属の TZFS プロジェクトの TZFS/asm/tzfs.asm からアセンブルされます。config_MZ-700_MZ-700.json"enable": 0 で同梱されており — 存在するがデフォルトではオフ — JSON または Web GUI の設定ページからオンに切り替えられます。TZFS v1.8.3 以降では、モニター内から MZ-80A / MZ-700 / MZ-800 のフロッピーディスク(MZ-800 の CP/M を含む)を直接ブートすることもでき、フロッピーからブートした OS の使用後はハードウェアリセットスイッチで TZFS に戻ります — 詳細はユーザーマニュアルを参照してください。
  • MZ-1E05.c — フロッピーディスクインターフェースユニット
    - WD1773 FDC をベースとした Sharp MZ-1E05 フロッピーディスクコントローラーユニットをエミュレートします。
  • MZ8BFI.c — MZ-8BFI / E0054PA フロッピーディスクインターフェース(MZ-2000)
    - MB8866/WD1773 互換 FDC を使用して MZ-2000 のフロッピーディスクインターフェースをエミュレートします。MZ-1E05 とは異なり、MZ-8BFI にはオンボードのドライバー ROM がありません — FDC コードは MZ-2000 IPL ROM 内に存在します。D88 ディスクイメージフォーマットをサポートします。40 シリンダー、2 ヘッド、トラックあたり 16 セクター、256 バイトセクター。
  • MZ-1E14.c — BIOS ROM 付き QuickDisk コントローラー(MZ-700 / MZ-800)
    - MZ-700 および MZ-800 マシン向けのオンボード BIOS ROM を含む MZ-1E14 QuickDisk コントローラーをエミュレートします。
  • MZ-1E19.c — BIOS ROM なし QuickDisk コントローラー(MZ-800 / MZ-2000 / MZ-2200 / MZ-2500)
    - オンボード BIOS ROM を持たず、MZ-800・MZ-2000・MZ-2200・MZ-2500 マシンを対象とする MZ-1E19 QuickDisk コントローラーをエミュレートします。
  • MZ-1R12.c — 32KB バッテリーバックアップ RAM ボード
    - Sharp MZ-1R12 32KB バッテリーバックアップ RAM 拡張をエミュレートします。実際のバッテリーを使う代わりに、RAM イメージを SD カードに永続化し、SD カードから復元します。このボードは、長いカセットロード時間を避けてブート時にアプリケーションを即座に利用可能にするために、アプリケーションの格納によく使われます。
  • MZ-1R18.c — 64KB RAM ボード
    - Sharp MZ-1R18 64KB RAM 拡張をエミュレートします。通常はプログラム格納用の RAMFILE ディスクとして、または標準アドレス空間を超えるメモリを必要とするカスタムアプリケーション向けの追加メモリとして使用されます。
  • MZ-1R23.c — MZ-1R23 漢字 ROM / MZ-1R24 辞書 ROM
    - 128KB の漢字 ROM(16×16 JIS パターン)とオプションの 256KB 辞書 ROM ボードをエミュレートします。ROM ファイルは SD カードからロードされます。I/O ポート B8h〜B9h、オートインクリメント読み取り付き。
  • MZ-1R37.c — MZ-1R37 640KB EMM(拡張メモリマネージャー)
    - 20 ビットアドレス空間と I/O ポートアドレスラッチングを備えた 640KB 拡張メモリボードをエミュレートします。
  • PIO-3034.c — IO DATA PIO-3034 320KB EMM
    - 19 ビットアドレスカウンターとオートインクリメントデータポートを備えた 320KB 拡張メモリボードをエミュレートします。
  • Celestite.c — Celestite LAN / メモリ複合ボード
    - Wiznet W5100 イーサネットコントローラー(レジスターファイル)、割り込みコントローラー、UFM 永続ストレージ、統合された MZ-1R12 32KB CMOS RAM(64KB まで拡張可能)、オプションの MZ-1R37 640KB EMM をエミュレートします。I/O ポート 60h〜6Fh。netfs.py ファイルサーバーのアドレスは JSON の ip パラメーター(例: "192.168.1.210:6800")で設定可能です。フェーズ 2 の実装は ESP32 ブリッジを介した実際の TCP/IP ネットワーキングを提供します — W5100 ソケットコマンド(OPEN、CONNECT、LISTEN、SEND、RECV、CLOSE)が ESP32 に転送され、ESP32 が実際の BSD ソケット操作を行うことで、Celestite ボードが netfs.py ファイルサーバーなどのネットワークサービスと通信できるようになります。
  • SASI.c + MZ1E30.c — MZ-1E30 SASI ハードディスクインターフェース
    - MZ-2500/MZ-80B 向けの Sharp MZ-1E30 SASI ハードディスクコントローラーをエミュレートします。最大 4 つのディスクターゲット(各約 21.4 MB、256 バイトブロック)、32KB IPL ROM、SD カードディスクイメージからのオンデマンドセクター I/O をサポートします。SASI コマンド: TEST_UNIT_READY、REQUEST_SENSE、READ(6)、WRITE(6)、SEEK(6)、INQUIRY。I/O ポート 0xA4〜0xA5(SASI バス)、0xA8〜0xA9(ROM アクセス)。
  • MZ8BIO3.c / MZ1E24.c — RS-232C シリアルインターフェースカード
    - エミュレートされた Zilog Z80 SIO を基盤とするデュアルチャンネルシリアルカード。ポート 0xB0〜0xB3(ベースアドレス設定可能): チャンネル A は 0xB0/0xB1、チャンネル B は 0xB2/0xB3。チャンネル A は USB CDC シリアルポート 2 に、チャンネル B は USB CDC シリアルポート 3 にブリッジされるため、ホスト PC 上のターミナル・モデム・ファイル転送プログラムが Sharp のシリアルソフトウェアと通信できます。MZ-8BIO3 は「BI」コネクター配線を、MZ-1E24 は Sharp の「ST」配線を使用しますが、それ以外は同一です。ROM はありません。MZ-700、MZ-800、MZ-80B、MZ-1500 の各ペルソナで利用可能です。
  • Z80SIO.c — Zilog Z80 SIO/2 エミュレーション
    - レジスター精度の Z80 SIO(WR0〜WR7、RR0〜RR2、4 レベルのイン・サービスデイジーチェーンを備えた Z80 モード 2 ベクター割り込み)で、MZ-8BIO3 および MZ-1E24 カードで使用されます。ロックフリーのシングルプロデューサー/シングルコンシューマーリングバッファを使用して、Z80 エミュレーション(コア 1)と USB CDC サービス(コア 0)の間でバイトを移動します。
Amstrad PCW シリーズ
INCLUDE_AMSTRAD_DRIVERS 付きでビルドすると、以下の Amstrad ペリフェラルドライバーがコンパイルされます。
  • PCW9512.c + uPD765.c — Amstrad PCW-9512 ペリフェラルセット
    - ゲートアレイ(ASIC)、NEC uPD765 FDC(CPC DSK フォーマット)、4 バンク 16KB ページング付き 512KB RAM、8041 デイジーホイールプリンターコントローラー、ブートストラップシーケンスエミュレーション、物理ディスクイメージングを備えた完全な Amstrad PCW-9512 エミュレーション。仮想モードと物理モードをサポートします。
Tatung Einstein シリーズ
INCLUDE_TATUNG_DRIVERS 付きでビルドすると、以下の Tatung ペリフェラルドライバーがコンパイルされます。
  • EinsteinTC01.c + EinsteinFDC.c + WD1770.c — Tatung Einstein TC-01 ペリフェラルセット
    - Z80A @ 4MHz、64KB RAM + 8KB 切り替え可能 ROM(X-TAL MOS)、ポート 0x24 経由の ROM/RAM トグル(任意のアクセスでトグル。書き込みは常に RAM へ)、仮想ディスクサポート付き WD1770 FDC(40 トラック、1 ヘッド、10 セクター、512 バイト — 200KB ディスク)、アクセス間タイミング強制(約 2us のギャップ)付き TMS9129 VDP(ビデオディスプレイプロセッサー)、ポート 0x02-0x03 の AY-3-8910 PSG(3 チャンネルサウンド)、ポート 0x28-0x2B の Z80 CTC(4 チャンネル)、ポート 0x30-0x33 の Z80 PIO、ポート 0x20 のキーボードインターフェース、物理ディスクイメージング(物理フロッピーを DSK に読み取り、DSK を物理フロッピーに書き込み)を備えた完全な Tatung Einstein TC-01 エミュレーション。仮想モードと物理モードをサポートします。サブインターフェース: EinsteinFDC(2 ドライブ、DSK/D88 フォーマットサポート)。
OpenZ80 — 実験者向けペルソナ
INCLUDE_OPEN_DRIVERS 付き(OpenZ80 ターゲット)でビルドすると、ファームウェアはマシン固有のハードウェアを一切持たない意図的に「バニラ」な Z80 ペルソナ(src/drivers/Other/Open.c)を提供します。その主な価値は、他の Sharp、Amstrad、Tatung マシンから借用した仮想インターフェースカードを、専用に設計された、あるいはその他のサポートされていない Z80 コンピューターに追加できることです — これにより、それらのカード向けに新しいソフトウェアを書いたり、既存のソフトウェアを自分のマシンで動作するよう適応させたりできます。これは 2 種類の実験者向けです。
  • 独自の Z80 ボードを設計している場合 — picoZ80 を 40 ピンソケットに挿し込むだけで、素の Z80 として動作させられます。物理モードでは 64K のアドレス空間と I/O 空間全体がそのままボードへ通過し、有効化したマシン非依存のインターフェースカードはその I/O ポートに重ねられます。仮想モードでは OpenZ80 はフラットな 64K RAM を提示し、そこへ 0x0000 から自作の ROM イメージを 1 つ以上順に読み込めるため、メモリや ROM を自前で持たないボードを立ち上げられます。
  • 専用の picoZ80 ドライバーがない Z80 コンピューターを持っている場合 — OpenZ80 と既存のマシンドライバーの 1 つをベースに始め、それを自分のマシン向けに改変します(下記参照)。
OpenZ80 はペルソナ固有のサポートを必要としないインターフェースカードのみを公開し、そのいずれもボードに合わせてベース I/O ポートを再配置できます(再配置可能なインターフェース I/O ポートを参照): MZ-1R12MZ-1R18MZ-1R23MZ-1R37 のメモリ / RAM ファイル / 漢字カード、PIO-3034 パラレル EMM、MZ-8BIO3 / MZ-1E24 RS-232C シリアルカード(Z80 SIO)、MZ-1E05 WD1773 フロッピーインターフェース、Celestite ESP32 LAN ボードです。build_tzpuPico.sh open でビルドします。
既存のドライバーや BIOS をベースにする
picoZ80 を新しいマシンに適応させるには、付属のドライバーの 1 つを出発点として改変します。ペルソナドライバーは src/drivers/ 配下にあり、Sharp マシンは src/drivers/Sharp/(例: MZ700.cMZ80A.cMZ80K.cMZ2000.c)、Amstrad PCW は src/drivers/Amstrad/PCW9512.c、Tatung Einstein は src/drivers/Tatung/EinsteinTC01.c、バニラペルソナは src/drivers/Other/Open.c にあります。自分のマシンに最も近いものを選び、そのメモリマップ、I/O ハンドラー、ROM レイアウトを編集してください。 対応するモニター、IPL、CP/M BIOS、フロッピーブート ROM は、コメント付きの Z80 アセンブラーソースとして関連する RFSTZFS プロジェクトの asm/ ディレクトリに提供されているため、自分のマシン向けに再ビルドやパッチができます。
  • モニター ROMRFS/asm/sp1002.asm(MZ-80K SP-1002)、RFS/asm/sa1510.asm(MZ-80A SA-1510)、RFS/asm/1z-013a.asmTZFS/asm/1z-013a.asm(MZ-700)、RFS/asm/mz800_iocs.asm(MZ-800 IOCS)。
  • ブートローダー(IPL)TZFS/asm/mz2000_ipl.asm(MZ-2000)、TZFS/asm/mz80b_ipl.asm(MZ-80B)、RFS/asm/ipl.asm
  • CP/M BIOSRFS/asm/cbios.asmRFS/asm/cpm22-bios.asmTZFS/asm/cbios.asm / cbiosII.asm も)。
  • フロッピー / QuickDisk ブート ROMRFS/asm/mz80afi.asm(MZ-80A FDC)、TZFS/asm/mz80kfdif.asm(MZ-80K FDIF)、RFS/asm/mz-1e05.asmRFS/asm/mz-1e14.asm(QD)、RFS/asm/sfd700.asm
  • ファイリングシステム ROM — RFS ROM そのもの(RFS/asm/rfs.asm、バンク方式)と TZFS ROM(TZFS/asm/tzfs.asm、バンク方式)は、カスタムの ROM 内ファイリングシステムのベースとして利用できます。
ドライバーの作成や適応の手順を追った実例については、デベロッパーズガイドを参照してください。
その他の Sharp MZ ペルソナや他の Z80 ベースマシンのサポートも、追って追加されます。
JSON 設定内には複数のペルソナを共存させることができ、それぞれが異なる PSRAM バンクに関連付けられます。ペルソナを切り替えると、ホストを再起動することなくアクティブなメモリマップとロード済み ROM イメージが変更されます。

ネットワークファイルサーバー(netfs.py)
picoZ80 プロジェクトには、Windows または Linux PC 上で動作し、Sharp MZ BASIC の NETx: デバイスへ MZF プログラムファイルをネットワーク経由で提供する Python ベースのネットワークファイルサーバー(tools/NetFileServer/netfs.py)が含まれています。picoZ80 に Celestite ボード(または仮想 Celestite ドライバー)が装着されている場合、MZ 上で動作する BASIC プログラムは、NETx: デバイスプレフィックス付きの標準 BASIC コマンドを使用して、PC のファイルシステムからファイルをロード・保存・一覧表示できます。
python3 netfs.py [--port 6800] [--dir ./mzf_files] [--dir2 path] ... [--dir7 path]
サーバーはユニット 1〜7(NET1: から NET7:)をサポートし、それぞれが PC 上の別々のディレクトリにマッピングされます。サポートされるコマンド: DIR(ディレクトリ一覧)、READ(ファイルデータのロード)、WRITE(ファイルの保存)、INFO(ファイルメタデータ)、DELETE、CLOSE。サーバーはマルチスレッドで、MZF ヘッダーの解析と作成を処理し、クラッシュ回復のための 30 秒の接続タイムアウトを備えています。

ビルド手順

picoZ80 ファームウェアをビルドする最も簡単な方法は、お使いのプラットフォーム向けの自動セットアップスクリプトをダウンロードして実行することです。すべての依存関係をインストールし、リポジトリをクローンし、パスを設定し、すぐに使えるビルドスクリプトを作成します — 手動設定は不要です。
自動セットアップ — Linux / macOS
任意のディレクトリからセットアップスクリプトをダウンロードして実行します。インストール先(デフォルト: ~/pico)の入力を求められます。
curl -O https://git.eaw.app/eaw/pico/raw/branch/master/setup_picoZ80.sh
chmod +x setup_picoZ80.sh
./setup_picoZ80.sh
スクリプトは以下を実行します。
  • OS(Debian/Ubuntu、Fedora/RHEL、Arch/Manjaro、macOS)を検出し、必要なパッケージ(CMake、ARM クロスコンパイラー、Git、Python、Perl、rsync)をインストールします。
  • picoZ80 リポジトリ、Pico SDK(develop ブランチ)、Pico Examples、Pico Extras をすべてのサブモジュールとともにクローンします。
  • 正しいパスでビルドスクリプトを設定し、picoZ80 ボードヘッダーを SDK にインストールします。
  • オプションで Docker をセットアップし、ESP32 ファームウェアビルド用に espressif/idf:release-v5.4 イメージをプルします。
  • ~/picoZ80_env.sh を作成します — 今後のセッションで source する環境ファイルです。必要なすべてのパスを設定し、Docker(推奨)またはネイティブ ESP-IDF インストール(フォールバック)を介した透過的な ESP32 ビルドのための idf54 ヘルパー関数を提供します。
セットアップ後、環境を source してビルドします。
# 自動ロードのために ~/.bashrc または ~/.zshrc に追加:
source ~/picoZ80_env.sh

# すべての RP2350 ターゲットをビルド
build_tzpuPico.sh

# 特定のターゲットファミリーをビルド
build_tzpuPico.sh sharp              # Sharp MZ ターゲットのみ
build_tzpuPico.sh amstrad            # Amstrad PCW ターゲットのみ
build_tzpuPico.sh tatung             # Tatung Einstein ターゲットのみ
build_tzpuPico.sh open               # OpenZ80 実験者向けペルソナのみ

# デバッグシンボル付きでビルド
build_tzpuPico.sh DEBUG

# ESP32 ファームウェアを含むすべてをビルド
build_tzpuPico.sh ALL

# ESP32 ファームウェアのみをビルド
build_esp32
自動セットアップ — Windows 10 / 11
setup_picoZ80_windows.ps1 をダウンロードし、管理者 PowerShell プロンプトから実行します。
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_picoZ80_windows.ps1
Windows スクリプトは、Windows エコシステムに適応した同じ手順を実行します。
  • winget を介して必要なツール(Git、CMake、Ninja、Python、Perl、ARM GNU Toolchain)をインストールします。自動インストールできないツールについては手動ダウンロード URL を提供します。
  • すべてのリポジトリをクローンし、パスを設定します。
  • インストール先に合わせて事前設定された build_tzpuPico.batpicoZ80_env.bat を作成します。
  • ESP32 ビルドには 3 つのオプションを提供します。Docker Desktop、Espressif ESP-IDF オフラインインストーラー(約 1.5 GB)、またはスキップ。
セットアップ後、新しいコマンドプロンプトを開きます。
picoZ80_env.bat
build_tzpuPico.bat                   REM すべての RP2350 ターゲットをビルド
build_tzpuPico.bat sharp             REM Sharp ターゲットのみをビルド
build_tzpuPico.bat ALL               REM RP2350 + ESP32 をビルド
build_tzpuPico.bat esp32             REM ESP32 ファームウェアのみをビルド
注意: ESP-IDF の PowerShell/CMD プロンプトから build_tzpuPico.bat を実行しないでください — ESP-IDF ツールチェーンが cmake をオーバーライドし、RP2350 ホストツールをビルドできなくなります。バッチファイルはこれを検出し、明確なエラーとともに終了します。ESP-IDF のアクティベーションは ESP32 ビルドステップによって自動的に処理されます。
ターゲット別ビルドシステム
ビルドシステムは、ドライバーのサブセットのみが必要な場合にファームウェアサイズを削減するため、マシン固有のファームウェアバイナリを生成します。
ターゲット バイナリ接頭辞 含まれるドライバー コンパイル時定義
BaseZ80 pZ80-BaseZ80 すべてのドライバー(Sharp + Amstrad + Tatung)— ユニバーサルバイナリ INCLUDE_SHARP_DRIVERSINCLUDE_AMSTRAD_DRIVERSINCLUDE_TATUNG_DRIVERS
SharpZ80 pZ80-SharpZ80 Sharp MZ ドライバーのみ — より小さなファームウェア INCLUDE_SHARP_DRIVERS
AmstradZ80 pZ80-AmstradZ80 Amstrad PCW ドライバーのみ — より小さなファームウェア INCLUDE_AMSTRAD_DRIVERSTARGET_MODEL_AMSTRAD
TatungZ80 pZ80-TatungZ80 Tatung Einstein ドライバーのみ — より小さなファームウェア INCLUDE_TATUNG_DRIVERSTARGET_MODEL_TATUNG
各ターゲットモデルは、専用の CMakeLists.txt、エントリーポイント、リンカースクリプトを備えた独自のディレクトリを src/model/ 配下に持ちます。最大限の互換性を得るには BaseZ80 ターゲットを使用するか、5MB のファームウェアパーティションにより余裕をもって収まる小さなバイナリを得るにはマシン固有のターゲットを選択してください。
fw/uf2/ ディレクトリには Bootloader UF2 イメージ(初回 USB マスストレージ書き込み用)が、fw/bin/ ディレクトリには OTA アップデート用のアプリケーションパーティションバイナリ(.bin)イメージが格納されます。アプリケーションパーティションは UF2 フォーマットでは表現できない非標準の Flash アドレスに配置されるため、すべての OTA 転送にはプレーンバイナリが使用されます。各ターゲットは標準バリアントと DBGSH バリアントでビルドされます — DBGSH バリアントは USB CDC チャンネル 1 で完全な ICE デバッグシェルを有効にします。
手動セットアップ(参考)
自動セットアップスクリプトを使わずに手動で環境を構成したい場合の手順は次のとおりです。
  1. 前提条件をインストールします: CMake 3.20+、arm-none-eabi-gcc(ARM クロスコンパイラー)、Git、Python 3、Perl、そして ESP32 ビルド用にオプションで Docker またはネイティブの ESP-IDF v5.4 インストール。
  2. メインリポジトリをクローンします: git clone https://git.eaw.app/eaw/pico.git <root>
  3. Pico SDK をクローンします: git clone https://github.com/raspberrypi/pico-sdk.git --branch develop し、その中で git submodule update --init を実行します。
  4. Pico Extras をクローンします: git clone https://github.com/raspberrypi/pico-extras.git し、その中で git submodule update --init を実行します。
  5. build_tzpuPico.sh の先頭にある PICO_PATH 変数を編集して、ルートディレクトリを指すようにします。
  6. ./build_tzpuPico.sh を実行して RP2350 ファームウェアをビルドするか、./build_tzpuPico.sh ALL を実行して ESP32 ファームウェアも含めます。
自動手順と手動手順の両方の詳細については、デベロッパーズガイド — 開発環境のセットアップセクションを参照してください。

書き込み(フラッシング)

RP2350 の初回書き込み
picoZ80 ボードには物理的な BOOTSEL ボタンや Reset ボタンはありません。どちらの信号も 6 ピンのデバッグヘッダーに出ています。
ピン 1 ピン 2 ピン 3 ピン 4 ピン 5 ピン 6
SWCLK SWD Reset RP2350 Reset ESP32 GND BOOTSEL
RP2350 のブートローダーマスストレージモードに入るには、デバッグヘッダー上でジャンパーまたはプローブを使用します。
  1. ピン 6(BOOTSEL) を Low に保持します。
  2. 電源を投入するか、ピン 3(Reset RP2350) を Low にアサートしてから解放します — RP2350 がブートを開始します。
  3. 電源投入またはリセットの直後に BOOTSEL をすぐに解放します。初回ブートの瞬間を超えて Low に保持し続けると、RP2350 が FlashRAM にアクセスできなくなります。
  4. picoZ80 の USB ポートを PC に接続します — RP2350 が USB マスストレージデバイスとして列挙されます。
  5. Bootloader_<version>.uf2 をマウントされたドライブにコピーします。RP2350 がブートローダーをセルフフラッシュして再起動します。
以降のすべての RP2350 ファームウェアアップデートは、デバッグヘッダーに触れることなく OTA Web ページから実行できます。
ESP32 の初回書き込み
ESP32 は Python 仮想環境を介して esptool で書き込みます。新しい基板リビジョンでは ESP32 は独自の USB デバイスとして現れます。USB ポートが 1 つしかないオリジナル基板では、RP2350 が USB-UART ブリッジとして動作することでのみアクセスできました。どちらの場合も、必要に応じて RP2350 のブートシーケンス中に ESP32 をリセット状態に保持するために、デバッグヘッダーのピン 4(Reset ESP32)を使用します。
esptool 環境を一度セットアップします。
python3 -m venv ./venv/
source ./venv/bin/activate
cd $HOME/esptool
次に、4 つの ESP32 ファームウェアコンポーネントすべてを 1 つのコマンドで書き込みます。PORT は OS が割り当てたデバイスノードに、BINPATH はビルド済みバイナリを含むディレクトリに合わせて調整してください。
PORT=/dev/tty.usbmodem141403   # adjust to your system
BINPATH=/path/to/build/output

python3 ./esptool.py \
  -p ${PORT} -b 115200 \
  --before default_reset --after hard_reset \
  --chip esp32s3 \
  write_flash \
  --flash_mode dio --flash_size 4MB --flash_freq 80m \
  0x0     ${BINPATH}/bootloader.bin \
  0x8000  ${BINPATH}/partition-table.bin \
  0x9000  ${BINPATH}/ota_data_initial.bin \
  0x10000 ${BINPATH}/sd_card.bin
以降のすべての ESP32 ファームウェアアップデートは、esptool を必要とせず OTA Web ページ(ota-esp32.htm)から実行できます。
基板リビジョンに関する注記: オリジナルの picoZ80 基板(v2.0〜v2.2)は RP2350 に接続された単一の USB ポートを備えています。これらの基板では、ESP32 は RP2350 が USB-UART ブリッジとして動作することでプログラムする必要があります。新しい基板リビジョンでは ESP32 に直接接続された 2 つ目の USB ポートが追加され、esptool が独立してアドレス指定できるようになっています。
OTA アップデート(初回書き込み後)
  • RP2350 OTA
    - http://<device-ip>/ota-rp2350.htm に移動し、fw/bin/ からバージョン付き .bin ファイルを選択してアップロードします。アプリケーションパーティションは非標準の Flash アドレスに存在するため、UF2 ではなく純粋なバイナリが必要です。ブートローダーは新しいパーティションをアクティブ化する前にイメージチェックサムを検証します。
  • ESP32 OTA
    - http://<device-ip>/ota-esp32.htm に移動し、ESP32 ファームウェアバイナリをアップロードします。ESP32 は自動的に新しいファームウェアで再起動します。同じページは、SD カード上の ESP32 Web ファイルシステムを更新するバージョン付き FilePack アーカイブも受け付けます — 下記の FilePack アップロード を参照してください。
SD カードの準備
SD カードを FAT32 でフォーマットします。config.json をルートディレクトリに置きます。設定で参照される ROM イメージ・ディスクイメージ・ファイリングシステムツリー用のサブディレクトリを作成します。ボードが動作し始めれば、SD カードは Web の File Manager ページからも完全に管理できます。

デバッグ

picoZ80 は、RP2350 の両コアと ESP32 コプロセッサーの両方について、フルソースレベルのデバッグをサポートします。RP2350 は CMSIS-DAP プローブを使用して SWD 経由でデバッグされ、OpenOCD が 2 ターゲットの GDB サーバー(コアごとに 1 ポート)を提供します。ESP32-S3 は、Xtensa ツールチェーンの GDB を使用して、内蔵の USB-JTAG インターフェース経由でデバッグされます。

RP2350 — SWD デバッグ
ハードウェア接続
ARM DAPLink / CMSIS-DAP プローブ(例: Raspberry Pi Debug Probe、Black Magic Probe、または任意の CMSIS-DAP 互換アダプター)を picoZ80 ボードの 6 ピンデバッグヘッダーに接続します。必要な接続は 3 本だけです。
デバッグヘッダーピン 信号 SWD 機能
ピン 1SWCLKSerial Wire Clock
ピン 2SWDIOSerial Wire Data
ピン 5GNDグラウンド基準
OpenOCD の起動
OpenOCD は 2 つの GDB サーバーポートを公開します — コア 0 用のポート 3333 とコア 1 用のポート 3334 です。picoZ80 では、コアごとに別々の GDB ポートで真の SMP デバッグを有効にするため、標準の OpenOCD RP2350 ターゲットスクリプトに小さな修正が必要です。標準スクリプトをコピーし、target smp 行のコメントを外します。
sudo cp /usr/local/share/openocd/scripts/target/rp2350.cfg \
        /usr/local/share/openocd/scripts/target/rp2350_tzpu.cfg
次に rp2350_tzpu.cfg を編集します — if {[string compare $_USE_CORE SMP] == 0} ブロック内の target smp 行を見つけ、先頭の # を削除します。
# Before (rp2350.cfg):
    #target smp $_TARGETNAME_0 $_TARGETNAME_1

# After (rp2350_tzpu.cfg):
    target smp $_TARGETNAME_0 $_TARGETNAME_1
この 1 つの変更で SMP モードが有効になり、OpenOCD はコア 0 を GDB ポート 3333 に、コア 1 をポート 3334 に登録するため、各コアを独立してアタッチおよびステップ実行できます。GDB を起動する前に、プロジェクトルートから OpenOCD を起動します。
openocd -f interface/cmsis-dap.cfg -f target/rp2350_tzpu.cfg -c "adapter speed 5000"
グローバル GDB 初期化(~/.gdbinit
GDB はディレクトリごとの .gdbinit ファイルの自動ロードに明示的な許可を必要とします。以下を ~/.gdbinit に追加し、パスをプロジェクトの場所に合わせて調整してください(ここではプロジェクトルートからの相対パスで示しています — 異なるディレクトリから GDB を実行する場合は ~/.gdbinit で絶対パスを使用してください)。
set history save on
set history filename ~/.gdb_history
set history size 65536
add-auto-load-safe-path build/bin/model/BaseZ80/.gdbinit:build/bin/model/Bootloader/.gdbinit
ブートローダーのデバッグ
適切なコアごとの .gdbinit ファイルを Bootloader のビルドディレクトリにコピーし、gdb-multiarch を起動します。.gdbinit.bootloader.3333 ファイルはコア 0(ポート 3333)に接続して出力を gdb_core0.txt に記録し、.gdbinit.bootloader.3334 はコア 1(ポート 3334)に接続して gdb_core1.txt に記録します。両方のコアを同時にデバッグするには 2 つのターミナルを開きます。
# Terminal 1 — Core 0
cd build/bin/model/Bootloader
cp ../../../../.gdbinit.bootloader.3333 .gdbinit
gdb-multiarch Bootloader.elf

# Terminal 2 — Core 1
cd build/bin/model/Bootloader
cp ../../../../.gdbinit.bootloader.3334 .gdbinit
gdb-multiarch Bootloader.elf
メインファームウェアのデバッグ
メインファームウェアの .gdbinit ファイル(.gdbinit.3333.gdbinit.3334)は、メモリを 16 進と ASCII の組み合わせ出力としてダンプするカスタム xac <address> <count> コマンドを定義し、それぞれの GDB ポートに接続して実行を継続します。これは、エミュレーションループを停止せずに PSRAM バンクの内容やメモリマップドデバイスの状態を検査するのに便利です。
# Terminal 1 — Core 0
cd build/bin/model/BaseZ80
cp ../../../../.gdbinit.3333 .gdbinit
gdb-multiarch BaseZ80_0x10020000.elf

# Terminal 2 — Core 1
cd build/bin/model/BaseZ80
cp ../../../../.gdbinit.3334 .gdbinit
gdb-multiarch BaseZ80_0x10020000.elf

# Memory dump example (in GDB prompt):
(gdb) xac 0x20000000 64

ESP32 — USB デバッグ
ESP32-S3 コプロセッサーは内蔵の USB-JTAG インターフェースを備えています — 外部デバッグプローブは不要です。ホスト PC から picoZ80 ボードの ESP32 USB ポートへ USB ケーブルを直接接続します。
ESP32-S3 内蔵 JTAG 設定を使用して OpenOCD を起動します。
openocd -f board/esp32s3-builtin.cfg
次に、ESP32 ファームウェア ELF(プロジェクトルートからの相対で esp32/build/main.elf にあります)を指定して Xtensa GDB を起動し、OpenOCD の GDB サーバーにアタッチします。
xtensa-esp32s3-elf-gdb esp32/build/main.elf
(gdb) target extended-remote :3333
シンボルとアドレスが正しく一致するよう、ELF がデバイスに書き込まれたファームウェアと同じソースリビジョンからビルドされていることを確認してください。

設定(JSON)

picoZ80 のすべての動作は、SD カード上の config.json によって制御されます。RP2350 はブート時に ESP32 を介してこのファイルを読み込み、最小化して、その結果を Flash に格納します。SD カードが存在しない場合は、以前に格納された設定が使用されます。設定は Config Editor ページを使ってブラウザー上で直接編集できます。
トップレベルの構造は次のとおりです。
{
  "esp32": {
    "core": {
      "device": "Z80",
      "mode":   0
    },
    "wifi": {
      "override":  1,
      "wifimode":  "client",
      "ssid":      "MyNetwork",
      "password":  "MyPassword",
      "ip":        "192.168.1.192",
      "netmask":   "255.255.255.0",
      "gateway":   "192.168.1.1",
      "dhcp":      0,
      "webfs":     "webfs",
      "persist":   0
    }
  },
  "rp2350": {
    "core": {
      "cpufreq":   300000000,
      "psramfreq": 133000000,
      "voltage":   1.10
    },
    "z80": [
      {
        "memory":  [ ... ],
        "io":      [ ... ],
        "drivers": [ ... ]
      }
    ]
  }
}
esp32 — ESP32 設定
esp32 トップレベルオブジェクトは ESP32 コプロセッサーを設定します。corewifi の 2 つのサブオブジェクトを含みます。
esp32.core
キー 説明
device string CPU デバイスタイプ — どのプロセッサーペルソナを使用するかを ESP32 に伝えます。有効な値: "Z80"(picoZ80)、"6502"(pico6502)、"6512"(pico6512)。
mode integer デフォルトのブートモード: 0 = クライアント(ステーション)モード、1 = アクセスポイントモード。この値は NVS に永続化され、WiFi マネージャーが上書きしていない場合は次回ブート時に使用されます。
esp32.wifi
wifi オブジェクトは、config.json から WiFi 認証情報とネットワーク設定を注入し、NVS に格納されている内容を上書きする仕組みを提供します。これは初期プロビジョニングや、Web の WiFi Manager を使わずに既知の良好なネットワーク設定をデプロイするのに便利です。設定ファイルを完全に無視して以前に永続化された NVS 設定に依存するには、override0 に設定します。
キー 説明
override 0/1 マスタースイッチ。1 = 以下のすべての設定を適用、0 = このブロックを無視して永続化された NVS 設定を使用。
wifimode string アクセスポイントモードは "ap"(ESP32 が独自のネットワークを作成)、クライアント/ステーションモードは "client"(ESP32 が既存のネットワークに参加)。
ssid string 作成する(AP モード)または参加する(クライアントモード)WiFi ネットワーク名(SSID)。
password string SSID 用の WiFi パスフレーズ。
ip string 固定 IP アドレス(例: "192.168.1.192")。dhcp0 のとき AP モードとクライアントモードの両方で使用されます。
netmask string サブネットマスク(例: "255.255.255.0")。
gateway string デフォルトゲートウェイアドレス(例: "192.168.1.1")。
dhcp 0/1 クライアントモードのみ。1 = DHCP でアドレスを取得、0 = 上記の固定 ip/netmask/gateway を使用。
webfs string SD カード上の Web ファイルシステムルートディレクトリを上書きします(デフォルト "webfs")。代替の Web UI アセットを提供できます。
persist 0/1 1 = 解決された WiFi 設定を NVS に書き戻し、override がクリアされた後も再起動を生き延びるようにします、0 = このセッションのみ適用。

core — RP2350 動作パラメーター
キー 説明
cpufreq integer RP2350 システムクロック周波数(Hz)(例: 300 MHz の場合 300000000)。
psramfreq integer PSRAM SPI クロック周波数(Hz)(例: 133 MHz の場合 133000000)。
voltage float RP2350 コア電圧(V)(例: 1.10)。より高いクロック速度にはより高い電圧が必要になる場合があります。

memory — メモリマップ
memory 配列は Z80 メモリマップを定義します。各エントリは 64KB の Z80 アドレス空間の連続した領域をカバーし、512 バイトのブロック境界に丸められます。
キー 説明
enable 0/1 このエントリがアクティブかどうか。
addr hex string Z80 アドレス空間内の開始アドレス(例: "0x0000")。
size hex string 領域のサイズ(例: 8KB の場合 "0x2000")。
type string ブロックタイプ: PHYSICALPHYSICAL_VRAMPHYSICAL_HWRAMROMVRAMFUNCPTR
bank integer RAM/ROM/VRAM タイプ用の PSRAM バンク番号(0〜63)。
tcycwait integer アクセス時に挿入する追加 T サイクルウェイトステートの数。
tcycsync integer T1 立ち上がりエッジとの同期を有効にします。
task string FUNC タイプブロック用のオプションのタスク識別子。
file string ブート時にこのブロックにロードする ROM イメージへの SD カードパス。
fileofs integer ROM イメージファイル内で読み取りを開始するバイトオフセット。
"memory": [
  {
    "enable":   1,
    "addr":     "0x0000",
    "size":     "0x1000",
    "type":     "ROM",
    "bank":     0,
    "tcycwait": 0,
    "tcycsync": 0,
    "task":     "",
    "file":     "/TZFS/tzfs.rom",
    "fileofs":  0
  },
  {
    "enable":   1,
    "addr":     "0x1000",
    "size":     "0xCFFF",
    "type":     "RAM",
    "bank":     0,
    "tcycwait": 0,
    "tcycsync": 0,
    "task":     "",
    "file":     "",
    "fileofs":  0
  },
  {
    "enable":   1,
    "addr":     "0xD000",
    "size":     "0x1000",
    "type":     "PHYSICAL_VRAM",
    "bank":     0,
    "tcycwait": 2,
    "tcycsync": 0,
    "task":     "",
    "file":     "",
    "fileofs":  0
  }
]

io — I/O ポートマップ
io 配列は Z80 I/O ポート範囲をハンドラーにマッピングします。I/O サイクルはメモリサイクルとは Z80 の IORQ 信号によって区別され、PIO 制御ステートマシンがこれを監視します。
キー 説明
enable 0/1 このエントリがアクティブかどうか。
addr hex string 開始 I/O ポートアドレス(例: "0xE0")。
size hex string 範囲内のポート数。
type string PHYSICAL(ホストに渡す)、FUNC(C ハンドラーを呼び出す)。
func string FUNC タイプのハンドラー関数名。
"io": [
  {
    "enable": 1,
    "addr":   "0xE0",
    "size":   "0x08",
    "type":   "FUNC",
    "func":   "mz700_io"
  },
  {
    "enable": 1,
    "addr":   "0x00",
    "size":   "0xE0",
    "type":   "PHYSICAL"
  }
]

drivers — マシンドライバー
drivers 配列は、名前付きドライバーインスタンスを Z80 コンテキストにバインドします。各ドライバーは 1 つ以上のインターフェース"if" キーの下に列挙)を持ち、それぞれが ROM イメージのロード、アドレス範囲のリマップ、I/O ポート範囲のリマップ、パラメーターファイルの受け取りを行えます。
キー 説明
enable 0/1 このドライバーがロードされるかどうか。
name string ドライバー名(コンパイル済みのドライバーと一致する必要があります。例: "MZ700""RFS""TZFS")。
type string PHYSICAL または VIRTUAL
if array インターフェースオブジェクトの配列(下記参照)。

インターフェースオブジェクトif[]):

キー 説明
enable 0/1 このインターフェースがアクティブかどうか。
name string インターフェースインスタンス名。
type string PHYSICAL または VIRTUAL
rom array ブート時に PSRAM にロードする ROM イメージ。
addrmap array このインターフェースのアドレスリマップルール。
iomap array このインターフェースの I/O ポートリマップルール。
param array ドライバーに渡すパラメーターファイル。

rom[] エントリ:

キー 説明
enable 0/1 この ROM エントリがアクティブかどうか。
file string ROM バイナリへの SD カードパス。
loadaddr array ロードアドレス記述子(position、addr、bank、size、ウェイトステート)。

addrmap[] エントリ:

キー 説明
enable 0/1 このマッピングがアクティブかどうか。
srcaddr hex string Z80 空間内のソースアドレス。
size hex string マップされる領域のサイズ。
dstaddr hex string リマップ後の宛先アドレス。

iomap[] エントリ:

キー 説明
enable 0/1 この I/O マッピングがアクティブかどうか。
srcaddr hex string ソース I/O ポート。
size hex string ポート数。
dstaddr hex string リマップ後の宛先ポート。
16bit 0/1 16 ビット I/O アドレッシングを使用するかどうか。

再配置可能なインターフェース I/O ポート
マシン非依存のインターフェースカードをカスタム / 実験者ボード上で使用できるように(OpenZ80 を参照)、いくつかのカードはベース I/O ポートを再配置できます。再配置可能なカードは、その iomap エントリの dstaddr からベースアドレスを読み取り(srcaddr にはカード本来のポートを設定)、iomap エントリが存在しない場合は元のポートをデフォルトとします。これを設定する最も簡単な方法は、GUI 設定ページの Base I/O Port フィールドで、正しい iomap エントリを自動的に書き込みます。再配置可能なカードとそのデフォルトベースは次のとおりです。
Card Default base Ports
MZ-1R12 0xF8 3
MZ-1R18 0xEA 2
MZ-1R23 0xB8 2
MZ-1R37 0xAC 2
PIO-3034 0x00 4
MZ-8BIO3 / MZ-1E24 0xB0 4
MZ-1E05 0xD8 7
Celestite 0x60 16
"drivers": [
  {
    "enable": 1,
    "name":   "MZ700",
    "type":   "PHYSICAL",
    "if": [
      {
        "enable": 1,
        "name":   "main",
        "type":   "PHYSICAL",
        "rom": [
          {
            "enable":   1,
            "file":     "/MZ700/mz700.rom",
            "loadaddr": [
              {
                "enable":   1,
                "position": 0,
                "addr":     "0x0000",
                "bank":     0,
                "size":     "0x1000",
                "tcycwait": 0,
                "tcycsync": 0
              }
            ]
          }
        ],
        "addrmap": [
          {
            "enable":  1,
            "srcaddr": "0x0000",
            "size":    "0x1000",
            "dstaddr": "0x0000"
          }
        ],
        "iomap": [
          {
            "enable":  1,
            "srcaddr": "0xE0",
            "size":    "0x08",
            "dstaddr": "0xE0",
            "16bit":   0
          }
        ],
        "param": [
          {
            "enable": 1,
            "file":   "/config/mz700.cfg"
          }
        ]
      }
    ]
  },
  {
    "enable": 1,
    "name":   "MZ-1E05",
    "type":   "PHYSICAL",
    "if": [
      {
        "enable": 1,
        "name":   "fdc0",
        "type":   "PHYSICAL",
        "rom":    [],
        "addrmap": [],
        "iomap": [
          {
            "enable":  1,
            "srcaddr": "0xD8",
            "size":    "0x04",
            "dstaddr": "0xD8",
            "16bit":   0
          }
        ],
        "param": [
          {
            "enable": 1,
            "file":   "/DSK/MZ700/disk0.dsk"
          }
        ]
      }
    ]
  }
]

完全な最小設定例
以下は、ROM・48KB RAM・ホスト VRAM・WD1773 フロッピーコントローラーで MZ-700 をブートする最小設定です。
{
  "rp2350": {
    "core": {
      "cpufreq":   300000000,
      "psramfreq": 133000000,
      "voltage":   1.10
    },
    "z80": [
      {
        "memory": [
          { "enable":1, "addr":"0x0000", "size":"0x1000", "type":"ROM",
            "bank":0, "tcycwait":0, "tcycsync":0, "task":"",
            "file":"/MZ700/mz700.rom", "fileofs":0 },
          { "enable":1, "addr":"0x1000", "size":"0xCFFF", "type":"RAM",
            "bank":0, "tcycwait":0, "tcycsync":0, "task":"", "file":"", "fileofs":0 },
          { "enable":1, "addr":"0xD000", "size":"0x1000", "type":"PHYSICAL_VRAM",
            "bank":0, "tcycwait":2, "tcycsync":0, "task":"", "file":"", "fileofs":0 },
          { "enable":1, "addr":"0xE000", "size":"0x2000", "type":"PHYSICAL",
            "bank":0, "tcycwait":0, "tcycsync":0, "task":"", "file":"", "fileofs":0 }
        ],
        "io": [
          { "enable":1, "addr":"0xE0", "size":"0x08", "type":"FUNC", "func":"mz700_io" },
          { "enable":1, "addr":"0xD8", "size":"0x04", "type":"FUNC", "func":"wd1773_io" }
        ],
        "drivers": [
          {
            "enable":1, "name":"MZ700", "type":"PHYSICAL",
            "if": [{ "enable":1, "name":"main", "type":"PHYSICAL",
                     "rom":[], "addrmap":[], "iomap":[], "param":[] }]
          },
          {
            "enable":1, "name":"MZ-1E05", "type":"PHYSICAL",
            "if": [{ "enable":1, "name":"fdc0", "type":"PHYSICAL",
                     "rom":[], "addrmap":[], "iomap":[],
                     "param":[{ "enable":1, "file":"/DSK/MZ700/disk0.dsk" }] }]
          }
        ]
      }
    ]
  }
}

ICE(デバッグシェル)

picoZ80 には、2 つ目の USB CDC シリアルチャンネル上で動作する内蔵のインタラクティブ ICE(インサーキットエミュレーター)デバッグシェルが含まれています。デバッグシリアルポート(115200 ボー、8N1)にターミナルエミュレーターを接続します — picoZ80 を USB 経由で接続すると 2 つ目の COM/ttyACM ポートとして現れます。シェルのプロンプトは dbg> です。
ファームウェアは 2 つのバリアントで提供されます。デバッグシェルを含まない標準ビルドと、完全な ICE デバッガーを含む DBGSH ビルドです。DBGSH バリアントは、ファームウェアファイル名の _DBGSH 接尾辞で識別されます。

コマンドリファレンス
デバッグシェルは、Z80 CPU エミュレーションのリアルタイム検査と制御のための 49 のコマンドを提供します。
コマンド 構文 説明
help help 利用可能なすべてのコマンドを表示します。
regs regs Z80 レジスター(AF、BC、DE、HL、IX、IY、SP、PC、I、R、IM、IFF1/2、フラグ、HALT、MEMPTR、サイクルカウント)をダンプします。
dm dm <p|f|v|r> <addr> [len] メモリをダンプします。p = 物理 Z80 バス、f = フェッチ(M1 サイクル)、v = 仮想 PSRAM、r = RP2350 アドレス空間。
search search [p|v] <start> <end> <hex..>|"text" バイトパターンまたは ASCII テキスト文字列をメモリから検索します。p = 物理バス、v = 仮想 PSRAM、省略時はマップ済み(メモリマップに従う)。パターンは 16 進バイト(例: ED 4D 00)または引用符付き ASCII 文字列(例: "HELLO")で指定します。一致箇所は前後 8 バイトのコンテキスト付きで表示されます。物理/マップ済みアクセスでは CPU を自動的にホールドします。パターン長は最大 32 バイトです。
cmp cmp [f] <phys> <virt> <len> 物理バスメモリと仮想 PSRAM を比較します。オプションの f はリードサイクルの代わりにフェッチ(M1)サイクルを使用します。不一致をアドレスと値とともに報告します。
dis dis [p|v] [addr] [count] 完全なオペコードデコードで Z80 コードを逆アセンブルします。
asm asm [addr] インタラクティブな Z80 アセンブラー — ニーモニックを 1 行ずつ入力し、空行または . で終了します。
memmap memmap [block] SRAM バンクポインターとメモリバンキングレイアウトをダンプします。
memptr memptr [addr] アドレスマッピング用の PSRAM memPtr テーブルをダンプします。
iomap iomap [port] I/O ポートハンドラーとメモリマップド I/O 設定を表示します。
status status システム概要: CPU 周波数、PSRAM クロック、ホストクロック、エミュレーション速度、稼働時間。
ver ver ファームウェアバージョンと Flash パーティション情報。
drivers drivers アクティブなドライバーをインターフェースの詳細とともに一覧表示します。
hold hold Z80 CPU エミュレーションを一時停止します。
release release Z80 CPU エミュレーションを再開します。
go go 実行を継続します(ホールドを解除。ブレークポイントは引き続き有効)。
cont cont go のエイリアス。実行を継続します(ホールドを解除。ブレークポイントは引き続き有効)。
step step [n] 1 命令または n 命令をシングルステップ実行し、各ステップの前後にレジスターを表示します。
bp bp <addr> 指定アドレスにブレークポイントを設定します(最大 8 個同時)。
bc bc <n|*> ブレークポイントスロット n をクリアするか、* ですべてのブレークポイントをクリアします。
bl bl すべてのアクティブなブレークポイントを一覧表示します。
wm wm <[p|v]> <addr> <byte>... メモリにバイトを書き込みます。p = 物理 Z80 バス、v = 仮想 PSRAM、省略時は自動(メモリマップに従う)。物理/マップ済み書き込みでは CPU を自動的にホールドします。
fill fill [p|v] <addr> <len> [w|d] <val> メモリを定数値で埋めます。p = 物理、v = 仮想、省略時は自動。デフォルトは 8 ビット、w = 16 ビット、d = 32 ビット(リトルエンディアン)。必要に応じて CPU を自動的にホールドします。
copy copy <pv|fp|vp> <src> <len> <dst> 物理と仮想の間でメモリをコピーします。pv = 物理リードを仮想へ、fp = 物理フェッチを仮想へ、vp = 仮想を物理書き込みへ。CPU を自動的にホールドします。
memtest memtest <addr> <len> [pattern] 物理メモリを 3 パスでテストします: 書き込み+読み取り、書き込み+フェッチ、インターリーブ。デフォルトパターン: 昇順バイト。パスごとにエラーを報告します。
in in <port> Z80 I/O ポートを読み取ります。
out out <port> <byte> Z80 I/O ポートに書き込みます(CPU をホールドする必要があります)。
trace trace <on|off|dump [n]|clear|rt|byte ...> 実行トレースの有効化/無効化、最後の n エントリのダンプ、または 512 エントリのリングバッファのクリア。rt は命令実行に合わせたリアルタイムトレース出力をデバッグコンソールに有効化します。byte はメモリ/IO トランザクションのバイトレベルトレースを有効化します。
verify verify <on|off> 完全なオペコードフェッチ検証を切り替えます。オンのとき、すべてのフェッチが readPhysicalMem に対して検証されます(速度 50% 低下)。オフ(デフォルト)のときは 0x00/0xFF オペコードのみをチェックします。
fwait fwait <0-4> M1(オペコードフェッチ)サイクルに追加のウェイトステートを強制します。0 = オフ(デフォルト)。タイミングに敏感なコードのデバッグに便利です。パラメーターを指定しないと現在値を表示します。
iowait iowait <0-8> I/O リードおよびライトサイクルに追加のウェイトステートを強制します。0 = オフ(デフォルト)。応答時間の遅いペリフェラルを診断するために I/O サイクルを引き延ばします。パラメーターを指定しないと現在値を表示します。
corrupt corrupt [clear] 検出されたフェッチ破損(PC、フェッチされたオペコード、検証されたオペコード)を表示します。clear はログをリセットします。
fdctrace fdctrace <on|off|dump> FDC I/O トレースの有効化、無効化、またはダンプ。dump はリングバッファから最後の 64 件の WD1773 レジスター操作を表示し、ポート・方向・値・ステータスを示します。
qdtrace qdtrace <on|off|dump> Quick Disk I/O トレースの有効化、無効化、またはダンプ。dump は最後の 64 件の操作を表示し、ポート・方向・値・テープ位置を示します。
piodbg piodbg [clear] 3 つの PIO ブロック(PIO 0、PIO 1、PIO 2)すべての RP2350 PIO ハードウェア診断を表示します。FDEBUG スティッキーエラーフラグ、FSTAT、FIFO レベル、ステートマシンごとのプログラムカウンター、GPIO 出力イネーブル状態、GPIO ピンレベルを表示します。clear は FDEBUG スティッキーフラグをリセットします。
load load <p|v> <file> <addr> [len] [ofs] ESP32 SD カードから Z80 メモリにファイルをロードします。p = 物理バスに書き込み、v = 仮想 PSRAM バンク 0 に書き込み。file は ESP32 の /sdcard/ からの相対パスです。addr は Z80 の開始アドレスです。len を省略するとファイル全体がロードされます(最大 64KB)。指定するとそのバイト数をロードします(最大 1MB)。オプションの ofs は読み取りを開始するファイルオフセットです。物理書き込みでは CPU を自動的にホールドします。PSRAM バンク 63 をスクラッチバッファとして使用します。
save save <p|pf|v> <file> <addr> <len> Z80 メモリを ESP32 SD カード上のファイルに保存します。p = 物理バス経由で読み取り、pf = 物理フェッチ(M1 サイクル)経由で読み取り、v = 仮想 PSRAM バンク 0 から読み取り。file/sdcard/ からの相対パスです。addr は Z80 の開始アドレス、len は保存するバイト数です(最大 64KB)。物理読み取りでは CPU を自動的にホールドします。物理読み取り中は定期的な DRAM リフレッシュを行います。
dir dir [path] ESP32 SD カード上のファイルを一覧表示します。オプションのパスは /sdcard/ からの相対です。
echo echo [on|off] 文字エコーを切り替えます。
reset reset Z80 CPU リセットを強制します。
set set <reg|flags|memmap|memptr|iomap> <idx> <val> Z80 レジスター、フラグ、メモリマップ、PSRAM memPtr、または I/O マップエントリを実行時に変更します。リロードなしでレジスターやメモリ/IO 設定のホットパッチを可能にします。
hist hist [n] コマンド履歴を表示します。最後の n エントリを表示します(デフォルト: すべて)。履歴は ESP32 NVS を介してセッション間で保持されます。
savehst savehst コマンド履歴を即座に ESP32 NVS に強制保存します。
ipl ipl 8255 PPI ポート C ビット 3 をトグルして IPL リセット(BST モード)を実行します。完全な Z80 リセットなしでマシンをブートモードにリセットします。MZ-80B/MZ-2000/MZ-2500 マシンに便利です。
mmutrace mmutrace マシン固有のトレース情報(MMU 状態、I/O レジスタースナップショットなど)をダンプします。出力はペルソナによって異なります — 各ドライバーが独自のトレースハンドラーを登録します。
intcount intcount 割り込みアクノリッジカウントと現在の割り込み状態を表示します。割り込み駆動ソフトウェアのデバッグに便利です。
psync psync [start end] 物理バスを読み取って仮想メモリに書き込むことで、物理メモリを PSRAM に同期させます。オプションのアドレス範囲。デフォルトはアドレス空間全体です。DMA 操作後の診断に便利です。
dskimage dskimage read <filename> [cylinders] [heads] / dskimage write <filename> 物理フロッピーディスクを SD カード上の DSK ファイルにイメージ化(read)するか、SD カードの DSK ファイルを物理フロッピーに書き込みます(write)。dskimage <filename> はデフォルトで read です(後方互換)。cylinders/heads を省略するとジオメトリを自動検出します。
busdiag busdiag PIO 状態、信号レベル、バス競合ステータスを含むバス診断を表示します。
fdcimage fdcimage FDC イメージングのステータスと進捗を表示します。
fdcdiag fdcdiag FDC 診断情報(コントローラー状態、レジスターダンプ)を表示します。
gadiag gadiag ゲートアレイ診断情報(コマンド状態、割り込みルーティング)を表示します。
ブレークポイント — 最大 8 個のブレークポイントを同時にアクティブにできます。ブレークポイントがヒットすると、CPU は自動的にホールドされ、ヒットしたアドレスが表示されます。ブレークポイントから継続するには go を、シングルステップするには step を使用します。
実行トレース — 有効にすると、実行されたすべての命令の PC・オペコード・フラグレジスターが 512 エントリのリングバッファに記録されます。trace dump を使用すると、完全な逆アセンブル付きで最近の実行履歴を検査できます。
メモリアクセスモードdm p は物理 Z80 バス経由でメモリを読み取り(実ハードウェアの応答をトリガー)、dm f はフェッチ(M1)サイクルを使用して読み取り、dm v は仮想 PSRAM から直接読み取り(バス活動ゼロ)、dm r は RP2350 自身のアドレス空間(Flash、SRAM、ペリフェラル)を読み取ります。

ネットワーキング

picoZ80 は 3 つのネットワーキングモードをサポートし、ビルド時に事前ビルドされた ESP32 sdkconfig ファイルを介して選択できます。各モードは Web インターフェースと設定ページへのアクセス方法を決定します。

動作モード
モード sdkconfig ファイル WiFi USB NCM コンソール Web アクセス
WiFi のみ sdkconfig.mode_wifi_only あり なし USB Serial/JTAG WiFi AP または接続済みネットワーク経由
WiFi + NCM sdkconfig.mode_wifi_and_ncm あり あり TinyUSB CDC-ACM WiFi および http://192.168.7.1 経由
NCM のみ sdkconfig.mode_ncm_only なし あり TinyUSB CDC-ACM http://192.168.7.1 のみ経由
USB NCM(Network Control Model) は、ESP32 の USB OTG ポート上で仮想イーサネットアダプターを提示します。picoZ80 が USB 経由でホストコンピューターに接続されると、ホストは標準のネットワークインターフェースを認識します。picoZ80 上の内蔵 DHCP サーバーがホストに IP アドレスを自動的に割り当てます — 手動設定は不要です。Web インターフェースは http://192.168.7.1 でアクセスできます。
NCM のみモード は、WiFi 認証なしで出荷される基板に推奨されるデフォルトです。無線周波数の放射なしで、完全な Web インターフェース機能(設定、ファームウェアアップデート、ファイル管理、ペルソナ選択)を提供します。WiFi アンテナマッチングネットワークを PCB に実装する必要はありません。
WiFi + NCM モード は両方のインターフェースを同時に有効にします。HTTP サーバーがすべてのインターフェースにバインドするため、Web ページは WiFi または USB ネットワーク接続のいずれからでもアクセスできます。WiFi は非同期に接続するため、USB NCM インターフェースは電源投入直後から利用可能です。
モードを切り替えるには、適切な sdkconfig.mode_* ファイルを ESP32 ビルドディレクトリの sdkconfig にコピーし、再ビルドして、ESP32 ファームウェアを書き込みます。

FCC / RED に関する規制上の注意
重要: picoZ80 ボードは、FCC(米国)または RED(EU)の意図的放射体認証に申請されていません。出荷状態では、ボードは WiFi アンテナマッチングコンポーネントを未実装とし、ESP32 ファームウェアを NCM のみ構成(sdkconfig.mode_ncm_only)でビルドする必要があります。この構成では無線周波数エネルギーは放射されず、ボードは意図的放射体規制の対象になりません。
WiFi を使用したいエンドユーザーは、PCB 上のアンテナマッチングネットワークを実装し、ESP32 ファームウェアを sdkconfig.mode_wifi_only または sdkconfig.mode_wifi_and_ncm でビルドし、自らの管轄区域で適用されるホビイスト/実験的免除のもとでボードを運用できます。WiFi を有効にした状態でボードを商業的に販売したい者は、まず完成したアセンブリについて FCC および/または RED 認証を取得しなければなりません。

Web インターフェース

ESP32 コプロセッサーは、Bootstrap 4 で構築された Web 管理インターフェースをホストします。picoZ80 の WiFi ネットワークに接続する(または既存のネットワークに参加するようクライアントモードを設定する)か、http://<device-ip>/ に移動します — アクセスポイントモードでは既定で http://192.168.4.1/ です。NCM モードでは、Web インターフェースは USB ネットワーク接続経由で http://192.168.7.1 でアクセスします。モードの詳細については上記のネットワーキングを参照してください。
WiFi モードで初回電源投入時、ボードは AP モードで起動します。WiFi Manager ページを使用してクライアントモードを設定し、ネットワーク上で固定 IP アドレスを割り当てます。すべてのページは共通の左側ナビゲーションバーを共有し、Status、Config Editor、Config GUI、File Manager、Settings(Firmware → ESP32 / RP2350、WiFi Manager)、Persona へワンクリックでアクセスできます。NCM のみモードでは、WiFi Manager ページは存在せず、ナビゲーションバーには WiFi Manager を除く同じページ群が表示されます。

ダッシュボード — ステータス(index.htm)
ランディングページは、3 つのパネルにわたってボードのライブ状態を表示します。
  • WiFi 設定 / ネットワーク設定
    - WiFi モードでは、このパネルは現在の SSID、割り当てられた IP アドレス、ネットマスク、ゲートウェイを表示します。NCM のみモードでは、このパネルはネットワーク設定と題され、代わりに USB NCM ネットワークステータス(IP アドレス、ネットマスク)を表示します — SSID や WiFi 関連の情報はありません。ボード名(tzpuPico)と著作権文字列は、ESP32 Web サーバーによってテンプレート変数として提供されます。
  • バージョン情報
    - すべての OTA スロットを、タイプ・サブタイプ・Flash アドレス・サイズ・ファームウェアバージョン・ビルドタイムスタンプ・現在実行中のスロットとともに表示する ESP32 パーティションテーブル。OTA アップデート後にどのファームウェアがアクティブかを簡単に確認できます。
  • RP2350 パーティション
    - パーティション番号・アドレス・サイズ・チェックサム・アクティブ/実行中フラグ・ライセンス・作者・説明・バージョン・ビルド日・著作権を備えた RP2350 Flash パーティションテーブル — ESP32 の情報とあわせて RP2350 ファームウェア状態の完全なスナップショットを提供します。
右上のナビゲーションバーにある 2 つのドロップダウンメニューは、すべてのページで利用できます。
  • Actions メニュー
    - Change Floppy Disk 1 / 2 — SD カードから新しい DSK イメージファイルを選択し、再起動なしで仮想 WD1773 フロッピーコントローラーのスロット 1 またはスロット 2 にマウントします。現在ロードされているディスクイメージのファイル名が各エントリの隣に表示されます(イメージがロードされていない場合は「none」)。
    - Change QD Disk — アクティブな QuickDisk イメージファイルをその場で交換します。現在ロードされている QD イメージのファイル名がエントリの隣に表示されます。
    - Reload RP2350 Config — ESP32–RP2350 UART 経由で RP2350 にリロードコマンドを送信します。RP2350 は config.json を再解析し、完全な電源再投入なしでメモリマップとドライバー設定を再適用します。
  • Reboot メニュー
    - ESP32 — ESP32 コプロセッサーをソフトリブートします(Web サーバーと WiFi スタックを再起動。RP2350 は影響を受けません)。
    - RP2350B — RP2350 プロセッサーをリセットします(ブートローダーを再実行してアクティブなファームウェアスロットを再ロード。リセット中はホスト CPU が一時停止します)。
    - Host — ホストコンピューターのリセット線をアサートし、picoZ80 ボード自体に影響を与えずに Z80 ソケット内のレガシーコンピューターを再起動します。
    - IPL Reset — 8255 PPI ポート C ビット 3 をトグルして IPL(イニシャルプログラムロード)リセットを実行し、マシンをブートモード(BST)に戻します。MZ-80B、MZ-2000、MZ-2200、MZ-2500 ペルソナで利用可能 — オリジナルハードウェアの IPL ボタンを押すのと同等です。
    - RP2350 UF2 Boot — カスタムブートローダー経由で RP2350 を ROM UF2 USB ブートモードに強制します。ESP32 が BOOT ピンを保持した状態で RP2350 をリセットし、UART 経由でマジック ID を送信して、ブートローダーが reset_usb_boot() を呼び出すようにします。RP2350 は UF2 ドラッグアンドドロップ書き込み用の USB マスストレージデバイスとして現れます。これは、メインアプリケーションが壊れている場合(例: 不正なクロック/電圧設定)の主要な回復手段です — カスタムブートローダーは安全なデフォルトで動作し、応答可能な状態を保ちます。
    - RP2350 UF2 Boot (App) — 実行中の RP2350 アプリケーションに、SPI コマンド経由で UF2 USB ブートモードに入るよう要求します。これはブートローダー自体を置き換える必要がある状況のためのフォールバックです — 実行中のアプリケーションが直接 reset_usb_boot() を呼び出します。アプリケーションが実行中で SPI コマンドに応答できる場合にのみ動作します。

picoZ80 Web Interface — Status Dashboard

Config Editor(config.htm)
Configuration Editor ページは、JSON 設定ファイルに対する完全な編集制御を提供します。WYSIWYG エディターを使って設定を変更し、必要に応じて保存して、Apply をクリックすると設定が再処理されます。
SD カードは保存されたすべての設定の自動連番バックアップ(config.json;1config.json;2、… で最も大きい番号が最新)を保持するため、いつでも以前の動作する設定にロールバックできます。編集された設定は SD カードに保存されます。Apply をクリックするか「Reload」メニューアクションを実行すると、ESP32–RP2350 UART 経由で RP2350 にリロードコマンドが送信され、RP2350 が新しい設定を再解析・再適用し、ESP32 も自身の設定を解析してリロードします。

picoZ80 Web Interface — Config Editor

GUI 設定(configgui.htm)
GUI Configuration ページは、picoZ80 設定のためのグラフィカルなフォームベースのエディターを提供し、生の JSON Config Editor を補完します。JSON を直接編集する代わりに、すべての設定がラベル付き入力フィールド・ドロップダウンメニュー・編集可能なテーブルとして提示されます。変更は SD カード上の config.json に保存されます(保存前に既存のファイルが自動的にバックアップされます)。高度な編集には、引き続き Config Editor が直接的な JSON 操作に利用できます。
ページは 4 つのタブに分かれています。
RP2350 Global — パーティションレベルで上書きされない限り両方のファームウェアパーティションに適用されるグローバルコア設定:
  • Core Voltage — RP2350 コア電圧(V)(例: 1.10 V)。
  • CPU Frequency (MHz) — RP2350 クロック速度。有効範囲がフィールドの隣に表示されます。
  • PSRAM Frequency (MHz) — PSRAM SPI クロック周波数。値を高くするとエミュレーション速度が向上しますが、一部のボードでは安定性が低下する場合があります。

picoZ80 Web Interface — GUI Configuration: RP2350 Global

Partition 1 / Partition 2 — パーティションごとの設定。各パーティションタブは同じレイアウトです:
  • Core Settings — Core Voltage、CPU Frequency、PSRAM Frequency のパーティション固有の上書き。設定されている場合、このパーティションについてグローバル値より優先されます。
  • Memory Regions — Z80 メモリマップを定義する編集可能なテーブル。各行は、16 進の AddressSizeType(ROM、RAM、PHYSICAL、または FUNC)、T-States(ウェイトステート)、Bank(PSRAM バンク番号)、Track(T サイクル同期フラグ)、File(SD カード上の ROM イメージファイル名)、File OffsetLoad チェックボックスを指定します。行は Add Memory Region ボタンと削除ボタンで追加・削除できます。
  • I/O Regions — Z80 I/O ポートマップを定義する編集可能なテーブル。各行は AddressSizeTypeFunction(ドライバーハンドラー)を指定します。必要に応じて行を追加・削除します。
  • Drivers — アクティブなペリフェラルドライバー(例: MZ80AFI、RFS、MZ-1E30、Celestite)を有効/無効トグル付きで一覧表示します。Add Driver ボタンは、稼働中のファームウェアで有効なドライバーのドロップダウンを提示します — ページはファームウェアのペルソナ文字列を読み取り、そのシリーズ(Sharp、Amstrad、Tatung、または Open)向けのドライバーのみを提示します。各ドライバーはシステム ROM(ホストの ROM を上書きするドライバーレベルの ROM イメージ)とインターフェースを一覧表示します。フロッピーコントローラー、QuickDisk、RAM/ROM ボード、SASI ハードディスク、RS-232C シリアルカード、LAN インターフェースを追加でき、各インターフェースの ROM ファイル、ディスクイメージ、パラメーターをインラインで設定できます。
    • Base I/O Port — 再配置可能なインターフェースカード(MZ-1R12、MZ-1R18、MZ-1R23、MZ-1R37、PIO-3034、MZ-8BIO3、MZ-1E24、MZ-1E05、Celestite)では、カード本来のベースが事前入力された単一の 16 進 Base I/O Port フィールドが表示されます。カスタムボード上でカードのポートを移動するにはこれを変更してください(再配置可能なインターフェース I/O ポートを参照)。GUI は対応する iomap エントリを自動的に書き込み、値をデフォルトのままにした場合は省略します。
    • Port パラメーター — RS-232C シリアルカード(MZ-8BIO3 / MZ-1E24)は、ベース I/O ポート用の数値 Port パラメーターも受け付けます(デフォルト 0xB0。チャンネル A → USB CDC 2、チャンネル B → USB CDC 3)。

picoZ80 Web Interface — GUI Configuration: Partition 1 picoZ80 Web Interface — GUI Configuration: Partition 1

picoZ80 Web Interface — GUI Configuration: Partition 2 picoZ80 Web Interface — GUI Configuration: Partition 2

ESP32 — ESP32 コプロセッサー設定:
  • Core — ESP32 デバイスタイプ(例: S3S)。
  • Network Interfaces — WiFi と USB NCM ネットワーキングの両方の有効/無効制御:
    • WiFi Enable — WiFi を有効または無効にするチェックボックス(再起動が必要。WiFi がファームウェアにコンパイルされていない場合は無視されます)。
    • NCM Enable — USB NCM ネットワーキングを有効または無効にするチェックボックス(再起動が必要)。
    • NCM Retries — 最大接続リトライサイクル数(0 = 無限にリトライ、5〜1000 = 最大試行回数)。
    • NCM Retry Period — リトライ間の遅延(秒)(0 = 1 秒から最大 60 秒までの増加バックオフ、1〜120 = 固定間隔)。
    • NCM IP Address — USB NCM ゲートウェイ IP アドレス(デフォルト: 192.168.7.1)。2 台の picoZ80 ボードを同じホストに接続する場合、それぞれ異なるサブネットを使用する必要があります(例: 192.168.7.1 と 192.168.8.1)。変更は再起動後に有効になり、NVS に永続化されます。
    • NCM Netmask — USB NCM サブネットマスク(デフォルト: 255.255.255.0)。変更は再起動後に有効になります。
    • USB Product Name — ホストオペレーティングシステムに報告される USB デバイス製品文字列。macOS はこれを NCM ネットワークインターフェースラベルとして使用します。各ボードは MAC アドレスから一意の名前を自動生成します(例: "picoZ80-3C4E")。カスタム名を設定するにはここで上書きします(例: "picoZ80-MZ700")。自動生成にする場合は空白のままにします。変更は再起動後に有効になります。
  • WiFi Configuration — SSID、パスワード、IP アドレス、ネットマスク、WiFi モード(アクセスポイントまたはクライアント)、DHCP(有効または無効)、WebFS ディレクトリパス、ポーリング周期、TX 電力。これらの設定は WiFi Manager ページを反映しますが、完全な設定の一部としてここで編集できます。

picoZ80 Web Interface — GUI Configuration: ESP32 picoZ80 Web Interface — GUI Configuration: ESP32

Save Configuration をクリックすると、変更が SD カード上の config.json に書き込まれ(以前のバージョンは自動的にバックアップされます)、RP2350 に自動的にリロードコマンドが送信され、完全な電源再投入なしで新しい設定が適用されます。Reload をクリックすると、SD カードから現在の config.json を再読み込みします — ミスをして変更を破棄し、最後に保存した状態からやり直したい場合に便利です。

File Manager(filemanager.htm)
File Manager は、SD カード用の完全な Web ベースファイルブラウザーを提供し、SD カード上のファイルを表示するためのディレクトリ一覧レイアウトを提供します。
一般的な SD カードメンテナンスを目的としています。ROM イメージ、フロッピーディスクイメージ(DSK)、QuickDisk イメージ(QD)、RAM ディスクイメージ、Web ファイルシステムの更新を、カードを取り外すことなくアップロードできます。
各エントリには、テキストファイルをコピー・削除・ダウンロード・編集するアクションボタンがあり、上部の Select File アップロードボタンで PC から新しいファイルを転送できます。ディレクトリナビゲーションにより、roms/dsk/qd/ram/ などのサブディレクトリに降りていけます。
tar または gzip ファイルをアップロードすると、その tar または gzip(あるいは tar.gz)ファイルが現在の SD ディレクトリに自動的に展開・抽出されます。
左端の列のチェックボックス(またはヘッダーの「Select All」チェックボックス)を使用して複数のファイルを選択できます。1 つ以上の項目が選択されると、Download N ItemsDelete Selected ボタンがパネルヘッダーに現れます。ダウンロード機能は進捗モーダルとともに各ファイルを順次取得します — ディレクトリは自動的に tar アーカイブとしてダウンロードされます。Backup SD ボタンは、SD カードの全内容を 1 つのアーカイブとしてローカルコンピューターにダウンロードします。これらの機能は、picoZ80 がホストマシン内に取り付けられていて SD カードの物理的な取り外しが現実的でない場合に特に便利です。

picoZ80 Web Interface — File Manager

ペルソナ選択(personality.htm)
Persona ページは、2 つの RP2350 ファームウェアパーティションのそれぞれについて独立にアクティブなマシンペルソナを設定します。各パーティションには、サポートされるすべての Sharp MZ マシンタイプを網羅する独自のラジオボタン列があります。
  • Basic CPU — マシン固有のドライバーを持たないベアな Z80 エミュレーション。汎用的な Z80 開発に便利です。
  • MZ-80A および MZ-80B — Sharp MZ-80 シリーズ(1Z-013A モニター ROM、MZ-80 キーボード、標準メモリマップ)。
  • MZ-700 — バンク切り替え VRAM、キーボードコントローラー、オプションのフロッピー/QuickDisk ドライバーを備えた Sharp MZ-700。
  • MZ-800 — 拡張ビデオモードと QuickDisk サポートを備えた Sharp MZ-800。
  • MZ-1500 — QuickDisk とオプションのフロッピーを備えた Sharp MZ-1500。
  • MZ-2000MZ-2200MZ-2500 — 高解像度ビデオと拡張メモリを備えた後期 Sharp MZ シリーズ。
ペルソナを選択して Select Personae をクリックすると、対応する事前ビルドされた config.json が SD カードに書き込まれ(先に現在のファイルをバックアップ)、設定リロードがトリガーされます。各ファームウェアパーティションは異なるペルソナを保持できるため、例えばパーティション 1 に MZ-700 ペルソナを、パーティション 2 に MZ-80A ペルソナを置いて、SD カードの編集なしでボードを切り替えられます。
OpenZ80 実験者向けペルソナ(OpenZ80 — 実験者向けペルソナを参照)は、このページのラジオオプションではなく専用のファームウェアビルドです。ファームウェアアップデートページから OpenZ80 ファームウェアをパーティションにフラッシュし、その後 GUI 設定ページでインターフェースカードとそのベース I/O ポートを設定してください。サポートされているマシン上でリソースを追加しない素のソケット装着 Z80 が必要な場合は、上記の Basic CPU オプションが引き続き利用可能です。

picoZ80 Web Interface — Persona Selection

ファームウェアアップデート — ESP32(ota-esp32.htm)
ESP32 OTA ページは、ファームウェアアップロードを受け付ける前に ESP32 の完全なソフトウェアインベントリを報告します。
  • Modules パネル
    - 各 ESP32 ソフトウェアコンポーネントのバージョンを表示します。メイン ESP32 アプリケーション、NVS(不揮発性ストレージ)ライブラリ、WiFi スタック、FilePack(Web ファイルシステムパッケージャー)、WebFS(Flash 内 Web ファイルシステム)。アップデート後にすべてのコンポーネントが整合していることを簡単に確認できます。
  • ESP32 Partitions パネル
    - 完全な ESP32 OTA パーティションテーブル(otadata、nvs、phy_init、ota_0、ota_1)を、アドレス・サイズ・ファームウェアバージョン・ビルドタイムスタンプ・現在アクティブな OTA スロット(「Yes」と表示)とともに表示します。
  • ESP32 Firmware Upload パネル
    - ESP-IDF ビルドで生成された ESP32 バイナリ(.bin)を受け付けます。アップロード後、ESP32 は新しいファームウェアで再起動し、古いスロットはフォールバックとして保持されます。
  • FilePack Upload パネル
    - バージョン付き FilePack アーカイブを SD カードにアップロードします。FilePack は、すべての ESP32 静的 Web アセット(HTML、CSS、JavaScript テンプレート、付随ファイル)を 1 つの配布可能なアーカイブにまとめたものです。アップロード時、ESP32 はアーカイブを SD カード Web ファイルシステムディレクトリに展開します。置き換えられるファイルは、以前のバージョン番号を含むように自動的にリネームされ(例: webfswebfs.2.80)、ロールバック用に古いバージョンが保持されます。これは SD カード上の他の場所で使用されている VAX/VMS スタイルのバージョン管理と一致し、編集可能なファイルの各リビジョンが数値接尾辞付きで保持されます: config.json;1config.json;2 など — 編集が黙って上書きされることはありません。

picoZ80 Web Interface — ESP32 Firmware Update

ファームウェアアップデート — RP2350(ota-rp2350.htm)
RP2350 OTA ページは、2 つの RP2350 ファームウェアパーティションを管理します。
  • RP2350 Partitions パネル
    - 3 つすべてのパーティションを一覧表示します: パーティション 0(Bootloader)、パーティション 1(最初のアプリケーションスロット、例: "Z80 CPU Emulator")、パーティション 2(2 つ目のスロット)。各行は Flash アドレス・サイズ・チェックサム・アクティブ/実行中フラグ・ライセンス・作者・説明・バージョン・ビルド日を表示します。現在実行中のパーティションは Active 列に「Yes」と表示されます。
  • RP2350 Firmware Upload パネル
    - fw/bin/ からの純粋なバイナリ .bin ファームウェアファイルを受け付けます。ここでは UF2 は使用されません — アプリケーションパーティションは UF2 で表現できない非標準の Flash アドレスに配置されるため、OTA 転送には生のバイナリを使用します。Partition 1 / Partition 2 ラジオボタンを使用してターゲットスロットを選択します。2 つの追加チェックボックスが利用可能です: Clear App Config はターゲットスロットに関連付けられた ROM イメージと最小化 JSON 設定パーティションを消去します(互換性のない設定スキーマを持つファームウェアバージョンにアップグレードする際に便利)。Clear Flash Header は Flash パーティションヘッダーを工場出荷時のデフォルトにリセットし、ブートローダー設定を保持しつつパーティションテーブルをゼロから再構築します。アップロードは、新しいパーティションがアクティブ化される前にチェックサムで検証されます。
  • RP2350 Active Partition パネル
    - 新しいファームウェアをアップロードせずにアクティブパーティションを独立して切り替えます。ここでパーティションを選択すると、選択したスロットへの自動再起動がトリガーされます — ファイル転送なしで 2 つの事前ロードされたファームウェアバリアント(例: Z80 とテストビルド)を切り替えるのに便利です。

picoZ80 Web Interface — RP2350 Firmware Update

WiFi Manager(wifimanager.htm)
注意: WiFi Manager ページは、ESP32 ファームウェアが WiFi 有効(sdkconfig.mode_wifi_only または sdkconfig.mode_wifi_and_ncm)でビルドされている場合にのみ利用可能です。NCM のみモードでは、このページはナビゲーションに存在しません — ネットワーク接続はユーザー設定なしで USB NCM を介して自動的に提供されます。
WiFi Manager は、picoZ80 が無線ネットワークに接続する方法を設定します。上部パネルは現在アクティブな WiFi 設定(SSID、割り当てられた IP、ネットマスク、ゲートウェイ)を表示します。その下の Configure WiFi フォームはすべての設定を公開します。
  • WiFi Mode
    - Access Point: picoZ80 が独自の SSID をブロードキャストし、直接接続します(初期設定時やインフラネットワークが利用できない場合に便利)。Client: picoZ80 がステーションとして既存の WiFi ネットワークに参加します。
  • SSID と Password
    - 参加する(クライアントモード)またはブロードキャストする(AP モード)ネットワークの名前とパスフレーズ。
  • DHCP Mode
    - Enabled: ボードがネットワークの DHCP サーバーからアドレスを要求します。Disabled: 下のフィールドに入力した静的 IP、ネットマスク、ゲートウェイを使用します。Web インターフェースのアドレスが常に予測可能になるよう、固定 IP が推奨されます。
設定は Save をクリックすると ESP32 の NVS(不揮発性ストレージ)に保存され、次回再起動時に有効になります。

picoZ80 Web Interface — WiFi Manager

Action メニューと Reboot メニュー
右上のナビゲーションバーにある 2 つのドロップダウンメニューは、Web インターフェースのすべてのページで利用可能で、現在のページから離れることなく実行時操作とシステムリセット機能に素早くアクセスできます。
Action メニュー(歯車アイコン)は、再起動なしで即座に有効になる実行時操作を提供します。フロッピーディスクや QuickDisk イメージをその場で交換したり、RP2350 でライブの設定リロードをトリガーしたりできます。現在ロードされているディスクイメージのファイル名が各エントリの隣に表示されるため、オペレーターはどのイメージがマウントされているかを一目で確認できます。
Reboot メニュー(回転アイコン)は、各サブシステム(ESP32、RP2350、ホストコンピューター、IPL)に対する的を絞ったリセットオプションに加えて、ボードがホストマシン内で物理的にアクセスできない場合に USB マスストレージ経由で RP2350 を再書き込みするための 2 つの UF2 回復オプションを提供します。2 つの UF2 エントリは相補的な回復パスを提供します。ブートローダールートはメインアプリケーションが壊れている場合でも機能し、アプリルートはブートローダーを置き換える必要がある場合でも機能します。

picoZ80 Web Interface — Action Menu picoZ80 Web Interface — Reboot Menu ——————————————————————————————————–

参考サイト

以下の表は、picoZ80 の設計とプログラミングで参照したすべてのサイトをまとめたものです。
サイト 言語 説明
RP2350 Datasheet 英語 Raspberry Pi 公式の RP2350 テクニカルリファレンスおよびデータシート。
Pico SDK 英語 Raspberry Pi Pico C/C++ SDK — picoZ80 ファームウェアが使用するビルドシステムとハードウェア抽象化。
Z80 CPU User Manual 英語 Zilog Z80 CPU ファミリーユーザーマニュアル — バスタイミング、命令セット、信号の説明。
ESP-IDF 英語 ESP32 コプロセッサーファームウェアに使用される Espressif IoT 開発フレームワーク。
Sharp MZ Series 英語 Sharp MZ コンピューターのハードウェア・ソフトウェア・技術資料に関するコミュニティリソース。

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

以下の表は、picoZ80 の設計とプログラミングで参照したすべてのデータシートとマニュアルをまとめたものです。
データシート 言語 説明
RP2350 英語 Raspberry Pi RP2350 マイクロコントローラーデータシート。
ESP32-S3 英語 Espressif ESP32-S3 SoC データシート — picoZ80 ボード上の WiFi/BT コプロセッサー。
APS6404L PSRAM 英語 8MB SPI PSRAM データシート — メモリバンキングに使用される主要な拡張 RAM。
W25Q128 Flash 英語 Winbond 16MB SPI NOR Flash データシート — ファームウェアと ROM イメージを格納。
TLV62590 英語 Texas Instruments 5V→3.3V 同期整流降圧コンバーター — Z80 DIP-40 VCC ピンから picoZ80 に給電。
CH334F 英語 CH334F 4 ポート USB 2.0 ハブコントローラー — ファームウェアアップデート用の USB ハブ機能を提供。

プロジェクトプレビュー

picoZ80 プロジェクトの初期開発プレビューは X(旧 Twitter)で共有されました。以下の投稿は、ボードが初めて動作した様子を示しています。
https://x.com/engineerswork1/status/1953171627065188841

デモンストレーション動画
picoZ80 で RFS(ROM ファイリングシステム)を実行 — デモ 1
Sharp MZ-700 に取り付けた picoZ80 が、ROM ファイリングシステム(RFS)ペルソナを実行している様子です。この動画は、ボードの仮想ディスクとメモリバンキング機能を示しています。
picoZ80 v2.5 — Z80 CPU テスター
Z80 CPU テスターボードが picoZ80 をテストしている短いクリップです。テスターは picoZ80 が本物の Z80 であることを検証し、それを NMOS Z80 として識別し、8 MHz でテストコードを実行して正しい動作を確認します。
picoZ80 v2.5 — カセットテープ(CMT)付き MZ-80A
Sharp MZ-80A に取り付けた picoZ80 v2.5 が、物理的なカセットテープからプログラムをロードしている様子です。カセットのロードは極めてタイミングに敏感です — Z80 はテープハードウェアからのシリアルデータストリームを、タイミングエラーの余裕なくリアルタイムでビットバンギングしなければなりません。この動画は、picoZ80 がクリティカルな CMT タイミングを本物の Z80 と同一に処理することを示しています。
picoZ80 v2.5 — フロッピーディスク付き MZ-80A
Sharp MZ-80A に取り付けた picoZ80 v2.5 が、実際のフロッピーディスクコントローラーと物理ディスクドライブから読み取っている様子です。フロッピーディスクアクセスには、Z80 と WD1773 FDC ハードウェア間の正確で時間的にクリティカルな相互作用が必要です — DRQ は厳しいタイミングウィンドウ内でサービスされなければ、データが失われます。この動画は、picoZ80 が時間的にクリティカルな実ハードウェアと本物の Z80 と同じように相互作用することを示しています。
picoZ80 v2.5a — MZ-2000
Sharp MZ-2000 に取り付けた picoZ80 v2.5a が、完全に物理的に動作している様子です — すべての ROM、RAM、VRAM アクセスは実際の MZ-2000 ハードウェアにパススルーされます。フロッピーディスクコントローラーは仮想化されており、picoZ80 が MB8866 FDC をエミュレートして SD カードからディスクイメージを提供する一方、マシンの残りはオリジナルハードウェア上で動作します。

商用利用の制限

明示的な書面による許可なしに商用利用は許可されません。
picoZ80 のハードウェア設計(回路図、PCB レイアウト、KiCad ファイル)、ファームウェア、および関連するすべてのソフトウェアは、個人・教育・非商用目的でのみ利用可能とされています。この設計のいかなる部分(PCB アートワーク、部品表、ファームウェアバイナリ、ソースコード、ドキュメントを含むがこれらに限定されない)も、作者(Philip D. Smart)の明示的な書面による許可なしに、商用製品やサービスに使用・複製・製造・販売・組み込みすることはできません。
商用ライセンスの申請や許可される用途について相談するには、eaw.app ウェブサイトを通じて作者にお問い合わせください。

クレジット

picoZ80 プロジェクトは、複数の個人とオープンソースプロジェクトの成果の上に構築されています。彼らの貢献に深く感謝します。
  • Manuel Sainz de Baranda y Goñi
    Z80 C 言語 Z80 CPU エミュレーターライブラリ(github.com/redcode/Z80)の作者。この高精度・サイクル精度の Z80 エミュレーターコアは、RP2350 上で内部的に Z80 命令を実行する際に picoZ80 ファームウェアによって使用され、正確なフラグ動作と未公開オペコードのサポートを提供します。このライブラリは GNU General Public License v3 の条件のもとで使用されています。
  • Raspberry Pi Ltd
    Pico SDK と RP2350 ハードウェアの作者。PIO アセンブラー、C SDK、CMake ツールチェーン統合、RP2350B シリコンが、サイクル精度のバスインターフェースを可能にしています。
  • Espressif Systems
    ESP-IDF フレームワークと ESP32 ハードウェアの作者。ESP32 コプロセッサー、WiFi スタック、OTA ライブラリ、NVS ストレージフレームワークが、Web 管理インターフェースを支えています。
  • Philip Smart
    ハードウェア設計(KiCad 回路図と PCB レイアウト)、RP2350 PIO ファームウェア、ESP32 Web アプリケーション、JSON 設定システム、Sharp MZ マシンペルソナドライバー、およびすべてのプロジェクトドキュメント。
  • Grok (xAI)
    PIO ステートマシンのデバッグ中に貴重な支援を提供した AI アシスタント — 特に RP2350 PIO プログラムにおけるタイミングのエッジケースやサイクル精度のバス相互作用の問題の診断において。
  • Claude (Anthropic)
    複数の領域にわたってこのプロジェクトに貢献した AI アシスタント: プロジェクトドキュメントの執筆と構成、RP2350 と ESP32 間の FSPI/UART インターフェースの分析とファームウェア改善の提言、および継続的なファームウェア開発支援。

ライセンス

picoZ80 プロジェクトはいくつかのコンポーネントで構成され、それぞれが独自のライセンスで保護されています。
コンポーネント ライセンス
picoZ80 RP2350 ファームウェア(PIO、C ソース)GNU General Public License v3
picoZ80 ESP32 ファームウェアおよび Web インターフェースGNU General Public License v3
Z80 CPU エミュレーターライブラリ(Manuel Sainz de Baranda y Goñi)GNU General Public License v3
KiCad ハードウェア設計ファイル(回路図、PCB、Gerber)Creative Commons BY-NC-SA 4.0
ドキュメントおよびユーザーガイドCreative Commons BY-NC-SA 4.0
Raspberry Pi Pico SDKBSD 3-Clause
ESP-IDF フレームワークApache License 2.0
Bootstrap 4(Web インターフェース)MIT License
要約すると: このプロジェクトのソースコードからビルドするファームウェアとソフトウェアは GPL v3 のもとでオープンソースです。ハードウェア設計とドキュメントは CC BY-NC-SA 4.0(非商用利用のみ — 商用ライセンスは要請に応じて提供)のもとでライセンスされています。サードパーティライブラリは上記の各自のライセンスを保持します。詳細についてはリポジトリの LICENSE および NOTICE ファイルを参照してください。

ライセンス条項

Copyright © 2019–2026 Philip Smart. All rights reserved.
ハードウェア設計 — CC BY-NC-SA 4.0
すべてのハードウェア設計(KiCad 回路図、PCB レイアウト、Gerber 製造ファイル、部品表)は、Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License のもとでライセンスされています。適切なクレジットを表示し、いかなる変更も同じライセンスのもとで配布する限り、非商用目的でのみ設計を共有・改変することが自由にできます。商業的な製造または販売には別途ライセンスが必要ですinfo@eaw.app までお問い合わせください。
ファームウェアおよびソフトウェア — GNU GPL v3
ファームウェアとソフトウェアのソースコードは、GNU General Public License v3 のもとでのフリーソフトウェアです。GPL v3 の条件のもとでコードを再配布・改変できます。配布される変更はすべて、ソースコードを利用可能にした上で GPL v3 のもとでライセンスされなければなりません。
商標および帰属表示
picoZ80pico6502engineers@work の名称は Philip Smart の商標です。書面による許可なしに、これらの名称を派生製品の宣伝に使用することはできません。著作権表示、作者の帰属表示、またはブート/スプラッシュ画面のクレジットを削除・変更することはできません。このプロジェクトをリブランドして自分自身の成果物として提示することは明示的に禁止されています。詳細についてはリポジトリの NOTICE ファイルを参照してください。
商用ライセンス
picoZ80 または pico6502 ボードを商業販売目的で製造することに関心のあるメーカーまたはディストリビューターの方は、info@eaw.app までお問い合わせください。個人・教育・ホビイスト/クラブでの利用は、上記のオープンソースライセンスのもとで常に許可されています。
完全なライセンス本文は、リポジトリに LICENSELICENSE-HARDWARE.txtLICENSE-SOFTWARE.txt として収録されています。

無線に関する規制上の注意

本デバイスは、2.4 GHz ISM 帯で送信可能な ESP32-S3-PICO-1 無線モジュールを搭載しており、WiFi が有効な場合、世界中の無線周波数規制(米国の FCC Part 15 Subpart C、欧州連合の無線機器指令 2014/53/EU を含む)のもとで意図的放射体となります。
未認証ボードの NCM のみデフォルト
picoZ80 は完成したアセンブリとして FCC または RED 認証を受けていないため、ボードは WiFi アンテナマッチングネットワークを未実装とし、ESP32 ファームウェアを NCM のみ構成(sdkconfig.mode_ncm_only)でビルドして出荷する必要があります。この構成では無線周波数エネルギーは放射されず、ボードは意図的放射体規制の対象になりません。完全な Web インターフェースは USB 経由で http://192.168.7.1 でアクセス可能なままです。詳細については上記のネットワーキング — FCC / RED に関する規制上の注意セクションを参照してください。
ESP32-S3-PICO-1 モジュール自体は既存の規制認証(FCC、CE その他)を有していますが、それらのモジュールレベルの認証は、モジュールを組み込んだ完成製品に自動的には拡張されません。事前認証済みモジュールの免除により、個々のホビイストは、別途の機器認証を取得することなく、個人・実験・教育目的で限られた数のデバイスを製作できます。
重要な制限
  • WiFi を有効にした組み立て済みデバイスは、完成製品が関連する管轄区域で独立してテストされ、独自の機器認証(例: FCC ID、Notified Body 評価付き CE マーキング)を付与されていない限り、第三者に販売・販売の申し出・贈与・その他の方法で配布してはなりません
  • 他者に出荷または配布されるボードは、WiFi アンテナマッチングネットワークを未実装とした NCM のみファームウェア構成を使用しなければなりません。
  • WiFi を有効にした状態で個人使用のために限られた数量でこのプロジェクトを製作することは、デバイスが有害な干渉を引き起こさない限り、一般にホビイストおよび実験的使用の規定(例: FCC § 15.23)のもとで許可されます。
  • 規制要件は国によって異なります。米国外のビルダーは、適用される規則について自国の無線周波数当局に相談してください。
ビルダーの責任
これらの設計から製作されたデバイスが、自らの管轄区域で適用されるすべての無線周波数規制に準拠することを保証するのは、ビルダー自身の責任です。作者はこれらの設計を個人・教育・ホビイスト用途のために提供しており、それらから製作されたデバイスが商用配布の規制要件を満たすことについて、いかなる表明も行いません。