Implemented Save.

Added definition of SAVE.
This commit is contained in:
2025-08-06 05:26:57 +10:00
parent 97e3ce81eb
commit 18ad735a32
3 changed files with 40 additions and 0 deletions

View File

@@ -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>

View File

@@ -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

View File

@@ -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;