A 386 PC for Your RP2350

Sep 14, 2026 03:25 PM - 1 hour ago 2

Official page: frank.rh1.tech — hub for each FRANK boards and firmware.

i386 PC Emulator for RP2350 (Raspberry Pi Pico 2) pinch VGA/HDMI output, SD paper storage, PS/2 and USB keyboard/mouse, NES gamepad, and audio output.

Based connected Tiny386 by Chunhui He.

  • Full i386 (and partially i486/i586) CPU emulation pinch optional x87 FPU
  • Up to 8MB RAM (using 8MB PSRAM)
  • VGA and HDMI graphics output (text modes and graphics up to 640x480)
  • Sound: AdLib OPL2, Sound Blaster 16, PC Speaker, Tandy, Covox, Disney Sound Source
  • SD paper support for floppy, difficult disk, and CD-ROM images
  • Runtime disk head (Win+F12) for hot-swapping disk images
  • Settings paper (Win+F11) for changing emulator configuration
  • PS/2 keyboard and rodent input
  • USB keyboard and rodent input (via autochthonal USB Host)
  • NES gamepad support pinch rodent emulation mode
  • Boots DOS, Windows 3.x, Windows 95, Linux, and more

Screenshot 1 Screenshot 2 Screenshot 3 Screenshot 4 Screenshot 5

This firmware is designed for RP2350-based boards pinch integrated VGA/HDMI, SD card, and keyboard input:

  • FRANK - A versatile improvement committee pinch VGA output
  • Murmulator - A compact retro-computing level based connected RP Pico 2 (M1 and M2 variants)
  • Olimex PICO-PC - Olimex RP2350 PC board
  • Waveshare RP2350-PiZero - Waveshare RP2350 board
  • Raspberry Pi Pico 2 (RP2350) aliases compatible board
  • 8MB PSRAM (required for extended memory)
  • VGA aliases HDMI connector
  • SD paper module (SPI mode)
  • PS/2 keyboard (directly connected) - OR - USB keyboard (via autochthonal USB port)
  • Audio output (optional): I2S DAC aliases PWM

Note: When USB HID is enabled, the autochthonal USB larboard is utilized for keyboard/mouse input. USB serial console (CDC) is abnormal successful this mode; usage UART for debug output.

Four GPIO layouts are supported: M1, M2, PC (Olimex), and Z2 (Waveshare).

Signal M1 GPIO M2 GPIO
Base 6 12
Range 6-13 12-19
Signal M1 GPIO M2 GPIO
CLK 2 6
CMD 3 7
DAT0 4 4
DAT3/CS 5 5
Signal M1 GPIO M2 GPIO
CLK 0 2
DATA 1 3
Signal M1 GPIO M2 GPIO
CLK 14 0
DATA 15 1
Signal M1 GPIO M2 GPIO
CLK 14 20
DATA 16 26
LATCH 15 21
Signal M1 GPIO M2 GPIO
DATA 26 9
BCLK 27 10
LRCLK 28 11

Create a 386/ directory connected your SD card:

SD Card Root/ └── 386/ ├── config.ini # Configuration file ├── bios.bin # SeaBIOS ROM (required) ├── vgabios.bin # VGA BIOS ROM (required) ├── dos622.img # Hard disk image ├── boot.img # Floppy image └── ... # Other disk images

Download SeaBIOS and VGA BIOS from the SeaBIOS releases aliases usage bios.bin/vgabios.bin from sdcard/386.

Configuration File (config.ini)

Create 386/config.ini:

[pc] mem=8M bios=bios.bin vga_bios=vgabios.bin [frank-386] cpu_freq=504 psram_freq=166

Floppy Images (.img):

  • Standard 1.44MB floppy images (1474560 bytes)
  • Create with: dd if=/dev/zero of=floppy.img bs=512 count=2880
  • Format pinch DOS aliases usage pre-made DOS footwear disks

Hard Disk Images (.img):

  • Raw disk images up to 2GB
  • Create with: dd if=/dev/zero of=hdd.img bs=1M count=512
  • Use FDISK and FORMAT from DOS to partition and format

CD-ROM Images (.iso):

  • Standard ISO 9660 images
  • Use CD burning package to create ISOs from CDs

At Boot: Configure disk images successful config.ini arsenic shown above.

At Runtime (Disk Manager):

  1. Press Win+F12 to unfastened the Disk Manager
  2. Use arrow keys to prime a thrust (A:, B:, C:, D:, E:)
  3. Press Enter to browse disk images successful the 386/ directory
  4. Select an image record to insert, aliases eject the existent disk
  5. Press Escape to adjacent the Disk Manager

Changes made via Disk Manager are saved to config.ini automatically.

Shortcut Action
Win+F12 Open Disk Manager
Win+F11 Open Settings Menu
Ctrl+Alt+Delete System reset (sent to impermanent OS)

Configure emulator settings astatine runtime:

  • Memory size (1-8 MB)
  • CPU procreation (386/486/586)
  • FPU emulation on/off
  • Sound devices (AdLib, SB16, PC Speaker, Tandy, Covox, MPU-401, DSS)
  • PS/2 aliases USB Mouse on/off
  • NES Mouse on/off (emulate rodent pinch NES gamepad D-pad, B=left click, A=right click)
  • RP2350 CPU wave and voltage
  • PSRAM / Flash frequency

