Implemented SNA files. More OpCodes. Chuckie Egg Title SCreen!

This commit is contained in:
2026-04-19 00:26:00 +01:00
parent 717c431b9c
commit ed64eb2ebe
4 changed files with 204 additions and 23 deletions

View File

@@ -323,6 +323,7 @@ namespace Desktop
case 0x08:
mnemonic = "EX AF, AF'";
break;
case 0x0A: mnemonic = "LD A, (BC)"; break;
case 0x12: mnemonic = "LD (DE), A"; break;
case 0x13: mnemonic = "INC DE"; break;
case 0x33: mnemonic = "INC SP"; break;
@@ -391,9 +392,7 @@ namespace Desktop
break;
case 0x18:
sbyte dUnconditional = (sbyte)_memoryBus.Read((ushort)(currentPc + 1));
// Calculate the target address based on the PC *after* this 2-byte instruction
ushort targetAddressUnconditional = (ushort)(currentPc + 2 + dUnconditional);
mnemonic = $"JR 0x{targetAddressUnconditional:X4}";
instructionLength = 2;
break;
@@ -981,6 +980,7 @@ namespace Desktop
switch (extendedOp)
{
case 0x42: mnemonic = "SBC HL, BC"; instructionLength = 2; break;
case 0x43:
ushort bcAddr = (ushort)(_memoryBus.Read((ushort)(currentPc + 2)) | (_memoryBus.Read((ushort)(currentPc + 3)) << 8));
mnemonic = $"LD (0x{bcAddr:X4}), BC";
@@ -994,11 +994,17 @@ namespace Desktop
mnemonic = "LD I, A";
instructionLength = 2; // 0xED + 0x47
break;
// Inside your ED prefix switch statement in the debugger:
case 0x4A: mnemonic = "ADC HL, BC"; instructionLength = 2; break;
case 0x4B:
ushort addr4B = (ushort)(_memoryBus.Read((ushort)(currentPc + 2)) | (_memoryBus.Read((ushort)(currentPc + 3)) << 8));
mnemonic = $"LD BC, (0x{addr4B:X4})";
instructionLength = 4;
break;
case 0x4D:
mnemonic = "RETI";
instructionLength = 2;
break;
case 0x52:
mnemonic = "SBC HL, DE";
instructionLength = 2; // ED 52
@@ -1012,11 +1018,14 @@ namespace Desktop
mnemonic = "IM 1";
instructionLength = 2;
break;
case 0x5A: mnemonic = "ADC HL, DE"; instructionLength = 2; break;
case 0x5B:
ushort addr5B = (ushort)(_memoryBus.Read((ushort)(currentPc + 2)) | (_memoryBus.Read((ushort)(currentPc + 3)) << 8));
mnemonic = $"LD DE, (0x{addr5B:X4})";
instructionLength = 4;
break;
case 0x6A: mnemonic = "ADC HL, HL"; instructionLength = 2; break;
case 0x62: mnemonic = "SBC HL, HL"; instructionLength = 2; break;
case 0x73:
ushort addr73 = (ushort)(_memoryBus.Read((ushort)(currentPc + 2)) | (_memoryBus.Read((ushort)(currentPc + 3)) << 8));
mnemonic = $"LD (0x{addr73:X4}), SP";
@@ -1030,6 +1039,7 @@ namespace Desktop
mnemonic = "IN A, (C)";
instructionLength = 2;
break;
case 0x7A: mnemonic = "ADC HL, SP"; instructionLength = 2; break;
case 0x7B: // LD SP, (nn)
ushort nn = (ushort)(_memoryBus.Read((ushort)(currentPc + 2)) | (_memoryBus.Read((ushort)(currentPc + 3)) << 8));
mnemonic = $"LD SP, (0x{nn:X4})";

View File

@@ -32,6 +32,7 @@
menuStrip1 = new MenuStrip();
fileToolStripMenuItem = new ToolStripMenuItem();
openToolStripMenuItem = new ToolStripMenuItem();
openSnapshotToolStripMenuItem = new ToolStripMenuItem();
((System.ComponentModel.ISupportInitialize)picScreen).BeginInit();
menuStrip1.SuspendLayout();
SuspendLayout();
@@ -59,7 +60,7 @@
//
// fileToolStripMenuItem
//
fileToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { openToolStripMenuItem });
fileToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { openToolStripMenuItem, openSnapshotToolStripMenuItem });
fileToolStripMenuItem.Name = "fileToolStripMenuItem";
fileToolStripMenuItem.Size = new Size(54, 29);
fileToolStripMenuItem.Text = "File";
@@ -67,10 +68,17 @@
// openToolStripMenuItem
//
openToolStripMenuItem.Name = "openToolStripMenuItem";
openToolStripMenuItem.Size = new Size(158, 34);
openToolStripMenuItem.Text = "Open";
openToolStripMenuItem.Size = new Size(270, 34);
openToolStripMenuItem.Text = "Open TAP";
openToolStripMenuItem.Click += loadTAPToolStripMenuItem_Click;
//
// openSnapshotToolStripMenuItem
//
openSnapshotToolStripMenuItem.Name = "openSnapshotToolStripMenuItem";
openSnapshotToolStripMenuItem.Size = new Size(270, 34);
openSnapshotToolStripMenuItem.Text = "Open Snapshot";
openSnapshotToolStripMenuItem.Click += openSNAToolStripMenuItem_Click;
//
// Form1
//
AutoScaleDimensions = new SizeF(10F, 25F);
@@ -96,5 +104,6 @@
private MenuStrip menuStrip1;
private ToolStripMenuItem fileToolStripMenuItem;
private ToolStripMenuItem openToolStripMenuItem;
private ToolStripMenuItem openSnapshotToolStripMenuItem;
}
}

View File

@@ -88,6 +88,18 @@ namespace Desktop
}
}
}
private void openSNAToolStripMenuItem_Click(object sender, EventArgs e)
{
using (OpenFileDialog ofd = new OpenFileDialog())
{
ofd.Filter = "Spectrum Snapshot Files (*.sna)|*.sna";
if (ofd.ShowDialog() == DialogResult.OK)
{
byte[] snaBytes = System.IO.File.ReadAllBytes(ofd.FileName);
_cpu.LoadSNA(snaBytes);
}
}
}
// Public so the Debugger's background thread can call it 50 times a second
public void RenderScreen()