diff options
-rw-r--r-- | src/mame/drivers/deco32.cpp | 4 | ||||
-rw-r--r-- | src/mame/drivers/pingpong.cpp | 16 | ||||
-rw-r--r-- | src/mame/machine/deco_irq.cpp | 20 | ||||
-rw-r--r-- | src/mame/machine/deco_irq.h | 2 | ||||
-rw-r--r-- | src/mame/video/decmxc06.cpp | 9 |
5 files changed, 35 insertions, 16 deletions
diff --git a/src/mame/drivers/deco32.cpp b/src/mame/drivers/deco32.cpp index 43e862d83ac..1322ff4bf3c 100644 --- a/src/mame/drivers/deco32.cpp +++ b/src/mame/drivers/deco32.cpp @@ -1644,13 +1644,13 @@ static INPUT_PORTS_START( lockload ) PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(20) PORT_KEYDELTA(25) PORT_PLAYER(1) PORT_START("LIGHT0_Y") - PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(20) PORT_KEYDELTA(25) PORT_PLAYER(1) + PORT_BIT( 0xff, 49, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(20) PORT_KEYDELTA(25) PORT_PLAYER(1) PORT_MINMAX(16,82) PORT_START("LIGHT1_X") PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(20) PORT_KEYDELTA(25) PORT_PLAYER(2) PORT_START("LIGHT1_Y") - PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(20) PORT_KEYDELTA(25) PORT_PLAYER(2) + PORT_BIT( 0xff, 49, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(20) PORT_KEYDELTA(25) PORT_PLAYER(2) PORT_MINMAX(16,82) INPUT_PORTS_END static INPUT_PORTS_START( tattass ) diff --git a/src/mame/drivers/pingpong.cpp b/src/mame/drivers/pingpong.cpp index bd86b6567a6..1ecb7f4aeca 100644 --- a/src/mame/drivers/pingpong.cpp +++ b/src/mame/drivers/pingpong.cpp @@ -491,21 +491,21 @@ void pingpong_state::merlinmm(machine_config &config) ***************************************************************************/ -ROM_START( pingpong ) +ROM_START( pingpong ) /* GX555 - PWB200222A */ ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "pp_e04.rom", 0x0000, 0x4000, CRC(18552f8f) SHA1(cb03659b5e8a68003e72182a20979384d829280f) ) - ROM_LOAD( "pp_e03.rom", 0x4000, 0x4000, CRC(ae5f01e8) SHA1(f0d6a2c64822f2662fed3f601e279db18246f894) ) + ROM_LOAD( "555_e04.7a", 0x0000, 0x4000, CRC(18552f8f) SHA1(cb03659b5e8a68003e72182a20979384d829280f) ) + ROM_LOAD( "555_e03.6a", 0x4000, 0x4000, CRC(ae5f01e8) SHA1(f0d6a2c64822f2662fed3f601e279db18246f894) ) ROM_REGION( 0x2000, "gfx1", 0 ) - ROM_LOAD( "pp_e01.rom", 0x0000, 0x2000, CRC(d1d6f090) SHA1(7b7d7cb90bed746dda871227463145263e4b0c5a) ) + ROM_LOAD( "555_e01.7h", 0x0000, 0x2000, CRC(d1d6f090) SHA1(7b7d7cb90bed746dda871227463145263e4b0c5a) ) ROM_REGION( 0x2000, "gfx2", 0 ) - ROM_LOAD( "pp_e02.rom", 0x0000, 0x2000, CRC(33c687e0) SHA1(7c90de4d163d2ffad00c8cb6a194fa6125a4f4c1) ) + ROM_LOAD( "555_e02.12c", 0x0000, 0x2000, CRC(33c687e0) SHA1(7c90de4d163d2ffad00c8cb6a194fa6125a4f4c1) ) ROM_REGION( 0x0220, "proms", 0 ) - ROM_LOAD( "pingpong.3j", 0x0000, 0x0020, CRC(3e04f06e) SHA1(a642c350f148e062d56eb2a2fc53c470603000e3) ) /* palette (this might be bad) */ - ROM_LOAD( "pingpong.5h", 0x0020, 0x0100, CRC(8456046a) SHA1(8226f1325c14eb8aed5cd3c3d6bad9f9fd88c5fa) ) /* characters */ - ROM_LOAD( "pingpong.11j", 0x0120, 0x0100, CRC(09d96b08) SHA1(81405e33eacc47f91ea4c7221d122f7e6f5b1e5d) ) /* sprites */ + ROM_LOAD( "555e06.3j", 0x0000, 0x0020, CRC(3e04f06e) SHA1(a642c350f148e062d56eb2a2fc53c470603000e3) ) /* palette (this might be bad) */ + ROM_LOAD( "555e05.5h", 0x0020, 0x0100, CRC(8456046a) SHA1(8226f1325c14eb8aed5cd3c3d6bad9f9fd88c5fa) ) /* characters */ + ROM_LOAD( "555e07.11j", 0x0120, 0x0100, CRC(09d96b08) SHA1(81405e33eacc47f91ea4c7221d122f7e6f5b1e5d) ) /* sprites */ ROM_END ROM_START( merlinmm ) diff --git a/src/mame/machine/deco_irq.cpp b/src/mame/machine/deco_irq.cpp index c8cef7fc0fe..65863df16ef 100644 --- a/src/mame/machine/deco_irq.cpp +++ b/src/mame/machine/deco_irq.cpp @@ -5,8 +5,20 @@ Data East IRQ Controller TODO: - - Lightgun support is only used by Locked 'n Loaded and works badly - + - Lightgun support is only used by Locked 'n Loaded. + irq is likely an h AND v beam trigger, game counts via raster irqs until + it finds one of these, and where gun trigger x position is the H pixel + latch. + Two problems here: + 1. (assuming being correct) default calibration looks way offset. + 2. We currently give minmax defaults to Y latches to order to avoid + making the game to crash. These limits doesn't seem very sane, + for example lower limit is / 3 the full screen height (248 / 3 = 82). + Being an highly timing dependant behaviour ARM core is probably at + fault here. + - Understand if there's an additional switch for player 1 and player 2 + wrt lightgun trigger. + ***************************************************************************/ #include "emu.h" @@ -212,13 +224,13 @@ u8 deco_irq_device::status_r() WRITE_LINE_MEMBER( deco_irq_device::lightgun1_trigger_w ) { if (state) - m_lightgun_latch = m_lightgun1_cb() / 2; + m_lightgun_latch = m_lightgun1_cb(); } WRITE_LINE_MEMBER( deco_irq_device::lightgun2_trigger_w ) { if (state) - m_lightgun_latch = m_lightgun2_cb() / 2; + m_lightgun_latch = m_lightgun2_cb(); } WRITE_LINE_MEMBER( deco_irq_device::lightgun_irq_ack_w ) diff --git a/src/mame/machine/deco_irq.h b/src/mame/machine/deco_irq.h index 3accd37f700..2ad9417cde3 100644 --- a/src/mame/machine/deco_irq.h +++ b/src/mame/machine/deco_irq.h @@ -81,7 +81,7 @@ private: bool m_raster_irq_masked; u8 m_raster_irq_scanline; - u8 m_lightgun_latch; + int m_lightgun_latch; }; diff --git a/src/mame/video/decmxc06.cpp b/src/mame/video/decmxc06.cpp index 621e5e1d161..0788f926467 100644 --- a/src/mame/video/decmxc06.cpp +++ b/src/mame/video/decmxc06.cpp @@ -58,7 +58,7 @@ void deco_mxc06_device::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap if (priority) { start = size - 4; end = -4; inc = -4; } else { start = 0; end = size; inc = +4; } - for (int offs = start; offs != end; offs += inc) + for (int offs = start; offs != end;) { u32 pri_mask = 0; int flipy, incy, mult, parentFlipY; @@ -96,7 +96,10 @@ void deco_mxc06_device::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap // thedeep strongly suggests that this check goes here, otherwise the radar breaks if (!(spriteram[offs] & 0x8000)) + { + offs += inc; continue; + } for (int x = 0; x < w; x++) { @@ -136,6 +139,10 @@ void deco_mxc06_device::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap } } } + offs += inc; + if (offs == end) + return; + } } } |