Difference between revisions of "SCI/Specifications/SCI virtual machine/The Sierra PMachine"

Jump to navigation Jump to search
Updated `lea` bytes
m (Text replacement - "</source>" to "</syntaxhighlight>")
(Updated `lea` bytes)
 
(2 intermediate revisions by 2 users not shown)
Line 412: Line 412:




;<nowiki>op 0x46: calle W script, W dispindex, B framesize (5 bytes)</nowiki>
;<nowiki>op 0x46: calle W script, W dispindex, B framesize (6 bytes)</nowiki>
;<nowiki>op 0x47: calle B script, B dispindex, B framesize (4 bytes)</nowiki>
;<nowiki>op 0x47: calle B script, B dispindex, B framesize (4 bytes)</nowiki>
:Call external script
:Call external script
Line 487: Line 487:




;<nowiki>op 0x5a: lea W type, W index ( bytes)</nowiki>
;<nowiki>op 0x5a: lea W type, W index (5 bytes)</nowiki>
;<nowiki>op 0x5b: lea B type, B index ( bytes)</nowiki>
;<nowiki>op 0x5b: lea B type, B index (3 bytes)</nowiki>
:Load Effective Address
:Load Effective Address
:The variable type is a bit-field used as follows:
:The variable type is a bit-field used as follows:
Line 504: Line 504:
::set if the accumulator is to be used as additional index  
::set if the accumulator is to be used as additional index  
:::Because it is so hard to explain, I have made a transcription of it here:
:::Because it is so hard to explain, I have made a transcription of it here:
<syntaxhighlight lang="C">
<syntaxhighlight lang="c">
short *vars[4];
short *vars[4];


Line 511: Line 511:
int lea(int vt, int vi)
int lea(int vt, int vi)
{
{
   return &((vars[(vt >> 1) &amp; 3])[vt &amp; 0x10 ? vi+acc : vi]);
   return &((vars[(vt >> 1) & 3])[vt & 0x10 ? vi+acc : vi]);
}
}
</syntaxhighlight>
</syntaxhighlight>
2

edits

Navigation menu