Created a new and logical UI

This commit is contained in:
2026-05-11 21:58:27 +01:00
parent f4e279b9c8
commit 6f702a5866
7 changed files with 219 additions and 35 deletions

View File

@@ -10,12 +10,24 @@
<ItemGroup>
<None Remove="ROMS\Golden Axe Warrior.sms" />
<None Remove="ROMS\R-Type.sms" />
<None Remove="ROMS\Sonic 2.sms" />
<None Remove="ROMS\Sonic.sms" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="ROMS\Golden Axe Warrior.sms">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="ROMS\R-Type.sms">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="ROMS\Sonic 2.sms">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="ROMS\Sonic.sms">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>

View File

@@ -28,49 +28,149 @@
/// </summary>
private void InitializeComponent()
{
button1 = new Button();
pbScreen = new PictureBox();
menuStrip1 = new MenuStrip();
fileToolStripMenuItem = new ToolStripMenuItem();
openToolStripMenuItem = new ToolStripMenuItem();
includedToolStripMenuItem = new ToolStripMenuItem();
selectROMToolStripMenuItem1 = new ToolStripMenuItem();
exitToolStripMenuItem = new ToolStripMenuItem();
viewToolStripMenuItem = new ToolStripMenuItem();
debuggerToolStripMenuItem = new ToolStripMenuItem();
machineToolStripMenuItem = new ToolStripMenuItem();
resetToolStripMenuItem = new ToolStripMenuItem();
helpToolStripMenuItem = new ToolStripMenuItem();
aboutToolStripMenuItem = new ToolStripMenuItem();
((System.ComponentModel.ISupportInitialize)pbScreen).BeginInit();
menuStrip1.SuspendLayout();
SuspendLayout();
//
// button1
//
button1.Location = new Point(1294, 13);
button1.Margin = new Padding(4, 4, 4, 4);
button1.Name = "button1";
button1.Size = new Size(118, 36);
button1.TabIndex = 0;
button1.Text = "button1";
button1.UseVisualStyleBackColor = true;
button1.Click += button1_Click;
//
// pbScreen
//
pbScreen.Location = new Point(23, 59);
pbScreen.Location = new Point(12, 36);
pbScreen.Name = "pbScreen";
pbScreen.Size = new Size(1390, 760);
pbScreen.Size = new Size(762, 672);
pbScreen.SizeMode = PictureBoxSizeMode.Zoom;
pbScreen.TabIndex = 1;
pbScreen.TabStop = false;
//
// menuStrip1
//
menuStrip1.ImageScalingSize = new Size(24, 24);
menuStrip1.Items.AddRange(new ToolStripItem[] { fileToolStripMenuItem, viewToolStripMenuItem, machineToolStripMenuItem, helpToolStripMenuItem });
menuStrip1.Location = new Point(0, 0);
menuStrip1.Name = "menuStrip1";
menuStrip1.Size = new Size(785, 33);
menuStrip1.TabIndex = 2;
menuStrip1.Text = "menuStrip1";
//
// fileToolStripMenuItem
//
fileToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { openToolStripMenuItem, exitToolStripMenuItem });
fileToolStripMenuItem.Name = "fileToolStripMenuItem";
fileToolStripMenuItem.Size = new Size(54, 29);
fileToolStripMenuItem.Text = "File";
//
// openToolStripMenuItem
//
openToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { includedToolStripMenuItem, selectROMToolStripMenuItem1 });
openToolStripMenuItem.Name = "openToolStripMenuItem";
openToolStripMenuItem.Size = new Size(270, 34);
openToolStripMenuItem.Text = "Open";
//
// includedToolStripMenuItem
//
includedToolStripMenuItem.Name = "includedToolStripMenuItem";
includedToolStripMenuItem.Size = new Size(270, 34);
includedToolStripMenuItem.Text = "Included";
includedToolStripMenuItem.Click += includedToolStripMenuItem_Click;
//
// selectROMToolStripMenuItem1
//
selectROMToolStripMenuItem1.Name = "selectROMToolStripMenuItem1";
selectROMToolStripMenuItem1.Size = new Size(270, 34);
selectROMToolStripMenuItem1.Text = "Select ROM...";
selectROMToolStripMenuItem1.Click += selectROMToolStripMenuItem_Click;
//
// exitToolStripMenuItem
//
exitToolStripMenuItem.Name = "exitToolStripMenuItem";
exitToolStripMenuItem.Size = new Size(270, 34);
exitToolStripMenuItem.Text = "Exit";
exitToolStripMenuItem.Click += exitToolStripMenuItem_Click;
//
// viewToolStripMenuItem
//
viewToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { debuggerToolStripMenuItem });
viewToolStripMenuItem.Name = "viewToolStripMenuItem";
viewToolStripMenuItem.Size = new Size(65, 29);
viewToolStripMenuItem.Text = "View";
//
// debuggerToolStripMenuItem
//
debuggerToolStripMenuItem.Name = "debuggerToolStripMenuItem";
debuggerToolStripMenuItem.Size = new Size(194, 34);
debuggerToolStripMenuItem.Text = "Debugger";
debuggerToolStripMenuItem.Click += debuggerToolStripMenuItem_Click;
//
// machineToolStripMenuItem
//
machineToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { resetToolStripMenuItem });
machineToolStripMenuItem.Name = "machineToolStripMenuItem";
machineToolStripMenuItem.Size = new Size(94, 29);
machineToolStripMenuItem.Text = "Machine";
//
// resetToolStripMenuItem
//
resetToolStripMenuItem.Name = "resetToolStripMenuItem";
resetToolStripMenuItem.Size = new Size(156, 34);
resetToolStripMenuItem.Text = "Reset";
resetToolStripMenuItem.Click += resetToolStripMenuItem_Click;
//
// helpToolStripMenuItem
//
helpToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { aboutToolStripMenuItem });
helpToolStripMenuItem.Name = "helpToolStripMenuItem";
helpToolStripMenuItem.Size = new Size(65, 29);
helpToolStripMenuItem.Text = "Help";
//
// aboutToolStripMenuItem
//
aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
aboutToolStripMenuItem.Size = new Size(164, 34);
aboutToolStripMenuItem.Text = "About";
//
// Form1
//
AutoScaleDimensions = new SizeF(10F, 25F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1425, 842);
ClientSize = new Size(785, 719);
Controls.Add(pbScreen);
Controls.Add(button1);
Margin = new Padding(4, 4, 4, 4);
Controls.Add(menuStrip1);
MainMenuStrip = menuStrip1;
Margin = new Padding(4);
Name = "Form1";
Text = "Form1";
Click += button1_Click;
((System.ComponentModel.ISupportInitialize)pbScreen).EndInit();
menuStrip1.ResumeLayout(false);
menuStrip1.PerformLayout();
ResumeLayout(false);
PerformLayout();
}
#endregion
private Button button1;
private PictureBox pbScreen;
private MenuStrip menuStrip1;
private ToolStripMenuItem fileToolStripMenuItem;
private ToolStripMenuItem openToolStripMenuItem;
private ToolStripMenuItem exitToolStripMenuItem;
private ToolStripMenuItem viewToolStripMenuItem;
private ToolStripMenuItem debuggerToolStripMenuItem;
private ToolStripMenuItem machineToolStripMenuItem;
private ToolStripMenuItem resetToolStripMenuItem;
private ToolStripMenuItem helpToolStripMenuItem;
private ToolStripMenuItem aboutToolStripMenuItem;
private ToolStripMenuItem includedToolStripMenuItem;
private ToolStripMenuItem selectROMToolStripMenuItem1;
}
}

