Hello world finally works.

Sample working code:
.data:
text0 "Hello, World!\n"
.code:
sd.int32 $4 123
sd.int32 $5 321
sd.int32 $10 1
sd.int32 $11 text0
sd.int32 $12 14
sys 4

sd.int32 $10 100
sys 1
bmath add Int32 $4 $5 $6
This commit is contained in:
2025-08-01 03:43:09 +10:00
parent 269a2b51be
commit 6eb87e433e
11 changed files with 210 additions and 28 deletions

View File

@@ -64,7 +64,6 @@ namespace SVM.Core
ErrorIDOffset = Config.EIDRegisterID;
}
var PC = registers.GetData<ulong>((int)PCOffset);
Console.WriteLine($"{PC},{Program->InstructionCount}");
return PC >= Program->InstructionCount;
}
@@ -85,7 +84,6 @@ namespace SVM.Core
var currentInstPtr = GetPointer(PC);
var Instruction = currentInstPtr.GetData<SVMInstruction>();
var def = Instruction.GetDef();
Console.WriteLine(def);
fixed (MState* statePtr = &MachineState)
{
@@ -165,7 +163,7 @@ namespace SVM.Core
var dataPtr = GetPointer(PC);
var data = dataPtr.GetData<int>();
registers.SetDataInRegister(Reg, data);
Console.WriteLine($"SVM:SD:{data} form PC={PC}");
//Console.WriteLine($"SVM:SD:{data} form PC={PC}");
}
break;
case PrimaryInstruction.JAL:
@@ -190,7 +188,7 @@ namespace SVM.Core
}
else
{
registers.SetData((int)ErrorIDOffset,ErrorIDs.SyscallCallNotExist);
registers.SetData((int)ErrorIDOffset, ErrorIDs.SyscallCallNotExist);
}
}
else
@@ -305,12 +303,11 @@ namespace SVM.Core
offset1 = Program->DataSize;
if (absoluteAddress.offset < offset0)
{
return (IntPtr)(Program->instructions + absoluteAddress.offset / sizeof(SVMInstruction));
}
else if (absoluteAddress.offset < offset1)
else if (absoluteAddress.offset < offset0 + offset1)
{
return IntPtr.Add((IntPtr)Program->instructions, (int)(absoluteAddress.offset - offset0));
return IntPtr.Add((IntPtr)Program->data, (int)(absoluteAddress.offset - offset0));
}
}
@@ -358,6 +355,10 @@ namespace SVM.Core
{
public uint offset;
public uint index;
public override string ToString()
{
return $"{index}+{offset}";
}
}
public class SVMConfig
{