aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2023-11-03Used more subroutines in fib.asm to make code clearerAryadev Chavali
Looks way more high level but parses down to a very simple bytecode. However, because of lack of inline code processing, it relies on the call stack quite heavily. With inline labels this would be a much more compact bytecode.
2023-11-03Use label features and entry points for examplesAryadev Chavali
2023-11-03Added note in TODO.orgAryadev Chavali
Implementing start points has made features necessary for a standard library setup easier to see.
2023-11-03Completed start points TODOAryadev Chavali
2023-11-03Fixed bug where labels were off by oneAryadev Chavali
Was used in a previous fix but not necessary anymore
2023-11-03Fixed bug where runtime would not start program at the right placeAryadev Chavali
In vm_execute_all set the program pointer to the start address in the header of the program payload.
2023-11-03Added memory-print.asm to examples list in MakefileAryadev Chavali
2023-11-03Refactor assembler to use prog_t structureAryadev Chavali
Set the program structure correctly with a header using the parsed global instruction.
2023-11-03Refactor vm/main to use refactor to program structureAryadev Chavali
2023-11-03Use program structure for runtimeAryadev Chavali
Very barebones, essentially a simple refactor. I need to introduce a feature to append to a program as well, but as it's a flexible structure it will likely have to be functional.
2023-11-03Defined a `program` structureAryadev Chavali
Essentially a "program header", followed by a count, followed by instructions. Provides a stronger format for bytecode files and allows for better bounds checking on instructions.
2023-11-03Added a start address (equivalent to `main`) to assemblerAryadev Chavali
Creates a jump address to the label delegated by "global" so program starts at that point.
2023-11-03Added todo for making a standard libraryAryadev Chavali
Some considerations as to how to do this (dynamic or static linking) and changes needed in VM/assembler for this to work.
2023-11-03Added todo to make a "main routine" specification in assemblerAryadev Chavali
2023-11-03Mark off completed tasks in todo.orgAryadev Chavali
2023-11-03Started work on spec for data storage types in VMAryadev Chavali
2023-11-03Added TODO and WIP tags for specAryadev Chavali
2023-11-03Made test.asm an example asm programAryadev Chavali
2023-11-02Added comments to test.asmAryadev Chavali
2023-11-02Update spec footnotesAryadev Chavali
2023-11-02Updated LOC in READMEAryadev Chavali
2023-11-02Started working on a spec, still needs a lot of workAryadev Chavali
2023-11-02Added recipes to assemble or interpret individuallyAryadev Chavali
2023-11-02Implemented a routine which prints out a buffer of characters and use itAryadev Chavali
All in my assembly/virtual machine!
2023-11-02Better logs for assemblerAryadev Chavali
2023-11-02Implemented CALL(_STACK) and RET on the assemblerAryadev Chavali
2023-11-02Made lexer more error prone so parser is lessAryadev Chavali
Lexer now will straight away attempt to eat up any type or later portions of an opcode rather than leaving everything but the root. This means checking for type in the parser is a direct check against the name rather than prefixed with a dot. Checks are a bit more strong to cause more tokens to go straight to symbol rather than getting checked after one routine in at on the parser side.
2023-11-02Fixed bug where deleting a page meant not being able to allocate anotherAryadev Chavali
This was due to the beg or end page being not set correctly (dangling pointer).
2023-11-02Added memory leak dialog in vm_stopAryadev Chavali
Stack, call stack and heap are evaluated to check for leaks.
2023-11-02Implemented subroutine instructions in runtimeAryadev Chavali
Very easy overall, printing the call stack not so much.
2023-11-02Introduced instructions to engage with a call stackAryadev Chavali
Essentially you may "call" an absolute program address, which pushes the current address onto the call stack. CALL_STACK does the same thing but the absolute program address is taken from the data stack. RET pops an address off the call stack then jumps to that address.
2023-11-02Made separate tokens for JUMP_ABS and JUMP_STACKAryadev Chavali
Makes more sense, don't need to fiddle around with strings as much in the parser due to this!
2023-11-02Updated instruction-test example for removal of jump.registerAryadev Chavali
2023-11-02Removed instruction OP_JUMP_REGISTERAryadev Chavali
Not necessary when you can just push the relevant word onto the stack then just do OP_JUMP_STACK.
2023-11-02Small fixesAryadev Chavali
2023-11-02Created a preprocessing unit presult_t and a function to process themAryadev Chavali
Essentially a presult_t contains one of these: 1) A label construction, which stores the label symbol into `label` (PRES_LABEL) 2) An instruction that calls upon a label, storing the instruction in `instruction` and the label name in `label` (PRES_LABEL_ADDRESS) 3) An instruction that uses a relative address offset, storing the instruction in `instruction` and the offset wanted into `relative_address` (PRES_RELATIVE_ADDRESS) 4) An instruction that requires no further processing, storing the instruction into `instruction` (PRES_COMPLETE_INSTRUCTION) In the processing stage, we resolve all calls by iterating one by one and maintaining an absolute instruction address. Pretty nice, lots more machinery involved in parsing now.
2023-11-02Started work on preprocessing jump addressesAryadev Chavali
2023-11-02Added a TODO file for tasksAryadev Chavali
2023-11-01A small program I am currently working on: reverses an allocated buffer of ↵Aryadev Chavali
bytes, returning a new set
2023-11-01Added MALLOC_STACK and SUB to instruction-test exampleAryadev Chavali
2023-11-01Implemented MALLOC_STACK and SUB in the assemblerAryadev Chavali
2023-11-01Implemented OP_MALLOC_STACK and OP_SUB in the runtimeAryadev Chavali
2023-11-01Added instructions for MALLOC_STACK and SUBAryadev Chavali
MALLOC_STACK is a stack based version of MALLOC, SUB does subtraction.
2023-11-01Fixed issue where sometimes vm_print_registers wouldn't work for bytesAryadev Chavali
Happened because we weren't printing all relevant words due to naturally flooring the result of division. Here I ceil the division to ensure we get the maximal number of words necessary.
2023-11-01Updated instruction-test example file for new memory management instructionsAryadev Chavali
2023-11-01Implemented stack versions of MGET and MSET in assemblerAryadev Chavali
2023-11-01Added todos to rename the constructive macros in runtime.cAryadev 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-01Added stack based versions of MSET and MGETAryadev Chavali
Essentially they use the stack for their one and only operand. This allows user level control, in particular it allows for loops to work correctly while using these operands.
2023-11-01Implemented OP_MSIZE into lexer/parser of ASMAryadev Chavali