FRANK 386

FRANK 386 is een i386 PC-emulator voor de RP2350 (Raspberry Pi Pico 2). De emulator beschikt over VGA/HDMI-uitgang, SD-kaartopslag, PS/2- en USB-toetsenbord/muis, een NES-gamepad en audio-uitgang. Dit project is gebaseerd op Tiny386 van Chunhui He.

Kenmerken

  • CPU-emulatie: Volledige i386 (en gedeeltelijke i486/i586) CPU-emulatie met optionele x87 FPU.
  • Geheugen: Tot 8 MB RAM (met gebruik van 8 MB PSRAM).
  • Beeld: VGA- en HDMI-grafische output (tekstmodi en graphics tot 640x480).
  • Geluid: Ondersteuning voor AdLib OPL2, Sound Blaster 16, PC Speaker, Tandy, Covox en Disney Sound Source.
  • Opslag: SD-kaartondersteuning voor floppy-, harddisk- en CD-ROM-images.
  • Disk Manager: Runtime disk manager (Win+F12) voor het snel wisselen van schijfafbeeldingen.
  • Configuratie: Instellingenmenu (Win+F11) voor het wijzigen van de emulatorconfiguratie.
  • Invoer:
  • PS/2 toetsenbord en muis.
  • USB toetsenbord en muis (via native USB Host).
  • NES-gamepad ondersteuning met muis-emulatiemodus.
  • Compatibiliteit: Start DOS, Windows 3.x, Windows 95, Linux en meer.

Ondersteunde Boards

Deze firmware is ontworpen voor RP2350-boards met geïntegreerde VGA/HDMI, SD-kaart en toetsenboringvoer:

  • FRANK: Een veelzijdig ontwikkelboard met VGA-uitgang.
  • Murmulator: Een compact retro-computing platform gebaseerd op RP Pico 2 (M1- en M2-varianten).
  • Olimex PICO-PC: Olimex RP2350 PC-board.
  • Waveshare RP2350-PiZero: Waveshare RP2350-board.

Hardwarevereisten

  • Raspberry Pi Pico 2 (RP2350) of compatibel board.
  • 8 MB PSRAM (vereist voor uitgebreid geheugen).
  • VGA- of HDMI-connector.
  • SD-kaartmodule (SPI-modus).
  • PS/2-toetsenbord (direct aangesloten) OF USB-toetsenbord (via native USB-poort).
  • Audio-uitgang (optioneel): I2S DAC of PWM.

Let op: Wanneer USB HID is ingeschakeld, wordt de native USB-poort gebruikt voor toetsenbord/muis-invoer. De USB-seriële console (CDC) is in deze modus uitgeschakeld; gebruik UART voor debug-output.

Boardconfiguraties

Er worden vier GPIO-layouts ondersteund: M1, M2, PC (Olimex) en Z2 (Waveshare).

VGA / HDMI

SignaalM1 GPIOM2 GPIO
Base612
Range6-1312-19

SD-kaart (SPI-modus)

SignaalM1 GPIOM2 GPIO
CLK26
CMD37
DAT044
DAT3/CS55

PS/2 Toetsenbord

SignaalM1 GPIOM2 GPIO
CLK02
DATA13

PS/2 Muis

SignaalM1 GPIOM2 GPIO
CLK140
DATA151

NES/SNES Gamepad

SignaalM1 GPIOM2 GPIO
CLK1420
DATA1626
LATCH1521

I2S Audio

SignaalM1 GPIOM2 GPIO
DATA269
BCLK2710
LRCLK2811

SD-kaart Configuratie

Mappenstructuur

Maak een map genaamd 386/ aan op uw SD-kaart:

SD Kaart Root/
└── 386/
    ├── config.ini      # Configuratiebestand
    ├── bios.bin        # SeaBIOS ROM (vereist)
    ├── vgabios.bin     # VGA BIOS ROM (vereist)
    ├── dos622.img      # Harddisk image
    ├── boot.img        # Floppy image
    └── ...             # Overige schijfafbeeldingen

BIOS-bestanden

Download SeaBIOS en VGA BIOS vanuit de SeaBIOS-releases of gebruik bios.bin/vgabios.bin uit sdcard/386.

Configuratiebestand (config.ini)

