I built a RISC-V emulator that runs DOOM
Get picks like this daily. Today's launch numbers, the top launches, AI and tech news, and a daily opportunity pick, straight to your inbox.
Want to reach these readers? Sponsor an issue.
Demo: https://www.youtube.com/watch?v=f5uygzEmdLwHi HN,I built a RISC-V emulator that implements the RV32IM instruction set and a minimal syscall interface to run DOOM. A few weeks ago, I got my first output with a simple hello world assembly program.Since then I have been working tirelessly to get DOOM to run.I needed to figure out how to run C programs first, and came across newlib, which allows the underlying environment to implement the syscall stubs one by one until the programs run.I have also added ELF loading, but currently only a single `PT_LOAD` segment is supported.To port DOOM, I used doomgeneric, which was quite convenient to get working once the required stubs were in place.DOOM renders to a fixed area in memory (0x705FDD = VRAM_START): 0x7FFFFF +-------------------------------------+ | | | QUEUE_SIZE (32 bytes) | | | 0x7FFFDF +-------------------------------------+ <-- QUEUE_START 0x7FFFDE | QUEUE_READ_IDX | 0x7FFFDD | QUEUE_WRITE_IDX | +-------------------------------------+ | | | | | VRAM (1,024,000 bytes) | | | | | 0x705FDD +-------------------------------------+ <-- STACK_START | Stack | | | | | v | | | | ^ | | | | | Program data + Heap | | | 0x000000 +-------------------------------------+ I made a small linker script so that the entry point of a C program is at _start and virtual address is always 0. That kept the ELF loader code simple.Inputs are written to the queue by rvcore which are then intercepted by DOOM running inside it.
HN · launched May 3, 2026 · 50 upvotes (top 16%) · 0 views
Niche: software and system emulators · 114 launches, 4 in the last 7 days ▼ -56% · Explore this niche →
Category and tags
- Horizontal
- Dev tools
- Developer
- Not AI
- Hobby / open-source project
Visit website ↗ Source listing ↗
More like this: all 114 launches in software and system emulators →
Could you build this?
No Developing a functional RISC-V CPU emulator (RV32IM instruction set) capable of executing Doom requires detailed computer architecture knowledge, instruction decoding, memory virtualization, and OS syscall emulation.
What it would actually take: The engine requires an accurate RISC-V instruction decoder and ALU implementing RV32I and the 'M' extension (hardware multiplication/division), virtual memory and address translation, and an integrated system call emulation layer (POSIX open, read, write, mmap). It also needs a minimal frame buffer driver (e.g., using SDL2 or WebAssembly/Canvas) to handle Doom's video memory and input event loops. Expertise in CPU architectures, compiler ABIs, and emulator development is necessary.
Discussion
4 comments analyzed.
Competitors
Other products that read as similar to this one : 328 launches clear the similarity bar, closest 8 shown.
Attention rank: #67 of 329 (itself plus its competitors, highest first, normalized so YC and Product Hunt are compared fairly).
Launched 177 days after the earliest competitor.
- DOOM in the kernel, or fibers in eBPF · hn · 2026-09-09 · 53 upvotes · similarity 0.54
- KiDoom · hn · 2025-11-25 · 362 upvotes · similarity 0.51
- I wrote a DOOM clone in my own programming language · hn · 2026-04-28 · 34 upvotes · similarity 0.51
- We attached vGPUs to sandboxed Chromium then played Doom 3 x WASM on it · hn · 2026-03-19 · 9 upvotes · similarity 0.48
- iigs-doom · github · 2026-09-28 · 10 upvotes · similarity 0.48
- A6000-DOOM · github · 2026-09-10 · 9 upvotes · similarity 0.45
- Doom (1993) Playable in a GitHub Readme · hn · 2026-01-06 · 5 upvotes · similarity 0.44
- N64DoomRPGPort · github · 2026-09-10 · 9 upvotes · similarity 0.43
The niche, labels, vibe code rating and competitor comparison on this page are analysis by Nicheloom. If you use them, please credit nicheloom.com. How you may use our data.