From 41fb7adb2ac3e7e1ccdcb11fb11015f1218e581b Mon Sep 17 00:00:00 2001 From: David Haywood Date: Mon, 17 Nov 2025 12:07:31 +0000 Subject: [PATCH 01/15] added Game Box 400 in 1 (2022 PCB) --- src/mame/mame.lst | 1 + src/mame/nintendo/nes_vt42xx.cpp | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index b768d952096c0..73877701490c9 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -35827,6 +35827,7 @@ egame150 f5_620 gb50_150 gbox2020 +gbox2022 gcs2mgp gon100 goretrop diff --git a/src/mame/nintendo/nes_vt42xx.cpp b/src/mame/nintendo/nes_vt42xx.cpp index 5abedff16bd76..f48fd665dedfe 100644 --- a/src/mame/nintendo/nes_vt42xx.cpp +++ b/src/mame/nintendo/nes_vt42xx.cpp @@ -471,6 +471,11 @@ ROM_START( gbox2019 ) ROM_LOAD( "fgb2019.bin", 0x00000, 0x1000000, CRC(7ef130d5) SHA1(00f45974494707fdac78153b13d8cfb503716ad0) ) // flash ROM ROM_END +ROM_START( gbox2022 ) + ROM_REGION( 0x1000000, "mainrom", 0 ) + ROM_LOAD( "sup400.bin", 0x00000, 0x1000000, CRC(56ea270d) SHA1(0949ed9d2aacfaa46f7399fda6d4d29e903cbe61) ) +ROM_END + ROM_START( gprnrs1 ) ROM_REGION( 0x800000, "mainrom", 0 ) ROM_LOAD( "gprnrs1.bin", 0x00000, 0x800000, CRC(c3ffcec8) SHA1(313a790fb51d0b155257f9de84726ed67da43a8f) ) @@ -609,7 +614,9 @@ CONS( 201?, mc_hh210, 0, 0, nes_vt42xx_16mb, nes_vt42xx, nes_vt42xx_state, emp CONS( 201?, retro400, 0, 0, nes_vt42xx_16mb, nes_vt42xx, nes_vt42xx_state, empty_init, "", "Retro FC 400-in-1", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) -CONS( 2019, gbox2019, 0, 0, nes_vt42xx_16mb, nes_vt42xx, nes_vt42xx_state, empty_init, "Sup", "Game Box 400 in 1 (2019 PCB)", MACHINE_NOT_WORKING ) +CONS( 2019, gbox2019, 0, 0, nes_vt42xx_16mb, nes_vt42xx, nes_vt42xx_state, empty_init, "Sup", "Game Box 400 in 1 (2019 PCB)", MACHINE_NOT_WORKING ) +// ZY003-V8.9 090322 on PCB +CONS( 2022, gbox2022, gbox2019, 0, nes_vt42xx_16mb, nes_vt42xx, nes_vt42xx_state, empty_init, "Sup", "Game Box 400 in 1 (2022 PCB)", MACHINE_NOT_WORKING ) CONS( 200?, gprnrs1, 0, 0, nes_vt42xx_8mb, nes_vt42xx, nes_vt42xx_state, empty_init, "", "Game Prince RS-1", MACHINE_IMPERFECT_GRAPHICS ) CONS( 200?, gprnrs16, 0, 0, nes_vt42xx_gprnrs16_2x16mb, nes_vt42xx, nes_vt42xx_bitboy_state, empty_init, "", "Game Prince RS-16", MACHINE_IMPERFECT_GRAPHICS ) From 335edf669dce73761aeb9399867271d0861cc99d Mon Sep 17 00:00:00 2001 From: David Haywood Date: Mon, 17 Nov 2025 12:18:34 +0000 Subject: [PATCH 02/15] added S5 Game Box (520-in-1) --- src/mame/mame.lst | 1 + src/mame/nintendo/nes_vt369_vtunknown.cpp | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 73877701490c9..cdbe8eb0a5fa1 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -35890,6 +35890,7 @@ rtvgc300fz rtvgc300pj s10_520 s10fake +s5_520 sealvt supr200 sy888b diff --git a/src/mame/nintendo/nes_vt369_vtunknown.cpp b/src/mame/nintendo/nes_vt369_vtunknown.cpp index 1ec984237e703..b1877e6ba4bec 100644 --- a/src/mame/nintendo/nes_vt369_vtunknown.cpp +++ b/src/mame/nintendo/nes_vt369_vtunknown.cpp @@ -1203,6 +1203,11 @@ ROM_START( s10_520 ) ROM_FILL( 0x07f3d9, 1, 0x64 ) // bug in init code? how does this work on hardware ROM_END +ROM_START( s5_520 ) + ROM_REGION( 0x1000000, "mainrom", 0 ) + ROM_LOAD( "s5_520_gamebox.u4", 0x00000, 0x1000000, CRC(19a7608e) SHA1(e2560752be0eda30cb935d601ee96a41215a277c) ) +ROM_END + ROM_START( f5_620 ) ROM_REGION( 0x1000000, "mainrom", 0 ) ROM_LOAD( "f5_620in1.u4", 0x00000, 0x1000000, CRC(e3ec27c8) SHA1(d377ccf9bdbe60f6d484360b4b13c3b132628676) ) @@ -1407,6 +1412,8 @@ CONS( 2018, goretrop, 0, 0, vt369_unk_32mb, vt369, vt36x_state, empty_init, CONS( 202?, s10fake, 0, 0, vt36x_s10swap_8mb, vt369, vt36x_state, init_s10fake, "", "S10 Handheld Game Console (520-in-1, fake entries)", MACHINE_NOT_WORKING ) // different version, same packaging. Larger ROM, fewer duplicates etc. CONS( 202?, s10_520, 0, 0, vt36x_gbox2020_16mb, vt369, vt36x_state, empty_init, "", "S10 Handheld Game Console (520-in-1)", MACHINE_NOT_WORKING ) +// similar to above, but no scramble? +CONS( 202?, s5_520, 0, 0, vt36x_16mb, vt369, vt36x_state, empty_init, "", "S5 Game Box (520-in-1)", MACHINE_NOT_WORKING ) // there were also 'F1' units, shaped like a car, ROM may or may not be the same CONS( 202?, f5_620, 0, 0, vt36x_16mb, vt369, vt36x_state, init_f5_620, "", "F5 Handheld Game Console (620-in-1)", MACHINE_NOT_WORKING ) From e5b66e784cc69e3d74891ad4861ce9256a45d429 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Mon, 17 Nov 2025 12:24:54 +0000 Subject: [PATCH 03/15] added a 500-in-1 version --- src/mame/mame.lst | 1 + src/mame/nintendo/nes_vt369_vtunknown.cpp | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index cdbe8eb0a5fa1..0d8e7a04dd79a 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -35814,6 +35814,7 @@ typo240 36pcase 168pcase 240in1ar +500in1hh a6plus d12power d9_500 diff --git a/src/mame/nintendo/nes_vt369_vtunknown.cpp b/src/mame/nintendo/nes_vt369_vtunknown.cpp index b1877e6ba4bec..2f9473147e75e 100644 --- a/src/mame/nintendo/nes_vt369_vtunknown.cpp +++ b/src/mame/nintendo/nes_vt369_vtunknown.cpp @@ -1208,6 +1208,11 @@ ROM_START( s5_520 ) ROM_LOAD( "s5_520_gamebox.u4", 0x00000, 0x1000000, CRC(19a7608e) SHA1(e2560752be0eda30cb935d601ee96a41215a277c) ) ROM_END +ROM_START( 500in1hh ) + ROM_REGION( 0x1000000, "mainrom", 0 ) + ROM_LOAD( "500in1.bin", 0x00000, 0x1000000, CRC(50f44c1a) SHA1(8ba3d2b71d0619b3ae45bcbcc6d58162f93b1069) ) +ROM_END + ROM_START( f5_620 ) ROM_REGION( 0x1000000, "mainrom", 0 ) ROM_LOAD( "f5_620in1.u4", 0x00000, 0x1000000, CRC(e3ec27c8) SHA1(d377ccf9bdbe60f6d484360b4b13c3b132628676) ) @@ -1414,6 +1419,8 @@ CONS( 202?, s10fake, 0, 0, vt36x_s10swap_8mb, vt369, vt36x_state, init_s10fa CONS( 202?, s10_520, 0, 0, vt36x_gbox2020_16mb, vt369, vt36x_state, empty_init, "", "S10 Handheld Game Console (520-in-1)", MACHINE_NOT_WORKING ) // similar to above, but no scramble? CONS( 202?, s5_520, 0, 0, vt36x_16mb, vt369, vt36x_state, empty_init, "", "S5 Game Box (520-in-1)", MACHINE_NOT_WORKING ) +// fewer games, but does have the scramble +CONS( 202?, 500in1hh, 0, 0, vt36x_gbox2020_16mb, vt369, vt36x_state, empty_init, "", "500-in-1 Handheld Game", MACHINE_NOT_WORKING ) // there were also 'F1' units, shaped like a car, ROM may or may not be the same CONS( 202?, f5_620, 0, 0, vt36x_16mb, vt369, vt36x_state, init_f5_620, "", "F5 Handheld Game Console (620-in-1)", MACHINE_NOT_WORKING ) From b6b1aa793af65151ba0eaec60e5ab4c5fa334d00 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Mon, 17 Nov 2025 12:51:02 +0000 Subject: [PATCH 04/15] added Retro FC 620-in-1 --- src/mame/mame.lst | 1 + src/mame/nintendo/nes_vt369_vtunknown.cpp | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 0d8e7a04dd79a..3aea20d71d4c8 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -35885,6 +35885,7 @@ pactin rbbrite rd5_240 red5mam +retro620 rtvgc300 rtvgc300cr rtvgc300fz diff --git a/src/mame/nintendo/nes_vt369_vtunknown.cpp b/src/mame/nintendo/nes_vt369_vtunknown.cpp index 2f9473147e75e..d2eb514006507 100644 --- a/src/mame/nintendo/nes_vt369_vtunknown.cpp +++ b/src/mame/nintendo/nes_vt369_vtunknown.cpp @@ -1061,6 +1061,11 @@ ROM_START( vibes240 ) ROM_IGNORE(0x100) ROM_END +ROM_START( retro620 ) + ROM_REGION( 0x1000000, "mainrom", 0 ) + ROM_LOAD( "620in1_retrofc.bin", 0x00000, 0x1000000, CRC(2698f4e5) SHA1(8b9551c22071c48a7ebc1635ca37ebe7a3b33c4b) ) // BGA on subboard +ROM_END + ROM_START( t3_630 ) ROM_REGION( 0x2000000, "mainrom", 0 ) ROM_LOAD( "s29gl128n10tfi01.bin", 0x00000, 0x1000000, CRC(7458a598) SHA1(cd35dda56c4531095c7026c88e02e35b1aae730a) ) @@ -1405,6 +1410,8 @@ CONS( 202?, t3_630, 0, 0, vt36x_vibesswap_16mb, vt369, vt36x_state, em CONS( 202?, zl383, 0, 0, vt36x_vibesswap_8mb, vt369, vt36x_state, empty_init, "", "ZL-383 400-in-1 Handheld Console", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) +CONS( 202?, retro620, 0, 0, vt36x_vibesswap_16mb, vt369, vt36x_state, empty_init, "", "Retro FC 620-in-1", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) + // has extra protection? CONS( 2018, rbbrite, 0, 0, vt369_unk_1mb, vt369, vt36x_state, empty_init, "Coleco", "Rainbow Brite (mini-arcade)", MACHINE_NOT_WORKING ) From 54058e51fa9ee82896e13c8d0b50e5cfdb61fd1c Mon Sep 17 00:00:00 2001 From: David Haywood Date: Mon, 17 Nov 2025 13:21:15 +0000 Subject: [PATCH 05/15] added 20 SEGA Master System & Game Gear Classics - Plug & Play on TV --- src/mame/mame.lst | 1 + src/mame/sega/sms_bootleg.cpp | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 3aea20d71d4c8..dee22383c7141 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -42026,6 +42026,7 @@ smspaln smssdisp @source:sega/sms_bootleg.cpp +atgsms smssgame smssgamea diff --git a/src/mame/sega/sms_bootleg.cpp b/src/mame/sega/sms_bootleg.cpp index e665e90b3115c..ecfb7980e80ca 100644 --- a/src/mame/sega/sms_bootleg.cpp +++ b/src/mame/sega/sms_bootleg.cpp @@ -520,8 +520,19 @@ ROM_START( smssgamea ) // ROM_FILL( 0x780000, 0x80000, 0xff) // ROM1 position not populated ROM_END +ROM_START( atgsms ) + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + + ROM_REGION( 0x400000, "game_data", ROMREGION_ERASEFF ) + ROM_LOAD( "atgames_sms.u5", 0x000000, 0x400000, CRC(bf23cd7d) SHA1(185b8af5afc14615733475e927555e3f6bd28770) ) +ROM_END + } // Anonymous namespace GAME( 199?, smssgame, 0, sms_supergame, sms_supergame, smsbootleg_state, init_sms_supergame, ROT0, "Sono Corp Japan", "Super Game (Sega Master System Multi-game bootleg, 01 Final Bubble Bobble)", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION ) GAME( 1990, smssgamea, smssgame, sms_supergame, sms_supergame, smsbootleg_a_state, init_sms_supergame, ROT0, "Seo Jin (TV-Tuning license)", "Super Game (Sega Master System Multi-game bootleg, 01 Tri Formation)", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION ) // for German market? + +// should probably go in its own driver +// this was dumped from a silver / purple unit with a 'time' logo on it, software seems to be generic AtGames though +GAME( 200?, atgsms, 0, sms_supergame, sms_supergame, smsbootleg_state, empty_init, ROT0, "AtGames / time", "20 SEGA Master System & Game Gear Classics - Plug & Play on TV", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION ) From 0ac5ae183417acc749bc8af06a30f1cdcfcd516f Mon Sep 17 00:00:00 2001 From: David Haywood Date: Mon, 17 Nov 2025 14:01:51 +0000 Subject: [PATCH 06/15] move this to correct place --- src/mame/mame.lst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index dee22383c7141..14a81ee3a5b99 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -35828,7 +35828,6 @@ egame150 f5_620 gb50_150 gbox2020 -gbox2022 gcs2mgp gon100 goretrop @@ -35917,6 +35916,7 @@ g6_666 g7_666 g9_666 gbox2019 +gbox2022 gprnrs1 gprnrs16 hhgc319 From 46e8fae9502f7e8d8d11f05f98a3244c2f47d4ea Mon Sep 17 00:00:00 2001 From: David Haywood Date: Wed, 19 Nov 2025 23:49:29 +0000 Subject: [PATCH 07/15] added XaviX Golf --- src/mame/mame.lst | 1 + src/mame/tvgames/xavix_2002.cpp | 12 ++++++++++++ src/mame/tvgames/xavix_v.cpp | 15 ++++++++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 14a81ee3a5b99..cb7a925e6f042 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -47800,6 +47800,7 @@ xavbowl xavbowlj xavbox xavcheck +xavgolf xavjmat xavmusic xavpkjr diff --git a/src/mame/tvgames/xavix_2002.cpp b/src/mame/tvgames/xavix_2002.cpp index 84c2cc4d74478..5b045d91edd6b 100644 --- a/src/mame/tvgames/xavix_2002.cpp +++ b/src/mame/tvgames/xavix_2002.cpp @@ -703,6 +703,17 @@ ROM_START( xavbaseb ) ROM_LOAD( "xpbaseball.bin", 0x000000, 0x800000, CRC(e9ed692d) SHA1(537e390e972156dc7da66ee127ae4c8052038ee5) ) ROM_END +ROM_START( xavgolf ) + ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 ) + ROM_LOAD( "pglfa.u5", 0x000000, 0x800000, CRC(781399d6) SHA1(4797a978f00fc10a34a79a9a09a8355eb92283f2) ) + + ROM_REGION( 0x0800000, "extra", ROMREGION_ERASE00 ) + // this is a bit strange, it tries to use a bitmap mode with extra address bit set + // and expects the ROM to appear as if it were swapped + ROM_COPY( "bios", 0x400000, 0x000000, 0x400000 ) + ROM_COPY( "bios", 0x000000, 0x400000, 0x400000 ) +ROM_END + ROM_START( xavbowl ) ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 ) ROM_LOAD( "xpbowling.bin", 0x000000, 0x800000, CRC(2873460b) SHA1(ea8e2392f5a12961a23eb66dca8e07dec81ce8c8) ) @@ -1027,6 +1038,7 @@ void superxavix_doradraw_state::init_doradraw() CONS( 2004, xavtenni, 0, 0, superxavix_i2c_24c04, xavix_i2c, superxavix_i2c_state, init_xavix, "SSD Company LTD", "XaviX Tennis (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) CONS( 2004, xavbaseb, 0, 0, superxavix_i2c_24c08, xavix_i2c, superxavix_i2c_state, init_xavix, "SSD Company LTD", "XaviX Baseball (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +CONS( 2005, xavgolf, 0, 0, superxavix_i2c_24c08, xavix_i2c, superxavix_i2c_state, init_xavix, "SSD Company LTD", "XaviX Golf (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) CONS( 2004, xavbowl, 0, 0, superxavix_i2c_24c04, xavix_bowl, superxavix_i2c_bowl_state, init_xavix, "SSD Company LTD", "XaviX Bowling (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // has IR 'Camera' CONS( 2005, xavbowlj, xavbowl, 0, superxavix_i2c_24c04, xavix_bowl, superxavix_i2c_bowl_state, init_xavix, "SSD Company LTD", "XaviX Bowling (XaviXPORT, PT2-BWL-11, Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // ^^ CONS( 2004, xavbox, 0, 0, superxavix_i2c_jmat, xavix, superxavix_i2c_jmat_state, init_xavix, "SSD Company LTD", "XaviX Boxing (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // has IR 'Camera' diff --git a/src/mame/tvgames/xavix_v.cpp b/src/mame/tvgames/xavix_v.cpp index 73cfcc4aa0594..3a2d518e33979 100644 --- a/src/mame/tvgames/xavix_v.cpp +++ b/src/mame/tvgames/xavix_v.cpp @@ -1007,10 +1007,12 @@ void xavix_state::draw_sprites_line(screen_device &screen, bitmap_rgb32 &bitmap, // some games have the top bit set, why? m_spritereg &= 0x7f; - if ((m_spritereg == 0x00) || (m_spritereg == 0x01)) + if ((m_spritereg == 0x00) || (m_spritereg == 0x01) || (m_spritereg == 0x05)) { // 8-bit addressing (Tile Number) // 16-bit addressing (Tile Number) (rad_rh) + + // xavgolf uses 0x05, how does it differ? alt_addressing = 1; } else if (m_spritereg == 0x02) @@ -1436,8 +1438,19 @@ void superxavix_state::draw_bitmap_layer(screen_device &screen, bitmap_rgb32 &bi start, start * 0x800, step, size, unused); } + // xavgolf title is 308c (start) needs to be 188c + // xavgolf menu is 30fc (start) needs to be 18fc + + // xavbaseb xavix logo is 1500 + // title is 14e0 + + // 0x800 (offset multiplier) * 0x1000 = 0x800000 (24 bit address - usual xavix address space) + // 0x2000 being set implies address beyond 24-bit space = extended xavix modes + // anpanmdx title screen ends up with a seemingly incorrect value for start // when it does the scroller. There is presumably an opcode or math bug causing this. + // (although 0x7xxx has bits 0x2000 and 0x4000 set, pushing the addressing beyond even + // double the usual XaviX address space) //if (start >= 0x7700) /// start -= 0x3c00; From 072da571ad20ebede7eae3f091c3faa3799572b2 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Thu, 20 Nov 2025 00:24:32 +0000 Subject: [PATCH 08/15] definitely something odd happens when the higher bits are set here --- src/mame/tvgames/xavix_v.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/mame/tvgames/xavix_v.cpp b/src/mame/tvgames/xavix_v.cpp index 3a2d518e33979..755a24f63ee6f 100644 --- a/src/mame/tvgames/xavix_v.cpp +++ b/src/mame/tvgames/xavix_v.cpp @@ -1448,11 +1448,20 @@ void superxavix_state::draw_bitmap_layer(screen_device &screen, bitmap_rgb32 &bi // 0x2000 being set implies address beyond 24-bit space = extended xavix modes // anpanmdx title screen ends up with a seemingly incorrect value for start - // when it does the scroller. There is presumably an opcode or math bug causing this. - // (although 0x7xxx has bits 0x2000 and 0x4000 set, pushing the addressing beyond even - // double the usual XaviX address space) - //if (start >= 0x7700) - /// start -= 0x3c00; + // when it does the scroller. + // It has values of 0x7xxx which has bits 0x2000 and 0x4000 set, pushing the addressing beyond + // even double the usual XaviX address space) + // + // maybe addresses above 24-bit present the ROM data to the system in an unusual order + // (this might also apply to sprites) + if (m_extra) + { + if (start & 0x4000) + { + start &= 0x1fff; + start ^= 0xc00; + } + } int base = start * 0x800; int base2 = topadr * 0x8; From 32489cd19db0764aa365b4a6132112a029108f8f Mon Sep 17 00:00:00 2001 From: David Haywood Date: Thu, 20 Nov 2025 17:22:43 +0000 Subject: [PATCH 09/15] simplify some SuperXaviX code --- src/mame/tvgames/xavix.h | 5 ----- src/mame/tvgames/xavix_2002.cpp | 14 +++++++------- src/mame/tvgames/xavix_v.cpp | 27 ++++++++------------------- 3 files changed, 15 insertions(+), 31 deletions(-) diff --git a/src/mame/tvgames/xavix.h b/src/mame/tvgames/xavix.h index e67524c26cf5a..a338548a97aec 100644 --- a/src/mame/tvgames/xavix.h +++ b/src/mame/tvgames/xavix.h @@ -602,7 +602,6 @@ class superxavix_state : public xavix_state superxavix_state(const machine_config &mconfig, device_type type, const char *tag) : xavix_state(mconfig, type, tag) , m_xavix2002io(*this, "xavix2002io") - , m_allow_superxavix_extra_rom_sprites(true) , m_sx_crtc_1(*this, "sx_crtc_1") , m_sx_crtc_2(*this, "sx_crtc_2") , m_sx_plt_loc(*this, "sx_plt_loc") @@ -632,8 +631,6 @@ class superxavix_state : public xavix_state virtual void get_tile_pixel_dat(uint8_t &dat, int bpp) override; - bool m_allow_superxavix_extra_rom_sprites; // config does not need saving - uint8_t superxavix_read_extended_io0(offs_t offset, uint8_t mem_mask) { logerror("%s: superxavix_read_extended_io0 (mask %02x)\n", machine().describe_context(), mem_mask); return m_exio[0]->read(); } uint8_t superxavix_read_extended_io1(offs_t offset, uint8_t mem_mask) { logerror("%s: superxavix_read_extended_io1 (mask %02x)\n", machine().describe_context(), mem_mask); return m_exio[1]->read(); } uint8_t superxavix_read_extended_io2(offs_t offset, uint8_t mem_mask) { logerror("%s: superxavix_read_extended_io2 (mask %02x)\n", machine().describe_context(), mem_mask); return m_exio[2]->read(); } @@ -713,8 +710,6 @@ class superxavix_state : public xavix_state optional_region_ptr m_extra; required_ioport_array<3> m_exio; - - bool m_use_superxavix_extra; // does not need saving }; diff --git a/src/mame/tvgames/xavix_2002.cpp b/src/mame/tvgames/xavix_2002.cpp index 5b045d91edd6b..b5e864d00758a 100644 --- a/src/mame/tvgames/xavix_2002.cpp +++ b/src/mame/tvgames/xavix_2002.cpp @@ -704,14 +704,15 @@ ROM_START( xavbaseb ) ROM_END ROM_START( xavgolf ) - ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 ) + ROM_REGION( 0x800000, "temp", ROMREGION_ERASE00 ) ROM_LOAD( "pglfa.u5", 0x000000, 0x800000, CRC(781399d6) SHA1(4797a978f00fc10a34a79a9a09a8355eb92283f2) ) + // the glob seems to get split between the regular space, and the 'extra' space superxavix has + ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 ) + ROM_COPY( "temp", 0x000000, 0x000000, 0x400000 ) + ROM_REGION( 0x0800000, "extra", ROMREGION_ERASE00 ) - // this is a bit strange, it tries to use a bitmap mode with extra address bit set - // and expects the ROM to appear as if it were swapped - ROM_COPY( "bios", 0x400000, 0x000000, 0x400000 ) - ROM_COPY( "bios", 0x000000, 0x400000, 0x400000 ) + ROM_COPY( "temp", 0x400000, 0x000000, 0x400000 ) ROM_END ROM_START( xavbowl ) @@ -797,7 +798,7 @@ ROM_START( domfitex ) ROM_REGION( 0x0800000, "bios", ROMREGION_ERASE00 ) ROM_LOAD( "u2", 0x0000000, 0x0800000, CRC(841fe3cd) SHA1(8678b8a0c5198b24169a84dbe3ae979bb0838f23) ) - ROM_REGION( 0x0800000, "extra_u3", ROMREGION_ERASE00 ) + ROM_REGION( 0x0800000, "extra", ROMREGION_ERASE00 ) ROM_LOAD( "u3", 0x0000000, 0x0800000, CRC(1dc844ea) SHA1(c23da9006227f7fe4982998c17759d403a47472a) ) ROM_END @@ -1014,7 +1015,6 @@ void superxavix_i2c_jmat_state::init_xavmusic() init_xavix(); // is sprite yflip broken on (some?) revisions of SuperXaviX hardware, or is there a CPU bug causing this m_disable_sprite_yflip = true; - m_allow_superxavix_extra_rom_sprites = false; } void superxavix_piano_pc_state::init_piano_pc() diff --git a/src/mame/tvgames/xavix_v.cpp b/src/mame/tvgames/xavix_v.cpp index 755a24f63ee6f..9fb31cfbb3104 100644 --- a/src/mame/tvgames/xavix_v.cpp +++ b/src/mame/tvgames/xavix_v.cpp @@ -45,7 +45,11 @@ inline uint8_t superxavix_state::get_next_bit_sx() { if (m_tmp_databit == 0) { - m_bit = m_extra[m_tmp_dataaddress&0x7fffff]; + // the higher bit set when accessing video expands the address space + if ((m_tmp_dataaddress & 0x1000000) && m_extra) + m_bit = m_extra[m_tmp_dataaddress&0x7fffff]; + else + m_bit = read_full_data_sp_bypass(m_tmp_dataaddress); } uint8_t ret = m_bit >> m_tmp_databit; @@ -644,7 +648,6 @@ void xavix_state::draw_tilemap(screen_device &screen, bitmap_rgb32 &bitmap, cons void superxavix_state::draw_tilemap(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int which) { - m_use_superxavix_extra = false; xavix_state::draw_tilemap(screen, bitmap, cliprect, which); } @@ -992,11 +995,7 @@ void xavix_state::draw_sprites(screen_device &screen, bitmap_rgb32 &bitmap, cons void superxavix_state::draw_sprites(screen_device& screen, bitmap_rgb32& bitmap, const rectangle& cliprect) { - if (m_extra && m_allow_superxavix_extra_rom_sprites) - m_use_superxavix_extra = true; - xavix_state::draw_sprites(screen, bitmap, cliprect); - m_use_superxavix_extra = false; } @@ -1258,19 +1257,9 @@ void xavix_state::get_tile_pixel_dat(uint8_t &dat, int bpp) void superxavix_state::get_tile_pixel_dat(uint8_t &dat, int bpp) { - if (m_use_superxavix_extra) - { - for (int i = 0; i < bpp; i++) - { - dat |= (get_next_bit_sx() << i); - } - } - else + for (int i = 0; i < bpp; i++) { - for (int i = 0; i < bpp; i++) - { - dat |= (get_next_bit() << i); - } + dat |= (get_next_bit_sx() << i); } } @@ -1458,7 +1447,7 @@ void superxavix_state::draw_bitmap_layer(screen_device &screen, bitmap_rgb32 &bi { if (start & 0x4000) { - start &= 0x1fff; + start &= 0x3fff; start ^= 0xc00; } } From babba9e882166e932f0f27846f71426874ad4021 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Thu, 20 Nov 2025 19:56:46 +0000 Subject: [PATCH 10/15] account for the possibility of this being something global with superxavix --- src/mame/tvgames/xavix_v.cpp | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/src/mame/tvgames/xavix_v.cpp b/src/mame/tvgames/xavix_v.cpp index 9fb31cfbb3104..c32c68d20e729 100644 --- a/src/mame/tvgames/xavix_v.cpp +++ b/src/mame/tvgames/xavix_v.cpp @@ -45,11 +45,32 @@ inline uint8_t superxavix_state::get_next_bit_sx() { if (m_tmp_databit == 0) { + int address = m_tmp_dataaddress; + + // do the upper bits being set have some special meaning + // or have we missed some segment register use by the time we get here? + + // xavjmat (popira type game) ends up with this bit + // set in 24-bit sprite mode (mode 0x07) due to upper bit + // of sprites being set. + if (address & 0x4000000) + { + // ?? + } + + // anpanmdx has this set, this is an alternative to the + // code to detect it in draw_bitmap_layer + if (address & 0x2000000) + { + address &= 0x1ffffff; + address ^= 0x0600000; + } + // the higher bit set when accessing video expands the address space - if ((m_tmp_dataaddress & 0x1000000) && m_extra) - m_bit = m_extra[m_tmp_dataaddress&0x7fffff]; + if ((address & 0x1000000) && m_extra) + m_bit = m_extra[address&0x7fffff]; else - m_bit = read_full_data_sp_bypass(m_tmp_dataaddress); + m_bit = read_full_data_sp_bypass(address); } uint8_t ret = m_bit >> m_tmp_databit; @@ -1443,6 +1464,9 @@ void superxavix_state::draw_bitmap_layer(screen_device &screen, bitmap_rgb32 &bi // // maybe addresses above 24-bit present the ROM data to the system in an unusual order // (this might also apply to sprites) + + // we currently detect this in get_next_bit_sx instead + /* if (m_extra) { if (start & 0x4000) @@ -1451,6 +1475,7 @@ void superxavix_state::draw_bitmap_layer(screen_device &screen, bitmap_rgb32 &bi start ^= 0xc00; } } + */ int base = start * 0x800; int base2 = topadr * 0x8; From 063b22781b6e56c70693c39cfc87945afd6926b0 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Thu, 20 Nov 2025 20:13:02 +0000 Subject: [PATCH 11/15] added the Japanese Golf set --- src/mame/mame.lst | 1 + src/mame/tvgames/xavix_2002.cpp | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index cb7a925e6f042..f65d8b9feebd4 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -47801,6 +47801,7 @@ xavbowlj xavbox xavcheck xavgolf +xavgolfj xavjmat xavmusic xavpkjr diff --git a/src/mame/tvgames/xavix_2002.cpp b/src/mame/tvgames/xavix_2002.cpp index b5e864d00758a..576c4dc1e9721 100644 --- a/src/mame/tvgames/xavix_2002.cpp +++ b/src/mame/tvgames/xavix_2002.cpp @@ -715,6 +715,18 @@ ROM_START( xavgolf ) ROM_COPY( "temp", 0x400000, 0x000000, 0x400000 ) ROM_END +ROM_START( xavgolfj ) + ROM_REGION( 0x800000, "temp", ROMREGION_ERASE00 ) + ROM_LOAD( "pglfj.u5", 0x000000, 0x800000, CRC(d3f23cfd) SHA1(ce2d204e9abeb82a5793a613429ead009989ecd4) ) + + // the glob seems to get split between the regular space, and the 'extra' space superxavix has + ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 ) + ROM_COPY( "temp", 0x000000, 0x000000, 0x400000 ) + + ROM_REGION( 0x0800000, "extra", ROMREGION_ERASE00 ) + ROM_COPY( "temp", 0x400000, 0x000000, 0x400000 ) +ROM_END + ROM_START( xavbowl ) ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 ) ROM_LOAD( "xpbowling.bin", 0x000000, 0x800000, CRC(2873460b) SHA1(ea8e2392f5a12961a23eb66dca8e07dec81ce8c8) ) @@ -1039,6 +1051,7 @@ void superxavix_doradraw_state::init_doradraw() CONS( 2004, xavtenni, 0, 0, superxavix_i2c_24c04, xavix_i2c, superxavix_i2c_state, init_xavix, "SSD Company LTD", "XaviX Tennis (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) CONS( 2004, xavbaseb, 0, 0, superxavix_i2c_24c08, xavix_i2c, superxavix_i2c_state, init_xavix, "SSD Company LTD", "XaviX Baseball (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) CONS( 2005, xavgolf, 0, 0, superxavix_i2c_24c08, xavix_i2c, superxavix_i2c_state, init_xavix, "SSD Company LTD", "XaviX Golf (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +CONS( 2005, xavgolfj, xavgolf, 0, superxavix_i2c_24c08, xavix_i2c, superxavix_i2c_state, init_xavix, "SSD Company LTD", "XaviX Golf (XaviXPORT, Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) CONS( 2004, xavbowl, 0, 0, superxavix_i2c_24c04, xavix_bowl, superxavix_i2c_bowl_state, init_xavix, "SSD Company LTD", "XaviX Bowling (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // has IR 'Camera' CONS( 2005, xavbowlj, xavbowl, 0, superxavix_i2c_24c04, xavix_bowl, superxavix_i2c_bowl_state, init_xavix, "SSD Company LTD", "XaviX Bowling (XaviXPORT, PT2-BWL-11, Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // ^^ CONS( 2004, xavbox, 0, 0, superxavix_i2c_jmat, xavix, superxavix_i2c_jmat_state, init_xavix, "SSD Company LTD", "XaviX Boxing (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // has IR 'Camera' From 28beb1870a9c317ba01d3a6bfe48900905f63727 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Thu, 20 Nov 2025 23:06:03 +0000 Subject: [PATCH 12/15] xavjmat needs to read back the sprite mode --- src/mame/tvgames/xavix.cpp | 2 +- src/mame/tvgames/xavix.h | 2 ++ src/mame/tvgames/xavix_2002.cpp | 3 ++- src/mame/tvgames/xavix_v.cpp | 20 ++++++++++++-------- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/mame/tvgames/xavix.cpp b/src/mame/tvgames/xavix.cpp index 027d7f57673ca..128acc40c68f0 100644 --- a/src/mame/tvgames/xavix.cpp +++ b/src/mame/tvgames/xavix.cpp @@ -187,7 +187,7 @@ void xavix_state::xavix_lowbus_map(address_map &map) map(0x6fd0, 0x6fd7).rw(FUNC(xavix_state::tmap2_regs_r), FUNC(xavix_state::tmap2_regs_w)); // Sprite Registers - map(0x6fd8, 0x6fd8).w(FUNC(xavix_state::spriteregs_w)); + map(0x6fd8, 0x6fd8).rw(FUNC(xavix_state::spriteregs_r), FUNC(xavix_state::spriteregs_w)); // Sprite DMA map(0x6fe0, 0x6fe0).rw(FUNC(xavix_state::spritefragment_dma_status_r), FUNC(xavix_state::spritefragment_dma_trg_w)); // after writing to 6fe1/6fe2 and 6fe5/6fe6 rad_mtrk writes 0x43/0x44 here then polls on 0x40 (see function call at c273) write values are hardcoded, similar code at 18401 diff --git a/src/mame/tvgames/xavix.h b/src/mame/tvgames/xavix.h index a338548a97aec..d51d09dcd7b9c 100644 --- a/src/mame/tvgames/xavix.h +++ b/src/mame/tvgames/xavix.h @@ -410,6 +410,7 @@ class xavix_state : public driver_device uint8_t tmap1_regs_r(offs_t offset); uint8_t tmap2_regs_r(offs_t offset); + uint8_t spriteregs_r(void); void spriteregs_w(uint8_t data); uint8_t pal_ntsc_r(); @@ -577,6 +578,7 @@ class xavix_state : public driver_device bool m_disable_memory_bypass = false; bool m_disable_sprite_yflip = false; + bool m_disable_sprite_xflip = false; bool m_disable_tile_regs_flip = false; int m_video_hres_multiplier; }; diff --git a/src/mame/tvgames/xavix_2002.cpp b/src/mame/tvgames/xavix_2002.cpp index 576c4dc1e9721..232474bf41cb0 100644 --- a/src/mame/tvgames/xavix_2002.cpp +++ b/src/mame/tvgames/xavix_2002.cpp @@ -1025,8 +1025,9 @@ void superxavix_super_tv_pc_state::init_stvpc() void superxavix_i2c_jmat_state::init_xavmusic() { init_xavix(); - // is sprite yflip broken on (some?) revisions of SuperXaviX hardware, or is there a CPU bug causing this + // is sprite fliping broken on (some?) revisions of SuperXaviX hardware, or is there a CPU bug causing this m_disable_sprite_yflip = true; + m_disable_sprite_xflip = true; } void superxavix_piano_pc_state::init_piano_pc() diff --git a/src/mame/tvgames/xavix_v.cpp b/src/mame/tvgames/xavix_v.cpp index c32c68d20e729..f35a8274233cd 100644 --- a/src/mame/tvgames/xavix_v.cpp +++ b/src/mame/tvgames/xavix_v.cpp @@ -50,14 +50,6 @@ inline uint8_t superxavix_state::get_next_bit_sx() // do the upper bits being set have some special meaning // or have we missed some segment register use by the time we get here? - // xavjmat (popira type game) ends up with this bit - // set in 24-bit sprite mode (mode 0x07) due to upper bit - // of sprites being set. - if (address & 0x4000000) - { - // ?? - } - // anpanmdx has this set, this is an alternative to the // code to detect it in draw_bitmap_layer if (address & 0x2000000) @@ -1107,6 +1099,14 @@ void xavix_state::draw_sprites_line(screen_device &screen, bitmap_rgb32 &bitmap, if (m_disable_sprite_yflip) flipy = 0; + // many elements in xavmusic and xavjmat also require xflip to be disabled, maybe sprite flipping + // is broken on SuperXaviX? + // + // non-super games, such as Gururuin world, use sprite mode 4, and expect flipping to work + // while the SuperXaviX games use a mix of mode 4 and mode 7 and don't want it + if (m_disable_sprite_xflip) + flipx = 0; + int drawheight = 16; int drawwidth = 16; @@ -1719,6 +1719,10 @@ void xavix_state::tmap2_regs_w(offs_t offset, uint8_t data, uint8_t mem_mask) COMBINE_DATA(&m_tmap2_regs[offset]); } +uint8_t xavix_state::spriteregs_r(void) +{ + return m_spritereg; +} void xavix_state::spriteregs_w(uint8_t data) { From 66bf29dfa57d07d53fc73e1a393ca6b24be7b660 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Thu, 20 Nov 2025 23:08:38 +0000 Subject: [PATCH 13/15] swap order on jmat inputs --- src/mame/tvgames/xavix_2002.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/mame/tvgames/xavix_2002.cpp b/src/mame/tvgames/xavix_2002.cpp index 232474bf41cb0..ef7c993290e27 100644 --- a/src/mame/tvgames/xavix_2002.cpp +++ b/src/mame/tvgames/xavix_2002.cpp @@ -189,10 +189,10 @@ static INPUT_PORTS_START( xavix_jmat ) PORT_INCLUDE(xavix) PORT_MODIFY("IN0") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON4 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON3 ) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON3 ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON4 ) INPUT_PORTS_END From 220bb48cafc7ab34d7d14bf9366ed6327b5dd158 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Fri, 21 Nov 2025 00:12:38 +0000 Subject: [PATCH 14/15] a few superxavix ops needed for additions --- src/devices/cpu/m6502/oxavix2000.lst | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/devices/cpu/m6502/oxavix2000.lst b/src/devices/cpu/m6502/oxavix2000.lst index ec61ee4067a1c..f2e2b7a32f922 100644 --- a/src/devices/cpu/m6502/oxavix2000.lst +++ b/src/devices/cpu/m6502/oxavix2000.lst @@ -327,8 +327,10 @@ decpb_imp prefetch(); orapa_imp - fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state); read_pc(); + TMP = read_full_data(m_pa); + A |= TMP; + set_nz(A); prefetch(); andpa_imp @@ -339,8 +341,10 @@ andpa_imp prefetch(); eorpa_imp - fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state); read_pc(); + TMP = read_full_data(m_pa); + A ^= TMP; + set_nz(A); prefetch(); adcpa_imp @@ -366,18 +370,24 @@ sbcpa_imp prefetch(); orapb_imp - fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state); read_pc(); + TMP = read_full_data(m_pb); + A |= TMP; + set_nz(A); prefetch(); andpb_imp - fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state); read_pc(); + TMP = read_full_data(m_pb); + A &= TMP; + set_nz(A); prefetch(); eorpb_imp - fatalerror("unhandled opcode %02x%04x: %02x\n", m_codebank, PPC, inst_state); read_pc(); + TMP = read_full_data(m_pb); + A ^= TMP; + set_nz(A); prefetch(); adcpb_imp From e19194f3818d5dfc262b69569332206c64531ba4 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Fri, 21 Nov 2025 09:31:05 +0000 Subject: [PATCH 15/15] style fixes --- src/mame/tvgames/xavix.h | 2 +- src/mame/tvgames/xavix_v.cpp | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/mame/tvgames/xavix.h b/src/mame/tvgames/xavix.h index d51d09dcd7b9c..0e88265cf5dc6 100644 --- a/src/mame/tvgames/xavix.h +++ b/src/mame/tvgames/xavix.h @@ -410,7 +410,7 @@ class xavix_state : public driver_device uint8_t tmap1_regs_r(offs_t offset); uint8_t tmap2_regs_r(offs_t offset); - uint8_t spriteregs_r(void); + uint8_t spriteregs_r(); void spriteregs_w(uint8_t data); uint8_t pal_ntsc_r(); diff --git a/src/mame/tvgames/xavix_v.cpp b/src/mame/tvgames/xavix_v.cpp index f35a8274233cd..5dedca17dcd87 100644 --- a/src/mame/tvgames/xavix_v.cpp +++ b/src/mame/tvgames/xavix_v.cpp @@ -60,7 +60,7 @@ inline uint8_t superxavix_state::get_next_bit_sx() // the higher bit set when accessing video expands the address space if ((address & 0x1000000) && m_extra) - m_bit = m_extra[address&0x7fffff]; + m_bit = m_extra[address & 0x7fffff]; else m_bit = read_full_data_sp_bypass(address); } @@ -1719,8 +1719,10 @@ void xavix_state::tmap2_regs_w(offs_t offset, uint8_t data, uint8_t mem_mask) COMBINE_DATA(&m_tmap2_regs[offset]); } -uint8_t xavix_state::spriteregs_r(void) +uint8_t xavix_state::spriteregs_r() { + // xavjmat relies on being able to read this back or the sprite addresses + // in some of the stages get calculated incorrectly return m_spritereg; }