summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Scott Stone <tafoid@users.noreply.github.com>2011-03-24 03:41:27 +0000
committer Scott Stone <tafoid@users.noreply.github.com>2011-03-24 03:41:27 +0000
commit6f2002cb32d7971ec9efe7281b18cccb2e38fce2 (patch)
tree77eb652c84856126c4ff88e93af88408e2639aa4
parent0731ac9bb68820656b276ef704ef5c761d75635c (diff)
Haze: Convert fghthist to using generic functions in deco16ic.c (no whatsnew)
-rw-r--r--src/mame/drivers/deco32.c126
-rw-r--r--src/mame/includes/deco32.h14
-rw-r--r--src/mame/video/deco32.c102
3 files changed, 125 insertions, 117 deletions
diff --git a/src/mame/drivers/deco32.c b/src/mame/drivers/deco32.c
index 24c4b03c4da..3f5e2603331 100644
--- a/src/mame/drivers/deco32.c
+++ b/src/mame/drivers/deco32.c
@@ -237,10 +237,33 @@ Notes:
#include "sound/okim6295.h"
#include "sound/bsmt2000.h"
#include "video/decospr.h"
+#include "video/deco16ic.h"
/**********************************************************************************/
+static int fghthist_bank_callback( int bank )
+{
+ bank = bank >> 4;
+ bank = (bank & 1) | ((bank & 4) >> 1) | ((bank & 2) << 1);
+
+ return bank * 0x1000;
+}
+
+static const deco16ic_interface fghthist_deco16ic_intf =
+{
+ "screen",
+ 0, 0, 1,
+ 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */
+ 0x00, 0x10, 0x20, 0x30, /* color base */
+ 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */
+ fghthist_bank_callback,
+ fghthist_bank_callback,
+ fghthist_bank_callback,
+ fghthist_bank_callback
+};
+
+
static WRITE32_HANDLER( deco32_pf12_control_w )
{
deco32_state *state = space->machine->driver_data<deco32_state>();
@@ -727,18 +750,28 @@ static ADDRESS_MAP_START( captaven_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x190000, 0x191fff) AM_RAM_WRITE(deco32_pf1_data_w) AM_BASE_MEMBER(deco32_state, pf1_data)
AM_RANGE(0x192000, 0x193fff) AM_WRITE(deco32_pf1_data_w) /* Mirror address - bug in program code */
AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_data_w) AM_BASE_MEMBER(deco32_state, pf2_data)
- AM_RANGE(0x1a0000, 0x1a1fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf1_rowscroll)
- AM_RANGE(0x1a4000, 0x1a5fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf2_rowscroll)
+ AM_RANGE(0x1a0000, 0x1a1fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf1_rowscroll32)
+ AM_RANGE(0x1a4000, 0x1a5fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf2_rowscroll32)
AM_RANGE(0x1c0000, 0x1c001f) AM_RAM_WRITE(deco32_pf34_control_w) AM_BASE_MEMBER(deco32_state, pf34_control)
AM_RANGE(0x1d0000, 0x1d1fff) AM_RAM_WRITE(deco32_pf3_data_w) AM_BASE_MEMBER(deco32_state, pf3_data)
- AM_RANGE(0x1e0000, 0x1e1fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf3_rowscroll)
+ AM_RANGE(0x1e0000, 0x1e1fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf3_rowscroll32)
ADDRESS_MAP_END
+static READ32_HANDLER( deco32_pf1_rowscroll_r ) { deco32_state *state = space->machine->driver_data<deco32_state>(); return state->pf1_rowscroll[offset] ^ 0xffff0000; }
+static READ32_HANDLER( deco32_pf2_rowscroll_r ) { deco32_state *state = space->machine->driver_data<deco32_state>(); return state->pf2_rowscroll[offset] ^ 0xffff0000; }
+static READ32_HANDLER( deco32_pf3_rowscroll_r ) { deco32_state *state = space->machine->driver_data<deco32_state>(); return state->pf3_rowscroll[offset] ^ 0xffff0000; }
+static READ32_HANDLER( deco32_pf4_rowscroll_r ) { deco32_state *state = space->machine->driver_data<deco32_state>(); return state->pf4_rowscroll[offset] ^ 0xffff0000; }
+static WRITE32_HANDLER( deco32_pf1_rowscroll_w ) { deco32_state *state = space->machine->driver_data<deco32_state>(); data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&state->pf1_rowscroll[offset]); }
+static WRITE32_HANDLER( deco32_pf2_rowscroll_w ) { deco32_state *state = space->machine->driver_data<deco32_state>(); data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&state->pf2_rowscroll[offset]); }
+static WRITE32_HANDLER( deco32_pf3_rowscroll_w ) { deco32_state *state = space->machine->driver_data<deco32_state>(); data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&state->pf3_rowscroll[offset]); }
+static WRITE32_HANDLER( deco32_pf4_rowscroll_w ) { deco32_state *state = space->machine->driver_data<deco32_state>(); data &= 0x0000ffff; mem_mask &= 0x0000ffff; COMBINE_DATA(&state->pf4_rowscroll[offset]); }
+
+
static ADDRESS_MAP_START( fghthist_map, ADDRESS_SPACE_PROGRAM, 32 )
- AM_RANGE(0x000000, 0x001fff) AM_ROM AM_WRITE(deco32_pf1_data_w)
+// AM_RANGE(0x000000, 0x001fff) AM_ROM AM_WRITE(deco32_pf1_data_w) // wtf??
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_BASE_MEMBER(deco32_state, ram)
AM_RANGE(0x120020, 0x12002f) AM_READ(fghthist_control_r)
@@ -753,17 +786,17 @@ static ADDRESS_MAP_START( fghthist_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x178000, 0x179fff) AM_READWRITE(deco32_spriteram_r, deco32_spriteram_w)
AM_RANGE(0x17c010, 0x17c013) AM_WRITE(deco32_buffer_spriteram_w)
- AM_RANGE(0x182000, 0x183fff) AM_RAM_WRITE(deco32_pf1_data_w) AM_BASE_MEMBER(deco32_state, pf1_data)
- AM_RANGE(0x184000, 0x185fff) AM_RAM_WRITE(deco32_pf2_data_w) AM_BASE_MEMBER(deco32_state, pf2_data)
- AM_RANGE(0x192000, 0x192fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf1_rowscroll)
- AM_RANGE(0x194000, 0x194fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf2_rowscroll)
- AM_RANGE(0x1a0000, 0x1a001f) AM_RAM_WRITE(deco32_pf12_control_w) AM_BASE_MEMBER(deco32_state, pf12_control)
+ AM_RANGE(0x182000, 0x183fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
+ AM_RANGE(0x184000, 0x185fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
+ AM_RANGE(0x192000, 0x192fff) AM_READWRITE(deco32_pf1_rowscroll_r, deco32_pf1_rowscroll_w)
+ AM_RANGE(0x194000, 0x194fff) AM_READWRITE(deco32_pf2_rowscroll_r, deco32_pf2_rowscroll_w)
+ AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w)
- AM_RANGE(0x1c2000, 0x1c3fff) AM_RAM_WRITE(deco32_pf3_data_w) AM_BASE_MEMBER(deco32_state, pf3_data)
- AM_RANGE(0x1c4000, 0x1c5fff) AM_RAM_WRITE(deco32_pf4_data_w) AM_BASE_MEMBER(deco32_state, pf4_data)
- AM_RANGE(0x1d2000, 0x1d2fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf3_rowscroll)
- AM_RANGE(0x1d4000, 0x1d4fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf4_rowscroll)
- AM_RANGE(0x1e0000, 0x1e001f) AM_RAM_WRITE(deco32_pf34_control_w) AM_BASE_MEMBER(deco32_state, pf34_control)
+ AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_dword_r, deco16ic_pf3_data_dword_w)
+ AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_dword_r, deco16ic_pf4_data_dword_w)
+ AM_RANGE(0x1d2000, 0x1d2fff) AM_READWRITE(deco32_pf3_rowscroll_r, deco32_pf3_rowscroll_w)
+ AM_RANGE(0x1d4000, 0x1d4fff) AM_READWRITE(deco32_pf4_rowscroll_r, deco32_pf4_rowscroll_w)
+ AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf34_control_dword_r, deco16ic_pf34_control_dword_w)
AM_RANGE(0x16c000, 0x16c01f) AM_READNOP
AM_RANGE(0x17c000, 0x17c03f) AM_READNOP
@@ -786,17 +819,17 @@ static ADDRESS_MAP_START( fghthsta_memmap, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x17c010, 0x17c013) AM_WRITE(deco32_buffer_spriteram_w)
AM_RANGE(0x17c020, 0x17c023) AM_READNOP
- AM_RANGE(0x182000, 0x183fff) AM_RAM_WRITE(deco32_pf1_data_w) AM_BASE_MEMBER(deco32_state, pf1_data)
- AM_RANGE(0x184000, 0x185fff) AM_RAM_WRITE(deco32_pf2_data_w) AM_BASE_MEMBER(deco32_state, pf2_data)
- AM_RANGE(0x192000, 0x192fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf1_rowscroll)
- AM_RANGE(0x194000, 0x194fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf2_rowscroll)
- AM_RANGE(0x1a0000, 0x1a001f) AM_RAM_WRITE(deco32_pf12_control_w) AM_BASE_MEMBER(deco32_state, pf12_control)
+ AM_RANGE(0x182000, 0x183fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
+ AM_RANGE(0x184000, 0x185fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
+ AM_RANGE(0x192000, 0x192fff) AM_READWRITE(deco32_pf1_rowscroll_r, deco32_pf1_rowscroll_w)
+ AM_RANGE(0x194000, 0x194fff) AM_READWRITE(deco32_pf2_rowscroll_r, deco32_pf2_rowscroll_w)
+ AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w)
- AM_RANGE(0x1c2000, 0x1c3fff) AM_RAM_WRITE(deco32_pf3_data_w) AM_BASE_MEMBER(deco32_state, pf3_data)
- AM_RANGE(0x1c4000, 0x1c5fff) AM_RAM_WRITE(deco32_pf4_data_w) AM_BASE_MEMBER(deco32_state, pf4_data)
- AM_RANGE(0x1d2000, 0x1d2fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf3_rowscroll)
- AM_RANGE(0x1d4000, 0x1d4fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf4_rowscroll)
- AM_RANGE(0x1e0000, 0x1e001f) AM_RAM_WRITE(deco32_pf34_control_w) AM_BASE_MEMBER(deco32_state, pf34_control)
+ AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_dword_r, deco16ic_pf3_data_dword_w)
+ AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_dword_r, deco16ic_pf4_data_dword_w)
+ AM_RANGE(0x1d2000, 0x1d2fff) AM_READWRITE(deco32_pf3_rowscroll_r, deco32_pf3_rowscroll_w)
+ AM_RANGE(0x1d4000, 0x1d4fff) AM_READWRITE(deco32_pf4_rowscroll_r, deco32_pf4_rowscroll_w)
+ AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf34_control_dword_r, deco16ic_pf34_control_dword_w)
AM_RANGE(0x200000, 0x200fff) AM_READWRITE(deco16_146_fghthist_prot_r, deco16_146_fghthist_prot_w) AM_BASE(&deco32_prot_ram)
ADDRESS_MAP_END
@@ -817,15 +850,15 @@ static ADDRESS_MAP_START( dragngun_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x180000, 0x18001f) AM_RAM AM_BASE_MEMBER(deco32_state, pf12_control)
AM_RANGE(0x190000, 0x191fff) AM_RAM_WRITE(deco32_pf1_data_w) AM_BASE_MEMBER(deco32_state, pf1_data)
AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_data_w) AM_BASE_MEMBER(deco32_state, pf2_data)
- AM_RANGE(0x1a0000, 0x1a0fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf1_rowscroll)
- AM_RANGE(0x1a4000, 0x1a4fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf2_rowscroll)
+ AM_RANGE(0x1a0000, 0x1a0fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf1_rowscroll32)
+ AM_RANGE(0x1a4000, 0x1a4fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf2_rowscroll32)
// AM_RANGE(0x1c0000, 0x1c001f) AM_RAM_WRITE(deco32_pf34_control_w) AM_BASE_MEMBER(deco32_state, pf34_control)
AM_RANGE(0x1c0000, 0x1c001f) AM_RAM AM_BASE_MEMBER(deco32_state, pf34_control)
AM_RANGE(0x1d0000, 0x1d1fff) AM_RAM_WRITE(deco32_pf3_data_w) AM_BASE_MEMBER(deco32_state, pf3_data)
AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(deco32_pf4_data_w) AM_BASE_MEMBER(deco32_state, pf4_data)
- AM_RANGE(0x1e0000, 0x1e0fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf3_rowscroll)
- AM_RANGE(0x1e4000, 0x1e4fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf4_rowscroll)
+ AM_RANGE(0x1e0000, 0x1e0fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf3_rowscroll32)
+ AM_RANGE(0x1e4000, 0x1e4fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf4_rowscroll32)
AM_RANGE(0x204800, 0x204fff) AM_RAM // ace? 0x10 byte increments only // 13f ff stuff
@@ -870,15 +903,15 @@ static ADDRESS_MAP_START( lockload_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x180000, 0x18001f) AM_RAM AM_BASE_MEMBER(deco32_state, pf12_control)
AM_RANGE(0x190000, 0x191fff) AM_RAM_WRITE(deco32_pf1_data_w) AM_BASE_MEMBER(deco32_state, pf1_data)
AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_data_w) AM_BASE_MEMBER(deco32_state, pf2_data)
- AM_RANGE(0x1a0000, 0x1a0fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf1_rowscroll)
- AM_RANGE(0x1a4000, 0x1a4fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf2_rowscroll)
+ AM_RANGE(0x1a0000, 0x1a0fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf1_rowscroll32)
+ AM_RANGE(0x1a4000, 0x1a4fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf2_rowscroll32)
// AM_RANGE(0x1c0000, 0x1c001f) AM_RAM_WRITE(deco32_pf34_control_w) AM_BASE_MEMBER(deco32_state, pf34_control)
AM_RANGE(0x1c0000, 0x1c001f) AM_RAM AM_BASE_MEMBER(deco32_state, pf34_control)
AM_RANGE(0x1d0000, 0x1d1fff) AM_RAM_WRITE(deco32_pf3_data_w) AM_BASE_MEMBER(deco32_state, pf3_data)
AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(deco32_pf4_data_w) AM_BASE_MEMBER(deco32_state, pf4_data)
- AM_RANGE(0x1e0000, 0x1e0fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf3_rowscroll)
- AM_RANGE(0x1e4000, 0x1e4fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf4_rowscroll)
+ AM_RANGE(0x1e0000, 0x1e0fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf3_rowscroll32)
+ AM_RANGE(0x1e4000, 0x1e4fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf4_rowscroll32)
AM_RANGE(0x204800, 0x204fff) AM_RAM //0x10 byte increments only
AM_RANGE(0x208000, 0x208fff) AM_RAM AM_BASE_MEMBER(deco32_state, dragngun_sprite_layout_0_ram)
@@ -932,14 +965,14 @@ static ADDRESS_MAP_START( tattass_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x182000, 0x183fff) AM_RAM_WRITE(deco32_pf1_data_w) AM_BASE_MEMBER(deco32_state, pf1_data)
AM_RANGE(0x184000, 0x185fff) AM_RAM_WRITE(deco32_pf2_data_w) AM_BASE_MEMBER(deco32_state, pf2_data)
- AM_RANGE(0x192000, 0x193fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf1_rowscroll)
- AM_RANGE(0x194000, 0x195fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf2_rowscroll)
+ AM_RANGE(0x192000, 0x193fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf1_rowscroll32)
+ AM_RANGE(0x194000, 0x195fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf2_rowscroll32)
AM_RANGE(0x1a0000, 0x1a001f) AM_RAM_WRITE(deco32_pf12_control_w) AM_BASE_MEMBER(deco32_state, pf12_control)
AM_RANGE(0x1c2000, 0x1c3fff) AM_RAM_WRITE(deco32_pf3_data_w) AM_BASE_MEMBER(deco32_state, pf3_data)
AM_RANGE(0x1c4000, 0x1c5fff) AM_RAM_WRITE(deco32_pf4_data_w) AM_BASE_MEMBER(deco32_state, pf4_data)
- AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf3_rowscroll)
- AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf4_rowscroll)
+ AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf3_rowscroll32)
+ AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf4_rowscroll32)
AM_RANGE(0x1e0000, 0x1e001f) AM_RAM_WRITE(deco32_pf34_control_w) AM_BASE_MEMBER(deco32_state, pf34_control)
AM_RANGE(0x200000, 0x200fff) AM_READWRITE(tattass_prot_r, tattass_prot_w) AM_BASE(&deco32_prot_ram)
@@ -973,14 +1006,14 @@ static ADDRESS_MAP_START( nslasher_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x182000, 0x183fff) AM_RAM_WRITE(deco32_pf1_data_w) AM_BASE_MEMBER(deco32_state, pf1_data)
AM_RANGE(0x184000, 0x185fff) AM_RAM_WRITE(deco32_pf2_data_w) AM_BASE_MEMBER(deco32_state, pf2_data)
- AM_RANGE(0x192000, 0x193fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf1_rowscroll)
- AM_RANGE(0x194000, 0x195fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf2_rowscroll)
+ AM_RANGE(0x192000, 0x193fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf1_rowscroll32)
+ AM_RANGE(0x194000, 0x195fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf2_rowscroll32)
AM_RANGE(0x1a0000, 0x1a001f) AM_RAM_WRITE(deco32_pf12_control_w) AM_BASE_MEMBER(deco32_state, pf12_control)
AM_RANGE(0x1c2000, 0x1c3fff) AM_RAM_WRITE(deco32_pf3_data_w) AM_BASE_MEMBER(deco32_state, pf3_data)
AM_RANGE(0x1c4000, 0x1c5fff) AM_RAM_WRITE(deco32_pf4_data_w) AM_BASE_MEMBER(deco32_state, pf4_data)
- AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf3_rowscroll)
- AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf4_rowscroll)
+ AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf3_rowscroll32)
+ AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM AM_BASE_MEMBER(deco32_state, pf4_rowscroll32)
AM_RANGE(0x1e0000, 0x1e001f) AM_RAM_WRITE(deco32_pf34_control_w) AM_BASE_MEMBER(deco32_state, pf34_control)
AM_RANGE(0x200000, 0x200fff) AM_READWRITE(nslasher_prot_r, nslasher_prot_w) AM_BASE(&deco32_prot_ram)
@@ -1614,9 +1647,9 @@ static GFXDECODE_START( captaven )
GFXDECODE_END
static GFXDECODE_START( fghthist )
- GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 ) /* Characters 8x8 */
- GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 256, 16 ) /* Tiles 16x16 */
- GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 512, 32 ) /* Tiles 16x16 */
+ GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 128 ) /* Characters 8x8 */
+ GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 128 ) /* Tiles 16x16 */
+ GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 128 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 1024, 128 ) /* Sprites 16x16 */
GFXDECODE_END
@@ -1800,6 +1833,8 @@ static MACHINE_CONFIG_START( fghthist, deco32_state )
MCFG_GFXDECODE(fghthist)
MCFG_PALETTE_LENGTH(2048)
+ MCFG_DECO16IC_ADD("deco_custom", fghthist_deco16ic_intf)
+
MCFG_DEVICE_ADD("spritegen", decospr_, 0)
decospr_device_config::set_gfx_region(device, 3);
@@ -1834,9 +1869,6 @@ static MACHINE_CONFIG_START( fghthsta, deco32_state )
MCFG_EEPROM_93C46_ADD("eeprom")
- /* video hardware */
- //MCFG_VIDEO_ATTRIBUTES(VIDEO_BUFFERS_SPRITERAM )
-
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
@@ -1847,6 +1879,8 @@ static MACHINE_CONFIG_START( fghthsta, deco32_state )
MCFG_GFXDECODE(fghthist)
MCFG_PALETTE_LENGTH(2048)
+ MCFG_DECO16IC_ADD("deco_custom", fghthist_deco16ic_intf)
+
MCFG_DEVICE_ADD("spritegen", decospr_, 0)
decospr_device_config::set_gfx_region(device, 3);
diff --git a/src/mame/includes/deco32.h b/src/mame/includes/deco32.h
index 3d7b884fcef..1004b18f252 100644
--- a/src/mame/includes/deco32.h
+++ b/src/mame/includes/deco32.h
@@ -25,10 +25,10 @@ public:
UINT32 *pf4_data;
UINT32 *pf12_control;
UINT32 *pf34_control;
- UINT32 *pf1_rowscroll;
- UINT32 *pf2_rowscroll;
- UINT32 *pf3_rowscroll;
- UINT32 *pf4_rowscroll;
+ UINT32 *pf1_rowscroll32;
+ UINT32 *pf2_rowscroll32;
+ UINT32 *pf3_rowscroll32;
+ UINT32 *pf4_rowscroll32;
UINT32 *dragngun_sprite_layout_0_ram;
UINT32 *dragngun_sprite_layout_1_ram;
UINT32 *dragngun_sprite_lookup_0_ram;
@@ -63,7 +63,11 @@ public:
UINT16 spriteram16_buffered[0x1000];
UINT16 spriteram16_2[0x1000];
UINT16 spriteram16_2_buffered[0x1000];
-
+ UINT16 pf1_rowscroll[0x0800/2];
+ UINT16 pf2_rowscroll[0x0800/2];
+ UINT16 pf3_rowscroll[0x0800/2];
+ UINT16 pf4_rowscroll[0x0800/2];
+ device_t *deco16ic;
};
diff --git a/src/mame/video/deco32.c b/src/mame/video/deco32.c
index 1a93790476e..30821d988cb 100644
--- a/src/mame/video/deco32.c
+++ b/src/mame/video/deco32.c
@@ -1,7 +1,7 @@
#include "emu.h"
#include "includes/deco32.h"
#include "video/decospr.h"
-
+#include "video/deco16ic.h"
/******************************************************************************/
@@ -708,20 +708,20 @@ VIDEO_START( captaven )
VIDEO_START( fghthist )
{
deco32_state *state = machine->driver_data<deco32_state>();
- state->pf1_tilemap = tilemap_create(machine, get_pf1_tile_info, tilemap_scan_rows, 8, 8,64,32);
- state->pf2_tilemap = tilemap_create(machine, get_pf2_tile_info, deco16_scan_rows, 16,16,64,32);
- state->pf3_tilemap = tilemap_create(machine, get_pf3_tile_info, deco16_scan_rows, 16,16,64,32);
- state->pf4_tilemap = tilemap_create(machine, get_pf4_tile_info, deco16_scan_rows, 16,16,64,32);
- state->pf1a_tilemap =0;
+ //state->pf1_tilemap = tilemap_create(machine, get_pf1_tile_info, tilemap_scan_rows, 8, 8,64,32);
+ //state->pf2_tilemap = tilemap_create(machine, get_pf2_tile_info, deco16_scan_rows, 16,16,64,32);
+ //state->pf3_tilemap = tilemap_create(machine, get_pf3_tile_info, deco16_scan_rows, 16,16,64,32);
+ //state->pf4_tilemap = tilemap_create(machine, get_pf4_tile_info, deco16_scan_rows, 16,16,64,32);
+ //state->pf1a_tilemap =0;
state->dirty_palette = auto_alloc_array(machine, UINT8, 4096);
machine->device<decospr_device>("spritegen")->alloc_sprite_bitmap(machine);
- tilemap_set_transparent_pen(state->pf1_tilemap,0);
- tilemap_set_transparent_pen(state->pf2_tilemap,0);
- tilemap_set_transparent_pen(state->pf3_tilemap,0);
+ //tilemap_set_transparent_pen(state->pf1_tilemap,0);
+ //tilemap_set_transparent_pen(state->pf2_tilemap,0);
+ //tilemap_set_transparent_pen(state->pf3_tilemap,0);
- state->pf2_colourbank=state->pf4_colourbank=0;
+ //state->pf2_colourbank=state->pf4_colourbank=0;
state->has_ace_ram=0;
}
@@ -888,7 +888,7 @@ static void combined_tilemap_draw(running_machine* machine, bitmap_t *bitmap, co
const UINT16 width_mask=0x3ff;
const UINT16 height_mask=0x1ff;
const UINT16 y_src=state->pf34_control[2];
-// const UINT32 *rows=state->pf3_rowscroll;
+// const UINT32 *rows=state->pf3_rowscroll32;
const UINT16 *bitmap0_y;
const UINT16 *bitmap1_y;
@@ -904,7 +904,7 @@ static void combined_tilemap_draw(running_machine* machine, bitmap_t *bitmap, co
bitmap2_y=BITMAP_ADDR32(bitmap, y, 0);
/* Todo: Should add row enable, and col scroll, but never used as far as I can see */
- x_src=(state->pf34_control[1] + state->pf3_rowscroll[py])&width_mask;
+ x_src=(state->pf34_control[1] + state->pf3_rowscroll32[py])&width_mask;
for (x=0; x<320; x++) {
@@ -930,10 +930,10 @@ SCREEN_UPDATE( captaven )
flip_screen_set(screen->machine, state->pf12_control[0]&0x80);
tilemap_set_flip_all(screen->machine,flip_screen_get(screen->machine) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
- deco32_setup_scroll(state->pf1_tilemap, 256,(state->pf12_control[5]>>0)&0xff,(state->pf12_control[6]>>0)&0xff,state->pf12_control[2],state->pf12_control[1],state->pf1_rowscroll,state->pf1_rowscroll+0x200);
- deco32_setup_scroll(state->pf1a_tilemap,512,(state->pf12_control[5]>>0)&0xff,(state->pf12_control[6]>>0)&0xff,state->pf12_control[2],state->pf12_control[1],state->pf1_rowscroll,state->pf1_rowscroll+0x200);
- deco32_setup_scroll(state->pf2_tilemap, 512,(state->pf12_control[5]>>8)&0xff,(state->pf12_control[6]>>8)&0xff,state->pf12_control[4],state->pf12_control[3],state->pf2_rowscroll,state->pf2_rowscroll+0x200);
- deco32_setup_scroll(state->pf3_tilemap, 512,(state->pf34_control[5]>>0)&0xff,(state->pf34_control[6]>>0)&0xff,state->pf34_control[4],state->pf34_control[3],state->pf3_rowscroll,state->pf3_rowscroll+0x200);
+ deco32_setup_scroll(state->pf1_tilemap, 256,(state->pf12_control[5]>>0)&0xff,(state->pf12_control[6]>>0)&0xff,state->pf12_control[2],state->pf12_control[1],state->pf1_rowscroll32,state->pf1_rowscroll32+0x200);
+ deco32_setup_scroll(state->pf1a_tilemap,512,(state->pf12_control[5]>>0)&0xff,(state->pf12_control[6]>>0)&0xff,state->pf12_control[2],state->pf12_control[1],state->pf1_rowscroll32,state->pf1_rowscroll32+0x200);
+ deco32_setup_scroll(state->pf2_tilemap, 512,(state->pf12_control[5]>>8)&0xff,(state->pf12_control[6]>>8)&0xff,state->pf12_control[4],state->pf12_control[3],state->pf2_rowscroll32,state->pf2_rowscroll32+0x200);
+ deco32_setup_scroll(state->pf3_tilemap, 512,(state->pf34_control[5]>>0)&0xff,(state->pf34_control[6]>>0)&0xff,state->pf34_control[4],state->pf34_control[3],state->pf3_rowscroll32,state->pf3_rowscroll32+0x200);
/* PF1 & PF2 only have enough roms for 1 bank */
state->pf1_bank=0;//(state->pf12_control[7]>> 4)&0xf;
@@ -1007,11 +1007,11 @@ SCREEN_UPDATE( dragngun )
state->pf3_flip=(state->pf34_control[6]>>0)&0x3;
state->pf4_flip=(state->pf34_control[6]>>8)&0x3;
- deco32_setup_scroll(state->pf1_tilemap, 256,(state->pf12_control[5]>>0)&0xff,(state->pf12_control[6]>>0)&0xff,state->pf12_control[2],state->pf12_control[1],state->pf1_rowscroll,state->pf1_rowscroll+0x200);
- deco32_setup_scroll(state->pf1a_tilemap,512,(state->pf12_control[5]>>0)&0xff,(state->pf12_control[6]>>0)&0xff,state->pf12_control[2],state->pf12_control[1],state->pf1_rowscroll,state->pf1_rowscroll+0x200);
- deco32_setup_scroll(state->pf2_tilemap, 512,(state->pf12_control[5]>>8)&0xff,(state->pf12_control[6]>>8)&0xff,state->pf12_control[4],state->pf12_control[3],state->pf2_rowscroll,state->pf2_rowscroll+0x200);
- deco32_setup_scroll(state->pf3_tilemap, 512,(state->pf34_control[5]>>0)&0xff,(state->pf34_control[6]>>0)&0xff,state->pf34_control[2],state->pf34_control[1],state->pf3_rowscroll,state->pf3_rowscroll+0x200);
- deco32_setup_scroll(state->pf4_tilemap, 512,(state->pf34_control[5]>>8)&0xff,(state->pf34_control[6]>>8)&0xff,state->pf34_control[4],state->pf34_control[3],state->pf4_rowscroll,state->pf4_rowscroll+0x200);
+ deco32_setup_scroll(state->pf1_tilemap, 256,(state->pf12_control[5]>>0)&0xff,(state->pf12_control[6]>>0)&0xff,state->pf12_control[2],state->pf12_control[1],state->pf1_rowscroll32,state->pf1_rowscroll32+0x200);
+ deco32_setup_scroll(state->pf1a_tilemap,512,(state->pf12_control[5]>>0)&0xff,(state->pf12_control[6]>>0)&0xff,state->pf12_control[2],state->pf12_control[1],state->pf1_rowscroll32,state->pf1_rowscroll32+0x200);
+ deco32_setup_scroll(state->pf2_tilemap, 512,(state->pf12_control[5]>>8)&0xff,(state->pf12_control[6]>>8)&0xff,state->pf12_control[4],state->pf12_control[3],state->pf2_rowscroll32,state->pf2_rowscroll32+0x200);
+ deco32_setup_scroll(state->pf3_tilemap, 512,(state->pf34_control[5]>>0)&0xff,(state->pf34_control[6]>>0)&0xff,state->pf34_control[2],state->pf34_control[1],state->pf3_rowscroll32,state->pf3_rowscroll32+0x200);
+ deco32_setup_scroll(state->pf4_tilemap, 512,(state->pf34_control[5]>>8)&0xff,(state->pf34_control[6]>>8)&0xff,state->pf34_control[4],state->pf34_control[3],state->pf4_rowscroll32,state->pf4_rowscroll32+0x200);
tilemap_set_enable(state->pf1_tilemap, state->pf12_control[5]&0x0080);
tilemap_set_enable(state->pf1a_tilemap,state->pf12_control[5]&0x0080);
@@ -1052,7 +1052,7 @@ SCREEN_UPDATE( dragngun )
clip.min_y = start;
clip.max_y = end;
- deco32_setup_scroll(state->pf2_tilemap, 512,(state->pf12_control[5]>>8)&0xff,(state->pf12_control[6]>>8)&0xff,state->pf12_control[4],state->pf12_control[3],state->pf2_rowscroll,state->pf2_rowscroll+0x200);
+ deco32_setup_scroll(state->pf2_tilemap, 512,(state->pf12_control[5]>>8)&0xff,(state->pf12_control[6]>>8)&0xff,state->pf12_control[4],state->pf12_control[3],state->pf2_rowscroll32,state->pf2_rowscroll32+0x200);
tilemap_draw(bitmap,&clip,state->pf2_tilemap,0,0);
}
} else {
@@ -1073,65 +1073,35 @@ SCREEN_UPDATE( dragngun )
SCREEN_UPDATE( fghthist )
{
deco32_state *state = screen->machine->driver_data<deco32_state>();
+ state->deco16ic = screen->machine->device("deco_custom");
bitmap_fill(screen->machine->priority_bitmap,cliprect,0);
bitmap_fill(bitmap,cliprect,screen->machine->pens[0x000]); // Palette index not confirmed
- screen->machine->device<decospr_device>("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_buffered, 0x800, true);
-
- /* Dirty tilemaps if any globals change */
- if (state->pf1_flip!=((state->pf12_control[6]>>0)&0x3))
- tilemap_mark_all_tiles_dirty(state->pf1_tilemap);
- if (state->pf2_flip!=((state->pf12_control[6]>>8)&0x3))
- tilemap_mark_all_tiles_dirty(state->pf2_tilemap);
-
- if ((((state->pf12_control[7]>>13)&0x7)<<12)!=state->pf2_bank || state->pf2_flip!=((state->pf12_control[6]>>8)&0x3))
- tilemap_mark_all_tiles_dirty(state->pf2_tilemap);
- if ((((state->pf34_control[7]>> 5)&0x7)<<12)!=state->pf3_bank || state->pf3_flip!=((state->pf34_control[6]>>0)&0x3))
- tilemap_mark_all_tiles_dirty(state->pf3_tilemap);
- if ((((state->pf34_control[7]>>13)&0x7)<<12)!=state->pf4_bank || state->pf4_flip!=((state->pf34_control[6]>>8)&0x3))
- tilemap_mark_all_tiles_dirty(state->pf4_tilemap);
-
- state->pf2_bank=((state->pf12_control[7]>>12)&0x3)<<12;
- state->pf3_bank=((state->pf34_control[7]>> 5)&0x3)<<12; //WRONG WRONG WRONG check masks
- state->pf4_bank=((state->pf34_control[7]>>12)&0x3)<<12;
- state->pf1_flip=(state->pf12_control[6]>>0)&0x3;
- state->pf2_flip=(state->pf12_control[6]>>8)&0x3;
- state->pf3_flip=(state->pf34_control[6]>>0)&0x3;
- state->pf4_flip=(state->pf34_control[6]>>8)&0x3;
-
- /* Enable registers */
- tilemap_set_enable(state->pf1_tilemap, state->pf12_control[5]&0x0080);
- tilemap_set_enable(state->pf2_tilemap, state->pf12_control[5]&0x8000);
- tilemap_set_enable(state->pf3_tilemap, state->pf34_control[5]&0x0080);
- tilemap_set_enable(state->pf4_tilemap, state->pf34_control[5]&0x8000);
+ deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
+ deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll);
- /* Setup scroll registers */
- deco32_setup_scroll(state->pf1_tilemap, 256,(state->pf12_control[5]>>0)&0xff,(state->pf12_control[6]>>0)&0xff,state->pf12_control[2],state->pf12_control[1],state->pf1_rowscroll,state->pf1_rowscroll+0x200);
- deco32_setup_scroll(state->pf2_tilemap, 512,(state->pf12_control[5]>>8)&0xff,(state->pf12_control[6]>>8)&0xff,state->pf12_control[4],state->pf12_control[3],state->pf2_rowscroll,state->pf2_rowscroll+0x200);
- deco32_setup_scroll(state->pf3_tilemap, 512,(state->pf34_control[5]>>0)&0xff,(state->pf34_control[6]>>0)&0xff,state->pf34_control[2],state->pf34_control[1],state->pf3_rowscroll,state->pf3_rowscroll+0x200);
- deco32_setup_scroll(state->pf4_tilemap, 512,(state->pf34_control[5]>>8)&0xff,(state->pf34_control[6]>>8)&0xff,state->pf34_control[4],state->pf34_control[3],state->pf4_rowscroll,state->pf4_rowscroll+0x200);
+ screen->machine->device<decospr_device>("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_buffered, 0x800, true);
/* Draw screen */
- tilemap_draw(bitmap,cliprect,state->pf4_tilemap,0,1);
-
+ deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, 0, 1);
if(state->pri&1)
{
- tilemap_draw(bitmap,cliprect,state->pf2_tilemap,0,2);
+ deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 2);
screen->machine->device<decospr_device>("spritegen")->inefficient_copy_sprite_bitmap(screen->machine, bitmap, cliprect, 0x0800, 0x0800, 1024, 0x1ff);
- tilemap_draw(bitmap,cliprect,state->pf3_tilemap,0,4);
+ deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 4);
}
else
{
- tilemap_draw(bitmap,cliprect,state->pf3_tilemap,0,2);
+ deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2);
screen->machine->device<decospr_device>("spritegen")->inefficient_copy_sprite_bitmap(screen->machine, bitmap, cliprect, 0x0800, 0x0800, 1024, 0x1ff);
- tilemap_draw(bitmap,cliprect,state->pf2_tilemap,0,4);
+ deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 4);
}
screen->machine->device<decospr_device>("spritegen")->inefficient_copy_sprite_bitmap(screen->machine, bitmap, cliprect, 0x0000, 0x0800, 1024, 0x1ff);
- tilemap_draw(bitmap,cliprect,state->pf1_tilemap,0,0);
+ deco16ic_tilemap_1_draw(state->deco16ic, bitmap, cliprect, 0, 0);
return 0;
}
@@ -1302,10 +1272,10 @@ SCREEN_UPDATE( nslasher )
state->pf4_flip=(state->pf34_control[6]>>8)&0x3;
/* Setup scroll registers */
- deco32_setup_scroll(state->pf1_tilemap, 256,(state->pf12_control[5]>>0)&0xff,(state->pf12_control[6]>>0)&0xff,state->pf12_control[2],state->pf12_control[1],state->pf1_rowscroll,state->pf1_rowscroll+0x200);
- deco32_setup_scroll(state->pf2_tilemap, 512,(state->pf12_control[5]>>8)&0xff,(state->pf12_control[6]>>8)&0xff,state->pf12_control[4],state->pf12_control[3],state->pf2_rowscroll,state->pf2_rowscroll+0x200);
- deco32_setup_scroll(state->pf3_tilemap, 512,(state->pf34_control[5]>>0)&0xff,(state->pf34_control[6]>>0)&0xff,state->pf34_control[2],state->pf34_control[1],state->pf3_rowscroll,state->pf3_rowscroll+0x200);
- deco32_setup_scroll(state->pf4_tilemap, 512,(state->pf34_control[5]>>8)&0xff,(state->pf34_control[6]>>8)&0xff,state->pf34_control[4],state->pf34_control[3],state->pf4_rowscroll,state->pf4_rowscroll+0x200);
+ deco32_setup_scroll(state->pf1_tilemap, 256,(state->pf12_control[5]>>0)&0xff,(state->pf12_control[6]>>0)&0xff,state->pf12_control[2],state->pf12_control[1],state->pf1_rowscroll32,state->pf1_rowscroll32+0x200);
+ deco32_setup_scroll(state->pf2_tilemap, 512,(state->pf12_control[5]>>8)&0xff,(state->pf12_control[6]>>8)&0xff,state->pf12_control[4],state->pf12_control[3],state->pf2_rowscroll32,state->pf2_rowscroll32+0x200);
+ deco32_setup_scroll(state->pf3_tilemap, 512,(state->pf34_control[5]>>0)&0xff,(state->pf34_control[6]>>0)&0xff,state->pf34_control[2],state->pf34_control[1],state->pf3_rowscroll32,state->pf3_rowscroll32+0x200);
+ deco32_setup_scroll(state->pf4_tilemap, 512,(state->pf34_control[5]>>8)&0xff,(state->pf34_control[6]>>8)&0xff,state->pf34_control[4],state->pf34_control[3],state->pf4_rowscroll32,state->pf4_rowscroll32+0x200);
/* Enable registers */
tilemap_set_enable(state->pf1_tilemap, state->pf12_control[5]&0x0080);