nand2tetris/vm
Nemo 4e49913808 [07/Static] Implements static push/pop memory segment 2020-06-02 17:28:20 +05:30
..
CodeWriter.php [07/Static] Implements static push/pop memory segment 2020-06-02 17:28:20 +05:30
CommandType.php Break into multiple files for easier navigation 2020-06-02 03:19:28 +05:30
Parser.php Break into multiple files for easier navigation 2020-06-02 03:19:28 +05:30
README.md [07] Initial work on VM Translator 2020-06-01 19:49:55 +05:30
VMTranslator.php [07/Static] Implements static push/pop memory segment 2020-06-02 17:28:20 +05:30

README.md

VM Implementation

We have 8 segments:

  • argument
  • local
  • this/that
  • pointer
  • static (shared)
  • constant (shared)
  • temp (shared)

RAM Address | Usage ============|================= 0-15 | Virtual Registers 16-255 | Static Variables (shared) 256-2047 | Stack 2048-16384 | Heap 16384-24575 | Memory mapped I/O

Register | Name | Usage ==========|========|========= RAM[0] | SP | Stack Pointer RAM[1] | LCL | local RAM[1] | ARG | argument RAM[3] | THIS | this RAM[4] | THAT | that RAM[5-12] | temp Segment RAM[13-15]| General Purpose Registers

The implementation is written in Modern PHP with static typing. Uses the following 3 classes

  • CommandType as a Enum for using command types as constants
  • Parser, mostly as defined in the specification
  • CodeWriter, mostly as defined in the specification
  • VMTranslator which combines the above