Преглед изворни кода

Move xcomp to blocks

pull/102/head
Virgil Dupras пре 4 година
родитељ
комит
372524fd19
12 измењених фајлова са 65 додато и 71 уклоњено
  1. +1
    -1
      blk/001
  2. +16
    -0
      blk/260
  3. +6
    -0
      blk/261
  4. +1
    -0
      blk/262
  5. +11
    -0
      blk/263
  6. +14
    -0
      blk/264
  7. +14
    -0
      blk/265
  8. +0
    -1
      emul/Makefile
  9. +1
    -0
      emul/forth/xcomp.fs
  10. +1
    -1
      forth/icore.fs
  11. +0
    -67
      forth/xcomp.fs
  12. +0
    -1
      recipes/rc2014/Makefile

+ 1
- 1
blk/001 Прегледај датотеку

@@ -2,7 +2,7 @@ MASTER INDEX

3 Usage 30 Dictionary
70 Implementation notes 100 Block editor
200 Z80 assembler
200 Z80 assembler 260 Cross compilation





+ 16
- 0
blk/260 Прегледај датотеку

@@ -0,0 +1,16 @@
Cross compilation program

This programs allows cross compilation of boot binary and
icore. Run "262 LOAD" right before your cross compilation and
then set XCURRENT to CURRENT and XCOFF to H@.

This redefines defining words to achieve cross compilation.
The goal is two-fold:

1. Add an offset to all word references in definitions.
2. Don't shadow important words we need right now.

Words overrides like ":", "IMMEDIATE" and "CODE" are not
automatically shadowed to allow the harmless inclusion of
this unit. This shadowing has to take place in your xcomp
configuration. (cont.)

+ 6
- 0
blk/261 Прегледај датотеку

@@ -0,0 +1,6 @@
(cont.)
See example in /emul/forth/xcomp.fs

Why limit ourselves to icore? Oh, I've tried cross-compiling
the whole shebang. I tried. And failed. Too dynamic.


+ 1
- 0
blk/262 Прегледај датотеку

@@ -0,0 +1 @@
263 LOAD 265 LOAD

+ 11
- 0
blk/263 Прегледај датотеку

@@ -0,0 +1,11 @@
VARIABLE XCURRENT
VARIABLE XOFF

: XCON XCURRENT CURRENT* ! ;
: XCOFF 0x02 RAM+ CURRENT* ! ;

: (xentry) XCON (entry) XCOFF ;

: XCODE XCON CODE XCOFF ;

: XIMM XCON IMMEDIATE XCOFF ;

+ 14
- 0
blk/264 Прегледај датотеку

@@ -0,0 +1,14 @@
The "X:" word

Because the ";" word goes back only one level in RSP and
this limits our ability to separate X: in sub words and this
means a rather cramped B265. This means no inline comments,
hence this block here.

0x0e is compiledWord. first _find is on xdict. If found, we
compile it with offsets. We abort on IMMED? because we're
never supposed to encounter an immediate at this point.

If not found, we try the same word on system dict (RAM+02).
If found and is immediate, execute. If founf and not immediate,
error. If not found, try number.

+ 14
- 0
blk/265 Прегледај датотеку

@@ -0,0 +1,14 @@
: X:
(xentry) [ 0x0e LITN ] C,
BEGIN WORD
XCURRENT @ SWAP ( xcur w ) _find ( a f )
IF ( a )
DUP IMMED? IF ABORT THEN
DUP XOFF @ > IF XOFF @ - THEN ,
ELSE ( w )
0x02 RAM+ @ SWAP ( cur w ) _find ( a f )
IF DUP IMMED? NOT IF ABORT THEN EXECUTE
ELSE (parse*) @ EXECUTE LITN THEN
THEN
AGAIN
;

+ 0
- 1
emul/Makefile Прегледај датотеку

@@ -1,7 +1,6 @@
TARGETS = forth/forth
# Those Forth source files are in a particular order
BOOTSRCS = ./forth/conf.fs \
../forth/xcomp.fs \
./forth/xcomp.fs \
../forth/boot.z80 \
../forth/icore.fs \


+ 1
- 0
emul/forth/xcomp.fs Прегледај датотеку

@@ -1,3 +1,4 @@
262 LOAD
: CODE XCODE ;
: IMMEDIATE XIMM ;
: : [ ' X: , ] ;


+ 1
- 1
forth/icore.fs Прегледај датотеку

@@ -25,7 +25,7 @@
expected to have been loaded prior to icore and redefines
":" and other defining words. So, in other words, when
compiling icore, ":" doesn't means what you think it means,
go look in xcomp.
go look in B260.
)

: RAM+


+ 0
- 67
forth/xcomp.fs Прегледај датотеку

@@ -1,67 +0,0 @@
( Allow cross-compilation of z80c and icore.
Include this file right before your cross compilation, then
set XCURRENT to CURRENT and XOFF to H@.

This redefines defining words to achieve cross compilation.
The goal is two-fold:

1. Add an offset to all word references in definitions.
2. Don't shadow important words we need right now.

Words overrides like ":", "IMMEDIATE" and "CODE" are not
automatically shadowed to allow the harmless inclusion of
this unit. This shadowing has to take place in your xcomp
configuration.

See example in /emul/forth/xcomp.fs

Why limit ourselves to icore? Oh, I've tried cross-compiling
the whole shebang. I tried. And failed. Too dynamic.
)

VARIABLE XCURRENT
VARIABLE XOFF

: XCON XCURRENT CURRENT* ! ;
: XCOFF 0x02 RAM+ CURRENT* ! ;

: (xentry) XCON (entry) XCOFF ;

: XCODE XCON CODE XCOFF ;

: XIMM XCON IMMEDIATE XCOFF ;

: X:
(xentry)
( 0e == compiledWord )
[ 0x0e LITN ] C,
BEGIN
WORD
( cross compile CURRENT )
XCURRENT @ SWAP ( w xcur w )
_find ( w a f )
IF
( is word )
( never supposed to encounter an IMMEDIATE in xdict )
DUP IMMED? IF ABORT THEN
( not an immed. drop backup w and write, with
offset. )
DUP XOFF @ > IF XOFF @ - THEN
,
ELSE ( w )
( not found? it might be an immediate that isn't yet defined in our
cross-compiled dict. It's alright, we can find-and-execute it. )
( system CURRENT )
0x02 RAM+ @ SWAP ( cur w )
_find ( a f )
IF
( found. It *must* be an IMMED )
DUP IMMED? NOT IF ABORT THEN
EXECUTE
ELSE
( not found. maybe number )
(parse*) @ EXECUTE LITN
THEN
THEN
AGAIN
;

+ 0
- 1
recipes/rc2014/Makefile Прегледај датотеку

@@ -5,7 +5,6 @@ EDIR = $(BASEDIR)/emul/forth
STAGE2 = $(EDIR)/stage2
EMUL = $(BASEDIR)/emul/hw/rc2014/classic
BOOTSRCS = conf.fs \
$(FDIR)/xcomp.fs \
$(EDIR)/xcomp.fs \
$(FDIR)/boot.z80 \
$(BASEDIR)/drv/acia.z80 \


Loading…
Откажи
Сачувај