Nemo
286df5b147
Found 2 bugs: 0. ic+=10 is incorrect jump for the boolean compare methods 1. Another bug was in the write() method, which was increasing the instruction counter even for label commands, which aren't supposed to do that. Another minor issue in my interpretation of the "call" to `Sys.init` which I was so far just doing via a jump. Changed that to a proper call |
||
---|---|---|
.. | ||
CodeWriter.php | ||
CommandType.php | ||
Parser.php | ||
README.md | ||
VMTranslator.php |
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 constantsParser
, mostly as defined in the specificationCodeWriter
, mostly as defined in the specificationVMTranslator
which combines the above