Requirements

In this part, you can find an overview of the graded parts of the project, and what their weights are.

Fraud and ChatGPT

Fraud (as well as aiding to fraud) is a serious offense and will always lead to (1) being expelled from the course and (2) being reported to the EEMCS Examination Board. As part of an active anti-fraud policy, all code must be submitted, and will be subject to extensive cross-referencing in order to hunt down fraud cases. It is NOT allowed to reuse ANY computer code or report text from anyone else, including ChatGPT, Github Co-Pilot or similar, nor to make code or text available to any other student attending CESE4000 (aiding to fraud). An obvious exception is the code that was given to you by the course.

an excuse that one “didn’t fully understand the rules and regulations on student fraud and plagiarism at the Delft Faculty of EEMCS” will be interpreted as an insult to the intelligence of the course instructor and is NOT acceptable. In case of doubt one is advised to first send a query to the course instructor before acting.

Individual contributions

Part of your grade will be determined by your individual contributions.

Do note, that everyone in your group is supposed to do at least some part of the work. You are responsible, as a group (which we do also consider in your teamwork grade), to involve your team members in this project. We expect everyone to at least make some meaningful commits on the project repository which are not simply fixing a typo in the Readme for example. This is also a large reason for why we reserve the right to make exceptions to the grading rules presented here.

Teamwork

With this part you can receive a total of 2 points based on the teamwork in your group. This point is shared in your group. We will take into account:

  • Meetings with the TA
  • Planning
  • Distribution of responsibilities
  • Git usage

There are also a mandatory buddycheck, one halfway and one at the end.

Report

With this part you can receive a total of 1 point determined by your report. This point is shared in your group. This report should have:

  • A reflection on your teamwork, results, and what you would do differently if you were to do it again.
  • An overview of the architecture of your emulator, with a diagram of how your emulator functions.
  • A description of the features you implemented (so we can grade them for the Technical requirements section)

We recommend you write the report using LaTeX but as long as you submit a readable PDF that is sufficient.

Code quality

With this part you can receive a total of 2 points based on the following criteria:

  • Testing (assessed by your group's TA)
  • Software Architecture (assessed by your group's TA)
  • Linting (do you pass clippy and cargo fmt, version 1.79)
  • Documentation, clarity and readability of code (assesed by your groups's TA)

This grade is shared in your group.

A note on clippy

Clippy is a very capable linting tool, but it does sometimes make mistakes. You can tell clippy not to look at certain parts of your code (this is discussed in the lectures). Obviously it is not allowed to ask clippy to ignore all style issues for the entire project. If however, on a small scale, you disagree with clippy: make a comment about it and disable the lint just for that specific instance. Your TA will look at this.

Technical requirements

The technical requirements consist of several parts. In total these parts are worth 5 points of your grade. These points are shared in your group.

With the base part, you can receive a total of 3 points:

Base

  • Implement all the documented instructions, with their addressing modes (TEST: use tudelft-nes-test to check this!)
  • Implement the NROM and MMC1 mapper
  • Read cartridges in the .nes format from files
  • Proper timing of different instructions (NOTE: page-boundary and branch timing is bonus)
  • Implement handling of interrupts
  • Implement the NES CPU Peripheral Communication
    • note: this includes PPU and Controllers but not the APU that is bonus

Only once you have implemented these base features to (near) completion, can you receive any of the following points:

Advanced

  • Implement the unofficial instructions (max 1 bonus point)
  • Be cycle accurate on page boundaries and after branch instructions (max 0.5 bonus points)
  • Emulate the APU (max 1.5 bonus points)
  • Add currently not-supported features to the PPU source code (max 0.5 bonus points)
  • Support more mappers, such as the MMC31. (max 1 bonus points, depending on the complexity)
  • Support battery backups (save games) (max 0.25 bonus points)
  • If you find something else you think is interesting, do talk to the TAs. Maybe we can give you points for it!

Note that you will be limited by a maximum of 5 points for the technical requirements. Pick and choose which bonus features you like!


1

Properly emulating the MMC3 mapper in particular may involve modifying the PPU library we provide.

Exceptions

We reserve the right to change grades in exceptional cases.

Submission details

Your submission will be the most recent commit on the main branch. This submission should contain all of your code as well as a pdf file of your report (see above for details).

Using Libraries and Provided Libraries

For your project, we provide two libraries: tudelft-nes-ppu and tudelft-nes-test. These respectively provide all the graphics systems for the emulator, and testing facilities (such as test roms) for your emulator.

You can request developer access to these repositories if you need this, by sending an email to the course email address

librarydocumentationrepository
tudelft-nes-ppuhttps://docs.rs/tudelft-nes-ppugitlab
tudelft-nes-testhttps://docs.rs/tudelft-nes-testgitlab

If you want to use other, publicly available libraries, you are allowed to. However, they cannot be libraries that implement large parts of the project for you. If you're in doubt about whether you're allowed to use the library, talk to your TA.