Localise cartridge map (also prevents MonoDevelop's debugger from crashing).

master
Nabile Rahmani 2018-07-05 21:27:32 +02:00
parent 9e41e65552
commit 9157ead6bb
1 changed files with 8 additions and 13 deletions

View File

@ -9,14 +9,7 @@ namespace DotN64.RCP
{
public partial class ParallelInterface : Interface
{
#region Fields
private readonly MappingEntry[] memoryMaps;
private readonly int cartridgeMapIndex;
#endregion
#region Properties
private ref MappingEntry CartridgeMap => ref memoryMaps[cartridgeMapIndex];
public Statuses Status { get; set; }
public Domain[] Domains { get; } = new[]
@ -46,7 +39,7 @@ namespace DotN64.RCP
: base(rcp)
{
MappingEntry cartridgeMap;
MemoryMaps = memoryMaps = new[]
MemoryMaps = new[]
{
new MappingEntry(0x04600010, 0x04600013) // PI status.
{
@ -107,19 +100,21 @@ namespace DotN64.RCP
Read = BitHelper.ReadOpenBus
}
};
cartridgeMapIndex = Array.IndexOf(memoryMaps, cartridgeMap);
var cartridgeMapIndex = Array.IndexOf(MemoryMaps as MappingEntry[], cartridgeMap);
rcp.nintendo64.CartridgeSwapped += (n, c) =>
{
ref var map = ref (MemoryMaps as MappingEntry[])[cartridgeMapIndex];
if (c != null)
{
var rom = c.ROM;
CartridgeMap.OffsetAddress = true;
CartridgeMap.Read = o => BitHelper.FromBigEndian(BitConverter.ToUInt32(rom, (int)o));
map.OffsetAddress = true;
map.Read = o => BitHelper.FromBigEndian(BitConverter.ToUInt32(rom, (int)o));
}
else
{
CartridgeMap.OffsetAddress = false;
CartridgeMap.Read = BitHelper.ReadOpenBus;
map.OffsetAddress = false;
map.Read = BitHelper.ReadOpenBus;
}
};
}