This is just information, and the text is targeted to less involved audience, so sorry for telling obvious things. I don't know yet which future this project will have, will be it a public release or something else. For now it remain a personal, private project.
I know that many programmers, who are interested in retro gaming, starting to think about creating their own emulator at some point. So there are people who are curious how difficult it is and how much effort could it take, but I barely can remember anyone who shared any real numbers on this regard. Today I have a chance to share my own experience.
Project outline: a basic NES emulator, minimalistic approach - no GUI or configs whatsoever, NROM only, just as complete as required for my own games to run. It has pretty complete scanline based PPU emulation, though, most of classic games runs flawlessly (sans sound). A twist, it is in Java, a language that I used like 10 years ago last time. Did quite some JS and AS3 programming since, though, so it didn't take too long to catch up. Take in account that this wasn't my first emulator, I can't even really count which one it is - seventh, probably.
Total time to get it done, except refreshing Java knowledge, is 27 hours. 3 hours spent for framework that displays generated raster, plays sound, handles input, loads game data. 3 hours for complete CPU core, all addressing modes, official opcodes, interrupts handling. Complete PPU emulation took 6 hours. 5 hours for limited APU emulation, it lacks envelopes and length counters. Remaining time, 10 hours, spent for extensive bug hunting through code overview, running various games and tests (Kevin Horton's and NEStress were most helpful), tracing. First game that ran properly was Battle City, one of easiest to emulate. Super Mario Bros and especially Galaxian were the most tricky. Two most difficult things were debugging the CPU core, very easy to make a mistake there, and proper PPU scrolling/addressing emulation - many games do actually require complete emulation of the internal registers and their logic, as explained by skinny in 1999.
Another interesting number is how much of code it is. 1560 lines for the whole emulator - CPU, PPU, APU. 200 extra lines for platform dependent framework. About 40K of source code total. So, where is the good 2 megabytes of source code with many thousands of lines in emulators like FCEUX are coming from? Mostly from GUI, service features, and support for all mappers. So that is what you could cut if you just want to make a working emulator without spending many months.
I know that many programmers, who are interested in retro gaming, starting to think about creating their own emulator at some point. So there are people who are curious how difficult it is and how much effort could it take, but I barely can remember anyone who shared any real numbers on this regard. Today I have a chance to share my own experience.
Project outline: a basic NES emulator, minimalistic approach - no GUI or configs whatsoever, NROM only, just as complete as required for my own games to run. It has pretty complete scanline based PPU emulation, though, most of classic games runs flawlessly (sans sound). A twist, it is in Java, a language that I used like 10 years ago last time. Did quite some JS and AS3 programming since, though, so it didn't take too long to catch up. Take in account that this wasn't my first emulator, I can't even really count which one it is - seventh, probably.
Total time to get it done, except refreshing Java knowledge, is 27 hours. 3 hours spent for framework that displays generated raster, plays sound, handles input, loads game data. 3 hours for complete CPU core, all addressing modes, official opcodes, interrupts handling. Complete PPU emulation took 6 hours. 5 hours for limited APU emulation, it lacks envelopes and length counters. Remaining time, 10 hours, spent for extensive bug hunting through code overview, running various games and tests (Kevin Horton's and NEStress were most helpful), tracing. First game that ran properly was Battle City, one of easiest to emulate. Super Mario Bros and especially Galaxian were the most tricky. Two most difficult things were debugging the CPU core, very easy to make a mistake there, and proper PPU scrolling/addressing emulation - many games do actually require complete emulation of the internal registers and their logic, as explained by skinny in 1999.
Another interesting number is how much of code it is. 1560 lines for the whole emulator - CPU, PPU, APU. 200 extra lines for platform dependent framework. About 40K of source code total. So, where is the good 2 megabytes of source code with many thousands of lines in emulators like FCEUX are coming from? Mostly from GUI, service features, and support for all mappers. So that is what you could cut if you just want to make a working emulator without spending many months.