New working clone added

____________________
Missile Attack [f205v]

Also made mcombat, mcombata and mcombats boot. They still need inputs, sound (AY8912).
This commit is contained in:
Ivan Vangelista 2017-02-03 18:29:41 +01:00
parent 02ebd24bcd
commit 9959ce8bf9
2 changed files with 194 additions and 17 deletions

View File

@ -353,7 +353,7 @@ Super Missile Attack Board Layout
#include "cpu/m6502/m6502.h"
#include "machine/watchdog.h"
#include "sound/pokey.h"
#include "sound/ay8910.h"
class missile_state : public driver_device
{
@ -379,7 +379,7 @@ public:
required_device<m6502_device> m_maincpu;
required_shared_ptr<uint8_t> m_videoram;
required_device<watchdog_timer_device> m_watchdog;
required_device<pokey_device> m_pokey;
optional_device<pokey_device> m_pokey;
required_ioport m_in0;
required_ioport m_in1;
required_ioport m_r10;
@ -402,6 +402,8 @@ public:
DECLARE_WRITE8_MEMBER(missile_w);
DECLARE_READ8_MEMBER(missile_r);
DECLARE_WRITE8_MEMBER(bootleg_w);
DECLARE_READ8_MEMBER(bootleg_r);
DECLARE_CUSTOM_INPUT_MEMBER(get_vblank);
DECLARE_DRIVER_INIT(missilem);
DECLARE_DRIVER_INIT(suprmatk);
@ -705,8 +707,6 @@ uint32_t missile_state::screen_update_missile(screen_device &screen, bitmap_ind1
WRITE8_MEMBER(missile_state::missile_w)
{
uint8_t *videoram = m_videoram;
/* if this is a MADSEL cycle, write to video RAM */
if (get_madsel())
{
@ -719,12 +719,13 @@ WRITE8_MEMBER(missile_state::missile_w)
/* RAM */
if (offset < 0x4000)
videoram[offset] = data;
m_videoram[offset] = data;
/* POKEY */
else if (offset < 0x4800)
{
m_pokey->write(m_maincpu->space(), offset, data, 0xff);
if (m_pokey.found())
m_pokey->write(space, offset, data, 0xff);
}
/* OUT0 */
@ -765,7 +766,6 @@ WRITE8_MEMBER(missile_state::missile_w)
READ8_MEMBER(missile_state::missile_r)
{
uint8_t *videoram = m_videoram;
uint8_t result = 0xff;
/* if this is a MADSEL cycle, read from video RAM */
@ -777,7 +777,7 @@ READ8_MEMBER(missile_state::missile_r)
/* RAM */
if (offset < 0x4000)
result = videoram[offset];
result = m_videoram[offset];
/* ROM */
else if (offset >= 0x5000)
@ -785,7 +785,10 @@ READ8_MEMBER(missile_state::missile_r)
/* POKEY */
else if (offset < 0x4800)
result = m_pokey->read(m_maincpu->space(), offset & 0x0f, 0xff);
{
if (m_pokey.found())
result = m_pokey->read(space, offset & 0x0f, 0xff);
}
/* IN0 */
else if (offset < 0x4900)
@ -822,6 +825,112 @@ READ8_MEMBER(missile_state::missile_r)
}
WRITE8_MEMBER(missile_state::bootleg_w)
{
/* if this is a MADSEL cycle, write to video RAM */
if (get_madsel())
{
write_vram(space, offset, data);
return;
}
/* otherwise, strip A15 and handle manually */
offset &= 0x7fff;
/* RAM */
if (offset < 0x4000)
m_videoram[offset] = data;
/* OUT0 */
else if (offset >= 0x4800 && offset < 0x4900)
{
m_flipscreen = ~data & 0x40;
machine().bookkeeping().coin_counter_w(0, data & 0x20);
machine().bookkeeping().coin_counter_w(1, data & 0x10);
machine().bookkeeping().coin_counter_w(2, data & 0x08);
output().set_led_value(1, ~data & 0x04);
output().set_led_value(0, ~data & 0x02);
m_ctrld = data & 1;
}
/* watchdog */
else if (offset >= 0x4900 && offset < 0x4a00)
m_watchdog->watchdog_reset();
/* color RAM */
else if (offset >= 0x4b00 && offset < 0x4c00)
m_palette->set_pen_color(offset & 7, pal1bit(~data >> 3), pal1bit(~data >> 2), pal1bit(~data >> 1));
/* interrupt ack */
else if (offset >= 0x4d00 && offset < 0x4e00)
{
if (m_irq_state)
{
m_maincpu->set_input_line(0, CLEAR_LINE);
m_irq_state = 0;
}
}
/* anything else */
else
logerror("%04X:Unknown write to %04X = %02X\n", space.device().safe_pc(), offset, data);
}
READ8_MEMBER(missile_state::bootleg_r)
{
uint8_t result = 0xff;
/* if this is a MADSEL cycle, read from video RAM */
if (get_madsel())
return read_vram(space, offset);
/* otherwise, strip A15 and handle manually */
offset &= 0x7fff;
/* RAM */
if (offset < 0x4000)
result = m_videoram[offset];
/* ROM */
else if (offset >= 0x5000)
result = m_mainrom[offset];
/* IN0 */
else if (offset >= 0x4800 && offset < 0x4900) // doesn't seem ok
{
if (m_ctrld) /* trackball */
{
if (!m_flipscreen)
result = ((m_track0_y->read() << 4) & 0xf0) | (m_track0_x->read() & 0x0f);
else
result = ((m_track1_y->read() << 4) & 0xf0) | (m_track1_x->read() & 0x0f);
}
else /* buttons */
result = m_in0->read();
}
/* IN1 */
else if (offset >= 0x4900 && offset < 0x4a00) // seems ok
result = m_in1->read();
/* IN2 */
else if (offset >= 0x4b00 && offset < 0x4c00) // seems ok
result = m_r10->read();
/* anything else */
else
logerror("%04X:Unknown read from %04X\n", space.device().safe_pc(), offset);
/* update the MADSEL state */
if (!m_irq_state && ((result & 0x1f) == 0x01) && m_maincpu->get_sync())
m_madsel_lastcycles = m_maincpu->total_cycles();
return result;
}
/*************************************
*
@ -834,7 +943,10 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, missile_state )
AM_RANGE(0x0000, 0xffff) AM_READWRITE(missile_r, missile_w) AM_SHARE("videoram")
ADDRESS_MAP_END
/* adjusted from the above to get the bootlegs to boot */
static ADDRESS_MAP_START( bootleg_main_map, AS_PROGRAM, 8, missile_state )
AM_RANGE(0x0000, 0xffff) AM_READWRITE(bootleg_r, bootleg_w) AM_SHARE("videoram")
ADDRESS_MAP_END
/*************************************
*
@ -924,6 +1036,14 @@ static INPUT_PORTS_START( missile )
INPUT_PORTS_END
static INPUT_PORTS_START( missileb )
PORT_INCLUDE(missile)
PORT_MODIFY("IN1")
PORT_SERVICE( 0x40, IP_ACTIVE_HIGH )
INPUT_PORTS_END
static INPUT_PORTS_START( suprmatk )
PORT_START("IN0") /* IN0 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
@ -1039,6 +1159,20 @@ static MACHINE_CONFIG_START( missile, missile_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( missilea, missile )
MCFG_DEVICE_REMOVE("pokey")
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( missileb, missilea )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(bootleg_main_map)
MCFG_SOUND_ADD("ay8912", AY8912, MASTER_CLOCK/8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
MACHINE_CONFIG_END
/*************************************
@ -1088,7 +1222,6 @@ ROM_START( missile1 )
ROM_LOAD( "035826-01.l6", 0x0000, 0x0020, CRC(86a22140) SHA1(2beebf7855e29849ada1823eae031fc98220bc43) )
ROM_END
ROM_START( suprmatk )
ROM_REGION( 0x9000, "maincpu", 0 ) /* ROM's located on the enhancement board */
ROM_LOAD( "035820-02.c1", 0x5000, 0x0800, CRC(7a62ce6a) SHA1(9a39978138dc28fdefe193bfae1b226391e471db) )
@ -1200,7 +1333,47 @@ ROM_START( mcombats ) /* bootleg (Sidam) @ $ */
ROM_LOAD( "mmi6331.6f", 0x0000, 0x0020, CRC(86a22140) SHA1(2beebf7855e29849ada1823eae031fc98220bc43) )
ROM_END
/*
CPUs
QTY Type clock position function
1x 6502 2B 8-bit Microprocessor - main
1x LM380 12B Audio Amplifier - sound
1x oscillator 10.000 6C
ROMs
QTY Type position status
2x F2708 10C, 10E dumped
6x MCM2716C 1-6 dumped
1x DM74S288N 6L dumped
RAMs
QTY Type position
8x TMS4116 4F,4H,4J,4K,4L,4M,4N,4P
1x 74S189N 7L
Others
1x 22x2 edge connector
1x trimmer (volume)(12E)
2x 8x2 switches DIP(8R,10R)
*/
ROM_START( missilea )
ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "1.1h", 0x5000, 0x0800, CRC(49d66ca1) SHA1(59e20a048ac76aff5843dc8253fe61cdb65f94fb) )
ROM_LOAD( "2.1j", 0x5800, 0x0800, CRC(8008918d) SHA1(a72ce8997ba66c0f51d94e4f2cb3cf2734612ac9) )
ROM_LOAD( "3.1k", 0x6000, 0x0800, CRC(b87c02f7) SHA1(748fa3aa2e7314407ded0d6c0fc24f9015c66c28) )
ROM_LOAD( "4.1l", 0x6800, 0x0800, CRC(33bc6f47) SHA1(5753fbfbcd65a4863f877cd3a07400bd61ffb8ce) )
ROM_LOAD( "5.1n", 0x7000, 0x0800, CRC(df8c58f4) SHA1(44a0cdb0e5222e14e3e91547c35e73b2cf2df174) )
ROM_LOAD( "6.1r", 0x7800, 0x0800, CRC(96a21c1f) SHA1(6e43ce8d53aa6d38cef920e7fa2e0683ce42cdb4) )
ROM_REGION( 0x800, "unknown", 0 )
ROM_LOAD( "2708.10c", 0x0000, 0x0400, CRC(9f6978c4) SHA1(34b356fddd86b8b73ee1415b3ad6b00dc4be60e2) )
ROM_LOAD( "2708.10e", 0x0400, 0x0400, CRC(90eb28c8) SHA1(c82bc0a00d9e54004b0210f95343c8d7dc1f2050) )
ROM_REGION( 0x0020, "proms", 0 )
ROM_LOAD( "dm74s288n.6l", 0x0000, 0x0020, CRC(86a22140) SHA1(2beebf7855e29849ada1823eae031fc98220bc43) )
ROM_END
/*************************************
@ -1316,8 +1489,11 @@ GAME( 1980, missile1, missile, missile, missile, driver_device, 0, ROT0,
GAME( 1981, suprmatk, missile, missile, suprmatk, missile_state, suprmatk, ROT0, "Atari / General Computer Corporation", "Super Missile Attack (for rev 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, suprmatkd,missile, missile, suprmatk, driver_device, 0, ROT0, "Atari / General Computer Corporation", "Super Missile Attack (not encrypted)", MACHINE_SUPPORTS_SAVE )
/* the bootlegs are on different hardware and don't work */
GAME( 1980, mcombat, missile, missile, missile, driver_device, 0, ROT0, "bootleg (Videotron)", "Missile Combat (Videotron bootleg, set 1)", MACHINE_NOT_WORKING )
GAME( 1980, mcombata, missile, missile, missile, driver_device, 0, ROT0, "bootleg (Videotron)", "Missile Combat (Videotron bootleg, set 2)", MACHINE_NOT_WORKING )
GAME( 1980, mcombats, missile, missile, missile, driver_device, 0, ROT0, "bootleg (Sidam)", "Missile Combat (Sidam bootleg)", MACHINE_NOT_WORKING )
GAME( 2005, missilem, missile, missile, missile, missile_state, missilem, ROT0, "hack (Braze Technologies)", "Missile Command Multigame", MACHINE_NOT_WORKING )
/* the following bootleg has extremely similar program ROMs to missile1, but has different unknown sound hardware and 2 more ROMs */
GAME( 1981, missilea, missile, missilea, missile, driver_device, 0, ROT0, "bootleg (Ugames)", "Missile Attack", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
/* the following bootlegs are on different hardware and don't work */
GAME( 1980, mcombat, missile, missileb, missileb, driver_device, 0, ROT0, "bootleg (Videotron)", "Missile Combat (Videotron bootleg, set 1)", MACHINE_NOT_WORKING )
GAME( 1980, mcombata, missile, missileb, missileb, driver_device, 0, ROT0, "bootleg (Videotron)", "Missile Combat (Videotron bootleg, set 2)", MACHINE_NOT_WORKING )
GAME( 1980, mcombats, missile, missileb, missileb, driver_device, 0, ROT0, "bootleg (Sidam)", "Missile Combat (Sidam bootleg)", MACHINE_NOT_WORKING )
GAME( 2005, missilem, missile, missilea, missileb, missile_state, missilem, ROT0, "hack (Braze Technologies)", "Missile Command Multigame", MACHINE_NOT_WORKING )

View File

@ -20472,6 +20472,7 @@ mcombats // bootleg
missile // 035820-035825 (c) 1980, 1 ROM update to rev 2 board
missile1 // 035820-035825 (c) 1980
missile2 // 035820-035825 (c) 1980
missilea // bootleg (Ugames)
missilem // hack
suprmatk // (c) 1980 + (c) 1981 Gencomp
suprmatkd // (c) 1980 + (c) 1981 Gencomp