Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/devices/video/ppu2c0x_vt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -589,7 +589,9 @@ void ppu_vt32_device::m_newvid_1d_w(u8 data) { logerror("%s: m_newvid_1d_w %02x\

void ppu_vt32_device::draw_background(u8 *line_priority)
{
if ((get_newvid_1c() == 0x2e) || (get_newvid_1c() == 0x0a))
// fingerd also uses 6d for the first song, which doesn't work with this code
// maybe changes how extended attribute is used?
if ((get_newvid_1c() == 0x2e) || (get_newvid_1c() == 0x0a) || (get_newvid_1c() == 0x6e))
{
// strange custom mode, feels more like a vt369 mode
// tiles use 16x16x8 packed data
Expand Down
6 changes: 6 additions & 0 deletions src/mame/mame.lst
Original file line number Diff line number Diff line change
Expand Up @@ -35786,6 +35786,7 @@ dgun2573a
dgunl3201
dgunl3202
fcpocket
fingerd
k10_2l
k10_5l
lxpcli
Expand Down Expand Up @@ -35817,6 +35818,7 @@ dgun2577
dgun2593
dvnimbus
egame150
f5_620
gb50_150
gbox2020
gcs2mgp
Expand Down Expand Up @@ -35879,6 +35881,7 @@ rtvgc300
rtvgc300cr
rtvgc300fz
rtvgc300pj
s10_520
s10fake
sealvt
supr200
Expand All @@ -35898,7 +35901,10 @@ zonefusn
bittboy
bl339
fapocket
g3_800
g5_500
g6_666
g7_666
g9_666
gbox2019
gprnrs1
Expand Down
9 changes: 8 additions & 1 deletion src/mame/nintendo/nes_vt32.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -476,6 +476,10 @@ ROM_START( tvkunio1 )
ROM_LOAD( "mx29lv160dt.u3", 0x00000, 0x200000, CRC(4f502bff) SHA1(5c91c46c8b3b837cf98a5519d71117164c23a721) )
ROM_END

ROM_START( fingerd )
ROM_REGION( 0x2000000, "mainrom", 0 )
ROM_LOAD( "s29gl256n11tai02.u2", 0x00000, 0x2000000, CRC(58829d3c) SHA1(fab3b9914ec61f289509344b2d3f8a8b2f5bb5ba) )
ROM_END

} // anonymous namespace

Expand Down Expand Up @@ -536,7 +540,10 @@ CONS( 2020, lxpcpp, 0, 0, nes_vt32_32mb, nes_vt32, nes_vt32_unk_state, empt
CONS( 201?, k10_5l, 0, 0, nes_vt32_16mb, nes_vt32, nes_vt32_unk_state, empty_init, "<unknown>", "Games Power 500-in-1 Ultra Thin Handheld Game (K10) (5 languages)", MACHINE_NOT_WORKING )
CONS( 201?, k10_2l, 0, 0, nes_vt32_16mb, nes_vt32, nes_vt32_unk_state, empty_init, "<unknown>", "Games Power 500-in-1 Ultra Thin Handheld Game (K10) (2 languages)", MACHINE_NOT_WORKING )

CONS( 2022, tvkunio1, 0, 0, nes_vt32_2mb, nes_vt32, nes_vt32_unk_state, empty_init, "Arc System Works", "Kunio-kun TV! Bikkuri Nekketsu Shin Kiroku! Harukanaru Kin Medal (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) // yellow unit

CONS( 202?, micac250, 0, 0, nes_vt32_16mb, nes_vt32, nes_vt32_unk_state, empty_init, "<unknown>", "Micro Arcade 250-in-1", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )

CONS( 2022, tvkunio1, 0, 0, nes_vt32_2mb, nes_vt32, nes_vt32_unk_state, empty_init, "Arc System Works", "Kunio-kun TV! Bikkuri Nekketsu Shin Kiroku! Harukanaru Kin Medal (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) // yellow unit
// title screen shows Finger Pump, box shows Finger Dancing
CONS( 201?, fingerd, 0, 0, nes_vt32_32mb, nes_vt32, nes_vt32_unk_state, empty_init, "Orb Gaming", "Finger Dancing", MACHINE_NOT_WORKING )

10 changes: 7 additions & 3 deletions src/mame/nintendo/nes_vt32_soc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -144,11 +144,15 @@ void nes_vt32_soc_device::vtfp_411e_encryption_state_w(u8 data)

if (data == 0x05)
{
downcast<rp2a03_vtscr&>(*m_maincpu).set_next_scramble(true);
downcast<rp2a03_vtscr&>(*m_maincpu).set_next_scramble(0xa1);
}
else if (data == 0x07)
{
downcast<rp2a03_vtscr&>(*m_maincpu).set_next_scramble(0x7e);
}
else if (data == 0x00)
{
downcast<rp2a03_vtscr&>(*m_maincpu).set_next_scramble(false);
downcast<rp2a03_vtscr&>(*m_maincpu).set_next_scramble(0x00);
}
else if (data == 0xc0)
{
Expand All @@ -170,7 +174,7 @@ void nes_vt32_soc_device::vtfp_411e_encryption_state_w(u8 data)

*/
m_ppu_chr_data_scramble = 1;
downcast<rp2a03_vtscr&>(*m_maincpu).set_next_scramble(false);
downcast<rp2a03_vtscr&>(*m_maincpu).set_next_scramble(0x00);
}
}

Expand Down
30 changes: 29 additions & 1 deletion src/mame/nintendo/nes_vt369_vtunknown.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ class vt369_state : public vt369_base_state
void init_lxcmcypp();
void init_dgun2572();
void init_s10fake();
void init_f5_620();

protected:
u8 vt_rom_banked_r(offs_t offset);
Expand Down Expand Up @@ -1196,6 +1197,16 @@ ROM_START( h12p1000 )
ROM_LOAD( "h12pro1000.u12", 0x00000, 0x2000000, CRC(b471cb79) SHA1(2324d82a6ae00537090fb534cdf4e4ac6a74ebaf) )
ROM_END

ROM_START( s10_520 )
ROM_REGION( 0x1000000, "mainrom", 0 )
ROM_LOAD( "s10_white_520.bin", 0x00000, 0x1000000, CRC(552ffddb) SHA1(6a1be8bead43eceb51e674499159e850d4c115be) )
ROM_FILL( 0x07f3d9, 1, 0x64 ) // bug in init code? how does this work on hardware
ROM_END

ROM_START( f5_620 )
ROM_REGION( 0x1000000, "mainrom", 0 )
ROM_LOAD( "f5_620in1.u4", 0x00000, 0x1000000, CRC(e3ec27c8) SHA1(d377ccf9bdbe60f6d484360b4b13c3b132628676) )
ROM_END

void vt369_state::init_lxcmcypp()
{
Expand Down Expand Up @@ -1226,13 +1237,25 @@ void vt369_state::init_dgun2572()
void vt369_state::init_s10fake()
{
uint8_t *romdata = memregion("mainrom")->base();
for (offs_t i = 0; i < 0x800000; i += 2)
int size = memregion("mainrom")->bytes();
for (offs_t i = 0; i < size; i += 2)
{
uint16_t w = get_u16le(&romdata[i]);
put_u16le(&romdata[i], (w & 0xf9f9) | (w & 0x0600) >> 8 | (w & 0x0006) << 8);
}
}

void vt369_state::init_f5_620()
{
uint8_t *romdata = memregion("mainrom")->base();
int size = memregion("mainrom")->bytes();
for (offs_t i = 0; i < size; i += 2)
{
uint16_t w = get_u16le(&romdata[i]);
put_u16le(&romdata[i], (w & 0xfbfb) | (w & 0x0400) >> 8 | (w & 0x0004) << 8);
}
}

} // anonymous namespace


Expand Down Expand Up @@ -1382,6 +1405,11 @@ CONS( 2018, goretrop, 0, 0, vt369_unk_32mb, vt369, vt36x_state, empty_init,
// unused routines suggest this was originally developed for nes_vt42xx.cpp hardware (cf. g9_666, g5_500 with the same bitswap)
// there are other S10 units available
CONS( 202?, s10fake, 0, 0, vt36x_s10swap_8mb, vt369, vt36x_state, init_s10fake, "<unknown>", "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, "<unknown>", "S10 Handheld Game Console (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, "<unknown>", "F5 Handheld Game Console (620-in-1)", MACHINE_NOT_WORKING )

// banking(?) issues, some games don't boot (writes data to ALU mirror, then some other ports)
CONS( 202?, h12p1000, 0, 0, vt36x, vt369, vt36x_state, empty_init, "<unknown>", "H12 Pro 1000 in 1 Handheld Game Console", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )
Expand Down
33 changes: 25 additions & 8 deletions src/mame/nintendo/nes_vt42xx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -420,14 +420,24 @@ ROM_START( rfcp168 )
ROM_LOAD( "winbond_w29gl128c.bin", 0x00000, 0x1000000, CRC(d11caf71) SHA1(64b269cee30a51549a2d0491bbeed07751771559) ) // ROM verified on 2 units
ROM_END

ROM_START( g9_666 )
ROM_START( g5_500 )
ROM_REGION( 0x1000000, "mainrom", 0 )
ROM_LOAD( "666in1.u1", 0x00000, 0x1000000, CRC(e3a98465) SHA1(dfec3e74e36aef9bfa57ec530c37642015569dc5) )
ROM_LOAD( "s29gl128.u1", 0x00000, 0x1000000, CRC(de779dd7) SHA1(ac6d3fa6f18ceb795532ba9e85edffc040d74347) )
ROM_END

ROM_START( g5_500 )
ROM_START( g6_666 )
ROM_REGION( 0x1000000, "mainrom", 0 )
ROM_LOAD( "s29gl128.u1", 0x00000, 0x1000000, CRC(de779dd7) SHA1(ac6d3fa6f18ceb795532ba9e85edffc040d74347) )
ROM_LOAD( "g6_666.bin", 0x00000, 0x1000000, CRC(0f443cbe) SHA1(25c4d59e65b05f1255f18c802d72e4cf308ba49b) )
ROM_END

ROM_START( g7_666 )
ROM_REGION( 0x1000000, "mainrom", 0 )
ROM_LOAD( "g7_666.u1", 0x00000, 0x1000000, CRC(d2bbc3ab) SHA1(19d3326c30b048dd8483f6336656e0301b5aec8a) )
ROM_END

ROM_START( g9_666 )
ROM_REGION( 0x1000000, "mainrom", 0 )
ROM_LOAD( "666in1.u1", 0x00000, 0x1000000, CRC(e3a98465) SHA1(dfec3e74e36aef9bfa57ec530c37642015569dc5) )
ROM_END

ROM_START( hhgc319 )
Expand Down Expand Up @@ -504,7 +514,10 @@ ROM_START( wol260 )
ROM_LOAD( "js28f256m29ewh.u1", 0x00000, 0x2000000, CRC(ccb08b50) SHA1(089335c001085cfae94db6ea39e31388674581ed) )
ROM_END


ROM_START( g3_800 )
ROM_REGION( 0x4000000, "mainrom", 0 )
ROM_LOAD( "g3_800in1.bin", 0x00000, 0x4000000, CRC(df326924) SHA1(38c26ea96fbf3ba80526072d07209f19b04812e9) )
ROM_END

void nes_vt42xx_state::init_rfcp168()
{
Expand Down Expand Up @@ -571,11 +584,15 @@ void nes_vt42xx_state::init_bl339()

CONS( 201?, rfcp168, 0, 0, nes_vt42xx_16mb, nes_vt42xx, nes_vt42xx_state, init_rfcp168, "<unknown>", "Retro FC Plus 168 in 1 Handheld", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) // "RETRO_FC_V3.5"

// many duplicates, real game count to be confirmed, graphical issues in some games
CONS( 202?, g9_666, 0, 0, nes_vt42xx_16mb, nes_vt42xx, nes_vt42xx_state, init_g9_666, "<unknown>", "G9 Game Box 666 Games", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )

// same bitswap as above
// these share the same bitswap, many duplicates, real game counts to be confirmed, graphical issues in some games
CONS( 201?, g5_500, 0, 0, nes_vt42xx_16mb, nes_vt42xx, nes_vt42xx_state, init_g9_666, "<unknown>", "G5 500 in 1 Handheld", MACHINE_NOT_WORKING )
CONS( 201?, g6_666, 0, 0, nes_vt42xx_16mb, nes_vt42xx, nes_vt42xx_state, init_g9_666, "<unknown>", "G6 666 in 1 Handheld", MACHINE_NOT_WORKING )
CONS( 201?, g7_666, 0, 0, nes_vt42xx_16mb, nes_vt42xx, nes_vt42xx_state, init_g9_666, "<unknown>", "G7 666 in 1 Handheld", MACHINE_NOT_WORKING )
CONS( 202?, g9_666, 0, 0, nes_vt42xx_16mb, nes_vt42xx, nes_vt42xx_state, init_g9_666, "<unknown>", "G9 Game Box 666 Games", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )

// 64Mbytes, same banking as fapocket, but no fake cart switch / port
CONS( 202?, g3_800, 0, 0, nes_vt42xx_fa, nes_vt42xx, nes_vt42xx_fapocket_state, empty_init, "<unknown>", "G3 800 in 1 Handheld", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )

// highly scrambled
CONS( 201?, hhgc319, 0, 0, nes_vt42xx_16mb, nes_vt42xx, nes_vt42xx_state, init_hhgc319, "<unknown>", "Handheld Game Console 319-in-1", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS )
Expand Down
10 changes: 5 additions & 5 deletions src/mame/nintendo/rp2a03_vtscr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,16 @@ rp2a03_vtscr::rp2a03_vtscr(const machine_config &mconfig, const char *tag, devic
void rp2a03_vtscr::device_start()
{
mintf = std::make_unique<mi_decrypt>();
set_scramble(false);
set_scramble(0x00);
init();
}

void rp2a03_vtscr::set_next_scramble(bool scr)
void rp2a03_vtscr::set_next_scramble(uint8_t scr)
{
downcast<mi_decrypt &>(*mintf).m_next_scramble = scr;
}

void rp2a03_vtscr::set_scramble(bool scr)
void rp2a03_vtscr::set_scramble(uint8_t scr)
{
downcast<mi_decrypt &>(*mintf).m_next_scramble = scr;
downcast<mi_decrypt &>(*mintf).m_scramble_en = scr;
Expand All @@ -43,7 +43,7 @@ void rp2a03_vtscr::set_scramble(bool scr)

void rp2a03_vtscr::device_reset()
{
set_scramble(false);
set_scramble(0x00);
rp2a03_core_device::device_reset();
}

Expand All @@ -69,7 +69,7 @@ uint8_t rp2a03_vtscr::mi_decrypt::read_sync(uint16_t adr)

uint8_t rp2a03_vtscr::mi_decrypt::descramble(uint8_t op)
{
return op ^ 0xa1;
return op ^ m_scramble_en;
}

std::unique_ptr<util::disasm_interface> rp2a03_vtscr::create_disassembler()
Expand Down
8 changes: 4 additions & 4 deletions src/mame/nintendo/rp2a03_vtscr.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,15 @@ class rp2a03_vtscr : public rp2a03_core_device {
public:
rp2a03_vtscr(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);

void set_next_scramble(bool scr);
void set_scramble(bool scr);
void set_next_scramble(uint8_t scr);
void set_scramble(uint8_t scr);

protected:
class mi_decrypt : public mi_default {
public:

bool m_scramble_en = false;
bool m_next_scramble = false;
uint8_t m_scramble_en = 0x00;
uint8_t m_next_scramble = 0x00;

virtual ~mi_decrypt() {}
virtual uint8_t read_sync(uint16_t adr) override;
Expand Down
Loading