pico6502

注記: pico6502 プロジェクトは現在も開発初期段階にあり、picoZ80 が十分に完成した時点で最新情報に更新される予定です。以下の情報は設計上の意図を説明するものであり、すべての機能がファームウェアに実装されているわけではありません。

概要

pico6502 は、picoZ80 に対応する 6502 ファミリ向けの製品です。RP2350B マイコン、8MB PSRAM、16MB フラッシュ、ESP32 コプロセッサという同一のボードハードウェアを使用しながら、Z80 ではなく MOS 6502 DIP-40 ソケット を対象としています。任意の 6502 ベースコンピュータに取り付けると、pico6502 は物理 CPU を置き換え、RP2350 の PIO ステートマシンを通じて 6502 のアドレスバス・データバス・コントロールバスを完全にサイクル精度で制御します。
picoZ80 と同様に、pico6502 は完全に JSON で設定します。SD カード上の config.json ファイルがメモリマップ、ROM イメージ、ドライバのバインディングを定義します。異なる 6502 ベースのホストへの適応やメモリレイアウトの変更に再コンパイルは不要です。すべての管理は、オンボード ESP32 が提供するブラウザベースのインターフェースから行います。
  • 6502 ドロップイン交換品
    - 任意の 6502 DIP-40 ソケットに取り付け可能。ホストは PIO インターフェースを通じて常に正確な 6502 バスタイミングを確認できます。
  • サイクル精度の PIO バスインターフェース
    - RP2350 PIO ステートマシンが、6502 の PHI1/PHI2 デュアルフェーズクロック、RNW、SYNC、IRQ、NMI、RDY、RESET 信号を処理します。
  • 大容量バンク切り替えメモリ空間
    - 8MB PSRAM を 64 バンク × 64KB として使用。512 バイトブロック単位で RAM、ROM、PHYSICAL、FUNC のいずれかとして設定可能。
  • 仮想デバイスフレームワーク
    - 任意のメモリ領域を C ハンドラ関数でバックアップでき、6522 VIA、6845 CRTC などの仮想化ペリフェラルやカスタム I/O を実現します。
  • ROM イメージのロード
    - ホストマシン用の ROM イメージ(BIOS、モニタ、言語 ROM)を SD カードに保存し、起動時に PSRAM に読み込みます。
  • WiFi およびウェブ管理
    - picoZ80 と同じ 7 ページ構成の Bootstrap ウェブインターフェース — ダッシュボード、設定エディタ、ファイルマネージャ、ペルソナ選択、OTA ファームウェアアップデート、WiFi マネージャ。
  • デュアルファームウェアパーティション
    - OTA アップデートをサポートする 5MB のファームウェアスロットが 2 つあり、ブートローダがパーティション切り替えを管理します。
  • USB ファームウェアアップデート
    - ブートローダがハードウェアデバッガなしでの初期フラッシュ書き込み用に USB ブリッジを提供します。
X (Twitter) プロジェクトプレビュー — picoZ80/pico6502 の動作紹介

ハードウェア

pico6502 PCB(リビジョン 2.2)は、picoZ80 と同じ基本設計を共有しながら、Z80 インターフェースではなく 6502 専用のバスインターフェースを搭載した、コンパクトな 52mm × 19mm のボードです。4 枚の回路図シートが RP2350B プロセッサ、ESP32 コプロセッサ、6502 バスインターフェース、電源回路をカバーしています。picoZ80 v2.5 に搭載されている USB ハブは、現行の pico6502 リビジョンには搭載されていません。すべてのロジックは 3.3V で動作し、バスインターフェースは 6502 の 5V 信号レベルに対応して設計されています。

