Commit Graph

49 Commits

Author SHA1 Message Date
Virgil Dupras
a0775c5dcf Add a new "Remote Shell" application
This allows a COS shell to remotely control another shell from a
serial line. It's very crude now, but the plan is to add tools much
like the POSIX tools, but for COS.
2021-01-03 14:25:25 -05:00
Virgil Dupras
a9cb5a42d4 Have RDLN spit newlines more consistently
On CRLF interfaces, newlines were mostly broken after previous
RDLN consolidation.
2021-01-02 16:46:57 -05:00
Virgil Dupras
495537b7f3 Small optimization and block compaction 2021-01-02 16:20:38 -05:00
Virgil Dupras
7dff93f2ff Make word "." a bit more compact 2021-01-02 16:04:36 -05:00
Virgil Dupras
ac3629b817 Make BLK@* and BLK!* into ialiases 2021-01-02 15:51:12 -05:00
Virgil Dupras
421ca5112f Remove one level of C< override
Two was too many.
2021-01-02 15:32:08 -05:00
Virgil Dupras
d09de0a0d3 Integrate RDLN input buffer into sysvars
In the beginning of Collapse OS' Forth version, the readline sub-
system was optional. This is why we had this separate RDLN$ routine
and that the input buffer was allocated at boot time.

It's been a while since the RDLN system has been made mandatory, but
we still paid the complexity tax of this separation. Not anymore.
2021-01-02 14:32:03 -05:00
Virgil Dupras
64f0f6716e Remove 2OVER and 2SWAP
They were unused.
2021-01-02 13:56:36 -05:00
Virgil Dupras
1cbef2f210 Add EOT ASCII const 2021-01-02 13:55:20 -05:00
Virgil Dupras
3d47c28a28 Revisit RDLN words
It's been a long while since I visited this part of the code and it
has become a bit messy after having gone through all evolutions of
the core code.

It is now simpler, more compact.
2021-01-02 13:30:32 -05:00
Virgil Dupras
527f5977d7 Add BS, CR, LF, SPC ASCII consts
Previously, these words would be ascii emitters, but seldom used
except for the SPC emitter. However, I would often end up hardcoding
these constants. With useless emitters removed and ASCII constants
added, we have a more usable system.

Also, fix broken test harness.
2021-01-02 10:26:05 -05:00
Virgil Dupras
cbf9ecfb1e Make NL, renamed to NL> a bit simpler
It doesn't require emitting words anymore. The rename to NL> is
linked to the upcoming commit.
2021-01-02 10:03:27 -05:00
Virgil Dupras
1fb062e121 Remove LF word
Also, remove extraneous uses of it. In the rdln routine, we would
spit a new line after each line input, but that NL was spurious:
we already spit the newline we receive as it is typed.
2021-01-02 09:45:08 -05:00
Virgil Dupras
ba4edbdce3 Spit SPC instead of NL between blknos in LOADR
It's a bit wasteful to spit full NLs.
2021-01-02 09:23:28 -05:00
Virgil Dupras
7fd74e2d80 Move blkfs' master index to blk 0
The textual introduction of blk 0 was there when documentation was
inside the blkfs. Now that it's outside it, it serves no purpose:
you're expected to have read the documentation already before seeing
blk 0.
2021-01-02 09:19:58 -05:00
Virgil Dupras
475caf35f4 Make KEY non-blocking
... and rename it to KEY?. Then, add KEY from KEY? for its blocking
version.

I need this for an upcoming Remote Shell feature. If a Collapse OS
system remotely controls another shell, it needs to be able to poll
both the remote system and the local keyboard at the same time. A
blocking KEY is incompatible with this.

In some places, the polling mechanism doesn't make sense, so this
new KEY? always returns a character. In some places, I just haven't
implemented the mechanism yet, so I kept the old blocking code and
added a "always 1" flag as a temporary shim.

I have probably broken something, but in emulators, Collapse OS runs
fine. It's an important reminder of what will be lost with the new
"dogfooding" approach (see recent mailing list message): without
emulators, it's much harder to to sweeping changes like this without
breaking stuff.

It's fine, I don't expect many more of these core changes to the
system. It's nearly feature-complete.
2021-01-01 08:23:59 -05:00
Virgil Dupras
18f6978399 Make FLUSH also invalidate the blk cache 2020-12-25 16:43:20 -05:00
Virgil Dupras
6f4f870dd4 VE: ensure absence of ctrl chars before insertion point
Previously, inserting at a position that had null chars before it
would result in a block that wouldn't properly display with LIST.
2020-12-24 12:18:53 -05:00
Virgil Dupras
7d29c12c25 VE: refresh IBUF and FBUF only when needed
In emulation, emitting is near-immediate. On a real machine, it's
often not-so-near-immediate. These little things help usability.

