[OpenBIOS] [RFC] Make BootX from Mac OS X 10.4 work
Laurent Vivier
laurent at vivier.eu
Mon Aug 10 10:07:49 CEST 2009
>
>On 10.08.2009, at 00:51, Laurent Vivier wrote:
>
>> Le jeudi 30 juillet 2009 à 18:00 +0200, Alexander Graf a écrit :
>>> Using this patch stacked on Steven Noonan's I was able to make
>>> BootX from
>>> Mac OS X 10.4 load XNU successfully in qemu-system-ppc.
>>
>> Hi,
>>
>> I'd like to play with that.
>>
>> Which patches to apply before ?
>
>I took those rebased on current git:
>
>http://github.com/tycho/openbios/tree/macosx-boot
>
>> How to boot ?
>
>The normal way. Just use -boot d. So far only the 10.4 CD did boot IIRC.
>
>Alex
>
>>
>> Regards,
>> Laurent
>>
>>> Unfortunately, most of this patch is nothing but a mere hack to
>>> find out
>>> what we really need to get this working.
>>>
>>> Also I didn't manage to get anything but 10.4 running. Other
>>> versions broke
>>> in the partition table interpretation.
>>>
>>> I would not feel good taking the patch as is, because it would be
>>> better to
>>> implement the correct Forth magic to make the real callbacks work.
>>> Here is
>>> what I found to be broken:
>>>
>>> - unselect-dev is missing
>>> - local variables don't work ({ ... })
>>> - I ran into an endless loop, getting isi and dsi faults on the
>>> same 2
>>> addresses all the time
>>>
>>> Also, Qemu's only usable Desktop PPC target is a G3 Beige which is
>>> only
>>> supported up to 10.2.8 IIRC. So even getting the bootloader running
>>> for
>>> 10.4 didn't exactly buy me much.
>>>
>>> Don't apply the patch as is!
>>> It'd be great to see someone build on this!
>>> ---
>>> arch/ppc/qemu/ofmem.c | 4 ++--
>>> modules/client.c | 40 ++++++++++++++++++++++++++++++++++++++++
>>> 2 files changed, 42 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/arch/ppc/qemu/ofmem.c b/arch/ppc/qemu/ofmem.c
>>> index a1a8fb1..32642e2 100644
>>> --- a/arch/ppc/qemu/ofmem.c
>>> +++ b/arch/ppc/qemu/ofmem.c
>>> @@ -716,8 +716,8 @@ hash_page_32( ulong ea, ulong phys, int mode )
>>>
>>> /* out of slots, just evict one */
>>> if( !found ) {
>>> - i = next_grab_slot + 1;
>>> - next_grab_slot = (next_grab_slot + 1) % 8;
>>> + i = next_grab_slot + 3;
>>> + next_grab_slot = (next_grab_slot + 3) % 8;
>>> }
>>> i--;
>>> upte[i*2] = cmp;
>>> diff --git a/modules/client.c b/modules/client.c
>>> index a2e8405..a8c89ff 100644
>>> --- a/modules/client.c
>>> +++ b/modules/client.c
>>> @@ -49,6 +49,46 @@ handle_calls( prom_args_t *pb )
>>> pb->nargs, pb->nret);
>>> #endif
>>>
>>> +#if 1
>>> + if (!strcmp(pb->service, "interpret"))
>>> + {
>>> + char *ns;
>>> +
>>> + ns = strstr((char*)pb->args[0], "{ ; dpth }");
>>> + if (ns) return 0;
>>> +
>>> + ns = strstr((char*)pb->args[0], "dev /chosen ");
>>> + if (ns) memcpy(ns, " \" /chosen\"", 11);
>>> + }
>>> + else if (!strcmp(pb->service, "call-method"))
>>> + {
>>> + if (!strncmp((char*)pb->args[0], "slw_init_keymap", 15)) {
>>> +
>>> + char *a = (char*)malloc(20);
>>> + memset(a, 0x00, 20);
>>> + pb->args[4] = (uint32_t)a;
>>> + pb->args[3] = 0;
>>> +
>>> + return 0;
>>> + }
>>> + if (!strncmp((char*)pb->args[0], "slw_emit",
>>> strlen("slw_emit"))) {
>>> + PUSH( (char)pb->args[2] );
>>> + fword("emit");
>>> +
>>> + return 0;
>>> + }
>>> + if (!strncmp((char*)pb->args[0], "slw_cr", strlen("slw_cr"))) {
>>> + PUSH( '\n' );
>>> + fword("emit");
>>> + return 0;
>>> + }
>>> + if (!strncmp((char*)pb->args[0], "slw_update_keymap",
>>> strlen("slw_update_keymap"))) return 0;
>>> + if (!strncmp((char*)pb->args[0], "slw_set_output_level",
>>> strlen("slw_set_output_level"))) return 0;
>>> + if (!strncmp((char*)pb->args[0], "slw_spin_init",
>>> strlen("slw_spin_init"))) return 0;
>>> + if (!strncmp((char*)pb->args[0], "slw_spin",
>>> strlen("slw_spin"))) return 0;
>>> + }
>>> +#endif
>>> +
>>> for( i=pb->nargs-1; i>=0; i-- )
>>> PUSH( pb->args[i] );
>>>
>>> --
>>> 1.6.0.2
>>>
>>>
>> --
>> --------------------- laurent at vivier.eu ----------------------
>> "Tout ce qui est impossible reste à accomplir" Jules Verne
>> "Things are only impossible until they're not" Jean-Luc Picard
>>
>>
>> --
>> OpenBIOS http://openbios.org/
>> Mailinglist: http://lists.openbios.org/mailman/listinfo
>> Free your System - May the Forth be with you
>
>
>--
>OpenBIOS http://openbios.org/
>Mailinglist: http://lists.openbios.org/mailman/listinfo
>Free your System - May the Forth be with you
--
--------------------- Laurent at vivier.eu ---------------------
"Tout ce qui est impossible reste à accomplir" Jules Verne
"Things are only impossible until they're not" Jean-Luc Picard
More information about the OpenBIOS
mailing list