r/EmuDev Oct 09 '18

Join the official /r/EmuDev chat on Discord!

47 Upvotes

Here's the link

We've transitioned from Slack to Discord, for several reasons, the main one being that it needs a laughably expensive premium package to even keep all your past messages. With the free plan we only had access to like the last 5%, the others were lost.

I hadn't made this post before because I wanted to hold off until we transitioned all the archived messages from Slack, but I'm not sure when that will happen anymore. Unless someone wants to take up the job of making a transition Discord bot, that is (there is a way to get all the message data from Slack - if we have the bot I can figure it out). PM me for details if you're interested in making the bot.


r/EmuDev 3h ago

NES I put the NES inside a CUDA kernel, one console per thread, and ran 65k of them at once

50 Upvotes

Built this for a reinforcement learning project (PPO on Super Mario Bros), but the emulator side turned out to be the interesting part, so I figured this sub would care more about that.

One CUDA thread runs one entire console. 6502, PPU, bus, OAM DMA. State is structure-of-arrays indexed by env id, and CPU registers stay in hardware registers for the life of the kernel. 65,536 independent consoles at about 3.3M steps/s on an A100.

- CPU passes the Klaus functional test suite, cycle counts included

- PPU is not cycle accurate. SMB's title screen never advances past the menu because of a timing bug I haven't fixed. I sidestep it by resetting from a save state

- No APU. The registers exist as a byte array, nothing generates sound

- Mapper 0 only

Two results that surprised me:

