[OpenBIOS] Incorrect implementation of b?branch?

Blue Swirl blauwirbel at gmail.com
Sat Feb 21 17:26:35 CET 2009


On 2/21/09, Mark Cave-Ayland <mark.cave-ayland at siriusit.co.uk> wrote:
> Stefan Reinauer wrote:
>
>
> > I think you indeed hit a bug. b?branch in openbios only works in word
> > definitions, not in interpretion mode. It needs similar handling as
> > setup-tmp-comp/execute-tmp-comp in the definition of "if"
> in bootstrap.fs.
> >
>
>  No way! I was actually looking at the code in bootstrap.fs thinking that
> the code assumed it was working inside a temporary buffer, and wondering if
> the setup-tmp-comp word would help me. Thanks for the pointer.
>
>
> > In addition to that your example contains non-valid code. A b?branch
> > always needs to point behind a b(>resolve) as in the below example.
> >
> > here
> > cc c,                   \ offset16
> > \ a4 c,                 \ -1
> > a5 c,                   \ 0
> > 14 c, 00 c, 05 c,       \ b?branch
> > 02 c, 16 c,             \ abort
> > b2 c,                   \ b(>resolve)
> > 9f c,                   \ .s
> > 00 c,                   \ end0
> > 1 byte-load
> >
>
>  Indeed, that is my mistake. Please find the attached patch, which when used
> with your code example above now seems to do the right thing for b?branch:
>
>
>  0 > here  ok
>  1 > cc c,  ok
>  1 > a5 c,  ok
>  1 > 14 c, 00 c, 05 c,  ok
>  1 > 02 c, 16 c,  ok
>  1 > b2 c,  ok
>  1 > 9f c,  ok
>  1 > 00 c,  ok
>  1 > 1 byte-load <e> -1 1 0 -1 0 0 0 ffd79378 0 0 0 0 0 0
>   ok
>
>
>  0 > here  ok
>  1 > cc c,  ok
>  1 > a4 c,  ok
>  1 > 14 c, 00 c, 05 c,  ok
>  1 > 02 c, 16 c,  ok
>  1 > b2 c,  ok
>  1 > 9f c,  ok
>  1 > 00 c,  ok
>  1 > 1 byte-load
>  byte-load: exception caught!
>   ok
>
>
>  At least now if I find similar errors, I have an idea of how to fix them :)

Thanks, I'll apply this. My marTux and Milax test images get a little
further with this patch.



More information about the OpenBIOS mailing list