主要コンポーネント
  • RP2350B(Cortex-M33 デュアルコア)
    - 最大 300MHz で動作する主プロセッサ。コア 1 が 6502 エミュレーションのホットループを担当し、コア 0 がファイル I/O、USB、ESP32 リレーを処理します。512KB オンチップ SRAM。
  • 16MB SPI フラッシュ
    - picoZ80 と同じレイアウト:ブートローダ、2 つの 5MB アプリケーションスロット、2 つの設定スロット、汎用設定、パーティションテーブル。
  • 8MB PSRAM(SPI)
    - エミュレートされた 6502 用に 64 バンク × 64KB のバンク切り替えアドレス空間。メモリブロックポインタ配列と I/O 関数ポインタ配列が RAM/ROM 領域の上位 PSRAM に格納されます。
  • ESP32 コプロセッサ
    - WiFi、SD カード、ウェブサーバ。RP2350 とは 50MHz FSPI および 460.8kbaud UART で通信します。
  • SD カードスロット
    - FAT32 形式、ESP32 が管理。config.json、ROM イメージ、ディスクイメージを保存します。
  • USB ハブ
    - ホスト接続とファームウェアアップデートブリッジング用のオンボード USB ハブ。
  • 3.3V 電源回路
    - 6502 DIP-40 VCC ピンの 5V から降圧するバックコンバータ。

ボード設計(KiCad)
pico6502 のハードウェアは KiCad で設計されています。現行リビジョンは v2.2 です。回路図および PCB レイアウトファイルはプロジェクトリポジトリの kicad/PICO6502/ 以下にあります。
4 枚の回路図シートの内容は以下のとおりです:
シート 1 — RP2350B プロセッサ
6502 バス、16MB フラッシュ、8MB PSRAM、ESP32 通信向けの RP2350B QFN-80 GPIO 割り当て。6502 バスには A0–A15、D0–D7、PHI0/PHI1/PHI2、RNW、SYNC、IRQ、NMI、RDY、RESET が必要で、RP2350B の 48 本の GPIO ピンの大半を使用します。

pico6502 Schematic Sheet 1 — RP2350B Processor

シート 2 — ESP32 コプロセッサ
ESP32 モジュール、SD カードインターフェース、アンテナ、プロセッサ間通信(FSPI + UART)。picoZ80 設計と機能的に同一です。

pico6502 Schematic Sheet 2 — ESP32 Co-processor

シート 3 — 6502 バスインターフェース
DIP-40 ソケット接続とバスインターフェース抵抗ネットワーク。Z80 と異なり、6502 には独立した I/O 空間がなく、すべてのペリフェラルはメモリマップドです。すべてのアドレス、データ、コントロール信号は、PIO ステートマシンが管理する RP2350 GPIO ピンへ直列抵抗を通じてルーティングされます。

pico6502 Schematic Sheet 3 — 6502 Bus Interface

シート 4 — 電源回路
入出力フィルタリングを備えた TLV62590BV 5V→3.3V 同期整流バックコンバータ。6502 DIP-40 ソケットの VCC ピンから電力を取得します。

pico6502 Schematic Sheet 4 — Power Supply

KiCad ソースファイル:kicad/PICO6502/PICO6502_Schematic.pdf(回路図 PDF)および kicad/PICO6502/(KiCad プロジェクト全体)。
👀 インタラクティブ BOM — pico6502 v2.2(PCB コンポーネント配置ビューア)

アーキテクチャ

デュアルコア設計
RP2350B のコア割り当ては picoZ80 と同じ構成です:
コア 0 — USB ブリッジ、ファームウェアアップデートの調整、ESP32 へのファイル I/O リレー、ESP32 UART コマンドディスパッチ、パーティション管理。
コア 1 — 6502 エミュレーションのホットループ。PIO FIFO をサービスして 6502 バストランザクションを処理し、各アドレスをメモリマップに照合して、PSRAM、PHYSICAL パススルー、または FUNC 仮想デバイスハンドラへディスパッチします。内部ループは最小レイテンシを確保するため RP2350 SRAM 上で実行されます。
コア間通信は picoZ80 と同じ queue_t メッセージパッシングを使用し、フロッピー/ディスクイメージの変更、設定のリロード、ファイルの読み書き、ファームウェアバージョン照会などのメッセージを転送します。

