HN 日本語サマリー

← 一覧へ戻る
プログラミング

RP2350向け386 PC

A 386 PC for Your RP2350 (github.com)

195 pointsby SamuraiLion69 コメント

要約

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 GPIOM2 GPIO
Base612
Range6-1312-19
SDカード (SPIモード)
シグナルM1 GPIOM2 GPIO
CLK26
CMD37
DAT044
DAT3/CS55
PS/2キーボード
シグナルM1 GPIOM2 GPIO
CLK02
DATA13
PS/2マウス
シグナルM1 GPIOM2 GPIO
CLK140
DATA151
NES/SNESゲームパッド
シグナルM1 GPIOM2 GPIO
CLK1420
DATA1626
LATCH1521
I2Sオーディオ
シグナルM1 GPIOM2 GPIO
DATA269
BCLK2710
LRCLK2811

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でディスクイメージを設定します。

ランタイム (ディスクマネージャー):

  1. Win+F12を押してディスクマネージャーを開きます
  2. 矢印キーを使用してドライブ (A:, B:, C:, D:, E:) を選択します
  3. Enterキーを押して386/ディレクトリ内のディスクイメージをブラウズします
  4. イメージファイルを選択して挿入するか、現在のディスクを取り出します
  5. 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:) の挿入/取り出し

ビルド

前提条件
  1. Raspberry Pi Pico SDK (バージョン2.0+) をインストールします
  2. 環境変数を設定します: export PICO_SDK_PATH=/path/to/pico-sdk
  3. 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 <M1M2
-c, --cpu <MHz>CPU速度: 378 (デフォルト), 504
-p, --psram <MHz>PSRAM速度: 133 (デフォルト), 166
--usb-hidUSBキーボードを有効にする (USBシリアルは無効になる)
--hdmiHDMI出力を強制する
--debugデバッグ出力を有効にする
-cleanビルドディレクトリを最初にクリーンアップする
ビルドオプション (CMake)
オプション説明
-DPICO_BOARD=pico2RP2350用にビルド (デフォルト)
-DBOARD=M1M1 GPIOレイアウトを使用する
-DBOARD=M2M2 GPIOレイアウトを使用する (デフォルト)
-DBOARD=PCOlimex PICO-PCレイアウトを使用する
-DBOARD=Z2Waveshare RP2350-PiZeroレイアウトを使用する
-DCPU_SPEED=378CPUクロック (MHz) (378, 504)
-DPSRAM_SPEED=133PSRAMクロック (MHz) (133, 166)
-DUSB_HID_ENABLED=ONUSBキーボードを有効にする (USBシリアルは無効になる)
-DDEBUG_ENABLED=ON詳細なデバッグログを有効にする
-DFORCE_HDMI=ONHDMI出力を強制する
リリースビルド

全てのファームウェアバリアントをビルドするには:

# インタラクティブ (バージョンをプロンプト表示)
./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

謝辞

このプロジェクトは以下のオープンソースプロジェクトに基づいています:

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ドライバ。