Categories
Uncategorized

Fetch, Decode, Execute: Completing the NES Emulator’s Core

This term, our team completed the CPU and memory bus portions of our NES emulator. We also have approximately 10,000 tests per instruction running and passing! We even had time to start working on a display — right now just a window opens, but that’s progress!

Much of my contributions were related to our development environment. I recreated our Docker container, which uses Alpine now. All of our build and testing tools are present in the container, and the image lives in the GitHub repository. The Docker container was generalized such that it can be used for building, testing, or linting/formatting either locally or in CI. This standardized our linting/formatting checks, and allowed automatic application of standards when run locally. I also implemented a few instructions, namely the stack and shift instruction set.

For future work, I intend to implement automated testing in the repo and to automate build releases. I’m also really looking forward to working on the PPU. This has been a fun project so far, and I’m lucky to have such a great team to work on it with.

See our repo here: https://github.com/coopeaus/NES-Emulator

Categories
Uncategorized

Press Start: Embarking on the Journey of Building an NES Emulator

For our senior design project, my team is building an NES emulator. Our GitHub repo can be found here. So far, the journey has been great — I’ve learned so much, and further cemented my understanding of the interaction between low-level components that began when I completed nand2Tetris. After getting a solid understanding of the steps to take, we decided to begin with the CPU. All other components rely on the CPU and its opcodes.

At this point, we have set up our development environment. I have been able to employ some of the skills I have developed in my career to employ CI checks through GitHub Actions, and now our repo will automatically check linting and formatting on pull request. The action also comments its suggestions on as a review on the pull request. One teammate set up bash files for easier building, and the CMakeLists.txt file we will use for compiling the project. We also have a Dockerfile set up for linting/formatting checks locally, for teammates without clang-format and clang-tidy installed.

We’re making great progress, and I’m looking forward to seeing this project through!

Categories
Uncategorized

Introduction

Welcome to my blog! My name is Austin Cooper, and I’m a senior studying computer science at Oregon State University. This blog will track my progress through my capstone project.

I live in Ohio with my wife, 3 dogs, and 2 cats. In my free time I like hunting, camping, and working on my project vehicles (a 1977 Volkswagen bus and a 1990 Volkswagen Cabriolet). Previously I was an automotive technician, but in January 2024 I started as a co-op in firmware verification. In September 2024 I was offered, accepted, and started a new role in test engineering.

I enjoy working with embedded devices, and have completed a few projects using platforms like Raspberry Pi, Arduino, and the ESP32. I have even designed my own board for processing analog audio using an ESP32 and a PCM1862 ADC.