{"id":50366150,"url":"https://github.com/rh1tech/frank-idtech1","last_synced_at":"2026-05-30T04:04:30.467Z","repository":{"id":350713245,"uuid":"1205839825","full_name":"rh1tech/frank-idtech1","owner":"rh1tech","description":"All idTech 1 engine games port to RP2350","archived":false,"fork":false,"pushed_at":"2026-04-11T17:04:41.000Z","size":3573,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-11T19:08:18.648Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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":"2026-04-09T10:28:19.000Z","updated_at":"2026-04-11T17:04:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rh1tech/frank-idtech1","commit_stats":null,"previous_names":["rh1tech/frank-idtech1"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/rh1tech/frank-idtech1","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rh1tech%2Ffrank-idtech1","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rh1tech%2Ffrank-idtech1/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rh1tech%2Ffrank-idtech1/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rh1tech%2Ffrank-idtech1/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rh1tech","download_url":"https://codeload.github.com/rh1tech/frank-idtech1/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rh1tech%2Ffrank-idtech1/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33679310,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2026-05-30T04:04:30.316Z","updated_at":"2026-05-30T04:04:30.460Z","avatar_url":"https://github.com/rh1tech.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FRANK idTech1\n\nOfficial page: **[frank.rh1.tech](https://frank.rh1.tech/)** — hub for all FRANK boards and firmware.\n\nPort of idTech1 games (Doom, Heretic, Hexen, Strife) for Raspberry Pi Pico 2 (RP2350) with HDMI output, SD card, PS/2 or USB keyboard/mouse, and OPL music.\n\nAll four game engines are compiled into a single firmware binary. At startup, a WAD selector screen automatically detects available WAD files from the SD card and lets you choose which game to play.\n\n## Screenshots\n\n| WAD Selector | Doom | Heretic | Hexen | Strife |\n|:---:|:---:|:---:|:---:|:---:|\n| ![WAD Selector](screenshots/screen5.png) | ![Doom](screenshots/screen1.png) | ![Heretic](screenshots/screen2.png) | ![Hexen](screenshots/screen3.png) | ![Strife](screenshots/screen4.png) |\n\n## Supported Games\n\n| Engine | Supported WADs |\n|--------|---------------|\n| **Doom** | doom.wad, doom2.wad, doom1.wad (shareware), plutonia.wad, tnt.wad |\n| **Heretic** | heretic.wad, heretic1.wad (shareware) |\n| **Hexen** | hexen.wad, hexdd.wad (Deathkings) |\n| **Strife** | strife1.wad, strife0.wad (demo) |\n\n## Supported Boards\n\nThis firmware is designed for RP2350-based boards with integrated HDMI, SD card, PS/2 (or USB), and PSRAM:\n\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- **[Murmulator](https://murmulator.ru)** -- A compact retro-computing platform based on RP Pico 2, designed for emulators and classic games.\n\nBoth boards provide all necessary peripherals out of the box -- no additional wiring required.\n\n## Features\n\n- Single firmware binary with all four id Tech 1 engines\n- WAD selector start screen with automatic WAD detection\n- Native 320x240 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 and USB keyboard and mouse input\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 or USB keyboard and mouse**\n- **I2S DAC module** (e.g., TDA1387) for audio output\n\n### PSRAM Options\n\nFRANK idTech1 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 ohm 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### 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\ngit clone https://github.com/rh1tech/frank-idtech1.git\ncd frank-idtech1\n\n# Build for M1 layout (default)\nmkdir build \u0026\u0026 cd build\ncmake -DBOARD_VARIANT=M1 ..\nmake -j$(nproc)\n\n# Build for M2 layout\ncmake -DBOARD_VARIANT=M2 ..\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| `-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- `frank-idtech1_m1_X_XX.uf2`\n- `frank-idtech1_m2_X_XX.uf2`\n\n### Flashing\n\n```bash\n# With device in BOOTSEL mode:\npicotool load build/frank-idtech1.uf2\n\n# Or with device running:\npicotool load -f build/frank-idtech1.uf2\n```\n\n## SD Card Setup\n\n1. Format an SD card as FAT32\n2. Place WAD files in the root directory or in an `idtech1` folder\n3. The WAD selector will automatically detect all supported WADs at startup\n4. Save directories are created automatically per game\n\n### Where to Get WAD Files\n\n**Shareware / Free:**\n- **Doom Shareware** (`doom1.wad`): [Internet Archive](https://archive.org/details/DoomsharewareEpisode)\n- **Heretic Shareware** (`heretic1.wad`): [Internet Archive](https://archive.org/details/Heretic_Shareware)\n- **Strife Demo** (`strife0.wad`): [Internet Archive](https://archive.org/details/StrifeDemo)\n\n**Full versions** can be purchased from [Steam](https://store.steampowered.com/) or [GOG](https://www.gog.com/):\n- [The Ultimate Doom](https://store.steampowered.com/app/2280/Ultimate_Doom/)\n- [Doom II](https://store.steampowered.com/app/2300/DOOM_II/)\n- [Final Doom](https://store.steampowered.com/app/2290/Final_DOOM/)\n- [Heretic: Shadow of the Serpent Riders](https://store.steampowered.com/app/2390/Heretic_Shadow_of_the_Serpent_Riders/)\n- [Hexen: Beyond Heretic](https://store.steampowered.com/app/2360/HeXen_Beyond_Heretic/)\n- [Hexen: Deathkings of the Dark Citadel](https://store.steampowered.com/app/2370/HeXen_Deathkings_of_the_Dark_Citadel/)\n- [Strife: Veteran Edition](https://store.steampowered.com/app/317040/The_Original_Strife_Veteran_Edition/)\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- Tab: Map\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://www.chocolate-doom.org/) (Doom, Heretic, Hexen, and Strife source ports)\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@rh1.tech\u003e\n\n## Acknowledgments\n\n- id Software for the Doom engine\n- Raven Software for Heretic and Hexen\n- Rogue Entertainment for Strife\n- The Chocolate Doom team for the clean portable source ports\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%2Ffrank-idtech1","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frh1tech%2Ffrank-idtech1","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frh1tech%2Ffrank-idtech1/lists"}