x86 Preview

x86 Programming

Project Type: Group (3 people)

Technology Stack: C#, Assembly (x86)

Role: Documentation Creator + Programmer

GitHub: Project Metro

Short Description

This project was part of the Undergraduate Research Opportunities Scheme (UROS) projects. The initial inspiration was to learn more about bootloaders and assembly code.

As the goal for the project team picked to create software that can take assembly code, compile it, convert it to ISO and still be able to run it on hardware. Additional goals were to unlock 32 and 64-bit modes and write snake game on assembly (16-bit version).

Description in details

As I did not have any previous experience with assembly, my personal task was to learn it and write documentation to help other students in future. After learning some basics, I started working on a “Snake” game and at the same time helped other team members. After using reverse engineering and founding how ISO files were structured (more details may be found here) and created software that compiled assembly using NASM (assembler compiler) and converted it to ISO.

Project Metro
Project Metro Console UI

After learning more about BIOS interrupts and interaction with VGA, I had control over pixels and know how to light them in different colours. After I also added some “functions” based on user input. At the same time, other team members were able to unlock 32 and 64-bit modes using assembly code which may be found here.

As documentation priority was highest, I moved to it, without finishing the “Snake” game. Hopefully, I will finish the game one day 🙂

Overall, want to thank Kristaps Jurkans, Harry Rile and Charles Fox for the possibility to create such a project!

Project Metro presentation
Project poster