{"id":34656897,"url":"https://github.com/rh1tech/murmdoom","last_synced_at":"2026-01-13T20:38:47.479Z","repository":{"id":326770624,"uuid":"1106512948","full_name":"rh1tech/murmdoom","owner":"rh1tech","description":"Classic DOOM ported to RP2350 microcontroller, featuring HDMI video and OPL sound","archived":false,"fork":false,"pushed_at":"2025-12-25T11:02:12.000Z","size":4450,"stargazers_count":6,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-26T07:15:12.125Z","etag":null,"topics":["doom","hdmi","raspberry","rp2350","rp2350a","rp2350b"],"latest_commit_sha":null,"homepage":"https://rh1.tech","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rh1tech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-29T12:00:40.000Z","updated_at":"2025-12-24T16:08:05.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rh1tech/murmdoom","commit_stats":null,"previous_names":["rh1tech/murmdoom"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/rh1tech/murmdoom","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rh1tech%2Fmurmdoom","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rh1tech%2Fmurmdoom/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rh1tech%2Fmurmdoom/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rh1tech%2Fmurmdoom/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rh1tech","download_url":"https://codeload.github.com/rh1tech/murmdoom/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rh1tech%2Fmurmdoom/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28399893,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T14:36:09.778Z","status":"ssl_error","status_checked_at":"2026-01-13T14:35:19.697Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["doom","hdmi","raspberry","rp2350","rp2350a","rp2350b"],"created_at":"2025-12-24T18:21:41.243Z","updated_at":"2026-01-13T20:38:47.474Z","avatar_url":"https://github.com/rh1tech.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MurmDoom\n\nDOOM for Raspberry Pi Pico 2 (RP2350) with HDMI output, SD card, PS/2 and USB keyboard/mouse, and OPL music.\n\n## Supported Boards\n\nThis firmware is designed for the following RP2350-based boards with integrated HDMI, SD card, PS/2, and PSRAM:\n\n- **[Murmulator](https://murmulator.ru)** — A compact retro-computing platform based on RP Pico 2, designed for emulators and classic games.\n- **[FRANK](https://rh1.tech/projects/frank?area=about)** — A versatile development board based on RP Pico 2, HDMI output, and extensive I/O options.\n\nBoth boards provide all necessary peripherals out of the box—no additional wiring required.\n\n## Features\n\n- Native 320×240 HDMI video output via PIO\n- Full OPL2 music emulation (EMU8950 with ARM assembly optimizations)\n- 8MB QSPI PSRAM support for game data\n- SD card support for WAD files and savegames\n- **PS/2 keyboard and mouse input**\n- **USB keyboard and mouse input** (via native USB Host)\n- **USB hub support** for multiple devices\n- Sound effects and music at 49716 Hz\n\n## Hardware Requirements\n\n- **Raspberry Pi Pico 2** (RP2350) or compatible board\n- **8MB QSPI PSRAM** (mandatory!)\n- **HDMI connector** (directly connected via resistors, no HDMI encoder needed)\n- **SD card module** (SPI mode)\n- **PS/2 keyboard and mouse** (directly connected) — OR —\n- **USB keyboard and mouse** (via native USB port, hub supported)\n- **I2S DAC module** (e.g., TDA1387) for audio output\n\n\u003e **Note:** When USB HID is enabled, the native USB port is used for keyboard/mouse input. USB serial console (CDC) is disabled in this mode; use UART for debug output.\n\n### PSRAM Options\n\nMurmDoom requires 8MB PSRAM to run. You can obtain PSRAM-equipped hardware in several ways:\n\n1. **Solder a PSRAM chip** on top of the Flash chip on a Pico 2 clone (SOP-8 flash chips are only available on clones, not the original Pico 2)\n2. **Build a [Nyx 2](https://rh1.tech/projects/nyx?area=nyx2)** — a DIY RP2350 board with integrated PSRAM\n3. **Purchase a [Pimoroni Pico Plus 2](https://shop.pimoroni.com/products/pimoroni-pico-plus-2?variant=42092668289107)** — a ready-made Pico 2 with 8MB PSRAM\n\n## Board Configurations\n\nTwo GPIO layouts are supported: **M1** and **M2**. The PSRAM pin is auto-detected based on chip package:\n- **RP2350B**: GPIO47 (both M1 and M2)\n- **RP2350A**: GPIO19 (M1) or GPIO8 (M2)\n\n### HDMI (via 270Ω resistors)\n| Signal | M1 GPIO | M2 GPIO |\n|--------|---------|---------|\n| CLK-   | 6       | 12      |\n| CLK+   | 7       | 13      |\n| D0-    | 8       | 14      |\n| D0+    | 9       | 15      |\n| D1-    | 10      | 16      |\n| D1+    | 11      | 17      |\n| D2-    | 12      | 18      |\n| D2+    | 13      | 19      |\n\n### SD Card (SPI mode)\n| Signal  | M1 GPIO | M2 GPIO |\n|---------|---------|---------|\n| CLK     | 2       | 6       |\n| CMD     | 3       | 7       |\n| DAT0    | 4       | 4       |\n| DAT3/CS | 5       | 5       |\n\n### PS/2 Keyboard\n| Signal | M1 GPIO | M2 GPIO |\n|--------|---------|---------|\n| CLK    | 0       | 2       |\n| DATA   | 1       | 3       |\n\n### PS/2 Mouse\n| Signal | M1 GPIO | M2 GPIO |\n|--------|---------|---------|\n| CLK    | 14      | 0       |\n| DATA   | 15      | 1       |\n\n\u003e **Note:** PS/2 mouse is only supported in overclocked firmware (378/133 MHz or higher). At stock clock speeds (252/100 MHz), PS/2 keyboard works but mouse input may be unreliable due to timing constraints.\n\n### I2S Audio\n| Signal | M1 GPIO | M2 GPIO |\n|--------|---------|---------|\n| DATA   | 26      | 9       |\n| BCLK   | 27      | 10      |\n| LRCLK  | 28      | 11      |\n\n## Building\n\n### Prerequisites\n\n1. Install the [Raspberry Pi Pico SDK](https://github.com/raspberrypi/pico-sdk) (version 2.0+)\n2. Set environment variable: `export PICO_SDK_PATH=/path/to/pico-sdk`\n3. Install ARM GCC toolchain\n\n### Build Steps\n\n```bash\n# Clone the repository with submodules\ngit clone --recursive https://github.com/rh1tech/murmdoom.git\ncd murmdoom\n\n# Or if already cloned, initialize submodules\ngit submodule update --init --recursive\n\n# Build for M1 layout with PS/2 input (default)\nmkdir build \u0026\u0026 cd build\ncmake -DBOARD_VARIANT=M1 ..\nmake -j$(nproc)\n\n# Build for M2 layout with PS/2 input\ncmake -DBOARD_VARIANT=M2 ..\nmake -j$(nproc)\n\n# Build with USB keyboard/mouse support (instead of PS/2)\ncmake -DBOARD_VARIANT=M1 -DUSB_HID_ENABLED=1 ..\nmake -j$(nproc)\n```\n\n### Build Options\n\n| Option | Description |\n|--------|-------------|\n| `-DBOARD_VARIANT=M1` | Use M1 GPIO layout (default) |\n| `-DBOARD_VARIANT=M2` | Use M2 GPIO layout |\n| `-DUSB_HID_ENABLED=1` | Enable USB keyboard/mouse (disables USB serial) |\n| `-DCPU_SPEED=504` | CPU overclock in MHz (252, 378, 504) |\n| `-DPSRAM_SPEED=166` | PSRAM speed in MHz |\n\nOr use the build script (builds M1 by default):\n\n```bash\n./build.sh\n```\n\n### Release Builds\n\nTo build both M1 and M2 variants with version numbering:\n\n```bash\n./release.sh\n```\n\nThis creates versioned UF2 files in the `release/` directory:\n- `murmdoom_m1_X_XX.uf2`\n- `murmdoom_m2_X_XX.uf2`\n\n### Flashing\n\n```bash\n# With device in BOOTSEL mode:\npicotool load build/murmdoom.uf2\n\n# Or with device running:\npicotool load -f build/murmdoom.uf2\n```\n\n## SD Card Setup\n\n1. Format an SD card as FAT32\n2. Copy any DOOM-engine WAD file to the root (e.g., `doom1.wad`, `doom.wad`, `doom2.wad`, `plutonia.wad`, `tnt.wad`, or custom WADs)\n3. A `.savegame/` directory will be created automatically for save files\n\n### Shareware WAD Downloads\n\nIf you don't have a DOOM WAD file, you can download the shareware versions:\n- **DOOM Shareware** (`doom1.wad`): [Download from Doomworld](https://www.doomworld.com/classicdoom/info/shareware.php) or [id Software FTP](https://www.idsoftware.com/games/doom/doom-shareware)\n- **Freedoom** (free open-source alternative): [freedoom.github.io](https://freedoom.github.io/)\n\nFor the full game, purchase DOOM or DOOM II from [Steam](https://store.steampowered.com/app/2280/DOOM_1993/) or [GOG](https://www.gog.com/game/doom_doom_ii).\n\n## Controls\n\n### Keyboard\n- Arrow keys: Move/Turn\n- Ctrl: Fire\n- Space: Open doors/Use\n- Shift: Run\n- 1-7: Select weapon\n- Escape: Menu\n\n### Mouse\n- Move left/right: Turn\n- Move forward/back: Move forward/back\n- Left button: Fire\n- Right button: Strafe\n- Middle button: Move forward\n\n## License\n\nGNU General Public License v2. See [LICENSE](LICENSE) for details.\n\nThis project is based on:\n- [Chocolate Doom](https://github.com/chocolate-doom/chocolate-doom) by Simon Howard\n- [doomgeneric](https://github.com/ozkl/doomgeneric) by ozkl\n- [rp2040-doom](https://github.com/kilograham/rp2040-doom) by Graham Sanderson (OPL and Pico optimizations)\n- [EMU8950](https://github.com/digital-sound-antiques/emu8950) by Mitsutaka Okazaki (OPL2 emulator)\n\n## Author\n\nMikhail Matveev \u003cxtreme@outlook.com\u003e\n\n## Acknowledgments\n\n- id Software for the original DOOM\n- The Chocolate Doom team for the clean portable source port\n- Graham Sanderson for the incredible RP2040 optimizations and EMU8950 ARM assembly\n- The Raspberry Pi foundation for the RP2350 and Pico SDK\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frh1tech%2Fmurmdoom","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frh1tech%2Fmurmdoom","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frh1tech%2Fmurmdoom/lists"}