PIO バスインターフェース
6502 バスインターフェースは M6502.pio に実装されています。RP2350 は 3 つの PIO ブロックを提供しており、6502 ファームウェアはすべてを使用します:
  • PIO 0 — アドレスバスおよびデータバス(GPIO 0–23)
    - m6502_addr(A0–A15、GPIO 0–15)と m6502_data(D0–D7、GPIO 16–23)を同時に実行。アドレスワードはコア 1 の FIFO にプッシュされ、データは RNW に応じてドライブまたはサンプリングされます。
  • PIO 1 — コントロール信号およびサイクル実行(GPIO 16–47)
    - サイクルシーケンサ(m6502_cycle)、オペコードフェッチ(m6502_fetch)、メモリ読み書き(m6502_readm6502_write)、IRQ 検出(m6502_irq)、NMI 検出(m6502_nmi)、Set Overflow 検出(m6502_so)を実行します。
  • PIO 2 — クロック生成(GPIO 16–47)
    - m6502_clock_6502 を実行し、外部 PHI0 入力から PHI1 および PHI2 の 2 相非重複クロックを生成します。コア 1 のスケジューリングに依存せず、常に正確な 6502 バスタイミングを保証します。
M6502.pio に含まれる PIO プログラムの全一覧:
プログラム 機能
m6502_clock_6502 外部 PHI0 から PHI1/PHI2 の 2 相クロックを生成します。
m6502_addr 16 ビットアドレス(A0–A15)を出力し、サイクル開始を通知します(IRQ 0)。
m6502_data D0–D7 をドライブまたはサンプリングします(IRQ 1)。トライステート制御付き。
m6502_irq IRQ アサートを検出します(IRQ フラグ 5)。
m6502_nmi NMI アサートを検出します(IRQ フラグ 4)。
m6502_so Set Overflow(SO)ピンのアサートを検出します(IRQ フラグ 6)。
m6502_cycle トップレベルのバスサイクルシーケンサ。IRQ 7 が実行ループからの終了を通知します。
m6502_fetch オペコードフェッチバスサイクル(PHI2 + RNW = 読み取り)。
m6502_read メモリ読み取りバスサイクル。
m6502_write メモリ書き込みバスサイクル。
ステートマシンは PIO IRQ フラグで同期します:IRQ 0(アドレス/サイクル開始)、IRQ 1(データフェーズ)、IRQ 4(NMI)、IRQ 5(IRQ)、IRQ 6(SO)、IRQ 7(実行ループ終了)。Z80 インターフェースとの主な違いは、6502 の 2 相クロック方式です。PHI1 と PHI2 は非重複であり、アドレスバスは PHI1 の立ち上がりエッジで有効になり、データは PHI2 の立ち下がりエッジ前に提示またはサンプリングされます。PIO 2 をクロック生成専用とすることで、コア 1 の動作に関わらず 6502 のタイミングが常に正確に保たれます。

