Remind me to never write another text editor.
Added tick, forget and the utility word 'lookup'.
Added character constants, fixed an off-by-one and introduced auto-paginated terminal output.
Added a rough initial version of 'see', fixed a typo in rdrop.
Added utility word 'stack' to print the current stack. Might consider baking this functionality into the REPL in some way.
Improved 'see' a bit so that in-dictionary calls are printed by name.
Added a mechanism for interrupting runaway programs via Ctrl-C. It works by threading itself into most primitives- not exactly fail-safe, but very simple.
Added a guard against overflowing free space with the dictionary.
implemented break. Aww yeah.
Added some library routines for doing board transitions.
Added a minimalistic implementation of Snake. I accidentally created what could be an interesting twist on the game- when your tapeworm exceeds a certain length you will break away from your tail and leave it on the board as a static obstacle.
added some minor functionality that makes it possible to write Maker code as if it were a proper assembler. Y'know, like if you're some sort of crazy person.
MakoRom now incorporates a generic, reusable peephole optimizer which is fairly easy to extend with new rules. I had to make a few minor changes to Maker to accomodate this refactor, but pretty much everything was crufty stuff anyway.
tweaked Fivetran to get it working again.
aaaand now SPC should work as well. The peephole optimizer doesn't find much in Stroyent code, probably as a result of SPC doing constant prop on its own and stack locals splitting up most of the other code.
initial push of Decollage, a new reverse-engineering/debugging tool for inspecting Mako roms. I'm still working on adding functionality that will make it possible to extract tilesets from roms or replace tilesets.
Added a new debugging tool. You can optionally request the runtime to trap any LOAD or STORE operations pointing to an address that contains code- sometimes, in the case of self-modifying code, this is desired behavior. In the majority of cases, it's a simple buffer overrun clobbering your executable. After dealing with some really nasty, subtle errors of this nature, I figured better tooling is a good idea.
Slightly tweaked how Maker emits the 'exec' gadget to avoid false positives from guardCode. It really would be better to do exec without using self-modifying code, I think.
Added similar guard functionality for the stacks. The main reason the VM can't do this at all times is because user code can legitimately relocate the stacks- this is done in Threads.fs for example. Here we make the assumption that both stacks are located statically and as contiguous arrays. As with guardCode, guardStacks can produce false positives.
Whoops, I did those checks in the wrong order.