From facbdd3630c8ac2f47b5be8d9c182e84e09b7f4a Mon Sep 17 00:00:00 2001 From: Asnivor Date: Wed, 18 Jul 2018 16:17:08 +0100 Subject: [PATCH] CPCHawk: Fixed ROM & RAM banking. Started CPC6128 implementation. --- .../BizHawk.Emulation.Cores.csproj | 9 +- .../AmstradCPC/AmstradCPC.IMemoryDomains.cs | 18 +- .../Computers/AmstradCPC/AmstradCPC.cs | 35 ++- .../Machine/CPC464/CPC464.Memory.cs | 35 ++- .../AmstradCPC/Machine/CPC464/CPC464.Port.cs | 6 +- .../Machine/CPC6128/CPC6128.Memory.cs | 272 ++++++++++++++++++ .../Machine/CPC6128/CPC6128.Port.cs | 114 ++++++++ .../AmstradCPC/Machine/CPC6128/CPC6128.cs | 51 ++++ .../AmstradCPC/Machine/CPCBase.Memory.cs | 56 +++- .../Computers/AmstradCPC/Machine/CPCBase.cs | 13 +- .../Computers/AmstradCPC/ROM/RomData.cs | 72 +++-- .../Properties/Resources.Designer.cs | 44 ++- .../Properties/Resources.resx | 16 +- .../Resources/CPC_AMSDOS_0.5.ROM.gz | Bin 0 -> 10753 bytes .../Resources/CPC_BASIC_1.0.ROM.gz | Bin 0 -> 12826 bytes .../Resources/CPC_BASIC_1.1.ROM.gz | Bin 0 -> 13277 bytes .../Resources/CPC_OS_6128.ROM.gz | Bin 0 -> 13114 bytes .../Resources/OS_464.ROM.gz | Bin 0 -> 12977 bytes .../Resources/cpc464.rom.gz | Bin 25744 -> 0 bytes 19 files changed, 658 insertions(+), 83 deletions(-) create mode 100644 BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Memory.cs create mode 100644 BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Port.cs create mode 100644 BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.cs create mode 100644 BizHawk.Emulation.Cores/Resources/CPC_AMSDOS_0.5.ROM.gz create mode 100644 BizHawk.Emulation.Cores/Resources/CPC_BASIC_1.0.ROM.gz create mode 100644 BizHawk.Emulation.Cores/Resources/CPC_BASIC_1.1.ROM.gz create mode 100644 BizHawk.Emulation.Cores/Resources/CPC_OS_6128.ROM.gz create mode 100644 BizHawk.Emulation.Cores/Resources/OS_464.ROM.gz delete mode 100644 BizHawk.Emulation.Cores/Resources/cpc464.rom.gz diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj index df6a48073f..2c4ae458c5 100644 --- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj +++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj @@ -158,6 +158,9 @@ + + + @@ -1501,8 +1504,12 @@ - + + + + + diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IMemoryDomains.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IMemoryDomains.cs index 59faac1da5..01b844ff3c 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IMemoryDomains.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IMemoryDomains.cs @@ -34,7 +34,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { throw new ArgumentOutOfRangeException(); } - _machine.WriteBus((ushort)addr, value); }, 1) }; @@ -48,18 +47,22 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC } private void SyncAllByteArrayDomains() - { + { + SyncByteArrayDomain("ROMLower", _machine.ROMLower); SyncByteArrayDomain("ROM0", _machine.ROM0); - SyncByteArrayDomain("ROM1", _machine.ROM1); + SyncByteArrayDomain("ROM7", _machine.ROM7); SyncByteArrayDomain("RAM0", _machine.RAM0); SyncByteArrayDomain("RAM1", _machine.RAM1); SyncByteArrayDomain("RAM2", _machine.RAM2); - SyncByteArrayDomain("RAM3", _machine.RAM3); + SyncByteArrayDomain("RAM3", _machine.RAM3); + SyncByteArrayDomain("RAM4", _machine.RAM4); + SyncByteArrayDomain("RAM5", _machine.RAM5); + SyncByteArrayDomain("RAM6", _machine.RAM6); + SyncByteArrayDomain("RAM7", _machine.RAM7); } private void SyncByteArrayDomain(string name, byte[] data) - { - + { if (_memoryDomainsInit || _byteArrayDomains.ContainsKey(name)) { var m = _byteArrayDomains[name]; @@ -69,8 +72,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { var m = new MemoryDomainByteArray(name, MemoryDomain.Endian.Little, data, true, 1); _byteArrayDomains.Add(name, m); - } - + } } } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.cs index 1a2f2cd85a..bb9b3aad62 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.cs @@ -120,8 +120,23 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC bool embeddedFound = true; switch (names.FirstOrDefault()) { - case "464ROM": - embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.cpc464_rom)); + // CPC 464 ROMS + case "OS464ROM": + embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.OS_464_ROM)); + break; + case "BASIC1-0ROM": + embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.CPC_BASIC_1_0_ROM)); + break; + + // CPC 6128 ROMS + case "OS6128ROM": + embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.CPC_OS_6128_ROM)); + break; + case "BASIC1-1ROM": + embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.CPC_BASIC_1_1_ROM)); + break; + case "AMSDOS0-5ROM": + embeddedRom = Util.DecompressGzipFile(new MemoryStream(Resources.CPC_AMSDOS_0_5_ROM)); break; default: embeddedFound = false; @@ -152,9 +167,19 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { case MachineType.CPC464: _machine = new CPC464(this, _cpu, files, autoTape); - var _systemRom16 = GetFirmware(0x4000, "464ROM"); - var romData16 = RomData.InitROM(machineType, _systemRom16); - _machine.InitROM(romData16); + List roms64 = new List(); + roms64.Add(RomData.InitROM(MachineType.CPC464, GetFirmware(0x4000, "OS464ROM"), RomData.ROMChipType.Lower)); + roms64.Add(RomData.InitROM(MachineType.CPC464, GetFirmware(0x4000, "BASIC1-0ROM"), RomData.ROMChipType.Upper, 0)); + _machine.InitROM(roms64.ToArray()); + break; + + case MachineType.CPC6128: + _machine = new CPC6128(this, _cpu, files, autoTape); + List roms128 = new List(); + roms128.Add(RomData.InitROM(MachineType.CPC6128, GetFirmware(0x4000, "OS6128ROM"), RomData.ROMChipType.Lower)); + roms128.Add(RomData.InitROM(MachineType.CPC6128, GetFirmware(0x4000, "BASIC1-1ROM"), RomData.ROMChipType.Upper, 0)); + roms128.Add(RomData.InitROM(MachineType.CPC6128, GetFirmware(0x4000, "AMSDOS0-5ROM"), RomData.ROMChipType.Upper, 7)); + _machine.InitROM(roms128.ToArray()); break; } } diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Memory.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Memory.cs index 3fc4ebf9f8..d2b069b5a0 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Memory.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Memory.cs @@ -28,7 +28,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC // 0x000 or LowerROM case 0: if (LowerROMPaged) - result = ROM0[addr % 0x4000]; + result = ROMLower[addr % 0x4000]; else result = RAM0[addr % 0x4000]; break; @@ -46,7 +46,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC // 0xc000 or UpperROM case 3: if (UpperROMPaged) - result = ROM1[addr % 0x4000]; + result = ROM0[addr % 0x4000]; else result = RAM3[addr % 0x4000]; break; @@ -121,14 +121,33 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// /// /// - public override void InitROM(RomData romData) + public override void InitROM(RomData[] romData) { - RomData = romData; - for (int i = 0; i < 0x4000; i++) + foreach (var r in romData) { - ROM0[i] = RomData.RomBytes[i]; - if (RomData.RomBytes.Length > 0x4000) - ROM1[i] = RomData.RomBytes[i + 0x4000]; + if (r.ROMType == RomData.ROMChipType.Lower) + { + for (int i = 0; i < 0x4000; i++) + { + ROMLower[i] = r.RomBytes[i]; + + } + } + else + { + for (int i = 0; i < 0x4000; i++) + { + switch (r.ROMPosition) + { + case 0: + ROM0[i] = r.RomBytes[i]; + break; + case 7: + ROM7[i] = r.RomBytes[i]; + break; + } + } + } } LowerROMPaged = true; diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Port.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Port.cs index 179e6909f8..d51f167e5e 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Port.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC464/CPC464.Port.cs @@ -29,10 +29,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC if (DecodeINPort(port) == PortDevice.GateArray) { GateArray.ReadPort(port, ref result); - } - else if (DecodeINPort(port) == PortDevice.RAMManagement) - { - } else if (DecodeINPort(port) == PortDevice.CRCT) { @@ -81,7 +77,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC } else if (d == PortDevice.RAMManagement) { - + // not present in the unexpanded CPC464 } else if (d == PortDevice.CRCT) { diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Memory.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Memory.cs new file mode 100644 index 0000000000..80e52351ac --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Memory.cs @@ -0,0 +1,272 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BizHawk.Emulation.Cores.Computers.AmstradCPC +{ + /// + /// CPC6128 + /// * Memory * + /// + public partial class CPC6128 : CPCBase + { + /// + /// Simulates reading from the bus + /// ROM and RAM paging should be handled here + /// + /// + /// + public override byte ReadBus(ushort addr) + { + int divisor = addr / 0x4000; + byte result = 0xff; + + switch (divisor) + { + // RAM 0x000 + case 0: + if (LowerROMPaged) + { + result = ROMLower[addr % 0x4000]; + } + else + { + switch (RAMConfig) + { + case 2: + result = RAM4[addr % 0x4000]; + break; + default: + result = RAM0[addr % 0x4000]; + break; + } + } + break; + + // RAM 0x4000 + case 1: + switch (RAMConfig) + { + case 0: + case 1: + result = RAM1[addr % 0x4000]; + break; + case 2: + case 5: + result = RAM5[addr % 0x4000]; + break; + case 3: + result = RAM3[addr % 0x4000]; + break; + case 4: + result = RAM4[addr % 0x4000]; + break; + case 6: + result = RAM6[addr % 0x4000]; + break; + case 7: + result = RAM7[addr % 0x4000]; + break; + } + + break; + + // RAM 0x8000 + case 2: + switch (RAMConfig) + { + case 2: + result = RAM6[addr % 0x4000]; + break; + default: + result = RAM2[addr % 0x4000]; + break; + } + break; + + // RAM 0xc000 + case 3: + if (UpperROMPaged) + { + switch (UpperROMPosition) + { + case 7: + result = ROM7[addr % 0x4000]; + break; + case 0: + default: + result = ROM0[addr % 0x4000]; + break; + } + } + else + { + switch (RAMConfig) + { + case 1: + case 2: + case 3: + result = RAM7[addr % 0x4000]; + break; + default: + result = RAM3[addr % 0x4000]; + break; + } + } + break; + default: + break; + } + + return result; + } + + /// + /// Simulates writing to the bus + /// Writes to the bus ALWAYS go to RAM, regardless of what upper and lower ROMs are paged in + /// + /// + /// + public override void WriteBus(ushort addr, byte value) + { + int divisor = addr / 0x4000; + + switch (divisor) + { + // RAM 0x000 + case 0: + switch (RAMConfig) + { + case 2: + RAM4[addr % 0x4000] = value; + break; + default: + RAM0[addr % 0x4000] = value; + break; + } + break; + + // RAM 0x4000 + case 1: + switch (RAMConfig) + { + case 0: + case 1: + RAM1[addr % 0x4000] = value; + break; + case 2: + case 5: + RAM5[addr % 0x4000] = value; + break; + case 3: + RAM3[addr % 0x4000] = value; + break; + case 4: + RAM4[addr % 0x4000] = value; + break; + case 6: + RAM6[addr % 0x4000] = value; + break; + case 7: + RAM7[addr % 0x4000] = value; + break; + } + + break; + + // RAM 0x8000 + case 2: + switch (RAMConfig) + { + case 2: + RAM6[addr % 0x4000] = value; + break; + default: + RAM2[addr % 0x4000] = value; + break; + } + break; + + // RAM 0xc000 + case 3: + switch (RAMConfig) + { + case 1: + case 2: + case 3: + RAM7[addr % 0x4000] = value; + break; + default: + RAM3[addr % 0x4000] = value; + break; + } + break; + default: + break; + } + } + + /// + /// Reads a byte of data from a specified memory address + /// + /// + /// + public override byte ReadMemory(ushort addr) + { + var data = ReadBus(addr); + return data; + } + + /// + /// Writes a byte of data to a specified memory address + /// (with memory contention if appropriate) + /// + /// + /// + public override void WriteMemory(ushort addr, byte value) + { + WriteBus(addr, value); + } + + + /// + /// Sets up the ROM + /// + /// + /// + public override void InitROM(RomData[] romData) + { + foreach (var r in romData) + { + if (r.ROMType == RomData.ROMChipType.Lower) + { + for (int i = 0; i < 0x4000; i++) + { + ROMLower[i] = r.RomBytes[i]; + + } + } + else + { + for (int i = 0; i < 0x4000; i++) + { + switch (r.ROMPosition) + { + case 0: + ROM0[i] = r.RomBytes[i]; + break; + case 7: + ROM7[i] = r.RomBytes[i]; + break; + } + } + } + } + + LowerROMPaged = true; + UpperROMPaged = true; + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Port.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Port.cs new file mode 100644 index 0000000000..532bfaa574 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.Port.cs @@ -0,0 +1,114 @@ +using BizHawk.Common.NumberExtensions; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BizHawk.Emulation.Cores.Computers.AmstradCPC +{ + /// + /// CPC6128 + /// * Port * + /// + public partial class CPC6128 : CPCBase + { + /// + /// Reads a byte of data from a specified port address + /// + /// + /// + public override byte ReadPort(ushort port) + { + BitArray portBits = new BitArray(BitConverter.GetBytes(port)); + byte portUpper = (byte)(port >> 8); + byte portLower = (byte)(port & 0xff); + + int result = 0xff; + + if (DecodeINPort(port) == PortDevice.GateArray) + { + GateArray.ReadPort(port, ref result); + } + else if (DecodeINPort(port) == PortDevice.CRCT) + { + CRCT.ReadPort(port, ref result); + } + else if (DecodeINPort(port) == PortDevice.ROMSelect) + { + + } + else if (DecodeINPort(port) == PortDevice.Printer) + { + + } + else if (DecodeINPort(port) == PortDevice.PPI) + { + PPI.ReadPort(port, ref result); + } + else if (DecodeINPort(port) == PortDevice.Expansion) + { + + } + + return (byte)result; + } + + /// + /// Writes a byte of data to a specified port address + /// Because of the port decoding, multiple devices can be written to + /// + /// + /// + public override void WritePort(ushort port, byte value) + { + BitArray portBits = new BitArray(BitConverter.GetBytes(port)); + BitArray dataBits = new BitArray(BitConverter.GetBytes(value)); + byte portUpper = (byte)(port >> 8); + byte portLower = (byte)(port & 0xff); + + var devs = DecodeOUTPort(port); + + foreach (var d in devs) + { + if (d == PortDevice.GateArray) + { + GateArray.WritePort(port, value); + } + else if (d == PortDevice.RAMManagement) + { + if (value.Bit(7) && value.Bit(6)) + { + RAMConfig = value & 0x07; + + // additional 64K bank index + var b64 = value & 0x38; + } + } + else if (d == PortDevice.CRCT) + { + CRCT.WritePort(port, value); + } + else if (d == PortDevice.ROMSelect) + { + UpperROMPosition = value; + } + else if (d == PortDevice.Printer) + { + + } + else if (d == PortDevice.PPI) + { + PPI.WritePort(port, value); + } + else if (d == PortDevice.Expansion) + { + + } + } + + return; + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.cs new file mode 100644 index 0000000000..04514c89f3 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPC6128/CPC6128.cs @@ -0,0 +1,51 @@ +using BizHawk.Emulation.Cores.Components.Z80A; +using System; +using System.Collections.Generic; + +namespace BizHawk.Emulation.Cores.Computers.AmstradCPC +{ + /// + /// CPC6128 construction + /// + public partial class CPC6128 : CPCBase + { + #region Construction + + /// + /// Main constructor + /// + /// + /// + public CPC6128(AmstradCPC cpc, Z80A cpu, List files, bool autoTape) + { + CPC = cpc; + CPU = cpu; + + FrameLength = 79872; + + CRCT = new CRCT_6845(CRCT_6845.CRCTType.Motorola_MC6845, this); + CRT = new CRTDevice(this); + GateArray = new AmstradGateArray(this, AmstradGateArray.GateArrayType.Amstrad40007); + PPI = new PPI_8255(this); + + TapeBuzzer = new Beeper(this); + TapeBuzzer.Init(44100, FrameLength); + + //AYDevice = new PSG(this, PSG.ay38910_type_t.AY38910_TYPE_8912, GateArray.PSGClockSpeed, 882 * 50); + AYDevice = new AY38912(this); + AYDevice.Init(44100, FrameLength); + + KeyboardDevice = new StandardKeyboard(this); + + TapeDevice = new DatacorderDevice(autoTape); + TapeDevice.Init(this); + + UPDDiskDevice = new NECUPD765(); + UPDDiskDevice.Init(this); + + InitializeMedia(files); + } + + #endregion + } +} diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Memory.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Memory.cs index 4db61a5da3..aca1a891bc 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Memory.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.Memory.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { @@ -10,30 +11,61 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { #region Memory Fields & Properties + /* ROM Banks */ /// - /// ROM Banks - /// - public byte[] ROM0 = new byte[0x4000]; - public byte[] ROM1 = new byte[0x4000]; - - /// - /// RAM Banks + /// Lower: OS ROM /// - public byte[] RAM0 = new byte[0x4000]; // Bank 0 - public byte[] RAM1 = new byte[0x4000]; // Bank 1 - public byte[] RAM2 = new byte[0x4000]; // Bank 2 - public byte[] RAM3 = new byte[0x4000]; // Bank 3 + public byte[] ROMLower = new byte[0x4000]; + /// + /// Upper: POS 0 (usually BASIC) + /// + public byte[] ROM0 = new byte[0x4000]; + /// + /// Upper: POS 7 (usually AMSDOS) + /// + public byte[] ROM7 = new byte[0x4000]; + + /* RAM Banks - Lower 64K */ + public byte[] RAM0 = new byte[0x4000]; + public byte[] RAM1 = new byte[0x4000]; + public byte[] RAM2 = new byte[0x4000]; + public byte[] RAM3 = new byte[0x4000]; + + /* RAM Banks - Upper 64K */ + public byte[] RAM4 = new byte[0x4000]; + public byte[] RAM5 = new byte[0x4000]; + public byte[] RAM6 = new byte[0x4000]; + public byte[] RAM7 = new byte[0x4000]; /// /// Signs whether Upper ROM is paged in /// public bool UpperROMPaged; + /// + /// The position of the currently paged upper ROM + /// + public int UpperROMPosition; + /// /// Signs whether Lower ROM is paged in /// public bool LowerROMPaged; + /// + /// The currently selected RAM config + /// + public int RAMConfig; + + /// + /// Always 0 on a CPC6128 + /// On a machine with more than 128K RAM (standard memory expansion) this selects each additional 64K above the first upper 64K + /// + public int RAM64KBank; + + + + #endregion #region Memory Related Methods @@ -84,7 +116,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC /// Sets up the ROM /// /// - public abstract void InitROM(RomData romData); + public abstract void InitROM(RomData[] romData); /// /// ULA reads the memory at the specified address diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.cs index 6ecbf15ca2..a12f467615 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/CPCBase.cs @@ -328,12 +328,23 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC ser.Sync("_frameCycles", ref _frameCycles); ser.Sync("inputRead", ref inputRead); ser.Sync("LastFrameStartCPUTick", ref LastFrameStartCPUTick); + ser.Sync("ROMLower", ref ROMLower, false); ser.Sync("ROM0", ref ROM0, false); - ser.Sync("ROM1", ref ROM1, false); + ser.Sync("ROM7", ref ROM7, false); ser.Sync("RAM0", ref RAM0, false); ser.Sync("RAM1", ref RAM1, false); ser.Sync("RAM2", ref RAM2, false); ser.Sync("RAM3", ref RAM3, false); + ser.Sync("RAM4", ref RAM4, false); + ser.Sync("RAM5", ref RAM5, false); + ser.Sync("RAM6", ref RAM6, false); + ser.Sync("RAM7", ref RAM7, false); + + ser.Sync("UpperROMPosition", ref UpperROMPosition); + ser.Sync("UpperROMPaged", ref UpperROMPaged); + ser.Sync("LowerROMPaged", ref LowerROMPaged); + ser.Sync("RAMConfig", ref RAMConfig); + ser.Sync("RAM64KBank", ref RAM64KBank); CRCT.SyncState(ser); CRT.SyncState(ser); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/ROM/RomData.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/ROM/RomData.cs index 14dc13e8f0..cb37bbb177 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/ROM/RomData.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/ROM/RomData.cs @@ -14,58 +14,52 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC get { return _romBytes; } set { _romBytes = value; } } + private byte[] _romBytes; + + public enum ROMChipType + { + Lower, + Upper + } /// - /// Useful ROM addresses that are needed during tape operations + /// Whether this is an Upper or Lower ROM /// - public ushort SaveBytesRoutineAddress - { - get { return _saveBytesRoutineAddress; } - set { _saveBytesRoutineAddress = value; } - } - public ushort LoadBytesRoutineAddress - { - get { return _loadBytesRoutineAddress; } - set { _loadBytesRoutineAddress = value; } - } - public ushort SaveBytesResumeAddress - { - get { return _saveBytesResumeAddress; } - set { _saveBytesResumeAddress = value; } - } - public ushort LoadBytesResumeAddress - { - get { return _loadBytesResumeAddress; } - set { _loadBytesResumeAddress = value; } - } - public ushort LoadBytesInvalidHeaderAddress - { - get { return _loadBytesInvalidHeaderAddress; } - set { _loadBytesInvalidHeaderAddress = value; } - } + public ROMChipType ROMType; - private byte[] _romBytes; - private ushort _saveBytesRoutineAddress; - private ushort _loadBytesRoutineAddress; - private ushort _saveBytesResumeAddress; - private ushort _loadBytesResumeAddress; - private ushort _loadBytesInvalidHeaderAddress; + /// + /// The designated ROM position for this ROM + /// + public int ROMPosition; - - public static RomData InitROM(MachineType machineType, byte[] rom) + /// + /// Initialise a RomData object + /// + /// + /// + /// + /// + /// + public static RomData InitROM(MachineType machineType, byte[] rom, ROMChipType type, int romPosition = 0) { RomData RD = new RomData(); RD.RomBytes = new byte[rom.Length]; RD.RomBytes = rom; + RD.ROMType = type; + + if (type == ROMChipType.Upper) + { + RD.ROMPosition = romPosition; + } + + for (int i = 0; i < rom.Length; i++) + RD.RomBytes[i] = rom[i]; switch (machineType) { case MachineType.CPC464: - RD.SaveBytesRoutineAddress = 0x04C2; - RD.SaveBytesResumeAddress = 0x0000; - RD.LoadBytesRoutineAddress = 0x0808; //0x0556; //0x056C; - RD.LoadBytesResumeAddress = 0x05E2; - RD.LoadBytesInvalidHeaderAddress = 0x05B6; + break; + case MachineType.CPC6128: break; } diff --git a/BizHawk.Emulation.Cores/Properties/Resources.Designer.cs b/BizHawk.Emulation.Cores/Properties/Resources.Designer.cs index 8fbaefd7f8..29547db751 100644 --- a/BizHawk.Emulation.Cores/Properties/Resources.Designer.cs +++ b/BizHawk.Emulation.Cores/Properties/Resources.Designer.cs @@ -63,9 +63,49 @@ namespace BizHawk.Emulation.Cores.Properties { /// /// Looks up a localized resource of type System.Byte[]. /// - internal static byte[] cpc464_rom { + internal static byte[] CPC_AMSDOS_0_5_ROM { get { - object obj = ResourceManager.GetObject("cpc464_rom", resourceCulture); + object obj = ResourceManager.GetObject("CPC_AMSDOS_0_5_ROM", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] CPC_BASIC_1_0_ROM { + get { + object obj = ResourceManager.GetObject("CPC_BASIC_1_0_ROM", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] CPC_BASIC_1_1_ROM { + get { + object obj = ResourceManager.GetObject("CPC_BASIC_1_1_ROM", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] CPC_OS_6128_ROM { + get { + object obj = ResourceManager.GetObject("CPC_OS_6128_ROM", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] OS_464_ROM { + get { + object obj = ResourceManager.GetObject("OS_464_ROM", resourceCulture); return ((byte[])(obj)); } } diff --git a/BizHawk.Emulation.Cores/Properties/Resources.resx b/BizHawk.Emulation.Cores/Properties/Resources.resx index f88fb98e9e..36a0577f82 100644 --- a/BizHawk.Emulation.Cores/Properties/Resources.resx +++ b/BizHawk.Emulation.Cores/Properties/Resources.resx @@ -151,7 +151,19 @@ ..\Resources\plus2.rom.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ..\Resources\cpc464.rom.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\CPC_AMSDOS_0.5.ROM.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\CPC_BASIC_1.0.ROM.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\CPC_BASIC_1.1.ROM.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\CPC_OS_6128.ROM.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\OS_464.ROM.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 \ No newline at end of file diff --git a/BizHawk.Emulation.Cores/Resources/CPC_AMSDOS_0.5.ROM.gz b/BizHawk.Emulation.Cores/Resources/CPC_AMSDOS_0.5.ROM.gz new file mode 100644 index 0000000000000000000000000000000000000000..e276f88d0a8b53370536c831c4a2bbae40a27f24 GIT binary patch literal 10753 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
Y{yuq(GLvAZvZ2tKt}Y_L7|JI1)|2~ z>QYj2=1_xub^v7uY71>b?Hte)pv1H+%Scb({*e=XNP@!ICxJayDD5ZulnJEXDc57| zLw&V20T_r#!mLVyS6Xqkr4WKy{Q!@&Ni(}YDjV2e?VHyx&73pI7*#5i&^l|dNOU(P zkV&Qcka4jIP=3UCq^$jYP5q$G3;oJC!-udWf5c?{Dr1r{)?V75^=B$$Qc7QSzl7c= z=#K#XA)reM`qh4(`c z>dYQU{+`iIMpYTFI?tFhjG3|aTL(N*$fYP`@qjX(J@oDzzRu8A&>uBy~5Jx@z1<}$ILaE%4+EJNv^_Tzv|DW$-r)d z&_>K)Zj3zLpsAGe0yBvA$a9yxFAP<;+u1>*d5|s@9PlATp3(dxpqV~svCkT`MW)@V zN4cU}tNrCcWjtrKuN_Q@wJ#d11(Y%oW^x0O`2f)J@h>fLRu3A>Gu)Yc+Dk=da8Qc< z$wBy#7Y2XOMW)4IXkO=@L5RhWt#d!{B$sC>)8yB*s~(+{RSJH3doY)Bp=u%@jIeQ~ za(qH~%I&#e3J>cS>GSv?G$KiWM6m*vO3kCIqRH>#ppr2t$b+>R3QJ%55KN^EZc?m0 zJUEH3&Va!%%gyv55;j1y>QNYY`5y>e4wKNiXK-ZCU?{eA-Ov*5hb65Gho*r^pyI-z za!cQyNCzO5#Kyft;8UsGGV=YQ+@0_;GxCQ{59L;al94}XIZ`R~JltvM;&#%->qC8e zhalGjcSzBShDbku7@D@)cpnG@16*X6J`{_p?f3BFn=Uf~2!f!Ai|M-rUhX$Jq+m5{K z7AuMiCzQW<&h&g?Va(TTRZQpSb8?4|9IV|@JtubOnyafHoc_({>yIatta#&_sTrPG z)9My}lYV09$KTHQQ^B;jHH9bscx!>;jr&#xRQV1zIr{82z_3i@Ng<8W4KgH?Tl#)} z6(8y|3^2L3a6mxA)4->FPR%ep9?VaS7!b+y^hn0AbNFf~#%{aHLHp~S^f1mC0lImb z*U9w;o;sp{M+y69R{>6#2w7sMW;h8jNHZLjW2cA55bz|XK)qL^h&}*J9Z5p*!-he| zm<><7e;(3Ak5|XFf#)0N(qR^!nvVDtK*)h5Yd7hxGVp&AMi>}`b;ISMwALqv(R0J) zGedM|$#5+opan*f50+^vJ3k$EembTmZ?gXm6y23e z0beOs_KE$YVc-P@V$Dy8G^06WayASXj4&2w`>;7Q!(ujU!yC#W`ybR(Q+EeIucHtw&%Ej~|V}(bGDL zoGNBQt%AaQK%W3-5?XSI6+I3cr<{L{@}Yl48G%jOC+`N=hw=2Hdg(n z#H&z`44@f(DZd&7h6<7gK4T=`>sDAs3P-tet21vDW)%9`C|72+=ZwlbR@+7Cng^t)(c>LiqJ69x z1#R|itoj3J;ga{lZdH(><&TJ;8|}Vm1BY<3Jg}=aM-iLD#OB1tmTc51V<8qv$8{;`Y5W$Rf#Lt*<&qwEv zUjziSj-*fxh8Jh@;6@;cGLV%eMyJbK@JP*<;SGj;`+on!r~dc_IC~`eGB5gm4_+xt zupfZOs?719KtN<4H2xDj9c0{wJ1%xRASIFiWI>+ghp`kUt6?k!ue0&?QG6&Y2~Zk> z3>-&?83`~F$t?u;c^GO@tYo0c*NYkr9F~L$EgcL0*L*pX^_A=I%`V~}06+i$l);s} literal 0 HcmV?d00001 diff --git a/BizHawk.Emulation.Cores/Resources/CPC_BASIC_1.0.ROM.gz b/BizHawk.Emulation.Cores/Resources/CPC_BASIC_1.0.ROM.gz new file mode 100644 index 0000000000000000000000000000000000000000..24f3db6bd31d843dbec111985dedd84998dfa9bc GIT binary patch literal 12826 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 s@m67I2fWiJ01s>x$^ZZW literal 0 HcmV?d00001 diff --git a/BizHawk.Emulation.Cores/Resources/CPC_BASIC_1.1.ROM.gz b/BizHawk.Emulation.Cores/Resources/CPC_BASIC_1.1.ROM.gz new file mode 100644 index 0000000000000000000000000000000000000000..6188f6f970b0867d94ce242b3c63c1ab805fe2fa GIT binary patch literal 13277 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 U|LCY6;^=z28d^(xkK@ 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 literal 0 HcmV?d00001 diff --git a/BizHawk.Emulation.Cores/Resources/cpc464.rom.gz b/BizHawk.Emulation.Cores/Resources/cpc464.rom.gz deleted file mode 100644 index 7a5c2408da4cb9cf36c0903ad239e8c9d5be0bf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25744 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