メモリモデル
6502 のメモリモデルは Z80 モデルと構造的に同一ですが、独立した I/O アドレス空間がありません。6502 には IORQ に相当するものがないため、すべてのペリフェラルレジスタは 64KB のメモリマップ上に現れます。同じ 3 層アーキテクチャが適用されます:
第 1 層 — RP2350 SRAM:512 バイトブロックごとに O(1) ディスパッチを行う 128 エントリのブロックポインタ配列。
第 2 層 — PSRAM(8MB):64 バンク × 64KB の RAM/ROM イメージおよび関数ポインタ配列。
第 3 層 — フラッシュ(16MB):ファームウェア、ROM イメージ、圧縮済み設定 JSON。
6502 メモリマップで使用可能なメモリブロックタイプ:
タイプ 説明
PHYSICAL 実際のホストハードウェアへのパススルー。
PHYSICAL_VRAM ウェイトステートを伴うホストビデオ RAM。
RAM 読み書き可能 — PSRAM バンクでバックアップ。
ROM 読み取り専用 — PSRAM バンクでバックアップ。
FUNC 仮想デバイス — すべてのアクセス時に C ハンドラが呼び出されます。6502 には I/O 空間がないため、すべてのペリフェラルエミュレーションに使用します。
PTR バイト単位のリダイレクト。
フラッシュメモリレイアウト
picoZ80 のレイアウトと同一です:
パーティション アドレス範囲 サイズ 内容
ブートローダ 0x10000000–0x1001FFFF 128KB USB ブリッジ、ファームウェアアップデート、パーティションセレクタ
アプリスロット 1 0x10020000–0x1051FFFF 5MB メイン 6502 ファームウェア(パーティション 1)
アプリスロット 2 0x10520000–0x10A1FFFF 5MB メイン 6502 ファームウェア(パーティション 2)
アプリ設定 1 0x10A20000–0x10C9FFFF 2.5MB ROM イメージ + 圧縮済み設定 JSON(スロット 1)
アプリ設定 2 0x10CA0000–0x10F1FFFF 2.5MB ROM イメージ + 圧縮済み設定 JSON(スロット 2)
汎用設定 0x10F20000–0x10FFEFFF 892KB コア設定、スクラッチ領域
パーティションテーブル 0x10FFF000–0x11000000 4KB アクティブスロット、チェックサム、メタデータ

ビルド手順

pico6502 は picoZ80 と同じビルドシステムとディレクトリ構成を使用します。ルートディレクトリの作成、PICO_PATH の設定、get_and_build_sdk.sh の実行、ESP-IDF 用 Docker エイリアスの設定など、完全なセットアップ手順については picoZ80 のビルド手順 を参照してください。pico6502 固有の差異については以下に記載します。
pico6502 ファームウェアには Zeta Z80 エミュレータライブラリは不要です。projects/Z80 のクローンも必要ありません。
プロジェクトのクローン
mkdir -p <root>/projects
cd <root>/projects
git clone <tzpuPico-repo-url> tzpuPico
RP2350 ファームウェアのビルド
同じ build_tzpuPico.sh スクリプトを使用します。スクリプト先頭の PICO_PATH が正しく設定されていることを確認し、ルートから実行してください:
cd <root>

<a name="standard-release-build" id="standard-release-build"></a>
# 標準リリースビルド
./build_tzpuPico.sh

<a name="debug-build" id="debug-build"></a>
# デバッグビルド
./build_tzpuPico.sh DEBUG

<a name="full-build-including-esp32-firmware-via-docker" id="full-build-including-esp32-firmware-via-docker"></a>
# Docker 経由で ESP32 ファームウェアを含む完全ビルド
./build_tzpuPico.sh ALL
ESP32 ファームウェアの個別ビルド
cd <root>/projects/tzpuPico/esp32
idf54 build
idf54 Docker エイリアスの定義については picoZ80 のビルド手順 を参照してください。
フラッシュ書き込み
フラッシュ書き込みの手順は picoZ80 と同一です。初回の RP2350 フラッシュは USB マスストレージ経由で、初回の ESP32 フラッシュは esptool 経由で行い、以降のアップデートは OTA ウェブページから実施します。esptool コマンドやボードリビジョンの注意事項を含む詳細は picoZ80 のフラッシュ書き込みセクション を参照してください。

デバッグ

pico6502 のデバッグ手順は picoZ80 のデバッグセクション と同じです。ハードウェア接続、OpenOCD のセットアップ、グローバル GDB 初期化の詳細はそちらを参照してください。picoZ80 との違いは、メインファームウェアのビルドディレクトリ(BaseZ80 の代わりに BaseM6502)と ~/.gdbinitadd-auto-load-safe-path エントリのみです。

