diff --git a/src/Chip8.Analysis/Chip8.Analysis.csproj b/src/Chip8.Analysis/Chip8.Analysis.csproj new file mode 100644 index 0000000..bf928c9 --- /dev/null +++ b/src/Chip8.Analysis/Chip8.Analysis.csproj @@ -0,0 +1,16 @@ + + + + net6.0 + disable + enable + Chip8.Analysis + Chip8.Analysis + 10 + + + + + + + diff --git a/src/Chip8.Analysis/InstructionCategory.cs b/src/Chip8.Analysis/InstructionCategory.cs new file mode 100644 index 0000000..6f6ab8d --- /dev/null +++ b/src/Chip8.Analysis/InstructionCategory.cs @@ -0,0 +1,14 @@ +namespace Chip8.Analysis; + +public enum InstructionCategory +{ + Control, + Skip, + Arithmetic, + Memory, + Draw, + Io, + Timer, + Sound, + Data, +} diff --git a/src/Chip8.Analysis/InstructionKind.cs b/src/Chip8.Analysis/InstructionKind.cs new file mode 100644 index 0000000..02ad87f --- /dev/null +++ b/src/Chip8.Analysis/InstructionKind.cs @@ -0,0 +1,49 @@ +namespace Chip8.Analysis; + +public enum InstructionKind +{ + System, + ClearScreen, + Return, + ScrollDown, + ScrollUp, + ScrollRight, + ScrollLeft, + Exit, + LowRes, + HiRes, + Jump, + Call, + SkipEqualImmediate, + SkipNotEqualImmediate, + SkipEqualRegister, + SkipNotEqualRegister, + SkipKeyPressed, + SkipKeyReleased, + LoadImmediate, + AddImmediate, + Arithmetic, + LoadIndex, + JumpWithOffset, + Random, + Draw, + LoadDelay, + WaitKey, + SetDelay, + SetSound, + AddIndex, + LoadFont, + LoadBigFont, + StoreBcd, + StoreRegisters, + LoadRegisters, + StoreFlags, + LoadFlags, + LoadLong, + Plane, + Audio, + Pitch, + SaveRange, + LoadRange, + Data, +} diff --git a/src/Chip8.Analysis/OpcodeFields.cs b/src/Chip8.Analysis/OpcodeFields.cs new file mode 100644 index 0000000..bd9f152 --- /dev/null +++ b/src/Chip8.Analysis/OpcodeFields.cs @@ -0,0 +1,33 @@ +using System.Globalization; + +namespace Chip8.Analysis; + +public readonly struct OpcodeFields +{ + public OpcodeFields(ushort opcode) + { + this.opcode = opcode; + x = (opcode & 0x0F00) >> 8; + y = (opcode & 0x00F0) >> 4; + n = opcode & 0x000F; + nn = opcode & 0x00FF; + nnn = (ushort)(opcode & 0x0FFF); + highNibble = (opcode & 0xF000) >> 12; + } + + public ushort opcode { get; } + public int highNibble { get; } + public int x { get; } + public int y { get; } + public int n { get; } + public int nn { get; } + public ushort nnn { get; } + + public override string ToString() + { + return "0x" + opcode.ToString("X4", CultureInfo.InvariantCulture) + + " x=" + x + " y=" + y + " n=" + n + + " nn=0x" + nn.ToString("X2", CultureInfo.InvariantCulture) + + " nnn=0x" + nnn.ToString("X3", CultureInfo.InvariantCulture); + } +}