[ChannelFHawk] Implement the Sean Riddle multi-cart mapper

This commit is contained in:
Asnivor 2024-09-05 13:41:57 +01:00
parent c77486f88d
commit 8ae73ed850
5 changed files with 37 additions and 13 deletions

View File

@ -18,10 +18,10 @@ E1FB8D61FFE07B53869A93A8AD0C04A8 B Robot War (1977)(Fairchild)(proto)[b] Channel
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
;;; Hacks
;;;;;;;;;;--------------------------------------------------;;;;;;;;;;
02B4A4F523B972C63FEF21BF2E51AE58 Channel F Multi-Cart - Menu (2004)(Riddle, Sean) ChannelF board=SCHACH
DFC3DF32F9FB558A6E54928559D67FE7 Channel F Multi-Cart (2004)(Riddle, Sean) ChannelF board=SCHACH
4B3657594CD1000D08704F4F0FB53C75 Channel F Multi-Cart - Menu (2004)(Riddle, Sean)[a] ChannelF board=SCHACH
0C8AE0E5776D48022F8D2B9642C6A197 Channel F Multi-Cart (2004)(Riddle, Sean)[a] ChannelF board=SCHACH
02B4A4F523B972C63FEF21BF2E51AE58 Channel F Multi-Cart - Menu (2004)(Riddle, Sean) ChannelF board=RIDDLE
DFC3DF32F9FB558A6E54928559D67FE7 Channel F Multi-Cart (2004)(Riddle, Sean) ChannelF board=RIDDLE
4B3657594CD1000D08704F4F0FB53C75 Channel F Multi-Cart - Menu (2004)(Riddle, Sean)[a] ChannelF board=RIDDLE
0C8AE0E5776D48022F8D2B9642C6A197 Channel F Multi-Cart (2004)(Riddle, Sean)[a] ChannelF board=RIDDLE
533BAC14DE68FBA49078EEF8E9502DD2 Hangman (USA) (Multicart Hack) ChannelF board=SCHACH USA
ABC6FC7083B66A65C1E18EBF911F6689 Maze + Jailbreak + Blind-man's-bluff + Trailblazer (1977)(Fairchild)[h] ChannelF board=SCHACH USA

View File

@ -34,6 +34,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF
protected byte[] _ram;
public bool ActivityLED;
public int MultiBank;
public int MultiHalfBank;
// SRAM config
// taken from https://github.com/mamedev/mame/blob/ee1e4f9683a4953cb9d88f9256017fcbc38e3144/src/devices/bus/chanf/rom.cpp
@ -65,6 +67,10 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF
case "MAZE":
return new mapper_MAZE(rom);
case "RIDDLE":
// Sean Riddle's modified SCHACH multi-cart
return new mapper_RIDDLE(rom);
case "SCHACH":
default:
// F3853 Memory Interface Chip, 6KB of ROM and 2KB of RAM
@ -157,7 +163,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF
}
}
public void Reset()
public virtual void Reset()
{
m_latch[0] = 0;
m_latch[1] = 0;
@ -177,6 +183,8 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF
ser.Sync(nameof(m_read_write), ref m_read_write);
ser.Sync(nameof(m_data0), ref m_data0);
ser.Sync(nameof(ActivityLED), ref ActivityLED);
ser.Sync(nameof(MultiBank), ref MultiBank);
ser.Sync(nameof(MultiHalfBank), ref MultiHalfBank);
ser.EndSection();
}
}

View File

@ -1,4 +1,6 @@
namespace BizHawk.Emulation.Cores.Consoles.ChannelF
using BizHawk.Common.NumberExtensions;
namespace BizHawk.Emulation.Cores.Consoles.ChannelF
{
/// <summary>
/// Sean Riddle's modified SCHACH cart mapper (multi-cart) (WIP)
@ -9,7 +11,7 @@
public mapper_RIDDLE(byte[] rom)
{
ROM = new byte[0x10000 - 0x800];
ROM = new byte[rom.Length];
for (int i = 0; i < rom.Length; i++)
{
ROM[i] = rom[i];
@ -31,7 +33,7 @@
else
{
if (off < ROM.Length)
result = ROM[off];
result = ROM[off + (MultiBank * 0x2000) + (MultiHalfBank * 0x1000)];
}
return (byte)result;
@ -44,14 +46,15 @@
{
RAM[addr - 0x2800] = value;
}
else if (addr == 0x3800)
else if (addr == 0x3000)
{
// activity LED
ActivityLED = !ActivityLED;
// bank switching
MultiBank = value & 0x1F;
MultiHalfBank = (value & 0x20) >> 5;
}
else
{
}
}
@ -64,5 +67,12 @@
{
// no writeable hardware
}
public override void Reset()
{
base.Reset();
MultiBank = 0;
MultiHalfBank = 0;
}
}
}

View File

@ -74,5 +74,11 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF
public void Dispose()
{
}
private void ConsoleReset()
{
CPU.Reset();
Cartridge.Reset();
}
}
}

View File

@ -40,7 +40,7 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF
if (key == "RESET" && StateConsole[i])
{
CPU.Reset();
ConsoleReset();
for (int l = 0; l < OutputLatch.Length; l++)
{
OutputLatch[l] = 0;