RP2350 — SWD デバッグ
6 ピンデバッグヘッダの SWCLK(ピン 1)、SWDIO(ピン 2)、GND(ピン 5)に CMSIS-DAP プローブを接続します。pico6502 は picoZ80 と同じカスタム OpenOCD ターゲット rp2350_tzpu.cfg を使用します。ファイルの完全な内容は picoZ80 のデバッグセクション を参照してください。一度インストールしたら、OpenOCD を起動します:
sudo cp rp2350_tzpu.cfg /usr/local/share/openocd/scripts/target/
openocd -f interface/cmsis-dap.cfg -f target/rp2350_tzpu.cfg -c "adapter speed 5000"
以下を ~/.gdbinit に追加してください(必要に応じてパスを絶対パスに変更):
set history save on
set history filename ~/.gdb_history
set history size 65536
add-auto-load-safe-path build/bin/model/BaseM6502/.gdbinit:build/bin/model/Bootloader/.gdbinit
ブートローダのデバッグ
# Core 0
cd build/bin/model/Bootloader
cp ../../../../.gdbinit.bootloader.3333 .gdbinit
gdb-multiarch Bootloader.elf


# Core 1 (別ターミナル)
cd build/bin/model/Bootloader
cp ../../../../.gdbinit.bootloader.3334 .gdbinit
gdb-multiarch Bootloader.elf
メインファームウェアのデバッグ
# Core 0
cd build/bin/model/BaseM6502
cp ../../../../.gdbinit.3333 .gdbinit
gdb-multiarch BaseM6502_0x10020000.elf


# Core 1 (別ターミナル)
cd build/bin/model/BaseM6502
cp ../../../../.gdbinit.3334 .gdbinit
gdb-multiarch BaseM6502_0x10020000.elf

ESP32 — USB デバッグ
pico6502 ボードの ESP32 USB ポートに USB ケーブルを接続します。ESP32-S3 内蔵の USB-JTAG インターフェースは外部プローブを必要としません。OpenOCD を起動してから Xtensa GDB を起動します:
openocd -f board/esp32s3-builtin.cfg
xtensa-esp32s3-elf-gdb esp32/build/main.elf
(gdb) target extended-remote :3333

設定(JSON)

pico6502 は picoZ80 と同じ JSON 設定機構を使用します。トップレベルキーは "rp2350" で、RP2350 の動作パラメータ用の "core" セクションを含みます。CPU 固有のセクションには("z80" の代わりに)"6502" キーを使用し、6502 には独立した I/O 空間がないため "io" 配列はなく、すべてのペリフェラルマッピングは FUNC タイプのブロックとして "memory" 配列に現れます。
{
  "esp32": {
    "core": {
      "device": "6502",
      "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
    },
    "6502": {
      "memory":  [ ... ],
      "drivers": [ ... ]
    }
  }
}
esp32 — ESP32 設定
esp32 トップレベルオブジェクトは ESP32 コプロセッサを設定します。corewifi の 2 つのサブオブジェクトを含みます。
esp32.core
キー 説明
device 文字列 CPU デバイスタイプ — ESP32 が使用するプロセッサのペルソナを指定します。有効な値:"Z80"(picoZ80)、"6502"(pico6502)、"6512"(pico6512)。
mode 整数 デフォルトの起動モード:0 = クライアント(ステーション)モード、1 = アクセスポイントモード。NVS に保存されます。
esp32.wifi
wifi オブジェクトは config.json から WiFi の認証情報とネットワーク設定を注入し、NVS に保存されている内容を上書きします。このブロックを無視して以前に保存した NVS 設定を使用するには、override0 に設定してください。
キー 説明
override 0/1 マスタースイッチ。1 = 以下のすべての設定を適用;0 = このブロックを無視して保存済み NVS 設定を使用。
wifimode 文字列 アクセスポイントモードの場合は "ap";クライアント/ステーションモードの場合は "client"
ssid 文字列 作成(AP)または接続(クライアント)する WiFi ネットワーク名。
password 文字列 WiFi パスフレーズ。
ip 文字列 固定 IP アドレス(例:"192.168.1.192")。
netmask 文字列 サブネットマスク(例:"255.255.255.0")。
gateway 文字列 デフォルトゲートウェイアドレス。
dhcp 0/1 クライアントモード専用。1 = DHCP;0 = 固定 ip/netmask/gateway を使用。
webfs 文字列 SD カード上のウェブファイルシステムのルートディレクトリを上書きします(デフォルト:"webfs")。
persist 0/1 1 = 解決された設定を NVS に書き戻す;0 = 今回のセッションのみ適用。

