mirror of
https://github.com/holub/mame
synced 2025-07-04 17:38:08 +03:00
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:
parent
02ebd24bcd
commit
9959ce8bf9
@ -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 )
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user