[Elective] Retro Console & Emulator Programming

 Programming today's modern games involves using tools and frameworks built upon numerous layers of abstraction. This endows programmers with tremendous power and the ability to quickly create games that would have taken a long time to develop in the past.

However, this great power comes with the major disadvantage of obscuring what is really happening at the very lowest level (the hardware). This insight is of primordial importance for students who wish to go into system, engine, or GPU programming. In the course "Computation Systems Fundamentals" (recommended but not required before taking this course), we have already discussed how computer hardware really works.

This course has three major parts:

Understanding Vintage Consoles:
We will extensively discuss the history, architecture, and functioning of a vintage 8-bit console. You will gain a deep understanding of its hardware components, memory management, and processing capabilities, as well as the compromises made during its development.

Assembly Programming Project:
In a group project, each group will develop a small piece of software for this console using assembly language. This hands-on experience will help you understand low-level programming and the constraints of early gaming hardware.

Enter C++:
Groups will choose to either develop an emulator in C++ that can run the machine code developed in the previous part or set up a toolchain that allows the generation of the same binary from C++ source code as the one generated from the assembly code.
By the end of this course, you will have practical experience in low-level programming and emulator development, equipping you with some of the skills necessary for high-performance system, engine, and GPU programming.


Teachers: tom.tesch@howest.be