diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj
index 8cfe7979e0..30250ca3c7 100644
--- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj
+++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj
@@ -631,6 +631,7 @@
+
Code
diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/UNIF_BMC-T-262.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/UNIF_BMC-T-262.cs
new file mode 100644
index 0000000000..6cc941c379
--- /dev/null
+++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/UNIF_BMC-T-262.cs
@@ -0,0 +1,74 @@
+using BizHawk.Common;
+
+namespace BizHawk.Emulation.Cores.Nintendo.NES
+{
+ public class UNIF_BMC_T_262 : NES.NESBoardBase
+ {
+ private bool _mode;
+ private bool _locked;
+ private bool _verticalMirror;
+
+ private int _base;
+ private int _bank;
+
+ public override bool Configure(NES.EDetectionOrigin origin)
+ {
+ switch (Cart.board_type)
+ {
+ case "UNIF_BMC-T-262":
+ break;
+ default:
+ return false;
+ }
+
+ SetMirroring();
+
+ return true;
+ }
+
+ public override void SyncState(Serializer ser)
+ {
+ ser.Sync("mode", ref _mode);
+ ser.Sync("locked", ref _locked);
+ ser.Sync("verticalMirror", ref _verticalMirror);
+
+ ser.Sync("base", ref _base);
+ ser.Sync("bank", ref _bank);
+
+ base.SyncState(ser);
+ }
+
+ public override byte ReadPRG(int addr)
+ {
+ if (addr < 0x4000)
+ {
+ int bank = _base | _bank;
+ return ROM[(bank * 0x4000) + (addr & 0x3FFF)];
+ }
+ else
+ {
+ int bank = _base | (_mode ? _bank : 7);
+ return ROM[(bank * 0x4000) + (addr & 0x3FFF)];
+ }
+ }
+
+ public override void WritePRG(int addr, byte value)
+ {
+ if (!_locked)
+ {
+ _base = ((addr & 0x60) >> 2) | ((addr & 0x100) >> 3);
+ _mode = (addr & 0x80) > 0;
+ _verticalMirror = (((addr & 2) >> 1) ^ 1) > 0;
+ _locked = ((addr & 0x2000) >> 13) > 0;
+ }
+
+ _bank = value & 0x07;
+ SetMirroring();
+ }
+
+ private void SetMirroring()
+ {
+ SetMirrorType(_verticalMirror ? EMirrorType.Vertical : EMirrorType.Horizontal);
+ }
+ }
+}