プログラミング
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ボードとファームウェアのハブ。
RP2350(Raspberry Pi Pico 2)向けのi386 PCエミュレータで、VGA/HDMI出力、SDカードストレージ、PS/2およびUSBキーボード/マウス、NESゲームパッド、オーディオ出力を備えています。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 動作中
対応ボード
このファームウェアは、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信号
| Signal | M1 GPIO | M2 GPIO |
|---|---|---|
| VGA | 6 | 12 |
| Range | 6-13 | 12-19 |
SDカード(SPIモード)
| Signal | M1 GPIO | M2 GPIO |
|---|---|---|
| CLK | 2 | 6 |
| CMD | 3 | 7 |
| DAT0 | 4 | 4 |
| DAT3/CS | 5 | 5 |
PS/2キーボード
| Signal | M1 GPIO | M2 GPIO |
|---|---|---|
| CLK | 0 | 2 |
| DATA | 1 | 3 |
PS/2マウス
| Signal | M1 GPIO | M2 GPIO |
|---|---|---|
| CLK | 14 | 0 |
| DATA | 15 | 1 |
NES/SNESゲームパッド
| Signal | M1 GPIO | M2 GPIO |
|---|---|---|
| CLK | 14 | 20 |
| DATA | 16 | 26 |
| LATCH | 15 | 21 |
I2Sオーディオ
| Signal | 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およびVGA BIOSをSeaBIOSのリリースからダウンロードするか、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ライティングソフトウェアを使用してCDからISOを作成してください。
起動時のディスクイメージのロード:
上記のように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-padでマウスをエミュレート、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|PC|Z2> | ボードバリアント(デフォルト: 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-PC
* frank-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 Project: Tiny386 - x86 PC Emulator
著者: Chunhui He
ライセンス: BSD 3-Clause
説明: コアi386 CPUエミュレータとPCペリフェラルエミュレーション(8259 PIC、8254 PIT、8042キーボードコントローラ、VGA、サウンドデバイス)。
Pico-286 Project: Pico-286
著者: xrip
ライセンス: MIT
説明: RP2350プラットフォーム統合、ディスク管理、VGAドライバの概念。
QuakeGeneric Project: QuakeGeneric
著者: DnCraptor
ライセンス: GPL v2
説明: RP2350ハードウェア統合パターン、Murmulatorプラットフォームサポート、PS/2マウスドライバの実装。
QEMU Project: 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 Sound Generator Project: MAME
著者: Tatsuyuki Satoh(1999-2000)
ライセンス: LGPL 2.1+
説明: AdLibエミュレーション用のFM OPLサウンドジェネレータ(fmopl)。MAMEからフォークされ、LGPLの下で再ライセンスされています。
inih Project: ini