mirror of
https://github.com/creeperlv/SVM.git
synced 2026-01-10 20:39:54 +00:00
Implemented Save.
Added definition of SAVE.
This commit is contained in:
@@ -169,5 +169,34 @@
|
||||
</InstructionParameter>
|
||||
</Parameters>
|
||||
</InstructionDefinition>
|
||||
<InstructionDefinition Id="load" PrimaryInstruction="Save" InstructionCount="1">
|
||||
<Aliases>
|
||||
<Alias Name="load"/>
|
||||
<Alias Name="ld"/>
|
||||
</Aliases>
|
||||
<Parameters>
|
||||
<InstructionParameter>
|
||||
<MatchingItems>
|
||||
<Item Id="Register"/>
|
||||
<Item Id="Word"/>
|
||||
</MatchingItems>
|
||||
<ExpectedValue Type="UInt8" Pos="1" Converter="Register" />
|
||||
</InstructionParameter>
|
||||
<InstructionParameter>
|
||||
<MatchingItems>
|
||||
<Item Id="Number"/>
|
||||
<Item Id="Word"/>
|
||||
</MatchingItems>
|
||||
<ExpectedValue Type="UInt8" Pos="2" Converter="UInt8" />
|
||||
</InstructionParameter>
|
||||
<InstructionParameter>
|
||||
<MatchingItems>
|
||||
<Item Id="Register"/>
|
||||
<Item Id="Word"/>
|
||||
</MatchingItems>
|
||||
<ExpectedValue Type="UInt8" Pos="3" Converter="Register" />
|
||||
</InstructionParameter>
|
||||
</Parameters>
|
||||
</InstructionDefinition>
|
||||
</Definitions>
|
||||
</ISARoot>
|
||||
@@ -36,6 +36,8 @@
|
||||
// 0 1 2 3
|
||||
// Load [R]Address [I]Len [R]T
|
||||
Load,
|
||||
// 0 1 2 3
|
||||
// Load [R]Src [I]Len [R]TAddr
|
||||
Save,
|
||||
// 0
|
||||
// Call
|
||||
|
||||
@@ -182,6 +182,15 @@ namespace SVM.Core
|
||||
|
||||
break;
|
||||
case PrimaryInstruction.Save:
|
||||
{
|
||||
var Reg = Instruction.GetData<byte>(1);
|
||||
var Length = Instruction.GetData<byte>(2);
|
||||
var Target = Instruction.GetData<byte>(3);
|
||||
var tgtSVMPtr = registers.GetData<SVMPointer>(Target);
|
||||
var tgtPtr = GetPointer(tgtSVMPtr);
|
||||
var srcPtr = registers.GetPtr(Reg);
|
||||
Buffer.MemoryCopy(srcPtr, (byte*)tgtPtr, Length, Length);
|
||||
}
|
||||
break;
|
||||
case PrimaryInstruction.Call:
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user