Throwing ideas

  1. Bittorent client
    1. Bencoding parser
    2. Networks stuff
    3. multithreading?
    4. TUI?
  2. Text editor
    1. (i love markdown)
    2. https://viewsourcecode.org/snaptoken/kilo/
  3. Build your own db/redis
  4. gameboy emulator (i already did chip8, could redo though)
    1. tetris https://javilop.com/gamedev/tetris-tutorial-in-c-platform-independent-focused-in-game-logic-for-beginners/
  5. kernel/kwm/bootloader [X]
    1. https://david942j.blogspot.com/2018/10/note-learning-kvm-implement-your-own.html
    2. https://arjunsreedharan.org/post/82710718100/kernels-101-lets-write-a-kernel
  6. browser engine https://limpet.net/mbrubeck/2014/08/08/toy-layout-engine-1.html

Resources

  1. https://github.com/mitxela/git-animate
  2. https://codepen.io/heero/pen/DpBZzz

Evaluation

  1. Design - 15%
    1. debugging output
    2. user interface and options
    3. custom rom
    4. man page?
  2. Implementation - 25%
    1. clean code
    2. follow guidelines
    3. best practices
  3. Working - 20%
    1. successful tests
      1. valgrind
      2. gcov
      3. test roms
    2. feature complete
      1. cpu
      2. display
      3. audio
      4. etc
  4. Technical Report
    1. profiling reports
      1. gprof, flamegraph etc
    2. overall readme
      1. that nice animation from gbdev.io
      2. a nice timelapse video from mitlexa.com
      3. best readme template
    3. changelog
    4. initial proposal
      1. proposed features
      2. timeline

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:

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
struct registers {
	union {
		struct {
			uint8_t a;
			uint8_t f;
		}
		uint16_t af;
	}
};

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

  1. GBdev.io
  2. Pan Docs
  3. GameBoy CPU Manual
  4. GameBoy Instruction Set
  5. Imran Nazar: GameBoy Emulation in Javascript
  6. Cinoop
  7. Jeremy Banks: Learning Rust by writing a GameBoy emulator
  8. Coffee-GB

Software Engineering Resources

  1. Semantic Versioning
  2. Conventional Commits
  3. C++ Core Guidelines
  4. CMake

Misc

  1. Git-Animate
  2. GameBoy GIF
  3. Numfocus GSoC Proposal Template

(back to top)

Footnotes

  1. Creative use of unions in C

0 items under this folder.