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> <ItemGroup>
<None Remove="ROMS\Golden Axe Warrior.sms" /> <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>
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="ROMS\Golden Axe Warrior.sms"> <EmbeddedResource Include="ROMS\Golden Axe Warrior.sms">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource> </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>
<ItemGroup> <ItemGroup>

View File

@@ -28,49 +28,149 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
button1 = new Button();
pbScreen = new PictureBox(); 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(); ((System.ComponentModel.ISupportInitialize)pbScreen).BeginInit();
menuStrip1.SuspendLayout();
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
// //
pbScreen.Location = new Point(23, 59); pbScreen.Location = new Point(12, 36);
pbScreen.Name = "pbScreen"; pbScreen.Name = "pbScreen";
pbScreen.Size = new Size(1390, 760); pbScreen.Size = new Size(762, 672);
pbScreen.SizeMode = PictureBoxSizeMode.Zoom; pbScreen.SizeMode = PictureBoxSizeMode.Zoom;
pbScreen.TabIndex = 1; pbScreen.TabIndex = 1;
pbScreen.TabStop = false; 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 // Form1
// //
AutoScaleDimensions = new SizeF(10F, 25F); AutoScaleDimensions = new SizeF(10F, 25F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1425, 842); ClientSize = new Size(785, 719);
Controls.Add(pbScreen); Controls.Add(pbScreen);
Controls.Add(button1); Controls.Add(menuStrip1);
Margin = new Padding(4, 4, 4, 4); MainMenuStrip = menuStrip1;
Margin = new Padding(4);
Name = "Form1"; Name = "Form1";
Text = "Form1"; Text = "Form1";
Click += button1_Click;
((System.ComponentModel.ISupportInitialize)pbScreen).EndInit(); ((System.ComponentModel.ISupportInitialize)pbScreen).EndInit();
menuStrip1.ResumeLayout(false);
menuStrip1.PerformLayout();
ResumeLayout(false); ResumeLayout(false);
PerformLayout();
} }
#endregion #endregion
private Button button1;
private PictureBox pbScreen; 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 DebuggerForm _debugger;
private Bitmap _screenBitmap = new Bitmap(256, 192, PixelFormat.Format32bppArgb); private Bitmap _screenBitmap = new Bitmap(256, 192, PixelFormat.Format32bppArgb);
private Task _emulatorTask;
public bool IsRunning { get; private set; } = false; public bool IsRunning { get; private set; } = false;
@@ -27,6 +29,8 @@ namespace Desktop
{ {
InitializeComponent(); InitializeComponent();
_machine = new SmsMachine(); _machine = new SmsMachine();
PopulateIncludedRomsMenu();
} }
private void DrawScreen() private void DrawScreen()
@@ -44,9 +48,7 @@ namespace Desktop
{ {
if (IsRunning) return; if (IsRunning) return;
IsRunning = true; IsRunning = true;
_emulatorTask = Task.Run(() =>
// Fire off a background task so we don't freeze the Windows UI!
Task.Run(() =>
{ {
while (IsRunning) while (IsRunning)
{ {
@@ -65,7 +67,7 @@ namespace Desktop
else else
{ {
// Only throttle the speed if we are actively running // Only throttle the speed if we are actively running
Thread.Sleep(16); Thread.Sleep(8);
} }
} }
}); });
@@ -82,22 +84,89 @@ namespace Desktop
_machine.StepMachine(); _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 // 3. Jam it into the Sega Mapper
_machine.LoadCartridge(rom); _machine.LoadCartridge(rom);
// 3. Open the Debugger to look around // 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)
{
// 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) if (_debugger == null || _debugger.IsDisposed)
{ {
_debugger = new DebuggerForm(_machine.Cpu, _machine.MemoryBus, this); _debugger = new DebuggerForm(_machine.Cpu, _machine.MemoryBus, this);
}
_debugger.Show(); _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"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </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> </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.