[OpenBIOS] PATCH: Fix b(do) ... b(leaves) ... b(loop)/b(+loop)
Blue Swirl
blauwirbel at gmail.com
Fri May 22 19:12:47 CEST 2009
On 5/21/09, Mark Cave-Ayland <mark.cave-ayland at siriusit.co.uk> wrote:
> Hi everyone,
>
> This patch fixes the b(do)...b(leaves)...b(loop)/b(+loop)
> structures by marking them as immediate rather then compile-only. Without
> this in place, the loop addresses would be calculated incorrectly which
> would cause the Fcode evaluator to jump to the wrong location for each loop
> iteration. I've confirmed that this change does not break do...leaves...loop
> in immediate mode either.
>
> For reference, here are the test cases I used:
>
>
> \ Test Fcode do...loop
> \ Forth: 3 0 do i . cr loop
> here
> cc c, \ offset16
> a8 c, \ 3
> a5 c, \ 0
> 17 c, 00 c, 08 c, \ b(do)
> 19 c, \ i
> 9d c, \ .
> 92 c, \ cr
> 15 c, ff c, fc c, \ b(loop)
> 00 c, \ end
>
> \ Test Fcode do...+loop
> \ Forth: 10 0 do i . cr 2 +loop
> here
> cc c, \ offset16
> 10 c, 00 c, 00 c, 00 c, 10 c, \ b(lit) 0x10
> a5 c, \ 0
> 17 c, 00 c, 09 c, \ b(do)
> 19 c, \ i
> 9d c, \ .
> 92 c, \ cr
> a7 c, \ 2
> 16 c, ff c, fb c, \ b(+loop)
> 00 c, \ end
>
> \ Test Fcode do...leave...loop
> \ Forth: a 0 do i dup . 3 = if leave then loop
> here
> cc c, \ offset16
> 10 c, 00 c, 00 c, 00 c, 0a c, \ b(lit) 0xA
> a5 c, \ 0
> 17 c, 00 c, 0f c, \ b(do)
> 19 c, \ i
> 47 c, \ dup
> 9d c, \ .
> a8 c, \ 3
> 3c c, \ =
> 14 c, 00 c, 04 c, \ b?branch
> 1b c, \ b(leave)
> b2 c, \ b(>resolve)
> 15 c, ff c, f5 c, \ b(loop)
> 00 c, \ end
>
>
> With these last 2 patches and diag-switch? set to true, the Fcode evaluator
> will now finish executing my SPARC64 disk image without crashing giving the
> following output:
>
>
> OpenBIOS for Sparc64
> Configuration device id QEMU version 1 machine id 0
> CPUs: 1 x SUNW,UltraSPARC-II
> UUID: 00000000-0000-0000-0000-000000000000
> Welcome to OpenBIOS v1.0 built on May 21 2009 19:09
> Type 'help' for detailed information
>
> [sparc64] Booting file 'disk' with parameters ''
> Not a bootable ELF image
> Not a Linux kernel image
> Not a bootable a.out image
> Loading FCode image...
> Loaded 5936 bytes
> entry point is 0x4000
> Evaluating FCode...
> reserved fcode word.
> Loading package 1.4 04 Aug 1995 13:02:54.
> reserved fcode word.
> reserved fcode word.
> reserved fcode word.
> FCode UFS Reader 1.12 00/07/17 15:48:16.
> Loading: /platform//ufsboot
> Loading: /platform/sun4u/ufsboot
> Boot load failed.
>
> byte-load: stack overflow, diff -2
>
> 0 >
Nice progress. marTux 0.2 still crashes at the same point:
entry point is 0x4000
Evaluating FCode...
reserved fcode word.
Loading package 1.4 04 Aug 1995 13:02:54.
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
I still applied this (r492), thanks.
More information about the OpenBIOS
mailing list