In my spare time I have been slowly writing my own emulator for the original Nintendo GameBoy using C. I have been using this mostly as a learning exercise to understand various aspects of how CPUs and hardware work.
It has been quite a good project to start doing this sort of thing as the GameBoy hardware has been fairly well documented over the years. There are also a large number of emulators written by others that I have been using as reference for my own.
At this point in time I don’t have anything graphical working, only a start on the underlying cpu and memory structures. But I’m improving it over time and hope to eventually be able to actually play something on it.