mirror of
https://github.com/holub/mame
synced 2025-07-02 00:29:37 +03:00
new machines marked as NOT WORKING - Play TV Ping Pong [Sean Riddle] (#3173)
* new machines marked as NOT WORKING - Play TV Ping Pong [Sean Riddle] The code on this one is much closer to Taito Nostalgia, seemingly only using the callfar / returnfar extended opcodes, this further makes me think that XaviX Tennis is a Super XaviX title instead. * some guesswork (nw) * it sure *looks* like the dma (nw)
This commit is contained in:
parent
065879af71
commit
37fa0f6d29
@ -68,12 +68,45 @@ public:
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
void xavix(machine_config &config);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(xavix_7900_w);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(xavix_7980_w);
|
||||
DECLARE_WRITE8_MEMBER(xavix_7981_w);
|
||||
DECLARE_WRITE8_MEMBER(xavix_7982_w);
|
||||
DECLARE_WRITE8_MEMBER(xavix_7983_w);
|
||||
DECLARE_WRITE8_MEMBER(xavix_7984_w);
|
||||
DECLARE_WRITE8_MEMBER(xavix_7985_w);
|
||||
DECLARE_WRITE8_MEMBER(xavix_7986_w);
|
||||
DECLARE_WRITE8_MEMBER(xavix_7987_w);
|
||||
DECLARE_READ8_MEMBER(xavix_7980_r);
|
||||
|
||||
|
||||
DECLARE_WRITE8_MEMBER(xavix_7ff9_w);
|
||||
DECLARE_WRITE8_MEMBER(xavix_7ffa_w);
|
||||
DECLARE_WRITE8_MEMBER(xavix_7ffb_w);
|
||||
DECLARE_WRITE8_MEMBER(xavix_7ffe_w);
|
||||
DECLARE_WRITE8_MEMBER(xavix_7fff_w);
|
||||
|
||||
|
||||
protected:
|
||||
// driver_device overrides
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
virtual void video_start() override;
|
||||
|
||||
private:
|
||||
uint8_t m_xavix_7981_data;
|
||||
uint8_t m_xavix_7982_data;
|
||||
uint8_t m_xavix_7983_data;
|
||||
|
||||
uint8_t m_xavix_7984_data;
|
||||
uint8_t m_xavix_7985_data;
|
||||
|
||||
uint8_t m_xavix_7986_data;
|
||||
uint8_t m_xavix_7987_data;
|
||||
|
||||
};
|
||||
|
||||
void xavix_state::video_start()
|
||||
@ -85,8 +118,182 @@ uint32_t xavix_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(xavix_state::xavix_7980_w)
|
||||
{
|
||||
logerror("%s: xavix_7980_w %02x (79xx unk trigger for 7981-7987?)\n", machine().describe_context(), data);
|
||||
|
||||
uint32_t source = (m_xavix_7983_data << 16) | (m_xavix_7982_data<<8) | m_xavix_7981_data;
|
||||
uint16_t dest = (m_xavix_7985_data<<8) | m_xavix_7984_data;
|
||||
uint16_t len = (m_xavix_7987_data<<8) | m_xavix_7986_data;
|
||||
|
||||
// TODO: don't do tag lookups here once satisfied this is correct
|
||||
const uint32_t rgnlen = memregion("bios")->bytes();
|
||||
uint8_t *rgn = memregion("bios")->base();
|
||||
|
||||
source &= rgnlen-1;
|
||||
logerror(" (possible DMA op SRC %08x DST %04x LEN %04x)\n", source, dest, len);
|
||||
|
||||
address_space& destspace = m_maincpu->space(AS_PROGRAM);
|
||||
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
uint8_t dat = rgn[(source + i) & (rgnlen-1)];
|
||||
destspace.write_byte(dest + i, dat);
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(xavix_state::xavix_7981_w)
|
||||
{
|
||||
logerror("%s: xavix_7981_w %02x (79xx unk triplet byte 1)\n", machine().describe_context(), data);
|
||||
m_xavix_7981_data = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(xavix_state::xavix_7982_w)
|
||||
{
|
||||
logerror("%s: xavix_7982_w %02x (79xx unk triplet byte 2)\n", machine().describe_context(), data);
|
||||
m_xavix_7982_data = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(xavix_state::xavix_7983_w)
|
||||
{
|
||||
logerror("%s: xavix_7983_w %02x (79xx unk triplet byte 3)\n", machine().describe_context(), data);
|
||||
m_xavix_7983_data = data;
|
||||
// this would mean Taito Nostalgia relies on mirroring tho, as it has the high bits set... so could just be wrong
|
||||
logerror(" (possible DMA ROM source of %02x%02x%02x)\n", m_xavix_7983_data, m_xavix_7982_data, m_xavix_7981_data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(xavix_state::xavix_7984_w)
|
||||
{
|
||||
logerror("%s: xavix_7984_w %02x (79xx unk pair 1 byte 1)\n", machine().describe_context(), data);
|
||||
m_xavix_7984_data = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(xavix_state::xavix_7985_w)
|
||||
{
|
||||
logerror("%s: xavix_7985_w %02x (79xx unk pair 1 byte 2)\n", machine().describe_context(), data);
|
||||
m_xavix_7985_data = data;
|
||||
|
||||
logerror(" (possible DMA dest of %02x%02x)\n", m_xavix_7985_data, m_xavix_7984_data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(xavix_state::xavix_7986_w)
|
||||
{
|
||||
logerror("%s: xavix_7986_w %02x (79xx unk pair 2 byte 1)\n", machine().describe_context(), data);
|
||||
m_xavix_7986_data = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(xavix_state::xavix_7987_w)
|
||||
{
|
||||
logerror("%s: xavix_7987_w %02x (79xx unk pair 2 byte 2)\n", machine().describe_context(), data);
|
||||
m_xavix_7987_data = data;
|
||||
|
||||
logerror(" (possible DMA len of %02x%02x)\n", m_xavix_7987_data, m_xavix_7986_data);
|
||||
}
|
||||
|
||||
READ8_MEMBER(xavix_state::xavix_7980_r)
|
||||
{
|
||||
logerror("%s: xavix_7980_r (79xx unk operation status?)\n", machine().describe_context());
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
|
||||
|
||||
WRITE8_MEMBER(xavix_state::xavix_7ff9_w)
|
||||
{
|
||||
logerror("%s: xavix_7ff9_w %02x (trigger for 7ffx region?)\n", machine().describe_context(), data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(xavix_state::xavix_7ffa_w)
|
||||
{
|
||||
logerror("%s: xavix_7ffa_w %02x (7ffx pair 1, byte 1?)\n", machine().describe_context(), data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(xavix_state::xavix_7ffb_w)
|
||||
{
|
||||
logerror("%s: xavix_7ffb_w %02x (7ffx pair 1, byte 2?)\n", machine().describe_context(), data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(xavix_state::xavix_7ffe_w)
|
||||
{
|
||||
logerror("%s: xavix_7ffe_w %02x (7ffx pair 2, byte 1?)\n", machine().describe_context(), data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(xavix_state::xavix_7fff_w)
|
||||
{
|
||||
logerror("%s: xavix_7fff_w %02x (7ffx pair 2, byte 2?)\n", machine().describe_context(), data);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(xavix_state::xavix_7900_w)
|
||||
{
|
||||
logerror("%s: xavix_7900_w %02x (---FIRST WRITE ON STARTUP---)\n", machine().describe_context(), data);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( xavix_map, AS_PROGRAM, 8, xavix_state )
|
||||
AM_RANGE(0x000000, 0x0001ff) AM_RAM
|
||||
AM_RANGE(0x000200, 0x003fff) AM_RAM // ends up jumping to code here? must be a DMA?
|
||||
|
||||
AM_RANGE(0x006200, 0x0062ff) AM_RAM // cleared to 0x80
|
||||
|
||||
AM_RANGE(0x006900, 0x006900) AM_WRITENOP // startup (taitons1)
|
||||
|
||||
AM_RANGE(0x006fc0, 0x006fc0) AM_WRITENOP // startup
|
||||
|
||||
AM_RANGE(0x006fd8, 0x006fd8) AM_WRITENOP // startup (taitons1)
|
||||
|
||||
AM_RANGE(0x006fe9, 0x006fe9) AM_WRITENOP // startup
|
||||
|
||||
AM_RANGE(0x006ff1, 0x006ff1) AM_WRITENOP // startup (taitons1)
|
||||
|
||||
AM_RANGE(0x006ff8, 0x006ff8) AM_READNOP AM_WRITENOP // startup
|
||||
|
||||
// taitons1 after 75f7/75f8
|
||||
//AM_RANGE(0x0075f6, 0x0075f6) AM_WRITE(xavix_75f6_w)
|
||||
// taitons1 written as a pair
|
||||
//AM_RANGE(0x0075f7, 0x0075f7) AM_WRITE(xavix_75f7_w)
|
||||
//AM_RANGE(0x0075f8, 0x0075f8) AM_WRITE(xavix_75f8_w)
|
||||
// taitons1 written after 75f6, then read
|
||||
//AM_RANGE(0x0075f9, 0x0075f9) AM_READWRITE(xavix_75f9_r, xavix_75f9_w)
|
||||
// taitons1 written other 75xx operations
|
||||
//AM_RANGE(0x0075ff, 0x0075ff) AM_WRITE(xavix_75ff_w)
|
||||
|
||||
AM_RANGE(0x007810, 0x007810) AM_WRITENOP // startup
|
||||
|
||||
AM_RANGE(0x007900, 0x007900) AM_WRITE(xavix_7900_w) // startup
|
||||
AM_RANGE(0x007902, 0x007902) AM_WRITENOP // startup
|
||||
|
||||
// possible trigger for below (written after the others) waits on status of bit 1 in a loop
|
||||
AM_RANGE(0x007980, 0x007980) AM_READWRITE(xavix_7980_r, xavix_7980_w)
|
||||
// seem to be a triplet?
|
||||
AM_RANGE(0x007981, 0x007981) AM_WRITE(xavix_7981_w)
|
||||
AM_RANGE(0x007982, 0x007982) AM_WRITE(xavix_7982_w)
|
||||
AM_RANGE(0x007983, 0x007983) AM_WRITE(xavix_7983_w)
|
||||
// seem to be a pair
|
||||
AM_RANGE(0x007984, 0x007984) AM_WRITE(xavix_7984_w)
|
||||
AM_RANGE(0x007985, 0x007985) AM_WRITE(xavix_7985_w)
|
||||
// seem to be a pair
|
||||
AM_RANGE(0x007986, 0x007986) AM_WRITE(xavix_7986_w)
|
||||
AM_RANGE(0x007987, 0x007987) AM_WRITE(xavix_7987_w)
|
||||
|
||||
AM_RANGE(0x007a00, 0x007a00) AM_READNOP // startup (taitons1)
|
||||
AM_RANGE(0x007a01, 0x007a01) AM_READNOP // startup (taitons1)
|
||||
|
||||
AM_RANGE(0x007a03, 0x007a03) AM_READNOP AM_WRITENOP // startup
|
||||
|
||||
// again possible trigger for below, written after them
|
||||
AM_RANGE(0x007ff9, 0x007ff9) AM_WRITE(xavix_7ff9_w)
|
||||
// also seems to be a pair
|
||||
AM_RANGE(0x007ffa, 0x007ffa) AM_WRITE(xavix_7ffa_w)
|
||||
AM_RANGE(0x007ffb, 0x007ffb) AM_WRITE(xavix_7ffb_w)
|
||||
|
||||
// also seems to be a pair
|
||||
AM_RANGE(0x007ffe, 0x007ffe) AM_WRITE(xavix_7ffe_w)
|
||||
AM_RANGE(0x007fff, 0x007fff) AM_WRITE(xavix_7fff_w)
|
||||
|
||||
AM_RANGE(0x008000, 0x1fffff) AM_ROM AM_REGION("bios", 0x008000)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -169,6 +376,15 @@ void xavix_state::machine_start()
|
||||
|
||||
void xavix_state::machine_reset()
|
||||
{
|
||||
m_xavix_7981_data = 0;
|
||||
m_xavix_7982_data = 0;
|
||||
m_xavix_7983_data = 0;
|
||||
|
||||
m_xavix_7984_data = 0;
|
||||
m_xavix_7985_data = 0;
|
||||
|
||||
m_xavix_7986_data = 0;
|
||||
m_xavix_7987_data = 0;
|
||||
}
|
||||
|
||||
|
||||
@ -209,6 +425,11 @@ ROM_START( taitons1 )
|
||||
ROM_LOAD( "taitonostalgia1.u3", 0x000000, 0x200000, CRC(25bd8c67) SHA1(a109cd2da6aa4596e3ca3abd1afce2d0001a473f) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( rad_ping )
|
||||
ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "pingpong.bin", 0x000000, 0x100000, CRC(629f7f47) SHA1(2bb19fd202f1e6c319d2f7d18adbfed8a7669235) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( xavtenni )
|
||||
ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "xavixtennis.bin", 0x000000, 0x800000, CRC(23a1d918) SHA1(2241c59e8ea8328013e55952ebf9060ea0a4675b) )
|
||||
@ -217,14 +438,23 @@ ROM_END
|
||||
/* The 'XaviXPORT' isn't a real console, more of a TV adapter, all the actual hardware (CPU including video hw, sound hw) is in the cartridges and controllers
|
||||
and can vary between games, see notes at top of driver.
|
||||
|
||||
XaviX Tennis should be a standard XaviX CPU, but at the very least makes significantly more use of custom opcodes than Taito Nostalgia 1 which only appears
|
||||
to use the call far / return far for extended memory space. It also seems to require some regular 6502 opcodes to be replaced with custom ones, yet Taito
|
||||
Nostalgia appears to use them in their normal form; either there's some kind of mode switch, or XaviX Tennis is a different CPU type.
|
||||
According to sources XaviX Tennis should be a standard XaviX CPU, but at the very least makes significantly more use of custom opcodes than Taito Nostalgia
|
||||
and Radica Ping Pong which only appears to use the call far / return far for extended memory space.
|
||||
|
||||
Furthermore it also seems to require some regular 6502 opcodes to be replaced with custom ones, yet the other games expect these to act normally. This
|
||||
leads me to believe that XaviX Tennis is more likely to be a Super XaviX title.
|
||||
|
||||
The CPU die on XaviX Tennis is internally marked as NEC 85054-611
|
||||
|
||||
*/
|
||||
CONS( 2004, xavtenni, 0, 0, xavix, xavix, xavix_state, 0, "SSD Company LTD", "XaviX Tennis (XaviXPORT)", MACHINE_IS_SKELETON )
|
||||
|
||||
// standalone TV games
|
||||
/* Standalone TV Games
|
||||
|
||||
These all have jumps to the 3xxx region, which appears to be RAM (or possibly a banked space?) hopefully it's just missing some kind of DMA transfer and
|
||||
isn't some additional internal ROM.
|
||||
|
||||
*/
|
||||
CONS( 2006, taitons1, 0, 0, xavix, xavix, xavix_state, 0, "Bandai / SSD Company LTD / Taito", "Let's! TV Play Classic - Taito Nostalgia 1", MACHINE_IS_SKELETON )
|
||||
|
||||
CONS( 2000, rad_ping, 0, 0, xavix, xavix, xavix_state, 0, "Radica / SSD Company LTD / Simmer Technology", "Play TV Ping Pong", MACHINE_IS_SKELETON ) // "Simmer Technology" is also known as "Hummer Technology Co., Ltd"
|
||||
|
@ -38919,6 +38919,7 @@ xsleenaj // TA-0019 (c) 1986
|
||||
@source:xavix.cpp
|
||||
taitons1 //
|
||||
xavtenni //
|
||||
rad_ping //
|
||||
|
||||
@source:xbox.cpp
|
||||
xbox //
|
||||
|
Loading…
Reference in New Issue
Block a user