From 31a58d00f1837cddbadf12fa8c1a187a7523369d Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Sat, 15 Aug 2020 16:37:58 -0400 Subject: [PATCH] z80: fix tricky memory initialization issue Among random "better safe than sorry" changes, the real fix is in changing "4" for "5" above _find declaration. This off-by-one error had that word, which is the root word in z80, have a 0x01 prev field instead of a 0x00 one. When all memory was initialized to zero, it didn't matter, we ended up hitting 0 prev and considered ourselves properly at the end of dict. When memory wasn't initialized, however, we would end up jumping at all kinds of places, leading to random behavior. --- blk/213 | 4 ++-- blk/243 | 2 +- blk/263 | 2 +- blk/291 | 2 +- blk/387 | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/blk/213 b/blk/213 index 944d475..8872d61 100644 --- a/blk/213 +++ b/blk/213 @@ -1,5 +1,5 @@ -VARIABLE ORG -VARIABLE BIN( 0 BIN( ! +CREATE ORG 0 , +CREATE BIN( 0 , VARIABLE L1 VARIABLE L2 VARIABLE L3 VARIABLE L4 : A 7 ; : B 0 ; : C 1 ; : D 2 ; : E 3 ; : H 4 ; : L 5 ; : (HL) 6 ; diff --git a/blk/243 b/blk/243 index 15066f6..6303e25 100644 --- a/blk/243 +++ b/blk/243 @@ -3,7 +3,7 @@ : BJP, BIN( @ + JP, ; : BJPc, BIN( @ + JPc, ; -VARIABLE lblchkPS +CREATE lblchkPS 0 , : chkPS, lblchkPS @ CALL, ; ( chkPS, B305 ) CREATE lblnext 0 , ( stable ABI until set in B300 ) : JPNEXT, lblnext @ ?DUP IF JP, ELSE 0x1a BJP, THEN ; diff --git a/blk/263 b/blk/263 index 49ed85f..9d750ba 100644 --- a/blk/263 +++ b/blk/263 @@ -1,4 +1,4 @@ -VARIABLE XCURRENT +CREATE XCURRENT 0 , : XCON XCURRENT CURRENT* ! ; : XCOFF 0x02 RAM+ CURRENT* ! ; : (xentry) XCON (entry) XCOFF ; diff --git a/blk/291 b/blk/291 index 5813ebb..8bf267c 100644 --- a/blk/291 +++ b/blk/291 @@ -1,5 +1,5 @@ ( Native words ) -H@ 4 + XCURRENT ! ( make next CODE have 0 prev field ) +H@ 5 + XCURRENT ! ( make next CODE have 0 prev field ) CODE _find ( cur w -- a f ) HL POP, ( w ) DE POP, ( cur ) chkPS, HL PUSH, ( --> lvl 1 ) diff --git a/blk/387 b/blk/387 index cd7491c..d44789d 100644 --- a/blk/387 +++ b/blk/387 @@ -10,7 +10,7 @@ : BS? DUP 0x7f = SWAP 0x8 = OR ; : KEY - 85 RAM+ @ ( (key) override ) + 0x55 RAM+ @ ( (key) override ) ?DUP IF EXECUTE ELSE (key) THEN ; ( cont.: read one char into input buffer and returns whether we should continue, that is, whether CR was not met. )