pico-duke3D is een technische poort van de klassieker Duke Nukem 3D naar diverse RP2350-gebaseerde hobby-boards. De implementatie ondersteunt HDMI-video-uitvoer, geluidseffecten en een breed scala aan invoerapparaten, waaronder USB-gamepads, toetsenborden en retro-controllers (NES/SNES/Wii).
Belangrijke technische details:
- Hardware: Het project werkt op boards zoals de Fruit Jam en Murmulator M2. Voor specifieke configuraties, zoals de Adafruit DVI + SD of de Olimex RP2040-PICO-PC, is extra geheugen (PSRAM of een Pimoroni Pico Plus 2) vereist.
- Installatie: De software wordt geflasht via een
.uf2-bestand. De speldata (DUKE3D.GRP) moet op een SD-kaart in een specifieke mappenstructuur worden geplaatst.
- Besturing: Er is uitgebreide ondersteuning voor zowel toetsenborden als gamepads (Retro-Go layout), inclusief een speciale shift-modus voor de inventaris.
- Extra's: De poort bevat functies zoals screenshots (PNG), een 'Bootsel-modus' voor eenvoudig flashen vanuit een behuizing, en een on-screen console voor foutdiagnose.
pico-duke3D: Duke Nukem 3D op de RP2350
Omdat de game-data op de kaart blijft staan, kan men eenvoudig schakelen tussen de shareware-episode en de volledige Atomic Edition door simpelweg één bestand te vervangen.
Functionaliteiten
De volgende functies zijn werkend geïmplementeerd:
- Video: Video via HDMI.
- Audio: Geluidseffecten en Adlib / Sound Blaster-muziek.
- Invoer: USB-gamepads en toetsenborden, plus NES-, SNES- en Wii Classic-controllers op boards die over de juiste connectoren beschikken.
- Opslag: Savegames, instellingen en screenshots worden op de SD-kaart bewaard.
- Foutmeldingen: Fouten worden direct op het scherm getoond, waardoor een seriële kabel of computer niet nodig is om problemen te diagnosticeren.
- Uitvoering: Werkt stand-alone of via het
pico-bootLoader menu.
Benodigdheden
Om de poort te gebruiken, heb je het volgende nodig:
- Een van de vier ondersteunde boards (zie hieronder).
- Een micro SD-kaart, geformatteerd in FAT of exFAT.
DUKE3D.GRP: Het data-bestand van het spel. Zowel de shareware-versie als de geregistreerde of Atomic Edition werken.
- Een HDMI-scherm en een gamepad of toetsenbord. De game kan volledig worden gespeeld, opgeslagen en geladen met enkel een gamepad.
Ondersteunde hardware
Alle onderstaande boards zijn getest en functioneel op echte hardware.
| Kenmerk | Fruit Jam | Murmulator M2 | Adafruit DVI + SD | Olimex RP2040-PICO-PC |
| Video | HDMI 640×480 | HDMI 640×480 | HDMI 640×480 | HDMI 640×480 |
| Geluid | Koptelefoon of HDMI (schakelt automatisch) | Koptelefoon en HDMI gelijktijdig | Koptelefoon (optionele module) en HDMI gelijktijdig | Audiojack en HDMI gelijktijdig |
| USB pad / toetsenbord | Direct aansluiten | OTG-adapter nodig | OTG-adapter nodig | Direct aansluiten op USB-A poort |
| NES/SNES poorten | — | Twee | Twee | Eén (via UEXT-connector) |
| Wii Classic pad | Ja | Ja | — | — |
| Indicatoren | Knipperende LED + 5 LED's als sound-level meter | Knipperende LED | Knipperende LED | Knipperende LED |
| Extra vereisten | — | — | Module moet een Pimoroni Pico Plus 2 zijn | Pico 2 met PSRAM chip op GPIO 8 |
| SD-map (via bootLoader) | /emu/8/ | /emu/13/ | /emu/2/ | /emu/15/ |
Aanvullende hardware-informatie
Adafruit DVI + SD Dit is een zelfbouw-optie: een Pico-vormige module op een breadboard of kleine printplaat, met een Adafruit DVI breakout voor video en een MicroSD breakout voor de kaart. Het is essentieel dat de module een Pimoroni Pico Plus 2 is en geen gewone Pico 2, omdat het spel het extra geheugen van deze module nodig heeft om te kunnen starten.
Olimex RP2040-PICO-PC Dit board wordt gebruikt met een Raspberry Pi Pico 2. Aangezien een standaard Pico 2 geen PSRAM heeft, moet er een PSRAM-chip worden gemonteerd (chip select op GPIO 8). Zonder deze chip zal het spel een foutmelding op het scherm tonen en stoppen. De PS/2-toetsenbordpoort van het board wordt niet gebruikt.
PicoNES PCB
De bovengenoemde componenten kunnen op een PCB worden gesoldeerd in plaats van op een breadboard. Dit resulteert in een volwaardige console met twee controllerpoorten en een behuizing. Het ontwerp hiervoor is de PicoNES (v2.6) door @johnedgarpark.
Belangrijke hardware-eisen voor PicoNES
Om Duke Nukem 3D op de PicoNES PCB te draaien, is er slechts één combinatie die werkt:
- Design v2.6, een Pimoroni Pico Plus 2, en male headers die in de doorvoergaatjes zijn geplaatst.
Let op: Een standaard Pico 2 of Pico 2 W zal het spel niet kunnen draaien vanwege het ontbrekende geheugen. De Pico Plus 2 kan niet plat tegen de PCB worden gesoldeerd omdat de SP/CE-connector aan de achterzijde in de weg zit; daarom zijn de doorvoergaatjes uit v2.6 en de male headers noodzakelijk.
Onderdelenlijst
- Pimoroni Pico Plus 2 (met gesoldeerde male headers).
- Adafruit DVI Breakout Board.
- Adafruit Micro SD SPI of SDIO Card Breakout Board (alleen 3V!).
- Eén of twee NES-controllerpoorten en bijbehorende controllers (SNES-controllers werken met een adapterkabel).
- USB-C OTG Y-kabel (voor stroomvoorziening en USB-gamepad).
- USB-C voeding.
- Optioneel: een aan/uit-schakelaar.
Installatie
- Download het juiste
.uf2 bestand voor jouw board vanuit de releases-pagina.
- Houd de BOOT-knop op het board ingedrukt terwijl je het met een computer verbindt. Het board verschijnt als een USB-schijf.
- Kopieer het gedownloade bestand naar deze schijf. Het board start automatisch opnieuw op in het spel.
- Kopieer
DUKE3D.GRP naar de SD-kaart in een map genaamd roms/duke3d en plaats de kaart in het board.
- Sluit de HDMI-kabel en een controller aan.
Bestandsstructuur op de SD-kaart:
roms/duke3d/DUKE3D.GRP (game data)
roms/duke3d/game0.sav (savegames)
roms/duke3d/duke3d.cfg (instellingen en toetsenbezetting)
screenshots/duke0000.png (screenshots)
Besturing
Zowel een gamepad als een toetsenbord kunnen gelijktijdig worden gebruikt; alle aangesloten controllers besturen dezelfde speler. In menu's bevestigt A de keuze en gaat B (of START) terug.
Gamepad (Retro-Go layout)
| Knop | In game | In menu's |
| D-pad / Left stick | Bewegen en draaien | Navigeren |
| A | Vuren | Selecteren / Bevestigen |
| B | Springen | Terug |
| X | Bukken | — |
| Y | Jetpack | — |
| L / R | Strafe links / rechts | — |
| SELECT | Volgende wapen | — |
| START | Openen / Gebruiken / Schakelaar omzetten | Terug |
| L+R | Menu openen | — |
| SELECT+START | Menu openen (voor pads zonder shoulder buttons) | — |
Opmerking: Er is geen aparte Run-knop; de speler rent altijd. Caps Lock kan dit uitschakelen.
Shift-modus (Inventaris)
Door START een halve seconde ingedrukt te houden, verandert de D-pad in de inventarisbesturing:
- D-pad ↑: Geselecteerd item gebruiken (medkit, steroids, etc.).
- D-pad ↓: Jetpack.
- D-pad ←→: Vorige / volgende item.
- B: Omlaag kijken.
- X: Omhoog kijken.
Toetsenbord
De standaardbezetting kan worden aangepast via Options → Setup Keyboard. (Kpad = numeriek toetsenbord).
Beweging:
- Vooruit / Achteruit:
↑ / ↓ of Kpad8 / Kpad2
- Links / Rechts draaien:
← / → of Kpad4 / Kpad6
- Strafe links / rechts:
, / .
- Strafe (vasthouden):
Alt
- Rennen (vasthouden):
Shift
- AutoRun aan/uit:
Caps Lock
- Springen:
A of /
- Bukken:
Z
- Kijken omhoog / omlaag:
Kpad9 / Kpad3
- Kijken links / rechts:
Kpad0 / Kpad.
- Richten omhoog / omlaag:
Kpad7 / Kpad1
- Zicht centreren:
Kpad5
Gevechten & Interactie:
- Vuren:
Ctrl
- Openen / Gebruiken:
Spatie
- Quick kick:
C
- Volgende / vorige wapen:
' / ;
- Wapen selecteren (1-0):
1…0
- Omdraaien:
Backspace
- Wapen wegsteken:
Scroll Lock
- Wapen-icoon verbergen:
S
- Auto-aim aan/uit:
V
- Crosshair aan/uit:
I
Inventaris:
- Item gebruiken:
Enter of Kpad Enter
- Vorige / volgende item:
[ / ]
- Medkit:
M
- Steroids:
R
- Jetpack:
J
- Night vision:
N
- Holo Duke:
H
Systeem:
- Menu openen:
Escape
- Pause:
Pause
- Overhead map:
Tab
- Map follow mode:
F
- Zoom in / uit:
- / = of Kpad- / Kpad+
Functietoetsen:
F1: Help scherm
F2 / F3: Game opslaan / laden
F4: Geluidsinstellingen
F5: Naam van muziektrack tonen
F6: Quicksave (na eerste normale save)
F7: Third-person view aan/uit
F8: Berichten aan/uit
F9: Quickload
F10: Afsluiten
F11: Helderheid omhoog / omlaag (Shift+F11)
F12: Screenshot
Geavanceerde Functies
Opslaan en Laden
Dit kan ook zonder toetsenbord via de gamepad: L+R (of SELECT+START) → Menu → Save Game → Slot selecteren → A om te bevestigen.
Screenshots
Met F12 wordt het huidige frame opgeslagen als een PNG in de map /screenshots/. De beelden zijn in de oorspronkelijke resolutie van 320×200. Let op: omdat de pixels niet vierkant zijn, kunnen de beelden in een moderne viewer iets "uitgerekt" lijken.
Bootsel-modus
Via OPTIONS → BOOTSEL MODE kan het board worden herstart als USB-schijf voor het flashen van firmware, zonder dat de fysieke BOOT-knop ingedrukt hoeft te worden. Dit is zeer handig wanneer het board in een behuizing is geplaatst.
Probleemoplossing
Fouten worden direct op het scherm getoond via een tekstconsole.
| Bericht | Oorzaak |
| No SD card | Kaart niet geplaatst of niet geformatteerd in FAT/exFAT. |
| /roms/duke3d or DUKE3D.GRP missing | Verkeerde mapnaam of bestand ontbreekt. |
| Memory error | Verkeerde module gebruikt (zie hardware-sectie). |
| Corrupt or unrecognised game data | DUKE3D.GRP is beschadigd; opnieuw kopiëren. |
Hardware checks:
- LED: De onboard LED knippert ongeveer één keer per seconde tijdens het tekenen van frames. Stopt de LED terwijl er een beeld staat? Dan is het spel gecrasht. Brandt de LED nooit? Dan is het spel niet gestart.
- Geluid (Fruit Jam): Als er geen geluid is bij een Wii-pad, kan dit komen door een gedeelde verbinding. Koppel de pad los en reset het board.
- SNES-pad quirk: Bij een SNES-pad in een NES/SNES-poort kan de eerste druk na het opstarten onjuist worden geïnterpreteerd (bijv. vuren in plaats van springen). Druk één keer op
A, X, L of R om de modus te corrigeren.
Credits
- Port: Frank Hoedemakers, met code geschreven door Claude Code.
- Testing: Gavin Knight (DynaMight1124).
- Basis: Gebouwd op Chocolate Duke3D en de BUILD-engine van Ken Silverman.
- Copyright: Duke Nukem 3D is © 3D Realms. Game-data is niet inbegrepen bij deze poort.
pico-duke3D: Duke Nukem 3D op de RP2350
Omdat de game-data op de kaart blijft staan, kan men eenvoudig schakelen tussen de shareware-episode en de volledige Atomic Edition door simpelweg één bestand te vervangen.
Functionaliteiten
De volgende functies zijn werkend geïmplementeerd:
- Video: Video via HDMI.
- Audio: Geluidseffecten en Adlib / Sound Blaster-muziek.
- Invoer: USB-gamepads en toetsenborden, plus NES-, SNES- en Wii Classic-controllers op boards die over de juiste connectoren beschikken.
- Opslag: Savegames, instellingen en screenshots worden op de SD-kaart bewaard.
- Foutmeldingen: Fouten worden direct op het scherm getoond, waardoor een seriële kabel of computer niet nodig is om problemen te diagnosticeren.
- Uitvoering: Werkt stand-alone of via het
pico-bootLoader menu.
Benodigdheden
Om de poort te gebruiken, heb je het volgende nodig:
- Een van de vier ondersteunde boards (zie hieronder).
- Een micro SD-kaart, geformatteerd in FAT of exFAT.
DUKE3D.GRP: Het data-bestand van het spel. Zowel de shareware-versie als de geregistreerde of Atomic Edition werken.
- Een HDMI-scherm en een gamepad of toetsenbord. De game kan volledig worden gespeeld, opgeslagen en geladen met enkel een gamepad.
Ondersteunde hardware
Alle onderstaande boards zijn getest en functioneel op echte hardware.
| Kenmerk | Fruit Jam | Murmulator M2 | Adafruit DVI + SD | Olimex RP2040-PICO-PC |
| Video | HDMI 640×480 | HDMI 640×480 | HDMI 640×480 | HDMI 640×480 |
| Geluid | Koptelefoon of HDMI (schakelt automatisch) | Koptelefoon en HDMI gelijktijdig | Koptelefoon (optionele module) en HDMI gelijktijdig | Audiojack en HDMI gelijktijdig |
| USB pad / toetsenbord | Direct aansluiten | OTG-adapter nodig | OTG-adapter nodig | Direct aansluiten op USB-A poort |
| NES/SNES poorten | — | Twee | Twee | Eén (via UEXT-connector) |
| Wii Classic pad | Ja | Ja | — | — |
| Indicatoren | Knipperende LED + 5 LED's als sound-level meter | Knipperende LED | Knipperende LED | Knipperende LED |
| Extra vereisten | — | — | Module moet een Pimoroni Pico Plus 2 zijn | Pico 2 met PSRAM chip op GPIO 8 |
| SD-map (via bootLoader) | /emu/8/ | /emu/13/ | /emu/2/ | /emu/15/ |
Aanvullende hardware-informatie
Adafruit DVI + SD Dit is een zelfbouw-optie: een Pico-vormige module op een breadboard of kleine printplaat, met een Adafruit DVI breakout voor video en een MicroSD breakout voor de kaart. Het is essentieel dat de module een Pimoroni Pico Plus 2 is en geen gewone Pico 2, omdat het spel het extra geheugen van deze module nodig heeft om te kunnen starten.
Olimex RP2040-PICO-PC Dit board wordt gebruikt met een Raspberry Pi Pico 2. Aangezien een standaard Pico 2 geen PSRAM heeft, moet er een PSRAM-chip worden gemonteerd (chip select op GPIO 8). Zonder deze chip zal het spel een foutmelding op het scherm tonen en stoppen. De PS/2-toetsenbordpoort van het board wordt niet gebruikt.
PicoNES PCB
De bovengenoemde componenten kunnen op een PCB worden gesoldeerd in plaats van op een breadboard. Dit resulteert in een volwaardige console met twee controllerpoorten en een behuizing. Het ontwerp hiervoor is de PicoNES (v2.6) door @johnedgarpark.
Belangrijke hardware-eisen voor PicoNES
Om Duke Nukem 3D op de PicoNES PCB te draaien, is er slechts één combinatie die werkt:
- Design v2.6, een Pimoroni Pico Plus 2, en male headers die in de doorvoergaatjes zijn geplaatst.
Let op: Een standaard Pico 2 of Pico 2 W zal het spel niet kunnen draaien vanwege het ontbrekende geheugen. De Pico Plus 2 kan niet plat tegen de PCB worden gesoldeerd omdat de SP/CE-connector aan de achterzijde in de weg zit; daarom zijn de doorvoergaatjes uit v2.6 en de male headers noodzakelijk.
Onderdelenlijst
- Pimoroni Pico Plus 2 (met gesoldeerde male headers).
- Adafruit DVI Breakout Board.
- Adafruit Micro SD SPI of SDIO Card Breakout Board (alleen 3V!).
- Eén of twee NES-controllerpoorten en bijbehorende controllers (SNES-controllers werken met een adapterkabel).
- USB-C OTG Y-kabel (voor stroomvoorziening en USB-gamepad).
- USB-C voeding.
- Optioneel: een aan/uit-schakelaar.
Installatie
- Download het juiste
.uf2 bestand voor jouw board vanuit de releases-pagina.
- Houd de BOOT-knop op het board ingedrukt terwijl je het met een computer verbindt. Het board verschijnt als een USB-schijf.
- Kopieer het gedownloade bestand naar deze schijf. Het board start automatisch opnieuw op in het spel.
- Kopieer
DUKE3D.GRP naar de SD-kaart in een map genaamd roms/duke3d en plaats de kaart in het board.
- Sluit de HDMI-kabel en een controller aan.
Bestandsstructuur op de SD-kaart:
roms/duke3d/DUKE3D.GRP (game data)
roms/duke3d/game0.sav (savegames)
roms/duke3d/duke3d.cfg (instellingen en toetsenbezetting)
screenshots/duke0000.png (screenshots)
Besturing
Zowel een gamepad als een toetsenbord kunnen gelijktijdig worden gebruikt; alle aangesloten controllers besturen dezelfde speler. In menu's bevestigt A de keuze en gaat B (of START) terug.
Gamepad (Retro-Go layout)
| Knop | In game | In menu's |
| D-pad / Left stick | Bewegen en draaien | Navigeren |
| A | Vuren | Selecteren / Bevestigen |
| B | Springen | Terug |
| X | Bukken | — |
| Y | Jetpack | — |
| L / R | Strafe links / rechts | — |
| SELECT | Volgende wapen | — |
| START | Openen / Gebruiken / Schakelaar omzetten | Terug |
| L+R | Menu openen | — |
| SELECT+START | Menu openen (voor pads zonder shoulder buttons) | — |
Opmerking: Er is geen aparte Run-knop; de speler rent altijd. Caps Lock kan dit uitschakelen.
Shift-modus (Inventaris)
Door START een halve seconde ingedrukt te houden, verandert de D-pad in de inventarisbesturing:
- D-pad ↑: Geselecteerd item gebruiken (medkit, steroids, etc.).
- D-pad ↓: Jetpack.
- D-pad ←→: Vorige / volgende item.
- B: Omlaag kijken.
- X: Omhoog kijken.
Toetsenbord
De standaardbezetting kan worden aangepast via Options → Setup Keyboard. (Kpad = numeriek toetsenbord).
Beweging:
- Vooruit / Achteruit:
↑ / ↓ of Kpad8 / Kpad2
- Links / Rechts draaien:
← / → of Kpad4 / Kpad6
- Strafe links / rechts:
, / .
- Strafe (vasthouden):
Alt
- Rennen (vasthouden):
Shift
- AutoRun aan/uit:
Caps Lock
- Springen:
A of /
- Bukken:
Z
- Kijken omhoog / omlaag:
Kpad9 / Kpad3
- Kijken links / rechts:
Kpad0 / Kpad.
- Richten omhoog / omlaag:
Kpad7 / Kpad1
- Zicht centreren:
Kpad5
Gevechten & Interactie:
- Vuren:
Ctrl
- Openen / Gebruiken:
Spatie
- Quick kick:
C
- Volgende / vorige wapen:
' / ;
- Wapen selecteren (1-0):
1…0
- Omdraaien:
Backspace
- Wapen wegsteken:
Scroll Lock
- Wapen-icoon verbergen:
S
- Auto-aim aan/uit:
V
- Crosshair aan/uit:
I
Inventaris:
- Item gebruiken:
Enter of Kpad Enter
- Vorige / volgende item:
[ / ]
- Medkit:
M
- Steroids:
R
- Jetpack:
J
- Night vision:
N
- Holo Duke:
H
Systeem:
- Menu openen:
Escape
- Pause:
Pause
- Overhead map:
Tab
- Map follow mode:
F
- Zoom in / uit:
- / = of Kpad- / Kpad+
Functietoetsen:
F1: Help scherm
F2 / F3: Game opslaan / laden
F4: Geluidsinstellingen
F5: Naam van muziektrack tonen
F6: Quicksave (na eerste normale save)
F7: Third-person view aan/uit
F8: Berichten aan/uit
F9: Quickload
F10: Afsluiten
F11: Helderheid omhoog / omlaag (Shift+F11)
F12: Screenshot
Geavanceerde Functies
Opslaan en Laden
Dit kan ook zonder toetsenbord via de gamepad: L+R (of SELECT+START) → Menu → Save Game → Slot selecteren → A om te bevestigen.
Screenshots
Met F12 wordt het huidige frame opgeslagen als een PNG in de map /screenshots/. De beelden zijn in de oorspronkelijke resolutie van 320×200. Let op: omdat de pixels niet vierkant zijn, kunnen de beelden in een moderne viewer iets "uitgerekt" lijken.
Bootsel-modus
Via OPTIONS → BOOTSEL MODE kan het board worden herstart als USB-schijf voor het flashen van firmware, zonder dat de fysieke BOOT-knop ingedrukt hoeft te worden. Dit is zeer handig wanneer het board in een behuizing is geplaatst.
Probleemoplossing
Fouten worden direct op het scherm getoond via een tekstconsole.
| Bericht | Oorzaak |
| No SD card | Kaart niet geplaatst of niet geformatteerd in FAT/exFAT. |
| /roms/duke3d or DUKE3D.GRP missing | Verkeerde mapnaam of bestand ontbreekt. |
| Memory error | Verkeerde module gebruikt (zie hardware-sectie). |
| Corrupt or unrecognised game data | DUKE3D.GRP is beschadigd; opnieuw kopiëren. |
Hardware checks:
- LED: De onboard LED knippert ongeveer één keer per seconde tijdens het tekenen van frames. Stopt de LED terwijl er een beeld staat? Dan is het spel gecrasht. Brandt de LED nooit? Dan is het spel niet gestart.
- Geluid (Fruit Jam): Als er geen geluid is bij een Wii-pad, kan dit komen door een gedeelde verbinding. Koppel de pad los en reset het board.
- SNES-pad quirk: Bij een SNES-pad in een NES/SNES-poort kan de eerste druk na het opstarten onjuist worden geïnterpreteerd (bijv. vuren in plaats van springen). Druk één keer op
A, X, L of R om de modus te corrigeren.
Credits
- Port: Frank Hoedemakers, met code geschreven door Claude Code.
- Testing: Gavin Knight (DynaMight1124).
- Basis: Gebouwd op Chocolate Duke3D en de BUILD-engine van Ken Silverman.
- Copyright: Duke Nukem 3D is © 3D Realms. Game-data is niet inbegrepen bij deze poort.