Assembly Minigame

A minigame for players to navigate through obstacles, collecting power-ups while avoiding hazards to complete levels.

About

This minigame was developed as part of a Computer Organization course (CSCB58) at the University of Toronto. The course focused on the fundamentals of computer architecture and assembly language programming, covering topics like the CPU, memory, and I/O devices. The minigame was designed to provide a fun and interactive way for students to apply their knowledge of assembly language programming, instruction execution, and addressing techniques.

Features

  • Player movement using WASD keys
  • Gravity simulation and platform collision
  • Power-ups, including extra lives and immunity from damage
  • Multiple levels with increasing difficulty
  • Hazards such as water and fire that damage or kill the player
  • Winning condition: reaching the flag without dying

Technologies Used

  • Programming Language: MIPS Assembly
  • Development Environment: MARS (MIPS Assembler and Runtime Simulator)
  • Concepts: CPU instruction sets, memory addressing, and control flow

Role

As the sole developer, I designed, implemented, and tested the game mechanics using MIPS Assembly. This required creating efficient instruction sets, managing memory effectively, and testing for edge cases to ensure smooth gameplay.

Reflection

Developing this game was a rewarding challenge that grew my understanding of low-level programming and computer architecture. Working with MIPS Assembly taught me to think critically about performance, as every instruction and memory access had a direct impact on execution.

One of the most significant lessons was implementing game logic in an environment with limited abstractions, which deepened my appreciation for higher-level languages and frameworks. Debugging in MIPS was especially challenging but immensely satisfying when successful.

This project not only strengthened my technical skills but also sparked my interest in exploring how computers function at the fundamental level, inspiring me to continue learning about computer systems and low-level programming.