aboutsummaryrefslogtreecommitdiff
path: root/slof/fs/start-up.fs
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
;