- VM now prompts for filename to load bytecode from
- Added new EightBall disassembler (`disass`), removed disassembly printout from compiler
- Fixes to interpreter / compiler error reporting. Should no longer report completely incorrect line numbers!
- Added new immediate mode VM instructions for load (`LDAWI`, `LDABI`, `LDRWI`, `LDRBI`), store (`STAWI`, `STABI`, `STRWI`, `STRBI`), and flow control (`JSRI`, `JMPI`, `BRCI`). Modified compiler to use these new instructions. This significantly improves code density and VM execution speed.
- Compiler: do not emit LDI 0, DISC sequence, which is a no-op.
- VM: add GPL info and progress when loading bytecode
- Most importantly: a version of Tetris coded in EightBall!
- Fixed indentation of VM code. Turned on stack checks for GCC only.
- Added new `VM_DISCARD` VM instruction (and compiler support). This makes the VM significantly more efficient.
- Configured Linux VM to be compatible with Apple II environment.
- Added line to force to interpret mode to prevent surprises.
- Compiler: fixed bug when exiting `for` loop using `return`. The compiler was leaking a word on the evalutation stack after jumping out of the body of the `for` loop.
- The compiler was not pushing the SENTINEL value to the operator stack and popping it afterwards, so the expression parsing was getting messed up. Now fixed.
- Also added targets to the Makefile to allow the emulators to be run directly (make xvic, make x64, make mame).
- Evaluating 'naked' array name `A` gives pointer to payload (same as `&A` or even `&A[0]`)
- Improved loading message in VM
- Got array pass-by-reference to work in compiler
- Fixed eval stack leak in array initialization code generated by compiler
- Improved Makefile to make it easier to configure paths to tools
- Made number of signicant characters for subroutine and variable names a `#define` constant and tested it works with different values
- Modified memory allocation in `HEAP2` - the source code is now allocated at the bottom, growing up. The compiler's linkage table is allocated at the top growing down. This makes it easy to dispose of the linkage table after compilation is done.
- This revealed that my memory limits were wrong so code was crashing on C64, Apple II. I bumped up the bottom of `HEAP2` by 0x500 or so. Not sure why this is needed.
- Added a signon banner to the virtual machine so it is clear it is loading bytecode. Screen is cleared after loading is complete, so user knows when execution begins.