misc/chsuper.cpp: descrambled GFX for lstislnd. Renamed to losttrea since ot shows a Lost Treasure title.

This commit is contained in:
Ivan Vangelista 2023-06-20 18:00:28 +02:00
parent e685326b9c
commit 9dcc870967
3 changed files with 67 additions and 20 deletions

View File

@ -28657,7 +28657,7 @@ chmpnum // 1999, unknown
chmpnuma // 1999, unknown
chsuper2 // 1999, unknown
chsuper3 // 1999, unknown
lstislnd // 1999, unknown
losttrea // 1999, unknown
@source:misc/cleartone.cpp
bnstlkr //

View File

@ -9,15 +9,15 @@
Additional work by Roberto Fresca.
Notes:
- To init chsuper3, chmpnum & chmpnuma, just keep pressed both service keys (9 & 0),
and do a soft-reset (F3).
- To init chsuper3, chmpnum & chmpnuma, losttrea, just keep pressed both service keys
(9 & 0), and do a soft-reset (F3).
TODO:
- sound.
- ticket dispenser.
- Trace the hold3 lamp line on the pcb,
for a proper implementation.
- proper GFX decode / descramble for lstislnd (game seems to run after init above).
- Verify losttrea inputs and promote to working if they are ok.
*******************************************************************************************/
@ -50,11 +50,12 @@ public:
{ }
void chsuper(machine_config &config);
void losttrea(machine_config &config);
void init_chsuper3();
void init_chmpnum();
void init_chsuper2();
void init_lstislnd();
void init_losttrea();
protected:
virtual void machine_start() override { m_lamps.resolve(); }
@ -77,6 +78,7 @@ private:
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void losttrea_portmap(address_map &map);
void portmap(address_map &map);
void prg_map(address_map &map);
void ramdac_map(address_map &map);
@ -227,12 +229,11 @@ void chsuper_state::prg_map(address_map &map)
map(0xfb000, 0xfbfff).ram().share("nvram");
}
void chsuper_state::portmap(address_map &map)
void chsuper_state::losttrea_portmap(address_map &map)
{
map(0x0000, 0x003f).ram(); // Z180 internal regs
map(0x00e8, 0x00e8).portr("IN0");
map(0x00e9, 0x00e9).portr("IN1");
map(0x00ea, 0x00ea).portr("DSW");
map(0x00ed, 0x00ed).nopw(); // mirror of EFh, but with bit0 active...
map(0x00ee, 0x00ee).w(FUNC(chsuper_state::outporta_w));
map(0x00ef, 0x00ef).w(FUNC(chsuper_state::outportb_w));
@ -243,6 +244,13 @@ void chsuper_state::portmap(address_map &map)
map(0xff20, 0xff3f).w("dac", FUNC(dac_byte_interface::data_w)); // unk writes
}
void chsuper_state::portmap(address_map &map)
{
losttrea_portmap(map);
map(0x00ea, 0x00ea).portr("DSW");
}
void chsuper_state::ramdac_map(address_map &map)
{
map(0x000, 0x3ff).rw("ramdac", FUNC(ramdac_device::ramdac_pal_r), FUNC(ramdac_device::ramdac_rgb666_w));
@ -342,9 +350,41 @@ static INPUT_PORTS_START( chsuper )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
static INPUT_PORTS_START( losttrea )
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Q) PORT_NAME("IN0-1")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Hold 1 / Black (Nero) / Bet Max")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_NAME("Bet / Cancel All / Take (Ritira)")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Double (Radoppio)")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Hold 5 / Red (Rosso) / Double (Radoppio)")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Service 2 - Statistica Parziale")
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Service 1 - Management")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Hold 4 / High (Alta)")
PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Hold 2 / Low (Bassa)")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD3 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_W) PORT_NAME("IN1-3")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_E) PORT_NAME("IN1-4")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_R) PORT_NAME("IN1-5")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) // ticket-in in chmpnum
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_T) PORT_NAME("IN1-7")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // ticket out / payout in chsuper2
PORT_START("IN2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_S) PORT_NAME("IN2-2")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_D) PORT_NAME("IN2-3")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_F) PORT_NAME("IN2-4")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_G) PORT_NAME("IN2-5")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_H) PORT_NAME("IN2-6")
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_J) PORT_NAME("IN2-7")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_K) PORT_NAME("IN2-8")
// no dips on PCB
INPUT_PORTS_END
/*****************************
* Graphics Decode Routines *
@ -401,6 +441,13 @@ void chsuper_state::chsuper(machine_config &config)
DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.25); // 74HC273 latch + R2R network (unknown values)
}
void chsuper_state::losttrea(machine_config &config)
{
chsuper(config);
m_maincpu->set_addrmap(AS_IO, &chsuper_state::losttrea_portmap);
}
/***************************
* ROM Regions definition *
@ -481,7 +528,7 @@ ROM_START( chmpnuma )
ROM_COPY( "maincpu", 0x10000, 0x00000, 0x70000 )
ROM_END
ROM_START( lstislnd ) // on a slightly newer PCB with more GFX ROM space
ROM_START( losttrea ) // on a slightly newer PCB with more GFX ROM space. Labels are Lost Island, there's still Lost Island GFX in ROMs but title screen is Lost Treasure
ROM_REGION( 0x80000, "maincpu", 0 ) // code + samples
ROM_LOAD( "lost_island_1.ic10", 0x00000, 0x80000, CRC(4444cf61) SHA1(d3d84a05042e3cf66c53648148f5e78035800cb9) )
@ -559,12 +606,12 @@ void chsuper_state::init_chmpnum()
memcpy(rom, buffer.get(), 0x100000);
}
void chsuper_state::init_lstislnd()
void chsuper_state::init_losttrea()
{
std::unique_ptr<uint8_t[]> buffer;
uint8_t *rom = memregion("chars")->base();
m_tilexor = 0x1500; // TODO
m_tilexor = 0x1900;
buffer = std::make_unique<uint8_t[]>(0x200000);
@ -572,7 +619,7 @@ void chsuper_state::init_lstislnd()
{
int j = i ^ (m_tilexor << 5);
j = bitswap<24>(j , 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); // TODO
j = bitswap<24>(j , 23, 22, 21, 20, 19, 18, 17, 15, 13, 14, 16, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);
buffer[j] = rom[i];
}
@ -587,9 +634,9 @@ void chsuper_state::init_lstislnd()
* Game Drivers *
*************************/
// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS LAYOUT
GAMEL( 1999, chsuper3, 0, chsuper, chsuper, chsuper_state, init_chsuper3, ROT0, "<unknown>", "Champion Super 3 (V0.35)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_chsuper ) //24/02/99
GAMEL( 1999, chsuper2, chsuper3, chsuper, chsuper, chsuper_state, init_chsuper2, ROT0, "<unknown>", "Champion Super 2 (V0.13)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_chsuper ) //26/01/99
GAME( 1999, chmpnum, chsuper3, chsuper, chsuper, chsuper_state, init_chmpnum, ROT0, "<unknown>", "Champion Number (V0.74)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) //10/11/99
GAME( 1999, chmpnuma, chsuper3, chsuper, chsuper, chsuper_state, init_chmpnum, ROT0, "<unknown>", "Champion Number (V0.67)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) //21/10/99
GAME( 2001, lstislnd, 0, chsuper, chsuper, chsuper_state, init_lstislnd, ROT0, "<unknown>", "Lost Island (V1.03)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) //04/05/01, there's also a Lost Treasure string
// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS LAYOUT
GAMEL( 1999, chsuper3, 0, chsuper, chsuper, chsuper_state, init_chsuper3, ROT0, "<unknown>", "Champion Super 3 (V0.35)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_chsuper ) //24/02/99
GAMEL( 1999, chsuper2, chsuper3, chsuper, chsuper, chsuper_state, init_chsuper2, ROT0, "<unknown>", "Champion Super 2 (V0.13)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_chsuper ) //26/01/99
GAME( 1999, chmpnum, chsuper3, chsuper, chsuper, chsuper_state, init_chmpnum, ROT0, "<unknown>", "Champion Number (V0.74)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) //10/11/99
GAME( 1999, chmpnuma, chsuper3, chsuper, chsuper, chsuper_state, init_chmpnum, ROT0, "<unknown>", "Champion Number (V0.67)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) //21/10/99
GAME( 2001, losttrea, 0, losttrea, losttrea, chsuper_state, init_losttrea, ROT0, "<unknown>", "Lost Treasure (V1.03)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) //04/05/01, there's also a Lost Island string

View File

@ -344,14 +344,14 @@ ROM_START( snes4sl )
ROM_REGION(0x400000, "user3", ROMREGION_ERASEFF)
ROM_REGION(0x8000, "mcu", 0)
ROM_SYSTEM_BIOS(0, "930601", "94-06-01") // Found on PCB with Intel P80C31BH, has 'SISTEME FRANCE' string in ROM
ROM_SYSTEM_BIOS(0, "940601", "94-06-01") // Found on PCB with Intel P80C31BH, has 'SISTEME FRANCE' string in ROM
ROMX_LOAD("27c256_06_01.u43", 0x0000, 0x8000, CRC(d0f4849f) SHA1(971743c9b5a2c0ba267dd8a1ce9ff3821759b4fe), ROM_BIOS(0))
ROM_SYSTEM_BIOS(1, "931207", "93-12-07") // Found on PCB with Siemens SAB 8051A-P (4KBytes internal ROM undumped)
ROMX_LOAD("27c256_12-07.bin", 0x0000, 0x8000, CRC(0922314d) SHA1(04f1265ddc753111e6fcd56162a917ae1791c164), ROM_BIOS(1))
ROM_SYSTEM_BIOS(2, "931103", "93-11-03") // Found on PCB with WD1016D-PL
ROMX_LOAD("27c256_11-03.bin", 0x0000, 0x8000, CRC(4e471581) SHA1(0f23ad065d448097f56ab45c3850d53cf85f3670), ROM_BIOS(2))
ROM_DEFAULT_BIOS("930601")
ROM_DEFAULT_BIOS("940601")
ROM_END
ROM_START( snes4sln )