Age | Commit message (Collapse) | Author |
|
This is because we were checking them as if they were word registers.
|
|
For each cycle, print the cycle and any changes. We track changes on
the stack by remembering the previous stack pointer. For registers, I
remember the previous array of registers and do a byte level compare
of the current registers and the remembered ones.
Produces pretty log messages and an easy way to track execution.
|
|
Easier to read now
|
|
Instead of making routines to handle data in the `ret` register, just
store the result of POP into the last word register.
This means we are no longer using vm_pop_* or POP_ROUTINES for the
vm_execute script on OP_POP: instead we'll just use vm_mov_* which
automatically pops the datum for us, while moving the datum to the
last register.
|
|
|
|
|
|
|
|
|
|
|
|
Handles OP_HALT
|
|
Registers are now just words, with pushing from and moving to
registers with specified subtypes just pushing those types into the
word registers. That means there are 8 word registers which can act
as 16 half word registers, which themselves can act as 64 byte
registers.
|
|
Prints each aspect of the vm, and vm_print_all does it all.
|
|
Instead of taking an operand and a register, mov just uses the stack
for the operand. Therefore, there's no need for a register member in
inst_t.
As a result, PUSH_*_REGISTER now uses the operand for the register.
|
|
Introduced an enum (opcode_type_t) for the masks and values of each
opcode, which allows defining a single enum which checks an opcode by
a opcode_type_t.
|
|
|