RP2350向け386 PC
A 386 PC for Your RP2350 (github.com)
要約
RP2350(Raspberry Pi Pico 2)上で動作するi386 PCエミュレータ「FRANK 386」が開発されました。このエミュレータはVGA/HDMI出力、SDカードストレージ、PS/2およびUSBキーボード/マウス、NESゲームパッド、オーディオ出力をサポートし、DOSやWindows 3.xなどのOSを動作させることができます。
全文翻訳
FRANK 386
公式ページ: frank.rh1.tech — 全てのFRANKボードとファームウェアのハブ。
VGA/HDMI出力、SDカードストレージ、PS/2およびUSBキーボード/マウス、NESゲームパッド、音声出力を備えたRP2350 (Raspberry Pi Pico 2) 用 i386 PCエミュレータ。
Chunhui He氏によるTiny386に基づいています。
特長
- オプションのx87 FPUを備えた完全なi386 (および部分的にi486/i586) CPUエミュレーション
- 最大8MB RAM (8MB PSRAMを使用)
- VGAおよびHDMIグラフィック出力 (テキストモードおよび最大640x480のグラフィックス)
- サウンド: AdLib OPL2, Sound Blaster 16, PC Speaker, Tandy, Covox, Disney Sound Source
- フロッピー、ハードディスク、CD-ROMイメージ用のSDカードサポート
- ホットスワップ可能なディスクイメージ用のランタイムディスクマネージャー (Win+F12)
- エミュレータ設定を変更するための設定メニュー (Win+F11)
- PS/2キーボードおよびマウス入力
- ネイティブUSBホスト経由のUSBキーボードおよびマウス入力
- マウスエミュレーションモードを備えたNESゲームパッドサポート
- DOS、Windows 3.x、Windows 95、Linuxなどを起動可能
スクリーンショット
動作中のFRANK 386
[画像: スクリーンショット 1] [画像: スクリーンショット 2] [画像: スクリーンショット 3] [画像: スクリーンショット 4] [画像: スクリーンショット 5]
サポートされるボード
VGA/HDMI、SDカード、キーボード入力を統合したRP2350ベースのボード向けに設計されたファームウェアです。
- FRANK - VGA出力を備えた多用途開発ボード
- Murmulator - RP Pico 2 (M1およびM2バリアント) をベースにしたコンパクトなレトロコンピューティングプラットフォーム
- Olimex PICO-PC - Olimex RP2350 PCボード
- Waveshare RP2350-PiZero - Waveshare RP2350ボード
ハードウェア要件
- Raspberry Pi Pico 2 (RP2350) または互換ボード
- 8MB PSRAM (拡張メモリに必要)
- VGAまたはHDMIコネクタ
- SDカードモジュール (SPIモード)
- PS/2キーボード (直接接続) - または - USBキーボード (ネイティブUSBポート経由)
- 音声出力 (オプション): I2S DACまたはPWM
注意: USB HIDが有効な場合、ネイティブUSBポートはキーボード/マウス入力に使用されます。このモードではUSBシリアルコンソール(CDC)は無効になり、デバッグ出力にはUARTを使用します。
ボード構成
4つのGPIOレイアウトをサポートします: M1, M2, PC (Olimex), Z2 (Waveshare)。
VGA / HDMI
| シグナル | M1 GPIO | M2 GPIO |
|---|---|---|
| Base | 6 | 12 |
| Range | 6-13 | 12-19 |
SDカード (SPIモード)
| シグナル | M1 GPIO | M2 GPIO |
|---|---|---|
| CLK | 2 | 6 |
| CMD | 3 | 7 |
| DAT0 | 4 | 4 |
| DAT3/CS | 5 | 5 |
PS/2キーボード
| シグナル | M1 GPIO | M2 GPIO |
|---|---|---|
| CLK | 0 | 2 |
| DATA | 1 | 3 |
PS/2マウス
| シグナル | M1 GPIO | M2 GPIO |
|---|---|---|
| CLK | 14 | 0 |
| DATA | 15 | 1 |
NES/SNESゲームパッド
| シグナル | M1 GPIO | M2 GPIO |
|---|---|---|
| CLK | 14 | 20 |
| DATA | 16 | 26 |
| LATCH | 15 | 21 |
I2Sオーディオ
| シグナル | M1 GPIO | M2 GPIO |
|---|---|---|
| DATA | 26 | 9 |
| BCLK | 27 | 10 |
| LRCLK | 28 | 11 |
SDカードセットアップ
ディレクトリ構造
SDカードに 386/ ディレクトリを作成します:
SDカードルート/
└── 386/
├── config.ini # 設定ファイル
├── bios.bin # SeaBIOS ROM (必須)
├── vgabios.bin # VGA BIOS ROM (必須)
├── dos622.img # ハードディスクイメージ
├── boot.img # フロッピーイメージ
└── ... # その他のディスクイメージ
BIOSファイル
SeaBIOSのリリースからSeaBIOSとVGA BIOSをダウンロードするか、sdcard/386からbios.bin/vgabios.binを使用してください。
設定ファイル (config.ini)
386/config.iniを作成します:
[pc]
mem=8M
bios=bios.bin
vga_bios=vgabios.bin
[frank-386]
cpu_freq=504
psram_freq=166
ディスクイメージの準備
フロッピーイメージ (.img):
- 標準的な1.44MBフロッピーイメージ (1474560バイト)
- 作成方法:
dd if=/dev/zero of=floppy.img bs=512 count=2880 - DOSまたは事前に作成されたDOS起動ディスクでフォーマットしてください
ハードディスクイメージ (.img):
- 最大2GBの生ディスクイメージ
- 作成方法:
dd if=/dev/zero of=hdd.img bs=1M count=512 - DOSのFDISKとFORMATを使用してパーティション分割およびフォーマットしてください
CD-ROMイメージ (.iso):
- 標準的なISO 9660イメージ
- CDからISOを作成するにはCD書き込みソフトウェアを使用してください
ディスクイメージのロード
起動時: 上記のようにconfig.iniでディスクイメージを設定します。
ランタイム (ディスクマネージャー):
- Win+F12を押してディスクマネージャーを開きます
- 矢印キーを使用してドライブ (A:, B:, C:, D:, E:) を選択します
- Enterキーを押して
386/ディレクトリ内のディスクイメージをブラウズします - イメージファイルを選択して挿入するか、現在のディスクを取り出します
- Escapeキーを押してディスクマネージャーを閉じます
ディスクマネージャーで行われた変更は自動的にconfig.iniに保存されます。
コントロール
キーボードショートカット
| ショートカット | アクション |
|---|---|
| Win+F12 | ディスクマネージャーを開く |
| Win+F11 | 設定メニューを開く |
| Ctrl+Alt+Delete | システムリセット (ゲストOSに送信) |
設定メニュー (Win+F11)
ランタイムでエミュレータ設定を構成します:
- メモリサイズ (1-8 MB)
- CPU世代 (386/486/586)
- FPUエミュレーションのオン/オフ
- サウンドデバイス (AdLib, SB16, PC Speaker, Tandy, Covox, MPU-401, DSS)
- PS/2またはUSBマウスのオン/オフ
- NESマウスのオン/オフ (NESゲームパッドのDパッドでマウスをエミュレート、B=左クリック、A=右クリック)
- RP2350 CPU周波数と電圧
- PSRAM / Flash周波数
設定はconfig.iniに保存され、再起動後に有効になります。
ディスクマネージャー (Win+F12)
再起動せずにディスクイメージを管理します:
- フロッピーイメージ (A:, B:) の挿入/取り出し
- ハードディスクイメージ (C:, D:) の挿入/取り出し
- CD-ROMイメージ (E:) の挿入/取り出し
ビルド
前提条件
- Raspberry Pi Pico SDK (バージョン2.0+) をインストールします
- 環境変数を設定します:
export PICO_SDK_PATH=/path/to/pico-sdk - ARM GCCツールチェーンをインストールします
ビルド手順
# リポジトリをクローン
git clone https://github.com/rh1tech/frank-386.git
cd frank-386
# デフォルト設定 (M2ボード, 378MHz, PS/2キーボード) でビルド
./build.sh
# M1ボード用にビルド
./build.sh -M1
# USBキーボードサポート付きでビルド
./build.sh --usb-hid
# カスタムビルド
./build.sh -b M1 -c 504 -p 166 --debug
ビルドオプション (build.sh)
| オプション | 説明 |
|---|---|
| `-b, --board <M1 | M2 |
-c, --cpu <MHz> | CPU速度: 378 (デフォルト), 504 |
-p, --psram <MHz> | PSRAM速度: 133 (デフォルト), 166 |
--usb-hid | USBキーボードを有効にする (USBシリアルは無効になる) |
--hdmi | HDMI出力を強制する |
--debug | デバッグ出力を有効にする |
-clean | ビルドディレクトリを最初にクリーンアップする |
ビルドオプション (CMake)
| オプション | 説明 |
|---|---|
-DPICO_BOARD=pico2 | RP2350用にビルド (デフォルト) |
-DBOARD=M1 | M1 GPIOレイアウトを使用する |
-DBOARD=M2 | M2 GPIOレイアウトを使用する (デフォルト) |
-DBOARD=PC | Olimex PICO-PCレイアウトを使用する |
-DBOARD=Z2 | Waveshare RP2350-PiZeroレイアウトを使用する |
-DCPU_SPEED=378 | CPUクロック (MHz) (378, 504) |
-DPSRAM_SPEED=133 | PSRAMクロック (MHz) (133, 166) |
-DUSB_HID_ENABLED=ON | USBキーボードを有効にする (USBシリアルは無効になる) |
-DDEBUG_ENABLED=ON | 詳細なデバッグログを有効にする |
-DFORCE_HDMI=ON | HDMI出力を強制する |
リリースビルド
全てのファームウェアバリアントをビルドするには:
# インタラクティブ (バージョンをプロンプト表示)
./release.sh
# バージョン番号を指定
./release.sh 1.02
これにより、release/ディレクトリにファームウェアファイルが作成されます:
frank-386_m1_<version>.uf2- M1ボード (Murmulator)frank-386_m2_<version>.uf2- M2ボード (Murmulator)frank-386_pc_<version>.uf2- Olimex PICO-PCfrank-386_z2_<version>.uf2- Waveshare RP2350-PiZero
フラッシュ
# デバイスをBOOTSELモードで:
picotool load build/frank-386.uf2
# またはフラッシュスクリプトを使用:
./flash.sh
トラブルシューティング
Windows 95セットアップ中の「0 bytes of memory」
メモリチェックをスキップするには setup /im を使用します。
Windows 95起動中の「Protection error」
patcher9xを使用してください。
mapdrive.comサポート (リダイレクター) を有効にしてSDカードをネットワーク接続ドライブHにマップする
config.iniで redirector = 1 を設定します。
キーボード入力がない
- PS/2の場合: キーボード接続とGPIOピンを確認してください
- USBの場合: ファームウェアが
--usb-hidオプションでビルドされていることを確認してください
SDカードが検出されない
- SDカードがFAT32でフォーマットされていることを確認してください
- SDカードモジュールの接続を確認してください
- SDカードに
386/ディレクトリが存在することを確認してください
ライセンス
MITライセンス。詳細はLICENSEを参照してください。
作者と貢献者
Mikhail Matveev & DnCraptor
- frank-386ポートと開発 (2026)
- リポジトリ: https://github.com/rh1tech/frank-386
謝辞
このプロジェクトは以下のオープンソースプロジェクトに基づいています:
Tiny386
- プロジェクト: Tiny386 - x86 PC Emulator
- 作者: Chunhui He
- ライセンス: BSD 3-Clause
- 説明: コアi386 CPUエミュレータおよびPCペリフェラルエミュレーション (8259 PIC, 8254 PIT, 8042キーボードコントローラ, VGA, サウンドデバイス)。
Pico-286
- プロジェクト: Pico-286
- 作者: xrip
- ライセンス: MIT
- 説明: RP2350プラットフォーム統合、ディスク管理、VGAドライバの概念。
QuakeGeneric
- プロジェクト: QuakeGeneric
- 作者: DnCraptor
- ライセンス: GPL v2
- 説明: RP2350ハードウェア統合パターン、Murmulatorプラットフォームサポート、およびPS/2マウスドライバ実装。
QEMU
- プロジェクト: QEMU
- 作者: Fabrice Bellard (2003-2017), Vassili Karpov "malc" (2003-2005), Joachim Henke (2006)
- ライセンス: MIT
- 説明: 8259 PIC, 8254 PIT, 8257 DMA, 8042キーボードコントローラ, PCIバス, PCスピーカー, VGA, AdLib OPL2プロキシを含むPCペリフェラルエミュレーションコード。
MAME FMサウンドジェネレータ
- プロジェクト: MAME
- 作者: Tatsuyuki Satoh (1999-2000)
- ライセンス: LGPL 2.1+
- 説明: AdLibエミュレーション用のFM OPLサウンドジェネレータ (fmopl)。MAMEからフォークされ、LGPLの下で再ライセンスされています。
inih
- プロジェクト: inih
- 作者: Ben Hoyt (2009-2020)
- ライセンス: BSD 3-Clause
- 説明: 設定ファイル処理用のシンプルなINIファイルパーサー。
SeaBIOS
- プロジェクト: SeaBIOS
- 作者: Kevin O'Connor および貢献者
- ライセンス: GNU LGPL v3
- 説明: x86 BIOSおよびVGA BIOSファームウェア。
FatFs
- プロジェクト: FatFs
- 作者: ChaN (2014, 2021)
- ライセンス: FatFsライセンス (BSDスタイル)
- 説明: SDカードアクセス用の汎用FATファイルシステムモジュール。
FatFsユーティリティ
- 作者: Carl John Kugler III (2021)
- ライセンス: Apache 2.0
- 説明: エラー処理および結果文字列変換用のFatFsユーティリティ関数。
Raspberry Pi Pico SDK
- プロジェクト: Pico SDK
- 作者: Raspberry Pi (Trading) Ltd. (2020)
- ライセンス: BSD 3-Clause
- 説明: SDカード通信用のPIO SPIドライバ。