#From NAND to Tetris: Building a Modern Computer From First Principles