8086: implement stack overflow error condition
Also, remove RSP underflow check from next for the same reason as
in the previous commit in z80.
z80: move lbluflw code around
with uflw checks not being in next anymore, we can save ourselves
a forward jump.
z80: implement stack overflow error condition
Also, remove underflow checks from next: it's taxing and useless
because underflow check already takes place in each relevant native
cvm: implement stack overflow error condition
cvm: improve comments
They were a bit terse.
tools: improve stty-related advices in README
tools/exec: exec specified file instead of hardcoding on stdin
Under OpenBSD, stdin is already used by the device itself because of
the whole "stty has no memory" situation.
recipes/arduinouno/at28: add companion at28dump program
recipes/arduinouno/at28: improve reliability
Previously, it could never write more than a few bytes before pingpong
getting a mismatch error. Now, I can pingpong Collapse OS binary
without a mismatch.
Replace "-ansi" with "-std=c89" in emul/Makefile
"-ansi" is not supported by tcc, but according to gcc
documentation, "-std=c89" produces identical behavior.
Add arduinouno/at28 recipe
z80: Use BC as IP register instead of IY
It's a bit more inconvenient in terms of register protection (BC
is much more generally useful than IY), but it makes tight spots
such as next and execute much faster, so I think it's worth it.
Make br cells 1 byte wide
The 1 byte limitation has been effective for a while now, but I
hadn't made the move yet, I wanted to see if the limitation would
cause me problems. It doesn't.
Doing this now slightly facilitates the IY->BC move in z80.
Bootstrapping: if you try to recreate the CVM binary from the
previous commit with this code, you'll have bootstrapping problems.
The first bootstrap will compile a binary with 2-bytes wide cells
but branching conditionals that yields 1-byte cells. That's bad.
I got around the issue by temporarily inserting a "397 399 LOADR"
instruction in cvm/xcomp.fs, right before the xcomp overrides. This
way, I force 1-byte cells everywhere on the first compiliation,
which then allows me to apply the logic change in cvm/vm.c and have
a properly running binary.
z80: protect or avoid BC wherever it's used
For the IY->BC move, of course.
z80: protect BC in _find
In preparation for the IY->BC move
z80: inline lblfind's routine into _find word
z80: move boot code around
Bring native words together, make the next/exec/does/compiled
cluster be at the beginning.
Next step: bring find code into _find word.
z80: inline all uses of pushRS/popRS
I'm trying to move stuff around and it simplifies things. Will make
a lot more sense to inline when BC replaces IY.
z80a: make PUSH* macros use DE instead of BC
This is in preparation of using BC instead of IY for IP. I've
verified all PUSH* usage and none was problematic.