Opcode-binned dispatch (sorting a warp's threads by opcode before executing) came out 3.2x slower than just letting them diverge. I tested it on instruction streams sampled from 535M profiled SMB executions. A decorrelated warp holds about 20.6 distinct opcodes, and hardware SIMT reconvergence was already sharing fetch and addressing acrossthem. Explicit binning serializes what it was already sharing.

Putting the zero page in shared memory was a 1.9x regression. 256 bytes across 128 threads is 32KB per block, which drops occupancy from 32 warps to 6.

https://github.com/hbofz/NeSLE

Would love help with mappers. MMC1 and MMC3 would open up most of the library.


r/EmuDev 12h ago

Where do i go now?

4 Upvotes

Hello there everyone, this is my first of lets say many posts. I would like seek some guidance on how to get started on gameboy emulator. I worked on chip-8 and knocked that one out of the park. I mostly use C++ and Opengl but I am very agnostic when it comes to tech stack. I was hoping I could take the Chip-8 route of finding a relative readable specification that does not mercilessly bombard me with information but I have had no luck. I am sorry about being lazy and not taking the effort to find a good one in advance. Hope you have a good day!


r/EmuDev 1d ago

PS96

Thumbnail
gallery
9 Upvotes

FINALLY!!!

Got some actual gameplay... Found a name! PS96, PlaySaffy 96 as in when Tekken 2, Tomb Raider, Crash Bandicoot, and Resident evil released on the PS1

Input now registers better, but GPU is still acting funny

There's white cubes during animations, and animations are like a slideshow.. I genuinely am stuck

But that I have got here its GOOD.. Very good!

I'll be finishing this soon this week, 3 months of work are going to be finished before school even starts!


r/EmuDev 1d ago

Reimplementing Marble Madness: Slapstic 103 reacts to 68010 prefetch

5 Upvotes

I reimplemented Atari Marble Madness (1984) function-by-function in TypeScript, using MAME as the behavioral oracle (RAM/state byte diffs), not as an emulator wrapper.

A 126-byte playfield mismatch at one frame traced to Slapstic 137412-103 observing a 68010 instruction prefetch at 0x02ff5a. That address is outside the protected ROM window 0x080000-0x087FFF, but it still committed a different bank. Modeling the prefetch closed the diff to zero.

MAME already taps the full address space so it reproduces this; it just does not document it. Write-up with the trace: https://magno73.github.io/marble-love/slapstic/

Repo: https://github.com/magno73/marble-love

No ROMs shipped; real play needs the user's own marble.zip + atarisy1.zip loaded locally.

Happy to answer questions about the oracle loop or the prefetch tap.


r/EmuDev 1d ago

GB I built a Game Boy / Game Boy Color emulator on an ESP32-S3

21 Upvotes

I’ve been working on a little project that started as “let’s see if I can emulate a Game Boy on an ESP32” and turned into a full handheld project.

The result is GB ESP32 Emulator, a Game Boy (DMG) and Game Boy Color (CGB) emulator running on an ESP32-S3, with a custom PCB.

GitHub: https://github.com/ysissoko/gb_emu_esp32

What it currently does

  • Cycle-accurate SM83 CPU emulation
  • DMG and CGB support
  • Interrupts, DMA, timers, HALT bug, etc.
  • MBC1 / MBC2 / MBC3 / MBC5 cartridge support
  • CGB VRAM/WRAM banking and palettes
  • CGB double-speed mode
  • ST7789V 240×240 SPI display
  • SD card support for loading .gb / .gbc ROMs
  • Battery-backed save files
  • MBC3 RTC persistence
  • 8 physical buttons
  • ROM browser menu

It runs at around 59.7 FPS on the ESP32-S3 with the current implementation.

The display pipeline is also asynchronous (using DMA transfers), so LCD transfers don’t block the emulation loop. I had to do quite a bit of optimization around IRAM placement, DMA transfers, scanline rendering, and memory access to get the performance where it is.

There’s also a custom KiCad PCB (V0 for the moment) in the repository, including the ESP32-S3, LCD connector, SD card slot, USB-C, LiPo charging, buttons, and LEDs.

The biggest missing piece right now is audio.

This has been a really fun embedded/emulation project, and I’d love to get feedback from people who know Game Boy hardware or have built similar ESP32 projects.

Repository: https://github.com/ysissoko/gb_emu_esp32

Would be especially interested in feedback on the emulator architecture, accuracy/testing, and the hardware design.


r/EmuDev 1d ago

Video First Pixels

Enable HLS to view with audio, or disable this notification

45 Upvotes

First time seeing pixels on my first GB emulator is very exciting! I know it's not working right at all but actually seeing anything on the screen is better than where I've been for the last on and off six months.


r/EmuDev 1d ago

Video Serious progress, but ive hit something i just cant get past.

Enable HLS to view with audio, or disable this notification

9 Upvotes

Making serious progress but ive been stuck here for days

im pretty sure its a nametable issue, but it may not be?

any pro's out there seen this symptom let me know.

pretty sure im messing up vramPC or nametables/mirroring or smoething, been stuck here

for probably a collective 30 hours. Games like popeye i can play start to finish, level to level like a real nes

same with balloon fight, but then multi table games like this really break with a few not

even showing a title screen.


r/EmuDev 1d ago

I built a Game Boy / Game Boy Color emulator on an ESP32-S3

Thumbnail
4 Upvotes

r/EmuDev 2d ago

What to emulate next?

7 Upvotes

Hi. I just got into emulation development and I just finished a very basic CHIP8 Emulator. Now I don't know what my next project should be. Some say I should do Intel8080/Space Invaders while other say that I should skip that and go for GB next. What should I do next? If so, what resources? Because I can't find any tutorial like resources. I want something like [this](https://austinmorlan.com/posts/chip8_emulator/) type of resource. TYIA!


r/EmuDev 2d ago

PS1 emulator progress!!!

Thumbnail
gallery
14 Upvotes

Done absolutely so much

I'm currently at about 95% hardware done, give or take, Since the game gets to that point

I might even finish it very soon

My main problem is my input gets registered but it doesn't reach the game, so I have to fix the handshake

This is definitely my most favorite project, it took me my entire summer but finally its done

I even have a custom dashboard idea for it, inspired by the X360 Aurora dashboard

I'll make it also have multiple modes in settings,

1 - Upscaling (There'll be native which is 240p but for some games its 640x480, and 720p, 1080p, 1440p, and I might add 4k)

2 - FPS (First there'll be a native mode, running at native PS1 speeds, then I'll add overclock to about 160mhz, which is a 400% increase!)

And other modes and stuff, I'm still brainstorming, I want to make this really customizable

Any ideas?


r/EmuDev 2d ago

i made a chip 8 emulator

Post image
23 Upvotes

i made a chip 8 emulator in C++ and raylib, imma emulate something else soon.

also here is the repository: https://github.com/hyperwilliam/chip8


r/EmuDev 1d ago

AEBOY GB/GBC

Thumbnail
github.com
0 Upvotes

Um novo emulador de Game Boy feito por um brasileiro — é incrível!


r/EmuDev 2d ago

Writing a microcode emulator: Why the hardware display logic on the Voyager series taught me more than any manual (plus a few working implementations)

Thumbnail
2 Upvotes

r/EmuDev 2d ago

Writing a microcode emulator: Why the hardware display logic on the Voyager series taught me more than any manual (plus a few working implementations)

0 Upvotes

Hey everyone,

While working on my earlier emulators (like my HP-41 project), I assumed processor families from the same era shared a vocabulary. On the HP-41, the LCD is a proper peripheral—you send character codes through instructions, and a display driver handles the glyphs.

So when I moved on to the Voyager series, I thought it would be the same conversation. Instead, it gave me pure garbage on screen. Turns out, the Voyager display doesn't use characters at all: its LCD RAM is mapped directly into the address space as two 56-bit registers containing raw segment bitmaps. No character decoding step, just a fixed lookup table mapping physical segments directly to bits.

Experiences like that made me dive deep into why microcode emulation beats functional simulation when you care about authentic hardware behavior—handling everything from undocumented ROM bugs and weird bank-switching quirks during self-tests, down to strict hardware timing instead of running at modern CPU speeds.

I wrote an article breaking down what a microcode emulator actually is and why getting your hands dirty with the original firmware matters: 👉 What is a Microcode Emulator and Why Does It Matter?

As a practical result of this reverse-engineering work, I also put together a few working emulators (including the Nut CPU family) that you can check out and download here: 👉 nibbleworkshop.com/emulators

I'd love to hear your thoughts.


r/EmuDev 3d ago

I created my own VM in C++

25 Upvotes

The CPU has 48 24-bit instructions, including trigonometric instructions

The VM has 192 KB of RAM (65,535 24-bit values); it has an assembler written in C#, 32 16-bit registers, 32 floating-point registers, and collision, CMP, and zero flags

In the future, I want to build a 32-bit VM with more instructions (around 100).

I implemented a simpler version of CALL and RET: CALL stores a value in a variable, and RET returns.

The project will be posted on GitHub as open source for anyone to improve, and it will include documentation for game and emulator development.

https://reddit.com/link/1w1lfb0/video/oqdhlk3n6bmh1/player


r/EmuDev 3d ago

GB (GameBoy) about reading Writeony Bits in IO registers

11 Upvotes

Some IO registers (like P1 (0xFF00), according to this document, page 141) have write-only bits.

My question is: after LDH A, ($00), what data is in register A?
Are the read-only bits 0? 1? garbage?
Does it depend on the register, or is it irrelevant because these bits are not taken into account by any game ? (Or are there games that rely on the return value of read-only bits?)


r/EmuDev 3d ago

CHIP-8 chip8: struggling with display.wait on timendus quirks test.

5 Upvotes

Hi, I've been implementing my chip8 interpreter/emulator as of late. I'm testing it now using the timendus test suite and all tests pass except for display waiting. I'm confused as to what this is even meant to do, i know it has something to do with old school crt's and vblank but how do i manage it in my emulator?


r/EmuDev 3d ago

Article Interactive computer museum

Thumbnail vma-broadcast.com
1 Upvotes

Hi,

I created my own "Interactive computer museum", which lists many of the iconic computers and offers HTML based emulators for 36 different devices (ROM's are NOT included and must be uploaded by the user).

The emulators can be used for free and have been programmed from scratch. They do not use any third party emulation libraries.

I hope you like it.

[https://vma-broadcast.com/emu/\](https://vma-broadcast.com/emu/)

Regards,
Vitor


r/EmuDev 3d ago

PS1 emulator bug

4 Upvotes

Halloo I'm a 14 year old hobbyist and I'm making my own PS1 emulator

I've spent some time working on it and I've gotten to a stage where it loads SCE + SCEA,

But then on some games (specifically Tekken 3 and Fifa 2005) it just doesn't go past SCEA, gets frozen

On other games like GTA I, and Final Fantasy VII it goes past SCEA! But then it's just a dark screen

Also before a few days I had an old build where it would go into Fifa 2005 and Tekken 3 menus and stuff but then for example at the "E A SPORTS, TO THE GAME" Animation it would give me RGB stripes

And on Tekken 3 after the Namco Presents it would do the same

And then they just freeze,

Is this too specific a problem or..?


r/EmuDev 3d ago

Zedex: ZX Spectrum emulator for Android based on Fuse core. Closed beta on Play, looking for testers

Thumbnail
2 Upvotes

r/EmuDev 3d ago

Needed a lightweight PE parser for a reverse engineering project. readpe parses PE/PE32+ files without dependencies: - DOS header validation - PE signature check - Section headers - Import directory parsing Built in C with no external libs. Use

Thumbnail
github.com
6 Upvotes

r/EmuDev 3d ago

KytyPlus dev update (KytyPS5 fork): PS5-native Dead Cells confirmed boots to menu via community tester

3 Upvotes

Hello everyone on r/EmuDev. I maintain KytyPlus, a fork of KytyPS5. C++20, CMake, Vulkan backend, Qt front end, clean-room HLE only. Current release is v2.9.

Context on why this update matters: I don't own a PS4/PS5, so I can't legally produce dumps to test against. Everything up to now was validated with synthetic packages I generated myself (PKG/PFS structure, param.json walking, ELF validation). That left game execution as the big unknown, so the README has had an open call for testers.

Someone answered. GitHub user CorpseSlayer got Dead Cells (the PS5-native build, PPSA-15552) booting to a stable menu, and filed the report with full specs here: https://github.com/Coder787-source/KytyPlus/issues/3

His setup: i7-9700K, RTX 4060 Ti, 16 GB RAM, Windows 11, and both emulator and game files on an external spinning HDD. Clean menu, no crashes, no glitches. Video of the run (CorpseSlayer's capture, shared with his permission): https://www.youtube.com/watch?v=1vXa9zByq68

One thing to note about that video: the menu runs around 17 fps. That number is real translation overhead on the emulator, and it's on v1.8, which predates the Vulkan pipeline disk cache and the async pipeline compiler that newer builds have. Those fix first-run compile stutter directly. Whether they also lift the steady menu frame rate on the same hardware isn't guaranteed, that depends on where the 17 fps overhead actually lives, and I don't have profiling data to say. That's exactly what I'm hoping testers on v2.9 will measure.

What this run actually exercised, since it was the PS5-native SKU: our own PS5 path end to end, PKG install → PFS → eboot → syscall HLE → GPU command translation → Vulkan. Interesting test case too, since Dead Cells is a Haxe/hxcpp title, so the binary is cross-compiled C++ with its own engine layered on the PS5 SDK calls.

What it does NOT validate, to be precise:

* The unified PS4 dispatch (PS4 eboots route to an embedded shadPS4 core). Still zero PS4 titles loaded, this run never touched that path.

* In-game execution beyond menu hasnt been tested. I'm not calling it playable, one title, one tester, on v1.8.

What's independently validated so far:

* PKG/PFS extraction incl. nested sce_sys/param.json (synthetic packages)

* Strict ELF loader (rejects non-Sony-format binaries)

* SDL controller mapping incl. third party pads

* Persistent install/library flow, no UI freeze during copy

Where I'd like help: testers of any kind. Whether you're on a gaming rig or a laptop with integrated graphics, a PS4 game or a PS5 game, a result that boots or one that crashes on launch, it all goes into the database. Reports + logs via GitHub issues.

Thanks to CorpseSlayer for the report and for letting us share the footage.

Source: https://github.com/Coder787-source/KytyPlus


r/EmuDev 4d ago

GB/GBC/GBA emulator in Rust (with more systems planned)

Enable HLS to view with audio, or disable this notification

93 Upvotes

Hello, I'm currently working on a multi-system emulator that I'm planning to run on an embedded device (probably STM32N6).

It currently supports the original Gameboy, the Gameboy Color and Gameboy Advance, though I'm planning to add support for some other older Nintendo consoles and the original Playstation (mark my words, I'll get it to run on embedded 😤).

No AI was used in any part of it :3

https://codeberg.org/netthier/gamekitten

To achieve sufficient performance on embedded (and to challenge myself), I'm also planning to implement some of the CPUs (at least PS1 and possibly GBA) as JITs. I've already started experimenting a bit, but if anyone has any pointers on writing JITs from scratch I'd highly appreciate them.


r/EmuDev 3d ago

I made an Android app to keep emulator drivers organised and updated

Thumbnail
0 Upvotes