Throwing ideas
Bittorent clientBencoding parserNetworks stuffmultithreading?TUI?
Text editor(i love markdown)https://viewsourcecode.org/snaptoken/kilo/
Build your own db/redis- gameboy emulator (i already did chip8, could redo though)
kernel/kwm/bootloader [X]browser engine https://limpet.net/mbrubeck/2014/08/08/toy-layout-engine-1.html
Resources
Evaluation
- Design - 15%
- debugging output
- user interface and options
- custom rom
- man page?
- Implementation - 25%
- clean code
- follow guidelines
- best practices
- Working - 20%
- successful tests
- valgrind
- gcov
- test roms
- feature complete
- cpu
- display
- audio
- etc
- successful tests
- Technical Report
- profiling reports
- gprof, flamegraph etc
- overall readme
- that nice animation from gbdev.io
- a nice timelapse video from mitlexa.com
- best readme template
- changelog
- initial proposal
- proposed features
- timeline
- profiling reports
Report
Schedule of Deliverables
Deliverables:
- Working memory and registers (MBCs will be implemented)
- Greater than 80% opcodes will be implemented (tested by opcode count and test roms)
- Functioning graphics
- Functioning user input
- ? Audio Output (Extra Feature if time permits)
Below is a tentative timeline of implementing these deliverables
Preparation Period
I will be reading more about the GameBoy specifications. Side-by-side I will be planning out my project structure and setup my build tools.
Major achievements:
- README.md template
- Project structure decided
- CMake implemented
- Libraries installed
- SDL3
- Pipelines implemented
- for CI/CD of releases
- for conventional commits
- https://www.youtube.com/watch?v=Ob9llA_QhQY&t=66s&pp=ygUic2VtYW50aWMgdmVyc2lvbmluZyBnaXRodWIgYWN0aW9ucw%3D%3D
Week 1
This will be spent implementing the memory and starting work on the CPU and instruction codes
Major achievements:
- Implement memory
- choose between vector and array or any other option
std::array
- implement registers in an easy to access manner1
- choose between vector and array or any other option
struct registers {
union {
struct {
uint8_t a;
uint8_t f;
}
uint16_t af;
}
};
- work on memory bank controllers
- https://gbdev.io/pandocs/Memory_Map.html
- Begin implementing the CPU
- implement around 20% of the opcodes
- test against tetris rom
Week 2
Will begin implementing the display and user input. Will expand the opcodes and memory functionality (OAM tables etc)
Major Achievements:
- Functioning display and user input
- using SDL3
- basic games might be playable now
- Release v0.1.0
- provided basic games are playable
- around 60% of the opcodes should be implemented
Week 3
Will expand all features so far, Implement audio functionality
Major Achievements
- Progress in CPU
- around 80% of the opcodes implemented
- Game audio should be working
- More games should be playable
- Super Mario Land should function
- Legend of Zelda should work
Week 4
Testing of code, refactoring, updating docs, and other chores.
Final Week
Finish up the project, implement any final changes, and generate final technical reports. Finally submit and present the project.
Appendix
GameBoy Resources
- GBdev.io
- Pan Docs
- GameBoy CPU Manual
- GameBoy Instruction Set
- Imran Nazar: GameBoy Emulation in Javascript
- Cinoop
- Jeremy Banks: Learning Rust by writing a GameBoy emulator
- Coffee-GB
Software Engineering Resources
Misc