My implementation of the projects for the course "From Nand to Tetris".
Chapters 1 to 5 involve designing a computer from 2 hardware primitives (The NAND gate and the flip flop circuit) using a hardware description language, capable of running machine code.
Chapter 6 involves creating an assembler in Python, transforming assembly into the binary machine code.
Chapters 7 and 8 involve compiling bytecode of the Hack VM (a stack oriented language) into the Hack assembly language.
Chapter 9 is my implementation of the Tetris game in the Jack langauge (a high level, Java-like language)
Chapters 10 and 11 involve parsing and compiling the Jack language into Hack VM.
Chapter 12 is an implementation the Jack OS via the Jack language, implementing various features such as dynamic memory management, input/output, string processing and several mathematical operations.