diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Core.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Core.cs index c566479896..fbddc1e881 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Core.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Core.cs @@ -188,6 +188,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES case "Famicom": apu = new APU(this, apu, false); ppu.region = PPU.Region.NTSC; + CoreComm.VsyncNum = 39375000; + CoreComm.VsyncDen = 655171; cpuclockrate = 1789773; cpu_sequence = cpu_sequence_NTSC; break; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/LibQuickNES.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/LibQuickNES.cs index 79d83b72b1..6449bdb124 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/LibQuickNES.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/LibQuickNES.cs @@ -208,6 +208,14 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES /// [DllImport(dllname, CallingConvention = CallingConvention.Cdecl)] public static extern void qn_poke_prgbus(IntPtr e, int addr, byte val); + /// + /// get the mapper that's loaded + /// + /// Context + /// recieves mapper number + /// mapper name + [DllImport(dllname, CallingConvention = CallingConvention.Cdecl)] + public static extern IntPtr qn_get_mapper(IntPtr e, ref int number); /// /// handle "string error" as returned by some quicknes functions diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs index 623e9ce698..cdfd1d5fe9 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs @@ -64,6 +64,13 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES InitVideo(); InitAudio(); InitMemoryDomains(); + + int mapper = 0; + string mappername = Marshal.PtrToStringAnsi(LibQuickNES.qn_get_mapper(Context, ref mapper)); + Console.WriteLine("QuickNES: Booted with Mapper #{0} \"{1}\"", mapper, mappername); + BoardName = mappername; + CoreComm.VsyncNum = 39375000; + CoreComm.VsyncDen = 655171; } catch { @@ -153,7 +160,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES public string SystemId { get { return "NES"; } } public bool DeterministicEmulation { get { return true; } } - public string BoardName { get { return null; } } // TODO + public string BoardName { get; private set; } #region saveram diff --git a/output/dll/libquicknes.dll b/output/dll/libquicknes.dll index fa768bfa87..5b8ef0eb80 100644 Binary files a/output/dll/libquicknes.dll and b/output/dll/libquicknes.dll differ diff --git a/quicknes/bizinterface.cpp b/quicknes/bizinterface.cpp index a8a29374d8..7a18b16f24 100644 --- a/quicknes/bizinterface.cpp +++ b/quicknes/bizinterface.cpp @@ -226,6 +226,18 @@ EXPORT int qn_get_memory_area(Nes_Emu *e, int which, const void **data, int *siz *writable = 0; *name = "CIRAM (nametables)"; return 1; + case 4: + *data = e->cart()->prg(); + *size = e->cart()->prg_size(); + *writable = 0; + *name = "PRG ROM"; + return 1; + case 5: + *data = e->cart()->chr(); + *size = e->cart()->chr_size(); + *writable = 0; + *name = "CHR VROM"; + return 1; } } @@ -238,3 +250,30 @@ EXPORT void qn_poke_prgbus(Nes_Emu *e, int addr, unsigned char val) { e->poke_prg(addr & 0xffff, val); } + +EXPORT const char *qn_get_mapper(Nes_Emu *e, int *number) +{ + int m = e->cart()->mapper_code(); + if (number) + *number = m; + switch (m) + { + default: return "unknown"; + case 0: return "nrom"; + case 1: return "mmc1"; + case 2: return "unrom"; + case 3: return "cnrom"; + case 4: return "mmc3"; + case 7: return "aorom"; + case 69: return "fme7"; + case 5: return "mmc5"; + case 19: return "namco106"; + case 24: return "vrc6a"; + case 26: return "vrc6b"; + case 11: return "color_dreams"; + case 34: return "nina1"; + case 66: return "gnrom"; + case 87: return "mapper_87"; + case 232: return "quattro"; + } +}