Commit Graph

1639 Commits

Author SHA1 Message Date
Virgil Dupras
fd69195799 doc: take dictionary out of blkfs 2020-08-16 08:22:41 -04:00
Virgil Dupras
d03d93668f doc: take implementation notes out of blkfs 2020-08-16 08:08:23 -04:00
Virgil Dupras
5c4bbaabf4 doc: move usage documention out of the system 2020-08-15 19:40:36 -04:00
Virgil Dupras
a3a83ae49b doc: improve primer 2020-08-15 18:57:03 -04:00
Virgil Dupras
31a58d00f1 z80: fix tricky memory initialization issue
Among random "better safe than sorry" changes, the real fix is in
changing "4" for "5" above _find declaration. This off-by-one error
had that word, which is the root word in z80, have a 0x01 prev field
instead of a 0x00 one.

When all memory was initialized to zero, it didn't matter, we ended
up hitting 0 prev and considered ourselves properly at the end of
dict.

When memory wasn't initialized, however, we would end up jumping at
all kinds of places, leading to random behavior.
2020-08-15 16:37:58 -04:00
Virgil Dupras
ba8a9c2647 cvm: initialize memory with random garbage
This should help spot bugs due to bad initialization.
2020-08-15 14:24:02 -04:00
Virgil Dupras
ddb934813e sio: new driver 2020-08-15 09:44:19 -04:00
Virgil Dupras
7ace3032ef zasm: complete mnemonic argspecs harmonization 2020-08-15 08:11:48 -04:00
Virgil Dupras
a9ed8da0b2 acia: simplify driver
The previous approach of maintaining R> and W> pointers was
conceptually simple, but made INT handler code actually quite
complex.

Now, we maintain indexes instead. It's much easier to perform
bounds checks and to compare for equality, something we have to
do quick in the INT handler.
2020-08-14 22:58:05 -04:00
Virgil Dupras
73623fff53 zasm: rename LDdd(n) to LDd(n)
it seems I left my asm argument harmonization half done here.

Instructions list at B208 doesn't correspond to many actual
mnemonics. This mnemonic here was the worst offender.
2020-08-14 21:45:25 -04:00
Virgil Dupras
ffcd93699e doc: out-of-system documentation
I've changed my mind about having documentation in-system. It doesn't
serve much of a purpose and make blkfs significantly heavier.

This commit is the first step in writing a documentation outside of
the blkfs.
2020-08-10 10:02:10 -04:00
Virgil Dupras
c4db9d4420 8086: implement stack overflow error condition
Also, remove RSP underflow check from next for the same reason as
in the previous commit in z80.
2020-08-08 10:18:43 -04:00
Virgil Dupras
5adbf88591 z80: move lbluflw code around
with uflw checks not being in next anymore, we can save ourselves
a forward jump.
2020-08-08 08:19:31 -04:00
Virgil Dupras
d1de99d8c9 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
word.
2020-08-08 08:08:05 -04:00
Virgil Dupras
78d4d15fcf cvm: implement stack overflow error condition 2020-08-07 21:57:25 -04:00
Virgil Dupras
25f4312523 cvm: improve comments
They were a bit terse.
2020-08-07 21:03:28 -04:00
Virgil Dupras
fc7971d64f tools: improve stty-related advices in README 2020-08-02 16:21:31 -04:00
Virgil Dupras
4632b3c157 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.
2020-08-02 16:11:19 -04:00
Virgil Dupras
939a1da9e6 recipes/arduinouno/at28: add companion at28dump program 2020-07-28 16:29:10 -04:00
Virgil Dupras
b8e52707e9 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.
2020-07-28 15:23:10 -04:00
Dustin Rawlings
bc1cc591ce Replace "-ansi" with "-std=c89" in emul/Makefile
"-ansi" is not supported by tcc, but according to gcc
documentation, "-std=c89" produces identical behavior.

