瀏覽代碼

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…
取消
儲存