\ ***************************************************************************** \ * Copyright (c) 2004, 2008 IBM Corporation \ * All rights reserved. \ * This program and the accompanying materials \ * are made available under the terms of the BSD License \ * which accompanies this distribution, and is available at \ * http://www.opensource.org/licenses/bsd-license.php \ * \ * Contributors: \ * IBM Corporation - initial implementation \ ****************************************************************************/ : (boot) ( -- ) s" Executing following boot-command: " boot-command $cat nvramlog-write-string-cr s" boot-command" evaluate \ get boot command ['] evaluate catch ?dup IF \ and execute it ." boot attempt returned: " abort"-str @ count type cr nip nip \ drop string from 1st evaluate throw THEN ; \ Note: The following ESC sequences has to be handled: \ 1B 4F 50 \ 1B 5B 31 31 7E \ Reads and converts the function key. \ key = F1 -- n = 1 : (function-key) ( -- n ) key? IF key CASE 50 OF 1 ENDOF 7e OF 1 ENDOF dup OF 0 ENDOF ENDCASE THEN ; \ Checks if an ESC sequence occurs. : (esc-sequence) ( -- n ) key? IF key CASE 4f OF (function-key) ENDOF 5b OF key key (function-key) ENDOF dup OF 0 ENDOF ENDCASE THEN ; : (s-pressed) ( -- ) s" An 's' has been pressed. Entering Open Firmware Prompt" nvramlog-write-string-cr ; : (t-pressed) ( -- ) s" /ibm,vtpm" find-node ?dup IF s" vtpm-menu" rot $call-static THEN ; : (boot?) ( -- ) \ last step before we boot we give up physical presence on the TPM s" /ibm,vtpm" find-node ?dup IF s" leave-firmware" rot $call-static THEN of-prompt? not auto-boot? and IF (boot) THEN ; \ Watchdog will be rearmed during load if use-load-watchdog variable is TRUE TRUE VALUE use-load-watchdog? : boot-menu-start boot-menu ?dup IF s" boot " 2swap $cat ['] evaluate catch ?dup IF ." boot attempt returned: " abort"-str @ count type cr throw THEN 0 0 load-list 2! THEN ; : boot-menu-enabled? ( -- true|false ) s" qemu,boot-menu" get-chosen IF decode-int 1 = IF 2drop TRUE EXIT THEN 2drop THEN FALSE ; : f12-pressed? 34 = >r 32 = r> and IF TRUE ELSE FALSE THEN ; : start-it ( -- ) key? IF key CASE [char] s OF (s-pressed) ENDOF [char] t OF (t-pressed) (boot?) ENDOF 1b OF (esc-sequence) CASE 1 OF console-clean-fifo f12-pressed? boot-menu-enabled? and IF boot-menu-start ELSE (boot?) THEN ENDOF dup OF (boot?) ENDOF ENDCASE ENDOF dup OF (boot?) ENDOF ENDCASE ELSE (boot?) THEN disable-watchdog FALSE to use-load-watchdog? .banner ;