Created a new and logical UI
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
140
Desktop/Form1.Designer.cs
generated
140
Desktop/Form1.Designer.cs
generated
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
byte[] rom = File.ReadAllBytes(@"C:\Parsons\Local Code Projects\ParsonsMasterSystem2026\Desktop\ROMS\Golden Axe Warrior.sms");
|
{
|
||||||
|
await _emulatorTask;
|
||||||
|
}
|
||||||
|
|
||||||
// 2. Jam it into the Sega Mapper
|
// 2. Load the file
|
||||||
_machine.LoadCartridge(rom);
|
byte[] rom = File.ReadAllBytes(filePath);
|
||||||
|
|
||||||
// 3. Open the Debugger to look around
|
// 3. Jam it into the Sega Mapper
|
||||||
if (_debugger == null || _debugger.IsDisposed)
|
_machine.LoadCartridge(rom);
|
||||||
|
|
||||||
|
// 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);
|
// Create a new dropdown item for each .sms file it finds
|
||||||
_debugger.Show();
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
BIN
Desktop/ROMS/R-Type.sms
Normal file
Binary file not shown.
BIN
Desktop/ROMS/Sonic 2.sms
Normal file
BIN
Desktop/ROMS/Sonic 2.sms
Normal file
Binary file not shown.
BIN
Desktop/ROMS/Sonic.sms
Normal file
BIN
Desktop/ROMS/Sonic.sms
Normal file
Binary file not shown.
Reference in New Issue
Block a user