Again, this commit was meta-developed!
2020-12-23 11:37:42 -05:00
Virgil Dupras
2fa88176c0 VE: don't emit chars higher than 0x7f
Uninitialized blocks often contains garbage, and emitting it on
the TRS-80 4P results in serious visual glitches.
2020-12-22 18:34:03 -05:00
Virgil Dupras
625afba86a VE: avoid spitting control chars in "bufp"
On a TRS-80 4P, spitting control chars, in addition to being
visually distasteful, generated a bug where the blinking cursor
would disappear, making using VE much, much harder.

I had a hard time reproducing the bug: you don't trigger it by
simply spitting control chars, it had to be a specific number of
them in a specific order. I didn't identify the sequence, but I
know that "bufp" triggered it.

This commit was written on a TRS-80 4P and downloaded from my work
floppies!
2020-12-21 17:02:36 -05:00
Virgil Dupras
63d2c97386 z80 asm: document the 0x8000 limitation better
When I get bitten by it myself, it's because it's clearly
underdocumented!
2020-12-14 14:40:22 -05:00
Virgil Dupras
8c89fc147c tms9918: fix character range which was too narrow
We couldn't get a tilde!
2020-12-12 17:28:32 -05:00
Virgil Dupras
cbd9f035ae Add ~C!ERR
A ~C! override can, if it wants, go put an error code in there,
which ~AT28 does.

