mirror of
https://github.com/ekeeke/Genesis-Plus-GX.git
synced 2024-12-28 12:11:50 +01:00
added random RAM pattern initialization on Mark-III & Japanese Master System (fixes "Alibaba and 40 Thieves" & "Block Hole")
This commit is contained in:
parent
cca17c642f
commit
83d4312e3c
@ -38,9 +38,6 @@
|
|||||||
|
|
||||||
#include "shared.h"
|
#include "shared.h"
|
||||||
#include "terebi_oekaki.h"
|
#include "terebi_oekaki.h"
|
||||||
#ifdef NGC
|
|
||||||
#include "cheats.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MAPPER_NONE (0)
|
#define MAPPER_NONE (0)
|
||||||
#define MAPPER_TEREBI (1)
|
#define MAPPER_TEREBI (1)
|
||||||
@ -52,7 +49,7 @@
|
|||||||
#define MAPPER_93C46 (7)
|
#define MAPPER_93C46 (7)
|
||||||
#define MAPPER_MULTI (8)
|
#define MAPPER_MULTI (8)
|
||||||
|
|
||||||
#define GAME_DATABASE_CNT (188)
|
#define GAME_DATABASE_CNT (190)
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@ -133,6 +130,10 @@ static const rominfo_t game_list[GAME_DATABASE_CNT] =
|
|||||||
{0xBD1CC7DF, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_MARKIII, REGION_JAPAN_NTSC}, /* Super Tetris (K) */
|
{0xBD1CC7DF, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_MARKIII, REGION_JAPAN_NTSC}, /* Super Tetris (K) */
|
||||||
{0x6D309AC5, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_MARKIII, REGION_JAPAN_NTSC}, /* Power Boggle Boggle (K) */
|
{0x6D309AC5, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_MARKIII, REGION_JAPAN_NTSC}, /* Power Boggle Boggle (K) */
|
||||||
|
|
||||||
|
/* games requiring random RAM pattern initialization */
|
||||||
|
{0x08BF3DE3, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_NONE, SYSTEM_MARKIII, REGION_JAPAN_NTSC}, /* Alibaba and 40 Thieves (KR) */
|
||||||
|
{0x643B6B76, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_NONE, SYSTEM_MARKIII, REGION_JAPAN_NTSC}, /* Block Hole (KR) */
|
||||||
|
|
||||||
/* games requiring PAL timings */
|
/* games requiring PAL timings */
|
||||||
{0x72420F38, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Addams Familly */
|
{0x72420F38, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Addams Familly */
|
||||||
{0x2D48C1D3, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Back to the Future Part III */
|
{0x2D48C1D3, 0, 0, SYSTEM_MS_GAMEPAD, MAPPER_SEGA, SYSTEM_SMS2, REGION_EUROPE}, /* Back to the Future Part III */
|
||||||
@ -932,9 +933,9 @@ static void mapper_8k_w(int offset, unsigned int data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef NGC
|
#ifdef CHEATS_UPDATE
|
||||||
/* update ROM patches */
|
/* update ROM patches when banking has changed */
|
||||||
ROMCheatUpdate();
|
CHEATS_UPDATE();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1076,9 +1077,9 @@ static void mapper_16k_w(int offset, unsigned int data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef NGC
|
#ifdef CHEATS_UPDATE
|
||||||
/* update ROM patches */
|
/* update ROM patches when banking has changed */
|
||||||
ROMCheatUpdate();
|
CHEATS_UPDATE();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -218,7 +218,7 @@ void gen_reset(int hard_reset)
|
|||||||
/* System Reset */
|
/* System Reset */
|
||||||
if (hard_reset)
|
if (hard_reset)
|
||||||
{
|
{
|
||||||
/* clear RAM (TODO: use random bit patterns as on real hardware) */
|
/* clear RAM (TODO: use random bit patterns for all systems, like on real hardware) */
|
||||||
memset(work_ram, 0x00, sizeof (work_ram));
|
memset(work_ram, 0x00, sizeof (work_ram));
|
||||||
memset(zram, 0x00, sizeof (zram));
|
memset(zram, 0x00, sizeof (zram));
|
||||||
}
|
}
|
||||||
@ -286,6 +286,13 @@ void gen_reset(int hard_reset)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
/* RAM state at power-on is undefined on some systems */
|
||||||
|
if ((system_hw == SYSTEM_MARKIII) || ((system_hw & SYSTEM_SMS) && (region_code == REGION_JAPAN_NTSC)))
|
||||||
|
{
|
||||||
|
/* some korean games rely on RAM to be initialized with values different from $00 or $ff */
|
||||||
|
memset(work_ram, 0xf0, sizeof(work_ram));
|
||||||
|
}
|
||||||
|
|
||||||
/* Z80 cycles should be a multiple of 15 to avoid rounding errors */
|
/* Z80 cycles should be a multiple of 15 to avoid rounding errors */
|
||||||
mcycles_z80 = (mcycles_z80 / 15) * 15;
|
mcycles_z80 = (mcycles_z80 / 15) * 15;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user