summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Dirk Best <mail@dirk-best.de>2017-09-16 14:42:43 +0200
committer Dirk Best <mail@dirk-best.de>2017-09-16 14:43:10 +0200
commitf1294ab5903e6d3a655b0d55ace402328a17d8e2 (patch)
tree0bddba2b71a4cf16247e2c8c8162768448681efe
parent3ab7403225aa77d2799b1adf3b93c66dc6c267b6 (diff)
deco_irq: Use a device map, move screen include to header
-rw-r--r--src/mame/drivers/cninja.cpp8
-rw-r--r--src/mame/drivers/deco32.cpp6
-rw-r--r--src/mame/machine/deco_irq.cpp131
-rw-r--r--src/mame/machine/deco_irq.h15
4 files changed, 80 insertions, 80 deletions
diff --git a/src/mame/drivers/cninja.cpp b/src/mame/drivers/cninja.cpp
index 2bbd743b187..6790570ad9a 100644
--- a/src/mame/drivers/cninja.cpp
+++ b/src/mame/drivers/cninja.cpp
@@ -122,7 +122,7 @@ static ADDRESS_MAP_START( cninja_map, AS_PROGRAM, 16, cninja_state )
AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_SHARE("pf4_rowscroll")
AM_RANGE(0x184000, 0x187fff) AM_RAM AM_SHARE("ram")
- AM_RANGE(0x190000, 0x190007) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x00ff)
+ AM_RANGE(0x190000, 0x190007) AM_DEVICE8("irq", deco_irq_device, map, 0x00ff)
AM_RANGE(0x19c000, 0x19dfff) AM_RAM_DEVWRITE("deco_common", decocomn_device, nonbuffered_palette_w) AM_SHARE("paletteram")
AM_RANGE(0x1a4000, 0x1a47ff) AM_RAM AM_SHARE("spriteram") /* Sprites */
@@ -158,7 +158,7 @@ static ADDRESS_MAP_START( cninjabl_map, AS_PROGRAM, 16, cninja_state )
AM_RANGE(0x180000, 0x187fff) AM_RAM // more ram on bootleg?
- AM_RANGE(0x190000, 0x190007) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x00ff)
+ AM_RANGE(0x190000, 0x190007) AM_DEVICE8("irq", deco_irq_device, map, 0x00ff)
AM_RANGE(0x19c000, 0x19dfff) AM_RAM_DEVWRITE("deco_common", decocomn_device, nonbuffered_palette_w) AM_SHARE("paletteram")
AM_RANGE(0x1b4000, 0x1b4001) AM_DEVWRITE("spriteram", buffered_spriteram16_device, write) /* DMA flag */
@@ -230,7 +230,7 @@ static ADDRESS_MAP_START( edrandy_map, AS_PROGRAM, 16, cninja_state )
AM_RANGE(0x1a0000, 0x1a3fff) AM_READWRITE(sshangha_protection_region_8_146_r,sshangha_protection_region_8_146_w)
- AM_RANGE(0x1a4000, 0x1a4007) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x00ff)
+ AM_RANGE(0x1a4000, 0x1a4007) AM_DEVICE8("irq", deco_irq_device, map, 0x00ff)
AM_RANGE(0x1ac000, 0x1ac001) AM_DEVWRITE("spriteram", buffered_spriteram16_device, write) /* DMA flag */
AM_RANGE(0x1bc000, 0x1bc7ff) AM_RAM AM_SHARE("spriteram") /* Sprites */
AM_RANGE(0x1bc800, 0x1bcfff) AM_WRITENOP /* Another bug in game code? Sprite list can overrun. Doesn't seem to mirror */
@@ -261,7 +261,7 @@ static ADDRESS_MAP_START( robocop2_map, AS_PROGRAM, 16, cninja_state )
AM_RANGE(0x198000, 0x198001) AM_DEVWRITE("spriteram", buffered_spriteram16_device, write) /* DMA flag */
AM_RANGE(0x1a8000, 0x1a9fff) AM_RAM_DEVWRITE("deco_common", decocomn_device, nonbuffered_palette_w) AM_SHARE("paletteram")
- AM_RANGE(0x1b0000, 0x1b0007) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x00ff)
+ AM_RANGE(0x1b0000, 0x1b0007) AM_DEVICE8("irq", deco_irq_device, map, 0x00ff)
AM_RANGE(0x1b8000, 0x1bbfff) AM_RAM AM_SHARE("ram") /* Main ram */
AM_RANGE(0x1f0000, 0x1f0001) AM_DEVWRITE("deco_common", decocomn_device, priority_w)
AM_RANGE(0x1f8000, 0x1f8001) AM_READ_PORT("DSW3") /* Dipswitch #3 */
diff --git a/src/mame/drivers/deco32.cpp b/src/mame/drivers/deco32.cpp
index 88404a9805f..844937b2fce 100644
--- a/src/mame/drivers/deco32.cpp
+++ b/src/mame/drivers/deco32.cpp
@@ -746,7 +746,7 @@ static ADDRESS_MAP_START( captaven_map, AS_PROGRAM, 32, deco32_state )
AM_RANGE(0x128000, 0x12ffff) AM_READWRITE16(dg_protection_region_0_146_r, dg_protection_region_0_146_w, 0x0000ffff)
AM_RANGE(0x130000, 0x131fff) AM_RAM_WRITE(nonbuffered_palette_w) AM_SHARE("paletteram") /* Palette RAM */
- AM_RANGE(0x148000, 0x14800f) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x000000ff)
+ AM_RANGE(0x148000, 0x14800f) AM_DEVICE8("irq", deco_irq_device, map, 0x000000ff)
AM_RANGE(0x160000, 0x167fff) AM_RAM /* Extra work RAM */
AM_RANGE(0x168000, 0x168003) AM_READ(captaven_soundcpu_r)
@@ -903,7 +903,7 @@ static ADDRESS_MAP_START( dragngun_map, AS_PROGRAM, 32, dragngun_state )
AM_RANGE(0x0120000, 0x0127fff) AM_READWRITE16(dg_protection_region_0_146_r, dg_protection_region_0_146_w, 0x0000ffff)
// AM_RANGE(0x01204c0, 0x01204c3) AM_WRITE(sound_w)
- AM_RANGE(0x0128000, 0x012800f) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x000000ff)
+ AM_RANGE(0x0128000, 0x012800f) AM_DEVICE8("irq", deco_irq_device, map, 0x000000ff)
AM_RANGE(0x0130000, 0x0131fff) AM_RAM_WRITE(buffered_palette_w) AM_SHARE("paletteram")
AM_RANGE(0x0138000, 0x0138003) AM_NOP /* Palette dma complete in bit 0x8? ack? return 0 else tight loop */
AM_RANGE(0x0138008, 0x013800b) AM_WRITE(palette_dma_w)
@@ -965,7 +965,7 @@ static ADDRESS_MAP_START( lockload_map, AS_PROGRAM, 32, dragngun_state )
// AM_RANGE(0x1204c0, 0x1204c3) AM_WRITE(sound_w)
AM_RANGE(0x120000, 0x127fff) AM_READWRITE16(dg_protection_region_0_146_r, dg_protection_region_0_146_w, 0x0000ffff)
- AM_RANGE(0x128000, 0x12800f) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x000000ff)
+ AM_RANGE(0x128000, 0x12800f) AM_DEVICE8("irq", deco_irq_device, map, 0x000000ff)
AM_RANGE(0x130000, 0x131fff) AM_RAM_WRITE(buffered_palette_w) AM_SHARE("paletteram")
AM_RANGE(0x138000, 0x138003) AM_READONLY AM_WRITENOP //palette dma complete in bit 0x8? ack? return 0 else tight loop
diff --git a/src/mame/machine/deco_irq.cpp b/src/mame/machine/deco_irq.cpp
index 3724f493813..b9d04aa2797 100644
--- a/src/mame/machine/deco_irq.cpp
+++ b/src/mame/machine/deco_irq.cpp
@@ -10,7 +10,6 @@
***************************************************************************/
#include "emu.h"
-#include "screen.h"
#include "deco_irq.h"
@@ -141,82 +140,77 @@ TIMER_CALLBACK_MEMBER( deco_irq_device::scanline_callback )
// INTERFACE
//**************************************************************************
-READ8_MEMBER( deco_irq_device::read )
+DEVICE_ADDRESS_MAP_START(map, 8, deco_irq_device)
+ AM_RANGE(0x0, 0x0) AM_WRITE(control_w)
+ AM_RANGE(0x1, 0x1) AM_READWRITE(scanline_r, scanline_w)
+ AM_RANGE(0x2, 0x2) AM_READWRITE(raster_irq_ack_r, vblank_irq_ack_w)
+ AM_RANGE(0x3, 0x3) AM_READ(status_r)
+ADDRESS_MAP_END
+
+WRITE8_MEMBER( deco_irq_device::control_w )
{
- switch (offset)
- {
- case 1:
- return m_raster_irq_scanline;
-
- case 2:
- m_raster_irq = false;
- m_raster1_irq_cb(CLEAR_LINE);
- m_raster2_irq_cb(CLEAR_LINE);
- return 0xff;
-
- case 3:
- uint8_t data = 0;
-
- // 7------- unknown
- // -6------ lightgun irq
- // --5----- raster irq
- // ---4---- vblank irq
- // ----32-- unknown
- // ------1- vblank
- // -------0 hblank?
-
- data |= 1 << 7;
- data |= (m_lightgun_irq ? 1 : 0) << 6;
- data |= (m_raster_irq ? 1 : 0) << 5;
- data |= (m_vblank_irq ? 1 : 0) << 4;
- data |= 0 << 3;
- data |= 0 << 2;
- data |= m_screen->vblank() << 1;
-// data |= (m_screen->hblank() & m_screen->vblank()) << 0;
- data |= m_screen->hblank() << 0;
-
- return data;
- }
+ // 765----- unused?
+ // ---4---- raster irq target
+ // ----3--- unused?
+ // -----2-- unknown
+ // ------1- raster irq mask
+ // -------0 unused?
+
+ m_raster_irq_target = BIT(data, 4);
+ m_raster_irq_masked = bool(BIT(data, 1));
+
+ if (m_raster_irq_masked)
+ raster_irq_ack_r(space, 0);
+}
- logerror("Read from invalid offset %x\n", offset);
- return 0xff;
+READ8_MEMBER( deco_irq_device::scanline_r )
+{
+ return m_raster_irq_scanline;
}
-WRITE8_MEMBER( deco_irq_device::write )
+WRITE8_MEMBER( deco_irq_device::scanline_w )
{
- switch (offset)
- {
- case 0:
- // 765----- unused?
- // ---4---- raster irq target
- // ----3--- unused?
- // -----2-- unknown
- // ------1- raster irq mask
- // -------0 unused?
-
- m_raster_irq_target = BIT(data, 4);
- m_raster_irq_masked = bool(BIT(data, 1));
-
- if (m_raster_irq_masked)
- {
- m_raster_irq = false;
- m_raster1_irq_cb(CLEAR_LINE);
- m_raster2_irq_cb(CLEAR_LINE);
- }
+ m_raster_irq_scanline = data;
+}
- return;
+READ8_MEMBER( deco_irq_device::raster_irq_ack_r )
+{
+ m_raster_irq = false;
+ m_raster1_irq_cb(CLEAR_LINE);
+ m_raster2_irq_cb(CLEAR_LINE);
- case 1:
- m_raster_irq_scanline = data;
- return;
+ return 0xff;
+}
- case 2:
- m_vblank_irq = false;
- m_vblank_irq_cb(CLEAR_LINE);
- return;
- }
+WRITE8_MEMBER( deco_irq_device::vblank_irq_ack_w )
+{
+ m_vblank_irq = false;
+ m_vblank_irq_cb(CLEAR_LINE);
+}
- logerror("Write %02x to invalid offset %x\n", data, offset);
+READ8_MEMBER( deco_irq_device::status_r )
+{
+ uint8_t data = 0;
+
+ // 7------- unknown
+ // -6------ lightgun irq
+ // --5----- raster irq
+ // ---4---- vblank irq
+ // ----32-- unknown
+ // ------1- vblank
+ // -------0 hblank?
+
+ data |= 1 << 7;
+ data |= (m_lightgun_irq ? 1 : 0) << 6;
+ data |= (m_raster_irq ? 1 : 0) << 5;
+ data |= (m_vblank_irq ? 1 : 0) << 4;
+ data |= 0 << 3;
+ data |= 0 << 2;
+ data |= m_screen->vblank() << 1;
+// data |= (m_screen->hblank() & m_screen->vblank()) << 0;
+ data |= m_screen->hblank() << 0;
+
+ return data;
}
WRITE_LINE_MEMBER( deco_irq_device::lightgun1_trigger_w )
@@ -236,4 +230,3 @@ WRITE_LINE_MEMBER( deco_irq_device::lightgun_irq_ack_w )
m_lightgun_irq = false;
m_lightgun_irq_cb(CLEAR_LINE);
}
-
diff --git a/src/mame/machine/deco_irq.h b/src/mame/machine/deco_irq.h
index d8b4138a5b4..69a319dba81 100644
--- a/src/mame/machine/deco_irq.h
+++ b/src/mame/machine/deco_irq.h
@@ -11,6 +11,8 @@
#pragma once
+#include "screen.h"
+
//**************************************************************************
// INTERFACE CONFIGURATION MACROS
@@ -59,7 +61,6 @@ public:
template <class Object> static devcb_base &set_lightgun_irq_callback(device_t &device, Object &&cb)
{ return downcast<deco_irq_device &>(device).m_lightgun_irq_cb.set_callback(std::forward<Object>(cb)); }
-
template <class Object> static devcb_base &set_raster1_irq_callback(device_t &device, Object &&cb)
{ return downcast<deco_irq_device &>(device).m_raster1_irq_cb.set_callback(std::forward<Object>(cb)); }
@@ -69,14 +70,19 @@ public:
template <class Object> static devcb_base &set_vblank_irq_callback(device_t &device, Object &&cb)
{ return downcast<deco_irq_device &>(device).m_vblank_irq_cb.set_callback(std::forward<Object>(cb)); }
-
// static configuration
static void set_screen_tag(device_t &device, const char *tag);
TIMER_CALLBACK_MEMBER(scanline_callback);
- DECLARE_READ8_MEMBER(read);
- DECLARE_WRITE8_MEMBER(write);
+ DECLARE_ADDRESS_MAP(map, 8);
+
+ DECLARE_WRITE8_MEMBER(control_w);
+ DECLARE_READ8_MEMBER(scanline_r);
+ DECLARE_WRITE8_MEMBER(scanline_w);
+ DECLARE_READ8_MEMBER(raster_irq_ack_r);
+ DECLARE_WRITE8_MEMBER(vblank_irq_ack_w);
+ DECLARE_READ8_MEMBER(status_r);
DECLARE_WRITE_LINE_MEMBER(lightgun1_trigger_w);
DECLARE_WRITE_LINE_MEMBER(lightgun2_trigger_w);
@@ -118,4 +124,5 @@ private:
// device type definition
DECLARE_DEVICE_TYPE(DECO_IRQ, deco_irq_device)
+
#endif // MAME_MACHINE_DECO_IRQ_H