This way, after a copy or xcomp process directly to EEPROM, one
can verify whether all bytes were successfully written by checking
whether "~C!ERR C@" is zero.
2020-12-09 19:52:58 -05:00
Virgil Dupras
dda80801d5 Remove WORD( and PREV
They're only used once.
2020-12-09 17:46:22 -05:00
Virgil Dupras
594b3c3348 Add ~C! to override memory low level write routines
Also, turn AT28! and AT28, into ~AT28, pluggable into ~C!.

~AT28 doesn't check for mismatches. It was too complicated to turn
a mismatch into a compiled word we would jump to next. Data
integrity has to be checked through another path.

Also, remove MOVEW. Without indirect memory access, this word
doesn't make sense. Some AVR-specific words will have to be
defined.
2020-12-08 21:55:39 -05:00
Virgil Dupras
74f46c1288 z80a: add ELSE, 2020-12-07 23:06:12 -05:00
Virgil Dupras
45eceaaf61 Remove indirect memory access
I got bitten again, I've over-designed my solution. The last time
it happened, it was that memory mapping thing I was wanting to add.

The indirect memory access feature I was adding was to solve a
specific problem: Allow Collapse OS to cross-compile directly on a
AT28 EEPROM.

It began well. As long as we were staying in the assembler realm,
things were looking good. However, when we got into the xcomp realm
(B260), things became ugly, and I had to creep up indirection where
I didn't want to.

All of this because I wanted to solve my initial problem in a
slightly more generalized way. The broad idea was that these indirect
memory access could allow xcomp into a broad kind of memory-like
devices.

This idea broke on the "@" part of the equation. If I want
indirections to be two-way and allow xcomp to work properly, I have
to add this indirection to FIND (and possibly others) and this just
isn't practical or elegant.

So, I'm taking a step back and accepting that the solution I design
for now is exclusively for the AT28. What I'm thinking is to add a
low-level hook for memory writing, at the assembly level.
2020-12-07 22:34:53 -05:00
Virgil Dupras
80d1b59050 Add words |M and |L
Splitting a word into MSB/LSB pairs happens often and is worth, I
think, native words. Also, I'm going to need it in the upcoming
commits.
2020-12-07 20:11:49 -05:00
Virgil Dupras
55a7726f70 Have FILL use indirect memory access
This allows SMS xcomp to use ALLOT0 instead of ZFILL,
2020-12-07 19:17:51 -05:00
Virgil Dupras
e5a983ab7f Rename A!, A@ and A, to C!*, C@* and C,*
Also, rename "Addressed devices" to "Indirect memory access".

I do this because I need to add indirect versions of !, @ and ,
to allow boostrapping directly to EEPROM and that A,, thing I've
added to assemblers felt like really bad names.

With this change, I'd like to generalize the use of the * suffix
for aliases.
2020-12-07 19:06:58 -05:00
Virgil Dupras
c5bf0ade1b Use A! instead of C! in THEN, in z80 and 8086 assemblers 2020-12-07 12:32:32 -05:00
Virgil Dupras
06b71a6906 Add AT28, as a companion to AT28!
This word, suitable to plug to A, , increases HERE before doing its
verification to minimize waiting time: While we increase HERE, the
AT28 has the time to do its programming, and thus we'll need to idle
for less time afterwards.

Also, made the mismatch check silently ignore MSB. Previously, writing
a value larger than 0xff with AT28! would always result in a mismatch.
2020-12-07 12:28:48 -05:00
Virgil Dupras
e8cc3040d1 Improve impl's word execution documentation
Add an example, which I think helps a lot to grasp the idea.

Also, improve comments in Z80 boot code.
2020-11-28 13:15:16 -05:00
Virgil Dupras
db1d6424b3 Rename (print) to STYPE
This brings us a bit closer to TYPE from Forth 2012. I don't think
I'll add TYPE (sig "addr len") anytime soon because there is few
use cases for it, but having "STYPE" instead of "(print)" feels
cleaner.
2020-11-28 11:28:28 -05:00
Virgil Dupras
f8b7a3ce65 Rename switch to ialias
The switch name was confusing.
2020-11-28 10:58:16 -05:00
Virgil Dupras
b4f3fde062 sms: generate TMR SEGA signature in Collapse OS itself
Having the signature generation code in /tools prevents self-hosting
on the SMS.
2020-11-25 21:42:07 -05:00
Virgil Dupras
4d26f1c490 VE: try to use CELL! more
At-XY+EMIT is slow compared to direct CELL! usage. It is seen very
clearly on a SMS when VE is doing its initial clrscr (yes, I could
manage to load VE from a SD card and run it on a real SMS!).

The grid protocol wasn't there when I wrote VE initially. I only had
AT-XY. Now that we have a solid protocol to build on, let's do it.
2020-11-17 12:07:22 -05:00
Virgil Dupras
eab8ab6f60 Fix "," char in 5x7 font 2020-11-17 11:24:51 -05:00
Virgil Dupras
30da1bd75b grid: fix PSP leak on newline 2020-11-17 11:19:37 -05:00
Virgil Dupras
57fd14b0b3 sms: fix cursor mis-display in text mode
In CURSOR!, I was using a write commande to read from VRAM and the
emulator didn't properly behave and did as if everything was fine.

The result on a real SMS was that the cursor would contain the
inverted glyph of the contents of the *old* cursor position.
2020-11-16 13:10:04 -05:00
Virgil Dupras
c8be290b88 sms: add cursor indicator to text mode
I do this by adding an inverted version of all glyphs in the upper
range of the pattern memory. This is a big waste of the pattern
space (only one inverted character is needed at once), but it's the
simplest way to proceed. I'll change this if I ever need more
pattern space.

Also, remove _blank. It was wastefully blanking the whole memory.
Only the name table needs to be blanked on initialization.
2020-11-16 11:13:38 -05:00
Virgil Dupras
cf79ceefea sms: add cursor visual indicator in VDP mode 4
This required the change of CURSOR! signature: we now supply it
with both old and new cursor positions.

Also, fix broken _bs in Grid subsystem.
2020-11-16 10:05:48 -05:00
Virgil Dupras
b1e162b8a3 grid: change the meaning of CELL!
Replace the "g" arg (glyph) with "c" (character). The reason why "g"
was used was to save a "0x20 -" operation at all CELL! implementations,
but this came with too big a drawback: it made CELL! hardly usable
outside of the Grid subsystem, mostly because the user of CELL! would
often have to do "0x20 -".

For example, I want the SMS's Pad driver to use CELL! directly instead
of having to do EMIT+XYPOS-messing-around. I would have had to do a
"0x20 -" there.
2020-11-16 09:11:47 -05:00
Virgil Dupras
7bfec5d9e9 grid: Add CURSOR! to the grid protocol
With the move of CVM's forth to the grid protocol, we've lost the
cursor's visual indication. Now, we have it back.

The challenge now is in implementing it in SMS' text mode. In mode
4, it's easy to mark a cell as inverted, but in text mode, that's
not possible.
2020-11-16 08:41:09 -05:00
Virgil Dupras
d3049b2404 grid: add XYMODE
In VE on the SMS, the first contents line would always be cleared
because of NEWLN being called when the FBUF would spit its last
char. Inconvenient...

I've added a "graphical" mode to the grid subsystem to inhibit this
behavior in a graphical situation such as in VE.

Also, write a more complete Grid documentation.
2020-11-14 22:35:08 -05:00
Virgil Dupras
7722db0762 Fix mis-documentation in 8086 boot code comments 2020-11-14 20:28:44 -05:00
Virgil Dupras
c939c7e84a cvm: use Grid in /cvm/forth
Also, fixed broken AT-XY in Grid...
2020-11-14 20:08:18 -05:00
Virgil Dupras
95ab1ad588 Transform "blk/" folders into "blk.fs" text files
Working in "blk/" folder from a modern system is harder than it
should be. Moving blocks around is a bit awkward, grepping is a
bit less convenient than it could be, git blame has troubles
following, etc.

In this commit, we modify blkpack and blkunpack to work with single
text files with blocks being separated by a special markup.

I think this will make the code significantly more convenient to
work into.
2020-11-14 18:34:15 -05:00