View File

@@ -14,6 +14,8 @@ namespace Desktop
private DebuggerForm _debugger;
private Bitmap _screenBitmap = new Bitmap(256, 192, PixelFormat.Format32bppArgb);
private Task _emulatorTask;
public bool IsRunning { get; private set; } = false;
@@ -27,6 +29,8 @@ namespace Desktop
{
InitializeComponent();
_machine = new SmsMachine();
PopulateIncludedRomsMenu();
}
private void DrawScreen()
@@ -44,9 +48,7 @@ namespace Desktop
{
if (IsRunning) return;
IsRunning = true;
// Fire off a background task so we don't freeze the Windows UI!
Task.Run(() =>
_emulatorTask = Task.Run(() =>
{
while (IsRunning)
{
@@ -65,7 +67,7 @@ namespace Desktop
else
{
// Only throttle the speed if we are actively running
Thread.Sleep(16);
Thread.Sleep(8);
}
}
});
@@ -82,22 +84,89 @@ namespace Desktop
_machine.StepMachine();
}
private void button1_Click(object sender, EventArgs e)
private async void LoadRomAndStart(string filePath)
{
// 1. Load a commercial Master System ROM!
StopEmulator();
if (_emulatorTask != null)
{
await _emulatorTask;
}
byte[] rom = File.ReadAllBytes(@"C:\Parsons\Local Code Projects\ParsonsMasterSystem2026\Desktop\ROMS\Golden Axe Warrior.sms");
// 2. Load the file
byte[] rom = File.ReadAllBytes(filePath);
// 2. Jam it into the Sega Mapper
_machine.LoadCartridge(rom);
// 3. Jam it into the Sega Mapper
_machine.LoadCartridge(rom);
// 3. Open the Debugger to look around
if (_debugger == null || _debugger.IsDisposed)
// 4. Update the Window title so it looks professional
this.Text = $"Parsons Master System 2026 - {Path.GetFileNameWithoutExtension(filePath)}";
// 5. Turn the power on!
StartEmulator();
}
private void PopulateIncludedRomsMenu()
{
// The folder you used for Golden Axe Warrior
string romsDirectory = @"C:\Parsons\Local Code Projects\ParsonsMasterSystem2026\Desktop\ROMS\";
if (Directory.Exists(romsDirectory))
{
string[] romFiles = Directory.GetFiles(romsDirectory, "*.sms");
foreach (string file in romFiles)
{
_debugger = new DebuggerForm(_machine.Cpu, _machine.MemoryBus, this);
_debugger.Show();
}
// Create a new dropdown item for each .sms file it finds
string romName = Path.GetFileNameWithoutExtension(file);
ToolStripMenuItem romMenuItem = new ToolStripMenuItem(romName);
// When clicked, pass the file path to our helper method
romMenuItem.Click += (sender, e) => LoadRomAndStart(file);
// Add it to the "Included" submenu (make sure the name matches your designer element!)
includedToolStripMenuItem.DropDownItems.Add(romMenuItem);
}
}
}
private void selectROMToolStripMenuItem_Click(object sender, EventArgs e)
{
using (OpenFileDialog ofd = new OpenFileDialog())
{
ofd.Title = "Select Master System ROM";
ofd.Filter = "SMS ROMs (*.sms)|*.sms|All Files (*.*)|*.*";
if (ofd.ShowDialog() == DialogResult.OK)
{
LoadRomAndStart(ofd.FileName);
_machine.Reset();
}
}
}
private void resetToolStripMenuItem_Click(object sender, EventArgs e)
{
_machine.Reset();
}
private void debuggerToolStripMenuItem_Click(object sender, EventArgs e)
{
if (_debugger == null || _debugger.IsDisposed)
{
_debugger = new DebuggerForm(_machine.Cpu, _machine.MemoryBus, this);
}
_debugger.Show();
}
private void includedToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Environment.Exit(0);
}
}
}

View File

@@ -117,4 +117,7 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

BIN
Desktop/ROMS/R-Type.sms Normal file

Binary file not shown.

BIN
Desktop/ROMS/Sonic 2.sms Normal file

Binary file not shown.

BIN
Desktop/ROMS/Sonic.sms Normal file

Binary file not shown.