Age | Commit message (Collapse) | Author | |
---|---|---|---|
2023-10-23 | src->vm, Makefile is now a bit more abstracted and pretty colours | Aryadev Chavali | |
Changed folder names for sake of clarity (will be introducing a new build target soon), and Makefile can now easily support more targets. | |||
2023-10-23 | Rearrange what is printed in vm_print_all | Aryadev Chavali | |
First the program, then the registers then the stack. | |||
2023-10-23 | Check for and handle errors when interpreting bytecode | Aryadev Chavali | |
Prints an error message, returns a non zero code based on error code (255 - err). In main, I propagate this exit code. | |||
2023-10-22 | Simple program which assembles instructions then executes them | Aryadev Chavali | |
2023-10-21 | Added vm_execute_all which executes an entire program | Aryadev Chavali | |
Handles OP_HALT | |||
2023-10-21 | Wrote generalised procedures for interpret and assembly | Aryadev Chavali | |
2023-10-16 | Added helper functions to read and write bytes from files | Aryadev Chavali | |
Given a filepath, helper function to write a buffer of bytes to a file and to read a file completely as a buffer. | |||
2023-10-16 | Made a sample program, loaded into VM and executed | Aryadev Chavali | |
Seems pretty nice to use, and it works according to GDB. | |||
2023-10-15 | Moved vm_* code to its own file (runtime.(h|c)) | Aryadev Chavali | |
2023-10-15 | Implemented OP_PUSH_*_REGISTER in vm_execute | Aryadev Chavali | |
2023-10-15 | Make error TODOs specific to routine (for vm_mov_*) | Aryadev Chavali | |
2023-10-15 | Implemented vm_push_*_register routines | Aryadev Chavali | |
2023-10-15 | Added a register `ret`, a word, which holds the result of any instruction | Aryadev Chavali | |
Allows inspection at runtime of any routines result. | |||
2023-10-15 | Implemented vm_execute for pop routines | Aryadev Chavali | |
2023-10-15 | Made vm_pop_* routines more uniform by returning a data_t | Aryadev Chavali | |
2023-10-15 | Added vm_execute support for mov routines | Aryadev Chavali | |
Similar to push routines support. Easy to extend by adding items to the MOV_ROUTINES array. | |||
2023-10-15 | Move push routines outside of vm_execute | Aryadev Chavali | |
2023-10-15 | Added registers to virtual machine | Aryadev Chavali | |
Registers for bytes, words and floats with routines to set them. | |||
2023-10-15 | Make push opcodes a specific bit set and add a NOOP opcode | Aryadev Chavali | |
By default, a zero initialised set of instructions are NOOPs, which is great. Last two bits of a push opcode is always 01. Rest of the bits are used to distinguish between differing types of push. This makes it easier to inspect on the byte level what type of opcode we have. | |||
2023-10-15 | Split off instruction structure to its own file | Aryadev Chavali | |
2023-10-15 | Added an instruction setup | Aryadev Chavali | |
op_t provides opcodes, inst_t provides a wrapper with operands. vm_t carries around a pointer to a set of instructions, and vm_execute attempts to execute that one. I do some weird stuff here, and it's definitely not complete. | |||
2023-10-15 | stack.size -> stack.max | Aryadev Chavali | |
2023-10-15 | Main now loads a stack allocated byte array for VM stack | Aryadev Chavali | |
2023-10-15 | Added a routine to load a pointer as stack memory | Aryadev Chavali | |
2023-10-15 | Changed stack data to be a pointer | Aryadev Chavali | |
I wouldn't really want this to be malloc'd per se, you could make a byte array on the stack then pass it into the VM? | |||
2023-10-15 | Split off general types and structures into separate header | Aryadev Chavali | |
2023-10-15 | Changed stack.pointer->stack.ptr | Aryadev Chavali | |
2023-10-15 | Added floats (64 bit floating point) push and pop routines | Aryadev Chavali | |
Not machine independent, uses the underlying memcpy routine. | |||
2023-10-15 | Force big endian when pushing words | Aryadev Chavali | |
This ensures that if one wanted to pop a word byte by byte, they'd go from least to most significance. Machine independent so that's nice. | |||
2023-10-15 | Add macro for size of a word | Aryadev Chavali | |
Smaller number of changes necessary to change types. | |||
2023-10-15 | Added macro constructors for union types | Aryadev Chavali | |
2023-10-15 | Implemented functions to pop a byte and a word | Aryadev Chavali | |
2023-10-15 | Implemented a union type to make vm_push_* routines uniform | Aryadev Chavali | |
Function dispatch | |||
2023-10-15 | Added functions to push a byte and a word | Aryadev Chavali | |
Maybe I should make a union for the type, so I can dispatch via function pointers? | |||
2023-10-15 | Defined a simple virtual machine data structure | Aryadev Chavali | |
Currently just contains a "stack". | |||
2023-10-15 | Added some type aliases | Aryadev Chavali | |
Nicer to refer to a byte as "byte" rather than "uint8_t" | |||
2023-10-15 | First commit! | Aryadev Chavali | |
This is a from the ground rework of an old project of the same name. I'm hoping to be more concerned with runtime efficiency, bytecode size and all those things that should actually matter for something that may host time/space critical code. |