Difference between revisions of "How Local Variables in Forth Work --- Using Apple’s Open Firmware Implementation"

From OpenBIOS
Jump to: navigation, search
Line 19: Line 19:
 
<FONT COLOR="#003399"><B>Example 1</B></FONT><BR>
 
<FONT COLOR="#003399"><B>Example 1</B></FONT><BR>
 
<BR>
 
<BR>
: myword { ; cat dog }<BR>
+
<pre>
;<BR>
+
: myword { ; cat dog }  
 +
;
 +
</pre>
 +
<BR>
 +
<BR>
 
<BR>
 
<BR>
 
Omitting the semicolon will initialize the local variable&#146;s values to values popped from the stack. Make sure the stack has enough values in it before proceeding. <BR>
 
Omitting the semicolon will initialize the local variable&#146;s values to values popped from the stack. Make sure the stack has enough values in it before proceeding. <BR>
Line 31: Line 35:
 
<FONT COLOR="#003399"><B>Example 2</B></FONT><BR>
 
<FONT COLOR="#003399"><B>Example 2</B></FONT><BR>
 
<BR>
 
<BR>
: myword { ; cat dog }<BR>
+
<pre>
4 -&gt; cat<BR>
+
: myword { ; cat dog }
5 -&gt; dog<BR>
+
4 -> cat
;<BR>
+
5 -> dog
 +
;
 +
</pre>
 +
<BR>
 
<BR>
 
<BR>
 
In the above example, the numbers are each pushed into the stack first. Then the -&gt; word pops a value out of the stack and sets each variable&#146;s value to a popped value. If a value is already in the stack, the following code would work as well: -&gt; cat (The 4 has been omitted).<BR>
 
In the above example, the numbers are each pushed into the stack first. Then the -&gt; word pops a value out of the stack and sets each variable&#146;s value to a popped value. If a value is already in the stack, the following code would work as well: -&gt; cat (The 4 has been omitted).<BR>
Line 44: Line 51:
 
<FONT COLOR="#003399"><B>Example 3</B></FONT><BR>
 
<FONT COLOR="#003399"><B>Example 3</B></FONT><BR>
 
<BR>
 
<BR>
: myword { ; cat dog }<BR>
+
<pre>
<BR>
+
: myword { ; cat dog }
4 -&gt; cat<BR>
+
 
5 -&gt; dog<BR>
+
4 -> cat
<BR>
+
5 -> dog
cat  \ cat&#146;s value pushed onto stack  ( - cat)<BR>
+
 
dog  \ dog&#146;s value pushed onto stack  (cat - cat dog )<BR>
+
cat  \ cat's value pushed onto stack  ( - cat)
+<BR>
+
dog  \ dog's value pushed onto stack  (cat - cat dog )
 +
+
 +
 
 +
cr
 +
." Total animals = " .
 +
cr
 +
;
 +
</pre>
 
<BR>
 
<BR>
cr<BR>
 
.&#148; Total animals = &#147; . <BR>
 
cr<BR>
 
;<BR>
 
 
<BR>
 
<BR>
 
<BR>
 
<BR>
Line 63: Line 73:
 
The reason why OpenBIOS can&#146;t boot Mac OS X is because of missing local variable support. Maybe you can help fix this problem. <BR>
 
The reason why OpenBIOS can&#146;t boot Mac OS X is because of missing local variable support. Maybe you can help fix this problem. <BR>
 
<BR>
 
<BR>
</FONT></P>
+
</FONT>

Revision as of 19:52, 25 September 2010


Contents:
How to try out these code examples
Declaring local variables
Setting local variables
Obtaining local variables&#146; values
Booting Mac OS X in OpenBIOS


How to try out these code examples

The following example code may be entered and ran in Apple&#146;s Open Firmware. In order to access Open Firmware, just hold down Command-Option-O-F while you boot your pre-Intel Mac. PowerPC iMacs and PowerBooks, iBooks, PowerMac G3&#146;s, G4&#146;s, and G5&#146;s all have Open Firmware built-in.


Declaring local variables:

Place curly braces next to the word name. The curly braces must be on the same line as the word&#146;s name. The semicolon is optional. The semicolon lets the system know that the variables following it will not be initializing their values to the values that would have been popped from the stack.

Example 1

: myword { ; cat dog } 
;




Omitting the semicolon will initialize the local variable&#146;s values to values popped from the stack. Make sure the stack has enough values in it before proceeding.


Setting local variables:

The word &#147;->&#148; (hyphen greater-than) is used to set the values of local variables.

Example 2

: myword { ; cat dog }
4 -> cat
5 -> dog
;



In the above example, the numbers are each pushed into the stack first. Then the -> word pops a value out of the stack and sets each variable&#146;s value to a popped value. If a value is already in the stack, the following code would work as well: -> cat (The 4 has been omitted).

Obtaining a local variable&#146;s value

To push a local variable&#146;s value onto the stack, just enter a local variable&#146;s name in a word.

Example 3

: myword { ; cat dog }

4 -> cat
5 -> dog

cat  \ cat's value pushed onto stack   ( - cat)
dog  \ dog's value pushed onto stack   (cat - cat dog )
+

cr
." Total animals = " . 
cr
;




Booting Mac OS X using OpenBIOS.

The reason why OpenBIOS can&#146;t boot Mac OS X is because of missing local variable support. Maybe you can help fix this problem.