| \ ***************************************************************************** |
| \ * 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 |
| ; |
| |
| : (boot?) ( -- ) |
| of-prompt? not auto-boot? and IF |
| (boot) |
| THEN |
| ; |
| |
| |
| #include "sms/sms-load.fs" |
| |
| |
| \ Watchdog will be rearmed during load if use-load-watchdog variable is TRUE |
| TRUE VALUE use-load-watchdog? |
| |
| 1 value my-boot-dev |
| 1 value digit-val |
| 0 value boot-dev-no |
| |
| : boot-selected |
| 1 to my-boot-dev |
| BEGIN parse-word dup WHILE |
| boot-dev-no my-boot-dev = IF |
| s" boot " 2swap $cat |
| ['] evaluate catch ?dup IF \ and execute it |
| ." boot attempt returned: " |
| abort"-str @ count type cr |
| throw |
| THEN |
| 0 0 load-list 2! |
| UNLOOP EXIT |
| ELSE |
| 2drop |
| THEN |
| my-boot-dev 1 + to my-boot-dev |
| REPEAT 2drop 0 0 load-list 2! |
| |
| (boot) |
| ; |
| |
| : boot-start |
| \ Remove multiple F12 key presses if any |
| BEGIN key? WHILE |
| key drop |
| REPEAT |
| |
| decimal |
| BEGIN parse-word dup WHILE |
| my-boot-dev (u.) s" . " $cat type 2dup type ." : " de-alias type cr |
| my-boot-dev 1 + to my-boot-dev |
| REPEAT 2drop 0 0 load-list 2! |
| |
| cr BEGIN KEY dup emit |
| dup isdigit IF |
| dup 30 - to digit-val |
| boot-dev-no a * digit-val + to boot-dev-no |
| THEN |
| d = UNTIL |
| |
| boot-dev-no my-boot-dev < IF |
| s" boot-selected " s" $bootdev" evaluate $cat strdup evaluate |
| ELSE |
| ." Invalid choice!" cr |
| THEN |
| hex |
| ; |
| |
| : boot-menu-start |
| ." Select boot device:" cr cr |
| s" boot-start " s" $bootdev" evaluate $cat strdup evaluate |
| ; |
| |
| : 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 |
| 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 |
| ; |