From 114253de7fdc7094f8efbaf21d15d91d5d826546 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Wed, 1 Nov 2023 06:50:31 +0100 Subject: [PATCH] igs/goldstar.cpp: improved sunspckr GFX decode --- src/mame/igs/goldstar.cpp | 28 ++++++++++++++++++++++++---- src/mame/igs/goldstar.h | 1 + src/mame/igs/goldstar_v.cpp | 6 +++--- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/mame/igs/goldstar.cpp b/src/mame/igs/goldstar.cpp index fe1d8cc372d..ca0e731675b 100644 --- a/src/mame/igs/goldstar.cpp +++ b/src/mame/igs/goldstar.cpp @@ -968,10 +968,10 @@ void goldstar_state::sunspckr_portmap(address_map &map) // TODO: incomplete! map(0x02, 0x02).r("aysnd", FUNC(ay8910_device::data_r)); map(0x03, 0x03).w("aysnd", FUNC(ay8910_device::address_w)); // map(0x10, 0x13) // DSW? - map(0x60, 0x60).portr("IN2"); + map(0x60, 0x60).portr("IN2").lw8(NAME([this] (uint8_t data) { m_reel_bank = (data & 0x30) >> 4; })); // TODO: other bits are used, too map(0x61, 0x61).portr("IN0"); map(0x62, 0x62).portr("IN1"); - map(0x63, 0x63).lr8(NAME([] () -> uint8_t { return 0xff; })); // checks battery level here, among other things + map(0x63, 0x63).lr8(NAME([] () -> uint8_t { return 0xff; })); // checks battery level here, among other things, writes should be lamps } void goldstar_state::cmast91_portmap(address_map &map) @@ -8647,6 +8647,22 @@ static GFXDECODE_START( gfx_cm97 ) GFXDECODE_ENTRY( "gfx", 0x20000, cm97_layout32, 0x0, 32 ) GFXDECODE_END +static const gfx_layout sunspckr_tiles8x32_layout = +{ + 8,32, + RGN_FRAC(1,1), + 4, + { STEP4(0,1) }, + { STEP8(0,4) }, + { STEP32(0,32) }, + 32*32 +}; + +static GFXDECODE_START( gfx_sunspckr ) + GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_msb, 0, 16 ) + GFXDECODE_ENTRY( "gfx2", 0, sunspckr_tiles8x32_layout, 128+64, 4 ) +GFXDECODE_END + void wingco_state::system_outputa_w(uint8_t data) { @@ -9769,6 +9785,10 @@ void goldstar_state::sunspckr(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &goldstar_state::sunspckr_map); m_maincpu->set_addrmap(AS_IO, &goldstar_state::sunspckr_portmap); + + subdevice("screen")->set_screen_update(FUNC(goldstar_state::screen_update_cmast91)); + m_gfxdecode->set_info(gfx_sunspckr); + m_palette->set_init(FUNC(goldstar_state::cmast91_palette)); } void unkch_state::megaline(machine_config &config) @@ -12860,9 +12880,9 @@ ROM_START( hamhouse ) ROM_LOAD( "1_27c64-20.u10", 0x00000, 0x02000, CRC(c4efc953) SHA1(da24c802d33be377ad6d6a357ed32d5214ca7a3f) ) ROM_LOAD( "2_27c256.u11", 0x02000, 0x02000, CRC(fac9fe6c) SHA1(0c55c017957d65121b9cc876d914cca2dec5e94e) ) // BADADDR --xxxxxxxxxxxxx ROM_IGNORE( 0x6000 ) + ROM_LOAD( "3_hy27c64ad-15.u24", 0x04000, 0x02000, CRC(7f9c41db) SHA1(64c5fb779ecc05eae3264c7767c571eb76fb389f) ) ROM_LOAD( "4_d27128a.u26", 0x06000, 0x02000, CRC(8cf3845e) SHA1(4f672d256548211c48e60ce89718c3c195f187d5) ) // 1ST AND 2ND HALF IDENTICAL ROM_IGNORE( 0x2000 ) - ROM_LOAD( "3_hy27c64ad-15.u24", 0x04000, 0x02000, CRC(7f9c41db) SHA1(64c5fb779ecc05eae3264c7767c571eb76fb389f) ) ROM_REGION( 0x10000, "user1", ROMREGION_ERASE00 ) @@ -20076,7 +20096,7 @@ GAME( 1994, chryangla, ncb3, chryangla,ncb3, cb3_state, init_chrya GAME( 1991, eldoradd, 0, eldoradd, chrygld, cb3_state, empty_init, ROT0, "Dyna", "El Dorado (V5.1DR)", MACHINE_NOT_WORKING) // everything GAME( 1991, eldoraddo, eldoradd, eldoradd, chrygld, cb3_state, empty_init, ROT0, "Dyna", "El Dorado (V1.1TA)", MACHINE_NOT_WORKING) // everything -GAME( 1991, sunspckr, 0, sunspckr, cmv4, goldstar_state, init_sunspckr, ROT0, "Suns Co Ltd.", "Animal House (V1.0)", MACHINE_NOT_WORKING) // correct GFX decode, I/O, etc +GAME( 1991, sunspckr, 0, sunspckr, cmv4, goldstar_state, init_sunspckr, ROT0, "Suns Co Ltd.", "Animal House (V1.0)", MACHINE_NOT_WORKING) // improve GFX drawing, correct palette decode, I/O, etc // looks like a hack of Cherry Bonus 3 GAME( 1994, chryangl, ncb3, chryangl, chryangl, cmaster_state, init_chryangl, ROT0, "bootleg (G.C.I.)", "Cherry Angel (set 1)", MACHINE_NOT_WORKING ) // SKY SUPERCB 1.0 string, decrypted but hangs when betting diff --git a/src/mame/igs/goldstar.h b/src/mame/igs/goldstar.h index 32b38e05652..fb3a5a6164e 100644 --- a/src/mame/igs/goldstar.h +++ b/src/mame/igs/goldstar.h @@ -148,6 +148,7 @@ protected: uint8_t m_cmaster_girl_pal = 0U; uint8_t m_cm_enable_reg = 0U; uint8_t m_cm_girl_scroll = 0U; + uint8_t m_reel_bank = 0U; required_device m_maincpu; optional_device_array m_ppi; diff --git a/src/mame/igs/goldstar_v.cpp b/src/mame/igs/goldstar_v.cpp index 4bb23466081..911caaf6a32 100644 --- a/src/mame/igs/goldstar_v.cpp +++ b/src/mame/igs/goldstar_v.cpp @@ -69,7 +69,7 @@ void goldstar_state::goldstar_reel1_ram_w(offs_t offset, uint8_t data) TILE_GET_INFO_MEMBER(goldstar_state::get_goldstar_reel1_tile_info) { tileinfo.set(1, - m_reel1_ram[tile_index], + m_reel1_ram[tile_index] | (m_reel_bank * 0x100), m_bgcolor, 0); } @@ -84,7 +84,7 @@ void goldstar_state::goldstar_reel2_ram_w(offs_t offset, uint8_t data) TILE_GET_INFO_MEMBER(goldstar_state::get_goldstar_reel2_tile_info) { tileinfo.set(1, - m_reel2_ram[tile_index], + m_reel2_ram[tile_index] | (m_reel_bank * 0x100), m_bgcolor, 0); } @@ -98,7 +98,7 @@ void goldstar_state::goldstar_reel3_ram_w(offs_t offset, uint8_t data) TILE_GET_INFO_MEMBER(goldstar_state::get_goldstar_reel3_tile_info) { tileinfo.set(1, - m_reel3_ram[tile_index], + m_reel3_ram[tile_index] | (m_reel_bank * 0x100), m_bgcolor, 0); }