Maak het bestand 386/config.ini aan met de volgende inhoud:

[pc]
mem=8M
bios=bios.bin
vga_bios=vgabios.bin

[frank-386]
cpu_freq=504
psram_freq=166

Schijfafbeeldingen Voorbereiden

Floppy Images (.img)

Standaard 1.44 MB floppy-images (1.474.560 bytes).

  • Aanmaken via: dd if=/dev/zero of=floppy.img bs=512 count=2880
  • Formatteer met DOS of gebruik kant-en-klare DOS boot-disks.

Hard Disk Images (.img)

Raw disk images tot 2 GB.

  • Aanmaken via: dd if=/dev/zero of=hdd.img bs=1M count=512
  • Gebruik FDISK en FORMAT vanuit DOS om te partitioneren en formatteren.

CD-ROM Images (.iso)

Standaard ISO 9660-images. Gebruik CD-brandsoftware om ISO's van CD's te maken.

Schijfafbeeldingen Laden

Bij het opstarten

Configureer de schijfafbeeldingen in config.ini zoals hierboven beschreven.

Tijdens runtime (Disk Manager)

  1. Druk op Win+F12 om de Disk Manager te openen.
  2. Gebruik de pijltjestoetsen om een station te selecteren (A:, B:, C:, D:, E:).
  3. Druk op Enter om door de schijfafbeeldingen in de 386/ map te bladeren.
  4. Selecteer een image-bestand om deze in te voegen, of verwijder de huidige schijf.
  5. Druk op Escape om de Disk Manager te sluiten.

Wijzigingen gemaakt via de Disk Manager worden automatisch opgeslagen in config.ini.

Bediening

Toetsenbord Sneltoetsen

SneltoetsActie
Win+F12Open Disk Manager
Win+F11Open Instellingenmenu
Ctrl+Alt+DeleteSysteemreset (wordt naar gast-OS gestuurd)

Instellingenmenu (Win+F11)

Configureer de emulatorinstellingen tijdens runtime:

  • Geheugenomvang (1-8 MB)
  • CPU-generatie (386/486/586)
  • FPU-emulatie aan/uit
  • Geluidsapparaten (AdLib, SB16, PC Speaker, Tandy, Covox, MPU-401, DSS)
  • PS/2 of USB Muis aan/uit
  • NES Muis aan/uit (emuleert muis met NES gamepad D-pad: B=links klikken, A=rechts klikken)
  • RP2350 CPU-frequentie en voltage
  • PSRAM / Flash frequentie

Instellingen worden opgeslagen in config.ini en treden in werking na een herstart.

Disk Manager (Win+F12)

Beheer schijfafbeeldingen zonder opnieuw op te starten:

  • Voeg floppy-images in/verwijder deze (A:, B:)
  • Voeg harddisk-images in/verwijder deze (C:, D:)
  • Voeg CD-ROM-images in/verwijder deze (E:)

Bouwen (Building)

Voorvereisten

  • Installeer de Raspberry Pi Pico SDK (versie 2.0+).
  • Stel de omgevingsvariabele in: export PICOSDKPATH=/pad/naar/pico-sdk.
  • Installeer de ARM GCC toolchain.

Bouwstappen

# Clone de repository
git clone https://github.com/rh1tech/frank-386.git
cd frank-386

# Bouwen met standaardinstellingen (M2 board, 378MHz, PS/2 toetsenbord)
./build.sh

# Bouwen voor M1 board
./build.sh -M1

# Bouwen met ondersteuning voor USB-toetsenbord
./build.sh --usb-hid

# Aangepast bouwen
./build.sh -b M1 -c 504 -p 166 --debug

Bouwopties (build.sh)

OptieBeschrijving
`-b, --board <M1\M2\PC\Z2>`Board-variant (standaard: M2)
-c, --cpu <MHz>CPU-snelheid: 378 (standaard), 504
-p, --psram <MHz>PSRAM-snelheid: 133 (standaard), 166
--usb-hidSchakel USB-toetsenbord in (schakelt USB-serie uit)
--hdmiForceer HDMI-output
--debugSchakel debug-output in
-cleanWis eerst de build-directory

Bouwopties (CMake)

