summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/emu/ioport.cpp2
-rw-r--r--src/mame/drivers/dlair.cpp72
-rw-r--r--src/mame/drivers/esh.cpp16
-rw-r--r--src/mame/drivers/lgp.cpp82
-rw-r--r--src/mame/drivers/metlfrzr.cpp5
-rw-r--r--src/mame/machine/raiden2cop.cpp27
6 files changed, 149 insertions, 55 deletions
diff --git a/src/emu/ioport.cpp b/src/emu/ioport.cpp
index e0e8e76015d..3e4ae3f71e4 100644
--- a/src/emu/ioport.cpp
+++ b/src/emu/ioport.cpp
@@ -616,7 +616,7 @@ const struct
{ INPUT_STRING_None, "None" },
};
-} // anonymous namespace
+} // TODO: anonymous namespace
std::uint8_t const inp_header::MAGIC[inp_header::OFFS_BASETIME - inp_header::OFFS_MAGIC] = { 'M', 'A', 'M', 'E', 'I', 'N', 'P', 0 };
diff --git a/src/mame/drivers/dlair.cpp b/src/mame/drivers/dlair.cpp
index 2969e3f15f4..fb7c981a6f1 100644
--- a/src/mame/drivers/dlair.cpp
+++ b/src/mame/drivers/dlair.cpp
@@ -361,8 +361,8 @@ static ADDRESS_MAP_START( dlus_map, AS_PROGRAM, 8, dlair_state )
AM_RANGE(0x0000, 0x9fff) AM_ROM
AM_RANGE(0xa000, 0xa7ff) AM_MIRROR(0x1800) AM_RAM
AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x1fc7) AM_DEVREAD("aysnd", ay8910_device, data_r)
- AM_RANGE(0xc008, 0xc008) AM_MIRROR(0x1fc7) AM_READ_PORT("CONTROLS")
- AM_RANGE(0xc010, 0xc010) AM_MIRROR(0x1fc7) AM_READ_PORT("SERVICE")
+ AM_RANGE(0xc008, 0xc008) AM_MIRROR(0x1fc7) AM_READ_PORT("P1")
+ AM_RANGE(0xc010, 0xc010) AM_MIRROR(0x1fc7) AM_READ_PORT("SYSTEM")
AM_RANGE(0xc020, 0xc020) AM_MIRROR(0x1fc7) AM_READ(laserdisc_r)
AM_RANGE(0xe000, 0xe000) AM_MIRROR(0x1fc7) AM_DEVWRITE("aysnd", ay8910_device, data_w)
AM_RANGE(0xe008, 0xe008) AM_MIRROR(0x1fc7) AM_WRITE(misc_w)
@@ -478,11 +478,11 @@ static INPUT_PORTS_START( dlair )
PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) )
// PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x03, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( Unused ) ) // TODO: kill me
PORT_DIPNAME( 0x04, 0x00, "Difficulty Mode" ) PORT_DIPLOCATION("A:3")
PORT_DIPSETTING( 0x04, "Mode 1" )
PORT_DIPSETTING( 0x00, "Mode 2" )
- PORT_DIPNAME( 0x08, 0x00, "Engineering mode" ) PORT_DIPLOCATION("A:4")
+ PORT_DIPNAME( 0x08, 0x00, "Engineering Mode" ) PORT_DIPLOCATION("A:4")
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x08, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x00, "2 Credits/Free play" ) PORT_DIPLOCATION("A:5")
@@ -524,7 +524,7 @@ static INPUT_PORTS_START( dlair )
PORT_DIPSETTING( 0x80, DEF_STR( Easy ) ) PORT_CONDITION("DSW1", 0x04, EQUALS, 0x04)
PORT_DIPSETTING( 0x90, DEF_STR( Easy ) ) PORT_CONDITION("DSW1", 0x04, EQUALS, 0x04)
- PORT_START("CONTROLS")
+ PORT_START("P1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
@@ -534,7 +534,7 @@ static INPUT_PORTS_START( dlair )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */
- PORT_START("SERVICE")
+ PORT_START("SYSTEM")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
@@ -627,7 +627,53 @@ static INPUT_PORTS_START( dleuro )
PORT_DIPSETTING( 0x90, DEF_STR( Easy ) ) PORT_CONDITION("DSW1", 0x04, EQUALS, 0x04)
INPUT_PORTS_END
+static INPUT_PORTS_START( spaceace )
+ PORT_INCLUDE(dlair)
+
+ PORT_MODIFY("DSW1")
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("A:1")
+ PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("A:2")
+ PORT_DIPSETTING( 0x00, "3" )
+ PORT_DIPSETTING( 0x02, "5" )
+ // TODO: manual claims following is "Difficulty Increase", which more or less is again rank ...
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("A:3")
+ PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) // 5 chapters without losing life
+ PORT_DIPSETTING( 0x04, DEF_STR( Hard ) ) // 3
+ PORT_DIPNAME( 0x08, 0x00, "Difficulty Rank Increase" ) PORT_DIPLOCATION("A:4")
+ PORT_DIPSETTING( 0x00, "Slow" )
+ PORT_DIPSETTING( 0x08, "Fast" )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("A:5")
+ PORT_DIPSETTING( 0x00, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x20, 0x00, "Demo Sounds Frequency" ) PORT_DIPLOCATION("A:6")
+ PORT_DIPSETTING( 0x00, "All the time" )
+ PORT_DIPSETTING( 0x20, "1 out of eight times" )
+ PORT_DIPUNUSED_DIPLOC( 0x40, IP_ACTIVE_HIGH, "A:7")
+ PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_HIGH, "A:8")
+
+ PORT_MODIFY("DSW2")
+ PORT_DIPNAME( 0x01, 0x01, "LD Player" ) PORT_DIPLOCATION("B:1")
+ PORT_DIPSETTING( 0x00, "LD-PR7820" )
+ PORT_DIPSETTING( 0x01, "LDV-1000" )
+ PORT_DIPUNUSED_DIPLOC( 0x02, IP_ACTIVE_HIGH, "B:2")
+ PORT_DIPUNUSED_DIPLOC( 0x04, IP_ACTIVE_HIGH, "B:3")
+ PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_HIGH, "B:4")
+ PORT_DIPNAME( 0x10, 0x00, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("B:5")
+ PORT_DIPSETTING( 0x00, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x20, 0x00, "Unlimited Lives" ) PORT_DIPLOCATION("B:6")
+ PORT_DIPSETTING( 0x00, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x40, 0x00, "Enable Frame Display" ) PORT_DIPLOCATION("B:7") // ?
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_SERVICE_DIPLOC( 0x80, IP_ACTIVE_HIGH, "B:8" ) // "Diagnostic Mode", plays the whole disc from start to finish, start buttons makes the disc go back one chapter. Setting this to off makes it to execute host CPU tests before proceeding to game.
+
+INPUT_PORTS_END
+// TODO: dips for Space Ace euro
/*************************************
*
@@ -905,7 +951,7 @@ ROM_START( spaceace ) /* revision A3 */
ROM_LOAD( "sa_a3_u5.bin", 0x8000, 0x2000, CRC(85cbcdc4) SHA1(97e01e96c885ab7af4c3a3b586eb40374d54f12f) )
DISK_REGION( "ld_ldv1000" )
- DISK_IMAGE_READONLY( "spaceace", 0, NO_DUMP )
+ DISK_IMAGE_READONLY( "space_ace_ver2", 0, SHA1(9ca7d4cba380b04a3277a9b706b35036622fe2fb) )
ROM_END
ROM_START( spaceacea2 ) /* revision A2 */
@@ -917,7 +963,7 @@ ROM_START( spaceacea2 ) /* revision A2 */
ROM_LOAD( "sa_a2_u5.bin", 0x8000, 0x2000, CRC(85cbcdc4) SHA1(97e01e96c885ab7af4c3a3b586eb40374d54f12f) )
DISK_REGION( "ld_ldv1000" )
- DISK_IMAGE_READONLY( "spaceace", 0, NO_DUMP )
+ DISK_IMAGE_READONLY( "space_ace_ver2", 0, SHA1(9ca7d4cba380b04a3277a9b706b35036622fe2fb) )
ROM_END
ROM_START( spaceacea ) /* revision A */
@@ -929,7 +975,7 @@ ROM_START( spaceacea ) /* revision A */
ROM_LOAD( "sa_a_u5.bin", 0x8000, 0x2000, CRC(85cbcdc4) SHA1(97e01e96c885ab7af4c3a3b586eb40374d54f12f) )
DISK_REGION( "ld_ldv1000" )
- DISK_IMAGE_READONLY( "spaceace", 0, NO_DUMP )
+ DISK_IMAGE_READONLY( "space_ace_ver2", 0, SHA1(9ca7d4cba380b04a3277a9b706b35036622fe2fb) )
ROM_END
ROM_START( spaceaceeuro ) /* Italian Sidam version */
@@ -989,7 +1035,7 @@ GAMEL( 1983, dleuro, dlair, dleuro, dleuro, dlair_state, fixed, R
GAMEL( 1983, dleuroalt,dlair, dleuro, dleuro, dlair_state, fixed, ROT0, "Cinematronics (Atari license)", "Dragon's Lair (European, alternate)", MACHINE_NOT_WORKING, layout_dlair )
GAMEL( 1983, dlital, dlair, dleuro, dleuro, dlair_state, fixed, ROT0, "Cinematronics (Sidam license?)","Dragon's Lair (Italian)", MACHINE_NOT_WORKING, layout_dlair )
-GAMEL( 1983, spaceace, 0, dlair_ldv1000, dlaire, dlair_state, variable, ROT0, "Cinematronics", "Space Ace (US Rev. A3)", MACHINE_NOT_WORKING, layout_dlair )
-GAMEL( 1983, spaceacea2, spaceace, dlair_ldv1000, dlaire, dlair_state, variable, ROT0, "Cinematronics", "Space Ace (US Rev. A2)", MACHINE_NOT_WORKING, layout_dlair )
-GAMEL( 1983, spaceacea, spaceace, dlair_ldv1000, dlaire, dlair_state, variable, ROT0, "Cinematronics", "Space Ace (US Rev. A)", MACHINE_NOT_WORKING, layout_dlair )
-GAMEL( 1983, spaceaceeuro, spaceace, dleuro, dleuro, dlair_state, fixed, ROT0, "Cinematronics (Atari license)", "Space Ace (European)", MACHINE_NOT_WORKING, layout_dlair )
+GAMEL( 1983, spaceace, 0, dlair_ldv1000, spaceace, dlair_state, variable, ROT0, "Cinematronics", "Space Ace (US Rev. A3)", MACHINE_NOT_WORKING, layout_dlair )
+GAMEL( 1983, spaceacea2, spaceace, dlair_ldv1000, spaceace, dlair_state, variable, ROT0, "Cinematronics", "Space Ace (US Rev. A2)", MACHINE_NOT_WORKING, layout_dlair )
+GAMEL( 1983, spaceacea, spaceace, dlair_ldv1000, spaceace, dlair_state, variable, ROT0, "Cinematronics", "Space Ace (US Rev. A)", MACHINE_NOT_WORKING, layout_dlair )
+GAMEL( 1983, spaceaceeuro, spaceace, dleuro, spaceace, dlair_state, fixed, ROT0, "Cinematronics (Atari license)", "Space Ace (European)", MACHINE_NOT_WORKING, layout_dlair )
diff --git a/src/mame/drivers/esh.cpp b/src/mame/drivers/esh.cpp
index d19f055ed02..65940aae7fa 100644
--- a/src/mame/drivers/esh.cpp
+++ b/src/mame/drivers/esh.cpp
@@ -295,6 +295,7 @@ PALETTE_INIT_MEMBER(esh_state, esh)
g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
/* blue component */
+ // TODO: actually opaque flag
if((color_prom[i+0x100] >> 7) & 1)
b = 0xff;
else
@@ -326,25 +327,10 @@ static GFXDECODE_START( esh )
GFXDECODE_ENTRY("gfx2", 0, esh_gfx_layout, 0x0, 0x20)
GFXDECODE_END
-#if 0
-void esh_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
-{
- switch (id)
- {
- case TIMER_IRQ_STOP:
- m_maincpu->set_input_line(0, CLEAR_LINE);
- break;
- default:
- assert_always(FALSE, "Unknown id in esh_state::device_timer");
- }
-}
-#endif
-
INTERRUPT_GEN_MEMBER(esh_state::vblank_callback_esh)
{
// IRQ
device.execute().set_input_line(0, HOLD_LINE);
- //timer_set(attotime::from_usec(50), TIMER_IRQ_STOP);
}
// TODO: 0xfe NMI enabled after writing to LD command port, NMI reads LD port.
diff --git a/src/mame/drivers/lgp.cpp b/src/mame/drivers/lgp.cpp
index aa1f18ff8b6..82fa4de476c 100644
--- a/src/mame/drivers/lgp.cpp
+++ b/src/mame/drivers/lgp.cpp
@@ -86,14 +86,14 @@ public:
required_device<pioneer_ldv1000_device> m_laserdisc;
required_shared_ptr<UINT8> m_tile_ram;
required_shared_ptr<UINT8> m_tile_control_ram;
- emu_timer *m_irq_timer;
DECLARE_READ8_MEMBER(ldp_read);
DECLARE_WRITE8_MEMBER(ldp_write);
DECLARE_DRIVER_INIT(lgp);
virtual void machine_start() override;
UINT32 screen_update_lgp(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(vblank_callback_lgp);
- TIMER_CALLBACK_MEMBER(irq_stop);
+ DECLARE_WRITE_LINE_MEMBER(ld_command_strobe_cb);
+ DECLARE_PALETTE_INIT(lgp);
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
@@ -160,7 +160,7 @@ static ADDRESS_MAP_START( main_program_map, AS_PROGRAM, 8, lgp_state )
// AM_RANGE(0xef00,0xef00) AM_READ_PORT("IN_TEST")
AM_RANGE(0xef80,0xef80) AM_READWRITE(ldp_read,ldp_write)
- AM_RANGE(0xefb8,0xefb8) AM_READ(ldp_read) /* Likely not right, calms it down though */
+ AM_RANGE(0xefb8,0xefb8) AM_READNOP // watchdog
AM_RANGE(0xefc0,0xefc0) AM_READ_PORT("DSWA") /* Not tested */
AM_RANGE(0xefc8,0xefc8) AM_READ_PORT("DSWB")
AM_RANGE(0xefd0,0xefd0) AM_READ_PORT("DSWC")
@@ -341,27 +341,59 @@ static GFXDECODE_START( lgp )
GFXDECODE_ENTRY("gfx4", 0, lgp_gfx_layout_16x32, 0x0, 0x100)
GFXDECODE_END
-TIMER_CALLBACK_MEMBER(lgp_state::irq_stop)
-{
- m_maincpu->set_input_line(0, CLEAR_LINE);
-}
-
INTERRUPT_GEN_MEMBER(lgp_state::vblank_callback_lgp)
{
// NMI
//device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
// IRQ
- device.execute().set_input_line(0, ASSERT_LINE);
- m_irq_timer->adjust(attotime::from_usec(50));
+ device.execute().set_input_line(0, HOLD_LINE);
}
void lgp_state::machine_start()
{
- m_irq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(lgp_state::irq_stop),this));
}
+WRITE_LINE_MEMBER(lgp_state::ld_command_strobe_cb)
+{
+ //m_maincpu->set_input_line(INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE);
+}
+
+PALETTE_INIT_MEMBER(lgp_state, lgp)
+{
+ const UINT8 *color_prom = memregion("proms")->base();
+ int i;
+
+// for (i = 0; i < palette.entries(); i++)
+ for (i = 0; i < 0x20; i++)
+ {
+ int r,g,b;
+ int bit0,bit1,bit2;
+
+ /* red component */
+ bit0 = 0; //(color_prom[i] >> 0) & 0x01;
+ bit1 = (color_prom[i] >> 0) & 0x01;
+ bit2 = (color_prom[i] >> 1) & 0x01;
+ r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
+
+ /* green component */
+ bit0 = 0; //(color_prom[i] >> 3) & 0x01;
+ bit1 = (color_prom[i] >> 2) & 0x01;
+ bit2 = (color_prom[i] >> 3) & 0x01;
+ g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
+
+ /* blue component */
+ bit0 = 0; //(color_prom[i] >> 5) & 0x01;
+ bit1 = (color_prom[i] >> 4) & 0x01;
+ bit2 = (color_prom[i] >> 5) & 0x01;
+ b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
+
+
+ palette.set_pen_color(i,rgb_t(r,g,b));
+ }
+
+}
/* DRIVER */
static MACHINE_CONFIG_START( lgp, lgp_state )
@@ -378,6 +410,7 @@ static MACHINE_CONFIG_START( lgp, lgp_state )
MCFG_LASERDISC_LDV1000_ADD("laserdisc")
+ MCFG_LASERDISC_LDV1000_COMMAND_STROBE_CB(WRITELINE(lgp_state, ld_command_strobe_cb))
MCFG_LASERDISC_OVERLAY_DRIVER(256, 256, lgp_state, screen_update_lgp)
MCFG_LASERDISC_OVERLAY_PALETTE("palette")
@@ -385,7 +418,7 @@ static MACHINE_CONFIG_START( lgp, lgp_state )
MCFG_LASERDISC_SCREEN_ADD_NTSC("screen", "laserdisc")
MCFG_PALETTE_ADD("palette", 256)
- /* MCFG_PALETTE_INIT_OWNER(lgp_state,lgp) */
+ MCFG_PALETTE_INIT_OWNER(lgp_state,lgp)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", lgp)
@@ -470,14 +503,17 @@ ROM_START( lgp )
ROM_LOAD( "a02_28.114", 0x24000, 0x4000, CRC(cd69ed20) SHA1(d60782637085491527814889856eb3553950ab55) )
/* Small ROM dumping ground - color? */
- ROM_REGION( 0x520, "user4", 0 )
+ ROM_REGION( 0x20, "proms", 0 )
+ ROM_LOAD( "a02_37.43", 0x00000, 0x20, CRC(925ba961) SHA1(6715d80f2346374a0e880cf44cadc36e4a5316ed) )
+
+ ROM_REGION( 0x500, "user4", 0 )
ROM_LOAD( "a02_35.23", 0x00000, 0x100, CRC(7b9d44f1) SHA1(bbd7c35a03ca6de116a01f6dcfa2ecd13a7ddb53) )
ROM_LOAD( "a02_36.24", 0x00100, 0x100, CRC(169c4216) SHA1(23921e9ef61a68fdd8afceb3b95bbac48190cf1a) )
- ROM_LOAD( "a02_37.43", 0x00200, 0x20, CRC(925ba961) SHA1(6715d80f2346374a0e880cf44cadc36e4a5316ed) )
- ROM_LOAD( "a02_38.44", 0x00220, 0x100, CRC(6f37212a) SHA1(32b891dc9b97637620b2f1f9d9d76509c333cb2d) )
- ROM_LOAD( "a02_39.109", 0x00320, 0x100, CRC(88363809) SHA1(b22a7bd8ce6b28bf7cfa64c3a08e4cf7f9b4cd20) )
- ROM_LOAD( "a02_40.110", 0x00420, 0x100, CRC(fdfc7aac) SHA1(2413f7f9ad11c91d2adc0aab37bf70ff5c68ab6f) )
+ ROM_LOAD( "a02_38.44", 0x00200, 0x100, CRC(6f37212a) SHA1(32b891dc9b97637620b2f1f9d9d76509c333cb2d) )
+ ROM_LOAD( "a02_39.109", 0x00300, 0x100, CRC(88363809) SHA1(b22a7bd8ce6b28bf7cfa64c3a08e4cf7f9b4cd20) )
+ ROM_LOAD( "a02_40.110", 0x00400, 0x100, CRC(fdfc7aac) SHA1(2413f7f9ad11c91d2adc0aab37bf70ff5c68ab6f) )
+
DISK_REGION( "laserdisc" )
DISK_IMAGE_READONLY( "lgp", 0, NO_DUMP )
ROM_END
@@ -554,13 +590,15 @@ ROM_START( lgpalt )
ROM_LOAD( "a02_28.114", 0x24000, 0x4000, CRC(cd69ed20) SHA1(d60782637085491527814889856eb3553950ab55) )
/* Small ROM dumping ground - color? */
- ROM_REGION( 0x520, "user4", 0 )
+ ROM_REGION( 0x20, "proms", 0 )
+ ROM_LOAD( "a02_37.43", 0x00000, 0x20, CRC(925ba961) SHA1(6715d80f2346374a0e880cf44cadc36e4a5316ed) )
+
+ ROM_REGION( 0x500, "user4", 0 )
ROM_LOAD( "a02_35.23", 0x00000, 0x100, CRC(7b9d44f1) SHA1(bbd7c35a03ca6de116a01f6dcfa2ecd13a7ddb53) )
ROM_LOAD( "a02_36.24", 0x00100, 0x100, CRC(169c4216) SHA1(23921e9ef61a68fdd8afceb3b95bbac48190cf1a) )
- ROM_LOAD( "a02_37.43", 0x00200, 0x20, CRC(925ba961) SHA1(6715d80f2346374a0e880cf44cadc36e4a5316ed) )
- ROM_LOAD( "a02_38.44", 0x00220, 0x100, CRC(6f37212a) SHA1(32b891dc9b97637620b2f1f9d9d76509c333cb2d) )
- ROM_LOAD( "a02_39.109", 0x00320, 0x100, CRC(88363809) SHA1(b22a7bd8ce6b28bf7cfa64c3a08e4cf7f9b4cd20) )
- ROM_LOAD( "a02_40.110", 0x00420, 0x100, CRC(fdfc7aac) SHA1(2413f7f9ad11c91d2adc0aab37bf70ff5c68ab6f) )
+ ROM_LOAD( "a02_38.44", 0x00200, 0x100, CRC(6f37212a) SHA1(32b891dc9b97637620b2f1f9d9d76509c333cb2d) )
+ ROM_LOAD( "a02_39.109", 0x00300, 0x100, CRC(88363809) SHA1(b22a7bd8ce6b28bf7cfa64c3a08e4cf7f9b4cd20) )
+ ROM_LOAD( "a02_40.110", 0x00400, 0x100, CRC(fdfc7aac) SHA1(2413f7f9ad11c91d2adc0aab37bf70ff5c68ab6f) )
DISK_REGION( "laserdisc" )
DISK_IMAGE_READONLY( "lgp", 0, NO_DUMP )
diff --git a/src/mame/drivers/metlfrzr.cpp b/src/mame/drivers/metlfrzr.cpp
index afdcc2ffa4b..b14b55d8044 100644
--- a/src/mame/drivers/metlfrzr.cpp
+++ b/src/mame/drivers/metlfrzr.cpp
@@ -4,8 +4,9 @@
Metal Freezer (c) 1989 Seibu
- driver by Angelo Salese
-
+ driver by Angelo Salese, based off initial work by David Haywood
+ thanks to Peter Wilhelmsen for the decryption
+
HW seems the natural evolution of Dark Mist type.
TODO:
diff --git a/src/mame/machine/raiden2cop.cpp b/src/mame/machine/raiden2cop.cpp
index 002d1c2c32b..3c45b87114c 100644
--- a/src/mame/machine/raiden2cop.cpp
+++ b/src/mame/machine/raiden2cop.cpp
@@ -11,15 +11,18 @@
#include "emu.h"
#include "raiden2cop.h"
+#include "debugger.h"
// use Z to dump out table info
//#define TABLE_DUMPER
-#define LOG_CMDS 0
+#define LOG_Commands 0
+#define LOG_Phytagoras 0
+#define LOG_Division 1
#define seibu_cop_log \
- if (LOG_CMDS) logerror
+ if (LOG_Commands) logerror
const device_type RAIDEN2COP = &device_creator<raiden2cop_device>;
@@ -1120,6 +1123,10 @@ void raiden2cop_device::execute_338e(address_space &space, int offset, UINT16 da
cop_angle += 0x80;
}
+#if LOG_Phytagoras
+ printf("cmd %04x: dx = %d dy = %d angle = %02x\n",data,dx,dy,cop_angle);
+#endif
+
if (data & 0x0080) {
space.write_byte(cop_regs[0] + 0x34, cop_angle);
}
@@ -1145,6 +1152,10 @@ void raiden2cop_device::execute_3b30(address_space &space, int offset, UINT16 da
dy = dy >> 16;
cop_dist = sqrt((double)(dx*dx + dy*dy));
+#if LOG_Phytagoras
+ printf("cmd %04x: dx = %d dy = %d dist = %08x \n",data,dx >> 16,dy >> 16,cop_dist);
+#endif
+
if (data & 0x0080)
space.write_word(cop_regs[0] + (data & 0x200 ? 0x3a : 0x38), cop_dist);
}
@@ -1169,6 +1180,11 @@ void raiden2cop_device::LEGACY_execute_3b30(address_space &space, int offset, UI
void raiden2cop_device::execute_42c2(address_space &space, int offset, UINT16 data)
{
int div = space.read_word(cop_regs[0] + (0x36));
+
+#if LOG_Division
+ printf("cmd %04x: div = %04x scale = %04x\n",data,div,cop_scale);
+#endif
+
if (!div)
{
cop_status |= 0x8000;
@@ -1179,6 +1195,13 @@ void raiden2cop_device::execute_42c2(address_space &space, int offset, UINT16 da
/* TODO: bits 5-6-15 */
cop_status = 7;
+#if LOG_Division
+ printf("res = %04x dist %04x\n",(cop_dist << (5 - cop_scale)) / div,cop_dist);
+
+// if(div & 0x8000)
+// machine().debugger().debug_break();
+#endif
+
space.write_word(cop_regs[0] + (0x38), (cop_dist << (5 - cop_scale)) / div);
}