diff --git a/BizHawk.Emulation/Computers/Commodore64/C64.Core.cs b/BizHawk.Emulation/Computers/Commodore64/C64.Core.cs index 01aadbe677..c8fcc2d7f4 100644 --- a/BizHawk.Emulation/Computers/Commodore64/C64.Core.cs +++ b/BizHawk.Emulation/Computers/Commodore64/C64.Core.cs @@ -40,13 +40,13 @@ namespace BizHawk.Emulation.Computers.Commodore64 InitMedia(); // configure video - CoreOutputComm.VsyncDen = board.vic.CyclesPerFrame; - CoreOutputComm.VsyncNum = board.vic.CyclesPerSecond; + CoreComm.VsyncDen = board.vic.CyclesPerFrame; + CoreComm.VsyncNum = board.vic.CyclesPerSecond; } private void InitDisk(Region initRegion) { - string sourceFolder = CoreInputComm.C64_FirmwaresPath; + string sourceFolder = CoreComm.C64_FirmwaresPath; if (sourceFolder == null) sourceFolder = @".\C64\Firmwares"; string diskFile = "dos1541"; @@ -78,7 +78,7 @@ namespace BizHawk.Emulation.Computers.Commodore64 private void InitRoms() { - string sourceFolder = CoreInputComm.C64_FirmwaresPath; + string sourceFolder = CoreComm.C64_FirmwaresPath; if (sourceFolder == null) sourceFolder = @".\C64\Firmwares"; diff --git a/BizHawk.Emulation/Computers/Commodore64/C64.cs b/BizHawk.Emulation/Computers/Commodore64/C64.cs index ab147ac3ca..9404adc7dd 100644 --- a/BizHawk.Emulation/Computers/Commodore64/C64.cs +++ b/BizHawk.Emulation/Computers/Commodore64/C64.cs @@ -13,15 +13,14 @@ namespace BizHawk.Emulation.Computers.Commodore64 private string extension; private byte[] inputFile; - public C64(GameInfo game, byte[] rom, string romextension) + public C64(CoreComm comm, GameInfo game, byte[] rom, string romextension) { + CoreComm = comm; inputFile = rom; extension = romextension; - CoreOutputComm = new CoreOutputComm(); - CoreInputComm = new CoreInputComm(); Init(Region.PAL); cyclesPerFrame = (uint)board.vic.CyclesPerFrame; - CoreOutputComm.UsesDriveLed = true; + CoreComm.UsesDriveLed = true; SetupMemoryDomains(); } @@ -31,8 +30,7 @@ namespace BizHawk.Emulation.Computers.Commodore64 private int _frame = 0; // bizhawk I/O - public CoreInputComm CoreInputComm { get; set; } - public CoreOutputComm CoreOutputComm { get; private set; } + public CoreComm CoreComm { get; private set; } // game/rom specific public GameInfo game; @@ -126,7 +124,7 @@ namespace BizHawk.Emulation.Computers.Commodore64 Console.WriteLine("CPUPC: " + C64Util.ToHex(board.cpu.PC, 4) + " 1541PC: " + C64Util.ToHex(disk.PC, 4)); - CoreOutputComm.DriveLED = DriveLED; + CoreComm.DriveLED = DriveLED; } private void HandleFirmwareError(string file) diff --git a/BizHawk.Emulation/Consoles/Atari/2600/Atari2600.Core.cs b/BizHawk.Emulation/Consoles/Atari/2600/Atari2600.Core.cs index 05a54e4a94..c2ad7722f9 100644 --- a/BizHawk.Emulation/Consoles/Atari/2600/Atari2600.Core.cs +++ b/BizHawk.Emulation/Consoles/Atari/2600/Atari2600.Core.cs @@ -113,9 +113,9 @@ namespace BizHawk { byte temp = mapper.ReadMemory((ushort)(addr&0x1FFF)); - if (CoreInputComm.MemoryCallbackSystem.HasRead) + if (CoreComm.MemoryCallbackSystem.HasRead) { - CoreInputComm.MemoryCallbackSystem.TriggerRead(addr); + CoreComm.MemoryCallbackSystem.TriggerRead(addr); } return temp; @@ -132,9 +132,9 @@ namespace BizHawk { mapper.WriteMemory((ushort)(addr & 0x1FFF), value); - if (CoreInputComm.MemoryCallbackSystem.HasWrite) + if (CoreComm.MemoryCallbackSystem.HasWrite) { - CoreInputComm.MemoryCallbackSystem.TriggerWrite(addr); + CoreComm.MemoryCallbackSystem.TriggerWrite(addr); } } @@ -195,7 +195,7 @@ namespace BizHawk //cpu.PC = 0x0000; //set the initial PC // show mapper class on romstatusdetails - CoreOutputComm.RomStatusDetails = + CoreComm.RomStatusDetails = string.Format("{0}\r\nSHA1:{1}\r\nMD5:{2}\r\nMapper Impl \"{3}\"", game.Name, Util.BytesToHexString(System.Security.Cryptography.SHA1.Create().ComputeHash(rom)), @@ -215,8 +215,8 @@ namespace BizHawk tia.execute(1); m6532.timer.tick(); - if (CoreInputComm.Tracer.Enabled) - CoreInputComm.Tracer.Put(cpu.TraceState()); + if (CoreComm.Tracer.Enabled) + CoreComm.Tracer.Put(cpu.TraceState()); cpu.ExecuteOne(); //if (cpu.PendingCycles <= 0) //{ @@ -236,7 +236,7 @@ namespace BizHawk public byte ReadControls1(bool peek) { - if (CoreInputComm.InputCallback != null) CoreInputComm.InputCallback(); + if (CoreComm.InputCallback != null) CoreComm.InputCallback(); byte value = 0xFF; if (Controller["P1 Up"]) value &= 0xEF; @@ -250,7 +250,7 @@ namespace BizHawk public byte ReadControls2(bool peek) { - if (CoreInputComm.InputCallback != null) CoreInputComm.InputCallback(); + if (CoreComm.InputCallback != null) CoreComm.InputCallback(); byte value = 0xFF; if (Controller["P2 Up"]) value &= 0xEF; diff --git a/BizHawk.Emulation/Consoles/Atari/2600/Atari2600.cs b/BizHawk.Emulation/Consoles/Atari/2600/Atari2600.cs index fe8cbb69db..7bd14de42d 100644 --- a/BizHawk.Emulation/Consoles/Atari/2600/Atari2600.cs +++ b/BizHawk.Emulation/Consoles/Atari/2600/Atari2600.cs @@ -9,22 +9,20 @@ namespace BizHawk public string SystemId { get { return "A26"; } } public GameInfo game; - public CoreInputComm CoreInputComm { get; set; } - public CoreOutputComm CoreOutputComm { get; private set; } + public CoreComm CoreComm { get; private set; } public IVideoProvider VideoProvider { get { return tia; } } public ISoundProvider SoundProvider { get { return dcfilter; } } public ISyncSoundProvider SyncSoundProvider { get { return new FakeSyncSound(dcfilter, 735); } } public bool StartAsyncSound() { return true; } public void EndAsyncSound() { } - public Atari2600(GameInfo game, byte[] rom) + public Atari2600(CoreComm comm, GameInfo game, byte[] rom) { + CoreComm = comm; var domains = new List(1); domains.Add(new MemoryDomain("Main RAM", 128, Endian.Little, addr => ram[addr & 127], (addr, value) => ram[addr & 127] = value)); memoryDomains = domains.AsReadOnly(); - CoreOutputComm = new CoreOutputComm(); - CoreOutputComm.CpuTraceAvailable = true; - CoreInputComm = new CoreInputComm(); + CoreComm.CpuTraceAvailable = true; this.rom = rom; this.game = game; Console.WriteLine("Game uses mapper " + game.GetOptionsDict()["m"]); diff --git a/BizHawk.Emulation/Consoles/Atari/2600/TIA.cs b/BizHawk.Emulation/Consoles/Atari/2600/TIA.cs index 8cf88a2c10..82675cc35c 100644 --- a/BizHawk.Emulation/Consoles/Atari/2600/TIA.cs +++ b/BizHawk.Emulation/Consoles/Atari/2600/TIA.cs @@ -699,12 +699,12 @@ namespace BizHawk.Emulation.Consoles.Atari // Pick the pixel color from collisions uint pixelColor = 0x000000; - if (core.CoreInputComm.Atari2600_ShowBG) + if (core.CoreComm.Atari2600_ShowBG) { pixelColor = palette[playField.bkColor]; } - if ((collisions & CXPF) != 0 && core.CoreInputComm.Atari2600_ShowPF) + if ((collisions & CXPF) != 0 && core.CoreComm.Atari2600_ShowPF) { if (playField.score) { @@ -726,7 +726,7 @@ namespace BizHawk.Emulation.Consoles.Atari if ((collisions & CXBL) != 0) { ball.collisions |= collisions; - if (core.CoreInputComm.Atari2600_ShowBall) + if (core.CoreComm.Atari2600_ShowBall) { pixelColor = palette[playField.pfColor]; } @@ -735,7 +735,7 @@ namespace BizHawk.Emulation.Consoles.Atari if ((collisions & CXM1) != 0) { player1.missile.collisions |= collisions; - if (core.CoreInputComm.Atari2600_ShowMissle2) + if (core.CoreComm.Atari2600_ShowMissle2) { pixelColor = palette[player1.color]; } @@ -744,7 +744,7 @@ namespace BizHawk.Emulation.Consoles.Atari if ((collisions & CXP1) != 0) { player1.collisions |= collisions; - if (core.CoreInputComm.Atari2600_ShowPlayer2) + if (core.CoreComm.Atari2600_ShowPlayer2) { pixelColor = palette[player1.color]; } @@ -753,7 +753,7 @@ namespace BizHawk.Emulation.Consoles.Atari if ((collisions & CXM0) != 0) { player0.missile.collisions |= collisions; - if (core.CoreInputComm.Atari2600_ShowMissle1) + if (core.CoreComm.Atari2600_ShowMissle1) { pixelColor = palette[player0.color]; } @@ -762,13 +762,13 @@ namespace BizHawk.Emulation.Consoles.Atari if ((collisions & CXP0) != 0) { player0.collisions |= collisions; - if (core.CoreInputComm.Atari2600_ShowPlayer1) + if (core.CoreComm.Atari2600_ShowPlayer1) { pixelColor = palette[player0.color]; } } - if (playField.priority && (collisions & CXPF) != 0 && core.CoreInputComm.Atari2600_ShowPF) + if (playField.priority && (collisions & CXPF) != 0 && core.CoreComm.Atari2600_ShowPF) { if (playField.score) { diff --git a/BizHawk.Emulation/Consoles/Atari/7800/Atari7800.cs b/BizHawk.Emulation/Consoles/Atari/7800/Atari7800.cs index 61f8557df8..ea1c556c7d 100644 --- a/BizHawk.Emulation/Consoles/Atari/7800/Atari7800.cs +++ b/BizHawk.Emulation/Consoles/Atari/7800/Atari7800.cs @@ -29,8 +29,7 @@ namespace BizHawk } /* TODO */ - public CoreInputComm CoreInputComm { get; set; } - public CoreOutputComm CoreOutputComm { get; private set; } + public CoreComm CoreComm { get; private set; } public ISyncSoundProvider SyncSoundProvider { get { return null; } } public bool StartAsyncSound() { return true; } public void EndAsyncSound() { } @@ -89,14 +88,14 @@ namespace BizHawk } }; - public Atari7800(GameInfo game, byte[] rom, byte[] ntsc_bios, byte[] pal_bios, byte[] highscoreBIOS) + public Atari7800(CoreComm comm, GameInfo game, byte[] rom, byte[] ntsc_bios, byte[] pal_bios, byte[] highscoreBIOS) { + CoreComm = comm; + //TODO: store both the ntsc bios and the pal bios var domains = new List(1); domains.Add(new MemoryDomain("Main RAM", 1, Endian.Little, addr => 0xFF, null)); //TODO memoryDomains = domains.AsReadOnly(); - CoreOutputComm = new CoreOutputComm(); - CoreInputComm = new CoreInputComm(); this.rom = rom; this.game = game; this.hsbios = highscoreBIOS; @@ -111,7 +110,7 @@ namespace BizHawk { _lagcount = 0; // show mapper class on romstatusdetails - CoreOutputComm.RomStatusDetails = + CoreComm.RomStatusDetails = string.Format("{0}\r\nSHA1:{1}\r\nMD5:{2}\r\nMapper Impl \"{3}\"", game.Name, Util.BytesToHexString(System.Security.Cryptography.SHA1.Create().ComputeHash(rom)), diff --git a/BizHawk.Emulation/Consoles/Calculator/TI83.cs b/BizHawk.Emulation/Consoles/Calculator/TI83.cs index ae9f7a3b99..641f18b920 100644 --- a/BizHawk.Emulation/Consoles/Calculator/TI83.cs +++ b/BizHawk.Emulation/Consoles/Calculator/TI83.cs @@ -39,9 +39,9 @@ namespace BizHawk.Emulation.Consoles.Calculator ret = rom[romPage * 0x4000 + addr - 0x4000]; //other rom page else ret = ram[addr - 0x8000]; - if (CoreInputComm.MemoryCallbackSystem.HasRead) + if (CoreComm.MemoryCallbackSystem.HasRead) { - CoreInputComm.MemoryCallbackSystem.TriggerRead(addr); + CoreComm.MemoryCallbackSystem.TriggerRead(addr); } return ret; @@ -55,9 +55,9 @@ namespace BizHawk.Emulation.Consoles.Calculator return; //other rom page else ram[addr - 0x8000] = value; - if (CoreInputComm.MemoryCallbackSystem.HasWrite) + if (CoreComm.MemoryCallbackSystem.HasWrite) { - CoreInputComm.MemoryCallbackSystem.TriggerWrite(addr); + CoreComm.MemoryCallbackSystem.TriggerWrite(addr); } } @@ -136,7 +136,7 @@ namespace BizHawk.Emulation.Consoles.Calculator byte ReadKeyboard() { - if (CoreInputComm.InputCallback != null) CoreInputComm.InputCallback(); + if (CoreComm.InputCallback != null) CoreComm.InputCallback(); //ref TI-9X int ret = 0xFF; @@ -326,9 +326,9 @@ namespace BizHawk.Emulation.Consoles.Calculator } } - public TI83(GameInfo game, byte[] rom) + public TI83(CoreComm comm, GameInfo game, byte[] rom) { - CoreOutputComm = new CoreOutputComm(); + CoreComm = comm; cpu.ReadMemory = ReadMemory; cpu.WriteMemory = WriteMemory; cpu.ReadHardware = ReadHardware; @@ -362,8 +362,7 @@ namespace BizHawk.Emulation.Consoles.Calculator } - public CoreInputComm CoreInputComm { get; set; } - public CoreOutputComm CoreOutputComm { get; private set; } + public CoreComm CoreComm { get; private set; } protected byte[] vram = new byte[0x300]; class MyVideoProvider : IVideoProvider diff --git a/BizHawk.Emulation/Consoles/Coleco/ColecoVision.cs b/BizHawk.Emulation/Consoles/Coleco/ColecoVision.cs index a7f2a85f13..dd4142b658 100644 --- a/BizHawk.Emulation/Consoles/Coleco/ColecoVision.cs +++ b/BizHawk.Emulation/Consoles/Coleco/ColecoVision.cs @@ -20,8 +20,10 @@ namespace BizHawk.Emulation.Consoles.Coleco public SN76489 PSG; public byte[] Ram = new byte[1024]; - public ColecoVision(GameInfo game, byte[] rom, string biosPath, bool skipbios) + public ColecoVision(CoreComm comm, GameInfo game, byte[] rom, string biosPath, bool skipbios) { + CoreComm = comm; + Cpu = new Z80A(); Cpu.ReadMemory = ReadMemory; Cpu.WriteMemory = WriteMemory; @@ -34,11 +36,8 @@ namespace BizHawk.Emulation.Consoles.Coleco // TODO: hack to allow bios-less operation would be nice, no idea if its feasible BiosRom = File.ReadAllBytes(biosPath); - CoreOutputComm = new CoreOutputComm(); - CoreInputComm = new CoreInputComm(); - - if (game["NoSkip"]) - skipbios = false; + if (game["NoSkip"]) + skipbios = false; LoadRom(rom, skipbios); this.game = game; SetupMemoryDomains(); @@ -239,8 +238,7 @@ namespace BizHawk.Emulation.Consoles.Coleco public string SystemId { get { return "Coleco"; } } public GameInfo game; - public CoreInputComm CoreInputComm { get; set; } - public CoreOutputComm CoreOutputComm { get; private set; } + public CoreComm CoreComm { get; private set; } public IVideoProvider VideoProvider { get { return VDP; } } public ISoundProvider SoundProvider { get { return PSG; } } diff --git a/BizHawk.Emulation/Consoles/Intellivision/Intellivision.cs b/BizHawk.Emulation/Consoles/Intellivision/Intellivision.cs index 1ad17d944a..e375302f6c 100644 --- a/BizHawk.Emulation/Consoles/Intellivision/Intellivision.cs +++ b/BizHawk.Emulation/Consoles/Intellivision/Intellivision.cs @@ -38,8 +38,10 @@ namespace BizHawk.Emulation.Consoles.Intellivision if (GraphicsRom.Length != 2048) throw new ApplicationException("GROM file is wrong size - expected 2048 bytes"); } - public Intellivision(GameInfo game, byte[] rom) + public Intellivision(CoreComm comm, GameInfo game, byte[] rom) { + CoreComm = comm; + Rom = rom; Game = game; Cart = new Intellicart(); @@ -65,8 +67,6 @@ namespace BizHawk.Emulation.Consoles.Intellivision Connect(); - CoreOutputComm = new CoreOutputComm(); - Cpu.LogData(); } @@ -162,8 +162,7 @@ namespace BizHawk.Emulation.Consoles.Intellivision return new byte[0]; } - public CoreInputComm CoreInputComm { get; set; } - public CoreOutputComm CoreOutputComm { get; private set; } + public CoreComm CoreComm { get; private set; } public IList MemoryDomains { diff --git a/BizHawk.Emulation/Consoles/Intellivision/MemoryMap.cs b/BizHawk.Emulation/Consoles/Intellivision/MemoryMap.cs index 4686b3fc97..5ed88c41b0 100644 --- a/BizHawk.Emulation/Consoles/Intellivision/MemoryMap.cs +++ b/BizHawk.Emulation/Consoles/Intellivision/MemoryMap.cs @@ -115,9 +115,9 @@ namespace BizHawk.Emulation.Consoles.Intellivision break; } - if (CoreInputComm.MemoryCallbackSystem.HasRead) + if (CoreComm.MemoryCallbackSystem.HasRead) { - CoreInputComm.MemoryCallbackSystem.TriggerRead(addr); + CoreComm.MemoryCallbackSystem.TriggerRead(addr); } if (cart != null) @@ -286,9 +286,9 @@ namespace BizHawk.Emulation.Consoles.Intellivision } } - if (CoreInputComm.MemoryCallbackSystem.HasWrite) + if (CoreComm.MemoryCallbackSystem.HasWrite) { - CoreInputComm.MemoryCallbackSystem.TriggerWrite(addr); + CoreComm.MemoryCallbackSystem.TriggerWrite(addr); } return (cart || stic || psg); diff --git a/BizHawk.Emulation/Consoles/Nintendo/GBA/Meteor.cs b/BizHawk.Emulation/Consoles/Nintendo/GBA/Meteor.cs index 0e624d6883..6a66d1e4fd 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/GBA/Meteor.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/GBA/Meteor.cs @@ -21,6 +21,17 @@ namespace BizHawk.Emulation.Consoles.Nintendo.GBA public ControllerDefinition ControllerDefinition { get { return GBAController; } } public IController Controller { get; set; } + public GBA(CoreComm comm) + { + CoreComm = comm; + comm.VsyncNum = 262144; + comm.VsyncDen = 4389; + comm.CpuTraceAvailable = true; + comm.TraceHeader = " -Addr--- -Opcode- -Instruction------------------- -R0----- -R1----- -R2----- -R3----- -R4----- -R5----- -R6----- -R7----- -R8----- -R9----- -R10---- -R11---- -R12---- -R13(SP) -R14(LR) -R15(PC) -CPSR--- -SPSR---"; + comm.NominalWidth = 240; + comm.NominalHeight = 160; + } + public void Load(byte[] rom, byte[] bios) { if (bios.Length != 16384) @@ -43,7 +54,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo.GBA if (Controller["Power"]) LibMeteor.libmeteor_hardreset(); // due to the design of the tracing api, we have to poll whether it's active each frame - LibMeteor.libmeteor_settracecallback(CoreInputComm.Tracer.Enabled ? tracecallback : null); + LibMeteor.libmeteor_settracecallback(CoreComm.Tracer.Enabled ? tracecallback : null); if (!coredead) LibMeteor.libmeteor_frameadvance(); if (IsLagFrame) @@ -169,20 +180,8 @@ namespace BizHawk.Emulation.Consoles.Nintendo.GBA #endregion - public CoreInputComm CoreInputComm { get; set; } - - CoreOutputComm _CoreOutputComm = new CoreOutputComm - { - VsyncNum = 262144, - VsyncDen = 4389, - CpuTraceAvailable = true, - TraceHeader = " -Addr--- -Opcode- -Instruction------------------- -R0----- -R1----- -R2----- -R3----- -R4----- -R5----- -R6----- -R7----- -R8----- -R9----- -R10---- -R11---- -R12---- -R13(SP) -R14(LR) -R15(PC) -CPSR--- -SPSR---", - NominalWidth = 240, - NominalHeight = 160 - }; - - public CoreOutputComm CoreOutputComm { get { return _CoreOutputComm; } } - + public CoreComm CoreComm { get; private set; } + #region memorydomains List _MemoryDomains = new List(); @@ -377,7 +376,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo.GBA void Trace(string msg) { - CoreInputComm.Tracer.Put(msg); + CoreComm.Tracer.Put(msg); } Action EndOfFrameCallback = null; diff --git a/BizHawk.Emulation/Consoles/Nintendo/Gameboy/Gambatte.cs b/BizHawk.Emulation/Consoles/Nintendo/Gameboy/Gambatte.cs index c5f2b39257..80734b7faa 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/Gameboy/Gambatte.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/Gameboy/Gambatte.cs @@ -26,8 +26,10 @@ namespace BizHawk.Emulation.Consoles.GB /// LibGambatte.Buttons CurrentButtons = 0; - public Gameboy(GameInfo game, byte[] romdata) + public Gameboy(CoreComm comm, GameInfo game, byte[] romdata) { + CoreComm = comm; + ThrowExceptionForBadRom(romdata); GambatteState = LibGambatte.gambatte_create(); @@ -64,7 +66,7 @@ namespace BizHawk.Emulation.Consoles.GB InitMemoryDomains(); - GbOutputComm.RomStatusDetails = string.Format("{0}\r\nSHA1:{1}\r\nMD5:{2}\r\n", + CoreComm.RomStatusDetails = string.Format("{0}\r\nSHA1:{1}\r\nMD5:{2}\r\n", game.Name, Util.BytesToHexString(System.Security.Cryptography.SHA1.Create().ComputeHash(romdata)), Util.BytesToHexString(System.Security.Cryptography.MD5.Create().ComputeHash(romdata)) @@ -89,7 +91,7 @@ namespace BizHawk.Emulation.Consoles.GB LibGambatte.Buttons ControllerCallback() { - if (CoreInputComm.InputCallback != null) CoreInputComm.InputCallback(); + if (CoreComm.InputCallback != null) CoreComm.InputCallback(); IsLagFrame = false; return CurrentButtons; } @@ -140,7 +142,7 @@ namespace BizHawk.Emulation.Consoles.GB LibGambatte.gambatte_reset(GambatteState); RefreshMemoryCallbacks(); - if (CoreInputComm.Tracer.Enabled) + if (CoreComm.Tracer.Enabled) tracecb = MakeTrace; else tracecb = null; @@ -391,7 +393,7 @@ namespace BizHawk.Emulation.Consoles.GB void RefreshMemoryCallbacks() { - var mcs = CoreInputComm.MemoryCallbackSystem; + var mcs = CoreComm.MemoryCallbackSystem; // we RefreshMemoryCallbacks() after the triggers in case the trigger turns itself off at that point @@ -412,23 +414,7 @@ namespace BizHawk.Emulation.Consoles.GB #endregion - public CoreInputComm CoreInputComm { get; set; } - - CoreOutputComm GbOutputComm = new CoreOutputComm - { - VsyncNum = 262144, - VsyncDen = 4389, - RomStatusAnnotation = null, //"Bizwhackin it up", - RomStatusDetails = null, //"LEVAR BURTON", - CpuTraceAvailable = true, - NominalWidth = 160, - NominalHeight = 144 - }; - - public CoreOutputComm CoreOutputComm - { - get { return GbOutputComm; } - } + public CoreComm CoreComm { get; set; } LibGambatte.TraceCallback tracecb; @@ -438,7 +424,7 @@ namespace BizHawk.Emulation.Consoles.GB System.Runtime.InteropServices.Marshal.Copy(_s, s, 0, 13); ushort unused; - CoreInputComm.Tracer.Put(string.Format( + CoreComm.Tracer.Put(string.Format( "{13} SP:{2:x2} A:{3:x2} B:{4:x2} C:{5:x2} D:{6:x2} E:{7:x2} F:{8:x2} H:{9:x2} L:{10:x2} {11} Cy:{0}", s[0], s[1] & 0xffff, diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/Core.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/Core.cs index 2af80d8ffe..3fc7994fb8 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/NES/Core.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/NES/Core.cs @@ -154,9 +154,9 @@ namespace BizHawk.Emulation.Consoles.Nintendo cpu.SetCallbacks(ReadMemory, ReadMemory, PeekMemory, WriteMemory, (h) => DisposeList.Add(h)); cpu.FetchCallback = () => { - if (CoreInputComm.Tracer.Enabled) + if (CoreComm.Tracer.Enabled) { - CoreInputComm.Tracer.Put(cpu.TraceState()); + CoreComm.Tracer.Put(cpu.TraceState()); } }; cpu.BCD_Enabled = false; @@ -178,8 +178,8 @@ namespace BizHawk.Emulation.Consoles.Nintendo case "NES-PAL-B": apu = new APU(this, apu, true); ppu.region = PPU.Region.PAL; - CoreOutputComm.VsyncNum = 50; - CoreOutputComm.VsyncDen = 1; + CoreComm.VsyncNum = 50; + CoreComm.VsyncDen = 1; cpuclockrate = 1662607; cpu_sequence = cpu_sequence_PAL; break; @@ -203,8 +203,8 @@ namespace BizHawk.Emulation.Consoles.Nintendo case "Dendy": apu = new APU(this, apu, false); ppu.region = PPU.Region.Dendy; - CoreOutputComm.VsyncNum = 50; - CoreOutputComm.VsyncDen = 1; + CoreComm.VsyncNum = 50; + CoreComm.VsyncDen = 1; cpuclockrate = 1773448; cpu_sequence = cpu_sequence_NTSC; break; @@ -405,7 +405,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo byte read_joyport(int addr) { - if (CoreInputComm.InputCallback != null) CoreInputComm.InputCallback(); + if (CoreComm.InputCallback != null) CoreComm.InputCallback(); return handle_read_joyport(addr, false); } @@ -602,9 +602,9 @@ namespace BizHawk.Emulation.Consoles.Nintendo ret = sysbus_watch[addr].ApplyGameGenie(ret); } - if (CoreInputComm.MemoryCallbackSystem.HasRead) + if (CoreComm.MemoryCallbackSystem.HasRead) { - CoreInputComm.MemoryCallbackSystem.TriggerRead(addr); + CoreComm.MemoryCallbackSystem.TriggerRead(addr); } DB = ret; @@ -665,9 +665,9 @@ namespace BizHawk.Emulation.Consoles.Nintendo board.WritePRG(addr - 0x8000, value); } - if (CoreInputComm.MemoryCallbackSystem.HasWrite) + if (CoreComm.MemoryCallbackSystem.HasWrite) { - CoreInputComm.MemoryCallbackSystem.TriggerWrite(addr); + CoreComm.MemoryCallbackSystem.TriggerWrite(addr); } } diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/NES.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/NES.cs index 69b905af5e..901aa1c9f0 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/NES/NES.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/NES/NES.cs @@ -16,11 +16,10 @@ namespace BizHawk.Emulation.Consoles.Nintendo static readonly bool USE_DATABASE = true; public RomStatus RomStatus; - public NES(GameInfo game, byte[] rom, byte[] fdsbios = null) + public NES(CoreComm comm, GameInfo game, byte[] rom, byte[] fdsbios = null) { - CoreOutputComm = new CoreOutputComm(); - CoreOutputComm.CpuTraceAvailable = true; - CoreInputComm = new BizHawk.CoreInputComm(); + CoreComm = comm; + CoreComm.CpuTraceAvailable = true; BootGodDB.Initialize(); SetPalette(Palettes.FCEUX_Standard); videoProvider = new MyVideoProvider(this); @@ -33,8 +32,8 @@ namespace BizHawk.Emulation.Consoles.Nintendo for (int i = 0; i < b.NumSides; i++) ControllerDefinition.BoolButtons.Add("FDS Insert " + i); - CoreOutputComm.UsesDriveLed = true; - b.SetDriveLightCallback((val) => CoreOutputComm.DriveLED = val); + CoreComm.UsesDriveLed = true; + b.SetDriveLightCallback((val) => CoreComm.DriveLED = val); } if (vs_io) { @@ -149,8 +148,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo NESWatch[] watches; } - public CoreInputComm CoreInputComm { get; set; } - public CoreOutputComm CoreOutputComm { get; private set; } + public CoreComm CoreComm { get; private set; } public DisplayType DisplayType { get { return BizHawk.DisplayType.NTSC; } } @@ -176,8 +174,8 @@ namespace BizHawk.Emulation.Consoles.Nintendo public void FillFrameBuffer() { int backdrop = 0; - if (emu.CoreInputComm != null) - backdrop = emu.CoreInputComm.NES_BackdropColor; + if (emu.CoreComm != null) + backdrop = emu.CoreComm.NES_BackdropColor; bool useBackdrop = (backdrop & 0xFF000000) != 0; //TODO - we could recalculate this on the fly (and invalidate/recalculate it when the palette is changed) @@ -201,7 +199,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo public int BackgroundColor { get { return 0; } } } - public int FirstDrawLine { get { return videoProvider.top; } set { videoProvider.top = value; CoreOutputComm.ScreenLogicalOffsetY = videoProvider.top; } } + public int FirstDrawLine { get { return videoProvider.top; } set { videoProvider.top = value; CoreComm.ScreenLogicalOffsetY = videoProvider.top; } } public int LastDrawLine { get { return videoProvider.bottom; } set { videoProvider.bottom = value; } } public void SetClipLeftAndRight(bool clip) @@ -217,7 +215,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo videoProvider.right = 255; } - CoreOutputComm.ScreenLogicalOffsetX = videoProvider.left; + CoreComm.ScreenLogicalOffsetX = videoProvider.left; videoProvider.FillFrameBuffer(); } @@ -698,17 +696,17 @@ namespace BizHawk.Emulation.Consoles.Nintendo if (origin == EDetectionOrigin.BootGodDB) { RomStatus = RomStatus.GoodDump; - CoreOutputComm.RomStatusAnnotation = "Identified from BootGod's database"; + CoreComm.RomStatusAnnotation = "Identified from BootGod's database"; } if (origin == EDetectionOrigin.UNIF) { RomStatus = RomStatus.NotInDatabase; - CoreOutputComm.RomStatusAnnotation = "Inferred from UNIF header; somewhat suspicious"; + CoreComm.RomStatusAnnotation = "Inferred from UNIF header; somewhat suspicious"; } if (origin == EDetectionOrigin.INES) { RomStatus = RomStatus.NotInDatabase; - CoreOutputComm.RomStatusAnnotation = "Inferred from iNES header; potentially wrong"; + CoreComm.RomStatusAnnotation = "Inferred from iNES header; potentially wrong"; } if (origin == EDetectionOrigin.GameDB) { @@ -723,7 +721,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo } LoadReport.Flush(); - CoreOutputComm.RomStatusDetails = LoadReport.ToString(); + CoreComm.RomStatusDetails = LoadReport.ToString(); //create the board's rom and vrom if (iNesHeaderInfo != null) diff --git a/BizHawk.Emulation/Consoles/Nintendo/NES/PPU.run.cs b/BizHawk.Emulation/Consoles/Nintendo/NES/PPU.run.cs index 5094196640..300a3aabf0 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/NES/PPU.run.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/NES/PPU.run.cs @@ -223,7 +223,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo pixelcolor |= 0x8000; //whats this? i think its a flag to indicate a hidden background to be used by the canvas filling logic later } - if (!nes.CoreInputComm.NES_ShowBG) + if (!nes.CoreComm.NES_ShowBG) pixelcolor = 0x8000; //whats this? i think its a flag to indicate a hidden background to be used by the canvas filling logic later //look for a sprite to be drawn @@ -259,7 +259,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo Reg2002_objhit |= (oam->index == 0 && pixel != 0 && rasterpos < 255); //priority handling, if in front of BG: bool drawsprite = !(((oam->oam[2] & 0x20) != 0) && ((pixel & 3) != 0)); - if (drawsprite && nes.CoreInputComm.NES_ShowOBJ) + if (drawsprite && nes.CoreComm.NES_ShowOBJ) { //bring in the palette bits and palettize spixel |= (oam->oam[2] & 3) << 2; @@ -300,7 +300,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo if (oamcount >= 8 && reg_2001.PPUON) { Reg2002_objoverflow = true; - if(!nes.CoreInputComm.NES_UnlimitedSprites) + if(!nes.CoreComm.NES_UnlimitedSprites) break; } //just copy some bytes into the internal sprite buffer diff --git a/BizHawk.Emulation/Consoles/Nintendo/SNES/LibsnesCore.cs b/BizHawk.Emulation/Consoles/Nintendo/SNES/LibsnesCore.cs index 4dcbdffa22..3984667641 100644 --- a/BizHawk.Emulation/Consoles/Nintendo/SNES/LibsnesCore.cs +++ b/BizHawk.Emulation/Consoles/Nintendo/SNES/LibsnesCore.cs @@ -405,7 +405,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo.SNES if (hint == "msu1.rom") return ""; //build romfilename - string test = Path.Combine(CoreInputComm.SNES_FirmwaresPath ?? "", hint); + string test = Path.Combine(CoreComm.SNES_FirmwaresPath ?? "", hint); //does it exist? if (!File.Exists(test)) @@ -422,7 +422,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo.SNES void snes_trace(string msg) { - CoreInputComm.Tracer.Put(msg); + CoreComm.Tracer.Put(msg); } public SnesColors.ColorType CurrPalette { get; private set; } @@ -435,8 +435,9 @@ namespace BizHawk.Emulation.Consoles.Nintendo.SNES BizHawk.Emulation.Consoles.Nintendo.SNES.LibsnesDll.snes_set_color_lut((IntPtr)p); } - public LibsnesCore() + public LibsnesCore(CoreComm comm) { + CoreComm = comm; } public void Load(GameInfo game, byte[] romData, byte[] sgbRomData, bool DeterministicEmulation) @@ -506,16 +507,16 @@ namespace BizHawk.Emulation.Consoles.Nintendo.SNES if (LibsnesDll.snes_get_region() == LibsnesDll.SNES_REGION.NTSC) { //similar to what aviout reports from snes9x and seems logical from bsnes first principles. bsnes uses that numerator (ntsc master clockrate) for sure. - CoreOutputComm.VsyncNum = 21477272; - CoreOutputComm.VsyncDen = 4 * 341 * 262; + CoreComm.VsyncNum = 21477272; + CoreComm.VsyncDen = 4 * 341 * 262; } else { - CoreOutputComm.VsyncNum = 50; - CoreOutputComm.VsyncDen = 1; + CoreComm.VsyncNum = 50; + CoreComm.VsyncDen = 1; } - CoreOutputComm.CpuTraceAvailable = true; + CoreComm.CpuTraceAvailable = true; LibsnesDll.snes_power(); @@ -547,7 +548,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo.SNES ushort snes_input_state(int port, int device, int index, int id) { - if (!nocallbacks && CoreInputComm.InputCallback != null) CoreInputComm.InputCallback(); + if (!nocallbacks && CoreComm.InputCallback != null) CoreComm.InputCallback(); //Console.WriteLine("{0} {1} {2} {3}", port, device, index, id); string key = "P" + (1 + port) + " "; @@ -663,7 +664,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo.SNES savestatebuff = ms.ToArray(); } - if (!nocallbacks && CoreInputComm.Tracer.Enabled) + if (!nocallbacks && CoreComm.Tracer.Enabled) LibsnesDll.snes_set_trace_callback(tracecb); else LibsnesDll.snes_set_trace_callback(null); @@ -680,18 +681,18 @@ namespace BizHawk.Emulation.Consoles.Nintendo.SNES bool powerSignal = Controller["Power"]; if (powerSignal) LibsnesDll.snes_power(); - LibsnesDll.snes_set_layer_enable(0, 0, CoreInputComm.SNES_ShowBG1_0); - LibsnesDll.snes_set_layer_enable(0, 1, CoreInputComm.SNES_ShowBG1_1); - LibsnesDll.snes_set_layer_enable(1, 0, CoreInputComm.SNES_ShowBG2_0); - LibsnesDll.snes_set_layer_enable(1, 1, CoreInputComm.SNES_ShowBG2_1); - LibsnesDll.snes_set_layer_enable(2, 0, CoreInputComm.SNES_ShowBG3_0); - LibsnesDll.snes_set_layer_enable(2, 1, CoreInputComm.SNES_ShowBG3_1); - LibsnesDll.snes_set_layer_enable(3, 0, CoreInputComm.SNES_ShowBG4_0); - LibsnesDll.snes_set_layer_enable(3, 1, CoreInputComm.SNES_ShowBG4_1); - LibsnesDll.snes_set_layer_enable(4, 0, CoreInputComm.SNES_ShowOBJ_0); - LibsnesDll.snes_set_layer_enable(4, 1, CoreInputComm.SNES_ShowOBJ_1); - LibsnesDll.snes_set_layer_enable(4, 2, CoreInputComm.SNES_ShowOBJ_2); - LibsnesDll.snes_set_layer_enable(4, 3, CoreInputComm.SNES_ShowOBJ_3); + LibsnesDll.snes_set_layer_enable(0, 0, CoreComm.SNES_ShowBG1_0); + LibsnesDll.snes_set_layer_enable(0, 1, CoreComm.SNES_ShowBG1_1); + LibsnesDll.snes_set_layer_enable(1, 0, CoreComm.SNES_ShowBG2_0); + LibsnesDll.snes_set_layer_enable(1, 1, CoreComm.SNES_ShowBG2_1); + LibsnesDll.snes_set_layer_enable(2, 0, CoreComm.SNES_ShowBG3_0); + LibsnesDll.snes_set_layer_enable(2, 1, CoreComm.SNES_ShowBG3_1); + LibsnesDll.snes_set_layer_enable(3, 0, CoreComm.SNES_ShowBG4_0); + LibsnesDll.snes_set_layer_enable(3, 1, CoreComm.SNES_ShowBG4_1); + LibsnesDll.snes_set_layer_enable(4, 0, CoreComm.SNES_ShowOBJ_0); + LibsnesDll.snes_set_layer_enable(4, 1, CoreComm.SNES_ShowOBJ_1); + LibsnesDll.snes_set_layer_enable(4, 2, CoreComm.SNES_ShowOBJ_2); + LibsnesDll.snes_set_layer_enable(4, 3, CoreComm.SNES_ShowOBJ_3); // if the input poll callback is called, it will set this to false IsLagFrame = true; @@ -1015,10 +1016,7 @@ namespace BizHawk.Emulation.Consoles.Nintendo.SNES #endregion - // Arbitrary extensible core comm mechanism - public CoreInputComm CoreInputComm { get; set; } - public CoreOutputComm CoreOutputComm { get { return _CoreOutputComm; } } - CoreOutputComm _CoreOutputComm = new CoreOutputComm(); + public CoreComm CoreComm { get; private set; } // ----- Client Debugging API stuff ----- unsafe MemoryDomain MakeMemoryDomain(string name, LibsnesDll.SNES_MEMORY id, Endian endian) diff --git a/BizHawk.Emulation/Consoles/PC Engine/Input.cs b/BizHawk.Emulation/Consoles/PC Engine/Input.cs index a2dca4aa77..32e177c05f 100644 --- a/BizHawk.Emulation/Consoles/PC Engine/Input.cs +++ b/BizHawk.Emulation/Consoles/PC Engine/Input.cs @@ -39,7 +39,7 @@ byte ReadInput() { - if (CoreInputComm.InputCallback != null) CoreInputComm.InputCallback(); + if (CoreComm.InputCallback != null) CoreComm.InputCallback(); byte value = 0x3F; int player = SelectedController + 1; diff --git a/BizHawk.Emulation/Consoles/PC Engine/MemoryMap.cs b/BizHawk.Emulation/Consoles/PC Engine/MemoryMap.cs index dd6a9a60c2..737c53d075 100644 --- a/BizHawk.Emulation/Consoles/PC Engine/MemoryMap.cs +++ b/BizHawk.Emulation/Consoles/PC Engine/MemoryMap.cs @@ -33,9 +33,9 @@ return 0xFF; } - if (CoreInputComm.MemoryCallbackSystem.HasRead) + if (CoreComm.MemoryCallbackSystem.HasRead) { - CoreInputComm.MemoryCallbackSystem.TriggerRead(addr); + CoreComm.MemoryCallbackSystem.TriggerRead(addr); } Log.Error("MEM", "UNHANDLED READ: {0:X6}", addr); @@ -74,9 +74,9 @@ else Log.Error("MEM", "UNHANDLED WRITE: {0:X6}:{1:X2}", addr, value); - if (CoreInputComm.MemoryCallbackSystem.HasWrite) + if (CoreComm.MemoryCallbackSystem.HasWrite) { - CoreInputComm.MemoryCallbackSystem.TriggerWrite(addr); + CoreComm.MemoryCallbackSystem.TriggerWrite(addr); } } } diff --git a/BizHawk.Emulation/Consoles/PC Engine/PCEngine.cs b/BizHawk.Emulation/Consoles/PC Engine/PCEngine.cs index cdcbb57962..25a3adbef5 100644 --- a/BizHawk.Emulation/Consoles/PC Engine/PCEngine.cs +++ b/BizHawk.Emulation/Consoles/PC Engine/PCEngine.cs @@ -51,10 +51,10 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx // 21,477,270 Machine clocks / sec // 7,159,090 Cpu cycles / sec - public PCEngine(GameInfo game, byte[] rom) + public PCEngine(CoreComm comm, GameInfo game, byte[] rom) { - CoreOutputComm = new CoreOutputComm(); - CoreOutputComm.CpuTraceAvailable = true; + CoreComm = comm; + CoreComm.CpuTraceAvailable = true; switch (game.System) { @@ -70,17 +70,17 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx Init(game, rom); } - public PCEngine(GameInfo game, Disc disc, byte[] rom) + public PCEngine(CoreComm comm, GameInfo game, Disc disc, byte[] rom) { + CoreComm = comm; + CoreComm.CpuTraceAvailable = true; + CoreComm.UsesDriveLed = true; systemid = "PCECD"; - CoreOutputComm = new CoreOutputComm(); - CoreOutputComm.CpuTraceAvailable = true; - CoreOutputComm.UsesDriveLed = true; Type = NecSystemType.TurboCD; this.disc = disc; Init(game, rom); // the default RomStatusDetails don't do anything with Disc - CoreOutputComm.RomStatusDetails = string.Format("{0}\r\nDisk partial hash:{1}", game.Name, disc.GetHash()); + CoreComm.RomStatusDetails = string.Format("{0}\r\nDisk partial hash:{1}", game.Name, disc.GetHash()); } void Init(GameInfo game, byte[] rom) @@ -92,7 +92,7 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx PSG = new HuC6280PSG(); SCSI = new ScsiCDBus(this, disc); - Cpu.Logger = (s) => CoreInputComm.Tracer.Put(s); + Cpu.Logger = (s) => CoreComm.Tracer.Put(s); if (TurboGrafx) { @@ -244,12 +244,12 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx public void FrameAdvance(bool render, bool rendersound) { lagged = true; - CoreOutputComm.DriveLED = false; + CoreComm.DriveLED = false; Controller.UpdateControls(Frame++); PSG.BeginFrame(Cpu.TotalExecutedCycles); - Cpu.Debug = CoreInputComm.Tracer.Enabled; - + Cpu.Debug = CoreComm.Tracer.Enabled; + if (SuperGrafx) VPC.ExecFrame(render); else @@ -268,8 +268,7 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx islag = false; } - public CoreInputComm CoreInputComm { get; set; } - public CoreOutputComm CoreOutputComm { get; private set; } + public CoreComm CoreComm { get; private set; } public IVideoProvider VideoProvider { diff --git a/BizHawk.Emulation/Consoles/PC Engine/ScsiCDBus.cs b/BizHawk.Emulation/Consoles/PC Engine/ScsiCDBus.cs index aa333e77fd..051b44f2d8 100644 --- a/BizHawk.Emulation/Consoles/PC Engine/ScsiCDBus.cs +++ b/BizHawk.Emulation/Consoles/PC Engine/ScsiCDBus.cs @@ -166,7 +166,7 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx if (DataReadInProgress && pce.Cpu.TotalExecutedCycles > DataReadWaitTimer) { if (SectorsLeftToRead > 0) - pce.CoreOutputComm.DriveLED = true; + pce.CoreComm.DriveLED = true; if (DataIn.Count == 0) { diff --git a/BizHawk.Emulation/Consoles/PC Engine/VDC.Render.cs b/BizHawk.Emulation/Consoles/PC Engine/VDC.Render.cs index 5725677267..4f4863ee14 100644 --- a/BizHawk.Emulation/Consoles/PC Engine/VDC.Render.cs +++ b/BizHawk.Emulation/Consoles/PC Engine/VDC.Render.cs @@ -108,8 +108,8 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx if (ActiveLine >= FrameHeight) return; - RenderBackgroundScanline(pce.CoreInputComm.PCE_ShowBG1); - RenderSpritesScanline(pce.CoreInputComm.PCE_ShowOBJ1); + RenderBackgroundScanline(pce.CoreComm.PCE_ShowBG1); + RenderSpritesScanline(pce.CoreComm.PCE_ShowOBJ1); } void RenderBackgroundScanline(bool show) diff --git a/BizHawk.Emulation/Consoles/PC Engine/VPC.cs b/BizHawk.Emulation/Consoles/PC Engine/VPC.cs index 42387419c4..5ec49497c9 100644 --- a/BizHawk.Emulation/Consoles/PC Engine/VPC.cs +++ b/BizHawk.Emulation/Consoles/PC Engine/VPC.cs @@ -267,16 +267,16 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx switch (EffectivePriorityMode) { case 0: - RenderBackgroundScanline(VDC1, 12, PCE.CoreInputComm.PCE_ShowBG1); - RenderBackgroundScanline(VDC2, 2, PCE.CoreInputComm.PCE_ShowBG2); - RenderSpritesScanline(VDC1, 11, 14, PCE.CoreInputComm.PCE_ShowOBJ1); - RenderSpritesScanline(VDC2, 1, 3, PCE.CoreInputComm.PCE_ShowOBJ2); + RenderBackgroundScanline(VDC1, 12, PCE.CoreComm.PCE_ShowBG1); + RenderBackgroundScanline(VDC2, 2, PCE.CoreComm.PCE_ShowBG2); + RenderSpritesScanline(VDC1, 11, 14, PCE.CoreComm.PCE_ShowOBJ1); + RenderSpritesScanline(VDC2, 1, 3, PCE.CoreComm.PCE_ShowOBJ2); break; case 1: - RenderBackgroundScanline(VDC1, 12, PCE.CoreInputComm.PCE_ShowBG1); - RenderBackgroundScanline(VDC2, 2, PCE.CoreInputComm.PCE_ShowBG2); - RenderSpritesScanline(VDC1, 11, 14, PCE.CoreInputComm.PCE_ShowOBJ1); - RenderSpritesScanline(VDC2, 1, 13, PCE.CoreInputComm.PCE_ShowOBJ2); + RenderBackgroundScanline(VDC1, 12, PCE.CoreComm.PCE_ShowBG1); + RenderBackgroundScanline(VDC2, 2, PCE.CoreComm.PCE_ShowBG2); + RenderSpritesScanline(VDC1, 11, 14, PCE.CoreComm.PCE_ShowOBJ1); + RenderSpritesScanline(VDC2, 1, 13, PCE.CoreComm.PCE_ShowOBJ2); break; } } diff --git a/BizHawk.Emulation/Consoles/PSX/Octoshock.cs b/BizHawk.Emulation/Consoles/PSX/Octoshock.cs index efbcdb4972..0d7c0da6d0 100644 --- a/BizHawk.Emulation/Consoles/PSX/Octoshock.cs +++ b/BizHawk.Emulation/Consoles/PSX/Octoshock.cs @@ -14,8 +14,7 @@ namespace BizHawk.Emulation.Consoles.PSX private int[] frameBuffer = new int[0]; private Random rand = new Random(); - public CoreInputComm CoreInputComm { get; set; } - public CoreOutputComm CoreOutputComm { get; private set; } + public CoreComm CoreComm { get; private set; } public IVideoProvider VideoProvider { get { return this; } } public ISoundProvider SoundProvider { get { return this; } } public ISyncSoundProvider SyncSoundProvider { get { return new FakeSyncSound(this, 735); } } @@ -50,11 +49,10 @@ namespace BizHawk.Emulation.Consoles.PSX //BizHawk.Emulation.Consoles.Nintendo.SNES.LibsnesDll.snes_set_audio_sample(null); } - public Octoshock() + public Octoshock(CoreComm comm) { var domains = new List(); - CoreOutputComm = new CoreOutputComm(); - CoreInputComm = new CoreInputComm(); + CoreComm = comm; VirtualWidth = BufferWidth = 256; BufferHeight = 192; } @@ -121,7 +119,7 @@ namespace BizHawk.Emulation.Consoles.PSX if (parts[0] != "$psx") throw new InvalidOperationException("Octoshock using some weird path we dont handle yet"); if (parts[1] == "firmware") { - fname = Path.Combine(CurrOctoshockCore.CoreInputComm.PSX_FirmwaresPath, parts[2]); + fname = Path.Combine(CurrOctoshockCore.CoreComm.PSX_FirmwaresPath, parts[2]); if (!File.Exists(fname)) { System.Windows.Forms.MessageBox.Show("the Octoshock core is referencing a firmware file which could not be found. Please make sure it's in your configured PSX firmwares folder. The referenced filename is: " + parts[1]); diff --git a/BizHawk.Emulation/Consoles/Sega/Genesis/Genesis.cs b/BizHawk.Emulation/Consoles/Sega/Genesis/Genesis.cs index ce1cbf4e99..15664f5061 100644 --- a/BizHawk.Emulation/Consoles/Sega/Genesis/Genesis.cs +++ b/BizHawk.Emulation/Consoles/Sega/Genesis/Genesis.cs @@ -73,9 +73,9 @@ namespace BizHawk.Emulation.Consoles.Sega WriteCallback write32; #endif - public Genesis(GameInfo game, byte[] rom) + public Genesis(CoreComm comm, GameInfo game, byte[] rom) { - CoreOutputComm = new CoreOutputComm(); + CoreComm = comm; MainCPU = new MC68000(); SoundCPU = new Z80A(); YM2612 = new YM2612() { MaxVolume = 23405 }; @@ -250,8 +250,7 @@ namespace BizHawk.Emulation.Consoles.Sega unchecked { VDP.VdpStatusWord &= (ushort)~GenVDP.StatusVerticalInterruptPending; } } - public CoreInputComm CoreInputComm { get; set; } - public CoreOutputComm CoreOutputComm { get; private set; } + public CoreComm CoreComm { get; private set; } public IVideoProvider VideoProvider { diff --git a/BizHawk.Emulation/Consoles/Sega/Genesis/IO.cs b/BizHawk.Emulation/Consoles/Sega/Genesis/IO.cs index c63421bfdb..0d33956c31 100644 --- a/BizHawk.Emulation/Consoles/Sega/Genesis/IO.cs +++ b/BizHawk.Emulation/Consoles/Sega/Genesis/IO.cs @@ -106,7 +106,7 @@ void ReadController(ref byte data) { - if (CoreInputComm.InputCallback != null) CoreInputComm.InputCallback(); + if (CoreComm.InputCallback != null) CoreComm.InputCallback(); data &= 0xC0; if ((data & 0x40) != 0) // TH high { diff --git a/BizHawk.Emulation/Consoles/Sega/SMS/Input.cs b/BizHawk.Emulation/Consoles/Sega/SMS/Input.cs index 7fc6bf56db..33481bf4a1 100644 --- a/BizHawk.Emulation/Consoles/Sega/SMS/Input.cs +++ b/BizHawk.Emulation/Consoles/Sega/SMS/Input.cs @@ -18,7 +18,7 @@ byte ReadControls1() { - if (CoreInputComm.InputCallback != null) CoreInputComm.InputCallback(); + if (CoreComm.InputCallback != null) CoreComm.InputCallback(); lagged = false; byte value = 0xFF; @@ -37,7 +37,7 @@ byte ReadControls2() { - if (CoreInputComm.InputCallback != null) CoreInputComm.InputCallback(); + if (CoreComm.InputCallback != null) CoreComm.InputCallback(); lagged = false; byte value = 0xFF; diff --git a/BizHawk.Emulation/Consoles/Sega/SMS/MemoryMap.Sega.cs b/BizHawk.Emulation/Consoles/Sega/SMS/MemoryMap.Sega.cs index 6892b01377..83addfe8df 100644 --- a/BizHawk.Emulation/Consoles/Sega/SMS/MemoryMap.Sega.cs +++ b/BizHawk.Emulation/Consoles/Sega/SMS/MemoryMap.Sega.cs @@ -43,9 +43,9 @@ ret = SystemRam[address & RamSizeMask]; } - if (CoreInputComm.MemoryCallbackSystem.HasRead) + if (CoreComm.MemoryCallbackSystem.HasRead) { - CoreInputComm.MemoryCallbackSystem.TriggerRead(address); + CoreComm.MemoryCallbackSystem.TriggerRead(address); } return ret; @@ -81,9 +81,9 @@ return; } - if (CoreInputComm.MemoryCallbackSystem.HasWrite) + if (CoreComm.MemoryCallbackSystem.HasWrite) { - CoreInputComm.MemoryCallbackSystem.TriggerWrite(address); + CoreComm.MemoryCallbackSystem.TriggerWrite(address); } } diff --git a/BizHawk.Emulation/Consoles/Sega/SMS/SMS.cs b/BizHawk.Emulation/Consoles/Sega/SMS/SMS.cs index 06843e1650..8399199deb 100644 --- a/BizHawk.Emulation/Consoles/Sega/SMS/SMS.cs +++ b/BizHawk.Emulation/Consoles/Sega/SMS/SMS.cs @@ -85,12 +85,13 @@ namespace BizHawk.Emulation.Consoles.Sega public DisplayType DisplayType { get; set; } public bool DeterministicEmulation { get { return true; } } - public SMS(GameInfo game, byte[] rom) + public SMS(CoreComm comm, GameInfo game, byte[] rom) { - IsGameGear = game.System == "GG"; + CoreComm = comm; + + IsGameGear = game.System == "GG"; RomData = rom; - CoreOutputComm = new CoreOutputComm(); - CoreOutputComm.CpuTraceAvailable = true; + CoreComm.CpuTraceAvailable = true; if (RomData.Length % BankSize != 0) Array.Resize(ref RomData, ((RomData.Length / BankSize) + 1) * BankSize); @@ -98,8 +99,8 @@ namespace BizHawk.Emulation.Consoles.Sega DisplayType = DisplayType.NTSC; if (game["PAL"]) DisplayType = DisplayType.PAL; - CoreOutputComm.VsyncNum = DisplayType == DisplayType.NTSC ? 60 : 50; - CoreOutputComm.VsyncDen = 1; + CoreComm.VsyncNum = DisplayType == DisplayType.NTSC ? 60 : 50; + CoreComm.VsyncDen = 1; if (game["Japan"]) Region = "Japan"; if (game.NotInDatabase || game["FM"] && game["UseFM"]) @@ -201,9 +202,9 @@ namespace BizHawk.Emulation.Consoles.Sega lagged = true; Controller.UpdateControls(Frame++); PSG.BeginFrame(Cpu.TotalExecutedCycles); - Cpu.Debug = CoreInputComm.Tracer.Enabled; - if (Cpu.Debug && Cpu.Logger == null) // TODO, lets not do this on each frame. But lets refactor CoreInputComm/CoreOutputComm first - Cpu.Logger = (s) => CoreInputComm.Tracer.Put(s); + Cpu.Debug = CoreComm.Tracer.Enabled; + if (Cpu.Debug && Cpu.Logger == null) // TODO, lets not do this on each frame. But lets refactor CoreComm/CoreComm first + Cpu.Logger = (s) => CoreComm.Tracer.Put(s); if (IsGameGear == false) Cpu.NonMaskableInterrupt = Controller["Pause"]; @@ -359,8 +360,7 @@ namespace BizHawk.Emulation.Consoles.Sega } public IVideoProvider VideoProvider { get { return Vdp; } } - public CoreInputComm CoreInputComm { get; set; } - public CoreOutputComm CoreOutputComm { get; private set; } + public CoreComm CoreComm { get; private set; } ISoundProvider ActiveSoundProvider; public ISoundProvider SoundProvider { get { return ActiveSoundProvider; } } diff --git a/BizHawk.Emulation/Consoles/Sega/SMS/VDP.Mode4.cs b/BizHawk.Emulation/Consoles/Sega/SMS/VDP.Mode4.cs index 5ced54698d..6524c8b321 100644 --- a/BizHawk.Emulation/Consoles/Sega/SMS/VDP.Mode4.cs +++ b/BizHawk.Emulation/Consoles/Sega/SMS/VDP.Mode4.cs @@ -289,7 +289,7 @@ namespace BizHawk.Emulation.Consoles.Sega if (mode == VdpMode.GameGear) { - if (Sms.CoreInputComm.GG_ShowClippedRegions == false) + if (Sms.CoreComm.GG_ShowClippedRegions == false) { int yStart = (FrameHeight - 144)/2; for (int y = 0; y < 144; y++) @@ -297,7 +297,7 @@ namespace BizHawk.Emulation.Consoles.Sega GameGearFrameBuffer[(y * 160) + x] = FrameBuffer[((y + yStart) * 256) + x + 48]; } - if (Sms.CoreInputComm.GG_HighlightActiveDisplayRegion && Sms.CoreInputComm.GG_ShowClippedRegions) + if (Sms.CoreComm.GG_HighlightActiveDisplayRegion && Sms.CoreComm.GG_ShowClippedRegions) { // Top 24 scanlines for (int y = 0; y < 24; y++) diff --git a/BizHawk.Emulation/Consoles/Sega/SMS/VDP.cs b/BizHawk.Emulation/Consoles/Sega/SMS/VDP.cs index e835f90435..b2a35943dc 100644 --- a/BizHawk.Emulation/Consoles/Sega/SMS/VDP.cs +++ b/BizHawk.Emulation/Consoles/Sega/SMS/VDP.cs @@ -377,28 +377,28 @@ namespace BizHawk.Emulation.Consoles.Sega return; } - RenderBackgroundCurrentLine(Sms.CoreInputComm.SMS_ShowBG); + RenderBackgroundCurrentLine(Sms.CoreComm.SMS_ShowBG); if (EnableDoubledSprites) - RenderSpritesCurrentLineDoubleSize(Sms.CoreInputComm.SMS_ShowOBJ); + RenderSpritesCurrentLineDoubleSize(Sms.CoreComm.SMS_ShowOBJ); else - RenderSpritesCurrentLine(Sms.CoreInputComm.SMS_ShowOBJ); + RenderSpritesCurrentLine(Sms.CoreComm.SMS_ShowOBJ); } else if (TmsMode == 2) { if (render == false) return; - RenderBackgroundM2(Sms.CoreInputComm.SMS_ShowBG); - RenderTmsSprites(Sms.CoreInputComm.SMS_ShowOBJ); + RenderBackgroundM2(Sms.CoreComm.SMS_ShowBG); + RenderTmsSprites(Sms.CoreComm.SMS_ShowOBJ); } else if (TmsMode == 0) { if (render == false) return; - RenderBackgroundM0(Sms.CoreInputComm.SMS_ShowBG); - RenderTmsSprites(Sms.CoreInputComm.SMS_ShowOBJ); + RenderBackgroundM0(Sms.CoreComm.SMS_ShowBG); + RenderTmsSprites(Sms.CoreComm.SMS_ShowOBJ); } } @@ -496,7 +496,7 @@ namespace BizHawk.Emulation.Consoles.Sega public int[] GetVideoBuffer() { - if (mode == VdpMode.SMS || Sms.CoreInputComm.GG_ShowClippedRegions) + if (mode == VdpMode.SMS || Sms.CoreComm.GG_ShowClippedRegions) return FrameBuffer; return GameGearFrameBuffer; } @@ -506,7 +506,7 @@ namespace BizHawk.Emulation.Consoles.Sega { get { - if (mode == VdpMode.SMS || Sms.CoreInputComm.GG_ShowClippedRegions) + if (mode == VdpMode.SMS || Sms.CoreComm.GG_ShowClippedRegions) return 256; return 160; // GameGear } @@ -516,7 +516,7 @@ namespace BizHawk.Emulation.Consoles.Sega { get { - if (mode == VdpMode.SMS || Sms.CoreInputComm.GG_ShowClippedRegions) + if (mode == VdpMode.SMS || Sms.CoreComm.GG_ShowClippedRegions) return FrameHeight; return 144; // GameGear } diff --git a/BizHawk.Emulation/Interfaces/Base Implementations/NullEmulator.cs b/BizHawk.Emulation/Interfaces/Base Implementations/NullEmulator.cs index eb4be92c0c..2b7af0c3a5 100644 --- a/BizHawk.Emulation/Interfaces/Base Implementations/NullEmulator.cs +++ b/BizHawk.Emulation/Interfaces/Base Implementations/NullEmulator.cs @@ -11,21 +11,19 @@ namespace BizHawk private int[] frameBuffer = new int[256 * 192]; private Random rand = new Random(); - public CoreInputComm CoreInputComm { get; set; } - public CoreOutputComm CoreOutputComm { get; private set; } + public CoreComm CoreComm { get; private set; } public IVideoProvider VideoProvider { get { return this; } } public ISoundProvider SoundProvider { get { return this; } } public ISyncSoundProvider SyncSoundProvider { get { return new FakeSyncSound(this, 735); } } public bool StartAsyncSound() { return true; } public void EndAsyncSound() { } - public NullEmulator() + public NullEmulator(CoreComm comm) { + CoreComm = comm; var domains = new List(1); domains.Add(new MemoryDomain("Main RAM", 1, Endian.Little, addr => 0, (a, v) => { })); memoryDomains = domains.AsReadOnly(); - CoreOutputComm = new CoreOutputComm(); - CoreInputComm = new CoreInputComm(); } public void ResetFrameCounter() { diff --git a/BizHawk.Emulation/Interfaces/CoreComms.cs b/BizHawk.Emulation/Interfaces/CoreComms.cs index 8f51c0b575..4d0d034f29 100644 --- a/BizHawk.Emulation/Interfaces/CoreComms.cs +++ b/BizHawk.Emulation/Interfaces/CoreComms.cs @@ -1,7 +1,7 @@ using System.Text; namespace BizHawk { - public class CoreInputComm + public class CoreComm { public int NES_BackdropColor; public bool NES_UnlimitedSprites; @@ -32,10 +32,7 @@ namespace BizHawk public System.Action InputCallback; public MemoryCallbackSystem MemoryCallbackSystem = new MemoryCallbackSystem(); - } - public class CoreOutputComm - { public double VsyncRate { get diff --git a/BizHawk.Emulation/Interfaces/IEmulator.cs b/BizHawk.Emulation/Interfaces/IEmulator.cs index 423956fc0e..8137d6f3c5 100644 --- a/BizHawk.Emulation/Interfaces/IEmulator.cs +++ b/BizHawk.Emulation/Interfaces/IEmulator.cs @@ -62,9 +62,10 @@ namespace BizHawk void LoadStateBinary(BinaryReader reader); byte[] SaveStateBinary(); - // Arbitrary extensible core comm mechanism - CoreInputComm CoreInputComm { get; set; } - CoreOutputComm CoreOutputComm { get; } + /// + /// the corecomm module in use by this core. + /// + CoreComm CoreComm { get; } // ----- Client Debugging API stuff ----- IList MemoryDomains { get; } diff --git a/BizHawk.MultiClient/AVOut/VideoWriterChooserForm.cs b/BizHawk.MultiClient/AVOut/VideoWriterChooserForm.cs index 19762197d0..80cbdc0a9f 100644 --- a/BizHawk.MultiClient/AVOut/VideoWriterChooserForm.cs +++ b/BizHawk.MultiClient/AVOut/VideoWriterChooserForm.cs @@ -85,8 +85,8 @@ namespace BizHawk.MultiClient private void buttonAuto_Click(object sender, EventArgs e) { - numericTextBoxW.Text = Global.Emulator.CoreOutputComm.NominalWidth.ToString(); - numericTextBoxH.Text = Global.Emulator.CoreOutputComm.NominalHeight.ToString(); + numericTextBoxW.Text = Global.Emulator.CoreComm.NominalWidth.ToString(); + numericTextBoxH.Text = Global.Emulator.CoreComm.NominalHeight.ToString(); } private void buttonOK_Click(object sender, EventArgs e) diff --git a/BizHawk.MultiClient/Global.cs b/BizHawk.MultiClient/Global.cs index 9cd8d12551..19b51035b7 100644 --- a/BizHawk.MultiClient/Global.cs +++ b/BizHawk.MultiClient/Global.cs @@ -21,7 +21,7 @@ namespace BizHawk.MultiClient public static DisplayManager DisplayManager = new DisplayManager(); public static Config Config; public static IEmulator Emulator; - public static CoreInputComm CoreInputComm; + public static CoreComm CoreComm; public static GameInfo Game; public static Controller SMSControls; public static Controller PCEControls; diff --git a/BizHawk.MultiClient/LuaImplementation.cs b/BizHawk.MultiClient/LuaImplementation.cs index 791c8cde15..2d0a1f8106 100644 --- a/BizHawk.MultiClient/LuaImplementation.cs +++ b/BizHawk.MultiClient/LuaImplementation.cs @@ -650,8 +650,8 @@ namespace BizHawk.MultiClient } else { - dx -= Global.Emulator.CoreOutputComm.ScreenLogicalOffsetX; - dy -= Global.Emulator.CoreOutputComm.ScreenLogicalOffsetY; + dx -= Global.Emulator.CoreComm.ScreenLogicalOffsetX; + dy -= Global.Emulator.CoreComm.ScreenLogicalOffsetY; } Global.OSD.AddGUIText(luaStr.ToString(), dx, dy, alert, GetColor(background), GetColor(forecolor), @@ -871,8 +871,8 @@ namespace BizHawk.MultiClient Graphics GetGraphics() { var g = luaSurface.GetGraphics(); - int tx = Global.Emulator.CoreOutputComm.ScreenLogicalOffsetX; - int ty = Global.Emulator.CoreOutputComm.ScreenLogicalOffsetY; + int tx = Global.Emulator.CoreComm.ScreenLogicalOffsetX; + int ty = Global.Emulator.CoreComm.ScreenLogicalOffsetY; if (tx != 0 || ty != 0) { var transform = g.Transform; @@ -1159,23 +1159,23 @@ namespace BizHawk.MultiClient { if (Global.Emulator is BizHawk.Emulation.Consoles.Nintendo.NES) { - Global.CoreInputComm.NES_ShowOBJ = Global.Config.NESDispSprites = (bool)lua_p[0]; - Global.CoreInputComm.NES_ShowBG = Global.Config.NESDispBackground = (bool)lua_p[1]; + Global.CoreComm.NES_ShowOBJ = Global.Config.NESDispSprites = (bool)lua_p[0]; + Global.CoreComm.NES_ShowBG = Global.Config.NESDispBackground = (bool)lua_p[1]; } else if (Global.Emulator is BizHawk.Emulation.Consoles.TurboGrafx.PCEngine) { - Global.CoreInputComm.PCE_ShowOBJ1 = Global.Config.PCEDispOBJ1 = (bool)lua_p[0]; - Global.CoreInputComm.PCE_ShowBG1 = Global.Config.PCEDispBG1 = (bool)lua_p[1]; + Global.CoreComm.PCE_ShowOBJ1 = Global.Config.PCEDispOBJ1 = (bool)lua_p[0]; + Global.CoreComm.PCE_ShowBG1 = Global.Config.PCEDispBG1 = (bool)lua_p[1]; if (lua_p.Length > 2) { - Global.CoreInputComm.PCE_ShowOBJ2 = Global.Config.PCEDispOBJ2 = (bool)lua_p[2]; - Global.CoreInputComm.PCE_ShowBG2 = Global.Config.PCEDispBG2 = (bool)lua_p[3]; + Global.CoreComm.PCE_ShowOBJ2 = Global.Config.PCEDispOBJ2 = (bool)lua_p[2]; + Global.CoreComm.PCE_ShowBG2 = Global.Config.PCEDispBG2 = (bool)lua_p[3]; } } else if (Global.Emulator is BizHawk.Emulation.Consoles.Sega.SMS) { - Global.CoreInputComm.SMS_ShowOBJ = Global.Config.SMSDispOBJ = (bool)lua_p[0]; - Global.CoreInputComm.SMS_ShowBG = Global.Config.SMSDispBG = (bool)lua_p[1]; + Global.CoreComm.SMS_ShowOBJ = Global.Config.SMSDispOBJ = (bool)lua_p[0]; + Global.CoreComm.SMS_ShowBG = Global.Config.SMSDispBG = (bool)lua_p[1]; } } @@ -1183,7 +1183,7 @@ namespace BizHawk.MultiClient { if (luaf != null) { - Global.Emulator.CoreInputComm.InputCallback = delegate() + Global.Emulator.CoreComm.InputCallback = delegate() { try { @@ -1198,7 +1198,7 @@ namespace BizHawk.MultiClient }; } else - Global.Emulator.CoreInputComm.InputCallback = null; + Global.Emulator.CoreComm.InputCallback = null; } //---------------------------------------------------- @@ -2609,7 +2609,7 @@ namespace BizHawk.MultiClient public void nes_setdispbackground(bool show) { Global.Config.NESDispBackground = show; - Global.MainForm.SyncCoreInputComm(); + Global.MainForm.SyncCoreCommInputSignals(); } public bool nes_getdispsprites() @@ -2620,7 +2620,7 @@ namespace BizHawk.MultiClient public void nes_setdispsprites(bool show) { Global.Config.NESDispSprites = show; - Global.MainForm.SyncCoreInputComm(); + Global.MainForm.SyncCoreCommInputSignals(); } public bool nes_getallowmorethaneightsprites() @@ -2633,7 +2633,7 @@ namespace BizHawk.MultiClient Global.Config.NESAllowMoreThanEightSprites = allow; if (Global.Emulator is NES) { - (Global.Emulator as NES).CoreInputComm.NES_UnlimitedSprites = allow; + (Global.Emulator as NES).CoreComm.NES_UnlimitedSprites = allow; } } @@ -2722,8 +2722,8 @@ namespace BizHawk.MultiClient _addr = LuaInt(address); } - Global.Emulator.CoreInputComm.MemoryCallbackSystem.ReadAddr = _addr; - Global.Emulator.CoreInputComm.MemoryCallbackSystem.SetReadCallback(delegate(uint addr) + Global.Emulator.CoreComm.MemoryCallbackSystem.ReadAddr = _addr; + Global.Emulator.CoreComm.MemoryCallbackSystem.SetReadCallback(delegate(uint addr) { try { @@ -2740,7 +2740,7 @@ namespace BizHawk.MultiClient } else { - Global.Emulator.CoreInputComm.MemoryCallbackSystem.SetReadCallback(null); + Global.Emulator.CoreComm.MemoryCallbackSystem.SetReadCallback(null); } } @@ -2760,8 +2760,8 @@ namespace BizHawk.MultiClient _addr = LuaInt(address); } - Global.Emulator.CoreInputComm.MemoryCallbackSystem.WriteAddr = _addr; - Global.Emulator.CoreInputComm.MemoryCallbackSystem.SetWriteCallback(delegate(uint addr) + Global.Emulator.CoreComm.MemoryCallbackSystem.WriteAddr = _addr; + Global.Emulator.CoreComm.MemoryCallbackSystem.SetWriteCallback(delegate(uint addr) { try { @@ -2777,7 +2777,7 @@ namespace BizHawk.MultiClient } else { - Global.Emulator.CoreInputComm.MemoryCallbackSystem.SetWriteCallback(null); + Global.Emulator.CoreComm.MemoryCallbackSystem.SetWriteCallback(null); } } } diff --git a/BizHawk.MultiClient/MainForm.MenuItems.cs b/BizHawk.MultiClient/MainForm.MenuItems.cs index 74136aae70..e6d45ca98b 100644 --- a/BizHawk.MultiClient/MainForm.MenuItems.cs +++ b/BizHawk.MultiClient/MainForm.MenuItems.cs @@ -23,7 +23,7 @@ namespace BizHawk.MultiClient private void DumpStatus_Click(object sender, EventArgs e) { - string details = Global.Emulator.CoreOutputComm.RomStatusDetails; + string details = Global.Emulator.CoreComm.RomStatusDetails; if (string.IsNullOrEmpty(details)) return; Global.Sound.StopSound(); LogWindow.ShowReport("Dump Status Report", details, this); @@ -670,7 +670,7 @@ namespace BizHawk.MultiClient tAStudioToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.TASTudio; virtualPadToolStripMenuItem.ShortcutKeyDisplayString = Global.Config.OpenVirtualPadBinding; - if (Global.Emulator.CoreOutputComm.CpuTraceAvailable) + if (Global.Emulator.CoreComm.CpuTraceAvailable) { traceLoggerToolStripMenuItem.Enabled = true; } @@ -884,21 +884,21 @@ namespace BizHawk.MultiClient { NESGraphicsConfig g = new NESGraphicsConfig(); g.ShowDialog(); - SyncCoreInputComm(); + SyncCoreCommInputSignals(); } private void pceGraphicsSettingsToolStripMenuItem_Click(object sender, EventArgs e) { PCEGraphicsConfig g = new PCEGraphicsConfig(); g.ShowDialog(); - SyncCoreInputComm(); + SyncCoreCommInputSignals(); } private void smsGraphicsSettingsToolStripMenuItem_Click(object sender, EventArgs e) { SMSGraphicsConfig g = new SMSGraphicsConfig(); g.ShowDialog(); - SyncCoreInputComm(); + SyncCoreCommInputSignals(); } public void MainForm_MouseClick(object sender, MouseEventArgs e) @@ -1815,7 +1815,7 @@ namespace BizHawk.MultiClient if (Global.Emulator is LibsnesCore) { Global.Config.SNES_ShowBG1_1 = Global.Config.SNES_ShowBG1_0 ^= true; - SyncCoreInputComm(); + SyncCoreCommInputSignals(); if (Global.Config.SNES_ShowBG1_1) { Global.OSD.AddMessage("BG 1 Layer On"); @@ -1832,7 +1832,7 @@ namespace BizHawk.MultiClient if (Global.Emulator is LibsnesCore) { Global.Config.SNES_ShowBG2_1 = Global.Config.SNES_ShowBG2_0 ^= true; - SyncCoreInputComm(); + SyncCoreCommInputSignals(); if (Global.Config.SNES_ShowBG2_1) { Global.OSD.AddMessage("BG 2 Layer On"); @@ -1849,7 +1849,7 @@ namespace BizHawk.MultiClient if (Global.Emulator is LibsnesCore) { Global.Config.SNES_ShowBG3_1 = Global.Config.SNES_ShowBG3_0 ^= true; - SyncCoreInputComm(); + SyncCoreCommInputSignals(); if (Global.Config.SNES_ShowBG3_1) { Global.OSD.AddMessage("BG 3 Layer On"); @@ -1866,7 +1866,7 @@ namespace BizHawk.MultiClient if (Global.Emulator is LibsnesCore) { Global.Config.SNES_ShowBG4_1 = Global.Config.SNES_ShowBG4_0 ^= true; - SyncCoreInputComm(); + SyncCoreCommInputSignals(); if (Global.Config.SNES_ShowBG4_1) { Global.OSD.AddMessage("BG 4 Layer On"); @@ -1883,7 +1883,7 @@ namespace BizHawk.MultiClient if (Global.Emulator is LibsnesCore) { Global.Config.SNES_ShowOBJ1 ^= true; - SyncCoreInputComm(); + SyncCoreCommInputSignals(); if (Global.Config.SNES_ShowOBJ1) { Global.OSD.AddMessage("OBJ 1 Layer On"); @@ -1900,7 +1900,7 @@ namespace BizHawk.MultiClient if (Global.Emulator is LibsnesCore) { Global.Config.SNES_ShowOBJ2 ^= true; - SyncCoreInputComm(); + SyncCoreCommInputSignals(); if (Global.Config.SNES_ShowOBJ2) { Global.OSD.AddMessage("OBJ 2 Layer On"); @@ -1917,7 +1917,7 @@ namespace BizHawk.MultiClient if (Global.Emulator is LibsnesCore) { Global.Config.SNES_ShowOBJ3 ^= true; - SyncCoreInputComm(); + SyncCoreCommInputSignals(); if (Global.Config.SNES_ShowOBJ3) { Global.OSD.AddMessage("OBJ 3 Layer On"); @@ -1934,7 +1934,7 @@ namespace BizHawk.MultiClient if (Global.Emulator is LibsnesCore) { Global.Config.SNES_ShowOBJ4 ^= true; - SyncCoreInputComm(); + SyncCoreCommInputSignals(); if (Global.Config.SNES_ShowOBJ4) { Global.OSD.AddMessage("OBJ 4 Layer On"); diff --git a/BizHawk.MultiClient/MainForm.cs b/BizHawk.MultiClient/MainForm.cs index bfbe24c54f..cc2e070177 100644 --- a/BizHawk.MultiClient/MainForm.cs +++ b/BizHawk.MultiClient/MainForm.cs @@ -129,8 +129,8 @@ namespace BizHawk.MultiClient return Util.ReadAllBytes(NesCartFile.GetStream()); }; Global.MainForm = this; - Global.CoreInputComm = new CoreInputComm(); - SyncCoreInputComm(); + //Global.CoreComm = new CoreComm(); + //SyncCoreCommInputSignals(); Database.LoadDatabase(Path.Combine(PathManager.GetExeDirectoryAbsolute(), "gamedb", "gamedb.txt")); @@ -165,7 +165,9 @@ namespace BizHawk.MultiClient Input.Initialize(); InitControls(); - Global.Emulator = new NullEmulator(); + Global.CoreComm = new CoreComm(); + SyncCoreCommInputSignals(); + Global.Emulator = new NullEmulator(Global.CoreComm); Global.ActiveController = Global.NullControls; Global.AutoFireController = Global.AutofireNullControls; Global.AutofireStickyXORAdapter.SetOnOffPatternFromConfig(); @@ -308,7 +310,7 @@ namespace BizHawk.MultiClient LoadSNESGraphicsDebugger(); if (Global.Config.TraceLoggerAutoLoad) { - if (Global.Emulator.CoreOutputComm.CpuTraceAvailable) + if (Global.CoreComm.CpuTraceAvailable) { LoadTraceLogger(); } @@ -356,47 +358,52 @@ namespace BizHawk.MultiClient base.Dispose(disposing); } - public void SyncCoreInputComm() + public void SyncCoreCommInputSignals(CoreComm target) { - Global.CoreInputComm.NES_BackdropColor = Global.Config.NESBackgroundColor; - Global.CoreInputComm.NES_UnlimitedSprites = Global.Config.NESAllowMoreThanEightSprites; - Global.CoreInputComm.NES_ShowBG = Global.Config.NESDispBackground; - Global.CoreInputComm.NES_ShowOBJ = Global.Config.NESDispSprites; - Global.CoreInputComm.PCE_ShowBG1 = Global.Config.PCEDispBG1; - Global.CoreInputComm.PCE_ShowOBJ1 = Global.Config.PCEDispOBJ1; - Global.CoreInputComm.PCE_ShowBG2 = Global.Config.PCEDispBG2; - Global.CoreInputComm.PCE_ShowOBJ2 = Global.Config.PCEDispOBJ2; - Global.CoreInputComm.SMS_ShowBG = Global.Config.SMSDispBG; - Global.CoreInputComm.SMS_ShowOBJ = Global.Config.SMSDispOBJ; + target.NES_BackdropColor = Global.Config.NESBackgroundColor; + target.NES_UnlimitedSprites = Global.Config.NESAllowMoreThanEightSprites; + target.NES_ShowBG = Global.Config.NESDispBackground; + target.NES_ShowOBJ = Global.Config.NESDispSprites; + target.PCE_ShowBG1 = Global.Config.PCEDispBG1; + target.PCE_ShowOBJ1 = Global.Config.PCEDispOBJ1; + target.PCE_ShowBG2 = Global.Config.PCEDispBG2; + target.PCE_ShowOBJ2 = Global.Config.PCEDispOBJ2; + target.SMS_ShowBG = Global.Config.SMSDispBG; + target.SMS_ShowOBJ = Global.Config.SMSDispOBJ; - Global.CoreInputComm.PSX_FirmwaresPath = PathManager.MakeAbsolutePath(Global.Config.PathPSXFirmwares, "PSX"); + target.PSX_FirmwaresPath = PathManager.MakeAbsolutePath(Global.Config.PathPSXFirmwares, "PSX"); - Global.CoreInputComm.C64_FirmwaresPath = PathManager.MakeAbsolutePath(Global.Config.PathC64Firmwares, "C64"); + target.C64_FirmwaresPath = PathManager.MakeAbsolutePath(Global.Config.PathC64Firmwares, "C64"); - Global.CoreInputComm.SNES_FirmwaresPath = PathManager.MakeAbsolutePath(Global.Config.PathSNESFirmwares, "SNES"); - Global.CoreInputComm.SNES_ShowBG1_0 = Global.Config.SNES_ShowBG1_0; - Global.CoreInputComm.SNES_ShowBG1_1 = Global.Config.SNES_ShowBG1_1; - Global.CoreInputComm.SNES_ShowBG2_0 = Global.Config.SNES_ShowBG2_0; - Global.CoreInputComm.SNES_ShowBG2_1 = Global.Config.SNES_ShowBG2_1; - Global.CoreInputComm.SNES_ShowBG3_0 = Global.Config.SNES_ShowBG3_0; - Global.CoreInputComm.SNES_ShowBG3_1 = Global.Config.SNES_ShowBG3_1; - Global.CoreInputComm.SNES_ShowBG4_0 = Global.Config.SNES_ShowBG4_0; - Global.CoreInputComm.SNES_ShowBG4_1 = Global.Config.SNES_ShowBG4_1; - Global.CoreInputComm.SNES_ShowOBJ_0 = Global.Config.SNES_ShowOBJ1; - Global.CoreInputComm.SNES_ShowOBJ_1 = Global.Config.SNES_ShowOBJ2; - Global.CoreInputComm.SNES_ShowOBJ_2 = Global.Config.SNES_ShowOBJ3; - Global.CoreInputComm.SNES_ShowOBJ_3 = Global.Config.SNES_ShowOBJ4; + target.SNES_FirmwaresPath = PathManager.MakeAbsolutePath(Global.Config.PathSNESFirmwares, "SNES"); + target.SNES_ShowBG1_0 = Global.Config.SNES_ShowBG1_0; + target.SNES_ShowBG1_1 = Global.Config.SNES_ShowBG1_1; + target.SNES_ShowBG2_0 = Global.Config.SNES_ShowBG2_0; + target.SNES_ShowBG2_1 = Global.Config.SNES_ShowBG2_1; + target.SNES_ShowBG3_0 = Global.Config.SNES_ShowBG3_0; + target.SNES_ShowBG3_1 = Global.Config.SNES_ShowBG3_1; + target.SNES_ShowBG4_0 = Global.Config.SNES_ShowBG4_0; + target.SNES_ShowBG4_1 = Global.Config.SNES_ShowBG4_1; + target.SNES_ShowOBJ_0 = Global.Config.SNES_ShowOBJ1; + target.SNES_ShowOBJ_1 = Global.Config.SNES_ShowOBJ2; + target.SNES_ShowOBJ_2 = Global.Config.SNES_ShowOBJ3; + target.SNES_ShowOBJ_3 = Global.Config.SNES_ShowOBJ4; - Global.CoreInputComm.GG_HighlightActiveDisplayRegion = Global.Config.GGHighlightActiveDisplayRegion; - Global.CoreInputComm.GG_ShowClippedRegions = Global.Config.GGShowClippedRegions; + target.GG_HighlightActiveDisplayRegion = Global.Config.GGHighlightActiveDisplayRegion; + target.GG_ShowClippedRegions = Global.Config.GGShowClippedRegions; - Global.CoreInputComm.Atari2600_ShowBG = Global.Config.Atari2600_ShowBG; - Global.CoreInputComm.Atari2600_ShowPlayer1 = Global.Config.Atari2600_ShowPlayer1; - Global.CoreInputComm.Atari2600_ShowPlayer2 = Global.Config.Atari2600_ShowPlayer2; - Global.CoreInputComm.Atari2600_ShowMissle1 = Global.Config.Atari2600_ShowMissle1; - Global.CoreInputComm.Atari2600_ShowMissle2 = Global.Config.Atari2600_ShowMissle2; - Global.CoreInputComm.Atari2600_ShowBall = Global.Config.Atari2600_ShowBall; - Global.CoreInputComm.Atari2600_ShowPF = Global.Config.Atari2600_ShowPlayfield; + target.Atari2600_ShowBG = Global.Config.Atari2600_ShowBG; + target.Atari2600_ShowPlayer1 = Global.Config.Atari2600_ShowPlayer1; + target.Atari2600_ShowPlayer2 = Global.Config.Atari2600_ShowPlayer2; + target.Atari2600_ShowMissle1 = Global.Config.Atari2600_ShowMissle1; + target.Atari2600_ShowMissle2 = Global.Config.Atari2600_ShowMissle2; + target.Atari2600_ShowBall = Global.Config.Atari2600_ShowBall; + target.Atari2600_ShowPF = Global.Config.Atari2600_ShowPlayfield; + } + + public void SyncCoreCommInputSignals() + { + SyncCoreCommInputSignals(Global.CoreComm); } void SyncPresentationMode() @@ -467,7 +474,7 @@ namespace BizHawk.MultiClient Global.ForceNoThrottle = unthrottled || fastforward; // realtime throttle is never going to be so exact that using a double here is wrong - throttle.SetCoreFps(Global.Emulator.CoreOutputComm.VsyncRate); + throttle.SetCoreFps(Global.Emulator.CoreComm.VsyncRate); throttle.signal_paused = EmulatorPaused || Global.Emulator is NullEmulator; throttle.signal_unthrottle = unthrottled; @@ -1588,6 +1595,8 @@ namespace BizHawk.MultiClient IEmulator nextEmulator = null; RomGame rom = null; GameInfo game = null; + CoreComm nextComm = new CoreComm(); + SyncCoreCommInputSignals(nextComm); try { @@ -1649,11 +1658,10 @@ namespace BizHawk.MultiClient { case "PSX": { - var psx = new BizHawk.Emulation.Consoles.PSX.Octoshock(); + var psx = new BizHawk.Emulation.Consoles.PSX.Octoshock(nextComm); nextEmulator = psx; - psx.CoreInputComm = Global.CoreInputComm; psx.LoadCuePath(file.CanonicalFullPath); - nextEmulator.CoreOutputComm.RomStatusDetails = "PSX etc."; + nextEmulator.CoreComm.RomStatusDetails = "PSX etc."; } break; @@ -1690,7 +1698,7 @@ namespace BizHawk.MultiClient game.FirmwareHash = Util.BytesToHexString(System.Security.Cryptography.SHA1.Create().ComputeHash(rom.RomData)); - nextEmulator = new PCEngine(game, disc, rom.RomData); + nextEmulator = new PCEngine(nextComm, game, disc, rom.RomData); break; } } @@ -1706,9 +1714,8 @@ namespace BizHawk.MultiClient case "SNES": { game.System = "SNES"; - var snes = new LibsnesCore(); + var snes = new LibsnesCore(nextComm); nextEmulator = snes; - nextEmulator.CoreInputComm = Global.CoreInputComm; snes.Load(game, rom.FileData, null, deterministicemulation); } break; @@ -1718,15 +1725,15 @@ namespace BizHawk.MultiClient if (Global.Config.SmsAllowOverlock) game.AddOption("AllowOverclock"); if (Global.Config.SmsForceStereoSeparation) game.AddOption("ForceStereo"); if (Global.Config.SmsSpriteLimit) game.AddOption("SpriteLimit"); - nextEmulator = new SMS(game, rom.RomData); + nextEmulator = new SMS(nextComm, game, rom.RomData); break; case "GG": if (Global.Config.SmsAllowOverlock) game.AddOption("AllowOverclock"); if (Global.Config.SmsSpriteLimit) game.AddOption("SpriteLimit"); - nextEmulator = new SMS(game, rom.RomData); + nextEmulator = new SMS(nextComm, game, rom.RomData); break; case "A26": - nextEmulator = new Atari2600(game, rom.FileData); + nextEmulator = new Atari2600(nextComm, game, rom.FileData); ((Atari2600)nextEmulator).SetBw(Global.Config.Atari2600_BW); ((Atari2600)nextEmulator).SetP0Diff(Global.Config.Atari2600_LeftDifficulty); ((Atari2600)nextEmulator).SetP1Diff(Global.Config.Atari2600_RightDifficulty); @@ -1735,13 +1742,13 @@ namespace BizHawk.MultiClient case "PCECD": case "SGX": if (Global.Config.PceSpriteLimit) game.AddOption("ForceSpriteLimit"); - nextEmulator = new PCEngine(game, rom.RomData); + nextEmulator = new PCEngine(nextComm, game, rom.RomData); break; case "GEN": - nextEmulator = new Genesis(game, rom.RomData); + nextEmulator = new Genesis(nextComm, game, rom.RomData); break; case "TI83": - nextEmulator = new TI83(game, rom.RomData); + nextEmulator = new TI83(nextComm, game, rom.RomData); if (Global.Config.TI83autoloadKeyPad) LoadTI83KeyPad(); break; @@ -1762,7 +1769,7 @@ namespace BizHawk.MultiClient } } - NES nes = new NES(game, rom.FileData, bios); + NES nes = new NES(nextComm, game, rom.FileData, bios); nes.SoundOn = Global.Config.SoundEnabled; nes.FirstDrawLine = Global.Config.NESTopLine; nes.LastDrawLine = Global.Config.NESBottomLine; @@ -1783,7 +1790,7 @@ namespace BizHawk.MultiClient if (Global.Config.GB_ForceDMG) game.AddOption("ForceDMG"); if (Global.Config.GB_GBACGB) game.AddOption("GBACGB"); if (Global.Config.GB_MulticartCompat) game.AddOption("MulitcartCompat"); - Emulation.Consoles.GB.Gameboy gb = new Emulation.Consoles.GB.Gameboy(game, rom.FileData); + Emulation.Consoles.GB.Gameboy gb = new Emulation.Consoles.GB.Gameboy(nextComm, game, rom.FileData); nextEmulator = gb; if (gb.IsCGBMode()) { @@ -1832,7 +1839,7 @@ namespace BizHawk.MultiClient { game.System = "SNES"; game.AddOption("SGB"); - var snes = new LibsnesCore(); + var snes = new LibsnesCore(nextComm); nextEmulator = snes; game.FirmwareHash = Util.BytesToHexString(System.Security.Cryptography.SHA1.Create().ComputeHash(sgbrom)); snes.Load(game, rom.FileData, sgbrom, deterministicemulation); @@ -1849,13 +1856,13 @@ namespace BizHawk.MultiClient } else { - ColecoVision c = new ColecoVision(game, rom.RomData, colbiosPath, Global.Config.ColecoSkipBiosIntro); + ColecoVision c = new ColecoVision(nextComm, game, rom.RomData, colbiosPath, Global.Config.ColecoSkipBiosIntro); nextEmulator = c; } break; case "INTV": { - Intellivision intv = new Intellivision(game, rom.RomData); + Intellivision intv = new Intellivision(nextComm, game, rom.RomData); string eromPath = PathManager.MakeAbsolutePath(Global.Config.PathINTVEROM, "INTV"); if (!File.Exists(eromPath)) throw new InvalidOperationException("Specified EROM path does not exist:\n\n" + eromPath); @@ -1898,12 +1905,11 @@ namespace BizHawk.MultiClient byte[] PAL_BIOS7800 = File.ReadAllBytes(pal_biospath); byte[] HighScoreBIOS = File.ReadAllBytes(hsbiospath); - Atari7800 a78 = new Atari7800(game, rom.RomData, NTSC_BIOS7800, PAL_BIOS7800, HighScoreBIOS); + Atari7800 a78 = new Atari7800(nextComm, game, rom.RomData, NTSC_BIOS7800, PAL_BIOS7800, HighScoreBIOS); nextEmulator = a78; break; case "C64": - C64 c64 = new C64(game, rom.RomData, rom.Extension); - c64.CoreInputComm = Global.CoreInputComm; + C64 c64 = new C64(nextComm, game, rom.RomData, rom.Extension); c64.HardReset(); nextEmulator = c64; break; @@ -1922,7 +1928,7 @@ namespace BizHawk.MultiClient MessageBox.Show("Unable to find the required GBA BIOS file - \n" + gbabios, "Unable to load BIOS", MessageBoxButtons.OK, MessageBoxIcon.Error); throw new Exception(); } - GBA gba = new GBA(); + GBA gba = new GBA(nextComm); gba.Load(rom.RomData, gbabios); nextEmulator = gba; } @@ -1932,7 +1938,6 @@ namespace BizHawk.MultiClient if (nextEmulator == null) throw new Exception("No core could load the rom."); - nextEmulator.CoreInputComm = Global.CoreInputComm; } catch (Exception ex) { @@ -1945,7 +1950,9 @@ namespace BizHawk.MultiClient CloseGame(); Global.Emulator.Dispose(); Global.Emulator = nextEmulator; + Global.CoreComm = nextComm; Global.Game = game; + SyncCoreCommInputSignals(); SyncControls(); if (nextEmulator is LibsnesCore) @@ -1966,9 +1973,9 @@ namespace BizHawk.MultiClient Text = DisplayNameForSystem(game.System) + " - " + game.Name; ResetRewindBuffer(); - if (Global.Emulator.CoreOutputComm.RomStatusDetails == null) + if (Global.Emulator.CoreComm.RomStatusDetails == null) { - Global.Emulator.CoreOutputComm.RomStatusDetails = + Global.Emulator.CoreComm.RomStatusDetails = string.Format("{0}\r\nSHA1:{1}\r\nMD5:{2}\r\n", game.Name, Util.BytesToHexString(System.Security.Cryptography.SHA1.Create().ComputeHash(rom.RomData)), @@ -1993,7 +2000,7 @@ namespace BizHawk.MultiClient ////setup the throttle based on platform's specifications ////(one day later for some systems we will need to modify it at runtime as the display mode changes) //{ - // throttle.SetCoreFps(Global.Emulator.CoreOutputComm.VsyncRate); + // throttle.SetCoreFps(Global.Emulator.CoreComm.VsyncRate); // SyncThrottle(); //} RamSearch1.Restart(); @@ -2117,8 +2124,8 @@ namespace BizHawk.MultiClient DumpStatus.Image = BizHawk.MultiClient.Properties.Resources.GreenCheck; annotation = "Verified good dump"; } - if (!string.IsNullOrEmpty(Global.Emulator.CoreOutputComm.RomStatusAnnotation)) - annotation = Global.Emulator.CoreOutputComm.RomStatusAnnotation; + if (!string.IsNullOrEmpty(Global.Emulator.CoreComm.RomStatusAnnotation)) + annotation = Global.Emulator.CoreComm.RomStatusAnnotation; DumpStatus.ToolTipText = annotation; } @@ -2146,22 +2153,6 @@ namespace BizHawk.MultiClient catch (IOException) { } } - private void CloseGame() - { - if (Global.Config.AutoSavestates && Global.Emulator is NullEmulator == false) - SaveState("Auto"); - if (Global.Emulator.SaveRamModified) - SaveRam(); - StopAVI(); - Global.Emulator.Dispose(); - Global.Emulator = new NullEmulator(); - Global.ActiveController = Global.NullControls; - Global.AutoFireController = Global.AutofireNullControls; - Global.MovieSession.Movie.Stop(); - NeedsReboot = false; - SetRebootIconStatus(); - } - private static void SaveRam() { string path = PathManager.SaveRamPath(Global.Game); @@ -3397,10 +3388,34 @@ namespace BizHawk.MultiClient LoadRom(file.FullName); } + //------------------------------------------------------- + //whats the difference between these two methods?? + //its very tricky. rename to be more clear or combine them. + + private void CloseGame() + { + if (Global.Config.AutoSavestates && Global.Emulator is NullEmulator == false) + SaveState("Auto"); + if (Global.Emulator.SaveRamModified) + SaveRam(); + StopAVI(); + Global.Emulator.Dispose(); + Global.CoreComm = new CoreComm(); + SyncCoreCommInputSignals(); + Global.Emulator = new NullEmulator(Global.CoreComm); + Global.ActiveController = Global.NullControls; + Global.AutoFireController = Global.AutofireNullControls; + Global.MovieSession.Movie.Stop(); + NeedsReboot = false; + SetRebootIconStatus(); + } + public void CloseROM() { CloseGame(); - Global.Emulator = new NullEmulator(); + Global.CoreComm = new CoreComm(); + SyncCoreCommInputSignals(); + Global.Emulator = new NullEmulator(Global.CoreComm); Global.Game = GameInfo.GetNullGame(); MemoryPulse.Clear(); RewireSound(); @@ -3426,6 +3441,8 @@ namespace BizHawk.MultiClient UpdateDumpIcon(); } + //------------------------------------------------------- + private void SaveConfig() { if (Global.Config.SaveWindowPosition) @@ -3818,7 +3835,7 @@ namespace BizHawk.MultiClient try { - aw.SetMovieParameters(Global.Emulator.CoreOutputComm.VsyncNum, Global.Emulator.CoreOutputComm.VsyncDen); + aw.SetMovieParameters(Global.Emulator.CoreComm.VsyncNum, Global.Emulator.CoreComm.VsyncDen); if (avwriter_resizew > 0 && avwriter_resizeh > 0) aw.SetVideoParameters(avwriter_resizew, avwriter_resizeh); else @@ -3945,10 +3962,10 @@ namespace BizHawk.MultiClient { if (CurrAviWriter != null) { - long nsampnum = 44100 * (long)Global.Emulator.CoreOutputComm.VsyncDen + SoundRemainder; - long nsamp = nsampnum / Global.Emulator.CoreOutputComm.VsyncNum; + long nsampnum = 44100 * (long)Global.Emulator.CoreComm.VsyncDen + SoundRemainder; + long nsamp = nsampnum / Global.Emulator.CoreComm.VsyncNum; // exactly remember fractional parts of an audio sample - SoundRemainder = nsampnum % Global.Emulator.CoreOutputComm.VsyncNum; + SoundRemainder = nsampnum % Global.Emulator.CoreComm.VsyncNum; short[] temp = new short[nsamp * 2]; AviSoundInput.GetSamples(temp); @@ -4571,13 +4588,13 @@ namespace BizHawk.MultiClient private void showClippedRegionsToolStripMenuItem_Click(object sender, EventArgs e) { Global.Config.GGShowClippedRegions ^= true; - Global.CoreInputComm.GG_ShowClippedRegions = Global.Config.GGShowClippedRegions; + Global.CoreComm.GG_ShowClippedRegions = Global.Config.GGShowClippedRegions; } private void highlightActiveDisplayRegionToolStripMenuItem_Click(object sender, EventArgs e) { Global.Config.GGHighlightActiveDisplayRegion ^= true; - Global.CoreInputComm.GG_HighlightActiveDisplayRegion = Global.Config.GGHighlightActiveDisplayRegion; + Global.CoreComm.GG_HighlightActiveDisplayRegion = Global.Config.GGHighlightActiveDisplayRegion; } private void loadConfigToolStripMenuItem_Click_1(object sender, EventArgs e) @@ -4612,43 +4629,43 @@ namespace BizHawk.MultiClient private void showBGToolStripMenuItem_Click(object sender, EventArgs e) { Global.Config.Atari2600_ShowBG ^= true; - SyncCoreInputComm(); + SyncCoreCommInputSignals(); } private void showPlayer1ToolStripMenuItem_Click(object sender, EventArgs e) { Global.Config.Atari2600_ShowPlayer1 ^= true; - SyncCoreInputComm(); + SyncCoreCommInputSignals(); } private void showPlayer2ToolStripMenuItem_Click(object sender, EventArgs e) { Global.Config.Atari2600_ShowPlayer2 ^= true; - SyncCoreInputComm(); + SyncCoreCommInputSignals(); } private void showMissle1ToolStripMenuItem_Click(object sender, EventArgs e) { Global.Config.Atari2600_ShowMissle1 ^= true; - SyncCoreInputComm(); + SyncCoreCommInputSignals(); } private void showMissle2ToolStripMenuItem_Click(object sender, EventArgs e) { Global.Config.Atari2600_ShowMissle2 ^= true; - SyncCoreInputComm(); + SyncCoreCommInputSignals(); } private void showBallToolStripMenuItem_Click(object sender, EventArgs e) { Global.Config.Atari2600_ShowBall ^= true; - SyncCoreInputComm(); + SyncCoreCommInputSignals(); } private void showPlayfieldToolStripMenuItem_Click(object sender, EventArgs e) { Global.Config.Atari2600_ShowPlayfield ^= true; - SyncCoreInputComm(); + SyncCoreCommInputSignals(); } private void gPUViewerToolStripMenuItem_Click(object sender, EventArgs e) @@ -4675,13 +4692,13 @@ namespace BizHawk.MultiClient { if (StatusSlot0.Visible) { - if (Global.Emulator.CoreOutputComm.UsesDriveLed) + if (Global.Emulator.CoreComm.UsesDriveLed) { if (!StatusBarLedLight.Visible) { StatusBarLedLight.Visible = true; } - if (Global.Emulator.CoreOutputComm.DriveLED) + if (Global.Emulator.CoreComm.DriveLED) { StatusBarLedLight.Image = BizHawk.MultiClient.Properties.Resources.LightOn; } diff --git a/BizHawk.MultiClient/SNESTools/SNESGraphicsDebugger.cs b/BizHawk.MultiClient/SNESTools/SNESGraphicsDebugger.cs index 79d8fe5918..4cb70b03df 100644 --- a/BizHawk.MultiClient/SNESTools/SNESGraphicsDebugger.cs +++ b/BizHawk.MultiClient/SNESTools/SNESGraphicsDebugger.cs @@ -1376,8 +1376,8 @@ namespace BizHawk.MultiClient RefreshBGENCheckStatesFromConfig(); suppression = false; } - - Global.MainForm.SyncCoreInputComm(); + + Global.MainForm.SyncCoreCommInputSignals(); } private void lblEnPrio0_Click(object sender, EventArgs e) diff --git a/BizHawk.MultiClient/tools/TraceLogger.cs b/BizHawk.MultiClient/tools/TraceLogger.cs index 208f146fe4..2f482b2014 100644 --- a/BizHawk.MultiClient/tools/TraceLogger.cs +++ b/BizHawk.MultiClient/tools/TraceLogger.cs @@ -32,7 +32,7 @@ namespace BizHawk.MultiClient public void SaveConfigSettings() { - Global.CoreInputComm.Tracer.Enabled = false; + Global.CoreComm.Tracer.Enabled = false; Global.Config.TraceLoggerWndx = this.Location.X; Global.Config.TraceLoggerWndy = this.Location.Y; } @@ -63,7 +63,7 @@ namespace BizHawk.MultiClient ClearList(); LoggingEnabled.Checked = true; - Global.CoreInputComm.Tracer.Enabled = true; + Global.CoreComm.Tracer.Enabled = true; SetTracerBoxTitle(); Restart(); } @@ -81,10 +81,10 @@ namespace BizHawk.MultiClient } else { - if (Global.Emulator.CoreOutputComm.CpuTraceAvailable) + if (Global.Emulator.CoreComm.CpuTraceAvailable) { ClearList(); - TraceView.Columns[0].Text = Global.Emulator.CoreOutputComm.TraceHeader; + TraceView.Columns[0].Text = Global.Emulator.CoreComm.TraceHeader; } else { @@ -107,7 +107,7 @@ namespace BizHawk.MultiClient private void LoggingEnabled_CheckedChanged(object sender, EventArgs e) { - Global.CoreInputComm.Tracer.Enabled = LoggingEnabled.Checked; + Global.CoreComm.Tracer.Enabled = LoggingEnabled.Checked; SetTracerBoxTitle(); } @@ -133,13 +133,13 @@ namespace BizHawk.MultiClient { using (StreamWriter sw = new StreamWriter(LogFile.FullName, true)) { - sw.Write(Global.CoreInputComm.Tracer.TakeContents()); + sw.Write(Global.CoreComm.Tracer.TakeContents()); } } private void LogToWindow() { - string[] instructions = Global.CoreInputComm.Tracer.TakeContents().Split('\n'); + string[] instructions = Global.CoreComm.Tracer.TakeContents().Split('\n'); if (!String.IsNullOrWhiteSpace(instructions[0])) { foreach (string s in instructions) @@ -207,7 +207,7 @@ namespace BizHawk.MultiClient private void SetTracerBoxTitle() { - if (Global.CoreInputComm.Tracer.Enabled) + if (Global.CoreComm.Tracer.Enabled) { if (ToFileRadio.Checked) {