Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions CPU_emu/Attributes/OpcodeAttribute.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CPU_emulator;

[AttributeUsage(AttributeTargets.Method)]
internal class OpcodeAttribute : Attribute
{
public int Cycles { get; }
public bool IsUndocumented { get; }
public bool AddsCycleOnPageCross { get; }

public OpcodeAttribute(int cycles, bool undocumented = false, bool pageCross = false)
{
Cycles = cycles;
IsUndocumented = undocumented;
AddsCycleOnPageCross = pageCross;
}
}
202 changes: 101 additions & 101 deletions CPU_emu/CPU_emu.CMD_Methods.cs
Original file line number Diff line number Diff line change
@@ -1,108 +1,108 @@
using System;
using System.Windows.Forms;

namespace CPU_emulator
namespace CPU_emulator;

public partial class CPU
{
public partial class CPU
#region BRK
// BREAK
public void Cmd_00()
{
ExitRequested = true;
OnBreak?.Invoke(this, new CPUEventArgs(this));
}
#endregion

#region LDA
// Load Accumulator immidiate A9
[Opcode(2)]
public void Cmd_A9()
{
SetRegister("A", FetchByte());
SetZeroAndNegativeFlags(A);
}

// Load Accumulator zeropage A5
public void Cmd_A5()
{
SetRegister("A", ReadByteFromMemory(FetchByte()));
SetZeroAndNegativeFlags(A);
}

// Load Accumulator zeropage X B5
public void Cmd_B5()
{
#region BRK
// BREAK
public void Cmd_00()
{
ExitRequested = true;
OnBreak?.Invoke(this, new CPUEventArgs(this));
}
#endregion

#region LDA
// Load Accumulator immidiate A9
public void Cmd_A9()
{
SetRegister("A", FetchByte(ref _CpuCycle));
SetZeroAndNegativeFlags(A);
}

// Load Accumulator zeropage A5
public void Cmd_A5()
{
SetRegister("A", ReadByteFromMemory(FetchByte(ref _CpuCycle)));
SetZeroAndNegativeFlags(A);
}

// Load Accumulator zeropage X B5
public void Cmd_B5()
{
byte b_tmp = FetchByte(ref _CpuCycle);
b_tmp += X; // add regX to address
SetRegister("A", ReadByteFromMemory(b_tmp));
SetZeroAndNegativeFlags(A);
}
#endregion

#region LDX
// Load X immidiate A2
public void Cmd_A2()
{
byte b_tmp = FetchByte(ref _CpuCycle);
SetRegister("X", b_tmp);
SetZeroAndNegativeFlags(X);
}

// Load X zeropage A6
public void Cmd_A6()
{
byte b_tmp = FetchByte(ref _CpuCycle);
SetRegister("X", ReadByteFromMemory(b_tmp));
SetZeroAndNegativeFlags(X);
}

// Load X zeropage Y B6
public void Cmd_B6()
{
byte b_tmp = FetchByte(ref _CpuCycle); // Get ZP address
b_tmp += Y; // add regY to address
SetRegister("X", ReadByteFromMemory(b_tmp));
SetZeroAndNegativeFlags(X);
}

#endregion

#region LDY
// Load Y immidiate A0
public void Cmd_A0()
{
byte b_tmp = FetchByte(ref _CpuCycle);
SetRegister("Y", b_tmp);
SetZeroAndNegativeFlags(Y);
}

// Load Y zeropage A4
public void Cmd_A4()
{
byte b_tmp = FetchByte(ref _CpuCycle);
SetRegister("Y", ReadByteFromMemory(b_tmp));
SetZeroAndNegativeFlags(Y);
}

// Load Y zeropage X B4
public void Cmd_B4()
{
byte b_tmp = FetchByte(ref _CpuCycle); // Get ZP address
b_tmp += X; // add regX to address
SetRegister("Y", ReadByteFromMemory(b_tmp));
SetZeroAndNegativeFlags(Y);
}

#endregion

#region stack push pull

// Push Accumulator on Stack
public void Cmd_48()
{
PushByteToStack(A,ref _CpuCycle);
}

#endregion
byte b_tmp = FetchByte();
b_tmp += X; // add regX to address
SetRegister("A", ReadByteFromMemory(b_tmp));
SetZeroAndNegativeFlags(A);
}
#endregion

#region LDX
// Load X immidiate A2
public void Cmd_A2()
{
byte b_tmp = FetchByte();
SetRegister("X", b_tmp);
SetZeroAndNegativeFlags(X);
}

// Load X zeropage A6
public void Cmd_A6()
{
byte b_tmp = FetchByte();
SetRegister("X", ReadByteFromMemory(b_tmp));
SetZeroAndNegativeFlags(X);
}

// Load X zeropage Y B6
public void Cmd_B6()
{
byte b_tmp = FetchByte(); // Get ZP address
b_tmp += Y; // add regY to address
SetRegister("X", ReadByteFromMemory(b_tmp));
SetZeroAndNegativeFlags(X);
}

#endregion

#region LDY
// Load Y immidiate A0
public void Cmd_A0()
{
byte b_tmp = FetchByte();
SetRegister("Y", b_tmp);
SetZeroAndNegativeFlags(Y);
}

// Load Y zeropage A4
public void Cmd_A4()
{
byte b_tmp = FetchByte();
SetRegister("Y", ReadByteFromMemory(b_tmp));
SetZeroAndNegativeFlags(Y);
}

// Load Y zeropage X B4
public void Cmd_B4()
{
byte b_tmp = FetchByte(); // Get ZP address
b_tmp += X; // add regX to address
SetRegister("Y", ReadByteFromMemory(b_tmp));
SetZeroAndNegativeFlags(Y);
}

#endregion

#region stack push pull

// Push Accumulator on Stack
public void Cmd_48()
{
PushByteToStack(A,ref _CpuCycle);
}

#endregion
}
42 changes: 21 additions & 21 deletions CPU_emu/CPU_emu.opcodes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,29 +8,29 @@ namespace CPU_emulator
{
public partial class CPU
{
private const byte
OC_BRK = 0x00,
// LDA
OC_LDA_IM = 0xA9,
OC_LDA_ZP = 0xA5,
OC_LDA_ZPX = 0xB5,
// LDX
OC_LDX_IM = 0xA2,
OC_LDX_ZP = 0xA6,
OC_LDX_ZPY = 0xB6,
// LDY
OC_LDY_IM = 0xA0,
OC_LDY_ZP = 0xA4,
OC_LDY_ZPX = 0xB4,
//private const byte
// OC_BRK = 0x00,
// // LDA
// OC_LDA_IM = 0xA9,
// OC_LDA_ZP = 0xA5,
// OC_LDA_ZPX = 0xB5,
// // LDX
// OC_LDX_IM = 0xA2,
// OC_LDX_ZP = 0xA6,
// OC_LDX_ZPY = 0xB6,
// // LDY
// OC_LDY_IM = 0xA0,
// OC_LDY_ZP = 0xA4,
// OC_LDY_ZPX = 0xB4,

// JMP
OC_JMP_ABS = 0x4C,
OC_JMP_IND = 0x6C,
// // JMP
// OC_JMP_ABS = 0x4C,
// OC_JMP_IND = 0x6C,

// Stack
OC_PHA = 0x48,
OC_PLA = 0x68
;
// // Stack
// OC_PHA = 0x48,
// OC_PLA = 0x68
// ;


}
Expand Down
Loading