From 6fc595dc2796ead09c4720e79849d55819dc84fa Mon Sep 17 00:00:00 2001 From: Nabile Rahmani Date: Tue, 11 Dec 2018 20:01:04 +0100 Subject: [PATCH] More readable device states. --- DotN64/PIF/PeripheralInterface.CIC.cs | 37 +++++++++++++++++++++------ DotN64/PIF/PeripheralInterface.cs | 6 +++-- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/DotN64/PIF/PeripheralInterface.CIC.cs b/DotN64/PIF/PeripheralInterface.CIC.cs index 81fca09..8f31fe2 100644 --- a/DotN64/PIF/PeripheralInterface.CIC.cs +++ b/DotN64/PIF/PeripheralInterface.CIC.cs @@ -2,7 +2,7 @@ { public partial class PeripheralInterface { - public static class CIC + private static class CIC { #region Methods private static uint ComputeCRC32(byte[] data, int offset, int length) @@ -35,23 +35,44 @@ return c ^ 0xFFFFFFFF; } - public static uint GetSeed(byte[] data, int offset = Cartridge.HeaderSize, int length = Cartridge.BootstrapSize) + public static DeviceState GetDeviceState(byte[] data, int offset = Cartridge.HeaderSize, int length = Cartridge.BootstrapSize) { switch (ComputeCRC32(data, offset, length)) { case 0x6170A4A1: // NUS-6101. case 0x009E9EA3: // NUS-7102. - return 0x00043F3F; + return new DeviceState + { + IPL2Seed = 0x3F, + IPL3Seed = 0x3F, + Version = 1 + }; case 0x90BB6CB5: // NUS-6102. - return 0x00003F3F; + return new DeviceState + { + IPL2Seed = 0x3F, + IPL3Seed = 0x3F + }; case 0x0B050EE0: // NUS-6103. - return 0x0000783F; + return new DeviceState + { + IPL2Seed = 0x3F, + IPL3Seed = 0x78 + }; case 0x98BC2C86: // NUS-6105. - return 0x0000913F; + return new DeviceState + { + IPL2Seed = 0x3F, + IPL3Seed = 0x91 + }; case 0xACC8580A: // NUS-6106. - return 0x0000853F; + return new DeviceState + { + IPL2Seed = 0x3F, + IPL3Seed = 0x85 + }; case 0x0E018159: // NUS-8303. - return 0x0000DD00; + return new DeviceState { IPL3Seed = 0xDD }; default: return 0; } diff --git a/DotN64/PIF/PeripheralInterface.cs b/DotN64/PIF/PeripheralInterface.cs index 0a4fce6..eaa3111 100644 --- a/DotN64/PIF/PeripheralInterface.cs +++ b/DotN64/PIF/PeripheralInterface.cs @@ -140,11 +140,13 @@ namespace DotN64 private void DetectDevice() { if (nintendo64.Cartridge?.ROM.Length >= Cartridge.HeaderSize + Cartridge.BootstrapSize) - DeviceStateFlags = CIC.GetSeed(nintendo64.Cartridge.ROM); + DeviceStateFlags = CIC.GetDeviceState(nintendo64.Cartridge.ROM); else DeviceStateFlags = new DeviceState { - ROM = DeviceState.ROMType.DiskDrive + IPL3Seed = 0xDD, // TODO: Read the 64DD IPL header to set the seed based on region code. + ROM = DeviceState.ROMType.DiskDrive, + Reset = DeviceState.ResetType.NMI }; }