The b?branch command causes the dictionary pointer to change from fff81e54 to fff57240. This behavior is described in fcode.fs where b?branch calls setup-tmp-comp. It's using the tmp-comp-buf which is initialized to a fixed size of 200 in bootstrap.fs. Is 200 enough?
Maybe you should test this functionality with a simplified fcode image.
Create a fcode image containing the following (tokenize it so it can be loaded with byte-load - add any necessary stuff I didn't include such as start1):
." start test" testa 0= if ." testa is 0" testb 0= if ." testb is also 0" then then ." done test"
Test the image by creating the testa and testb values and byte-load the image for each combination of values (add any necessary stuff I didn't include in the byte-load command):
0 value testa 0 value testb byte-load 1 to testa byte-load 1 to testb byte-load 0 to testa byte-load
if that all works, then you need to start stepping through the OpenBIOS code to find when the exception is thrown (maybe you can add some ." ..." to the various .fs files to narrow the search). You have all the code to OpenBIOS, so you should be able to find the problem eventually.
Ok, I made those changes to openbios, here is the output.
On May 8, 2018, at 6:50 AM, Joe van Tunen mailto:firstname.lastname@example.org wrote:
: (debug-feval) ( fcode# -- fcode# ) \ Address fcode-stream 1 - . here u. ." : " \ Indicate if word is compiled state @ 0<> if ." (compile) " then dup fcode>xt cell - lfa2name type dup ." [ 0x" . ." ]" cr ;