aboutsummaryrefslogtreecommitdiff
path: root/vm/runtime.h
AgeCommit message (Collapse)Author
2023-11-01Implemented OP_MALLOC_STACK and OP_SUB in the runtimeAryadev Chavali
2023-11-01Implemented MGET_STACK and MSET_STACK in the runtimeAryadev Chavali
Very easy, they just pop a word then defer to their normal versions. This is probably the best case where a macro works directly so I didn't even need to write a function form for them first. One thing is that then names for the macros are quite bad right now, probably need renaming.
2023-11-01Implemented OP_MSIZE in the VM runtimeAryadev Chavali
2023-11-01Added a print_heap mechanism into vmAryadev Chavali
Pretty simple implementation, nothing massive. In VERBOSE mode, heap is tracked for any allocations/deletions, printing it if so.
2023-11-01Implemented instructions in the runtime for memory managementAryadev Chavali
Pretty simple, required some new types of errors. Obviously there's space for a macro for the differing instruction implementations, but these things need to be tested a bit more before I can do that.
2023-11-01DUP implementation is now part of WORD_ROUTINESAryadev Chavali
As PUSH_REGISTER and MOV have the same signature of taking a word as input, DUP may as well be part of it. This leads to a larger discussion about how signatures of functions matter: I may need to do a cleanup at some point.
2023-11-01VM runtime now maintains a heap internallyAryadev Chavali
Now need to create some instructions which manage the heap
2023-11-01Implement OP_MULT in runtimeAryadev Chavali
Lucky surprise: OP_PLUS follows the same principle rules as the bitwise operators in that they return the same type as the input. Therefore I can simply use the same macro to implement it and MULT as those. Very nice.
2023-11-01Added a routine to cleanup resources allocated to the VMAryadev Chavali
This means the stack should be heap allocated, which makes sense as beyond 1KB one should really be using the heap rather than the stack.
2023-11-01VM registers are now a dynamic arrayAryadev Chavali
Stack based machines generally need "variable space". This may be quite via a symbol-to-word association a list, a hashmap, or some other system. Here I decide to go for the simplest: extending the register system to a dynamic/infinite number of them. This means, in practice, that we may use a theoretically infinite number of indexed words, hwords and bytes to act as variable space. This means that the onus is on those who are targeting this virtual machine to create their own association system to create syntactic variables: all the machinery is technically installed within the VM, without the veneer that causes extra cruft.
2023-11-01Removed OP_EQ signed versions as they're uselessAryadev Chavali
A negative number under 2s complement can never be equal to its positive as the top bit *must* be on. If two numbers are equivalent bit-by-bit then they are equal for both signed and unsigned numbers.
2023-10-31Remove duplicated codeAryadev Chavali
2023-10-31Moved inst module to libAryadev Chavali
As it has no dependencies on vm specifically, and it's more necessary for any vendors who wish to target the virtual machine, it makes more sense for inst to be a lib module rather than a vm module.
2023-10-31Created routines for new comparator opcodes (not implemented)Aryadev Chavali
Will cause error if used currently, which is fine.
2023-10-23Make root directory an include path, set #include's properlyAryadev Chavali
Easier to write includes now just using < with the module name, in comparison to using relative paths.
2023-10-23Added lib folder for general stuff, introduced as target to MakefileAryadev Chavali
2023-10-23src->vm, Makefile is now a bit more abstracted and pretty coloursAryadev Chavali
Changed folder names for sake of clarity (will be introducing a new build target soon), and Makefile can now easily support more targets.