Hey all, it's been a while!
I have a question today about mapper 193, the one used for "Fighting Hero". I have searched the forums, looked at source code, and all the usual stuff. When I boot the game up, the music plays, the sprite for the main menu's cursor is shown, but no menu!
I breakpointed my GPU, background was enabled, and was set to use the left pattern table. Sprites had the exact same settings... Which leads me to believe something is wrong (Or the game is just trash, and judging by the looks of the thing, I don't think we can rule that out). I'm also wondering if Disch's mapper docs are accurate on this one? I've combed over my code for this mapper, and it's not a complex one at all. My copy of this game works just fine in Nestopia, so it's definitely something wrong with my code.
Anyone else run into problems with this mapper? Does it have a known boot configuration? I really can't believe a mapper with 4 measly registers is causing me this much trouble
EDIT: Source code
I have a question today about mapper 193, the one used for "Fighting Hero". I have searched the forums, looked at source code, and all the usual stuff. When I boot the game up, the music plays, the sprite for the main menu's cursor is shown, but no menu!
I breakpointed my GPU, background was enabled, and was set to use the left pattern table. Sprites had the exact same settings... Which leads me to believe something is wrong (Or the game is just trash, and judging by the looks of the thing, I don't think we can rule that out). I'm also wondering if Disch's mapper docs are accurate on this one? I've combed over my code for this mapper, and it's not a complex one at all. My copy of this game works just fine in Nestopia, so it's definitely something wrong with my code.
Anyone else run into problems with this mapper? Does it have a known boot configuration? I really can't believe a mapper with 4 measly registers is causing me this much trouble
EDIT: Source code
Code:
/// <summary>Emulates Mapper 193</summary>
public class NesMmcC1 : NesMmc
{
public NesMmcC1(Nes console)
: base(console) { }
protected internal override void Initialize()
{
base.Initialize();
for (int i = 0; i < 0x2000; i += 4)
{
base.console.Cpu.Memory.Map(0x6000 + i, (addr, data) => base.SelectChr(Chr.Size04, Chr.Addr0000, data >> 2));
base.console.Cpu.Memory.Map(0x6001 + i, (addr, data) => base.SelectChr(Chr.Size02, Chr.Addr1000, data >> 1));
base.console.Cpu.Memory.Map(0x6002 + i, (addr, data) => base.SelectChr(Chr.Size02, Chr.Addr1800, data >> 1));
base.console.Cpu.Memory.Map(0x6003 + i, (addr, data) => base.SelectPrg(Prg.Size08, Prg.Addr8000, data));
}
base.SelectPrg(Prg.Size08, Prg.AddrA000, -3);
base.SelectPrg(Prg.Size08, Prg.AddrC000, -2);
base.SelectPrg(Prg.Size08, Prg.AddrE000, -1);
}
}
public class NesMmcC1 : NesMmc
{
public NesMmcC1(Nes console)
: base(console) { }
protected internal override void Initialize()
{
base.Initialize();
for (int i = 0; i < 0x2000; i += 4)
{
base.console.Cpu.Memory.Map(0x6000 + i, (addr, data) => base.SelectChr(Chr.Size04, Chr.Addr0000, data >> 2));
base.console.Cpu.Memory.Map(0x6001 + i, (addr, data) => base.SelectChr(Chr.Size02, Chr.Addr1000, data >> 1));
base.console.Cpu.Memory.Map(0x6002 + i, (addr, data) => base.SelectChr(Chr.Size02, Chr.Addr1800, data >> 1));
base.console.Cpu.Memory.Map(0x6003 + i, (addr, data) => base.SelectPrg(Prg.Size08, Prg.Addr8000, data));
}
base.SelectPrg(Prg.Size08, Prg.AddrA000, -3);
base.SelectPrg(Prg.Size08, Prg.AddrC000, -2);
base.SelectPrg(Prg.Size08, Prg.AddrE000, -1);
}
}