blob: 45e892675395a07e73c5a074b408362cf11d6e66 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
\ *****************************************************************************
\ * 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
;
|