From 6cdffb1ce412b16a8af2f535828c9321d00d3e2a Mon Sep 17 00:00:00 2001 From: Wilbert Pol Date: Thu, 8 Aug 2013 18:58:49 +0000 Subject: [PATCH] (MESS) ibmpcjr: Fixed loading of imagic cartridge dumps. (nw) --- src/mess/machine/pc.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/mess/machine/pc.c b/src/mess/machine/pc.c index 732827c5eea..089a1bdab0a 100644 --- a/src/mess/machine/pc.c +++ b/src/mess/machine/pc.c @@ -1545,7 +1545,7 @@ DEVICE_IMAGE_LOAD_MEMBER( pc_state, pcjr_cartridge ) UINT32 address; UINT32 size; - address = (!strcmp(":cart2", image.device().tag())) ? 0xd0000 : 0xe6000; + address = (!strcmp(":cart2", image.device().tag())) ? 0xd0000 : 0xe0000; if ( image.software_entry() ) { @@ -1561,6 +1561,7 @@ DEVICE_IMAGE_LOAD_MEMBER( pc_state, pcjr_cartridge ) unsigned header_size = 0; unsigned image_size = image.length(); + bool imagic_hack = false; /* Check for supported header sizes */ switch( image_size & 0x3ff ) @@ -1579,10 +1580,11 @@ DEVICE_IMAGE_LOAD_MEMBER( pc_state, pcjr_cartridge ) /* Check for supported image sizes */ switch( image_size - header_size ) { + case 0xa000: + imagic_hack = true; case 0x2000: case 0x4000: case 0x8000: - case 0xa000: case 0x10000: break; default: @@ -1603,6 +1605,19 @@ DEVICE_IMAGE_LOAD_MEMBER( pc_state, pcjr_cartridge ) image.seterror(IMAGE_ERROR_UNSUPPORTED, "Unable to read cartridge contents" ); return IMAGE_INIT_FAIL; } + + if (imagic_hack) + { + UINT8 *cart_area = memregion("maincpu")->base() + address; + + memcpy( cart_area + 0xe000, cart_area + 0x2000, 0x2000 ); + memcpy( cart_area + 0xc000, cart_area + 0x2000, 0x2000 ); + memcpy( cart_area + 0xa000, cart_area + 0x2000, 0x2000 ); + memcpy( cart_area + 0x8000, cart_area + 0x2000, 0x2000 ); + memcpy( cart_area + 0x6000, cart_area, 0x2000 ); + memcpy( cart_area + 0x4000, cart_area, 0x2000 ); + memcpy( cart_area + 0x2000, cart_area, 0x2000 ); + } } return IMAGE_INIT_PASS;