Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Does anyone have any links to blog posts they consider good descriptions of what goes into making a game console emulator?

I am super impressed by the content of this post, but I bet there is also a lot that is going over my head that I am not even aware of.



I’ve recently been working on a Gameboy Color emulator in Rust[1], mostly as a learning project, and it has been an absolute blast! I’ve never enjoyed working on a project this much to be honest - it’s very satisfying to gradually see your emulator run games developed for another system, especially if it’s a system you’ve personally used in the past.

In my opinion, the best way to learn how an emulator works is to start writing one. /r/emudev and the emudev Discord (see subreddit sidebar) are a great place to start. The Discord in particular is great: it’s split into channels for each system, and there are a ton of pointers to resources for all systems in the main channel.

As far as consoles go, the typical recommendation is to start with CHIP-8. It’s a straightforward system with a very simple design, which makes it relatively easy to emulate.

[1] For the curious: https://github.com/aksiksi/gbc


There must be hundreds of Gameboy emulators now. I guess it's the equivalent of "Hello World" for emulators.


I think CHIP-8 is a better candidate for that title. But yes, Gameboy emulators are quite common.


Infocom Z-Machine? Probably even simpler to implement since it was designed to be emulated.


Pretty sure the word "emulation" doesn't apply. The Z-Machine never had hardware to be emulated, only a virtual machine to be implemented. Ditto CHIP-8 though.

For emulating a real system, the Gigatron would be relatively simple. The hard part would be the display because it is bit-banged into NTSC.


Been there, done that!

And it was a blast.


I agree for older machines this is a great approach. A lot of the challenge is being organized and persistent, powering through all the opcodes and making sure they're accurately implemented. I made a Sega Master System emulator many years ago and it was a fun project.

I do wonder how one takes on modern machines though. It seems like it'd be a completely different ball of wax.


Modern game consoles have a lot of common library / OS system calls that instead of emulating you re-create those calls and make your own implementation with the expected return values. The low level stuff and shader translation aspects are very complicated though.


Oh definitely, writing an emulator for a modern system is an entirely different ballgame. I truly respect the dedication and skill of the people behind large emulator projects like PCSX2 and Dolphin.


> it’s very satisfying to gradually see your emulator run

This does sound like fun. I feel like I’ve had a similar experience in porting and refactoring legacy code, and each successive step forward unlocks more and more cool stuff


https://cturt.github.io/cinoop.html

Basic overview of a GameBoy emulator. Far cry from the complexities of a Switch, but still a great writeup by cturt.


I wrote up a series [0] documenting a CHIP-8 emulator I wrote that I hope explains how to get something like this working from the ground up, albeit for a much simpler system.

[0] https://river.codes/emulating-a-computer-part-1/


If you want to get into writing emulators yourself, I'd recommend starting with the CHIP-8. I just wrote one in C# and it was pretty easy, still need to properly handle input and rendering though (I'm currently saving the display output to a bitmap after every draw call)


If you’ve got a bitmap you’re almost there, you can stream that bad boy over the bus to SDL for rendering.


Dolphin (wii / gc emulator) blog is great: https://dolphin-emu.org/blog/



There are some pretty good YouTube videos on the subject, worth a search




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: