SG1000: work on 8kb ram adapter
This commit is contained in:
parent
cee3d411b9
commit
792b91f821
|
@ -12,6 +12,7 @@ D2B0524A2CF5754C0FA1C900E9ECB06B The Black Onyx (J) SG RPG Japan
|
|||
0BF5B6959FC1B58D8E37F9647F47A0B3 Bomb Jack (J) SG Japan
|
||||
A50378ABE2636C5C47966B74A14DD127 Bomb Jack (T) (Chinese Logo) SG Taiwan
|
||||
8DB486C33C7D688BD5C0E9A81DEE2D29 Bomb Jack (T) (English Logo) SG Taiwan
|
||||
25044D56BC18AD8B66A726C2F9D0B26B Bomberman Special (Taiwan) SG SG_EX_B Taiwan
|
||||
25C742E43BC9F1329F3F26502FEFB10A Borderline (JE) SG Europe;Japan
|
||||
D87DAAD7DE33105D703B613052CCC2DD C_So! (J) SG Japan
|
||||
25AC91AFC22F7A09FF4543AF653CD281 C_So! (T) SG Taiwan
|
||||
|
@ -88,8 +89,11 @@ D7322428A4FB49AC593F80F30D3C7BD3 Home Mahjong (J) SG Puzzle;Mahjong Japan
|
|||
8BE690D357A99ABD26EBB5378E9C0153 Hustle Chumy (J) SG Japan
|
||||
D8E6D89D520C91A9EA219291B55284BB Hyper Sports (J) SG Sports Japan
|
||||
F72F3DEF79FFD82FE2224F4732B2B994 Hyper Sports (T) SG Sports Taiwan
|
||||
E0321CD713EC1B48FF88F7DF13E3CE28 Knightmare (Taiwan) SG SG_EX_A Taiwan
|
||||
CFC8E61F51388609421FFE87539CAD44 Legend of Kage, The (Taiwan) SG SG_EX_A Taiwan
|
||||
4B4F02EB3CF7D5F9DCD1311D72E6D742 Lode Runner (JE) SG Europe;Japan
|
||||
2BEA9EE88E177A13D7961017DD4F6120 Lode Runner (T) SG Taiwan
|
||||
C12474E0A2556ADB2478BC4D99FABA51 Magical Kid Wiz (Taiwan) SG SG_EX_B Taiwan
|
||||
D9DA8A32BD3B18881DFA2B469C85944E Mahjong (J) SG Puzzle;Mahjong Japan
|
||||
1DBB5C85962C2110FFE35EC536F96329 Mahjong (J) (English Title) SG Puzzle;Mahjong Japan
|
||||
BB8DA563CB6A38611B736C4973B56E1E Mahjong (T) SG Puzzle;Mahjong Taiwan
|
||||
|
@ -123,6 +127,8 @@ C34260B61C6A45BBDD074DF3F3E72C46 Pitfall II - The Lost Caverns (J) (Rev 0) SG
|
|||
7F841AA0C225662E26CA7A8DF20B2EB8 Pop Flamer (JE) SG Europe;Japan
|
||||
E5082018FF7CBAC17DB003F159AB2DFB Pop Flamer (T) SG Taiwan
|
||||
A768A8AE921126300E98F9D918A4A0C9 Q-bert (J) SG Japan
|
||||
3071F939AAA0911FC0907AAE5DAAA160 Rally-X (Taiwan) (DahJee) SG SG_EX_A Taiwan
|
||||
E872BBE06FCEE32E53FB9E11B61FE762 Road Fighter (Taiwan) (Jumbo) SG SG_EX_A Taiwan
|
||||
108FFE4BA5C2C8C5E0459CB7F0CFAC0E Rock n' Bolt (J) SG Japan
|
||||
F05B48934A7D29AB2719273CBDC45B28 Rock n' Bolt (T) SG Taiwan
|
||||
F77826F62D943C4A24F7FB9C3BB4A5F9 Safari Hunting (J) SG Japan
|
||||
|
@ -162,6 +168,8 @@ ECCAD04698782862F3785FF9708F73E8 Star Jacker (J) SG Japan
|
|||
0104171ADE3CFEAF10C92926869E2A52 Star Jacker (T) SG Taiwan
|
||||
59D01BF1093A65E9EC08E533CFBBC5FF Super Tank (J) SG Japan
|
||||
BCB549A442584255601DC7938ACCD2D6 Super Tank (T) SG Taiwan
|
||||
DADA9D76F7743089811DCC8EC1543076 Tank Battalion (Taiwan) SG SG_EX_A Taiwan
|
||||
8C2C0D7E8415AE7B0C577CF947E89E78 TwinBee (Taiwan) SG SG_EX_A Taiwan
|
||||
BE31A84BFA537117A62EAEB8C0A07BF9 Terebi Oekaki (J) SG Art Japan
|
||||
76F29FEE0CD3AF921E488A276DACE636 Wonder Boy (J) SG Arcade Japan
|
||||
D26FABFE84AD40AE04A2CD3DC6CF75DF Wonder Boy (J) (Rev 1) SG Arcade Japan
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
namespace BizHawk.Emulation.Cores.Sega.MasterSystem
|
||||
{
|
||||
public partial class SMS
|
||||
{
|
||||
private byte ReadMemorySG_EX_A(ushort address)
|
||||
{
|
||||
byte ret;
|
||||
|
||||
if (address < 0x2000)
|
||||
ret = RomData[address & RomMask];
|
||||
else if (address < 0x4000)
|
||||
ret = ExtRam[address & ExtRamMask];
|
||||
else if (address < 0xC000)
|
||||
ret = RomData[address & RomMask];
|
||||
else
|
||||
ret = SystemRam[address & 0x3FF]; // only 1 KB
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
private CDLog_MapResults MapMemorySG_EX_A(ushort address, bool write)
|
||||
{
|
||||
if (address < 0x2000) return new CDLog_MapResults { Type = CDLog_AddrType.ROM, Address = address };
|
||||
if (address < 0x4000) return new CDLog_MapResults { Type = CDLog_AddrType.CartRAM, Address = address & ExtRamMask };
|
||||
if (address < 0xC000) return new CDLog_MapResults { Type = CDLog_AddrType.ROM, Address = address };
|
||||
return new CDLog_MapResults { Type = CDLog_AddrType.MainRAM, Address = address & RamSizeMask };
|
||||
}
|
||||
|
||||
private void WriteMemorySG_EX_A(ushort address, byte value)
|
||||
{
|
||||
if (address < 0x4000 && address >= 0x2000)
|
||||
ExtRam[address & ExtRamMask] = value;
|
||||
else if (address >= 0xC000)
|
||||
SystemRam[address & 0x3FF] = value;
|
||||
}
|
||||
|
||||
private void Init_SG_EX_A()
|
||||
{
|
||||
// 2 regions of RAM
|
||||
ExtRam = new byte[0x2000];
|
||||
ExtRamMask = 0x1FFF;
|
||||
ReadMemoryMapper = ReadMemorySG_EX_A;
|
||||
WriteMemoryMapper = WriteMemorySG_EX_A;
|
||||
MapMemory = MapMemorySG_EX_A;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
namespace BizHawk.Emulation.Cores.Sega.MasterSystem
|
||||
{
|
||||
public partial class SMS
|
||||
{
|
||||
private byte ReadMemorySG_EX_B(ushort address)
|
||||
{
|
||||
byte ret;
|
||||
|
||||
if (address < 0xC000)
|
||||
ret = RomData[address & RomMask];
|
||||
else
|
||||
ret = SystemRam[address & RamSizeMask];
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
private CDLog_MapResults MapMemorySG_EX_B(ushort address, bool write)
|
||||
{
|
||||
if (address < 0xC000) return new CDLog_MapResults { Type = CDLog_AddrType.ROM, Address = address & ExtRamMask };
|
||||
return new CDLog_MapResults { Type = CDLog_AddrType.MainRAM, Address = address & RamSizeMask };
|
||||
}
|
||||
|
||||
private void WriteMemorySG_EX_B(ushort address, byte value)
|
||||
{
|
||||
if (address >= 0xC000)
|
||||
SystemRam[address & RamSizeMask] = value;
|
||||
}
|
||||
|
||||
private void Init_SG_EX_B()
|
||||
{
|
||||
ReadMemoryMapper = ReadMemorySG_EX_B;
|
||||
WriteMemoryMapper = WriteMemorySG_EX_B;
|
||||
MapMemory = MapMemorySG_EX_B;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -48,22 +48,13 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
|
|||
ser.Sync("old_s_L", ref OldSl);
|
||||
ser.Sync("old_s_R", ref OldSr);
|
||||
|
||||
if (SaveRAM != null)
|
||||
{
|
||||
ser.Sync(nameof(SaveRAM), ref SaveRAM, false);
|
||||
}
|
||||
if (SaveRAM != null) { ser.Sync(nameof(SaveRAM), ref SaveRAM, false); }
|
||||
|
||||
ser.Sync(nameof(SaveRamBank), ref SaveRamBank);
|
||||
|
||||
if (ExtRam != null)
|
||||
{
|
||||
ser.Sync("ExtRAM", ref ExtRam, true);
|
||||
}
|
||||
if (ExtRam != null) { ser.Sync("ExtRAM", ref ExtRam, true); }
|
||||
|
||||
if (HasYM2413)
|
||||
{
|
||||
YM2413.SyncState(ser);
|
||||
}
|
||||
if (HasYM2413) { YM2413.SyncState(ser); }
|
||||
|
||||
EEPROM?.SyncState(ser);
|
||||
|
||||
|
|
|
@ -40,6 +40,9 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
|
|||
}
|
||||
|
||||
RomBanks = (byte)(RomData.Length / BankSize);
|
||||
RomMask = RomData.Length - 1;
|
||||
if (RomMask == 0x5FFF) { RomMask = 0x7FFF; }
|
||||
if (RomMask == 0xBFFF) { RomMask = 0xFFFF; }
|
||||
|
||||
Region = DetermineDisplayType(SyncSettings.DisplayType, game.Region);
|
||||
if (game["PAL"] && Region != DisplayType.PAL)
|
||||
|
@ -135,6 +138,10 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
|
|||
InitTerebiOekaki();
|
||||
else if (game["EEPROM"])
|
||||
InitEEPROMMapper();
|
||||
else if(game["SG_EX_A"])
|
||||
Init_SG_EX_A();
|
||||
else if (game["SG_EX_B"])
|
||||
Init_SG_EX_B();
|
||||
else
|
||||
InitSegaMapper();
|
||||
|
||||
|
@ -234,6 +241,7 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
|
|||
|
||||
// ROM
|
||||
public byte[] RomData;
|
||||
public int RomMask;
|
||||
private byte RomBank0, RomBank1, RomBank2, RomBank3;
|
||||
private byte Bios_bank;
|
||||
private readonly byte RomBanks;
|
||||
|
|
Loading…
Reference in New Issue