StoicGoose.Unity/Assets/Plugins/StoicGooseUnity/StoicGoose.Core/CPU/V30MZ.Segments.cs

46 lines
980 B
C#

using System;
namespace StoicGoose.Core.CPU
{
public sealed partial class V30MZ
{
enum SegmentNumber : byte
{
ES = 0b00,
CS = 0b01,
SS = 0b10,
DS = 0b11,
Unset = 0xFF
}
private ushort GetSegment(SegmentNumber seg)
{
return seg switch
{
SegmentNumber.ES => es,
SegmentNumber.CS => cs,
SegmentNumber.SS => ss,
SegmentNumber.DS => ds,
_ => throw new ArgumentException("Invalid segment", nameof(seg)),
};
}
private void SetSegment(SegmentNumber seg, ushort value)
{
switch (seg)
{
case SegmentNumber.ES: es = value; break;
case SegmentNumber.CS: cs = value; break;
case SegmentNumber.SS: ss = value; break;
case SegmentNumber.DS: ds = value; break;
default: throw new ArgumentException("Invalid segment", nameof(seg));
}
}
private ushort GetSegmentViaOverride(SegmentNumber seg)
{
return GetSegment(prefixSegOverride != SegmentNumber.Unset ? prefixSegOverride : seg);
}
}
}