blob: 60b73ff9ab91ac157d3609bceab70aa82c2ddafa (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
class UNROM512 : IMapper
{
public string Name { get => "UNROM-512"; }
public int Number { get => 30; }
public int DefaultPrgSize { get => 512 * 1024; }
public void DumpPrg(IFamicomDumperConnection dumper, List<byte> data, int size)
{
var banks = (byte)(size / 0x4000);
Console.Write("Reading last PRG bank... ");
var lastBank = dumper.ReadCpu(0xC000, 0x4000);
Console.WriteLine("OK");
for (int bank = 0; bank < banks - 1; bank++)
{
Console.Write($"Reading PRG bank #{bank}/{banks}... ");
// Avoiding bus conflicts
var nonConflictable = Enumerable.Range(0, lastBank.Length)
.Where(a => lastBank[a] == (byte)bank)
.Select(a => a + 0xC000);
if (nonConflictable.Any())
{
dumper.WriteCpu((ushort)(nonConflictable.First()), (byte)bank);
}
else
{
// Whatever...
Console.Write("oops, bus conflict... ");
dumper.WriteCpu(0xC000, (byte)bank);
}
data.AddRange(dumper.ReadCpu(0x8000, 0x4000));
Console.WriteLine("OK");
}
data.AddRange(lastBank);
}
}
|