Some misc updates, nw

This commit is contained in:
angelosa 2016-06-16 23:08:29 +02:00
parent 9c045c920f
commit c3770fe54e
6 changed files with 149 additions and 55 deletions

View File

@ -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 };

View File

@ -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 )

View File

@ -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.

View File

@ -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 )

View File

@ -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:

View File

@ -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);
}