See: https://gcc.gnu.org/onlinedocs/gcc-3.4.2/gcc/Standards.html
2020-07-23 20:10:30 -04:00
Virgil Dupras
3607eefa55 Add arduinouno/at28 recipe 2020-07-22 17:26:06 -04:00
Virgil Dupras
e4a4a9800d 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.
2020-07-06 23:31:00 -04:00
Virgil Dupras
a7dcb522c2 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.
2020-07-06 07:27:50 -04:00
Virgil Dupras
bf4ab0f1b4 z80: protect or avoid BC wherever it's used
For the IY->BC move, of course.
2020-07-05 23:12:17 -04:00
Virgil Dupras
a6e987b5f7 z80: protect BC in _find
In preparation for the IY->BC move
2020-07-05 22:43:32 -04:00
Virgil Dupras
6fab30b164 z80: inline lblfind's routine into _find word 2020-07-05 22:35:54 -04:00
Virgil Dupras
b9fb6a6226 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.
2020-07-05 22:23:40 -04:00
Virgil Dupras
3ea221d0eb 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.
2020-07-05 21:54:01 -04:00
Virgil Dupras
ebf47a2ab5 Fix broken LIT" 2020-07-05 20:50:08 -04:00
Virgil Dupras
8bb9230f49 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.
2020-07-05 17:36:31 -04:00
Virgil Dupras
293a561ab2 Fix SDC tests 2020-07-05 15:01:59 -04:00
Virgil Dupras
f2f520cacc Extract (br), (?br) and (loop)'s code out of stable ABI zone
There is now no more actual code in stable ABI, only references.
This makes refactoring of this code much easier. For example,
changing IY to BC as the IP register.
2020-07-05 14:57:18 -04:00
Virgil Dupras
daeb3b3c69 Extract (n) code from stable ABI 2020-07-05 14:16:24 -04:00
Virgil Dupras
a2f880b145 z80: remove popRS from stable ABI 2020-07-05 13:44:38 -04:00
Virgil Dupras
5705cd5c31 Extract EXIT code from stable ABI zone 2020-07-05 13:41:12 -04:00
Virgil Dupras
84202da6a6 z80: prettify 2020-07-05 13:15:26 -04:00
Virgil Dupras
4a91ee5c9c Extract (s) code from stable ABI zone
Only its jump addr remains.
2020-07-05 08:54:22 -04:00
Virgil Dupras
b626944273 z80: move back R* words to native words section
This allows us to refer to pushRS/popRS routines by labels, allowing
us to get rid of the pushRS reference in the stable ABI zone.
2020-07-05 08:15:50 -04:00
Virgil Dupras
650481f849 z80/8086: extract 2>R code from stable ABI zone
Only its jump at 0x33 remains.

I've also fixed a strange offset oddity in 8086's (n) placement.
It was off by 2, but strangely, it ran properly. Anyway, now it's
fixed.
2020-07-05 08:03:15 -04:00
Virgil Dupras
94cb76520a Refer to stable wordref by direct offset in "hot zone" immediates
Previously, it was impossible to cross-compile Collapse OS from a
binary-offsetted Collapse OS because stable ABI wordrefs would have
a wrongly offsetted address.

This solves the problem by replacing those wordrefs by direct,
hardcoded stable ABI offset references.
2020-07-05 07:09:11 -04:00
Virgil Dupras
2111f694f6 VE: 'g' becomes 'G' and 'g' selects line 2020-07-04 07:40:12 -04:00
Virgil Dupras
c2b507eaff tools: improve usability on OpenBSD
So far, I hadn't managed to run those tools properly on OpenBSD. I
was too confused by its stty peculiarities. I'm still confused, but
at least I managed to make them work... most of the time...
2020-07-02 11:36:53 -04:00
Virgil Dupras
a8302920cb tools/memdump: expect proper prompt 2020-06-30 11:06:59 -04:00
Virgil Dupras
fff893452d cvm: remove makefile duplicate recipe 2020-06-30 10:29:06 -04:00
Virgil Dupras
d97012ecae Fix makefile build-from-clean-repo glitches 2020-06-30 10:24:12 -04:00
Virgil Dupras
f09aa0603c rc2014: separate SPI relay and SDC drivers
My intention is to reuse the SPI relay to program AVR MCUs from a
RC2014.
2020-06-29 18:48:00 -04:00
Virgil Dupras
1ac7038863 avra: add TOC and instructions list 2020-06-29 08:01:39 -04:00
Virgil Dupras
74e211eeda Fix bugs in ed's U and VE's O/o
U didn't properly handle inserting on the last line and O's bounds
checks didn't make sense.
2020-06-28 20:34:39 -04:00
Virgil Dupras
5e01e6405a VE: add @ command 2020-06-28 20:19:42 -04:00