summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/mame/drivers/deco32.cpp4
-rw-r--r--src/mame/drivers/pingpong.cpp16
-rw-r--r--src/mame/machine/deco_irq.cpp20
-rw-r--r--src/mame/machine/deco_irq.h2
-rw-r--r--src/mame/video/decmxc06.cpp9
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;
+
}
}
}