OptieBeschrijving
-DPICO_BOARD=pico2Bouwen voor RP2350 (standaard)
-DBOARD=M1Gebruik M1 GPIO-layout
-DBOARD=M2Gebruik M2 GPIO-layout (standaard)
-DBOARD=PCGebruik Olimex PICO-PC layout
-DBOARD=Z2Gebruik Waveshare RP2350-PiZero layout
-DCPU_SPEED=378CPU-klok in MHz (378, 504)
-DPSRAM_SPEED=133PSRAM-klok in MHz (133, 166)
-DUSBHIDENABLED=ONSchakel USB-toetsenbord in (schakelt USB-serie uit)
-DDEBUG_ENABLED=ONSchakel uitgebreide debug-logging in
-DFORCE_HDMI=ONForceer HDMI-output

Release-builds en Flashen

Om alle firmware-varianten te bouwen, gebruik:

# Interactief (vraagt om versie)
./release.sh

# Met versienummer
./release.sh 1.02

Dit maakt firmware-bestanden aan in de release/ directory:

  • frank-386m1<versie>.uf2 - M1 board (Murmulator)
  • frank-386m2<versie>.uf2 - M2 board (Murmulator)
  • frank-386pc<versie>.uf2 - Olimex PICO-PC
  • frank-386z2<versie>.uf2 - Waveshare RP2350-PiZero

Flashen

# Met apparaat in BOOTSEL-modus:
picotool load build/frank-386.uf2

# Of gebruik het flash-script:
./flash.sh

Probleemoplossing

  • "0 bytes of memory" tijdens Windows 95 installatie: Gebruik setup /im om de geheugencontrole over te slaan.
  • "Protection error" tijdens Windows 95 opstarten: Gebruik patcher9x.
  • Netwerkschijf: Schakel mapdrive.com ondersteuning (redirector) in om de SD-kaart te mappen als netwerkschijf H. Zet redirector = 1 in config.ini.
  • Geen toetsenbord-invoer:
  • Voor PS/2: Controleer de toetsenbordverbinding en GPIO-pinnen.
  • Voor USB: Zorg dat de firmware is gebouwd met de --usb-hid optie.
  • SD-kaart niet gedetecteerd:
  • Controleer of de SD-kaart is geformatteerd als FAT32.
  • Controleer de verbindingen van de SD-kaartmodule.
  • Verifieer of de map 386/ op de SD-kaart bestaat.

Licentie, Auteurs en Erkenningen

Licentie

MIT Licentie. Zie het bestand LICENSE voor details.

Auteurs & Bijdragers

Mikhail Matveev & DnCraptor Porting en ontwikkeling van frank-386 (2026). Repository: https://github.com/rh1tech/frank-386

Erkenningen

Dit project is gebaseerd op de volgende open-source projecten:

  • Tiny386 (Chunhui He, BSD 3-Clause): De kern i386 CPU-emulator en PC-periferie emulatie (8259 PIC, 8254 PIT, 8042 keyboard controller, VGA, sound devices).
  • Pico-286 (xrip, MIT): RP2350 platformintegratie, disk management, VGA-driver concepten.
  • QuakeGeneric (DnCraptor, GPL v2): RP2350 hardware integratiepatronen, Murmulator platformondersteuning en PS/2 muis-driver implementatie.
  • QEMU (Fabrice Bellard et al., MIT): PC-periferie emulatiecode inclusief 8259 PIC, 8254 PIT, 8257 DMA, 8042 keyboard controller, PCI bus, PC speaker, VGA en AdLib OPL2 proxy.
  • MAME FM Sound Generator (Tatsuyuki Satoh, LGPL 2.1+): FM OPL sound generator (fmopl) voor AdLib emulatie.
  • inih (Ben Hoyt, BSD 3-Clause): Eenvoudige INI-bestand parser voor configuratiebeheer.
  • SeaBIOS (Kevin O'Connor et al., GNU LGPL v3): x86 BIOS en VGA BIOS firmware.
  • FatFs (ChaN, FatFs License): Generieke FAT-bestandssysteem module voor SD-kaart toegang.
  • FatFs Utilities (Carl John Kugler III, Apache 2.0): FatFs utility functies voor foutafhandeling en resultaat-string conversie.
  • Raspberry Pi Pico SDK (Raspberry Pi Ltd, BSD 3-Clause): PIO SPI driver voor SD-kaart communicatie.