core — RP2350 動作パラメータ
キー 説明
cpufreq 整数 RP2350 システムクロック周波数(Hz)(例:300000000 は 300 MHz)。
psramfreq 整数 PSRAM SPI クロック周波数(Hz)(例:133000000 は 133 MHz)。
voltage 浮動小数点 RP2350 コア電圧(例:1.10)。

memory — メモリマップ
6502 はメモリマップド I/O アーキテクチャであるため、すべてのペリフェラルは memory 配列内に現れます。仮想デバイスハンドラにマッピングされるアドレス範囲には FUNC 型を使用してください。
キー 説明
enable 0/1 このエントリが有効かどうか。
addr 16進文字列 6502 アドレス空間における開始アドレス。
size 16進文字列 リージョンサイズ。
type 文字列 PHYSICALPHYSICAL_VRAMRAMROMFUNCPTR
bank 整数 RAM/ROM 型の PSRAM バンク番号。
task 文字列 FUNC 型ブロック用のオプションタスク識別子。
file 文字列 起動時に読み込む ROM イメージへの SD カードパス。
"memory": [
  {
    "enable": 1,
    "addr":   "0xE000",
    "size":   "0x2000",
    "type":   "ROM",
    "bank":   0,
    "task":   "",
    "file":   "/ROM/host_bios.rom"
  },
  {
    "enable": 1,
    "addr":   "0x0000",
    "size":   "0xE000",
    "type":   "RAM",
    "bank":   0,
    "task":   "",
    "file":   ""
  },
  {
    "enable": 1,
    "addr":   "0xC000",
    "size":   "0x0010",
    "type":   "FUNC",
    "bank":   0,
    "task":   "via6522",
    "file":   ""
  }
]

drivers — ROM ローダー
6502 のドライバモデルは Z80 モデルよりもシンプルです。各ドライバエントリは起動時に 1 つ以上の ROM イメージを PSRAM に読み込みます。アドレス再マップやI/O再マップのサブテーブルはなく、すべてのメモリレイアウトは memory 配列で定義されます。
キー 説明
enable 0/1 このドライバエントリが有効かどうか。
name 文字列 この ROM 読み込みエントリの説明名。
rom 配列 起動時に PSRAM へ読み込む ROM イメージ。

rom[] エントリ:

キー 説明
enable 0/1 この ROM イメージを読み込むかどうか。
file 文字列 ROM バイナリへの SD カードパス。
loadaddr 配列 ロードアドレス記述子。

loadaddr[] エントリ:

キー 説明
enable 0/1 このロードアドレスエントリが有効かどうか。
position 整数 file 内のインデックス(マルチ ROM ファイルの場合)。
addr 16進文字列 6502 アドレス空間における転送先アドレス。
bank 整数 読み込む PSRAM バンク。
size 16進文字列 読み込むバイト数。
"drivers": [
  {
    "enable": 1,
    "name":   "BIOS",
    "rom": [
      {
        "enable":   1,
        "file":     "/ROM/host_bios.rom",
        "loadaddr": [
          {
            "enable":   1,
            "position": 0,
            "addr":     "0xE000",
            "bank":     0,
            "size":     "0x2000"
          }
        ]
      }
    ]
  },
  {
    "enable": 1,
    "name":   "CharROM",
    "rom": [
      {
        "enable":   1,
        "file":     "/ROM/charrom.bin",
        "loadaddr": [
          {
            "enable":   1,
            "position": 0,
            "addr":     "0xB800",
            "bank":     0,
            "size":     "0x0800"
          }
        ]
      }
    ]
  }
]

