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
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
Virgil Dupras
5a2612a9c5
Add HERESTART xcomp config
2020-06-28 19:45:28 -04:00
Virgil Dupras
3068b58be5
Rename RAMSTART to SYSVARS
...
It's more descriptive this way. Also, I'll soon add a new HERESTART
config.
2020-06-28 18:49:30 -04:00
Virgil Dupras
9424770caa
rc2014: add a declaration part to ACIA drivers
...
Driver configuration don't need their own words at runtime, we only
need to compile them as literals when compiling words.
Now that we have this "declaration blocks" pattern emerging, it
seems like a good idea to take advantage of this in drivers, both
for simplifying the xcomp unit and to make final binary slimmer.
2020-06-28 17:30:01 -04:00
Virgil Dupras
b8800be76f
rc2014: improve SD card driver docs
2020-06-28 16:34:41 -04:00
Virgil Dupras
27025bf141
Slight adjustments to bootstrap docs
2020-06-28 07:42:20 -04:00
Virgil Dupras
5052efb60f
VE: supress ed's output on E and X
...
Most of the time, this output would be hidden by the next screen
update, except when editing the last line.
2020-06-28 07:04:08 -04:00
Virgil Dupras
101193a78c
avra: begin writing docs
2020-06-28 06:57:59 -04:00
Virgil Dupras
440ea43a88
z80a: make mnemonic names more uniform across assemblers
...
Initially, I used the same letters as those used in the z80 ref
docs, but it makes the different assemblers harder to use than they
should. Having consistent "argtype" rules across assemblers should
help.
2020-06-27 22:01:56 -04:00
Virgil Dupras
1312817117
z80: make boot binary a 2-part process
...
Previously, recipes that began spitting binary contents before
loading block 282 would end up with VARIABLE code in their binary,
thus breaking them. We fix this by making this loading process
2-part.
2020-06-26 21:41:17 -04:00
Virgil Dupras
891e4f861a
z80: fix chkPS's "stable ABI" form in binaries with offset
...
Before lblnext is set, we need to use BJP, instead of JPnn, for the
jump to work in binaries with offsets.
2020-06-26 21:24:12 -04:00
Virgil Dupras
7eeec67ff5
Add extra words WIPED? and FREEBLKS?
2020-06-23 07:21:33 -04:00
Virgil Dupras
9ab5cda397
ed: rename I to i
...
Shadowing core "I" is too messy. As soon as ed is loaded in memory,
nothing else that isn't "i-aware" can be loaded anymore.
I guess that's why "contexts" exist in Starting Forth, but adding
this concept just for allowing the shadowing of core words seems
overkill to me. Renaming I to i in ed seems better.
2020-06-23 07:08:21 -04:00
Virgil Dupras
af339d8c6a
VE: properly make buffer dirty on E and X
2020-06-23 06:53:30 -04:00
Virgil Dupras
2d9a07d215
blkunpack: don't include trailing empty lines
...
This was becoming heavy to manage.
2020-06-23 06:52:34 -04:00
Virgil Dupras
94ed01086a
pcat: move drivers and xcomp to blkfs
2020-06-22 14:21:25 -04:00
Virgil Dupras
1bea45acb8
8086a: add PUSHs, and POPs,
2020-06-22 13:54:33 -04:00
Virgil Dupras
d7f002df98
pcat: use boot drive no passed to bootloader through DL
...
instead of hardcoded drive 0.
2020-06-21 22:53:11 -04:00
Virgil Dupras
dc7f36263a
pcat: BLK-enabled!
...
That INT 13H logic was a bit tricky to implement...
read-only for now.
2020-06-21 22:07:12 -04:00
Virgil Dupras
8d645405b3
pcat: add RSP checks in next
2020-06-21 15:14:38 -04:00
Virgil Dupras
f9eb7c661b
8086asm: fix CMPrr, and CMPxx, argument order
2020-06-21 14:55:14 -04:00
Virgil Dupras
cd514e6cd6
pcat: add PSP checks in all native words
...
Also, fix (roll) which wasn't properly implemented.
2020-06-21 14:07:02 -04:00
Virgil Dupras
c2c32bbed8
pcat: properly handle IMMED flag in _find
2020-06-21 13:09:51 -04:00
Virgil Dupras
1b5333d0b4
pcat: move all find code in _find word
...
It isn't used by low level boot code anymore, so it can go there.
2020-06-21 11:57:12 -04:00
Virgil Dupras
dbd283758c
Refer to BOOT and (uflw) by addr in stable ABI
...
Was previously referred to by name+find, which was wasteful.
2020-06-21 11:41:10 -04:00
Virgil Dupras
dcaa515929
pcat: implement does
2020-06-21 10:40:09 -04:00
link2xt
d83d12899b
MOVE: do not crash when u is 0 ( #126 )
...
This commit adds ?DUP IF guards to MOVE and MOVE- that make them exit
when u is 0. Without these guards a DO loop was executed 65535 times
instead of 0.
In particular, this fixes a crash when "105 LOAD I " is executed
immediately after boot. Block editor word "I" passes IBUF length (0)
to MOVE- and MOVE in this case, causing a crash.
2020-06-21 05:49:45 -05:00
Virgil Dupras
99c05fff3c
pcat: it works!
...
Forth intepreter now works! There's still DOES> and overflow checks
to implement, but otherwise, we have it!
2020-06-20 20:06:42 -04:00
Virgil Dupras
ae719508d9
pcat: make /MOD division 16-bit
...
Was required for the many "256 /MOD" in the code.
2020-06-20 19:14:51 -04:00
Virgil Dupras
60ecab314e
pcat: we have PROMPT!
...
Not working, but we do get that sweet "CollapseOS".
2020-06-20 16:58:48 -04:00
Virgil Dupras
397ee3e3e6
Simplify word '
2020-06-20 14:13:41 -04:00
Virgil Dupras
1536434666
pcat: implement cell execution and shaping things up
2020-06-20 13:50:01 -04:00
Virgil Dupras
acf8e03f53
8086asm: add overflow check to RPCs,
...
I've spent way too much time debugging bugs caused by this...
*sigh*, why can't I learn?
2020-06-20 13:36:21 -04:00
Virgil Dupras
019fd8a67d
pcat: fix ?DUP
2020-06-20 07:34:46 -04:00
Virgil Dupras
9d2afd200c
pcat: implement (s)
2020-06-19 20:09:51 -04:00
Virgil Dupras
723d3c4249
pcat: all native words implemented!
...
(well, not PC@ and PC!, but I'm not even sure what would be the role
of these in a PC/AT. they're only used in drivers on the z80 front,
so they will not be immediately needed. todo... )
Now comes the fitting part.
2020-06-19 08:10:51 -04:00
Virgil Dupras
8cc8df0446
pcat: add native _find
2020-06-19 07:56:54 -04:00
Virgil Dupras
5ebdf84e78
pcat: more native words
...
almost there!
2020-06-19 07:26:33 -04:00
Virgil Dupras
89bc7df120
pcat: more native words
2020-06-18 23:10:14 -04:00
Virgil Dupras
3b21ba635d
pcat: add PICK and (roll)
2020-06-18 21:21:46 -04:00
Virgil Dupras
6b07296d30
pcat: more native words
2020-06-18 19:06:53 -04:00
Virgil Dupras
bd508daad9
pcat: begin organizing native words properly
...
This port is taking shape!
2020-06-18 15:28:30 -04:00
Virgil Dupras
6bc1738bfd
pcat: implement (loop)
...
8086 asm is a lot terser than z80... Those indirect memory operations
are very handy.
2020-06-18 15:01:04 -04:00
Virgil Dupras
aca9bc9058
z80: small optimization in cell execution
2020-06-18 08:02:45 -04:00
Virgil Dupras
035532acf7
z80: remove remaining indirections in execute calls
...
We now have a stable ABI that is pretty cleared up...
2020-06-18 07:50:20 -04:00
Virgil Dupras
42818d25be
z80: remove layers of indirection of find calls
2020-06-18 07:40:20 -04:00
Virgil Dupras
76e698157c
z80: remove layer of indirection in most "next" calls
...
The only calls still using the stable ABI indirection are those
made before the next routine is created.
2020-06-18 07:24:47 -04:00
Virgil Dupras
eba83fa9a9
z80: use named labels for boot routines
...
The usage of numerotated labels for this was becoming severly
confusing.
2020-06-18 07:16:40 -04:00
Virgil Dupras
eed817b517
pcat: adapt to word type change
2020-06-18 06:50:32 -04:00
Virgil Dupras
3d2dc041fb
Make word routines into word types
...
Instead of having wordref point to core word routines, I made them
into word 4 word types. It liberates space into the stable ABI and
should make porting to other arches easier.
I'm also thinking of combining word type with the namelen field
for precious bytes saving, but not now...
2020-06-17 21:41:01 -04:00
Virgil Dupras
3383a00040
Fix recipes with binary offset (ti84, trs80)
...
I broke them when I removed call indirection layers without also
removing usage of BCALL.
2020-06-17 17:44:33 -04:00
Virgil Dupras
1d468d2168
Fix mis-documentation about literal words
2020-06-17 16:31:08 -04:00
Virgil Dupras
2be2f74a43
Make literal word routines into regular native words
2020-06-17 14:25:32 -04:00
Virgil Dupras
ea9833d4ff
Remove LITA
...
It was useful when we still had the relinker, but now it has no use.
I was waiting a bit to see if the distinction would be useful again,
but it seems like it won't.
2020-06-17 13:50:42 -04:00
Virgil Dupras
abb4dc8bd7
Reduce the scope of the stable ABI
...
Only 2>R in actually needed in the RSP family (for LOOP). Reducing
the scope of the stable ABI makes porting to other arches easier.
2020-06-17 07:54:43 -04:00
Virgil Dupras
bc8144b4be
pcat: implement (br) and (br?)
2020-06-16 22:10:32 -04:00
Virgil Dupras
49979404a5
pcat: implement number literals
2020-06-16 21:34:35 -04:00
Virgil Dupras
a92864a595
pcat: implement RSP mechanism in execution model
2020-06-16 20:41:53 -04:00
link2xt
472331b450
Check spelling ( #121 )
2020-06-16 18:57:31 -05:00
link2xt
6a09910dfc
BROWSE: ignore invalid digits ( #123 )
...
Documentation in block 100 says a number followed by a space or return
lists the contents of the block. However, typing any other character
does this too, because _pdacc returns -1 in this case.
This is annoying because typing "n" instead of "N" immediately after
jumping to some block was bringing you to block 0. Now "n" is ignored
instead.
This commit changes the condition for printing to explicitly check for
the value of 1, which means whitespace according to _pdacc documentation
in block 355.
2020-06-16 18:55:26 -05:00
link2xt
f1a225ef3d
Fix unreadable sentence in block 031. ( #122 )
...
This clearly has some words missing.
2020-06-16 18:28:06 -05:00
Virgil Dupras
16d6a0b377
pcat: begin implementing compiledWord/next
2020-06-16 19:05:36 -04:00
Virgil Dupras
feeedcc55c
z80: small optimization in execute
...
I had more ambitious goals, but I backed out of it: not worth it.
This small optimization is an easy picking though.
2020-06-16 16:37:21 -04:00
Virgil Dupras
dabbd6c253
8086asm: add support for modrm 8-bit displacement
2020-06-15 06:52:47 -04:00
Virgil Dupras
d8d2e05eb2
pcat: make find compare strings
...
find is the biggest chunk of logic of the boot code. The 8086 version
is significantly terser than the z80 one. REP/CMPS helps...
2020-06-15 06:23:19 -04:00
Virgil Dupras
8c452f5add
pcat: begin implementing find
...
Not comparing strings yet. Without asm tooling support, it's a big
chunk to swallow at once. It's progressing well!
2020-06-14 21:52:58 -04:00
Virgil Dupras
3be30e24bb
pcat: implement execute and nativeWord
2020-06-14 15:27:26 -04:00
Virgil Dupras
bf0e999f8e
pcat: read LATEST and jump to it
2020-06-14 14:51:32 -04:00
Virgil Dupras
a72322df31
pcat: begin structuring around words
2020-06-14 14:15:44 -04:00
Virgil Dupras
85a0b87da3
z80: reorder compiledWord and doesWord, saving ourselves a jump
2020-06-14 10:12:56 -04:00
Virgil Dupras
38d5a9f303
z80: inline cellWord in stable ABI
2020-06-14 10:07:46 -04:00
Virgil Dupras
40f92b9bab
z80: optimize chkPS
...
Inline it in next and make chkPS, call a newly reserved label for
it directly, removing a layer of indirection. This frees a spot in
the stable ABI.
2020-06-14 09:48:10 -04:00
Virgil Dupras
31095bc04d
z80: remove call indirections in tight spots
2020-06-14 09:29:34 -04:00
Virgil Dupras
2b7abf802f
pcat: begin porting forth
...
I'm not sure yet where I'm going, but I'm not going to build the
8086 port from the ground up like I did with the z80, that is,
making is sustain itself and eventually merge its forth code with
core words. That would be too much work which would then be thrown
out (all those words I'll initially have to implement in asm which
are already implemented in Forth).
What I *think* I can do is build a mirror version of z80 boot code
and cross-compile it from the z80. This means it has to follow z80
stable ABI.
Nope, I'm not sure where I'm going...
2020-06-13 21:37:54 -04:00
Virgil Dupras
1a467efae1
pcat: use a far jump to boot into the OS
...
Unless I misunderstood, this is supposed to set CS. This would make
all SREG have the same value. This allows us to remove BIN( offset
from os.bin.
I've tried booting to offset 0, but it didn't seem to work. Let's
settle for 0x8000. 512kb of system RAM is way more than we need
anyways.
2020-06-13 20:06:51 -04:00
Virgil Dupras
507c2c12e7
8086asm: clarify operands and fix stupidities
2020-06-13 17:58:42 -04:00
Virgil Dupras
5033f17be2
8086asm: tidy up a bit
2020-06-13 16:21:56 -04:00
Virgil Dupras
07e50313c7
pcat: separate MBR code and OS code
...
MBR code now strictly loads OS code into memory and jumps into it.
Now, I've got to consolidate my assembler code, modrm logic is
messed up.
2020-06-13 15:35:16 -04:00
Virgil Dupras
e17f2e6907
pcat: read sector from floppy
2020-06-13 13:29:04 -04:00
Virgil Dupras
b037c86598
recipes/pcat: now tested on real hardware!
2020-06-13 11:47:32 -04:00
Virgil Dupras
66b27b0790
8086asm: properly initialize DS and DF
2020-06-12 19:07:23 -04:00
Virgil Dupras
177750c928
recipes/pcat: first steps into 8086!
2020-06-12 14:03:31 -04:00
Virgil Dupras
4e18fafe46
8086asm: now enough tooling to assemble a PC/AT Hello World boot
2020-06-12 13:12:41 -04:00
Virgil Dupras
210b833c71
8086asm: begin adding MODRM-enabled ops
2020-06-12 12:07:48 -04:00
Virgil Dupras
749fdf1b18
8086asm: add 8-bit JMP, MOVrI, INT,
...
Verified against nasm with equivalent code.
2020-06-12 11:29:00 -04:00
Virgil Dupras
405444d630
8086asm: first steps
2020-06-12 10:49:27 -04:00
Virgil Dupras
1871c46614
VE: add backspace support in replace mode
2020-06-11 22:29:05 -04:00
Virgil Dupras
dc368597a6
VE: Add dirtiness indicator in status bar
...
Written from VE!
2020-06-11 21:52:08 -04:00
Virgil Dupras
838c88459b
Make BLK@ FLUSH only if loading a different block
...
Otherwise, when editing a file with VE, we would constantly write
to disk, which is a bit inefficient.
2020-06-11 21:42:52 -04:00