diff --git a/blk/091 b/blk/091 index df0e280..7cb7a46 100644 --- a/blk/091 +++ b/blk/091 @@ -5,8 +5,8 @@ sets that don't change (well, not without some binary manipu- lation). Here's the complete list of these references: 04 BOOT addr 06 (uflw) addr 08 LATEST -42 EXIT wordref 53 (br) wordref 67 (?br) wordref -80 (loop) wordref a9 2>R wordref bf (n) wordref +33 2>R wordref 42 EXIT wordref 53 (br) wordref +67 (?br) wordref 80 (loop) wordref bf (n) wordref d4 (s) wordref BOOT and (uflw) exist because they are referred to before those diff --git a/blk/283 b/blk/283 index 5db52a8..7aea058 100644 --- a/blk/283 +++ b/blk/283 @@ -10,5 +10,5 @@ NOP, NOP, NOP, NOP, ( unused ) 0 JP, ( RST 28 ) NOP, NOP, NOP, NOP, NOP, ( unused ) 0 JP, ( RST 30 ) -NOP, NOP, NOP, NOP, NOP, ( unused ) +0 A, 0 JP, ( 33, 2>R ) NOP, ( unused ) 0 JP, ( RST 38 ) diff --git a/blk/286 b/blk/286 index de29a29..9c11b0c 100644 --- a/blk/286 +++ b/blk/286 @@ -1,7 +1,4 @@ -CODE 2>R ( 0xa9 ) - DE POP, HL POP, - 17 BCALL, ( 17 == pushRS ) EXDEHL, 17 BCALL, -;CODE NOP, NOP, NOP, +ORG @ 0xb9 + HERE ! CODE (n) ( 0xbf, number literal ) ( Literal value to push to stack is next to (n) reference in the atom list. That is where IP is currently pointing. diff --git a/blk/288 b/blk/288 index 4475d60..fbd4b96 100644 --- a/blk/288 +++ b/blk/288 @@ -1,11 +1,14 @@ CODE >R - HL POP, - 17 BCALL, ( 17 == pushRS ) + HL POP, 17 BCALL, ( 17 == pushRS ) ;CODE CODE R> - 20 BCALL, ( 20 == popRS ) - HL PUSH, + 20 BCALL, ( 20 == popRS ) HL PUSH, ;CODE +CODE 2>R ( 0xa9 ) +PC ORG @ 0x35 + ! ( stable ABI JP ) + DE POP, HL POP, + 17 BCALL, ( 17 == pushRS ) EXDEHL, 17 BCALL, +;CODE NOP, NOP, NOP, CODE 2R> 20 BCALL, ( 20 == popRS ) EXDEHL, 20 BCALL, HL PUSH, DE PUSH, diff --git a/blk/397 b/blk/397 index 26160bf..d190732 100644 --- a/blk/397 +++ b/blk/397 @@ -1,6 +1,6 @@ ( Now we have "as late as possible" stuff. See B70 and B270. ) : _bchk DUP 0x7f + 0xff > IF LIT< br-ovfl (print) ABORT THEN ; -: DO 0xa9 ( 2>R ) , H@ ; IMMEDIATE +: DO 0x33 ( 2>R ) , H@ ; IMMEDIATE : LOOP 0x80 ( loop ) , H@ - _bchk , ; IMMEDIATE ( LEAVE is implemented in low xcomp ) : LITN 0xbf ( n ) , , ; diff --git a/blk/805 b/blk/805 index f303d73..dfa3049 100644 --- a/blk/805 +++ b/blk/805 @@ -12,4 +12,4 @@ JMPn, 0 A,, ( 1a, next ) 0 A, 0 A,, ( unused ) 0 A, 0 A,, ( unused ) 0 A, 0 A,, 0 A, 0 A, ( unused ) 0 A, 0 A,, ( unused ) -JMPn, 0 A,, ( 33, execute ) 0 A, 0 A, 0 A, 0 A,, ( unused ) +0 A, JMPn, 0 A,, ( 33, 2>R ) 0 A, 0 A, 0 A,, ( unused ) diff --git a/blk/807 b/blk/807 index af529d8..2822434 100644 --- a/blk/807 +++ b/blk/807 @@ -5,11 +5,8 @@ CODE (loop) ( 0x80 ) JNZ, L2 @ RPCs, ( branch ) ( don't branch ) BP 4 SUBxi, JMPs, L1 @ RPCs, -ORG @ 0xa3 + HERE ! -CODE 2>R ( 0xa9 ) - [BP] 4 POP[w]+, [BP] 2 POP[w]+, BP 4 ADDxi, -;CODE NOP, NOP, NOP, NOP, NOP, +ORG @ 0xb9 + HERE ! CODE (n) ( 0xbf, number literal ) DI DX MOVxx, DI [DI] MOVx[], DI PUSHx, DX INCx, DX INCx, -;CODE NOP, NOP, +;CODE NOP, NOP, NOP, NOP, diff --git a/blk/810 b/blk/810 index d191e2d..2077e0b 100644 --- a/blk/810 +++ b/blk/810 @@ -1,4 +1,4 @@ -lblexec BSET PC 0x36 - ORG @ 0x34 + ! ( DI -> wordref ) +lblexec BSET ( DI -> wordref ) AL [DI] MOVr[], DI INCx, ( PFA ) AL AL ORrr, IFZ, DI JMPr, THEN, ( native ) AL DECr, IFNZ, ( cell or does ) diff --git a/blk/813 b/blk/813 index 4bda302..590e9e1 100644 --- a/blk/813 +++ b/blk/813 @@ -7,10 +7,10 @@ CODE >R 1 chkPS, CODE R> [BP] 0 PUSH[w]+, BP DECx, BP DECx, ;CODE +CODE 2>R +PC 0x37 - ORG @ 0x35 + ! ( stable abi ) + [BP] 4 POP[w]+, [BP] 2 POP[w]+, BP 4 ADDxi, +;CODE CODE 2R> 2 chkPS, [BP] -2 PUSH[w]+, [BP] 0 PUSH[w]+, BP 4 SUBxi, ;CODE -CODE ROT ( a b c -- b c a ) 3 chkPS, - CX POPx, BX POPx, AX POPx, - BX PUSHx, CX PUSHx, AX PUSHx, -;CODE diff --git a/blk/814 b/blk/814 index 211ed6e..75b332a 100644 --- a/blk/814 +++ b/blk/814 @@ -1,3 +1,7 @@ +CODE ROT ( a b c -- b c a ) 3 chkPS, + CX POPx, BX POPx, AX POPx, + BX PUSHx, CX PUSHx, AX PUSHx, +;CODE CODE DUP 1 chkPS, AX POPx, AX PUSHx, AX PUSHx, ;CODE CODE ?DUP 1 chkPS, AX POPx, AX AX ORxx, AX PUSHx, IFNZ, AX PUSHx, THEN, ;CODE diff --git a/cvm/forth.bin b/cvm/forth.bin index f2e9129..8ab411f 100644 Binary files a/cvm/forth.bin and b/cvm/forth.bin differ diff --git a/cvm/xcomp.fs b/cvm/xcomp.fs index 8fb218d..d8f58c1 100644 --- a/cvm/xcomp.fs +++ b/cvm/xcomp.fs @@ -10,6 +10,8 @@ CREATE BIN( 0 , 270 LOAD ( xcomp overrides ) H@ ORG ! +ORG @ 0x33 + HERE ! +0 C, 0x04 C, ( 2>R ) ORG @ 0x3b + HERE ! ," EXIT" 0 , ( prev ) 4 C, @@ -21,13 +23,12 @@ ORG @ 0x5f + HERE ! 0x02 CODE (?br) ( 0x67 ) ORG @ 0x77 + HERE ! 0x03 CODE (loop) ( 0x80 ) -ORG @ 0xa3 + HERE ! -0x04 CODE 2>R ( 0xa9 ) ORG @ 0xb9 + HERE ! 0x05 CODE (n) ( 0xbf ) ORG @ 0xce + HERE ! 0x06 CODE (s) ( 0xd4 ) ( END OF STABLE ABI ) +0x04 CODE 2>R 0x07 CODE >R 0x08 CODE R> 0x09 CODE 2R> diff --git a/emul/Makefile b/emul/Makefile index b90b584..e66f0a9 100644 --- a/emul/Makefile +++ b/emul/Makefile @@ -7,7 +7,7 @@ BLKFS = $(CDIR)/blkfs .PHONY: all all: $(TARGETS) -forth: forth.c $(OBJS) $(CDIR)/blkfs +forth: forth.c $(OBJS) $(BLKFS) $(CC) forth.c $(OBJS) -lncurses -o $@ libz80/libz80.o: libz80/z80.c @@ -17,7 +17,7 @@ libz80/libz80.o: libz80/z80.c emul.o: emul.c forth.bin $(BLKFS) $(CC) -DFBIN_PATH=\"`pwd`/forth.bin\" -DBLKFS_PATH=\"`pwd`/$(BLKFS)\" -c -o emul.o emul.c -forth.bin: xcomp.fs $(STAGE) +forth.bin: xcomp.fs $(STAGE) $(BLKFS) $(CDIR)/stage < xcomp.fs > $@ $(BLKFS): $(STAGE)