From f2f520cacc6f61062d6237ad4fa2da23e757ca11 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Sun, 5 Jul 2020 14:57:18 -0400 Subject: [PATCH] Extract (br), (?br) and (loop)'s code out of stable ABI zone There is now no more actual code in stable ABI, only references. This makes refactoring of this code much easier. For example, changing IY to BC as the IP register. --- blk/283 | 16 +++++++--------- blk/284 | 16 ++++++++++++---- blk/285 | 20 +++++++------------- blk/397 | 2 +- blk/398 | 4 ++-- blk/399 | 4 ++-- blk/805 | 2 ++ blk/806 | 16 +++++++++------- blk/807 | 9 +++++---- cvm/forth.bin | Bin 5422 -> 5336 bytes cvm/xcomp.fs | 20 +++++++++++--------- 11 files changed, 58 insertions(+), 51 deletions(-) diff --git a/blk/283 b/blk/283 index 0368d13..308e0c8 100644 --- a/blk/283 +++ b/blk/283 @@ -1,14 +1,12 @@ -H@ ORG ! +H@ ORG ! ( STABLE ABI ) 0 JP, ( 00, main ) NOP, ( unused ) NOP, NOP, ( 04, BOOT ) NOP, NOP, ( 06, uflw ) NOP, NOP, ( 08, LATEST ) NOP, ( unused ) 0 A, 0 JP, ( 0b, EXIT ) NOP, ( unused ) -0 JP, ( RST 10 ) NOP, NOP, NOP, NOP, ( unused ) -NOP, NOP, NOP, ( unused ) +0 JP, ( RST 10 ) NOP, NOP, NOP, NOP, NOP, NOP, NOP, ( unused ) 0 JP, ( 1a, next ) NOP, NOP, NOP, ( unused ) -0 JP, ( RST 20 ) -0 A, 0 JP, ( 23, (n) ) NOP, ( unused ) -0 JP, ( RST 28 ) -0 A, 0 JP, ( 2b, (s) ) NOP, ( unused ) -0 JP, ( RST 30 ) -0 A, 0 JP, ( 33, 2>R ) NOP, ( unused ) +0 JP, ( RST 20 ) 0 A, 0 JP, ( 23, (n) ) NOP, ( unused ) +0 JP, ( RST 28 ) 0 A, 0 JP, ( 2b, (s) ) NOP, ( unused ) +0 JP, ( RST 30 ) 0 A, 0 JP, ( 33, 2>R ) NOP, ( unused ) 0 JP, ( RST 38 ) +0 A, 0 JP, ( 3b, (br) ) 0 A, 0 JP, ( 3f, (?br) ) +0 A, 0 JP, ( 43, (loop) ) diff --git a/blk/284 b/blk/284 index e54bce3..3c82601 100644 --- a/blk/284 +++ b/blk/284 @@ -1,7 +1,15 @@ -ORG @ 0x4c + HERE ! H@ 4 + XCURRENT ! ( make next CODE have 0 prev field ) -CODE (br) ( 0x53 ) -L2 BSET ( used in CBR ) +CODE (br) ( TODO: move with other native words ) +L1 BSET ( used in ?br and loop ) +PC ORG @ 0x3d + ! ( stable ABI JP ) E 0 IY+ LDrIXY, D 1 IY+ LDrIXY, DE ADDIYd, - JPNEXT, +;CODE +CODE (?br) +PC ORG @ 0x41 + ! ( stable ABI JP ) + HL POP, + HLZ, + JRZ, L1 BWR ( br + 1. False, branch ) + ( True, skip next 2 bytes and don't branch ) + IY INCd, IY INCd, +;CODE diff --git a/blk/285 b/blk/285 index e6319c0..0b1f025 100644 --- a/blk/285 +++ b/blk/285 @@ -1,16 +1,10 @@ -CODE (?br) ( 0x67 ) - HL POP, - HLZ, - JRZ, L2 BWR ( br + 1. False, branch ) - L1 BSET ( loop will jump here ) - ( True, skip next 2 bytes and don't branch ) - IY INCd, IY INCd, - JPNEXT, NOP, NOP, NOP, -CODE (loop) ( 0x80 ) +CODE (loop) +PC ORG @ 0x45 + ! ( stable ABI JP ) 0 IX+ INC(IXY+), IFZ, 1 IX+ INC(IXY+), THEN, ( I++ ) ( Jump if I <> I' ) - A 0 IX+ LDrIXY, 2 IX- CP(IXY+), JRNZ, L2 BWR ( branch ) - A 1 IX+ LDrIXY, 1 IX- CP(IXY+), JRNZ, L2 BWR ( branch ) + A 0 IX+ LDrIXY, 2 IX- CP(IXY+), JRNZ, L1 BWR ( branch ) + A 1 IX+ LDrIXY, 1 IX- CP(IXY+), JRNZ, L1 BWR ( branch ) ( don't branch ) - IX DECd, IX DECd, IX DECd, IX DECd, JR, L1 BWR -( END OF STABLE ABI ) + IX DECd, IX DECd, IX DECd, IX DECd, + IY INCd, IY INCd, +;CODE diff --git a/blk/397 b/blk/397 index 785dd81..8175820 100644 --- a/blk/397 +++ b/blk/397 @@ -1,7 +1,7 @@ ( Now we have "as late as possible" stuff. See B70 and B260. ) : _bchk DUP 0x7f + 0xff > IF LIT< br-ovfl (print) ABORT THEN ; : DO 0x33 ( 2>R ) , H@ ; IMMEDIATE -: LOOP 0x80 ( loop ) , H@ - _bchk , ; IMMEDIATE +: LOOP 0x43 ( loop ) , H@ - _bchk , ; IMMEDIATE ( LEAVE is implemented in low xcomp ) : LITN 0x23 ( n ) , , ; ( gets its name at the very end. can't comment afterwards ) diff --git a/blk/398 b/blk/398 index b7a80c9..9d9ab3c 100644 --- a/blk/398 +++ b/blk/398 @@ -1,11 +1,11 @@ : IF ( -- a | a: br cell addr ) - 0x67 ( ?br ) , H@ 2 ALLOT ( br cell allot ) + 0x3f ( ?br ) , H@ 2 ALLOT ( br cell allot ) ; IMMEDIATE : THEN ( a -- | a: br cell addr ) DUP H@ -^ _bchk SWAP ( a-H a ) ! ; IMMEDIATE : ELSE ( a1 -- a2 | a1: IF cell a2: ELSE cell ) - 0x53 ( br ) , + 0x3b ( br ) , 2 ALLOT [COMPILE] THEN H@ 2- ( push a. -2 for allot offset ) diff --git a/blk/399 b/blk/399 index 98eb857..2cbd9f4 100644 --- a/blk/399 +++ b/blk/399 @@ -1,7 +1,7 @@ : LIT< 0x2b ( s ) , WORD DUP C@ 1+ MOVE, ; IMMEDIATE : BEGIN H@ ; IMMEDIATE -: AGAIN 0x53 ( br ) , H@ - _bchk , ; IMMEDIATE -: UNTIL 0x67 ( ?br ) , H@ - _bchk , ; IMMEDIATE +: AGAIN 0x3b ( br ) , H@ - _bchk , ; IMMEDIATE +: UNTIL 0x3f ( ?br ) , H@ - _bchk , ; IMMEDIATE : [ INTERPRET ; IMMEDIATE : ] R> DROP ; : COMPILE ' LITN ['] , , ; IMMEDIATE diff --git a/blk/805 b/blk/805 index 5ba4e42..2349126 100644 --- a/blk/805 +++ b/blk/805 @@ -12,3 +12,5 @@ JMPn, 0 A,, ( 1a, next ) 0 A,, 0 A,, 0 A,, ( unused ) 0 A, JMPn, 0 A,, ( 2b, (s) ) 0 A, ( unused ) 0 A, 0 A,, ( unused ) 0 A, JMPn, 0 A,, ( 33, 2>R ) 0 A, 0 A, 0 A,, ( unused ) +0 A, JMPn, 0 A,, ( 3b, (br) ) 0 A, JMPn, 0 A,, ( 3f, (?br) ) +0 A, JMPn, 0 A,, ( 43, (loop) ) diff --git a/blk/806 b/blk/806 index a55d30f..91639e8 100644 --- a/blk/806 +++ b/blk/806 @@ -1,10 +1,12 @@ -ORG @ 0x4c + HERE ! +( TODO: move these words with other native words. ) H@ 4 + XCURRENT ! ( make next CODE have 0 prev field ) -CODE (br) ( 0x53 ) L2 BSET ( used in br? ) +CODE (br) L1 BSET ( used in ?br ) +PC 0x3f - ORG @ 0x3d + ! ( stable abi ) DI DX MOVxx, DI [DI] MOVx[], DX DI ADDxx, -;CODE NOP, NOP, -CODE (?br) ( 0x67 ) - AX POPx, AX AX ORxx, JZ, L2 @ RPCs, ( False, branch ) +;CODE +CODE (?br) +PC 0x43 - ORG @ 0x41 + ! ( stable abi ) + AX POPx, AX AX ORxx, JZ, L1 @ RPCs, ( False, branch ) ( True, skip next 2 bytes and don't branch ) - L1 BSET ( loop will jump here ) DX INCx, DX INCx, -;CODE NOP, NOP, NOP, NOP, NOP, + DX INCx, DX INCx, +;CODE diff --git a/blk/807 b/blk/807 index 9fcf6f2..ee43d6e 100644 --- a/blk/807 +++ b/blk/807 @@ -1,8 +1,9 @@ -CODE (loop) ( 0x80 ) +CODE (loop) +PC 0x47 - ORG @ 0x45 + ! ( stable abi ) [BP] 0 INC[w]+, ( I++ ) ( Jump if I <> I' ) AX [BP] 0 MOVx[]+, AX [BP] -2 CMPx[]+, - JNZ, L2 @ RPCs, ( branch ) + JNZ, L1 @ RPCs, ( branch ) ( don't branch ) - BP 4 SUBxi, JMPs, L1 @ RPCs, -( END OF STABLE ABI ) + BP 4 SUBxi, DX INCx, DX INCx, +;CODE diff --git a/cvm/forth.bin b/cvm/forth.bin index 1cd046e5d5056b69fd0994bc62cc91a4bbb6a0af..01a192c5bd1082646d6e00fb7543c9eb4e72c300 100644 GIT binary patch literal 5336 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 Rn)Phh>@%Q`psyXE{of$Iwx9q2 literal 5422 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 diff --git a/cvm/xcomp.fs b/cvm/xcomp.fs index 16247c1..076f76d 100644 --- a/cvm/xcomp.fs +++ b/cvm/xcomp.fs @@ -18,17 +18,19 @@ ORG @ 0x2b + HERE ! 0 C, 0x06 C, ( (s) ) ORG @ 0x33 + HERE ! 0 C, 0x04 C, ( 2>R ) -H@ 4 + XCURRENT ! ( make next CODE have 0 prev field ) -ORG @ 0x4c + HERE ! -0x01 CODE (br) ( 0x53 ) -ORG @ 0x5f + HERE ! -0x02 CODE (?br) ( 0x67 ) -ORG @ 0x77 + HERE ! -0x03 CODE (loop) ( 0x80 ) -ORG @ 0xb9 + HERE ! -0x05 CODE (n) ( 0xbf ) +ORG @ 0x3b + HERE ! +0 C, 0x01 C, ( (br) ) +ORG @ 0x3f + HERE ! +0 C, 0x02 C, ( (?br) ) +ORG @ 0x43 + HERE ! +0 C, 0x03 C, ( (loop) ) ( END OF STABLE ABI ) +H@ 4 + XCURRENT ! ( make next CODE have 0 prev field ) 0x00 CODE EXIT +0x01 CODE (br) +0x02 CODE (?br) +0x03 CODE (loop) +0x05 CODE (n) 0x06 CODE (s) 0x04 CODE 2>R 0x07 CODE >R