1
0
mirror of https://github.com/hsoft/collapseos.git synced 2024-11-02 08:20:57 +11:00

Compare commits

...

2 Commits

Author SHA1 Message Date
Virgil Dupras
6368cc3bac Remove (sysv)
Replace its usages with direct RAM+ offsets. The (sysv) mechanism was
incompatible with cross-compilation of a full interpreter.
2020-04-10 14:57:00 -04:00
Virgil Dupras
a6efb65010 emul: extract capture mark from icore into xstop.fs 2020-04-10 14:16:45 -04:00
9 changed files with 49 additions and 52 deletions

View File

@ -1,6 +1,14 @@
TARGETS = runbin/runbin forth/forth
BIN2C = ../tools/bin2c
# Those Forth source files are in a particular order
BOOTSRCS = ./forth/conf.fs \
../forth/xcomp.fs \
./forth/xcomp.fs \
../forth/boot.fs \
../forth/z80c.fs \
../forth/icore.fs \
./forth/xstop.fs
FORTHSRCS = core.fs cmp.fs print.fs str.fs parse.fs readln.fs fmt.fs z80a.fs
FORTHSRC_PATHS = ${FORTHSRCS:%=../forth/%} forth/run.fs
OBJS = emul.o libz80/libz80.o
@ -60,11 +68,9 @@ emul.o: emul.c
$(CC) -c -o emul.o emul.c
forth/z80c.bin: forth/stage2
cat ./forth/conf.fs ../forth/xcomp.fs ./forth/xcomp.fs ../forth/boot.fs ../forth/z80c.fs ../forth/icore.fs | ./forth/stage2 | tee $@ > /dev/null
.PHONY: updatebootstrap
updatebootstrap: forth/z80c.bin
updatebootstrap: forth/stage2
cat $(BOOTSRCS) | ./forth/stage2 > ./forth/z80c.bin
.PHONY: clean
clean:

3
emul/forth/xstop.fs Normal file
View File

@ -0,0 +1,3 @@
(xentry) _
H@ 256 /MOD 2 PC! 2 PC!

Binary file not shown.

View File

@ -103,26 +103,6 @@
COMPILE R> COMPILE DROP COMPILE R> COMPILE DROP
; IMMEDIATE
( WARNING: there are no limit checks. We must be cautious, in
core code, not to create more than SYSV_BUFSIZE/2 sys vars.
Also: SYSV shouldn't be used during runtime: SYSVNXT won't
point at the right place. It should only be used during
stage1 compilation. This is why this word is not documented
in dictionary.txt )
: (sysv)
( Get new sysv addr )
( RAM+46 (2e) == SYSVNXT )
46 RAM+ @
CONSTANT
( increase current sysv counter )
2 46 RAM+ +!
;
( Set up initial SYSVNXT value, which is 2 bytes after its
own address )
46 RAM+ DUP 2 + SWAP !
( a1 a2 u -- )
: MOVE
( u ) 0 DO

View File

@ -178,18 +178,18 @@
( system c< simply reads source from binary, starting at
LATEST. Convenient way to bootstrap a new system. )
: (c<)
( 60 == SYSTEM SCRATCHPAD )
0x60 RAM+ @ ( a )
( 2e == BOOT C< PTR )
0x2e RAM+ @ ( a )
DUP C@ ( a c )
SWAP 1 + ( c a+1 )
0x60 RAM+ ! ( c )
0x2e RAM+ ! ( c )
;
: BOOT
0x02 RAM+ CURRENT* !
LIT< (parse) (find) DROP (parse*) !
( 60 == SYSTEM SCRATCHPAD )
CURRENT @ 0x60 RAM+ !
( 2e == SYSTEM SCRATCHPAD )
CURRENT @ 0x2e RAM+ !
( 0c == CINPTR )
LIT< (c<) (find) DROP 0x0c RAM+ !
LIT< INIT (find)
@ -231,6 +231,3 @@
ELSE (parse*) @ EXECUTE LITN THEN
AGAIN
;
(xentry) _
H@ 256 /MOD 2 PC! 2 PC!

View File

@ -9,11 +9,11 @@
64 CONSTANT INBUFSZ
( points to INBUF )
(sysv) IN(
: IN( 0x53 RAM+ ;
( points to INBUF's end )
(sysv) IN)
: IN) 0x55 RAM+ ;
( current position in INBUF )
(sysv) IN>
: IN> 0x57 RAM+ ;
( flush input buffer )
( set IN> to IN( and set IN> @ to null )

View File

@ -9,7 +9,7 @@
( H@ offset at which we consider our PC 0. Used to compute
PC. To have a proper PC, call "H@ ORG !" at the beginning
of your assembly process. )
(sysv) ORG
: ORG 0x59 RAM+ ;
: PC H@ ORG @ - ;
( A, spits an assembled byte, A,, spits an assembled word
@ -28,12 +28,12 @@
pre-declare label variables here, which means we have a
limited number of it. For now, 6 ought to be enough. )
(sysv) L1
(sysv) L2
(sysv) L3
(sysv) L4
(sysv) L5
(sysv) L6
: L1 0x5b RAM+ ;
: L2 0x5d RAM+ ;
: L3 0x5f RAM+ ;
: L4 0x61 RAM+ ;
: L5 0x63 RAM+ ;
: L6 0x65 RAM+ ;
( There are 2 label types: backward and forward. For each
type, there are two actions: set and write. Setting a label

View File

@ -86,11 +86,21 @@ RAMSTART INITIAL_SP
+0a PARSEPTR
+0c CINPTR
+0e WORDBUF
+2e SYSVNXT
+2e BOOT C< PTR
+4e INTJUMP
+51 CURRENTPTR
+53 RESERVED
+60 SYSTEM SCRATCHPAD
+53 readln's IN(
+55 readln's IN)
+57 readln's IN>
+59 z80a's ORG
+5b z80a's L1
+5d z80a's L2
+5f z80a's L3
+61 z80a's L4
+63 z80a's L5
+65 z80a's L6
+67 FUTURE USES
+70 DRIVERS
+80 RAMEND
INITIAL_SP holds the initial Stack Pointer value so that we know where to reset
@ -110,7 +120,8 @@ CINPTR holds routine address called on C<
WORDBUF is the buffer used by WORD
SYSVNXT is the buffer+tracker used by (sysv)
BOOT C< PTR is used when Forth boots from in-memory source. See "Initialization
sequence" below.
INTJUMP All RST offsets (well, not *all* at this moment, I still have to free
those slots...) in boot binaries are made to jump to this address. If you use
@ -122,12 +133,12 @@ RAM+2 directly, but rather the value at this address. Most of the time, it
points to RAM+2, but sometimes, when maintaining alternative dicts (during
cross compilation for example), it can point elsewhere.
SYSTEM SCRATCHPAD is reserved for temporary system storage or can be reserved
by low-level drivers. These are the current usages of this space throughout the
project:
FUTURE USES section is unused for now.
* 0x60-0x62: (c<) pointer during in-memory initialization (see below)
* 0x62-0x6a: ACIA buffer pointers in RC2014 recipes.
DRIVERS section is reserved for recipe-specific drivers. Here is a list of
known usages:
* 0x70-0x78: ACIA buffer pointers in RC2014 recipes.
*** Initialization sequence

View File

@ -2,5 +2,5 @@
0xf000 CONSTANT RS_ADDR
0x80 CONSTANT ACIA_CTL
0x81 CONSTANT ACIA_IO
RAMSTART 0x62 + CONSTANT ACIA_MEM
RAMSTART 0x70 + CONSTANT ACIA_MEM