From 8fb8a353175117a72ccfe3349c00b5f36b228526 Mon Sep 17 00:00:00 2001 From: beirich Date: Sat, 1 Oct 2011 17:06:25 +0000 Subject: [PATCH] Genesis core revive! Get it back to where loading a genesis rom doesnt crash everything immediately --- BizHawk.Emulation/CPUs/68000/M68000.cs | 2 +- .../Consoles/Sega/Genesis/GenVDP.DMA.cs | 6 +-- .../Consoles/Sega/Genesis/GenVDP.Render.cs | 16 ++++---- .../Consoles/Sega/Genesis/GenVDP.cs | 26 ++++++------- .../Consoles/Sega/Genesis/Genesis.cs | 19 +++------- .../Consoles/Sega/Genesis/MemoryMap.68000.cs | 4 +- BizHawk.Emulation/Sound/YM2612.cs | 2 +- BizHawk.MultiClient/Config.cs | 38 +++++++++++++++---- BizHawk.MultiClient/MainForm.cs | 31 ++++++++++----- 9 files changed, 84 insertions(+), 60 deletions(-) diff --git a/BizHawk.Emulation/CPUs/68000/M68000.cs b/BizHawk.Emulation/CPUs/68000/M68000.cs index 68a9604284..475dc107a3 100644 --- a/BizHawk.Emulation/CPUs/68000/M68000.cs +++ b/BizHawk.Emulation/CPUs/68000/M68000.cs @@ -123,7 +123,7 @@ namespace BizHawk.Emulation.CPUs.M68K PendingCycles += cycles; while (PendingCycles > 0) { - Console.WriteLine(Disassemble(PC)); + //Console.WriteLine(Disassemble(PC)); op = (ushort)ReadWord(PC); PC += 2; Opcodes[op](); diff --git a/BizHawk.Emulation/Consoles/Sega/Genesis/GenVDP.DMA.cs b/BizHawk.Emulation/Consoles/Sega/Genesis/GenVDP.DMA.cs index 46a4cab1d5..0ed0f4f0fc 100644 --- a/BizHawk.Emulation/Consoles/Sega/Genesis/GenVDP.DMA.cs +++ b/BizHawk.Emulation/Consoles/Sega/Genesis/GenVDP.DMA.cs @@ -22,9 +22,9 @@ namespace BizHawk.Emulation.Consoles.Sega } - private bool DmaFillModePending; + bool DmaFillModePending; - private void ExecuteDmaFill(ushort data) + void ExecuteDmaFill(ushort data) { Console.WriteLine("DMA FILL REQD, WRITE {0:X4}, {1:X4} times, at {2:X4}", data, DmaLength, VdpDataAddr); @@ -49,7 +49,7 @@ namespace BizHawk.Emulation.Consoles.Sega DmaFillModePending = false; } - private void Execute68000VramCopy() + void Execute68000VramCopy() { Console.WriteLine("DMA 68000 -> VRAM COPY REQ'D. LENGTH {0:X4}, SOURCE {1:X4}", DmaLength, DmaSource); diff --git a/BizHawk.Emulation/Consoles/Sega/Genesis/GenVDP.Render.cs b/BizHawk.Emulation/Consoles/Sega/Genesis/GenVDP.Render.cs index e8c7260f30..555c55b6c9 100644 --- a/BizHawk.Emulation/Consoles/Sega/Genesis/GenVDP.Render.cs +++ b/BizHawk.Emulation/Consoles/Sega/Genesis/GenVDP.Render.cs @@ -19,21 +19,21 @@ namespace BizHawk.Emulation.Consoles.Sega } } - private void RenderPalette() + void RenderPalette() { for (int p = 0; p < 4; p++) for (int i = 0; i < 16; i++) FrameBuffer[(p*FrameWidth) + i] = Palette[(p*16) + i]; } - private void RenderPatterns() + void RenderPatterns() { for (int yi=0; yi<28; yi++) for (int xi=0; xi<(Display40Mode?40:32); xi++) RenderPattern(xi * 8, yi * 8, (yi * (Display40Mode ? 40 : 32)) + xi, 0); } - private void RenderPattern(int x, int y, int pattern, int palette) + void RenderPattern(int x, int y, int pattern, int palette) { for (int yi = 0; yi < 8; yi++) { @@ -46,7 +46,7 @@ namespace BizHawk.Emulation.Consoles.Sega } } - private void RenderScrollA() + void RenderScrollA() { for (int yc=0; yc<24; yc++) { @@ -61,7 +61,7 @@ namespace BizHawk.Emulation.Consoles.Sega } } - private void RenderScrollB() + void RenderScrollB() { for (int yc = 0; yc < 24; yc++) { @@ -77,14 +77,14 @@ namespace BizHawk.Emulation.Consoles.Sega } - private void RenderSprites() + void RenderSprites() { Sprite sprite = FetchSprite(0); /*if (sprite.X > 0) Console.WriteLine("doot");*/ } - private Sprite FetchSprite(int spriteNo) + Sprite FetchSprite(int spriteNo) { int satbase = SpriteAttributeTableAddr + (spriteNo*8); Sprite sprite = new Sprite(); @@ -108,6 +108,4 @@ namespace BizHawk.Emulation.Consoles.Sega public int PatternIndex; } } - - } \ No newline at end of file diff --git a/BizHawk.Emulation/Consoles/Sega/Genesis/GenVDP.cs b/BizHawk.Emulation/Consoles/Sega/Genesis/GenVDP.cs index 2f05bdde81..67e27d3943 100644 --- a/BizHawk.Emulation/Consoles/Sega/Genesis/GenVDP.cs +++ b/BizHawk.Emulation/Consoles/Sega/Genesis/GenVDP.cs @@ -40,7 +40,7 @@ namespace BizHawk.Emulation.Consoles.Sega public void WriteVdpControl(ushort data) { - Console.WriteLine("[PC = {0:X6}] VDP: Control Write {1:X4}", /*Genesis._MainCPU.PC*/0, data); + //Console.WriteLine("[PC = {0:X6}] VDP: Control Write {1:X4}", /*Genesis._MainCPU.PC*/0, data); if (ControlWordPending == false) { @@ -49,15 +49,15 @@ namespace BizHawk.Emulation.Consoles.Sega int reg = (data >> 8) & 0x1F; byte value = (byte) (data & 0xFF); WriteVdpRegister(reg, value); - VdpDataCode = 0; // should we just clone GenesisPlus behavior? + VdpDataCode = 0; } else { ControlWordPending = true; VdpDataAddr &= 0xC000; VdpDataAddr |= (ushort) (data & 0x3FFF); VdpDataCode &= 0x3C; VdpDataCode |= (byte) (data >> 14); - Console.WriteLine("Address = {0:X4}", VdpDataAddr); - Console.WriteLine("Code = {0:X2}", VdpDataCode); + //Console.WriteLine("Address = {0:X4}", VdpDataAddr); + //Console.WriteLine("Code = {0:X2}", VdpDataCode); } } else { ControlWordPending = false; @@ -65,14 +65,14 @@ namespace BizHawk.Emulation.Consoles.Sega // Update data address and code VdpDataAddr &= 0x3FFF; VdpDataAddr |= (ushort) ((data & 0x03) << 14); - Console.WriteLine("Address = {0:X4}", VdpDataAddr); + //Console.WriteLine("Address = {0:X4}", VdpDataAddr); VdpDataCode &= 0x03; VdpDataCode |= (byte) ((data >> 2) & 0x3C); - Console.WriteLine("Code = {0:X2}", VdpDataCode); + //Console.WriteLine("Code = {0:X2}", VdpDataCode); if ((VdpDataCode & 0x20) != 0 && DmaEnabled) // DMA triggered { - Console.WriteLine("DMA TIME!"); + //Console.WriteLine("DMA TIME!"); // what type of DMA? switch (Registers[23] >> 6) @@ -96,7 +96,7 @@ namespace BizHawk.Emulation.Consoles.Sega public ushort ReadVdpControl() { - Console.WriteLine("VDP: Control Read"); + //Console.WriteLine("VDP: Control Read"); ushort value = 0; value |= 0x8000; // Fifo empty return value; @@ -122,18 +122,18 @@ namespace BizHawk.Emulation.Consoles.Sega VRAM[(VdpDataAddr & 0xFFFE) + 1] = (byte) (data >> 8); UpdatePatternBuffer(VdpDataAddr & 0xFFFE); UpdatePatternBuffer((VdpDataAddr & 0xFFFE) + 1); - Console.WriteLine("Wrote VRAM[{0:X4}] = {1:X4}", VdpDataAddr, data); + //Console.WriteLine("Wrote VRAM[{0:X4}] = {1:X4}", VdpDataAddr, data); VdpDataAddr += Registers[0x0F]; break; case 3: // CRAM write CRAM[(VdpDataAddr / 2) % 64] = data; - Console.WriteLine("Wrote CRAM[{0:X2}] = {1:X4}", (VdpDataAddr / 2) % 64, data); + //Console.WriteLine("Wrote CRAM[{0:X2}] = {1:X4}", (VdpDataAddr / 2) % 64, data); ProcessPalette((VdpDataAddr/2)%64); VdpDataAddr += Registers[0x0F]; break; case 5: // VSRAM write VSRAM[(VdpDataAddr / 2) % 40] = data; - Console.WriteLine("Wrote VSRAM[{0:X2}] = {1:X4}", (VdpDataAddr / 2) % 40, data); + //Console.WriteLine("Wrote VSRAM[{0:X2}] = {1:X4}", (VdpDataAddr / 2) % 40, data); VdpDataAddr += Registers[0x0F]; break; default: @@ -144,13 +144,13 @@ namespace BizHawk.Emulation.Consoles.Sega public ushort ReadVdpData() { - Console.WriteLine("VDP: Data Read"); + //Console.WriteLine("VDP: Data Read"); return 0; } public void WriteVdpRegister(int register, byte data) { - Console.WriteLine("Register {0}: {1:X2}", register, data); + //Console.WriteLine("Register {0}: {1:X2}", register, data); switch (register) { case 0x00: diff --git a/BizHawk.Emulation/Consoles/Sega/Genesis/Genesis.cs b/BizHawk.Emulation/Consoles/Sega/Genesis/Genesis.cs index eaf02e8707..cfceb4d683 100644 --- a/BizHawk.Emulation/Consoles/Sega/Genesis/Genesis.cs +++ b/BizHawk.Emulation/Consoles/Sega/Genesis/Genesis.cs @@ -53,7 +53,7 @@ namespace BizHawk.Emulation.Consoles.Sega // 320 are active display, the remaining 160 are horizontal blanking. // A total of 3420 mclks per line, but 2560 mclks are active display and 860 mclks are blanking. - public Genesis() + public Genesis(GameInfo game, byte[] rom) { CoreOutputComm = new CoreOutputComm(); MainCPU = new M68000(); @@ -77,20 +77,13 @@ namespace BizHawk.Emulation.Consoles.Sega SoundCPU.ReadHardware = x => 0xFF; SoundCPU.IRQCallback = () => SoundCPU.Interrupt = false; Z80Reset = true; + RomData = new byte[0x400000]; + for (int i = 0; i < rom.Length; i++) + RomData[i] = rom[i]; + + MainCPU.Reset(); } - /* TOO BAD genesis is broken until I finish turbocd - public void LoadGame(IGame game) - { - RomData = new byte[0x400000]; - byte[] rom = game.GetRomData(); - for (int i = 0; i < rom.Length; i++) - RomData[i] = rom[i]; - - if (MainCPU != null) MainCPU.Reset(); - _MainCPU.Reset(); - }*/ - public void FrameAdvance(bool render) { Frame++; diff --git a/BizHawk.Emulation/Consoles/Sega/Genesis/MemoryMap.68000.cs b/BizHawk.Emulation/Consoles/Sega/Genesis/MemoryMap.68000.cs index 6b9c88f2a3..399ccaa892 100644 --- a/BizHawk.Emulation/Consoles/Sega/Genesis/MemoryMap.68000.cs +++ b/BizHawk.Emulation/Consoles/Sega/Genesis/MemoryMap.68000.cs @@ -146,7 +146,7 @@ namespace BizHawk.Emulation.Consoles.Sega if (address >= 0xE00000) // Work RAM { - Console.WriteLine("MEM[{0:X4}] change to {1:X4}", address & 0xFFFF, value); + //Console.WriteLine("MEM[{0:X4}] change to {1:X4}", address & 0xFFFF, value); Ram[(address & 0xFFFF) + 0] = (byte)(value >> 8); Ram[(address & 0xFFFF) + 1] = (byte)value; return; @@ -188,7 +188,7 @@ namespace BizHawk.Emulation.Consoles.Sega if (address >= 0xE00000) // Work RAM { - Console.WriteLine("MEM[{0:X4}] change to {1:X8}", address & 0xFFFF, value); + //Console.WriteLine("MEM[{0:X4}] change to {1:X8}", address & 0xFFFF, value); Ram[(address & 0xFFFF) + 0] = (byte)(value >> 24); Ram[(address & 0xFFFF) + 1] = (byte)(value >> 16); Ram[(address & 0xFFFF) + 2] = (byte)(value >> 8); diff --git a/BizHawk.Emulation/Sound/YM2612.cs b/BizHawk.Emulation/Sound/YM2612.cs index dcf6370a53..897285873d 100644 --- a/BizHawk.Emulation/Sound/YM2612.cs +++ b/BizHawk.Emulation/Sound/YM2612.cs @@ -10,7 +10,7 @@ public void Write(int addr, byte value) { - + System.Console.WriteLine("YM2612: {0:X2} -> {1:X2}", addr, value); } public void Reset() diff --git a/BizHawk.MultiClient/Config.cs b/BizHawk.MultiClient/Config.cs index 721562be86..3a9a08bf83 100644 --- a/BizHawk.MultiClient/Config.cs +++ b/BizHawk.MultiClient/Config.cs @@ -442,14 +442,8 @@ public PCEControllerTemplate[] PCEAutoController = new PCEControllerTemplate[5]; // Genesis Settings - public string GenP1Up = "UpArrow, J1 Up"; - public string GenP1Down = "DownArrow, J1 Down"; - public string GenP1Left = "LeftArrow, J1 Left"; - public string GenP1Right = "RightArrow, J1 Right"; - public string GenP1A = "Z, J1 B1"; - public string GenP1B = "X, J1 B3"; - public string GenP1C = "C, J1 B4"; - public string GenP1Start = "Return, J1 B8"; + public GenControllerTemplate GenesisController = new GenControllerTemplate(true); + public GenControllerTemplate GenesisAutoController = new GenControllerTemplate(); //GameBoy Settings public NESControllerTemplate GameBoyController = new NESControllerTemplate(true); @@ -626,6 +620,34 @@ } } + public class GenControllerTemplate + { + public string Up = ""; + public string Down = ""; + public string Left = ""; + public string Right = ""; + public string A = ""; + public string B = ""; + public string C = ""; + public string Start = ""; + + public GenControllerTemplate() { } + public GenControllerTemplate(bool defaults) + { + if (defaults) + { + Up = "UpArrow, J1 Up"; + Down = "DownArrow, J1 Down"; + Left = "LeftArrow, J1 Left"; + Right = "RightArrow, J1 Right"; + A = "Z, J1 B1"; + B = "X, J1 B3"; + C = "C, J1 B4"; + Start = "Return, J1 B8"; + } + } + } + public class TI83ControllerTemplate { public string _0; diff --git a/BizHawk.MultiClient/MainForm.cs b/BizHawk.MultiClient/MainForm.cs index 11e95ea725..c39f7751f9 100644 --- a/BizHawk.MultiClient/MainForm.cs +++ b/BizHawk.MultiClient/MainForm.cs @@ -633,18 +633,29 @@ namespace BizHawk.MultiClient agbControls.BindMulti("Start", Global.Config.GBAutoController.Start); Global.AutofireGBControls = agbControls; - var genControls = new Controller(Genesis.GenesisController); - genControls.BindMulti("P1 Up", Global.Config.GenP1Up); - genControls.BindMulti("P1 Left", Global.Config.GenP1Left); - genControls.BindMulti("P1 Right", Global.Config.GenP1Right); - genControls.BindMulti("P1 Down", Global.Config.GenP1Down); - genControls.BindMulti("P1 A", Global.Config.GenP1A); - genControls.BindMulti("P1 B", Global.Config.GenP1B); - genControls.BindMulti("P1 C", Global.Config.GenP1C); - genControls.BindMulti("P1 Start", Global.Config.GenP1Start); + genControls.BindMulti("P1 Up", Global.Config.GenesisController.Up); + genControls.BindMulti("P1 Left", Global.Config.GenesisController.Left); + genControls.BindMulti("P1 Right", Global.Config.GenesisController.Right); + genControls.BindMulti("P1 Down", Global.Config.GenesisController.Down); + genControls.BindMulti("P1 A", Global.Config.GenesisController.A); + genControls.BindMulti("P1 B", Global.Config.GenesisController.B); + genControls.BindMulti("P1 C", Global.Config.GenesisController.C); + genControls.BindMulti("P1 Start", Global.Config.GenesisController.Start); Global.GenControls = genControls; + var agenControls = new AutofireController(Genesis.GenesisController); + agbControls.Autofire = true; + genControls.BindMulti("P1 Up", Global.Config.GenesisAutoController.Up); + genControls.BindMulti("P1 Left", Global.Config.GenesisAutoController.Left); + genControls.BindMulti("P1 Right", Global.Config.GenesisAutoController.Right); + genControls.BindMulti("P1 Down", Global.Config.GenesisAutoController.Down); + genControls.BindMulti("P1 A", Global.Config.GenesisAutoController.A); + genControls.BindMulti("P1 B", Global.Config.GenesisAutoController.B); + genControls.BindMulti("P1 C", Global.Config.GenesisAutoController.C); + genControls.BindMulti("P1 Start", Global.Config.GenesisAutoController.Start); + Global.AutofireGenControls = agenControls; + var TI83Controls = new Controller(TI83.TI83Controller); TI83Controls.BindMulti("0", Global.Config.TI83Controller[0]._0); TI83Controls.BindMulti("1", Global.Config.TI83Controller[0]._1); @@ -1044,7 +1055,7 @@ namespace BizHawk.MultiClient nextEmulator = new PCEngine(game, rom.RomData); break; case "GEN": - nextEmulator = new Genesis(); //TODO + nextEmulator = new Genesis(game, rom.RomData); break; case "TI83": nextEmulator = new TI83(game, rom.RomData);