最小構成の設定例
2KB のゼロページ/スタック RAM エリア、48KB の汎用 RAM、8KB の BIOS ROM、および 0xC000 に VIA ペリフェラルハンドラを持つ 6502 ホスト向けの最小構成:
{
  "rp2350": {
    "core": {
      "cpufreq":   300000000,
      "psramfreq": 133000000,
      "voltage":   1.10
    },
    "6502": {
      "memory": [
        { "enable":1, "addr":"0x0000", "size":"0x0200",
          "type":"RAM", "bank":0, "task":"", "file":"" },
        { "enable":1, "addr":"0x0200", "size":"0xBE00",
          "type":"RAM", "bank":0, "task":"", "file":"" },
        { "enable":1, "addr":"0xC000", "size":"0x0010",
          "type":"FUNC", "bank":0, "task":"via6522", "file":"" },
        { "enable":1, "addr":"0xE000", "size":"0x2000",
          "type":"ROM", "bank":0, "task":"", "file":"/ROM/host_bios.rom" }
      ],
      "drivers": [
        {
          "enable":1, "name":"BIOS",
          "rom": [
            { "enable":1, "file":"/ROM/host_bios.rom",
              "loadaddr":[{ "enable":1, "position":0,
                            "addr":"0xE000", "bank":0, "size":"0x2000" }] }
          ]
        }
      ]
    }
  }
}

ウェブインターフェース

pico6502 のウェブインターフェースは picoZ80 のインターフェースと構造が同一です — ESP32 が http://<device-ip>/ で提供する 7 つの Bootstrap 4 ページで構成されています。初回起動時はボードの WiFi AP に接続し、WiFi Manager 経由でクライアントモードを設定してネットワークに参加してください。
ページ URL 機能
ダッシュボード / リアルタイムシステム状態:プロセッサ、デバイス、ファームウェアバージョン、アクティブパーティション。
設定エディタ /config.htm シンタックスハイライトとリブートなしリロード機能を備えたブラウザ内 config.json エディタ。
ファイルマネージャ /filemanager.htm SD カードファイルブラウザ:アップロード、ダウンロード、リネーム、削除。SD カードを取り外さずに ROM イメージやディスクイメージを転送。
ペルソナ選択 /personality.htm ファームウェアパーティションごとにアクティブなマシンペルソナを選択。
ESP32 OTA /ota-esp32.htm WiFi 経由で ESP32 ファームウェアをアップロード;バージョン管理された FilePack ウェブファイルシステムアーカイブを SD カードにアップロード。
RP2350 OTA /ota-rp2350.htm WiFi 経由で RP2350 ファームウェアをアップロード;アクティブパーティションの表示と切り替え。
WiFi マネージャ /wifimanager.htm WiFi SSID、パスワード、モード(AP またはクライアント)を設定。
各ウェブインターフェースページの詳細な説明については picoZ80 ページを参照してください — pico6502 の実装は同一です。

参考サイト

以下の表は、pico6502 の設計およびプログラミングにおいて参照したすべてのサイトを掲載しています。
サイト 言語 説明
RP2350 データシート 英語 Raspberry Pi RP2350 公式テクニカルリファレンスおよびデータシート。
Pico SDK 英語 Raspberry Pi Pico C/C++ SDK — pico6502 ファームウェアで使用されるビルドシステムとハードウェア抽象化レイヤー。
MOS 6502 データシート 英語 オリジナルの MOS Technology 6502 MPU データシート — バスタイミング、ピン説明および電気的特性。
ESP-IDF 英語 ESP32 コプロセッサファームウェアに使用される Espressif IoT Development Framework。
6502 ソフトウェアリポジトリ 英語 コミュニティ 6502 ソフトウェアおよび ROM イメージリポジトリ。

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

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

プロジェクトプレビュー

picoZ80 および pico6502 プロジェクトは X(旧 Twitter)で初めてプレビューされました:
https://x.com/engineerswork1/status/1953171627065188841

デモンストレーション動画
pico6502 のデモンストレーション動画はプロジェクトの成熟とともに追加される予定です。共有プラットフォームの動作例については picoZ80 デモンストレーション動画を参照してください。

