diff --git a/hash/gameboy.xml b/hash/gameboy.xml index 8249b1fdf10..0895c9b5c2c 100644 --- a/hash/gameboy.xml +++ b/hash/gameboy.xml @@ -17257,12 +17257,12 @@ - - + Rockman World (Jpn, Prototype) 1991 Capcom + diff --git a/hash/gba.xml b/hash/gba.xml index bad7a034331..b3a0cf807a2 100644 --- a/hash/gba.xml +++ b/hash/gba.xml @@ -35036,6 +35036,7 @@ The cart also contained a non-empty SRAM save which we currently include in the 2003 Empire Entertainment + @@ -38439,10 +38440,11 @@ The cart also contained a non-empty SRAM save which we currently include in the - + Tyrian 2000 (USA, Prototype) 19?? Stealth Productions + diff --git a/hash/gbcolor.xml b/hash/gbcolor.xml index 327cafec49f..467b29a918f 100644 --- a/hash/gbcolor.xml +++ b/hash/gbcolor.xml @@ -23273,11 +23273,12 @@ Rocket Games These were produced between 2000 and 2001 by Rocket Games, run by Datel Design --> - + ATV Racing & Karate Joe (Euro) 200? Rocket Games + @@ -23288,11 +23289,12 @@ These were produced between 2000 and 2001 by Rocket Games, run by Datel Design - + ATV Racing & Karate Joe (Euro, Alt) 200? Rocket Games + @@ -23303,10 +23305,11 @@ These were produced between 2000 and 2001 by Rocket Games, run by Datel Design - + ATV Racing (Euro) 2001 Rocket Games + @@ -23317,11 +23320,12 @@ These were produced between 2000 and 2001 by Rocket Games, run by Datel Design - + Full Time Soccer & Hang Time Basketball (Euro) 200? Rocket Games + @@ -23332,10 +23336,11 @@ These were produced between 2000 and 2001 by Rocket Games, run by Datel Design - + Full Time Soccer (Euro) 2000 Rocket Games + @@ -23346,24 +23351,12 @@ These were produced between 2000 and 2001 by Rocket Games, run by Datel Design - - - Full Time Soccer (Euro, Hacked) - 2000 - Rocket Games - - - - - - - - - + Hang Time Basketball (Euro) 200? Rocket Games + @@ -23374,11 +23367,12 @@ These were produced between 2000 and 2001 by Rocket Games, run by Datel Design - + Pocket Smash Out & Race Time (Euro) 200? Rocket Games + @@ -23392,6 +23386,7 @@ These were produced between 2000 and 2001 by Rocket Games, run by Datel Design Pocket Smash Out (Euro) 200? Rocket Games + @@ -23402,11 +23397,12 @@ These were produced between 2000 and 2001 by Rocket Games, run by Datel Design - + Karate Joe (Euro) 200? Rocket Games + @@ -23415,10 +23411,11 @@ These were produced between 2000 and 2001 by Rocket Games, run by Datel Design - + Painter (Euro) 200? Rocket Games + @@ -23427,11 +23424,12 @@ These were produced between 2000 and 2001 by Rocket Games, run by Datel Design - + Race Time (Euro) 200? Rocket Games + @@ -23440,25 +23438,12 @@ These were produced between 2000 and 2001 by Rocket Games, run by Datel Design - - - - Race Time (Euro, Hacked) - 200? - Rocket Games - - - - - - - - - + Space Invasion & Karate Joe (Euro) 200? Rocket Games + @@ -23469,11 +23454,12 @@ These were produced between 2000 and 2001 by Rocket Games, run by Datel Design - + Space Invasion & Painter (Euro) 200? Rocket Games + @@ -23484,11 +23470,12 @@ These were produced between 2000 and 2001 by Rocket Games, run by Datel Design - + Space Invasion (Euro) 200? Rocket Games + @@ -24058,10 +24045,11 @@ These were produced between 2000 and 2001 by Rocket Games, run by Datel Design - + Ice Age II (Chi) 20?? Sintax + @@ -25487,36 +25475,19 @@ These were produced between 2000 and 2001 by Rocket Games, run by Datel Design - Shi Qi Shi Dai - Jing Ling Wang Dan Sheng (Chi) 20?? GOWIN + - - - - - - - - - Shi Qi Shi Dai - Jing Ling Wang Dan Sheng (Chi, Hacked?) - 20?? - GOWIN - - - - - - - + diff --git a/src/emu/bus/gameboy/gb_slot.c b/src/emu/bus/gameboy/gb_slot.c index 26506841907..d6177f40f9d 100644 --- a/src/emu/bus/gameboy/gb_slot.c +++ b/src/emu/bus/gameboy/gb_slot.c @@ -294,13 +294,11 @@ bool base_gb_cart_slot_device::call_load() offset = 0; if (get_mmm01_candidate(ROM, len)) offset = len - 0x8000; - int type; if (software_entry() != NULL) - type = gb_get_pcb_id(get_feature("slot") ? get_feature("slot") : "rom"); + m_type = gb_get_pcb_id(get_feature("slot") ? get_feature("slot") : "rom"); else - type = get_cart_type(ROM + offset, len - offset); - + m_type = get_cart_type(ROM + offset, len - offset); // setup RAM/NVRAM/RTC/RUMBLE if (software_entry() != NULL) @@ -371,7 +369,7 @@ bool base_gb_cart_slot_device::call_load() break; } - if (type == GB_MBC_MBC2 || type == GB_MBC_MBC7) + if (m_type == GB_MBC_MBC2 || m_type == GB_MBC_MBC7) rambanks = 1; } @@ -384,7 +382,7 @@ bool base_gb_cart_slot_device::call_load() if (m_cart->get_ram_size() && m_cart->get_has_battery()) battery_load(m_cart->get_ram_base(), m_cart->get_ram_size(), 0xff); - //printf("Type: %s\n", gb_get_slot(type)); + //printf("Type: %s\n", gb_get_slot(m_type)); internal_header_logging(ROM + offset, len); @@ -566,6 +564,7 @@ int base_gb_cart_slot_device::get_cart_type(UINT8 *ROM, UINT32 len) return type; } + /*------------------------------------------------- get default card software -------------------------------------------------*/ diff --git a/src/mess/drivers/gb.c b/src/mess/drivers/gb.c index 48e4af0eb92..af71f234abd 100644 --- a/src/mess/drivers/gb.c +++ b/src/mess/drivers/gb.c @@ -436,6 +436,16 @@ READ8_MEMBER(gb_state::gb_cart_r) if (offset < 0x100) { UINT8 *ROM = m_region_maincpu->base(); + if (m_bios_hack->read()) + { + // patch out logo and checksum checks + // (useful to run some pirate carts until we implement + // their complete functionalities + to test homebrew) + if (offset == 0xe9 || offset == 0xea) + return 0x00; + if (offset == 0xfa || offset == 0xfb) + return 0x00; + } return ROM[offset]; } else if (m_cartslot) @@ -456,6 +466,16 @@ READ8_MEMBER(gb_state::gbc_cart_r) if (offset < 0x100) { UINT8 *ROM = m_region_maincpu->base(); + if (m_bios_hack->read()) + { + // patch out logo and checksum checks + // (useful to run some pirate carts until we implement + // their complete functionalities + to test homebrew) + if (offset == 0xdb || offset == 0xdc) + return 0x00; + if (offset == 0xed || offset == 0xee) + return 0x00; + } return ROM[offset]; } else if (offset >= 0x200 && offset < 0x900) @@ -607,6 +627,12 @@ static INPUT_PORTS_START( gameboy ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("Button B") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START) PORT_NAME("Start") PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SELECT) PORT_NAME("Select") + + PORT_START("SKIP_CHECK") + PORT_CONFNAME( 0x01, 0x00, "[HACK] Skip BIOS Logo check" ) + PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) + PORT_CONFSETTING( 0x01, DEF_STR( On ) ) + INPUT_PORTS_END static SLOT_INTERFACE_START(gb_cart) diff --git a/src/mess/drivers/gba.c b/src/mess/drivers/gba.c index 8e544657ef3..6a1190ce14d 100644 --- a/src/mess/drivers/gba.c +++ b/src/mess/drivers/gba.c @@ -894,7 +894,7 @@ READ32_MEMBER(gba_state::gba_io_r) case 0x0130/4: if( (mem_mask) & 0x0000ffff ) // KEYINPUT { - retval = m_io_in0->read(); + retval = m_io_inputs->read(); } else if( (mem_mask) & 0xffff0000 ) { @@ -1886,11 +1886,18 @@ WRITE32_MEMBER(gba_state::gba_oam_w) READ32_MEMBER(gba_state::gba_bios_r) { UINT32 *rom = (UINT32 *)(*m_region_maincpu); - if (m_bios_protected != 0) + if (m_bios_hack->read()) { - offset = (m_bios_last_address + 8) / 4; + // partially patch out logo and checksum checks + // (useful to run some protos + to test homebrew) + if (ACCESSING_BITS_0_15 && (offset == 0x6fc/4)) + return 0; } - return rom[offset&0x3fff]; + + if (m_bios_protected != 0) + offset = (m_bios_last_address + 8) / 4; + + return rom[offset & 0x3fff]; } READ32_MEMBER(gba_state::gba_10000000_r) @@ -1925,7 +1932,7 @@ static ADDRESS_MAP_START( gba_map, AS_PROGRAM, 32, gba_state ) ADDRESS_MAP_END static INPUT_PORTS_START( gbadv ) - PORT_START("IN0") + PORT_START("INPUTS") PORT_BIT( 0xfc00, IP_ACTIVE_HIGH, IPT_BUTTON5) PORT_UNUSED PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("P1 L") PORT_PLAYER(1) // L PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("P1 R") PORT_PLAYER(1) // R @@ -1937,6 +1944,11 @@ static INPUT_PORTS_START( gbadv ) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SELECT ) PORT_PLAYER(1) // SELECT PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("B") PORT_PLAYER(1) // B PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("A") PORT_PLAYER(1) // A + + PORT_START("SKIP_CHECK") + PORT_CONFNAME( 0x01, 0x00, "[HACK] Skip BIOS Logo check" ) + PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) + PORT_CONFSETTING( 0x01, DEF_STR( On ) ) INPUT_PORTS_END @@ -2121,10 +2133,9 @@ void gba_state::machine_start() // install the cart ROM & SRAM into the address map, if present if (m_cart->exists()) { - address_space &space = machine().device("maincpu")->space(AS_PROGRAM); - space.install_read_bank(0x08000000, 0x09ffffff, 0, 0, "rom1"); - space.install_read_bank(0x0a000000, 0x0bffffff, 0, 0, "rom2"); - space.install_read_bank(0x0c000000, 0x0cffffff, 0, 0, "rom3"); + m_maincpu->space(AS_PROGRAM).install_read_bank(0x08000000, 0x09ffffff, 0, 0, "rom1"); + m_maincpu->space(AS_PROGRAM).install_read_bank(0x0a000000, 0x0bffffff, 0, 0, "rom2"); + m_maincpu->space(AS_PROGRAM).install_read_bank(0x0c000000, 0x0cffffff, 0, 0, "rom3"); astring region_tag; memory_region *cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GBASLOT_ROM_REGION_TAG)); diff --git a/src/mess/includes/gb.h b/src/mess/includes/gb.h index f095d8736e4..7460f6d6bcb 100644 --- a/src/mess/includes/gb.h +++ b/src/mess/includes/gb.h @@ -52,6 +52,7 @@ public: m_region_maincpu(*this, "maincpu"), m_rambank(*this, "cgb_ram"), m_inputs(*this, "INPUTS"), + m_bios_hack(*this, "SKIP_CHECK"), m_ram(*this, RAM_TAG), m_lcd(*this, "lcd") { } @@ -119,6 +120,7 @@ protected: required_memory_region m_region_maincpu; optional_memory_bank m_rambank; // cgb required_ioport m_inputs; + required_ioport m_bios_hack; optional_device m_ram; required_device m_lcd; diff --git a/src/mess/includes/gba.h b/src/mess/includes/gba.h index 9378e47ef67..451fc10f293 100644 --- a/src/mess/includes/gba.h +++ b/src/mess/includes/gba.h @@ -140,7 +140,8 @@ public: m_gbsound(*this, "custom"), m_cart(*this, "cartslot"), m_region_maincpu(*this, "maincpu"), - m_io_in0(*this, "IN0") + m_io_inputs(*this, "INPUTS"), + m_bios_hack(*this, "SKIP_CHECK") { } required_device m_maincpu; @@ -268,7 +269,8 @@ public: protected: required_memory_region m_region_maincpu; - required_ioport m_io_in0; + required_ioport m_io_inputs; + required_ioport m_bios_hack; };