Commit Graph

1699 Commits

Author SHA1 Message Date
Virgil Dupras dcfe4292e1
HTTP instead of HTTPS 2021-10-05 17:29:43 -04:00
Virgil Dupras 4da8b68623 Last git commit 2021-01-05 11:34:27 -05:00
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 0f83451193 trs80: Improve RS-232 driver
I could drive my RC2014 from my TRS-80 4P (using the Remote Shell
coming in the next commit)! A challenge I faced was that the RC2014
spits characters too fast and the CTS line of its ACIA modules
(both the 6850 and SIO/2 ones) are hard-wired to ground, making
flow control difficult. I solved this, for now, by lowering comm
speed.

This driver improvement makes CL<? faster and makes baud rate
configurable in CL$.
2021-01-03 13:56:53 -05:00
Virgil Dupras 772c0c4fe4 doc/asm: add note about ad-hoc assembly frequent mistakes 2021-01-03 13:55:28 -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 1a48ff047f trs80: make (key?) non-blocking 2021-01-02 09:15:33 -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 e3d4afa0c2 Update stage.bin
I forgot to do so when I updated FLUSH.
2020-12-29 21:45:07 -05:00
Virgil Dupras 3581beace0 rc2014: de-buffer MC6850 and SIO drivers
The buffer's implementation wasn't buying us much in exchange for its
complexity. A modern machine was still too fast for it (copy/pasting
text from a modern machine would send bytes too fast for the RC2014)
and in the (theoretical so far) case of COS-to-COS communication, the
buffer didn't help in cases where the baud rate was faster than the
processing of each byte received (for example, if the byte was written
directly to EEPROM).

I'm scrapping it and, instead, use the RTS flag to signal the other
side when we're ready to receive a new byte.

Also, implement driver for channel B in SIO. I will need it to talk
to my TRS-80 4P.
2020-12-29 21:36:19 -05:00
Virgil Dupras 5ca99ad410 trs80: implement a standalone RS-232 driver
No more relying on the TRS-DOS driver!
2020-12-25 16:54:02 -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 20c38e5cd0 trs80: implement Grid shim in video driver
Loading the grid subsystem on top of the TRS-80 driver, which is
an interface to its ROM BIOS, would be counter-productive because
the BIOS already has the concept of cursor.

However, VE needs the Grid interface, so we implement a shim for it.

Again, all this work (and the re-assembly that it entails) has been
done from within Collapse OS on the TRS-80!
2020-12-22 18:24:30 -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 8992cdbbf6 tools: add "blkdown" tool
When developing from a Collapse OS environment, it's necessary to
be able to download blocks from it.
2020-12-21 17:02:36 -05:00
Virgil Dupras 45fbce4eb9 tools/blkunpack: add "upto" argument 2020-12-21 17:02:36 -05:00
Virgil Dupras efa2556c82 tools/blkup: add shortcut for zero blocks 2020-12-17 20:19:12 -05:00
Virgil Dupras da72d7bbe1 doc: add TRS-80 4P keyboard cheat sheet 2020-12-17 15:32:13 -05:00
Virgil Dupras 40b41d296c tools/upload: send data as string hex to avoid control characters
So far, I've been using this tool on remotes that had no control
character handling, but it doesn't work on a TRS-80 4P remote.

Much slower, but at least it works.

Later, I'll try to put some order in this so that we use the fast
lane when possible.
2020-12-16 16:52:54 -05:00
Virgil Dupras f0087cd48e Revert "tools: make upload a bit faster"
This optimisation appears to make the upload process unreliable in
some cases. I can't appear to reliably upload to my TRS-80 with this
version. I prefer reliability than speed...
2020-12-16 12:44:29 -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 35dca04ec9 doc/sms/at28: add note about CE-inhibit jumper 2020-12-12 10:47:30 -05:00
Virgil Dupras 7dae33ce36 rc2014: add SIO xcomp unit 2020-12-12 10:08:16 -05:00
Virgil Dupras 2571d20c4c tools: make upload a bit faster 2020-12-12 10:06:55 -05:00
Virgil Dupras 94f5b9d141 doc: add notes about cross-compiling directly to EEPROM
I've tested that it works in emulation. The only test left is the
real deal my a Sega Master System.
2020-12-11 21:52:46 -05:00
Virgil Dupras 374a0a8e46 doc: update AT28 instructions for new ~AT28 routine 2020-12-09 20:44:04 -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 953e040231 emul/z80: add AT28 EEPROM emulator
This will facilitate the development of a solution for
cross-compiling directly to EEPROM.
2020-12-08 20:07:53 -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