商用利用の制限

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

クレジット

pico6502 プロジェクトは複数の個人およびオープンソースプロジェクトの成果の上に構築されています。それらの貢献に心から感謝いたします。
  • Manuel Sainz de Baranda y Goñi
    Z80 C 言語 Z80 CPU エミュレータライブラリ(github.com/redcode/Z80)の作者。このライブラリは併行プロジェクトの picoZ80 で使用されています。同じ高精度エミュレーションの哲学と共有ファームウェアインフラが pico6502 の設計にも反映されており、Manuel の功績はより広いプロジェクトファミリーの一部として心から認識されています。
  • Raspberry Pi Ltd
    Pico SDK および RP2350 ハードウェアの作者。PIO アセンブラ、C SDK、CMake ツールチェーン統合、および RP2350B シリコンが、サイクル精度の高い 6502 バスインターフェースを可能にしています。
  • Espressif Systems
    ESP-IDF フレームワークおよび ESP32 ハードウェアの作者。ESP32 コプロセッサ、WiFi スタック、OTA ライブラリ、および NVS ストレージフレームワークがウェブ管理インターフェースを支えています。
  • Philip Smart
    ハードウェア設計(KiCad 回路図および PCB レイアウト)、RP2350 PIO ファームウェア、ESP32 ウェブアプリケーション、JSON 設定システム、およびすべてのプロジェクトドキュメント。
  • Grok (xAI)
    PIO ステートマシンのデバッグ中に貴重な支援を提供した AI アシスタント — 特に RP2350 PIO プログラムにおけるタイミングのエッジケースとサイクル精度のバスインタラクション問題の診断において。
  • Claude (Anthropic)
    複数の分野にわたりこのプロジェクトに貢献した AI アシスタント:プロジェクトドキュメントの執筆と構成、RP2350 と ESP32 間の FSPI/UART インターフェースの分析とファームウェア改善提案、および継続的なファームウェア開発支援。

ライセンス

pico6502 プロジェクトは複数のコンポーネントで構成されており、それぞれ独自のライセンスが適用されています:
コンポーネント ライセンス
pico6502 RP2350 ファームウェア(PIO、C ソース)GNU General Public License v3
pico6502 ESP32 ファームウェアおよびウェブインターフェースGNU General Public License v3
KiCad ハードウェア設計ファイル(回路図、PCB、ガーバー)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(ウェブインターフェース)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 レイアウト、ガーバー製造ファイル、部品表)は Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License の下でライセンスされています。適切なクレジットを表示し、同じライセンスの下で変更を配布する限り、非商用目的でのみ設計を共有および改変することができます。商用製造または販売には別途ライセンスが必要ですinfo@eaw.app までご連絡ください。
ファームウェアおよびソフトウェア — GNU GPL v3
ファームウェアおよびソフトウェアのソースコードは GNU General Public License v3 の下でフリーソフトウェアです。GPL v3 の条件に基づいてコードを再配布および改変することができます。配布される変更は GPL v3 の下でライセンスされ、ソースコードが公開されなければなりません。
商標および帰属表示
picoZ80pico6502、および engineers@work の名称は Philip Smart の商標です。書面による許可なくこれらの名称を派生製品の宣伝に使用することはできません。著作権表示、著者の帰属表示、またはブート/スプラッシュ画面のクレジットを削除または変更することはできません。このプロジェクトをリブランドして自分の作品として提示することは明示的に禁止されています。詳細はリポジトリ内の NOTICE ファイルをご覧ください。
商用ライセンス
picoZ80 または pico6502 ボードの商用販売を目的とした製造に関心のあるメーカーまたは販売代理店の方は、info@eaw.app までご連絡ください。個人使用、教育目的、および趣味/クラブでの使用は、上記のオープンソースライセンスの条件の下で常に許可されています。
完全なライセンステキストはリポジトリ内に LICENSELICENSE-HARDWARE.txt、および LICENSE-SOFTWARE.txt として含まれています。