mirror of
https://github.com/hsoft/collapseos.git
synced 2024-11-02 06:30:55 +11:00
Compare commits
2 Commits
f62376bd0a
...
6368cc3bac
Author | SHA1 | Date | |
---|---|---|---|
|
6368cc3bac | ||
|
a6efb65010 |
@ -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
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
|
||||
; 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
|
||||
|
@ -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!
|
||||
|
@ -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 )
|
||||
|
@ -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
|
||||
|
29
notes.txt
29
notes.txt
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user