- Implemented initial version of extended memory support, which allows the EightBall source code to be stored in aux RAM (extended 80 column card). Once an apparent bug in the cc65 extended memory driver is fixed then bytecode will also be stored in aux RAM.
- Moved non-performance critical portions of interpreter / compiler to Apple II language card memory, which frees up more main memory.
- Improvements to display of free memory (`free` command)
- 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.
- New keyword `const`
- `const` values are supported as array dimensions and variable.array initializers
- Refactored code and saved several 100 bytes
- Compiler generates better VM code for array allocation
- Arrays can now be initialized with a list like this: `word aa[4]={1,2,3,4}` ...
- ... or a string literal like this: `byte qw[100]="This is a test"`
- Works in interpreter or compiled.
- 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).