User Tools

Site Tools


Sidebar

projects

wcp1 (due 20240124)
pct0 (bonus; due 20240125)
pct1 (bonus; due 20240125)
abc0 (due 20240131)
btt0 (due 20240131)
pct2 (due 20240131)
wcp2 (due 20240131)
mpg0 (due 20240207)
pct3 (bonus; due 20240207)
wcp3 (due 20240207)
def0 (due 20240214)
pct4 (due 20240214)
wcp4 (due 20240214)
bwp1 (bonus; due 20240228)
cta0 (due 20240228)
pct5 (bonus; due 20240228)
wcp5 (due 20240228)
cta1 (due 20240306)
gfo0 (due 20240306)
pct6 (due 20240306)
wcp6 (due 20240306)
pct7 (bonus; due 20240313)
wcp7 (due 20240313)
dap0 (due 20240314)
dap1 (due 20240320)
pct8 (due 20240320)
wcp8 (due 20240320)
pct9 (bonus; due 20240327)
wcp9 (due 20240327)
dap2 (due 20240329)
bwp2 (bonus; due 20240410)
gfo1 (due 20240410)
pctA (due 20240410)
pnc0 (due 20240410)
wcpA (due 20240410)
pctB (bonus; due 20240417)
pnc1 (due 20240417)
wcpB (due 20240417)
pctC (due 20240424)
pnc2 (due 20240424)
wcpC (due 20240424)
pctD (bonus; due 20240501)
wcpD (bonus; due 20240501)
gfo2 (due 20240508)
pctE (bonus; due 20240508)
wcpE (bonus; due 20240508)
EoCE (due 20240516)
haas:spring2024:comporg:projects:nesx

Corning Community College

CSCS2650 Computer Organization

Nigh-on Excellent Semester-programming-experience (nesX)

Objective

To immerse yourself in relevant and important aspects the nature of the CPU, the C-assembly-machine code connection, and getting to play with all of it under the guise of a simple system.

Task

Each week, throughout the semester, the aim will be to focus on various activities related to implementing some functionality for NES ROMs (to be run in an emulator):

  • reading through a tutorial, web page, howto, or other technical documentation
  • discussing the content (in the class discord)
  • experimenting/playing with the content in your own code
  • no warnings, syntax errors, logical errors, or runtime errors (if there are assembler/compiler flags to issue, they should be clearly documented in the code/utilized in Makefile)

The overall aim is to enable you to challenge yourself, explore areas and concepts you are not familiar with, and grow as a programmer and problem solver. I don't want to see you just doing things the way you are familiar with (simply because you've always done them that way).

The outline of semester progress:

week project chapter points per item (PTS) TOTAL
2 nes0 https://timcheeseman.com/nesdev/2016/01/18/hello-world-part-one.html 1 13
3 nes1 https://timcheeseman.com/nesdev/2016/01/22/hello-world-part-two.html 2 26
4 nes2 https://timcheeseman.com/nesdev/2016/02/06/color-in-motion.html 2 26
5 nes3 https://timcheeseman.com/nesdev/2016/02/22/sprites-and-input.html 3 39
6 nes4 create a 2 player pong game (1 player may be automated) 3 39
7 nes5 choose your path (see below): learn 6502 ASM (hello) or start on larger NES game 4 52
8 nes6 choose your path (ASM colors, NES game) 4 52
9 nes7 choose your path (sprites/input, NES game) 5 65
10 nes8 choose your path (ASM pong, NES game) 5 65
11 nes9 EoCE NES game (ASM or C) 6 78
12 nesA EoCE NES game (ASM or C) 6 78

Also be sure to peruse the other posts at: https://timcheeseman.com/nesdev/

Choose your path

Now that we have established a level of functionality using the existing set of tools, we have a choice to make. And this choice can be made individually:

  • learn 6502 assembly and recreate the ROMs made so far by writing them in assembly (do NOT just use compiler output)
  • start work on a larger, more involved NES game

The cadence for the assembly approach is pretty straightforward: we've pretty much implemented a thing a week. You'd pursue the same for that sequence of accomplishments.

As for the NES game effort, clearly you wouldn't be expected to produce something complete in the course of a week, so instead, I would like a snapshot:

  • what have you done, what is working, what isn't
  • custom tiles for character ROM
  • any working/semi-working ROMs showcasing accomplished functionality (even if later broken)

EoCE NES game

We'll cap off the semester with a more involved NES game, which could be a further modification/evolution of whatever work you've done already, or an opportunity to start anew. We'll do this through to the end.

I will also open things up to the possibility of working in groups (no more than 3!), provided each person has an awareness of all aspects of the code, and equally participates in the development effort. Documentation/comments/snapshots will be important, demonstrating you are keeping at the task.

Submission

TOTAL:nesX:final tally of results (TOTAL/TOTAL)
*:nesX:assimilate indicated and related content [PTS/PTS]
*:nesX:asked, responded, worked through any questions [PTS/PTS]
*:nesX:reveal of interesting insight, knowledge gained [PTS/PTS]
*:nesX:discussion regarding content, related resources [PTS/PTS]
*:nesX:experimentation, playing, reporting insights gained [PTS/PTS]
*:nesX:state what your code is going to do [PTS/PTS]
*:nesX:implementation of example or your own variant [PTS/PTS]
*:nesX:contribute content to class notes page [PTS/PTS]
*:nesX:no warnings, compiler notes for code [PTS/PTS]
*:nesX:no syntax errors in code [PTS/PTS]
*:nesX:no logical errors in code [PTS/PTS]
*:nesX:no runtime errors for code [PTS/PTS]
*:nesX:submitted code aligns with intent, author statement [PTS/PTS]

Additionally:

  • Solutions not abiding by spirit of project will be subject to a 25% overall deduction
  • Solutions not utilizing descriptive why and how comments will be subject to a 25% overall deduction
  • Solutions not utilizing indentation to promote scope and clarity will be subject to a 25% overall deduction
  • Solutions not organized and easy to read (assume a terminal at least 90 characters wide, 40 characters tall) are subject to a 25% overall deduction
haas/spring2024/comporg/projects/nesx.txt · Last modified: 2021/03/07 16:17 by 127.0.0.1