Context sensitivity in beastie.4th?

Scott Long scottl at samsco.org
Sat Jun 4 06:35:08 GMT 2005


Malcolm Kay wrote:

> On Fri, 27 May 2005 03:13 pm, Scott Long wrote:
> 
>>Scott Long wrote:
>>
>>>Malcolm Kay wrote:
>>>
>>>>I have installed FreeBSD 5.4 RELEASE on a new machine,
>>>>Celeron + SATA drive, without and problems, include a
>>>>kernel rebuild to support a PCI serial card.
>>>>
>>>>But now I wish to change the graphic, beastie, that appears
>>>>in the boot menu. I am certainly no expert or even acolyte
>>>>in forth programming but the job appears to be simple
>>>>enough -- just change the characters in the
>>>>'beastie' constructions and if we don't exceed the
>>>>available screen space all should be well!
>>>>
>>>>Well what I got was a cycling reboot going back ech time to
>>>>the BIOS splash screen and advancing an apparently
>>>>negligable distance into the FBSD
>>>>boot sequence.
>>>>
>>>>I had actually copied /boot/beastie.4th to
>>>>/boot/phoenix.4th, edited the copy and pointed
>>>>/boot/loader.rc at phoenix.4th instead of beastie.4th.
>>>>Recovery by booting from the distribution CD and entering
>>>>"Fixit" to change
>>>>the pointer back to beastie.4th.
>>>>
>>>>Most variants on my original attempt ended up the same way,
>>>>but some crashed with a "directory full" message which
>>>>seems quite strange as my images have always been smaller
>>>>than the original 'beastie'.
>>>>
>>>>Replacing the colourised version of my 'phoenix' with a
>>>>copy of the monochrome version worked.
>>>>
>>>>At present I have a phoenix.4th file which works but does
>>>>not exhibit the full image. The differences to the original
>>>>beastie.4th file are shown here
>>>>with escape characters replaced by '{esc}' to limit mail
>>>>confusion.
>>>>
>>>>With the line:
>>>>( 2dup at-xy ."         {esc}[1m^ ^" 1+ )
>>>>uncommented the system goes back to an infinite boot loop.
>>>>
>>>>This all seems very strange and unbelievable -- I must
>>>>surely be doing something very stupid. Does anyone have any
>>>>idea what that might be?
>>>
>>>Seems to work for me with the commented lines fixed.  Btw,
>>>you by no doubt have noticed that it's somewhat inconvenient
>>>to do 4th programming by modifying the boot scripts and then
>>>praying that the reboot works. It's possible to do 90% of
>>>the testing in userland, like I did when I wrote
>>>beastie.4th.
>>>
>>>Go to /sys/boot/ficl.  Do 'make clean && make testmain'. 
>>>This will create a binary called 'testmain' either in the
>>>'.' directory or in /usr/obj/usr/src/sys/boot/ficl.  Copy
>>>this binary to your home directory.  Then copy screen.4th,
>>>frames.4th, and beastie.4th from /boot to your home
>>>directory.  Next create a file called init.4th
>>>
>>>containing the following:
>>>: boot drop exit ;
>>>: reboot drop exit ;
>>>
>>>load screen.4th
>>>load frames.4th
>>>load beastie.4th
>>>beastie-start
>>>
>>>Then run it via './testmain init.4th'.  The countdown timer
>>>won't work and most of the keys naturally won't do what they
>>>are supposed to do, but everything else in the menu should
>>>work just as it would at boot.  I tested your colorized
>>>phoenix this way just now and it worked.
>>
>>Oh, one thing I forgot to mention is that you'll need to
>>comment out the 'include' lines in beastie.4th since the
>>testmain environment doesn't implement those words.
>>
> 
> 
> I found I also needed to do something about
>  getsenv
>  setenv
> and
>  unsetenv
> The following at the start of init.4th worked:
> ----------------------------------------------
> : getenv
>   2dup s" loader_color" compare 0= if
>     2drop
>     s" NO"
>     exit
>   then
>   2dup s" beastie_disable" compare 0= if
>     2drop
>     -1
>     exit
>   then
>   2drop
>   -1
>   exit
> ;
> 
> : setenv drop drop ;
> : unsetenv drop ;
> ------------------------------------------------
> Where the fourth line might also be 
>    s" YES"
> 
> Symptoms suggested to me that I had a memory problem but 
> memtest86 ran without difficulty.
> 
> I also found much works differently at boot. Closer examination
> shows that a number of things take different paths oftem using 
> BIOS or simplified code when called at boot  --  I wonder whether
> there is some anomaly in memory allocation when run from boot 
> that raises its ugly head on my machine.
> 
> I have achieved what I want by using a empirically derived 
> context but the underlying problem persists.
> 
> Anyway thanks for your input.
> 
> Malcolm
> 
> 
> 

Look at rev 1.11 of /sys/boot/ficl/loader.c.  I guess I never merged it
back to RELENG_5.  Yes, not having a working getenv word makes some
things act different, but emulating the real functionality would require
simulating a lot more of the underlying loader environment, and that's
more work than I'm able to do right now.

Scott


More information about the freebsd-stable mailing list