338 lines
20 KiB
Markdown
Vendored
338 lines
20 KiB
Markdown
Vendored
# picoZ80 / pico6502
|
||
|
||
**RP2350 ベースのドロップイン CPU 交換ボード — サイクル精度 PIO バスインターフェース、WiFi 管理、仮想デバイスフレームワーク搭載**
|
||
|
||
Copyright (c) 2019-2026 Philip Smart — [eaw.app](https://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 シートに分かれています:
|
||
|
||
1. **RP2350B プロセッサ** — GPIO 割り当て、水晶、Flash、PSRAM
|
||
2. **ESP32 コプロセッサ** — WiFi モジュール、SD カード、FSPI/UART プロセッサ間通信
|
||
3. **Z80 バスインターフェース** — DIP-40 ソケット、全バス信号用直列抵抗ネットワーク
|
||
4. **電源** — 5 V-to-3.3 V 同期バックコンバータ
|
||
5. **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 — プロジェクトのクローン
|
||
|
||
```bash
|
||
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` 変数を編集:
|
||
|
||
```bash
|
||
export PICO_PATH=/your/chosen/root/
|
||
```
|
||
|
||
### ステップ 3 — Pico SDK の取得とビルド
|
||
|
||
```bash
|
||
cd <root>
|
||
./get_and_build_sdk.sh
|
||
```
|
||
|
||
### ステップ 4 — RP2350 ファームウェアのビルド
|
||
|
||
```bash
|
||
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 ファームウェアの個別ビルド
|
||
|
||
```bash
|
||
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 |
|
||
|
||
1. **ピン 6(BOOTSEL)**を Low に保持
|
||
2. 電源を投入するか、**ピン 3(Reset)**を Low にして解放
|
||
3. 起動開始後すぐに BOOTSEL を解放
|
||
4. USB を接続 — RP2350 がマスストレージデバイスとして列挙
|
||
5. マウントされたドライブに `Bootloader_<version>.uf2` をコピー
|
||
|
||
### 初期 ESP32 フラッシュ
|
||
|
||
```bash
|
||
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](https://eaw.app) で公開されています:
|
||
|
||
- [picoZ80 概要](https://eaw.app/ja/picoz80/) — ハードウェア写真と機能概要
|
||
- [picoZ80 ユーザーマニュアル](https://eaw.app/ja/picoz80-usermanual/) — セットアップ、設定、操作ガイド
|
||
- [picoZ80 テクニカルガイド](https://eaw.app/ja/picoz80-technicalguide/) — アーキテクチャ詳細、PIO 内部、メモリモデル
|
||
- [picoZ80 デベロッパーズガイド](https://eaw.app/ja/picoz80-developersguide/) — ビルド、デバッグ、ペルソナとドライバの追加
|
||
- [pico6502 概要](https://eaw.app/ja/pico6502/) — 6502 バリアント
|
||
|
||
---
|
||
|
||
## クレジット
|
||
|
||
- **Manuel Sainz de Baranda y Goni** — [Z80](https://github.com/redcode/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](mailto: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](NOTICE) ファイルをご覧ください。
|
||
|
||
ライセンス全文: [LICENSE](LICENSE) | [LICENSE-HARDWARE.txt](LICENSE-HARDWARE.txt) | [LICENSE-SOFTWARE.txt](LICENSE-SOFTWARE.txt)
|
||
|
||
---
|
||
|
||
## 無線規制に関する注意事項
|
||
|
||
**本デバイスは 2.4 GHz ISM バンドで送信する ESP32-S3-PICO-1 無線モジュールを搭載しており、世界各国の無線周波数規制(米国の FCC Part 15 Subpart C、欧州連合の無線機器指令 2014/53/EU を含む)において意図的放射器に該当します。**
|
||
|
||
ESP32-S3-PICO-1 モジュール自体は既存の規制認証(FCC、CE など)を取得していますが、そのモジュールレベルの認証は、**モジュールを組み込んだ完成品に自動的に適用されるものではありません**。事前認証モジュールの免除規定は、**個人の趣味愛好家**が**個人使用、実験、または教育目的**で少数のデバイスを製作する場合に、個別の機器認可を取得せずに行うことを許可するものです。
|
||
|
||
### 重要な制限事項
|
||
|
||
- 組み立てられたデバイスは、完成品が独自にテストされ、該当する管轄区域で機器認可(例:FCC ID、認定機関による CE マーキング評価)を取得しない限り、**第三者への販売、販売の申し出、贈与、またはその他の方法での配布を行ってはなりません**。
|
||
- 個人使用のために少数を製作することは、趣味愛好家および実験使用の規定(例:FCC §15.23)に基づき、デバイスが有害な干渉を引き起こさない限り、一般的に許可されています。
|
||
- 規制要件は国によって異なります。米国外の製作者は、適用される規則について自国の無線周波数当局に確認してください。
|
||
|
||
### 製作者の責任
|
||
|
||
本設計に基づいて製作されたデバイスが、管轄区域内の適用されるすべての無線周波数規制に準拠することは、製作者の単独の責任です。著者は本設計を個人使用、教育、および趣味愛好家向けに提供しており、本設計から製作されたデバイスが商業的配布の規制要件を満たすことについて、いかなる表明も行いません。
|