Writing Gameboy emulator is fun, just like writing a raytracer. And it can be nice way to learn a new language. Is there something special/different in this project compared to many others?
For me the most interesting GB emulation project is Mooneye due to being written in Rust and its emphasis on accuracy and documentation of GB hardware: https://github.com/Gekkio/mooneye-gb
My thoughts exactly. Being written in C++ isn't interesting enough on its own.
What about the implementation is interesting? Does it make heavy use of some new feature like coroutines, or something? It is supposed to be very elegant? What?
Does it have to be interesting to share? Writing a gameboy emulator is a fun and challenging project in and of itself, and something that not everyone can do. That alone I think is impressive enough to share.
I wrote a gameboy emulator a few years ago now in Go (https://github.com/djhworld/gomeboycolor), it was a personal project that had a lot of highs but crippling lows.
Very rewarding, but frustrating. I don't think it builds anymore due to library conflicts.
Nice, looks awesome! I've been writing my own GB emulator off and on for a few years now. Was this your first emulator? What were the major challenges with this project for you?
It was my second major emulation project, and took roughly 3 months to write. Years ago, I started work on an NES emulator and worked on it on+off for...well, probably about 5-7 years. Despite the time investment, khednes is a much uglier chunk of code than khedgb. I like to think of it as evidence that I've learned some things in the meantime.
Game Boy's fun; the CPU's a little nicer than the NES's, the memory controllers in the cartridges are less numerous and more regular, and the video controller is built in such a way that most games use less cycle-counting than they did on NES, so timing isn't as finicky.
I'm moving on to Game Boy Advance now. Figuring out ARM instruction decoding and reading up on the architecture has taken about the amount of time that it took to write my initial GBZ80 implementation.
10 comments
[ 4.6 ms ] story [ 37.8 ms ] threadFor me the most interesting GB emulation project is Mooneye due to being written in Rust and its emphasis on accuracy and documentation of GB hardware: https://github.com/Gekkio/mooneye-gb
What about the implementation is interesting? Does it make heavy use of some new feature like coroutines, or something? It is supposed to be very elegant? What?
I wrote a gameboy emulator a few years ago now in Go (https://github.com/djhworld/gomeboycolor), it was a personal project that had a lot of highs but crippling lows.
Very rewarding, but frustrating. I don't think it builds anymore due to library conflicts.
It was my second major emulation project, and took roughly 3 months to write. Years ago, I started work on an NES emulator and worked on it on+off for...well, probably about 5-7 years. Despite the time investment, khednes is a much uglier chunk of code than khedgb. I like to think of it as evidence that I've learned some things in the meantime.
Game Boy's fun; the CPU's a little nicer than the NES's, the memory controllers in the cartridges are less numerous and more regular, and the video controller is built in such a way that most games use less cycle-counting than they did on NES, so timing isn't as finicky.
I'm moving on to Game Boy Advance now. Figuring out ARM instruction decoding and reading up on the architecture has taken about the amount of time that it took to write my initial GBZ80 implementation.