diff --git a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj
index f8710bbc42..86dcd49b0c 100644
--- a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj
+++ b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj
@@ -1252,6 +1252,7 @@
+
@@ -2283,4 +2284,4 @@
-
+
\ No newline at end of file
diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/NesSchema.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/NesSchema.cs
index f0a9581b6d..2a8ff69673 100644
--- a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/NesSchema.cs
+++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/NesSchema.cs
@@ -5,6 +5,7 @@ using System.Linq;
using BizHawk.Emulation.Common;
using BizHawk.Emulation.Cores.Nintendo.NES;
+using BizHawk.Emulation.Cores.Nintendo.SubNESHawk;
using BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES;
namespace BizHawk.Client.EmuHawk
@@ -17,6 +18,7 @@ namespace BizHawk.Client.EmuHawk
if (core is NES)
{
var nes = (NES)core;
+
var ss = nes.GetSyncSettings();
var isFds = nes.IsFDS;
@@ -122,6 +124,117 @@ namespace BizHawk.Client.EmuHawk
yield return NesConsoleButtons();
}
}
+ else if (core is SubNESHawk)
+ {
+ {
+ var nes = (SubNESHawk)core;
+
+ var ss = nes.GetSyncSettings();
+
+ var isFds = nes.IsFDS;
+ if (ss.Controls.Famicom)
+ {
+ yield return StandardController(1);
+ yield return Famicom2ndController();
+
+ switch (ss.Controls.FamicomExpPort)
+ {
+ default:
+ case "UnpluggedFam":
+ break;
+ case "Zapper":
+ yield return Zapper(3);
+ break;
+ case "ArkanoidFam":
+ yield return ArkanoidPaddle(3);
+ break;
+ case "Famicom4P":
+ yield return StandardController(3);
+ yield return StandardController(4);
+ break;
+ case "FamilyBasicKeyboard":
+ yield return FamicomFamilyKeyboard(3);
+ break;
+ case "OekaKids":
+ yield return OekaKidsTablet(3);
+ break;
+ }
+ }
+ else
+ {
+ var currentControlerNo = 1;
+ switch (ss.Controls.NesLeftPort)
+ {
+ default:
+ case "UnpluggedNES":
+ break;
+ case "ControllerNES":
+ yield return StandardController(1);
+ currentControlerNo++;
+ break;
+ case "Zapper":
+ yield return Zapper(1);
+ currentControlerNo++;
+ break;
+ case "ArkanoidNES":
+ yield return ArkanoidPaddle(1);
+ currentControlerNo++;
+ break;
+ case "FourScore":
+ yield return StandardController(1);
+ yield return StandardController(2);
+ currentControlerNo += 2;
+ break;
+ case "PowerPad":
+ yield return PowerPad(1);
+ currentControlerNo++;
+ break;
+ case "ControllerSNES":
+ throw new Exception("TODO");
+ }
+
+ switch (ss.Controls.NesRightPort)
+ {
+ default:
+ case "UnpluggedNES":
+ break;
+ case "ControllerNES":
+ yield return StandardController(currentControlerNo);
+ break;
+ case "Zapper":
+ yield return Zapper(currentControlerNo);
+ break;
+ case "ArkanoidNES":
+ yield return ArkanoidPaddle(currentControlerNo);
+ break;
+ case "FourScore":
+ yield return StandardController(currentControlerNo);
+ yield return StandardController(currentControlerNo + 1);
+ currentControlerNo += 2;
+ break;
+ case "PowerPad":
+ yield return PowerPad(currentControlerNo);
+ break;
+ case "ControllerSNES":
+ throw new Exception("TODO");
+ }
+
+ if (currentControlerNo == 0)
+ {
+ yield return null;
+ }
+ }
+
+ if (isFds)
+ {
+ yield return FdsConsoleButtons(core.ControllerDefinition.BoolButtons.Count(b => b.StartsWith("FDS Insert ")));
+ }
+ else
+ {
+ yield return NesConsoleButtons();
+ }
+ }
+ }
else
// Quicknes Can support none, one or two controllers.
{
diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/VECSchema.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/VECSchema.cs
new file mode 100644
index 0000000000..11a46e6329
--- /dev/null
+++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/VECSchema.cs
@@ -0,0 +1,101 @@
+using System.Collections.Generic;
+using System.Drawing;
+
+using BizHawk.Emulation.Common;
+
+namespace BizHawk.Client.EmuHawk
+{
+ [Schema("VEC")]
+ public class VECSchema : IVirtualPadSchema
+ {
+ public IEnumerable GetPadSchemas(IEmulator core)
+ {
+ yield return StandardController(1);
+ yield return StandardController(2);
+ }
+
+ private static PadSchema StandardController(int controller)
+ {
+ return new PadSchema
+ {
+ IsConsole = false,
+ DefaultSize = new Size(280, 380),
+ Buttons = new[]
+ {
+ new PadSchema.ButtonSchema
+ {
+ Name = $"P{controller} Up",
+ Icon = Properties.Resources.BlueUp,
+ Location = new Point(14, 12),
+ Type = PadSchema.PadInputType.Boolean
+ },
+ new PadSchema.ButtonSchema
+ {
+ Name = $"P{controller} Down",
+ Icon = Properties.Resources.BlueDown,
+ Location = new Point(14, 56),
+ Type = PadSchema.PadInputType.Boolean
+ },
+ new PadSchema.ButtonSchema
+ {
+ Name = $"P{controller} Left",
+ Icon = Properties.Resources.Back,
+ Location = new Point(2, 34),
+ Type = PadSchema.PadInputType.Boolean
+ },
+ new PadSchema.ButtonSchema
+ {
+ Name = $"P{controller} Right",
+ Icon = Properties.Resources.Forward,
+ Location = new Point(24, 34),
+ Type = PadSchema.PadInputType.Boolean
+ },
+ new PadSchema.ButtonSchema
+ {
+ Name = $"P{controller} Button 1",
+ DisplayName = "1",
+ Location = new Point(74, 34),
+ Type = PadSchema.PadInputType.Boolean
+ },
+ new PadSchema.ButtonSchema
+ {
+ Name = $"P{controller} Button 2",
+ DisplayName = "2",
+ Location = new Point(98, 34),
+ Type = PadSchema.PadInputType.Boolean
+ },
+ new PadSchema.ButtonSchema
+ {
+ Name = $"P{controller} Button 3",
+ DisplayName = "3",
+ Location = new Point(122, 34),
+ Type = PadSchema.PadInputType.Boolean
+ },
+ new PadSchema.ButtonSchema
+ {
+ Name = $"P{controller} Button 4",
+ DisplayName = "4",
+ Location = new Point(146, 34),
+ Type = PadSchema.PadInputType.Boolean
+ },
+ new PadSchema.ButtonSchema
+ {
+ Name = $"P{controller} Stick X",
+ Location = new Point(2, 85),
+ MinValue = 127,
+ MidValue = 0,
+ MaxValue = -128,
+ MinValueSec = -128,
+ MidValueSec = 0,
+ MaxValueSec = 127,
+ Type = PadSchema.PadInputType.AnalogStick,
+ SecondaryNames = new[]
+ {
+ $"P{controller} Stick Y",
+ }
+ }
+ }
+ };
+ }
+ }
+}
diff --git a/BizHawk.Emulation.Cores/CPUs/MC6800/Disassembler.cs b/BizHawk.Emulation.Cores/CPUs/MC6800/Disassembler.cs
index a1112084ab..bc913d0870 100644
--- a/BizHawk.Emulation.Cores/CPUs/MC6800/Disassembler.cs
+++ b/BizHawk.Emulation.Cores/CPUs/MC6800/Disassembler.cs
@@ -304,15 +304,7 @@ namespace BizHawk.Emulation.Common.Components.MC6800
result = result.Replace("ix16", "X + " + "ea");
result = result.Replace("ea", string.Format("{0:N}h", d));
}
- else if (result.Contains("r8"))
- {
- byte d = reader(addr++);
- bytes.Add(d);
- int offs = d;
- if (offs >= 128)
- offs -= 256;
- result = result.Replace("r8", string.Format("{0:X4}h", (ushort)(addr + offs)));
- }
+
StringBuilder ret = new StringBuilder();
ret.Append(string.Format("{0:X4}: ", origaddr));
foreach (var b in bytes)
diff --git a/BizHawk.Emulation.Cores/CPUs/MC6800/MC6800.cs b/BizHawk.Emulation.Cores/CPUs/MC6800/MC6800.cs
index eb8963c6dd..69dc1b2339 100644
--- a/BizHawk.Emulation.Cores/CPUs/MC6800/MC6800.cs
+++ b/BizHawk.Emulation.Cores/CPUs/MC6800/MC6800.cs
@@ -38,41 +38,38 @@ namespace BizHawk.Emulation.Common.Components.MC6800
public const ushort RD_INC_OP = 27;
public const ushort WR_DEC_LO = 28;
public const ushort WR_DEC_HI = 29;
- public const ushort WR_HI = 31;
- public const ushort NEG = 32;
- public const ushort TST = 33;
- public const ushort CLR = 34;
- public const ushort ADD8BR = 35;
- public const ushort JPE = 36;
+ public const ushort WR_HI = 30;
+ public const ushort LD_8 = 31;
+ public const ushort LD_16 = 32;
+ public const ushort NEG = 33;
+ public const ushort TST = 34;
+ public const ushort CLR = 35;
+ public const ushort ADD8BR = 36;
public const ushort IDX_DCDE = 37;
public const ushort IDX_OP_BLD = 38;
- public const ushort EA_8 = 39;
- public const ushort EA_16 = 40;
- public const ushort WR_HI_INC = 41;
- public const ushort SET_I = 42;
- public const ushort CMP8 = 43;
- public const ushort CMP16 = 44;
- public const ushort LD_8 = 45;
- public const ushort LD_16 = 46;
- public const ushort TAP = 47;
- public const ushort TPA = 48;
- public const ushort INX = 49;
- public const ushort DEX = 50;
- public const ushort CLV = 51;
- public const ushort SEV = 52;
- public const ushort CLC = 53;
- public const ushort SEC = 54;
- public const ushort CLI = 55;
- public const ushort SEI = 56;
- public const ushort SBA = 57;
- public const ushort CBA = 58;
- public const ushort TAB = 59;
- public const ushort TBA = 60;
- public const ushort ABA = 61;
- public const ushort TSX = 62;
- public const ushort INS = 63;
- public const ushort DES = 64;
- public const ushort TXS = 65;
+ public const ushort WR_HI_INC = 39;
+ public const ushort SET_I = 40;
+ public const ushort CMP8 = 41;
+ public const ushort CMP16 = 42;
+ public const ushort TAP = 43;
+ public const ushort TPA = 44;
+ public const ushort INX = 45;
+ public const ushort DEX = 46;
+ public const ushort CLV = 47;
+ public const ushort SEV = 48;
+ public const ushort CLC = 49;
+ public const ushort SEC = 50;
+ public const ushort CLI = 51;
+ public const ushort SEI = 52;
+ public const ushort SBA = 53;
+ public const ushort CBA = 54;
+ public const ushort TAB = 55;
+ public const ushort TBA = 56;
+ public const ushort ABA = 57;
+ public const ushort TSX = 58;
+ public const ushort INS = 59;
+ public const ushort DES = 60;
+ public const ushort TXS = 61;
public MC6800()
{
@@ -216,19 +213,12 @@ namespace BizHawk.Emulation.Common.Components.MC6800
Regs[reg_d_ad] = (ushort)((Regs[reg_h_ad] << 8) | Regs[reg_l_ad]);
break;
- case JPE:
- if (!FlagE) { instr_pntr = 44; irq_pntr = 10; };
- break;
case IDX_DCDE:
Index_decode();
break;
case IDX_OP_BLD:
Index_Op_Builder();
break;
- case EA_8:
- Regs[IDX_EA] = (ushort)(Regs[indexed_reg] + (((Regs[ALU2] & 0x80) == 0x80) ? (Regs[ALU2] | 0xFF00) : Regs[ALU2]));
- Index_Op_Builder();
- break;
case LD_8:
LD_8_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]);
break;
@@ -264,10 +254,6 @@ namespace BizHawk.Emulation.Common.Components.MC6800
case IDX_OP_BLD:
Index_Op_Builder();
break;
- case EA_16:
- Regs[IDX_EA] = (ushort)(Regs[indexed_reg] + Regs[ADDR]);
- Index_Op_Builder();
- break;
case SET_ADDR:
reg_d_ad = cur_instr[instr_pntr++];
reg_h_ad = cur_instr[instr_pntr++];
@@ -527,14 +513,13 @@ namespace BizHawk.Emulation.Common.Components.MC6800
{
Disassembly = $"{(disassemble ? Disassemble(Regs[PC], ReadMemory, out notused) : "---")} ".PadRight(50),
RegisterInfo = string.Format(
- "A:{0:X2} B:{1:X2} X:{2:X4} SP:{3:X4} CC:{4:X2} Cy:{5} {6}{7}{8}{9}{10}{11}{12}",
+ "A:{0:X2} B:{1:X2} X:{2:X4} SP:{3:X4} CC:{4:X2} Cy:{5} {6}{7}{8}{9}{10}{11}",
Regs[A],
Regs[B],
Regs[X],
Regs[SP],
Regs[CC],
TotalExecutedCycles,
- FlagE ? "E" : "e",
FlagH ? "H" : "h",
FlagI ? "I" : "i",
FlagN ? "N" : "n",
diff --git a/BizHawk.Emulation.Cores/CPUs/MC6800/OP_Tables.cs b/BizHawk.Emulation.Cores/CPUs/MC6800/OP_Tables.cs
index 3d70879871..63ea65ba3e 100644
--- a/BizHawk.Emulation.Cores/CPUs/MC6800/OP_Tables.cs
+++ b/BizHawk.Emulation.Cores/CPUs/MC6800/OP_Tables.cs
@@ -255,7 +255,7 @@ namespace BizHawk.Emulation.Common.Components.MC6800
private void RTI()
{
PopulateCURINSTR(INC16, SP,
- RD_INC_OP, CC, SP, JPE,
+ RD_INC, CC, SP,
RD_INC, B, SP,
RD_INC, A, SP,
RD_INC, ALU, SP,
diff --git a/BizHawk.Emulation.Cores/CPUs/MC6800/Registers.cs b/BizHawk.Emulation.Cores/CPUs/MC6800/Registers.cs
index b79c814661..36036e52dc 100644
--- a/BizHawk.Emulation.Cores/CPUs/MC6800/Registers.cs
+++ b/BizHawk.Emulation.Cores/CPUs/MC6800/Registers.cs
@@ -55,12 +55,6 @@ namespace BizHawk.Emulation.Common.Components.MC6800
set { Regs[CC] = (byte)((Regs[CC] & ~0x20) | (value ? 0x20 : 0x00)); }
}
- public bool FlagE
- {
- get { return (Regs[CC] & 0x80) != 0; }
- set { Regs[CC] = (byte)((Regs[CC] & ~0x80) | (value ? 0x80 : 0x00)); }
- }
-
private void ResetRegisters()
{
for (int i = 0; i < 14; i++)
diff --git a/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs b/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs
index ee9d543b3d..13192a7dfb 100644
--- a/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs
+++ b/BizHawk.Emulation.Cores/CPUs/MC6809/Disassembler.cs
@@ -1010,15 +1010,7 @@ namespace BizHawk.Emulation.Common.Components.MC6809
}
}
}
- else if (result.Contains("r8"))
- {
- byte d = reader(addr++);
- bytes.Add(d);
- int offs = d;
- if (offs >= 128)
- offs -= 256;
- result = result.Replace("r8", string.Format("{0:X4}h", (ushort)(addr + offs)));
- }
+
StringBuilder ret = new StringBuilder();
ret.Append(string.Format("{0:X4}: ", origaddr));
foreach (var b in bytes)
diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs
index 0390b2a346..184bf21da3 100644
--- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs
+++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs
@@ -69,6 +69,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk
public int _frame = 0;
+ public bool IsFDS
+ {
+ get { return subnes.Board is FDS; }
+ }
+
private readonly ITraceable _tracer;
#region ISettable