mirror of
https://github.com/MoleskiCoder/EightBitNet.git
synced 2026-04-19 15:16:41 +00:00
Drop Register16 support (replaced with explicit ushort), add some unit tests (Chip class only at present)
Now runs some instructions before going wrong... Signed-off-by: Adrian Conlon <Adrian.conlon@gmail.com>
This commit is contained in:
+24
-25
@@ -5,8 +5,8 @@
|
||||
public abstract class IntelProcessor : LittleEndianProcessor
|
||||
{
|
||||
private readonly IntelOpCodeDecoded[] decodedOpCodes;
|
||||
private Register16 sp;
|
||||
private Register16 memptr;
|
||||
private ushort sp;
|
||||
private ushort memptr;
|
||||
|
||||
private PinLevel haltLine;
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
: base(bus)
|
||||
{
|
||||
decodedOpCodes = new IntelOpCodeDecoded[0x100];
|
||||
sp = new Register16((ushort)Mask.Mask16);
|
||||
memptr = new Register16();
|
||||
sp = (ushort)Mask.Mask16;
|
||||
memptr = (ushort)Mask.Mask16;
|
||||
|
||||
for (int i = 0; i < 0x100; ++i)
|
||||
decodedOpCodes[i] = new IntelOpCodeDecoded((byte)i);
|
||||
@@ -30,30 +30,30 @@
|
||||
|
||||
protected bool Halted => HALT().Lowered();
|
||||
|
||||
public Register16 SP { get => sp; set => sp = value; }
|
||||
public Register16 MEMPTR { get => memptr; set => memptr = value; }
|
||||
public ushort SP { get => sp; set => sp = value; }
|
||||
public ushort MEMPTR { get => memptr; set => memptr = value; }
|
||||
|
||||
public abstract Register16 AF { get; set; }
|
||||
public byte A { get { return AF.High; } set { AF.High = value; } }
|
||||
public byte F { get { return AF.Low; } set { AF.Low = value; } }
|
||||
public abstract ushort AF { get; set; }
|
||||
public byte A { get { return HighByte(AF); } set { AF = (ushort)(LowerPart(AF) | PromoteByte(value)); } }
|
||||
public byte F { get { return LowByte(AF); } set { AF = (ushort)(HigherPart(AF) | value); } }
|
||||
|
||||
public abstract Register16 BC { get; set; }
|
||||
public byte B { get { return BC.High; } set { BC.High = value; } }
|
||||
public byte C { get { return BC.Low; } set { BC.Low = value; } }
|
||||
public abstract ushort BC { get; set; }
|
||||
public byte B { get { return HighByte(AF); } set { BC = (ushort)(LowerPart(BC) | PromoteByte(value)); } }
|
||||
public byte C { get { return LowByte(AF); } set { BC = (ushort)(HigherPart(BC) | value); } }
|
||||
|
||||
public abstract Register16 DE { get; set; }
|
||||
public byte D { get { return DE.High; } set { DE.High = value; } }
|
||||
public byte E { get { return DE.Low; } set { DE.Low = value; } }
|
||||
public abstract ushort DE { get; set; }
|
||||
public byte D { get { return HighByte(AF); } set { DE = (ushort)(LowerPart(DE) | PromoteByte(value)); } }
|
||||
public byte E { get { return LowByte(AF); } set { DE = (ushort)(HigherPart(DE) | value); } }
|
||||
|
||||
public abstract Register16 HL { get; set; }
|
||||
public byte H { get { return HL.High; } set { HL.High = value; } }
|
||||
public byte L { get { return HL.Low; } set { HL.Low = value; } }
|
||||
public abstract ushort HL { get; set; }
|
||||
public byte H { get { return HighByte(AF); } set { HL = (ushort)(LowerPart(AF) | PromoteByte(value)); } }
|
||||
public byte L { get { return LowByte(AF); } set { HL = (ushort)(HigherPart(AF) | value); } }
|
||||
|
||||
public override void RaisePOWER()
|
||||
{
|
||||
base.RaisePOWER();
|
||||
RaiseHALT();
|
||||
SP = AF = BC = DE = HL = new Register16((ushort)Mask.Mask16);
|
||||
SP = AF = BC = DE = HL = (ushort)Mask.Mask16;
|
||||
}
|
||||
|
||||
public virtual void RaiseHALT()
|
||||
@@ -79,20 +79,20 @@
|
||||
protected override void HandleRESET()
|
||||
{
|
||||
base.HandleRESET();
|
||||
PC.Word = 0;
|
||||
PC = 0;
|
||||
}
|
||||
|
||||
protected sealed override void Push(byte value) => Bus.Write(--SP, value);
|
||||
protected sealed override byte Pop() => Bus.Read(SP++);
|
||||
|
||||
protected sealed override Register16 GetWord()
|
||||
protected sealed override ushort GetWord()
|
||||
{
|
||||
var returned = base.GetWord();
|
||||
MEMPTR = Bus.Address;
|
||||
return returned;
|
||||
}
|
||||
|
||||
protected sealed override void SetWord(Register16 value)
|
||||
protected sealed override void SetWord(ushort value)
|
||||
{
|
||||
base.SetWord(value);
|
||||
MEMPTR = Bus.Address;
|
||||
@@ -102,8 +102,7 @@
|
||||
|
||||
protected void Restart(byte address)
|
||||
{
|
||||
MEMPTR.Low = address;
|
||||
MEMPTR.High = 0;
|
||||
MEMPTR = address;
|
||||
Call(MEMPTR);
|
||||
}
|
||||
|
||||
@@ -132,7 +131,7 @@
|
||||
|
||||
protected void JumpRelative(sbyte offset)
|
||||
{
|
||||
MEMPTR.Word = (ushort)(PC.Word + offset);
|
||||
MEMPTR = (ushort)(PC + offset);
|
||||
Jump(MEMPTR);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user