mirror of
https://github.com/hsoft/collapseos.git
synced 2024-11-02 10:20:55 +11:00
Compare commits
2 Commits
f62376bd0a
...
6368cc3bac
Author | SHA1 | Date | |
---|---|---|---|
|
6368cc3bac | ||
|
a6efb65010 |
@ -1,6 +1,14 @@
|
|||||||
TARGETS = runbin/runbin forth/forth
|
TARGETS = runbin/runbin forth/forth
|
||||||
BIN2C = ../tools/bin2c
|
BIN2C = ../tools/bin2c
|
||||||
# Those Forth source files are in a particular order
|
# 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
|
FORTHSRCS = core.fs cmp.fs print.fs str.fs parse.fs readln.fs fmt.fs z80a.fs
|
||||||
FORTHSRC_PATHS = ${FORTHSRCS:%=../forth/%} forth/run.fs
|
FORTHSRC_PATHS = ${FORTHSRCS:%=../forth/%} forth/run.fs
|
||||||
OBJS = emul.o libz80/libz80.o
|
OBJS = emul.o libz80/libz80.o
|
||||||
@ -60,11 +68,9 @@ emul.o: emul.c
|
|||||||
$(CC) -c -o 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
|
.PHONY: updatebootstrap
|
||||||
updatebootstrap: forth/z80c.bin
|
updatebootstrap: forth/stage2
|
||||||
|
cat $(BOOTSRCS) | ./forth/stage2 > ./forth/z80c.bin
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
|
3
emul/forth/xstop.fs
Normal file
3
emul/forth/xstop.fs
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
(xentry) _
|
||||||
|
H@ 256 /MOD 2 PC! 2 PC!
|
||||||
|
|
Binary file not shown.
@ -103,26 +103,6 @@
|
|||||||
COMPILE R> COMPILE DROP COMPILE R> COMPILE DROP
|
COMPILE R> COMPILE DROP COMPILE R> COMPILE DROP
|
||||||
; IMMEDIATE
|
; 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 -- )
|
( a1 a2 u -- )
|
||||||
: MOVE
|
: MOVE
|
||||||
( u ) 0 DO
|
( u ) 0 DO
|
||||||
|
@ -178,18 +178,18 @@
|
|||||||
( system c< simply reads source from binary, starting at
|
( system c< simply reads source from binary, starting at
|
||||||
LATEST. Convenient way to bootstrap a new system. )
|
LATEST. Convenient way to bootstrap a new system. )
|
||||||
: (c<)
|
: (c<)
|
||||||
( 60 == SYSTEM SCRATCHPAD )
|
( 2e == BOOT C< PTR )
|
||||||
0x60 RAM+ @ ( a )
|
0x2e RAM+ @ ( a )
|
||||||
DUP C@ ( a c )
|
DUP C@ ( a c )
|
||||||
SWAP 1 + ( c a+1 )
|
SWAP 1 + ( c a+1 )
|
||||||
0x60 RAM+ ! ( c )
|
0x2e RAM+ ! ( c )
|
||||||
;
|
;
|
||||||
|
|
||||||
: BOOT
|
: BOOT
|
||||||
0x02 RAM+ CURRENT* !
|
0x02 RAM+ CURRENT* !
|
||||||
LIT< (parse) (find) DROP (parse*) !
|
LIT< (parse) (find) DROP (parse*) !
|
||||||
( 60 == SYSTEM SCRATCHPAD )
|
( 2e == SYSTEM SCRATCHPAD )
|
||||||
CURRENT @ 0x60 RAM+ !
|
CURRENT @ 0x2e RAM+ !
|
||||||
( 0c == CINPTR )
|
( 0c == CINPTR )
|
||||||
LIT< (c<) (find) DROP 0x0c RAM+ !
|
LIT< (c<) (find) DROP 0x0c RAM+ !
|
||||||
LIT< INIT (find)
|
LIT< INIT (find)
|
||||||
@ -231,6 +231,3 @@
|
|||||||
ELSE (parse*) @ EXECUTE LITN THEN
|
ELSE (parse*) @ EXECUTE LITN THEN
|
||||||
AGAIN
|
AGAIN
|
||||||
;
|
;
|
||||||
|
|
||||||
(xentry) _
|
|
||||||
H@ 256 /MOD 2 PC! 2 PC!
|
|
||||||
|
@ -9,11 +9,11 @@
|
|||||||
|
|
||||||
64 CONSTANT INBUFSZ
|
64 CONSTANT INBUFSZ
|
||||||
( points to INBUF )
|
( points to INBUF )
|
||||||
(sysv) IN(
|
: IN( 0x53 RAM+ ;
|
||||||
( points to INBUF's end )
|
( points to INBUF's end )
|
||||||
(sysv) IN)
|
: IN) 0x55 RAM+ ;
|
||||||
( current position in INBUF )
|
( current position in INBUF )
|
||||||
(sysv) IN>
|
: IN> 0x57 RAM+ ;
|
||||||
|
|
||||||
( flush input buffer )
|
( flush input buffer )
|
||||||
( set IN> to IN( and set IN> @ to null )
|
( set IN> to IN( and set IN> @ to null )
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
( H@ offset at which we consider our PC 0. Used to compute
|
( H@ offset at which we consider our PC 0. Used to compute
|
||||||
PC. To have a proper PC, call "H@ ORG !" at the beginning
|
PC. To have a proper PC, call "H@ ORG !" at the beginning
|
||||||
of your assembly process. )
|
of your assembly process. )
|
||||||
(sysv) ORG
|
: ORG 0x59 RAM+ ;
|
||||||
: PC H@ ORG @ - ;
|
: PC H@ ORG @ - ;
|
||||||
|
|
||||||
( A, spits an assembled byte, A,, spits an assembled word
|
( A, spits an assembled byte, A,, spits an assembled word
|
||||||
@ -28,12 +28,12 @@
|
|||||||
pre-declare label variables here, which means we have a
|
pre-declare label variables here, which means we have a
|
||||||
limited number of it. For now, 6 ought to be enough. )
|
limited number of it. For now, 6 ought to be enough. )
|
||||||
|
|
||||||
(sysv) L1
|
: L1 0x5b RAM+ ;
|
||||||
(sysv) L2
|
: L2 0x5d RAM+ ;
|
||||||
(sysv) L3
|
: L3 0x5f RAM+ ;
|
||||||
(sysv) L4
|
: L4 0x61 RAM+ ;
|
||||||
(sysv) L5
|
: L5 0x63 RAM+ ;
|
||||||
(sysv) L6
|
: L6 0x65 RAM+ ;
|
||||||
|
|
||||||
( There are 2 label types: backward and forward. For each
|
( There are 2 label types: backward and forward. For each
|
||||||
type, there are two actions: set and write. Setting a label
|
type, there are two actions: set and write. Setting a label
|
||||||
|
29
notes.txt
29
notes.txt
@ -86,11 +86,21 @@ RAMSTART INITIAL_SP
|
|||||||
+0a PARSEPTR
|
+0a PARSEPTR
|
||||||
+0c CINPTR
|
+0c CINPTR
|
||||||
+0e WORDBUF
|
+0e WORDBUF
|
||||||
+2e SYSVNXT
|
+2e BOOT C< PTR
|
||||||
+4e INTJUMP
|
+4e INTJUMP
|
||||||
+51 CURRENTPTR
|
+51 CURRENTPTR
|
||||||
+53 RESERVED
|
+53 readln's IN(
|
||||||
+60 SYSTEM SCRATCHPAD
|
+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
|
+80 RAMEND
|
||||||
|
|
||||||
INITIAL_SP holds the initial Stack Pointer value so that we know where to reset
|
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
|
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
|
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
|
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
|
points to RAM+2, but sometimes, when maintaining alternative dicts (during
|
||||||
cross compilation for example), it can point elsewhere.
|
cross compilation for example), it can point elsewhere.
|
||||||
|
|
||||||
SYSTEM SCRATCHPAD is reserved for temporary system storage or can be reserved
|
FUTURE USES section is unused for now.
|
||||||
by low-level drivers. These are the current usages of this space throughout the
|
|
||||||
project:
|
|
||||||
|
|
||||||
* 0x60-0x62: (c<) pointer during in-memory initialization (see below)
|
DRIVERS section is reserved for recipe-specific drivers. Here is a list of
|
||||||
* 0x62-0x6a: ACIA buffer pointers in RC2014 recipes.
|
known usages:
|
||||||
|
|
||||||
|
* 0x70-0x78: ACIA buffer pointers in RC2014 recipes.
|
||||||
|
|
||||||
*** Initialization sequence
|
*** Initialization sequence
|
||||||
|
|
||||||
|
@ -2,5 +2,5 @@
|
|||||||
0xf000 CONSTANT RS_ADDR
|
0xf000 CONSTANT RS_ADDR
|
||||||
0x80 CONSTANT ACIA_CTL
|
0x80 CONSTANT ACIA_CTL
|
||||||
0x81 CONSTANT ACIA_IO
|
0x81 CONSTANT ACIA_IO
|
||||||
RAMSTART 0x62 + CONSTANT ACIA_MEM
|
RAMSTART 0x70 + CONSTANT ACIA_MEM
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user