mirror of
https://github.com/holub/mame
synced 2025-10-07 09:25:34 +03:00
(MESS) fixed a small bug in the decryption of multi-ROM pegasus programs.
many thanks amilo3438 for testing! nw.
This commit is contained in:
parent
7939397998
commit
cd58792af1
@ -94,7 +94,7 @@ public:
|
|||||||
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||||
DECLARE_DRIVER_INIT(pegasus);
|
DECLARE_DRIVER_INIT(pegasus);
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(pegasus_firq);
|
TIMER_DEVICE_CALLBACK_MEMBER(pegasus_firq);
|
||||||
void pegasus_decrypt_rom(UINT8 *ROM);
|
void pegasus_decrypt_rom(UINT8 *ROM, bool force_decrypt);
|
||||||
|
|
||||||
int load_cart(device_image_interface &image, generic_slot_device *slot, const char *reg_tag);
|
int load_cart(device_image_interface &image, generic_slot_device *slot, const char *reg_tag);
|
||||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(exp00_load) { return load_cart(image, m_exp_00, "0000"); }
|
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(exp00_load) { return load_cart(image, m_exp_00, "0000"); }
|
||||||
@ -389,14 +389,14 @@ GFXDECODE_END
|
|||||||
|
|
||||||
/* An encrypted single rom starts with 02, decrypted with 20. Not sure what
|
/* An encrypted single rom starts with 02, decrypted with 20. Not sure what
|
||||||
multipart roms will have. */
|
multipart roms will have. */
|
||||||
void pegasus_state::pegasus_decrypt_rom(UINT8 *ROM)
|
void pegasus_state::pegasus_decrypt_rom(UINT8 *ROM, bool force_decrypt)
|
||||||
{
|
{
|
||||||
UINT8 b;
|
UINT8 b;
|
||||||
UINT16 j;
|
UINT16 j;
|
||||||
dynamic_buffer temp_copy;
|
dynamic_buffer temp_copy;
|
||||||
temp_copy.resize(0x1000);
|
temp_copy.resize(0x1000);
|
||||||
|
|
||||||
if (ROM[0] == 0x02)
|
if (ROM[0] == 0x02 || force_decrypt)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 0x1000; i++)
|
for (int i = 0; i < 0x1000; i++)
|
||||||
{
|
{
|
||||||
@ -424,7 +424,6 @@ int pegasus_state::load_cart(device_image_interface &image, generic_slot_device
|
|||||||
{
|
{
|
||||||
// we might be loading a cart compatible with all sockets!
|
// we might be loading a cart compatible with all sockets!
|
||||||
// so try to get region "rom"
|
// so try to get region "rom"
|
||||||
printf("universal\n");
|
|
||||||
size = slot->common_get_size("rom");
|
size = slot->common_get_size("rom");
|
||||||
any_socket = true;
|
any_socket = true;
|
||||||
|
|
||||||
@ -440,8 +439,8 @@ int pegasus_state::load_cart(device_image_interface &image, generic_slot_device
|
|||||||
slot->rom_alloc(0x1000, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE); // we alloc 0x1000 also for smaller roms!
|
slot->rom_alloc(0x1000, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE); // we alloc 0x1000 also for smaller roms!
|
||||||
slot->common_load_rom(slot->get_rom_base(), size, any_socket ? "rom" : reg_tag);
|
slot->common_load_rom(slot->get_rom_base(), size, any_socket ? "rom" : reg_tag);
|
||||||
|
|
||||||
// raw images have to be decrypted
|
// raw images have to be decrypted (in particular the ones from softlist)
|
||||||
pegasus_decrypt_rom(slot->get_rom_base());
|
pegasus_decrypt_rom(slot->get_rom_base(), image.software_entry() != NULL);
|
||||||
|
|
||||||
return IMAGE_INIT_PASS;
|
return IMAGE_INIT_PASS;
|
||||||
}
|
}
|
||||||
@ -473,7 +472,7 @@ DRIVER_INIT_MEMBER(pegasus_state, pegasus)
|
|||||||
{
|
{
|
||||||
// decrypt monitor
|
// decrypt monitor
|
||||||
UINT8 *base = memregion("maincpu")->base() + 0xf000;
|
UINT8 *base = memregion("maincpu")->base() + 0xf000;
|
||||||
pegasus_decrypt_rom(base);
|
pegasus_decrypt_rom(base, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( pegasus, pegasus_state )
|
static MACHINE_CONFIG_START( pegasus, pegasus_state )
|
||||||
|
Loading…
Reference in New Issue
Block a user