[ChannelFHawk] Implement the Sean Riddle multi-cart mapper
This commit is contained in:
parent
c77486f88d
commit
8ae73ed850
|
@ -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
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -74,5 +74,11 @@ namespace BizHawk.Emulation.Cores.Consoles.ChannelF
|
|||
public void Dispose()
|
||||
{
|
||||
}
|
||||
|
||||
private void ConsoleReset()
|
||||
{
|
||||
CPU.Reset();
|
||||
Cartridge.Reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue