j
: Next unread message k
: Previous unread message j a
: Jump to all threads
j l
: Jump to MailingList overview
Hi folks,
The attached patch fixes all of the various combinations of forwards and backwards branches for both bbranch and b?branch. With this patch applied to the latest openbios-svn, I can now run OpenBIOS to the point where it crashes out Qemu checked out a few weeks back. Nice :)
A couple of the fixes in this patch are for bugs introduced in my last commit. Whilst continuing to dig deeper into various bugs, I didn't appreciate at the time that it is not necessarily the description of the branch words that matters, more how they are tokenized by the Fcode evaluator.
For reference, here are the branch test cases I used to verify this behaviour:
\ Testing forward b?branch/bbranch (if/else/then equivalent) \ Forth: 1 if .s else abort then here cc c, \ offset16 a6 c, \ 1 (change to a5 for 0 to pick the else clause) 14 c, 0 c, 7 c, \ b?branch (if) 13 c, 0 c, 4 c, \ bbranch (else) b2 c, \ b(>resolve) 02 c, 16 c, \ abort b2 c, \ b(>resolve) 9f c, \ show stack 00 c, \ end
\ Test backwards b?branch (begin/until equivalent) \ Forth: 0 begin 1 + dup . dup 3 = until drop
here cc c, \ offset16 a5 c, \ 0 b1 c, \ b(<mark) (begin) a6 c, 1e c, \ +1 47 c, \ dup 9d c, 92 c, \ display the number 47 c, \ dup a8 c, \ count to 3 3c c, \ = 14 c, ff c, f7 c, \ b?branch (until) 46 c, \ drop (clear up stack) 0 c, \ End
\ Test backwards bbranch (begin/while/repeat equivalent) \ Forth: 3 begin dup . dup while 1 - repeat drop
here cc c, \ offset16 a8 c, \ 3 b1 c, \ b(<mark) (begin) 47 c, \ dup 9d c, 92 c, \ display the number 47 c, \ dup 14 c, 00 c, 06 c, \ b?branch (while) a6 c, 1f c, \ -1 13 c, ff c, f6 c, \ bbranch (repeat) b2 c, \ b(>resolve) 46 c, \ drop 00 c, \ end
ATB,
Mark.
Attachments:
On 4/27/09, Mark Cave-Ayland mark.cave-ayland@siriusit.co.uk wrote:
Hi folks,
The attached patch fixes all of the various combinations of forwards and backwards branches for both bbranch and b?branch. With this patch applied to the latest openbios-svn, I can now run OpenBIOS to the point where it crashes out Qemu checked out a few weeks back. Nice :)
A couple of the fixes in this patch are for bugs introduced in my last commit. Whilst continuing to dig deeper into various bugs, I didn't appreciate at the time that it is not necessarily the description of the branch words that matters, more how they are tokenized by the Fcode evaluator.
Thanks, applied.
With marTux 0.2 (Solaris derivative) I get: Loading FCode image... Loaded 5936 bytes entry point is 0x4000 Evaluating FCode... reserved fcode word. Loading reserved fcode word. reserved fcode word. reserved fcode word. FCode UFS Reader 1.13 05/06/08 08:30:31. Unhandled Exception 0x0000000000000034 PC = 0x00000000ffd0e370 NPC = 0x00000000ffd0e374 Stopping execution