mirror of
https://github.com/MoleskiCoder/EightBitNet.git
synced 2024-12-23 02:29:59 +00:00
The m6502 intermediate variable should really be of type Register16
Signed-off-by: Adrian Conlon <Adrian.conlon@gmail.com>
This commit is contained in:
parent
999bdf71ff
commit
9ac2c53685
@ -12,7 +12,7 @@ namespace EightBit
|
|||||||
private const byte RSTvector = 0xfc; // RST vector
|
private const byte RSTvector = 0xfc; // RST vector
|
||||||
private const byte NMIvector = 0xfa; // NMI vector
|
private const byte NMIvector = 0xfa; // NMI vector
|
||||||
|
|
||||||
private ushort intermediate;
|
private Register16 intermediate;
|
||||||
|
|
||||||
private bool handlingRESET = false;
|
private bool handlingRESET = false;
|
||||||
private bool handlingNMI = false;
|
private bool handlingNMI = false;
|
||||||
@ -658,8 +658,8 @@ namespace EightBit
|
|||||||
private ushort Address_relative_byte()
|
private ushort Address_relative_byte()
|
||||||
{
|
{
|
||||||
var offset = (sbyte)this.FetchByte();
|
var offset = (sbyte)this.FetchByte();
|
||||||
this.intermediate = (ushort)(this.PC().Word + offset);
|
this.intermediate.Word = (ushort)(this.PC().Word + offset);
|
||||||
return this.intermediate;
|
return this.intermediate.Word;
|
||||||
}
|
}
|
||||||
|
|
||||||
private byte AM_Immediate() => this.FetchByte();
|
private byte AM_Immediate() => this.FetchByte();
|
||||||
@ -760,10 +760,9 @@ namespace EightBit
|
|||||||
{
|
{
|
||||||
var returned = this.SUB(operand, data, ~this.P & (int)StatusBits.CF);
|
var returned = this.SUB(operand, data, ~this.P & (int)StatusBits.CF);
|
||||||
|
|
||||||
var difference = this.intermediate;
|
this.AdjustNZ(this.intermediate.Low);
|
||||||
this.AdjustNZ(Chip.LowByte(difference));
|
this.P = SetFlag(this.P, StatusBits.VF, (operand ^ data) & (operand ^ this.intermediate.Low) & (int)StatusBits.NF);
|
||||||
this.P = SetFlag(this.P, StatusBits.VF, (operand ^ data) & (operand ^ Chip.LowByte(difference)) & (int)StatusBits.NF);
|
this.P = ClearFlag(this.P, StatusBits.CF, this.intermediate.High);
|
||||||
this.P = ClearFlag(this.P, StatusBits.CF, Chip.HighByte(difference));
|
|
||||||
|
|
||||||
return returned;
|
return returned;
|
||||||
}
|
}
|
||||||
@ -775,13 +774,13 @@ namespace EightBit
|
|||||||
|
|
||||||
private byte SUB_b(byte operand, byte data, int borrow)
|
private byte SUB_b(byte operand, byte data, int borrow)
|
||||||
{
|
{
|
||||||
this.intermediate = (ushort)(operand - data - borrow);
|
this.intermediate.Word = (ushort)(operand - data - borrow);
|
||||||
return Chip.LowByte(this.intermediate);
|
return this.intermediate.Low;
|
||||||
}
|
}
|
||||||
|
|
||||||
private byte SUB_d(byte operand, byte data, int borrow)
|
private byte SUB_d(byte operand, byte data, int borrow)
|
||||||
{
|
{
|
||||||
this.intermediate = (ushort)(operand - data - borrow);
|
this.intermediate.Word = (ushort)(operand - data - borrow);
|
||||||
|
|
||||||
var low = (byte)(LowNibble(operand) - LowNibble(data) - borrow);
|
var low = (byte)(LowNibble(operand) - LowNibble(data) - borrow);
|
||||||
var lowNegative = low & (byte)StatusBits.NF;
|
var lowNegative = low & (byte)StatusBits.NF;
|
||||||
@ -803,7 +802,7 @@ namespace EightBit
|
|||||||
private byte ADC(byte operand, byte data)
|
private byte ADC(byte operand, byte data)
|
||||||
{
|
{
|
||||||
var returned = this.ADD(operand, data, this.Carry);
|
var returned = this.ADD(operand, data, this.Carry);
|
||||||
this.AdjustNZ(Chip.LowByte(this.intermediate));
|
this.AdjustNZ(this.intermediate.Low);
|
||||||
return returned;
|
return returned;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -814,17 +813,17 @@ namespace EightBit
|
|||||||
|
|
||||||
private byte ADD_b(byte operand, byte data, int carry)
|
private byte ADD_b(byte operand, byte data, int carry)
|
||||||
{
|
{
|
||||||
this.intermediate = (ushort)(operand + data + carry);
|
this.intermediate.Word = (ushort)(operand + data + carry);
|
||||||
|
|
||||||
this.P = SetFlag(this.P, StatusBits.VF, ~(operand ^ data) & (operand ^ Chip.LowByte(this.intermediate)) & (int)StatusBits.NF);
|
this.P = SetFlag(this.P, StatusBits.VF, ~(operand ^ data) & (operand ^ this.intermediate.Low) & (int)StatusBits.NF);
|
||||||
this.P = SetFlag(this.P, StatusBits.CF, Chip.HighByte(this.intermediate) & (int)StatusBits.CF);
|
this.P = SetFlag(this.P, StatusBits.CF, this.intermediate.High & (int)StatusBits.CF);
|
||||||
|
|
||||||
return Chip.LowByte(this.intermediate);
|
return this.intermediate.Low;
|
||||||
}
|
}
|
||||||
|
|
||||||
private byte ADD_d(byte operand, byte data, int carry)
|
private byte ADD_d(byte operand, byte data, int carry)
|
||||||
{
|
{
|
||||||
this.intermediate = (ushort)(operand + data + carry);
|
this.intermediate.Word = (ushort)(operand + data + carry);
|
||||||
|
|
||||||
var low = (byte)(LowNibble(operand) + LowNibble(data) + carry);
|
var low = (byte)(LowNibble(operand) + LowNibble(data) + carry);
|
||||||
if (low > 9)
|
if (low > 9)
|
||||||
@ -862,9 +861,9 @@ namespace EightBit
|
|||||||
|
|
||||||
private void CMP(byte first, byte second)
|
private void CMP(byte first, byte second)
|
||||||
{
|
{
|
||||||
this.intermediate = (ushort)(first - second);
|
this.intermediate.Word = (ushort)(first - second);
|
||||||
this.AdjustNZ(Chip.LowByte(this.intermediate));
|
this.AdjustNZ(this.intermediate.Low);
|
||||||
this.P = ClearFlag(this.P, StatusBits.CF, Chip.HighByte(this.intermediate));
|
this.P = ClearFlag(this.P, StatusBits.CF, this.intermediate.High);
|
||||||
}
|
}
|
||||||
|
|
||||||
private byte DEC(byte value) => this.Through(--value);
|
private byte DEC(byte value) => this.Through(--value);
|
||||||
@ -948,7 +947,7 @@ namespace EightBit
|
|||||||
private void AXS(byte value)
|
private void AXS(byte value)
|
||||||
{
|
{
|
||||||
this.X = this.Through(this.SUB((byte)(this.A & this.X), value));
|
this.X = this.Through(this.SUB((byte)(this.A & this.X), value));
|
||||||
this.P = ClearFlag(this.P, StatusBits.CF, Chip.HighByte(this.intermediate));
|
this.P = ClearFlag(this.P, StatusBits.CF, this.intermediate.High);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DCP(byte value)
|
private void DCP(byte value)
|
||||||
|
Loading…
Reference in New Issue
Block a user