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

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).
| Base | 6 | 12 |
| Range | 6-13 | 12-19 |
| CLK | 2 | 6 |
| CMD | 3 | 7 |
| DAT0 | 4 | 4 |
| DAT3/CS | 5 | 5 |
| CLK | 0 | 2 |
| DATA | 1 | 3 |
| CLK | 14 | 0 |
| DATA | 15 | 1 |
| CLK | 14 | 20 |
| DATA | 16 | 26 |
| LATCH | 15 | 21 |
| DATA | 26 | 9 |
| BCLK | 27 | 10 |
| LRCLK | 28 | 11 |
Create a 386/ directory connected your SD card:
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:
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):
- Press Win+F12 to unfastened the Disk Manager
- Use arrow keys to prime a thrust (A:, B:, C:, D:, E:)
- Press Enter to browse disk images successful the 386/ directory
- Select an image record to insert, aliases eject the existent disk
- Press Escape to adjacent the Disk Manager
Changes made via Disk Manager are saved to config.ini automatically.
| 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:)
- Install the Raspberry Pi Pico SDK (version 2.0+)
- Set situation variable: export PICO_SDK_PATH=/path/to/pico-sdk
- Install ARM GCC toolchain
| -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 |
| -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:
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
"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.
English (US) ·
Indonesian (ID) ·