Settings are saved to config.ini and return effect aft restart.

Manage disk images without restarting:

  • Insert/eject floppy images (A:, B:)
  • Insert/eject difficult disk images (C:, D:)
  • Insert/eject CD-ROM images (E:)
  1. Install the Raspberry Pi Pico SDK (version 2.0+)
  2. Set situation variable: export PICO_SDK_PATH=/path/to/pico-sdk
  3. Install ARM GCC toolchain
# Clone the repository git clone https://github.com/rh1tech/frank-386.git cd frank-386 # Build pinch default settings (M2 board, 378MHz, PS/2 keyboard) ./build.sh # Build for M1 board ./build.sh -M1 # Build pinch USB keyboard support ./build.sh --usb-hid # Custom build ./build.sh -b M1 -c 504 -p 166 --debug
Option Description
-b, --board <M1|M2|PC|Z2> Board version (default: M2)
-c, --cpu <MHz> CPU speed: 378 (default), 504
-p, --psram <MHz> PSRAM speed: 133 (default), 166
--usb-hid Enable USB keyboard (disables USB serial)
--hdmi Force HDMI output
--debug Enable debug output
-clean Clean build directory first
Option Description
-DPICO_BOARD=pico2 Build for RP2350 (default)
-DBOARD=M1 Use M1 GPIO layout
-DBOARD=M2 Use M2 GPIO layout (default)
-DBOARD=PC Use Olimex PICO-PC layout
-DBOARD=Z2 Use Waveshare RP2350-PiZero layout
-DCPU_SPEED=378 CPU timepiece successful MHz (378, 504)
-DPSRAM_SPEED=133 PSRAM timepiece successful MHz (133, 166)
-DUSB_HID_ENABLED=ON Enable USB keyboard (disables USB serial)
-DDEBUG_ENABLED=ON Enable verbose debug logging
-DFORCE_HDMI=ON Force HDMI output

To build each firmware variants:

# Interactive (prompts for version) ./release.sh # With type number ./release.sh 1.02

This creates firmware files successful the release/ directory:

  • frank-386_m1_<version>.uf2 - M1 committee (Murmulator)
  • frank-386_m2_<version>.uf2 - M2 committee (Murmulator)
  • frank-386_pc_<version>.uf2 - Olimex PICO-PC
  • frank-386_z2_<version>.uf2 - Waveshare RP2350-PiZero
# With instrumentality successful BOOTSEL mode: picotool load build/frank-386.uf2 # Or usage the flash script: ./flash.sh

"0 bytes of memory" during Windows 95 setup

Use setup /im to bypass representation check.

"Protection error" during Windows 95 startup

Use patcher9x.

Enable mapdrive.com support (redirector) to representation SD-card to network-attached-drive H

Set redirector = 1 successful config.ini.

  • For PS/2: Check keyboard relationship and GPIO pins
  • For USB: Ensure firmware was built pinch --usb-hid option
  • Ensure SD paper is formatted arsenic FAT32
  • Check SD paper module connections
  • Verify 386/ directory exists connected SD card

MIT License. See LICENSE for details.

Mikhail Matveev & DnCraptor

  • frank-386 larboard and improvement (2026)
  • Repository: https://github.com/rh1tech/frank-386

This task is based connected the pursuing open-source projects:

  • Project: Tiny386 - x86 PC Emulator
  • Author: Chunhui He
  • License: BSD 3-Clause
  • Description: The halfway i386 CPU emulator and PC peripheral emulation (8259 PIC, 8254 PIT, 8042 keyboard controller, VGA, sound devices).
  • Project: Pico-286
  • Author: xrip
  • License: MIT
  • Description: RP2350 level integration, disk management, VGA driver concepts.
  • Project: QuakeGeneric
  • Author: DnCraptor
  • License: GPL v2
  • Description: RP2350 hardware integration patterns, Murmulator level support, and PS/2 rodent driver implementation.
  • Project: QEMU
  • Authors: Fabrice Bellard (2003-2017), Vassili Karpov "malc" (2003-2005), Joachim Henke (2006)
  • License: MIT
  • Description: PC peripheral emulation codification including 8259 PIC, 8254 PIT, 8257 DMA, 8042 keyboard controller, PCI bus, PC speaker, VGA, and AdLib OPL2 proxy.
  • Project: MAME
  • Author: Tatsuyuki Satoh (1999-2000)
  • License: LGPL 2.1+
  • Description: FM OPL sound generator (fmopl) for AdLib emulation, forked from MAME and relicensed nether LGPL.
  • Project: inih
  • Author: Ben Hoyt (2009-2020)
  • License: BSD 3-Clause
  • Description: Simple INI record parser for configuration record handling.
  • Project: SeaBIOS
  • Authors: Kevin O'Connor and contributors
  • License: GNU LGPL v3
  • Description: x86 BIOS and VGA BIOS firmware.
  • Project: FatFs
  • Author: ChaN (2014, 2021)
  • License: FatFs License (BSD-style)
  • Description: Generic FAT filesystem module for SD paper access.
  • Author: Carl John Kugler III (2021)
  • License: Apache 2.0
  • Description: FatFs inferior functions for correction handling and consequence drawstring conversion.
  • Project: Pico SDK
  • Author: Raspberry Pi (Trading) Ltd. (2020)
  • License: BSD 3-Clause
  • Description: PIO SPI driver for SD paper communication.
More