17 KiB
Vendored
picoZ80 / pico6502
RP2350 ベースのドロップイン CPU 交換ボード — サイクル精度 PIO バスインターフェース、WiFi 管理、仮想デバイスフレームワーク搭載
Copyright (c) 2019-2026 Philip Smart — eaw.app
概要
picoZ80 は、レガシー Z80 ベースコンピュータの Z80 DIP-40 CPU ソケットに直接装着できるカスタム PCB です。個別の Z80 プロセッサの代わりに、RP2350B マイクロコントローラ(デュアルコア 150 MHz Cortex-M33、最大 300 MHz)を搭載し、プログラマブル I/O(PIO)ステートマシンが Z80 のアドレス、データ、制御バスをサイクル精度で完全に制御します。
pico6502 は同じアーキテクチャを MOS 6502 に適用し、互換ホストの 6502 DIP-40 CPU を置換します。
すべてのバストランザクションは RP2350 の PIO エンジンによりリアルタイムで処理され、ホストシステムは実際の CPU と同じバスタイミングを認識します。RP2350 の第 2 コア、512 KB オンチップ SRAM、8 MB 外部 PSRAM、16 MB Flash により、高速実行、仮想化メモリ、ROM バンキング、仮想ディスクドライブ、マシンペルソナエミュレーションなど、ほぼ無制限の機能が実現されます。
ESP32 コプロセッサが WiFi、Bluetooth、SD カードマスストレージ、ブラウザベースの管理インターフェースを提供します。すべての設定は SD カード上の config.json ファイルで駆動され、メモリマップ、ROM イメージ、ドライバ選択の再設定にリコンパイルは不要です。
主な機能
- ドロップイン Z80/6502 交換 — DIP-40 CPU ソケットに装着するだけ。ホストは通常のバスタイミングを認識
- サイクル精度 PIO バスインターフェース — 3 つの RP2350 PIO ブロックがアドレス、データ、制御信号をフルバス速度で処理
- 8 MB PSRAM — 64 バンク x 64 KB のバンクアドレス空間、512 バイト単位で設定可能
- ROM/RAM バンキング — ブロックを ROM、RAM、物理ホストメモリ、仮想関数ハンドラとしてマッピング可能
- 仮想デバイスフレームワーク — メモリブロックや I/O ポート範囲を C 関数で実装可能
- マシンペルソナ — JSON 駆動設定で任意の Z80/6502 ホストに対応。Sharp MZ ペルソナ同梱
- フロッピーおよび QuickDisk エミュレーション — SD カードイメージからの WD1773 FDC および Sharp QuickDisk ドライブエミュレーション
- WiFi ウェブ管理 — 設定、ファイル管理、OTA アップデート、ペルソナ選択用の 7 ページ Bootstrap ウェブインターフェース
- デュアルファームウェアパーティション — 安全な OTA アップグレード用の 2 つの独立した 5 MB ファームウェアスロット
- USB ファームウェアアップデート — ブートローダが USB ブリッジを公開し、ハードウェアデバッガ不要で初期フラッシュ可能
ハードウェア
picoZ80 PCB(リビジョン 2.5)は、Z80 DIP-40 パッケージの物理的フットプリント内に収まるコンパクトな 6 層基板です。すべてのロジックは 3.3 V で動作し、5 V ホストバスに対するレベルシフトを備えています。
主要コンポーネント
| コンポーネント | 説明 |
|---|---|
| RP2350B | デュアルコア Cortex-M33(最大 300 MHz)、512 KB SRAM、48 GPIO(QFN-80) |
| 16 MB SPI Flash | ブートローダ、2 つのファームウェアスロット、2 つの設定スロット、パーティションテーブル |
| 8 MB PSRAM | 外部疑似スタティック RAM — 64 バンク x 64 KB |
| ESP32-S3-PICO-1 | WiFi/BT コプロセッサ、SD カード、ウェブサーバ |
| SD カードスロット | FAT32 — config.json、ROM イメージ、ディスクイメージを格納 |
| USB ハブ | CH334F — ホスト接続とファームウェアアップデートブリッジ |
| 電源 | TLV62590BV 5 V-to-3.3 V バックコンバータ(Z80 ソケット VCC から給電) |
回路図シート
KiCad 設計(kicad/PICOZ80/)は 5 シートに分かれています:
- RP2350B プロセッサ — GPIO 割り当て、水晶、Flash、PSRAM
- ESP32 コプロセッサ — WiFi モジュール、SD カード、FSPI/UART プロセッサ間通信
- Z80 バスインターフェース — DIP-40 ソケット、全バス信号用直列抵抗ネットワーク
- 電源 — 5 V-to-3.3 V 同期バックコンバータ
- USB ハブコントローラ — CH334F(Mini-B コネクタ付き)
アーキテクチャ
デュアルコア設計
- Core 0 — 非リアルタイムタスク: USB ブリッジ、ファイル I/O(ESP32 中継)、ファームウェアアップデート調整、ウォッチドッグ監視、障害診断
- Core 1 — CPU エミュレーションホットループ専用: PIO FIFO サービス、メモリマップに対するアドレス解決、物理ホスト・PSRAM・仮想デバイスハンドラへのディスパッチ
PIO バスインターフェース
Z80 バスインターフェースは RP2350 PIO アセンブリ(z80.pio)で完全に実装されています。3 つの PIO ブロックすべてを使用:
| PIO | プログラム | 機能 |
|---|---|---|
| 0 | z80_addr, z80_data, z80_cycle, z80_fetch |
アドレス/データバス、サイクルシーケンス、オペコードフェッチ |
| 1 | z80_mem_read/write, z80_io_read/write, z80_busrq, z80_nmi, z80_clk_sync, z80_int_ack |
メモリ/IO サイクル、バス制御、割り込み |
| 2 | z80_reset, z80_refresh, z80_wait, z80_sync |
ホストタイミング、DRAM リフレッシュ、ウェイトステート、T1 同期 |
3 層メモリモデル
| 層 | ストレージ | 説明 |
|---|---|---|
| 1 | RP2350 SRAM(512 KB) | O(1) ブロックタイプルックアップテーブル — 512 バイトブロック用 128 エントリ |
| 2 | PSRAM(8 MB、SPI) | 64 バンク x 64 KB RAM/ROM イメージ、ポインタ配列、関数ポインタ配列 |
| 3 | Flash(16 MB、SPI) | ファームウェア、ROM イメージ(起動時に PSRAM にコピー)、設定 JSON |
メモリブロックタイプ: PHYSICAL, PHYSICAL_VRAM, PHYSICAL_HW, RAM, ROM, VRAM, FUNC, PTR
Flash メモリレイアウト
| パーティション | アドレス範囲 | サイズ | 内容 |
|---|---|---|---|
| ブートローダ | 0x10000000-0x1001FFFF |
128 KB | USB ブリッジ、ファームウェアアップデート、パーティション選択 |
| App スロット 1 | 0x10020000-0x1051FFFF |
5 MB | Z80 ファームウェア(パーティション 1) |
| App スロット 2 | 0x10520000-0x10A1FFFF |
5 MB | Z80 ファームウェア(パーティション 2) |
| App 設定 1 | 0x10A20000-0x10C9FFFF |
2.5 MB | ROM イメージ + 設定 JSON(スロット 1) |
| App 設定 2 | 0x10CA0000-0x10F1FFFF |
2.5 MB | ROM イメージ + 設定 JSON(スロット 2) |
| 全般設定 | 0x10F20000-0x10FFEFFF |
892 KB | コア設定 |
| パーティションテーブル | 0x10FFF000-0x11000000 |
4 KB | アクティブスロット、チェックサム、メタデータ |
マシンペルソナ
ファームウェアは複数のマシンペルソナをサポートし、各ペルソナは異なる PSRAM バンクに関連付けられます。ペルソナの切り替えにより、ホストをリブートせずにアクティブなメモリマップとロード済み ROM イメージが変更されます。
ペリフェラルおよびファイリングシステムドライバ
| ドライバ | 説明 |
|---|---|
MZ700.c |
Sharp MZ-700 ペリフェラルセット — バンク切り替え、ビデオ、キーボード I/O |
WD1773.c |
WD1773 フロッピーディスクコントローラ — SD カードからの 80 トラック DSK/RAW イメージ |
QDDrive.c |
Sharp QuickDisk ドライブ — QD イメージファイルによる完全な SIO/2 エミュレーション |
RFS.c |
ROM ファイリングシステム — SD からの MZF ロード、CP/M v2.23、SA-1510 BASIC、MS-BASIC v4.7 |
TZFS.c |
TranZPUter ファイリングシステム (開発中) |
MZ-1E05.c |
Sharp MZ-1E05 フロッピーディスクインターフェースユニット |
MZ-1E14.c |
BIOS ROM 付き QuickDisk コントローラ(MZ-700/MZ-800) |
MZ-1E19.c |
BIOS ROM なし QuickDisk コントローラ(MZ-800/MZ-2000/MZ-2200/MZ-2500) |
MZ-1R12.c |
32 KB バッテリバックアップ RAM ボード(SD カードに永続化) |
MZ-1R18.c |
64 KB RAM 拡張 / RAMFILE |
ビルド手順
前提条件
- CMake 3.20+
- ARM GCC ツールチェーン —
arm-none-eabi-gcc - Docker — ESP32 ファームウェアビルド用(Espressif IDF コンテナ
espressif/idf:release-v5.4) - Python 3 — Pico SDK ビルドツールに必要
- Perl — 自動バージョンインクリメントに使用
ディレクトリ構成
<root>/
├── get_and_build_sdk.sh # pico-sdk のクローンとビルド
├── build_tzpuPico.sh # RP2350 ファームウェアのビルド(+ オプションで ESP32)
├── picoZ80.h.tmpl # ボード定義テンプレート(ビルド時に SDK にコピー)
├── pico-sdk/ # get_and_build_sdk.sh でクローン
├── pico-extras/ # get_and_build_sdk.sh でクローン
└── projects/
├── Z80/ # Z80 エミュレーターライブラリ(別途クローン)
└── tzpuPico/ # 本プロジェクト
ステップ 1 — プロジェクトのクローン
mkdir -p <root>/projects
cd <root>/projects
# メインプロジェクトのクローン
git clone https://git.eaw.app/eaw/pico.git tzpuPico
# Z80 エミュレーターライブラリのクローン
git clone https://github.com/redcode/Z80.git Z80
ステップ 2 — PICO_PATH の設定
get_and_build_sdk.sh と build_tzpuPico.sh の先頭にある PICO_PATH 変数を編集:
export PICO_PATH=/your/chosen/root/
ステップ 3 — Pico SDK の取得とビルド
cd <root>
./get_and_build_sdk.sh
ステップ 4 — RP2350 ファームウェアのビルド
cd <root>
# 標準リリースビルド(RP2350 のみ)
./build_tzpuPico.sh
# デバッグビルド
./build_tzpuPico.sh DEBUG
# フルビルド — RP2350 + Docker 経由の ESP32 ファームウェア
./build_tzpuPico.sh ALL
出力ファイル:
projects/tzpuPico/fw/uf2/— ブートローダ UF2 イメージ(初期 USB フラッシュ用)projects/tzpuPico/fw/bin/— アプリケーションパーティションバイナリ(OTA アップデート用)
ESP32 ファームウェアの個別ビルド
alias idf54='docker run --rm --privileged \
--volume /dev:/dev --volume /sys:/sys:ro \
--volume /dev/bus/usb:/dev/bus/usb \
-v $PWD:/project -w /project \
-it espressif/idf:release-v5.4 idf.py "$@"'
cd <root>/projects/tzpuPico/esp32
idf54 build
フラッシュ
初期 RP2350 フラッシュ
6 ピンデバッグヘッダのピン配置:
| ピン 1 | ピン 2 | ピン 3 | ピン 4 | ピン 5 | ピン 6 |
|---|---|---|---|---|---|
| SWCLK | SWDIO | Reset RP2350 | Reset ESP32 | GND | BOOTSEL |
- **ピン 6(BOOTSEL)**を Low に保持
- 電源を投入するか、**ピン 3(Reset)**を Low にして解放
- 起動開始後すぐに BOOTSEL を解放
- USB を接続 — RP2350 がマスストレージデバイスとして列挙
- マウントされたドライブに
Bootloader_<version>.uf2をコピー
初期 ESP32 フラッシュ
python3 -m venv ./venv/ && source ./venv/bin/activate
cd $HOME/esptool
PORT=/dev/ttyUSB0 # システムに合わせて調整
BINPATH=/path/to/build
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
OTA アップデート(初期フラッシュ後)
- RP2350 —
http://<device-ip>/ota-rp2350.htmにアクセスし、.binファイルをアップロード - ESP32 —
http://<device-ip>/ota-esp32.htmにアクセスし、ファームウェアバイナリまたは FilePack アーカイブをアップロード
SD カードの準備
FAT32 でフォーマットしてください。ルートディレクトリに config.json を配置します。設定で参照される ROM イメージおよびディスクイメージ用のサブディレクトリを作成します。ボード稼働後は、ウェブファイルマネージャページからも SD カードを管理できます。
ウェブインターフェース
ESP32 が WiFi 経由で 7 ページの Bootstrap ウェブインターフェースを提供:
| ページ | 機能 |
|---|---|
| ステータス | システム概要 — RP2350/ESP32 ファームウェアバージョン、パーティション情報、稼働時間 |
| パーソナリティ | マシンペルソナの選択と切り替え |
| 設定 | シンタックスハイライト付きの config.json 編集 |
| ファイルマネージャ | SD カード上のファイルの閲覧、アップロード、ダウンロード、削除 |
| OTA RP2350 | RP2350 ファームウェアバイナリの OTA アップロード |
| OTA ESP32 | ESP32 ファームウェアまたは FilePack アーカイブのアップロード |
| WiFi 設定 | AP/クライアントモード、SSID、パスワードの設定 |
ドキュメント
詳細なドキュメントは eaw.app で公開されています:
- picoZ80 概要 — ハードウェア写真と機能概要
- picoZ80 ユーザーマニュアル — セットアップ、設定、操作ガイド
- picoZ80 テクニカルガイド — アーキテクチャ詳細、PIO 内部、メモリモデル
- picoZ80 デベロッパーズガイド — ビルド、デバッグ、ペルソナとドライバの追加
- pico6502 概要 — 6502 バリアント
クレジット
- Manuel Sainz de Baranda y Goni — Z80 C 言語 Z80 CPU エミュレーターライブラリ(GPL v3)
- Raspberry Pi Ltd — Pico SDK および RP2350 ハードウェア
- Espressif Systems — ESP-IDF フレームワークおよび ESP32 ハードウェア
- Philip Smart — ハードウェア設計、RP2350 PIO ファームウェア、ESP32 ウェブアプリケーション、JSON 設定システム、Sharp MZ ペルソナドライバ、ドキュメント
商用利用の制限
書面による明示的な許可なく商用利用は認められません。
picoZ80/pico6502 のハードウェア設計、ファームウェア、および関連するすべてのソフトウェアは、個人使用、教育目的、および非商用利用のみに提供されています。この設計のいかなる部分も、著者の書面による明示的な許可なく、商用製品に使用、複製、製造、販売、または組み込むことはできません。
商用ライセンスのお問い合わせ: info@eaw.app
ライセンス
| コンポーネント | ライセンス |
|---|---|
| picoZ80/pico6502 RP2350 ファームウェア(PIO、C ソース) | GNU General Public License v3 |
| picoZ80/pico6502 ESP32 ファームウェアおよびウェブインターフェース | GNU General Public License v3 |
| Z80 CPU エミュレーターライブラリ(Manuel Sainz de Baranda y Goni) | GNU General Public License v3 |
| KiCad ハードウェア設計ファイル(回路図、PCB、ガーバー) | Creative Commons BY-NC-SA 4.0 |
| ドキュメントおよびユーザーガイド | Creative Commons BY-NC-SA 4.0 |
| Raspberry Pi Pico SDK | BSD 3-Clause |
| ESP-IDF フレームワーク | Apache License 2.0 |
| Bootstrap 4(ウェブインターフェース) | MIT License |
ファームウェアとソフトウェアは GPL v3 の下でオープンソースです。ハードウェア設計とドキュメントは CC BY-NC-SA 4.0 の下でライセンスされています(非商用利用のみ — 商用ライセンスはリクエストに応じて提供可能)。サードパーティライブラリは各自のライセンスを保持します。
picoZ80、pico6502、engineers@work の名称は Philip Smart の商標です。帰属表示、商標、および盗用防止の条項の詳細は NOTICE ファイルをご覧ください。
ライセンス全文: LICENSE | LICENSE-HARDWARE.txt | LICENSE-SOFTWARE.txt