From e46295473449ad49ec93c5f759dbb8b4f3bf545f Mon Sep 17 00:00:00 2001 From: Fabio Priuli Date: Thu, 25 Feb 2010 12:42:06 +0000 Subject: [PATCH] Converted cbuster.c, cninja.c, dassault.c, funkyjet.c, rohga.c and vaportra.c to use device versions of the deco16 video chips [Fabio Priuli] out of whantsnew: I also fixed a bunch of memory maps which had lost read handlers in my last commit --- src/mame/drivers/boogwing.c | 6 +- src/mame/drivers/cbuster.c | 49 +++++-- src/mame/drivers/cninja.c | 219 ++++++++++++++++++++---------- src/mame/drivers/dassault.c | 54 +++++--- src/mame/drivers/dblewing.c | 68 ++++++---- src/mame/drivers/deco156.c | 118 ++++++++++------- src/mame/drivers/funkyjet.c | 28 ++-- src/mame/drivers/mirage.c | 4 +- src/mame/drivers/pktgaldx.c | 4 +- src/mame/drivers/rohga.c | 148 +++++++++++++-------- src/mame/drivers/supbtime.c | 12 +- src/mame/drivers/tumblep.c | 4 +- src/mame/drivers/vaportra.c | 38 ++++-- src/mame/includes/cninja.h | 9 +- src/mame/video/boogwing.c | 15 +-- src/mame/video/cbuster.c | 60 ++++----- src/mame/video/cninja.c | 257 +++++++++++++++--------------------- src/mame/video/dassault.c | 214 ++++++++++++++++-------------- src/mame/video/decodev.c | 200 ++++++++++------------------ src/mame/video/decodev.h | 11 +- src/mame/video/funkyjet.c | 26 ++-- src/mame/video/rohga.c | 152 +++++++++------------ src/mame/video/vaportra.c | 89 +++++-------- 23 files changed, 929 insertions(+), 856 deletions(-) diff --git a/src/mame/drivers/boogwing.c b/src/mame/drivers/boogwing.c index ac1747e800f..40ab6db4331 100644 --- a/src/mame/drivers/boogwing.c +++ b/src/mame/drivers/boogwing.c @@ -90,7 +90,6 @@ extern UINT16 *boogwing_pf1_rowscroll,*boogwing_pf2_rowscroll; extern UINT16 *boogwing_pf3_rowscroll,*boogwing_pf4_rowscroll; -VIDEO_START(boogwing); VIDEO_UPDATE(boogwing); /**********************************************************************************/ @@ -113,8 +112,8 @@ static ADDRESS_MAP_START( boogwing_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x24e000, 0x24e7ff) AM_WRITE(deco16_104_prot_w) AM_BASE(&deco16_prot_ram) AM_RANGE(0x260000, 0x26000f) AM_DEVWRITE("deco_custom", decodev_pf12_control_w) - AM_RANGE(0x264000, 0x265fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf1_data_w) - AM_RANGE(0x266000, 0x267fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf2_data_w) + AM_RANGE(0x264000, 0x265fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w) + AM_RANGE(0x266000, 0x267fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) AM_RANGE(0x268000, 0x268fff) AM_RAM AM_BASE(&boogwing_pf1_rowscroll) AM_RANGE(0x26a000, 0x26afff) AM_RAM AM_BASE(&boogwing_pf2_rowscroll) @@ -348,7 +347,6 @@ static MACHINE_DRIVER_START( boogwing ) MDRV_PALETTE_LENGTH(2048) MDRV_GFXDECODE(boogwing) - MDRV_VIDEO_START(boogwing) MDRV_VIDEO_UPDATE(boogwing) MDRV_DECO16IC_ADD("deco_custom", boogwing_deco16ic_intf) diff --git a/src/mame/drivers/cbuster.c b/src/mame/drivers/cbuster.c index 87acc39ac32..1b126781dc8 100644 --- a/src/mame/drivers/cbuster.c +++ b/src/mame/drivers/cbuster.c @@ -22,11 +22,13 @@ #include "sound/2203intf.h" #include "sound/2151intf.h" #include "sound/okim6295.h" -#include "includes/deco16ic.h" +#include "video/decodev.h" -VIDEO_START( twocrude ); VIDEO_UPDATE( twocrude ); +extern UINT16 *twocrude_pf1_rowscroll,*twocrude_pf2_rowscroll; +extern UINT16 *twocrude_pf3_rowscroll,*twocrude_pf4_rowscroll; + WRITE16_HANDLER( twocrude_palette_24bit_rg_w ); WRITE16_HANDLER( twocrude_palette_24bit_b_w ); @@ -89,7 +91,7 @@ static WRITE16_HANDLER( twocrude_control_w ) static READ16_HANDLER( twocrude_control_r ) { - switch (offset<<1) + switch (offset << 1) { case 0: /* Player 1 & Player 2 joysticks & fire buttons */ return input_port_read(space->machine, "P1_P2"); @@ -114,20 +116,20 @@ static ADDRESS_MAP_START( twocrude_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x080000, 0x083fff) AM_RAM AM_BASE(&twocrude_ram) - AM_RANGE(0x0a0000, 0x0a1fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) - AM_RANGE(0x0a2000, 0x0a2fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) - AM_RANGE(0x0a4000, 0x0a47ff) AM_RAM AM_BASE(&deco16_pf1_rowscroll) - AM_RANGE(0x0a6000, 0x0a67ff) AM_RAM AM_BASE(&deco16_pf2_rowscroll) + AM_RANGE(0x0a0000, 0x0a1fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w) + AM_RANGE(0x0a2000, 0x0a2fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) + AM_RANGE(0x0a4000, 0x0a47ff) AM_RAM AM_BASE(&twocrude_pf1_rowscroll) + AM_RANGE(0x0a6000, 0x0a67ff) AM_RAM AM_BASE(&twocrude_pf2_rowscroll) - AM_RANGE(0x0a8000, 0x0a8fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) - AM_RANGE(0x0aa000, 0x0aafff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) - AM_RANGE(0x0ac000, 0x0ac7ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) - AM_RANGE(0x0ae000, 0x0ae7ff) AM_RAM AM_BASE(&deco16_pf4_rowscroll) + AM_RANGE(0x0a8000, 0x0a8fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w) + AM_RANGE(0x0aa000, 0x0aafff) AM_DEVREADWRITE("deco_custom", decodev_pf4_data_r, decodev_pf4_data_w) + AM_RANGE(0x0ac000, 0x0ac7ff) AM_RAM AM_BASE(&twocrude_pf3_rowscroll) + AM_RANGE(0x0ae000, 0x0ae7ff) AM_RAM AM_BASE(&twocrude_pf4_rowscroll) AM_RANGE(0x0b0000, 0x0b07ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0x0b4000, 0x0b4001) AM_WRITENOP - AM_RANGE(0x0b5000, 0x0b500f) AM_WRITEONLY AM_BASE(&deco16_pf12_control) - AM_RANGE(0x0b6000, 0x0b600f) AM_WRITEONLY AM_BASE(&deco16_pf34_control) + AM_RANGE(0x0b5000, 0x0b500f) AM_DEVWRITE("deco_custom", decodev_pf12_control_w) + AM_RANGE(0x0b6000, 0x0b600f) AM_DEVWRITE("deco_custom", decodev_pf34_control_w) AM_RANGE(0x0b8000, 0x0b8fff) AM_RAM_WRITE(twocrude_palette_24bit_rg_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x0b9000, 0x0b9fff) AM_RAM_WRITE(twocrude_palette_24bit_b_w) AM_BASE_GENERIC(paletteram2) AM_RANGE(0x0bc000, 0x0bc00f) AM_READWRITE(twocrude_control_r, twocrude_control_w) @@ -280,6 +282,24 @@ static const ym2151_interface ym2151_config = sound_irq }; +static int twocrude_bank_callback( const int bank ) +{ + return ((bank >> 4) & 0x7) * 0x1000; +} + +static const deco16ic_interface twocrude_deco16ic_intf = +{ + "screen", + 0, 0, 1, + 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ + 0x00, 0x20, 0x30, 0x40, /* color base (default values) */ + 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + twocrude_bank_callback, + twocrude_bank_callback, + twocrude_bank_callback, + twocrude_bank_callback +}; + static MACHINE_DRIVER_START( twocrude ) /* basic machine hardware */ @@ -303,9 +323,10 @@ static MACHINE_DRIVER_START( twocrude ) MDRV_GFXDECODE(cbuster) MDRV_PALETTE_LENGTH(2048) - MDRV_VIDEO_START(twocrude) MDRV_VIDEO_UPDATE(twocrude) + MDRV_DECO16IC_ADD("deco_custom", twocrude_deco16ic_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/drivers/cninja.c b/src/mame/drivers/cninja.c index 4678cb567cb..60b797da41e 100644 --- a/src/mame/drivers/cninja.c +++ b/src/mame/drivers/cninja.c @@ -43,14 +43,14 @@ Note about version levels using Mutant Fighter as the example: #include "emu.h" #include "cpu/z80/z80.h" #include "cpu/m68000/m68000.h" -#include "includes/cninja.h" #include "cpu/h6280/h6280.h" -#include "includes/deco16ic.h" +#include "includes/cninja.h" #include "includes/decocrpt.h" #include "includes/decoprot.h" #include "sound/2203intf.h" #include "sound/2151intf.h" #include "sound/okim6295.h" +#include "video/decodev.h" static int cninja_scanline, cninja_irq_mask; static running_device *raster_irq_timer; @@ -144,14 +144,16 @@ static READ16_HANDLER( robocop2_prot_r ) static WRITE16_HANDLER( deco16_pf12_control_w ) { - COMBINE_DATA(&deco16_pf12_control[offset]); + running_device *deco16ic = devtag_get_device(space->machine, "deco_custom"); + decodev_pf12_control_w(deco16ic, offset, data, mem_mask); video_screen_update_partial(space->machine->primary_screen, video_screen_get_vpos(space->machine->primary_screen)); } static WRITE16_HANDLER( deco16_pf34_control_w ) { - COMBINE_DATA(&deco16_pf34_control[offset]); + running_device *deco16ic = devtag_get_device(space->machine, "deco_custom"); + decodev_pf34_control_w(deco16ic, offset, data, mem_mask); video_screen_update_partial(space->machine->primary_screen, video_screen_get_vpos(space->machine->primary_screen)); } @@ -159,21 +161,21 @@ static WRITE16_HANDLER( deco16_pf34_control_w ) static ADDRESS_MAP_START( cninja_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0bffff) AM_ROM - AM_RANGE(0x140000, 0x14000f) AM_WRITE(deco16_pf12_control_w) AM_BASE(&deco16_pf12_control) - AM_RANGE(0x144000, 0x144fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) - AM_RANGE(0x146000, 0x146fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) - AM_RANGE(0x14c000, 0x14c7ff) AM_WRITEONLY AM_BASE(&deco16_pf1_rowscroll) - AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE(&deco16_pf2_rowscroll) + AM_RANGE(0x140000, 0x14000f) AM_WRITE(deco16_pf12_control_w) + AM_RANGE(0x144000, 0x144fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w) + AM_RANGE(0x146000, 0x146fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) + AM_RANGE(0x14c000, 0x14c7ff) AM_WRITEONLY AM_BASE(&cninja_pf1_rowscroll) + AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE(&cninja_pf2_rowscroll) - AM_RANGE(0x150000, 0x15000f) AM_WRITE(deco16_pf34_control_w) AM_BASE(&deco16_pf34_control) - AM_RANGE(0x154000, 0x154fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) - AM_RANGE(0x156000, 0x156fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) - AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) - AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE(&deco16_pf4_rowscroll) + AM_RANGE(0x150000, 0x15000f) AM_WRITE(deco16_pf34_control_w) + AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w) + AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom", decodev_pf4_data_r, decodev_pf4_data_w) + AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE(&cninja_pf3_rowscroll) + AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE(&cninja_pf4_rowscroll) AM_RANGE(0x184000, 0x187fff) AM_RAM AM_BASE(&cninja_ram) AM_RANGE(0x190000, 0x190007) AM_READWRITE(cninja_irq_r, cninja_irq_w) - AM_RANGE(0x19c000, 0x19dfff) AM_RAM_WRITE(deco16_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram) + AM_RANGE(0x19c000, 0x19dfff) AM_RAM_DEVWRITE("deco_custom", decodev_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x1a4000, 0x1a47ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) /* Sprites */ AM_RANGE(0x1b4000, 0x1b4001) AM_WRITE(buffer_spriteram16_w) /* DMA flag */ @@ -193,27 +195,27 @@ static ADDRESS_MAP_START( cninjabl_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x138000, 0x1387ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) /* bootleg sprite-ram (sprites rewritten here in new format) */ - AM_RANGE(0x140000, 0x14000f) AM_WRITE(deco16_pf12_control_w) AM_BASE(&deco16_pf12_control) - AM_RANGE(0x144000, 0x144fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) - AM_RANGE(0x146000, 0x146fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) - AM_RANGE(0x14c000, 0x14c7ff) AM_WRITEONLY AM_BASE(&deco16_pf1_rowscroll) - AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE(&deco16_pf2_rowscroll) + AM_RANGE(0x140000, 0x14000f) AM_WRITE(deco16_pf12_control_w) + AM_RANGE(0x144000, 0x144fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w) + AM_RANGE(0x146000, 0x146fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) + AM_RANGE(0x14c000, 0x14c7ff) AM_WRITEONLY AM_BASE(&cninja_pf1_rowscroll) + AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE(&cninja_pf2_rowscroll) - AM_RANGE(0x150000, 0x15000f) AM_WRITE(deco16_pf34_control_w) AM_BASE(&deco16_pf34_control) // not used / incorrect on this - AM_RANGE(0x154000, 0x154fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) - AM_RANGE(0x156000, 0x156fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) - AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) - AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE(&deco16_pf4_rowscroll) + AM_RANGE(0x150000, 0x15000f) AM_WRITE(deco16_pf34_control_w) // not used / incorrect on this + AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w) + AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom", decodev_pf4_data_r, decodev_pf4_data_w) + AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE(&cninja_pf3_rowscroll) + AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE(&cninja_pf4_rowscroll) AM_RANGE(0x17ff22, 0x17ff23) AM_READ_PORT("DSW") AM_RANGE(0x17ff28, 0x17ff29) AM_READ_PORT("IN1") - AM_RANGE(0x17ff2a, 0x17ff2b) AM_WRITE( cninjabl_soundlatch_w ) + AM_RANGE(0x17ff2a, 0x17ff2b) AM_WRITE(cninjabl_soundlatch_w) AM_RANGE(0x17ff2c, 0x17ff2d) AM_READ_PORT("IN0") AM_RANGE(0x180000, 0x187fff) AM_RAM // more ram on bootleg? AM_RANGE(0x190000, 0x190007) AM_READWRITE(cninja_irq_r, cninja_irq_w) - AM_RANGE(0x19c000, 0x19dfff) AM_RAM_WRITE(deco16_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram) + AM_RANGE(0x19c000, 0x19dfff) AM_RAM_DEVWRITE("deco_custom", decodev_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x1b4000, 0x1b4001) AM_WRITE(buffer_spriteram16_w) /* DMA flag */ ADDRESS_MAP_END @@ -221,19 +223,19 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( edrandy_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x140000, 0x14000f) AM_WRITE(deco16_pf12_control_w) AM_BASE(&deco16_pf12_control) - AM_RANGE(0x144000, 0x144fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) - AM_RANGE(0x146000, 0x146fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) - AM_RANGE(0x14c000, 0x14c7ff) AM_RAM AM_BASE(&deco16_pf1_rowscroll) - AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE(&deco16_pf2_rowscroll) + AM_RANGE(0x140000, 0x14000f) AM_WRITE(deco16_pf12_control_w) + AM_RANGE(0x144000, 0x144fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w) + AM_RANGE(0x146000, 0x146fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) + AM_RANGE(0x14c000, 0x14c7ff) AM_RAM AM_BASE(&cninja_pf1_rowscroll) + AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE(&cninja_pf2_rowscroll) - AM_RANGE(0x150000, 0x15000f) AM_WRITE(deco16_pf34_control_w) AM_BASE(&deco16_pf34_control) - AM_RANGE(0x154000, 0x154fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) - AM_RANGE(0x156000, 0x156fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) - AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) - AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE(&deco16_pf4_rowscroll) + AM_RANGE(0x150000, 0x15000f) AM_WRITE(deco16_pf34_control_w) + AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w) + AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom", decodev_pf4_data_r, decodev_pf4_data_w) + AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE(&cninja_pf3_rowscroll) + AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE(&cninja_pf4_rowscroll) - AM_RANGE(0x188000, 0x189fff) AM_RAM_WRITE(deco16_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram) + AM_RANGE(0x188000, 0x189fff) AM_RAM_DEVWRITE("deco_custom", decodev_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x194000, 0x197fff) AM_RAM AM_BASE(&cninja_ram) /* Main ram */ AM_RANGE(0x198000, 0x1987ff) AM_READWRITE(deco16_60_prot_r, deco16_60_prot_w) AM_BASE(&deco16_prot_ram) /* Protection device */ AM_RANGE(0x199550, 0x199551) AM_WRITENOP /* Looks like a bug in game code, a protection write is referenced off a5 instead of a6 and ends up here */ @@ -249,27 +251,27 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( robocop2_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x140000, 0x14000f) AM_WRITE(deco16_pf12_control_w) AM_BASE(&deco16_pf12_control) - AM_RANGE(0x144000, 0x144fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) - AM_RANGE(0x146000, 0x146fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) - AM_RANGE(0x14c000, 0x14c7ff) AM_RAM AM_BASE(&deco16_pf1_rowscroll) - AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE(&deco16_pf2_rowscroll) + AM_RANGE(0x140000, 0x14000f) AM_WRITE(deco16_pf12_control_w) + AM_RANGE(0x144000, 0x144fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w) + AM_RANGE(0x146000, 0x146fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) + AM_RANGE(0x14c000, 0x14c7ff) AM_RAM AM_BASE(&cninja_pf1_rowscroll) + AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE(&cninja_pf2_rowscroll) - AM_RANGE(0x150000, 0x15000f) AM_WRITE(deco16_pf34_control_w) AM_BASE(&deco16_pf34_control) - AM_RANGE(0x154000, 0x154fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) - AM_RANGE(0x156000, 0x156fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) - AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) - AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE(&deco16_pf4_rowscroll) + AM_RANGE(0x150000, 0x15000f) AM_WRITE(deco16_pf34_control_w) + AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w) + AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom", decodev_pf4_data_r, decodev_pf4_data_w) + AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE(&cninja_pf3_rowscroll) + AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE(&cninja_pf4_rowscroll) AM_RANGE(0x180000, 0x1807ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) // AM_RANGE(0x18c000, 0x18c0ff) AM_WRITE(cninja_loopback_w) /* Protection writes */ AM_RANGE(0x18c000, 0x18c7ff) AM_READ(robocop2_prot_r) /* Protection device */ AM_RANGE(0x18c064, 0x18c065) AM_WRITE(cninja_sound_w) AM_RANGE(0x198000, 0x198001) AM_WRITE(buffer_spriteram16_w) /* DMA flag */ - AM_RANGE(0x1a8000, 0x1a9fff) AM_RAM_WRITE(deco16_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram) + AM_RANGE(0x1a8000, 0x1a9fff) AM_RAM_DEVWRITE("deco_custom", decodev_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x1b0000, 0x1b0007) AM_READWRITE(cninja_irq_r, cninja_irq_w) AM_RANGE(0x1b8000, 0x1bbfff) AM_RAM AM_BASE(&cninja_ram) /* Main ram */ - AM_RANGE(0x1f0000, 0x1f0001) AM_WRITE(deco16_priority_w) + AM_RANGE(0x1f0000, 0x1f0001) AM_DEVWRITE("deco_custom", decodev_priority_w) AM_RANGE(0x1f8000, 0x1f8001) AM_READ_PORT("DSW3") /* Dipswitch #3 */ ADDRESS_MAP_END @@ -278,24 +280,24 @@ static ADDRESS_MAP_START( mutantf_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x100000, 0x103fff) AM_RAM AM_RANGE(0x120000, 0x1207ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0x140000, 0x1407ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram2) - AM_RANGE(0x160000, 0x161fff) AM_RAM_WRITE(deco16_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0x180000, 0x180001) AM_WRITE(deco16_priority_w) + AM_RANGE(0x160000, 0x161fff) AM_RAM_DEVWRITE("deco_custom", decodev_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram) + AM_RANGE(0x180000, 0x180001) AM_DEVWRITE("deco_custom", decodev_priority_w) AM_RANGE(0x180002, 0x180003) AM_WRITENOP /* VBL irq ack */ AM_RANGE(0x1a0000, 0x1a07ff) AM_READWRITE(deco16_66_prot_r, deco16_66_prot_w) AM_BASE(&deco16_prot_ram) /* Protection device */ - AM_RANGE(0x1c0000, 0x1c0001) AM_READWRITE(deco16_71_r, buffer_spriteram16_w) + AM_RANGE(0x1c0000, 0x1c0001) AM_WRITE(buffer_spriteram16_w) AM_DEVREAD("deco_custom", decodev_71_r) AM_RANGE(0x1e0000, 0x1e0001) AM_WRITE(buffer_spriteram16_2_w) - AM_RANGE(0x300000, 0x30000f) AM_WRITE(deco16_pf12_control_w) AM_BASE(&deco16_pf12_control) - AM_RANGE(0x304000, 0x305fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) - AM_RANGE(0x306000, 0x307fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) - AM_RANGE(0x308000, 0x3087ff) AM_RAM AM_BASE(&deco16_pf1_rowscroll) - AM_RANGE(0x30a000, 0x30a7ff) AM_RAM AM_BASE(&deco16_pf2_rowscroll) + AM_RANGE(0x300000, 0x30000f) AM_WRITE(deco16_pf12_control_w) + AM_RANGE(0x304000, 0x305fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w) + AM_RANGE(0x306000, 0x307fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) + AM_RANGE(0x308000, 0x3087ff) AM_RAM AM_BASE(&cninja_pf1_rowscroll) + AM_RANGE(0x30a000, 0x30a7ff) AM_RAM AM_BASE(&cninja_pf2_rowscroll) - AM_RANGE(0x310000, 0x31000f) AM_WRITE(deco16_pf34_control_w) AM_BASE(&deco16_pf34_control) - AM_RANGE(0x314000, 0x315fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) - AM_RANGE(0x316000, 0x317fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) - AM_RANGE(0x318000, 0x3187ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) - AM_RANGE(0x31a000, 0x31a7ff) AM_RAM AM_BASE(&deco16_pf4_rowscroll) + AM_RANGE(0x310000, 0x31000f) AM_WRITE(deco16_pf34_control_w) + AM_RANGE(0x314000, 0x315fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w) + AM_RANGE(0x316000, 0x317fff) AM_DEVREADWRITE("deco_custom", decodev_pf4_data_r, decodev_pf4_data_w) + AM_RANGE(0x318000, 0x3187ff) AM_RAM AM_BASE(&cninja_pf3_rowscroll) + AM_RANGE(0x31a000, 0x31a7ff) AM_RAM AM_BASE(&cninja_pf4_rowscroll) AM_RANGE(0xad00ac, 0xad00ff) AM_READNOP /* Reads from here seem to be a game code bug */ ADDRESS_MAP_END @@ -746,6 +748,80 @@ static const ym2151_interface ym2151_interface2 = /**********************************************************************************/ +static int cninja_bank_callback( const int bank ) +{ + if ((bank >> 4) & 0xf) + return 0x0000; /* Only 2 banks */ + return 0x1000; +} + +static int robocop2_bank_callback( const int bank ) +{ + return (bank & 0x30) << 8; +} + +static int mutantf_1_bank_callback( const int bank ) +{ + return ((bank >> 4) & 0x3) << 12; +} + +static int mutantf_2_bank_callback( const int bank ) +{ + return ((bank >> 5) & 0x1) << 14; +} + +static const deco16ic_interface cninja_deco16ic_intf = +{ + "screen", + 0, 1, 1, + 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, 0, 48, /* color base */ + 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + NULL, + NULL, + cninja_bank_callback, + cninja_bank_callback +}; + +static const deco16ic_interface edrandy_deco16ic_intf = +{ + "screen", + 0, 0, 1, + 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, 0, 48, /* color base */ + 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + NULL, + NULL, + cninja_bank_callback, + cninja_bank_callback +}; + +static const deco16ic_interface robocop2_deco16ic_intf = +{ + "screen", + 0, 0, 1, + 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, 0, 48, /* color base */ + 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + NULL, + robocop2_bank_callback, + robocop2_bank_callback, + robocop2_bank_callback +}; + +static const deco16ic_interface mutantf_deco16ic_intf = +{ + "screen", + 0, 0, 1, + 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ + 0, 0x30, 0x20, 0x40, /* color base */ + 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + mutantf_1_bank_callback, + mutantf_2_bank_callback, + mutantf_1_bank_callback, + mutantf_1_bank_callback +}; + static MACHINE_DRIVER_START( cninja ) /* basic machine hardware */ @@ -772,9 +848,10 @@ static MACHINE_DRIVER_START( cninja ) MDRV_GFXDECODE(cninja) MDRV_PALETTE_LENGTH(2048) - MDRV_VIDEO_START(cninja) MDRV_VIDEO_UPDATE(cninja) + MDRV_DECO16IC_ADD("deco_custom", cninja_deco16ic_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") @@ -824,6 +901,8 @@ static MACHINE_DRIVER_START( stoneage ) MDRV_VIDEO_START(stoneage) MDRV_VIDEO_UPDATE(cninja) + MDRV_DECO16IC_ADD("deco_custom", cninja_deco16ic_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") @@ -868,9 +947,10 @@ static MACHINE_DRIVER_START( cninjabl ) MDRV_GFXDECODE(cninjabl) MDRV_PALETTE_LENGTH(2048) - MDRV_VIDEO_START(cninja) MDRV_VIDEO_UPDATE(cninjabl) + MDRV_DECO16IC_ADD("deco_custom", cninja_deco16ic_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") @@ -911,9 +991,10 @@ static MACHINE_DRIVER_START( edrandy ) MDRV_GFXDECODE(cninja) MDRV_PALETTE_LENGTH(2048) - MDRV_VIDEO_START(edrandy) MDRV_VIDEO_UPDATE(edrandy) + MDRV_DECO16IC_ADD("deco_custom", edrandy_deco16ic_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") @@ -960,9 +1041,10 @@ static MACHINE_DRIVER_START( robocop2 ) MDRV_GFXDECODE(robocop2) MDRV_PALETTE_LENGTH(2048) - MDRV_VIDEO_START(robocop2) MDRV_VIDEO_UPDATE(robocop2) + MDRV_DECO16IC_ADD("deco_custom", robocop2_deco16ic_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") @@ -1008,9 +1090,10 @@ static MACHINE_DRIVER_START( mutantf ) MDRV_GFXDECODE(mutantf) MDRV_PALETTE_LENGTH(2048) - MDRV_VIDEO_START(mutantf) MDRV_VIDEO_UPDATE(mutantf) + MDRV_DECO16IC_ADD("deco_custom", mutantf_deco16ic_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") diff --git a/src/mame/drivers/dassault.c b/src/mame/drivers/dassault.c index 334c255eca8..2b45f1d113d 100644 --- a/src/mame/drivers/dassault.c +++ b/src/mame/drivers/dassault.c @@ -124,12 +124,13 @@ Dip locations verified with US conversion kit manual. #include "emu.h" #include "cpu/m68000/m68000.h" #include "cpu/h6280/h6280.h" -#include "includes/deco16ic.h" #include "sound/2203intf.h" #include "sound/2151intf.h" #include "sound/okim6295.h" +#include "video/decodev.h" + +extern UINT16 *dassault_pf2_rowscroll,*dassault_pf4_rowscroll; -VIDEO_START( dassault ); VIDEO_UPDATE( dassault ); static UINT16 *dassault_ram,*shared_ram,*dassault_ram2; @@ -138,7 +139,7 @@ static UINT16 *dassault_ram,*shared_ram,*dassault_ram2; static READ16_HANDLER( dassault_control_r ) { - switch (offset<<1) + switch (offset << 1) { case 0: /* Player 1 & Player 2 joysticks & fire buttons */ return input_port_read(space->machine, "P1_P2"); @@ -161,9 +162,9 @@ static READ16_HANDLER( dassault_control_r ) static WRITE16_HANDLER( dassault_control_w ) { - coin_counter_w(space->machine, 0,data&1); - if (data&0xfffe) - logerror("Coin cointrol %04x\n",data); + coin_counter_w(space->machine, 0, data & 1); + if (data & 0xfffe) + logerror("Coin cointrol %04x\n", data); } static READ16_HANDLER( dassault_sub_control_r ) @@ -213,25 +214,25 @@ static READ16_HANDLER( shared_ram_r ) static ADDRESS_MAP_START( dassault_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM - AM_RANGE(0x100000, 0x103fff) AM_RAM_WRITE(deco16_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram) + AM_RANGE(0x100000, 0x103fff) AM_RAM_DEVWRITE("deco_custom", decodev_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x140004, 0x140007) AM_WRITENOP /* ? */ AM_RANGE(0x180000, 0x180001) AM_WRITE(dassault_sound_w) AM_RANGE(0x1c0000, 0x1c000f) AM_READ(dassault_control_r) - AM_RANGE(0x1c000a, 0x1c000b) AM_WRITE(deco16_priority_w) + AM_RANGE(0x1c000a, 0x1c000b) AM_DEVWRITE("deco_custom", decodev_priority_w) AM_RANGE(0x1c000c, 0x1c000d) AM_WRITE(buffer_spriteram16_2_w) AM_RANGE(0x1c000e, 0x1c000f) AM_WRITE(dassault_control_w) - AM_RANGE(0x200000, 0x201fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) - AM_RANGE(0x202000, 0x203fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) - AM_RANGE(0x212000, 0x212fff) AM_WRITEONLY AM_BASE(&deco16_pf2_rowscroll) - AM_RANGE(0x220000, 0x22000f) AM_WRITEONLY AM_BASE(&deco16_pf12_control) + AM_RANGE(0x200000, 0x201fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w) + AM_RANGE(0x202000, 0x203fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) + AM_RANGE(0x212000, 0x212fff) AM_WRITEONLY AM_BASE(&dassault_pf2_rowscroll) + AM_RANGE(0x220000, 0x22000f) AM_DEVWRITE("deco_custom", decodev_pf12_control_w) - AM_RANGE(0x240000, 0x240fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) - AM_RANGE(0x242000, 0x242fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) - AM_RANGE(0x252000, 0x252fff) AM_WRITEONLY AM_BASE(&deco16_pf4_rowscroll) - AM_RANGE(0x260000, 0x26000f) AM_WRITEONLY AM_BASE(&deco16_pf34_control) + AM_RANGE(0x240000, 0x240fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w) + AM_RANGE(0x242000, 0x242fff) AM_DEVREADWRITE("deco_custom", decodev_pf4_data_r, decodev_pf4_data_w) + AM_RANGE(0x252000, 0x252fff) AM_WRITEONLY AM_BASE(&dassault_pf4_rowscroll) + AM_RANGE(0x260000, 0x26000f) AM_DEVWRITE("deco_custom", decodev_pf34_control_w) AM_RANGE(0x3f8000, 0x3fbfff) AM_RAM AM_BASE(&dassault_ram) /* Main ram */ AM_RANGE(0x3fc000, 0x3fcfff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram2) /* Spriteram (2nd) */ @@ -527,6 +528,24 @@ static const ym2151_interface ym2151_config = /**********************************************************************************/ +static int dassault_bank_callback( const int bank ) +{ + return ((bank >> 4) & 0xf) << 12; +} + +static const deco16ic_interface dassault_deco16ic_intf = +{ + "screen", + 0, 0, 1, + 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, 0, 16, /* color base (default values) */ + 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + dassault_bank_callback, + dassault_bank_callback, + dassault_bank_callback, + dassault_bank_callback +}; + static MACHINE_DRIVER_START( dassault ) /* basic machine hardware */ @@ -556,9 +575,10 @@ static MACHINE_DRIVER_START( dassault ) MDRV_GFXDECODE(dassault) MDRV_PALETTE_LENGTH(4096) - MDRV_VIDEO_START(dassault) MDRV_VIDEO_UPDATE(dassault) + MDRV_DECO16IC_ADD("deco_custom", dassault_deco16ic_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") diff --git a/src/mame/drivers/dblewing.c b/src/mame/drivers/dblewing.c index 0401d53e8b2..dcb89d448dd 100644 --- a/src/mame/drivers/dblewing.c +++ b/src/mame/drivers/dblewing.c @@ -21,9 +21,9 @@ Protection TODO: #include "cpu/z80/z80.h" #include "cpu/m68000/m68000.h" #include "includes/decocrpt.h" -#include "includes/deco16ic.h" #include "sound/2151intf.h" #include "sound/okim6295.h" +#include "video/decodev.h" /* @@ -55,6 +55,7 @@ x = xpos */ +static UINT16 *dblewing_pf1_rowscroll,*dblewing_pf2_rowscroll; static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect) { @@ -93,7 +94,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan if (x >= 320) x -= 512; if (y >= 256) y -= 512; y = 240 - y; - x = 304 - x; + x = 304 - x; if (x>320) continue; @@ -141,30 +142,20 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan } } -static int dblewing_bank_callback(const int bank) -{ - return ((bank>>4) & 0x7) * 0x1000; -} - -static VIDEO_START(dblewing) -{ - deco16_1_video_init(machine); - - deco16_set_tilemap_bank_callback(0,dblewing_bank_callback); - deco16_set_tilemap_bank_callback(1,dblewing_bank_callback); -} - static VIDEO_UPDATE(dblewing) { - flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); - deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); + running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom"); + UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff); - bitmap_fill(bitmap,cliprect,0); /* not Confirmed */ - bitmap_fill(screen->machine->priority_bitmap,NULL,0); + flip_screen_set(screen->machine, BIT(flip, 7)); + decodev_pf12_update(deco16ic, dblewing_pf1_rowscroll, dblewing_pf2_rowscroll); - deco16_tilemap_2_draw(screen,bitmap,cliprect,0,2); - deco16_tilemap_1_draw(screen,bitmap,cliprect,0,4); - draw_sprites(screen->machine,bitmap,cliprect); + bitmap_fill(bitmap, cliprect, 0); /* not Confirmed */ + bitmap_fill(screen->machine->priority_bitmap, NULL, 0); + + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 2); + decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 4); + draw_sprites(screen->machine, bitmap, cliprect); return 0; } @@ -386,17 +377,17 @@ static WRITE16_HANDLER( dblewing_prot_w ) static ADDRESS_MAP_START( dblewing_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM - AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) - AM_RANGE(0x102000, 0x102fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) - AM_RANGE(0x104000, 0x104fff) AM_RAM AM_BASE(&deco16_pf1_rowscroll) - AM_RANGE(0x106000, 0x106fff) AM_RAM AM_BASE(&deco16_pf2_rowscroll) + AM_RANGE(0x100000, 0x100fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w) + AM_RANGE(0x102000, 0x102fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) + AM_RANGE(0x104000, 0x104fff) AM_RAM AM_BASE(&dblewing_pf1_rowscroll) + AM_RANGE(0x106000, 0x106fff) AM_RAM AM_BASE(&dblewing_pf2_rowscroll) /* protection */ // AM_RANGE(0x280104, 0x280105) AM_WRITENOP // ?? // AM_RANGE(0x2800ac, 0x2800ad) AM_READ_PORT("DSW") // dips // AM_RANGE(0x280298, 0x280299) AM_READ_PORT("SYSTEM") // vbl // AM_RANGE(0x280506, 0x280507) AM_READ_PORT("UNK") -// AM_RANGE(0x2802B4, 0x2802B5) AM_READ_PORT("P1_P2") // inverted? +// AM_RANGE(0x2802b4, 0x2802b5) AM_READ_PORT("P1_P2") // inverted? // AM_RANGE(0x280330, 0x280331) AM_READNOP // sound? // AM_RANGE(0x280380, 0x280381) AM_WRITENOP // sound @@ -405,7 +396,7 @@ static ADDRESS_MAP_START( dblewing_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x284000, 0x284001) AM_RAM AM_RANGE(0x288000, 0x288001) AM_RAM - AM_RANGE(0x28C000, 0x28C00f) AM_RAM AM_BASE(&deco16_pf12_control) + AM_RANGE(0x28c000, 0x28c00f) AM_RAM_DEVWRITE("deco_custom", decodev_pf12_control_w) AM_RANGE(0x300000, 0x3007ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0x320000, 0x3207ff) AM_RAM_WRITE(paletteram16_xxxxBBBBGGGGRRRR_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0xff0000, 0xff3fff) AM_MIRROR(0xc000) AM_RAM @@ -616,6 +607,24 @@ static const ym2151_interface ym2151_config = sound_irq }; +static int dblewing_bank_callback( const int bank ) +{ + return ((bank >> 4) & 0x7) * 0x1000; +} + +static const deco16ic_interface dblewing_deco16ic_intf = +{ + "screen", + 1, 0, 1, + 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, 0, 16, /* color base (default values) */ + 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + dblewing_bank_callback, + dblewing_bank_callback, + NULL, + NULL +}; + static MACHINE_DRIVER_START( dblewing ) /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 14000000) /* DE102 */ @@ -639,9 +648,10 @@ static MACHINE_DRIVER_START( dblewing ) MDRV_PALETTE_LENGTH(4096) MDRV_GFXDECODE(dblewing) - MDRV_VIDEO_START(dblewing) MDRV_VIDEO_UPDATE(dblewing) + MDRV_DECO16IC_ADD("deco_custom", dblewing_deco16ic_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/drivers/deco156.c b/src/mame/drivers/deco156.c index 4dc40c0c346..5c9be39c6ec 100644 --- a/src/mame/drivers/deco156.c +++ b/src/mame/drivers/deco156.c @@ -13,43 +13,29 @@ */ #define DE156CPU ARM + #include "emu.h" +#include "cpu/arm/arm.h" #include "includes/decocrpt.h" -#include "includes/deco32.h" #include "machine/eeprom.h" #include "sound/okim6295.h" #include "sound/ymz280b.h" -#include "cpu/arm/arm.h" -#include "includes/deco16ic.h" +#include "video/decodev.h" -static int simpl156_bank_callback(const int bank) -{ - return ((bank>>4)&0x7) * 0x1000; -} +static UINT16 *deco156_pf1_rowscroll,*deco156_pf2_rowscroll; static VIDEO_START( wcvol95 ) { /* allocate the ram as 16-bit (we do it here because the CPU is 32-bit) */ - deco16_pf1_data = auto_alloc_array(machine, UINT16, 0x2000/2); - deco16_pf2_data = auto_alloc_array(machine, UINT16, 0x2000/2); - deco16_pf1_rowscroll = auto_alloc_array(machine, UINT16, 0x800/2); - deco16_pf2_rowscroll = auto_alloc_array(machine, UINT16, 0x800/2); - deco16_pf12_control = auto_alloc_array(machine, UINT16, 0x10/2); + deco156_pf1_rowscroll = auto_alloc_array(machine, UINT16, 0x800/2); + deco156_pf2_rowscroll = auto_alloc_array(machine, UINT16, 0x800/2); machine->generic.paletteram.u16 = auto_alloc_array(machine, UINT16, 0x1000/2); /* and register the allocated ram so that save states still work */ - state_save_register_global_pointer(machine, deco16_pf1_data, 0x2000/2); - state_save_register_global_pointer(machine, deco16_pf2_data, 0x2000/2); - state_save_register_global_pointer(machine, deco16_pf1_rowscroll, 0x800/2); - state_save_register_global_pointer(machine, deco16_pf2_rowscroll, 0x800/2); - state_save_register_global_pointer(machine, deco16_pf12_control, 0x10/2); + state_save_register_global_pointer(machine, deco156_pf1_rowscroll, 0x800/2); + state_save_register_global_pointer(machine, deco156_pf2_rowscroll, 0x800/2); state_save_register_global_pointer(machine, machine->generic.paletteram.u16, 0x1000/2); - - deco16_1_video_init(machine); - - deco16_set_tilemap_bank_callback(0, simpl156_bank_callback); - deco16_set_tilemap_bank_callback(1, simpl156_bank_callback); } /* spriteram is really 16-bit.. this can be changed to use 16-bit ram like the tilemaps @@ -92,7 +78,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan if (x >= 320) x -= 512; if (y >= 256) y -= 512; y = 240 - y; - x = 304 - x; + x = 304 - x; if (x>320) continue; @@ -133,14 +119,16 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan static VIDEO_UPDATE( wcvol95 ) { - bitmap_fill(screen->machine->priority_bitmap,NULL,0); - bitmap_fill(bitmap,NULL,0); + running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom"); - deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); + bitmap_fill(screen->machine->priority_bitmap, NULL, 0); + bitmap_fill(bitmap, NULL, 0); - deco16_tilemap_2_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,0); - draw_sprites(screen->machine,bitmap,cliprect); - deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); + decodev_pf12_update(deco16ic, deco156_pf1_rowscroll, deco156_pf2_rowscroll); + + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + draw_sprites(screen->machine, bitmap, cliprect); + decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0); return 0; } @@ -166,17 +154,25 @@ static WRITE32_HANDLER(wcvol95_nonbuffered_palette_w) palette_set_color_rgb(space->machine,offset,pal5bit(space->machine->generic.paletteram.u32[offset] >> 0),pal5bit(space->machine->generic.paletteram.u32[offset] >> 5),pal5bit(space->machine->generic.paletteram.u32[offset] >> 10)); } +/* This is the same as deco32_nonbuffered_palette_w in video/deco32.c */ +static WRITE32_HANDLER( deco156_nonbuffered_palette_w ) +{ + int r,g,b; + + COMBINE_DATA(&space->machine->generic.paletteram.u32[offset]); + + b = (space->machine->generic.paletteram.u32[offset] >>16) & 0xff; + g = (space->machine->generic.paletteram.u32[offset] >> 8) & 0xff; + r = (space->machine->generic.paletteram.u32[offset] >> 0) & 0xff; + + palette_set_color(space->machine,offset,MAKE_RGB(r,g,b)); +} + /***************************************************************************/ -static READ32_HANDLER( wcvol95_pf1_rowscroll_r ) { return deco16_pf1_rowscroll[offset]^0xffff0000; } -static READ32_HANDLER( wcvol95_pf2_rowscroll_r ) { return deco16_pf2_rowscroll[offset]^0xffff0000; } -static WRITE32_HANDLER( wcvol95_pf1_rowscroll_w ) { data &=0x0000ffff; mem_mask &=0x0000ffff; COMBINE_DATA(&deco16_pf1_rowscroll[offset]); } -static WRITE32_HANDLER( wcvol95_pf2_rowscroll_w ) { data &=0x0000ffff; mem_mask &=0x0000ffff; COMBINE_DATA(&deco16_pf2_rowscroll[offset]); } -static READ32_HANDLER ( wcvol95_pf12_control_r ) { return deco16_pf12_control[offset]^0xffff0000; } -static WRITE32_HANDLER( wcvol95_pf12_control_w ) { data &=0x0000ffff; mem_mask &=0x0000ffff; COMBINE_DATA(&deco16_pf12_control[offset]); } -static READ32_HANDLER( wcvol95_pf1_data_r ) { return deco16_pf1_data[offset]^0xffff0000; } -static READ32_HANDLER( wcvol95_pf2_data_r ) { return deco16_pf2_data[offset]^0xffff0000; } -static WRITE32_HANDLER( wcvol95_pf1_data_w ) { data &=0x0000ffff; mem_mask &=0x0000ffff; deco16_pf1_data_w(space,offset,data,mem_mask); } -static WRITE32_HANDLER( wcvol95_pf2_data_w ) { data &=0x0000ffff; mem_mask &=0x0000ffff; deco16_pf2_data_w(space,offset,data,mem_mask); } +static READ32_HANDLER( wcvol95_pf1_rowscroll_r ) { return deco156_pf1_rowscroll[offset]^0xffff0000; } +static READ32_HANDLER( wcvol95_pf2_rowscroll_r ) { return deco156_pf2_rowscroll[offset]^0xffff0000; } +static WRITE32_HANDLER( wcvol95_pf1_rowscroll_w ) { data &=0x0000ffff; mem_mask &=0x0000ffff; COMBINE_DATA(&deco156_pf1_rowscroll[offset]); } +static WRITE32_HANDLER( wcvol95_pf2_rowscroll_w ) { data &=0x0000ffff; mem_mask &=0x0000ffff; COMBINE_DATA(&deco156_pf2_rowscroll[offset]); } static ADDRESS_MAP_START( hvysmsh_map, ADDRESS_SPACE_PROGRAM, 32 ) @@ -189,23 +185,23 @@ static ADDRESS_MAP_START( hvysmsh_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x12000c, 0x12000f) AM_DEVWRITE("oki1", hvysmsh_oki_0_bank_w) AM_RANGE(0x140000, 0x140003) AM_DEVREADWRITE8("oki1", okim6295_r, okim6295_w, 0x000000ff) AM_RANGE(0x160000, 0x160003) AM_DEVREADWRITE8("oki2", okim6295_r, okim6295_w, 0x000000ff) - AM_RANGE(0x180000, 0x18001f) AM_READWRITE( wcvol95_pf12_control_r, wcvol95_pf12_control_w ) - AM_RANGE(0x190000, 0x191fff) AM_READWRITE( wcvol95_pf1_data_r, wcvol95_pf1_data_w ) - AM_RANGE(0x194000, 0x195fff) AM_READWRITE( wcvol95_pf2_data_r, wcvol95_pf2_data_w ) - AM_RANGE(0x1a0000, 0x1a0fff) AM_READWRITE( wcvol95_pf1_rowscroll_r, wcvol95_pf1_rowscroll_w ) - AM_RANGE(0x1a4000, 0x1a4fff) AM_READWRITE( wcvol95_pf2_rowscroll_r, wcvol95_pf2_rowscroll_w ) - AM_RANGE(0x1c0000, 0x1c0fff) AM_RAM_WRITE(deco32_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram) + AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE("deco_custom", decodev_pf12_control_dword_r, decodev_pf12_control_dword_w) + AM_RANGE(0x190000, 0x191fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_dword_r, decodev_pf1_data_dword_w) + AM_RANGE(0x194000, 0x195fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_dword_r, decodev_pf2_data_dword_w) + AM_RANGE(0x1a0000, 0x1a0fff) AM_READWRITE(wcvol95_pf1_rowscroll_r, wcvol95_pf1_rowscroll_w) + AM_RANGE(0x1a4000, 0x1a4fff) AM_READWRITE(wcvol95_pf2_rowscroll_r, wcvol95_pf2_rowscroll_w) + AM_RANGE(0x1c0000, 0x1c0fff) AM_RAM_WRITE(deco156_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x1d0010, 0x1d002f) AM_READNOP // Check for DMA complete? AM_RANGE(0x1e0000, 0x1e1fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) ADDRESS_MAP_END static ADDRESS_MAP_START( wcvol95_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x100000, 0x10001f) AM_READWRITE( wcvol95_pf12_control_r, wcvol95_pf12_control_w ) - AM_RANGE(0x110000, 0x111fff) AM_READWRITE( wcvol95_pf1_data_r, wcvol95_pf1_data_w ) - AM_RANGE(0x114000, 0x115fff) AM_READWRITE( wcvol95_pf2_data_r, wcvol95_pf2_data_w ) - AM_RANGE(0x120000, 0x120fff) AM_READWRITE( wcvol95_pf1_rowscroll_r, wcvol95_pf1_rowscroll_w ) - AM_RANGE(0x124000, 0x124fff) AM_READWRITE( wcvol95_pf2_rowscroll_r, wcvol95_pf2_rowscroll_w ) + AM_RANGE(0x100000, 0x10001f) AM_DEVREADWRITE("deco_custom", decodev_pf12_control_dword_r, decodev_pf12_control_dword_w) + AM_RANGE(0x110000, 0x111fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_dword_r, decodev_pf1_data_dword_w) + AM_RANGE(0x114000, 0x115fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_dword_r, decodev_pf2_data_dword_w) + AM_RANGE(0x120000, 0x120fff) AM_READWRITE(wcvol95_pf1_rowscroll_r, wcvol95_pf1_rowscroll_w) + AM_RANGE(0x124000, 0x124fff) AM_READWRITE(wcvol95_pf2_rowscroll_r, wcvol95_pf2_rowscroll_w) AM_RANGE(0x130000, 0x137fff) AM_RAM AM_RANGE(0x140000, 0x140003) AM_READ_PORT("INPUTS") AM_RANGE(0x150000, 0x150003) AM_WRITE_PORT("EEPROMOUT") @@ -366,6 +362,24 @@ static INTERRUPT_GEN( deco32_vbl_interrupt ) cpu_set_input_line(device, ARM_IRQ_LINE, HOLD_LINE); } +static int deco156_bank_callback(const int bank) +{ + return ((bank >> 4) & 0x7) * 0x1000; +} + +static const deco16ic_interface deco156_deco16ic_intf = +{ + "screen", + 1, 0, 1, + 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, 0, 16, /* color base (default values) */ + 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + deco156_bank_callback, + deco156_bank_callback, + NULL, + NULL +}; + static MACHINE_DRIVER_START( hvysmsh ) /* basic machine hardware */ @@ -391,6 +405,8 @@ static MACHINE_DRIVER_START( hvysmsh ) MDRV_VIDEO_START(wcvol95) MDRV_VIDEO_UPDATE(wcvol95) + MDRV_DECO16IC_ADD("deco_custom", deco156_deco16ic_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") @@ -430,6 +446,8 @@ static MACHINE_DRIVER_START( wcvol95 ) MDRV_VIDEO_START(wcvol95) MDRV_VIDEO_UPDATE(wcvol95) + MDRV_DECO16IC_ADD("deco_custom", deco156_deco16ic_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") diff --git a/src/mame/drivers/funkyjet.c b/src/mame/drivers/funkyjet.c index 8e0e0e4f864..1106fd2e6e7 100644 --- a/src/mame/drivers/funkyjet.c +++ b/src/mame/drivers/funkyjet.c @@ -95,11 +95,12 @@ Notes: #include "includes/decocrpt.h" #include "includes/decoprot.h" -#include "includes/deco16ic.h" +#include "video/decodev.h" -VIDEO_START( funkyjet ); VIDEO_UPDATE( funkyjet ); +extern UINT16 *funkyjet_pf1_rowscroll,*funkyjet_pf2_rowscroll; + /******************************************************************************/ static ADDRESS_MAP_START( funkyjet_map, ADDRESS_SPACE_PROGRAM, 16 ) @@ -110,11 +111,11 @@ static ADDRESS_MAP_START( funkyjet_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x180000, 0x1807ff) AM_READWRITE(deco16_146_funkyjet_prot_r, deco16_146_funkyjet_prot_w) AM_BASE(&deco16_prot_ram) AM_RANGE(0x184000, 0x184001) AM_WRITENOP AM_RANGE(0x188000, 0x188001) AM_WRITENOP - AM_RANGE(0x300000, 0x30000f) AM_WRITEONLY AM_BASE(&deco16_pf12_control) - AM_RANGE(0x320000, 0x321fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) - AM_RANGE(0x322000, 0x323fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) - AM_RANGE(0x340000, 0x340bff) AM_RAM AM_BASE(&deco16_pf1_rowscroll) - AM_RANGE(0x342000, 0x342bff) AM_RAM AM_BASE(&deco16_pf2_rowscroll) + AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", decodev_pf12_control_w) + AM_RANGE(0x320000, 0x321fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w) + AM_RANGE(0x322000, 0x323fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) + AM_RANGE(0x340000, 0x340bff) AM_RAM AM_BASE(&funkyjet_pf1_rowscroll) + AM_RANGE(0x342000, 0x342bff) AM_RAM AM_BASE(&funkyjet_pf2_rowscroll) ADDRESS_MAP_END /******************************************************************************/ @@ -287,6 +288,16 @@ static const ym2151_interface ym2151_config = sound_irq }; +static const deco16ic_interface funkyjet_deco16ic_intf = +{ + "screen", + 1, 0, 1, + 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, 0, 16, /* color base (default values) */ + 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + NULL, NULL, NULL, NULL +}; + static MACHINE_DRIVER_START( funkyjet ) /* basic machine hardware */ @@ -308,9 +319,10 @@ static MACHINE_DRIVER_START( funkyjet ) MDRV_GFXDECODE(funkyjet) MDRV_PALETTE_LENGTH(1024) - MDRV_VIDEO_START(funkyjet) MDRV_VIDEO_UPDATE(funkyjet) + MDRV_DECO16IC_ADD("deco_custom", funkyjet_deco16ic_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") diff --git a/src/mame/drivers/mirage.c b/src/mame/drivers/mirage.c index 9a7644b8da3..51edbcc0289 100644 --- a/src/mame/drivers/mirage.c +++ b/src/mame/drivers/mirage.c @@ -195,8 +195,8 @@ static WRITE16_HANDLER( okim0_rombank_w ) static ADDRESS_MAP_START( mirage_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM /* tilemaps */ - AM_RANGE(0x100000, 0x101fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf1_data_w) // 0x100000 - 0x101fff tested - AM_RANGE(0x102000, 0x103fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf2_data_w) // 0x102000 - 0x102fff tested + AM_RANGE(0x100000, 0x101fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w) // 0x100000 - 0x101fff tested + AM_RANGE(0x102000, 0x103fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) // 0x102000 - 0x102fff tested /* linescroll */ AM_RANGE(0x110000, 0x110bff) AM_RAM AM_BASE_MEMBER(mirage_state, pf1_rowscroll) AM_RANGE(0x112000, 0x112bff) AM_RAM AM_BASE_MEMBER(mirage_state, pf2_rowscroll) diff --git a/src/mame/drivers/pktgaldx.c b/src/mame/drivers/pktgaldx.c index 56e827e06b2..e6bf4a1d999 100644 --- a/src/mame/drivers/pktgaldx.c +++ b/src/mame/drivers/pktgaldx.c @@ -73,8 +73,8 @@ static WRITE16_DEVICE_HANDLER(pktgaldx_oki_bank_w) static ADDRESS_MAP_START( pktgaldx_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM - AM_RANGE(0x100000, 0x100fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf1_data_w) - AM_RANGE(0x102000, 0x102fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf2_data_w) + AM_RANGE(0x100000, 0x100fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w) + AM_RANGE(0x102000, 0x102fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) AM_RANGE(0x110000, 0x1107ff) AM_RAM AM_BASE_MEMBER(pktgaldx_state, pf1_rowscroll) AM_RANGE(0x112000, 0x1127ff) AM_RAM AM_BASE_MEMBER(pktgaldx_state, pf2_rowscroll) diff --git a/src/mame/drivers/rohga.c b/src/mame/drivers/rohga.c index adc39e1e42d..e29b3f0d54d 100644 --- a/src/mame/drivers/rohga.c +++ b/src/mame/drivers/rohga.c @@ -109,19 +109,20 @@ #include "cpu/h6280/h6280.h" #include "includes/decocrpt.h" #include "includes/decoprot.h" -#include "includes/deco16ic.h" #include "sound/2151intf.h" #include "sound/okim6295.h" +#include "video/decodev.h" VIDEO_START( rohga ); -VIDEO_START( wizdfire ); -VIDEO_START( nitrobal ); VIDEO_UPDATE( rohga ); VIDEO_UPDATE( schmeisr ); VIDEO_UPDATE( wizdfire ); VIDEO_UPDATE( nitrobal ); WRITE16_HANDLER( rohga_buffer_spriteram16_w ); +extern UINT16 *rohga_pf1_rowscroll,*rohga_pf2_rowscroll; +extern UINT16 *rohga_pf3_rowscroll,*rohga_pf4_rowscroll; + static READ16_HANDLER( rohga_irq_ack_r ) { cputag_set_input_line(space->machine, "maincpu", 6, CLEAR_LINE); @@ -141,8 +142,8 @@ static WRITE16_HANDLER( wizdfire_irq_ack_w ) static ADDRESS_MAP_START( rohga_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x1fffff) AM_ROM - AM_RANGE(0x200000, 0x20000f) AM_WRITEONLY AM_BASE(&deco16_pf12_control) - AM_RANGE(0x240000, 0x24000f) AM_WRITEONLY AM_BASE(&deco16_pf34_control) + AM_RANGE(0x200000, 0x20000f) AM_DEVWRITE("deco_custom", decodev_pf12_control_w) + AM_RANGE(0x240000, 0x24000f) AM_DEVWRITE("deco_custom", decodev_pf34_control_w) AM_RANGE(0x280000, 0x2807ff) AM_MIRROR(0x800) AM_READWRITE(deco16_104_rohga_prot_r,deco16_104_rohga_prot_w) AM_BASE(&deco16_prot_ram) /* Protection device */ @@ -150,42 +151,42 @@ static ADDRESS_MAP_START( rohga_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x300000, 0x300001) AM_WRITE(rohga_buffer_spriteram16_w) /* write 1 for sprite dma */ AM_RANGE(0x310000, 0x310009) AM_WRITENOP /* Palette control? */ - AM_RANGE(0x31000a, 0x31000b) AM_WRITE(deco16_palette_dma_w) /* Write 1111 for dma? (Or any value?) */ + AM_RANGE(0x31000a, 0x31000b) AM_DEVWRITE("deco_custom", decodev_palette_dma_w) /* Write 1111 for dma? (Or any value?) */ AM_RANGE(0x320000, 0x320001) AM_WRITENOP /* ? */ - AM_RANGE(0x322000, 0x322001) AM_WRITE(deco16_priority_w) + AM_RANGE(0x322000, 0x322001) AM_DEVWRITE("deco_custom", decodev_priority_w) AM_RANGE(0x321100, 0x321101) AM_READ(rohga_irq_ack_r) /* Irq ack? Value not used */ - AM_RANGE(0x3c0000, 0x3c1fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) - AM_RANGE(0x3c2000, 0x3c2fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) - AM_RANGE(0x3c4000, 0x3c4fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) - AM_RANGE(0x3c6000, 0x3c6fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) + AM_RANGE(0x3c0000, 0x3c1fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w) + AM_RANGE(0x3c2000, 0x3c2fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) + AM_RANGE(0x3c4000, 0x3c4fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w) + AM_RANGE(0x3c6000, 0x3c6fff) AM_DEVREADWRITE("deco_custom", decodev_pf4_data_r, decodev_pf4_data_w) - AM_RANGE(0x3c8000, 0x3c8fff) AM_MIRROR(0x1000) AM_RAM AM_BASE(&deco16_pf1_rowscroll) - AM_RANGE(0x3ca000, 0x3cafff) AM_MIRROR(0x1000) AM_RAM AM_BASE(&deco16_pf2_rowscroll) - AM_RANGE(0x3cc000, 0x3ccfff) AM_MIRROR(0x1000) AM_RAM AM_BASE(&deco16_pf3_rowscroll) - AM_RANGE(0x3ce000, 0x3cefff) AM_MIRROR(0x1000) AM_RAM AM_BASE(&deco16_pf4_rowscroll) + AM_RANGE(0x3c8000, 0x3c8fff) AM_MIRROR(0x1000) AM_RAM AM_BASE(&rohga_pf1_rowscroll) + AM_RANGE(0x3ca000, 0x3cafff) AM_MIRROR(0x1000) AM_RAM AM_BASE(&rohga_pf2_rowscroll) + AM_RANGE(0x3cc000, 0x3ccfff) AM_MIRROR(0x1000) AM_RAM AM_BASE(&rohga_pf3_rowscroll) + AM_RANGE(0x3ce000, 0x3cefff) AM_MIRROR(0x1000) AM_RAM AM_BASE(&rohga_pf4_rowscroll) AM_RANGE(0x3d0000, 0x3d07ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) - AM_RANGE(0x3e0000, 0x3e1fff) AM_RAM_WRITE(deco16_buffered_palette_w) AM_BASE_GENERIC(paletteram) + AM_RANGE(0x3e0000, 0x3e1fff) AM_RAM_DEVWRITE("deco_custom", decodev_buffered_palette_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x3f0000, 0x3f3fff) AM_RAM /* Main ram */ ADDRESS_MAP_END static ADDRESS_MAP_START( wizdfire_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x1fffff) AM_ROM - AM_RANGE(0x200000, 0x200fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) - AM_RANGE(0x202000, 0x202fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) - AM_RANGE(0x208000, 0x208fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) - AM_RANGE(0x20a000, 0x20afff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) + AM_RANGE(0x200000, 0x200fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w) + AM_RANGE(0x202000, 0x202fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) + AM_RANGE(0x208000, 0x208fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w) + AM_RANGE(0x20a000, 0x20afff) AM_DEVREADWRITE("deco_custom", decodev_pf4_data_r, decodev_pf4_data_w) AM_RANGE(0x20b000, 0x20b3ff) AM_WRITEONLY /* ? Always 0 written */ - AM_RANGE(0x20c000, 0x20c7ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) - AM_RANGE(0x20e000, 0x20e7ff) AM_RAM AM_BASE(&deco16_pf4_rowscroll) + AM_RANGE(0x20c000, 0x20c7ff) AM_RAM AM_BASE(&rohga_pf3_rowscroll) + AM_RANGE(0x20e000, 0x20e7ff) AM_RAM AM_BASE(&rohga_pf4_rowscroll) - AM_RANGE(0x300000, 0x30000f) AM_WRITEONLY AM_BASE(&deco16_pf12_control) - AM_RANGE(0x310000, 0x31000f) AM_WRITEONLY AM_BASE(&deco16_pf34_control) + AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", decodev_pf12_control_w) + AM_RANGE(0x310000, 0x31000f) AM_DEVWRITE("deco_custom", decodev_pf34_control_w) - AM_RANGE(0x320000, 0x320001) AM_WRITE(deco16_priority_w) /* Priority */ + AM_RANGE(0x320000, 0x320001) AM_DEVWRITE("deco_custom", decodev_priority_w) /* Priority */ AM_RANGE(0x320002, 0x320003) AM_WRITENOP /* ? */ AM_RANGE(0x320004, 0x320005) AM_WRITE(wizdfire_irq_ack_w) /* VBL IRQ ack */ @@ -194,8 +195,8 @@ static ADDRESS_MAP_START( wizdfire_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x360000, 0x3607ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram2) AM_RANGE(0x370000, 0x370001) AM_WRITE(buffer_spriteram16_2_w) /* Triggers DMA for spriteram */ - AM_RANGE(0x380000, 0x381fff) AM_RAM_WRITE(deco16_buffered_palette_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0x390008, 0x390009) AM_WRITE(deco16_palette_dma_w) + AM_RANGE(0x380000, 0x381fff) AM_RAM_DEVWRITE("deco_custom", decodev_buffered_palette_w) AM_BASE_GENERIC(paletteram) + AM_RANGE(0x390008, 0x390009) AM_DEVWRITE("deco_custom", decodev_palette_dma_w) AM_RANGE(0xfe4000, 0xfe47ff) AM_READWRITE(deco16_104_prot_r,deco16_104_prot_w) AM_BASE(&deco16_prot_ram) /* Protection device */ AM_RANGE(0xfdc000, 0xffffff) AM_RAM @@ -204,20 +205,20 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( nitrobal_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x1fffff) AM_ROM - AM_RANGE(0x200000, 0x200fff) AM_MIRROR(0x1000) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) - AM_RANGE(0x202000, 0x2027ff) AM_MIRROR(0x800) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) - AM_RANGE(0x208000, 0x2087ff) AM_MIRROR(0x800) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) - AM_RANGE(0x20a000, 0x20a7ff) AM_MIRROR(0x800) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) + AM_RANGE(0x200000, 0x200fff) AM_MIRROR(0x1000) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w) + AM_RANGE(0x202000, 0x2027ff) AM_MIRROR(0x800) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) + AM_RANGE(0x208000, 0x2087ff) AM_MIRROR(0x800) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w) + AM_RANGE(0x20a000, 0x20a7ff) AM_MIRROR(0x800) AM_DEVREADWRITE("deco_custom", decodev_pf4_data_r, decodev_pf4_data_w) - AM_RANGE(0x204000, 0x2047ff) AM_RAM AM_BASE(&deco16_pf1_rowscroll) - AM_RANGE(0x206000, 0x2067ff) AM_RAM AM_BASE(&deco16_pf2_rowscroll) - AM_RANGE(0x20c000, 0x20c7ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) - AM_RANGE(0x20e000, 0x20e7ff) AM_RAM AM_BASE(&deco16_pf4_rowscroll) + AM_RANGE(0x204000, 0x2047ff) AM_RAM AM_BASE(&rohga_pf1_rowscroll) + AM_RANGE(0x206000, 0x2067ff) AM_RAM AM_BASE(&rohga_pf2_rowscroll) + AM_RANGE(0x20c000, 0x20c7ff) AM_RAM AM_BASE(&rohga_pf3_rowscroll) + AM_RANGE(0x20e000, 0x20e7ff) AM_RAM AM_BASE(&rohga_pf4_rowscroll) - AM_RANGE(0x300000, 0x30000f) AM_WRITEONLY AM_BASE(&deco16_pf12_control) - AM_RANGE(0x310000, 0x31000f) AM_WRITEONLY AM_BASE(&deco16_pf34_control) + AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", decodev_pf12_control_w) + AM_RANGE(0x310000, 0x31000f) AM_DEVWRITE("deco_custom", decodev_pf34_control_w) - AM_RANGE(0x320000, 0x320001) AM_READ_PORT("DSW3") AM_WRITE(deco16_priority_w) /* Priority */ + AM_RANGE(0x320000, 0x320001) AM_READ_PORT("DSW3") AM_DEVWRITE("deco_custom", decodev_priority_w) /* Priority */ AM_RANGE(0x320002, 0x320003) AM_WRITENOP /* ? */ AM_RANGE(0x320004, 0x320005) AM_WRITE(wizdfire_irq_ack_w) /* VBL IRQ ack */ @@ -226,8 +227,8 @@ static ADDRESS_MAP_START( nitrobal_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x360000, 0x3607ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram2) AM_RANGE(0x370000, 0x370001) AM_WRITE(buffer_spriteram16_2_w) /* Triggers DMA for spriteram */ - AM_RANGE(0x380000, 0x381fff) AM_RAM_WRITE(deco16_buffered_palette_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0x390008, 0x390009) AM_WRITE(deco16_palette_dma_w) + AM_RANGE(0x380000, 0x381fff) AM_RAM_DEVWRITE("deco_custom", decodev_buffered_palette_w) AM_BASE_GENERIC(paletteram) + AM_RANGE(0x390008, 0x390009) AM_DEVWRITE("deco_custom", decodev_palette_dma_w) AM_RANGE(0xfec000, 0xff3fff) AM_RAM AM_RANGE(0xff4000, 0xff47ff) AM_MIRROR(0x800) AM_READWRITE(deco16_146_nitroball_prot_r,deco16_146_nitroball_prot_w) AM_BASE(&deco16_prot_ram) /* Protection device */ @@ -236,30 +237,30 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( schmeisr_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x200000, 0x20000f) AM_WRITEONLY AM_BASE(&deco16_pf12_control) - AM_RANGE(0x240000, 0x24000f) AM_WRITEONLY AM_BASE(&deco16_pf34_control) + AM_RANGE(0x200000, 0x20000f) AM_DEVWRITE("deco_custom", decodev_pf12_control_w) + AM_RANGE(0x240000, 0x24000f) AM_DEVWRITE("deco_custom", decodev_pf34_control_w) AM_RANGE(0x280000, 0x2807ff) AM_MIRROR(0x800) AM_READWRITE(deco16_104_rohga_prot_r,deco16_104_rohga_prot_w) AM_BASE(&deco16_prot_ram) /* Protection device */ AM_RANGE(0x2c0000, 0x2c0001) AM_READ_PORT("DSW3") AM_RANGE(0x300000, 0x300001) AM_READ_PORT("DSW3") AM_WRITE(rohga_buffer_spriteram16_w) /* write 1 for sprite dma */ AM_RANGE(0x310002, 0x310003) AM_READ_PORT("IN1") AM_RANGE(0x310000, 0x310009) AM_WRITENOP /* Palette control? */ - AM_RANGE(0x31000a, 0x31000b) AM_WRITE(deco16_palette_dma_w) /* Write 1111 for dma? (Or any value?) */ + AM_RANGE(0x31000a, 0x31000b) AM_DEVWRITE("deco_custom", decodev_palette_dma_w) /* Write 1111 for dma? (Or any value?) */ AM_RANGE(0x320000, 0x320001) AM_WRITENOP /* ? */ - AM_RANGE(0x322000, 0x322001) AM_WRITE(deco16_priority_w) + AM_RANGE(0x322000, 0x322001) AM_DEVWRITE("deco_custom", decodev_priority_w) AM_RANGE(0x321100, 0x321101) AM_WRITE(wizdfire_irq_ack_w) /* Irq ack? Value not used */ - AM_RANGE(0x3c0000, 0x3c1fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) - AM_RANGE(0x3c2000, 0x3c2fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) - AM_RANGE(0x3c4000, 0x3c4fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) - AM_RANGE(0x3c6000, 0x3c6fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) - AM_RANGE(0x3c8000, 0x3c8fff) AM_MIRROR(0x1000) AM_RAM AM_BASE(&deco16_pf1_rowscroll) - AM_RANGE(0x3ca000, 0x3cafff) AM_MIRROR(0x1000) AM_RAM AM_BASE(&deco16_pf2_rowscroll) - AM_RANGE(0x3cc000, 0x3ccfff) AM_MIRROR(0x1000) AM_RAM AM_BASE(&deco16_pf3_rowscroll) - AM_RANGE(0x3ce000, 0x3cefff) AM_MIRROR(0x1000) AM_RAM AM_BASE(&deco16_pf4_rowscroll) + AM_RANGE(0x3c0000, 0x3c1fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w) + AM_RANGE(0x3c2000, 0x3c2fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) + AM_RANGE(0x3c4000, 0x3c4fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w) + AM_RANGE(0x3c6000, 0x3c6fff) AM_DEVREADWRITE("deco_custom", decodev_pf4_data_r, decodev_pf4_data_w) + AM_RANGE(0x3c8000, 0x3c8fff) AM_MIRROR(0x1000) AM_RAM AM_BASE(&rohga_pf1_rowscroll) + AM_RANGE(0x3ca000, 0x3cafff) AM_MIRROR(0x1000) AM_RAM AM_BASE(&rohga_pf2_rowscroll) + AM_RANGE(0x3cc000, 0x3ccfff) AM_MIRROR(0x1000) AM_RAM AM_BASE(&rohga_pf3_rowscroll) + AM_RANGE(0x3ce000, 0x3cefff) AM_MIRROR(0x1000) AM_RAM AM_BASE(&rohga_pf4_rowscroll) AM_RANGE(0x3d0000, 0x3d07ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) - AM_RANGE(0x3e0000, 0x3e1fff) AM_MIRROR(0x2000) AM_RAM_WRITE(deco16_buffered_palette_w) AM_BASE_GENERIC(paletteram) + AM_RANGE(0x3e0000, 0x3e1fff) AM_MIRROR(0x2000) AM_RAM_DEVWRITE("deco_custom", decodev_buffered_palette_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0xff0000, 0xff7fff) AM_RAM /* Main ram */ ADDRESS_MAP_END @@ -744,6 +745,37 @@ static const ym2151_interface ym2151_config = /**********************************************************************************/ +static int rohga_bank_callback( const int bank ) +{ + return ((bank >> 4) & 0x3) << 12; +} + +static const deco16ic_interface rohga_deco16ic_intf = +{ + "screen", + 0, 0, 1, + 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, 0, 16, /* color base (default values) */ + 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + rohga_bank_callback, + rohga_bank_callback, + rohga_bank_callback, + rohga_bank_callback +}; + +static const deco16ic_interface nitrobal_deco16ic_intf = +{ + "screen", + 0, 0, 0, + 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ + 0, 16, 0, 0, /* color base (pf4 is not default) */ + 0x0f, 0x0f, 0, 0, /* color masks */ + rohga_bank_callback, + rohga_bank_callback, + rohga_bank_callback, + rohga_bank_callback +}; + static MACHINE_DRIVER_START( rohga ) /* basic machine hardware */ @@ -770,6 +802,8 @@ static MACHINE_DRIVER_START( rohga ) MDRV_VIDEO_START(rohga) MDRV_VIDEO_UPDATE(rohga) + MDRV_DECO16IC_ADD("deco_custom", rohga_deco16ic_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") @@ -812,9 +846,10 @@ static MACHINE_DRIVER_START( wizdfire ) MDRV_GFXDECODE(wizdfire) MDRV_PALETTE_LENGTH(2048) - MDRV_VIDEO_START(wizdfire) MDRV_VIDEO_UPDATE(wizdfire) + MDRV_DECO16IC_ADD("deco_custom", rohga_deco16ic_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") @@ -857,9 +892,10 @@ static MACHINE_DRIVER_START( nitrobal ) MDRV_GFXDECODE(wizdfire) MDRV_PALETTE_LENGTH(2048) - MDRV_VIDEO_START(nitrobal) MDRV_VIDEO_UPDATE(nitrobal) + MDRV_DECO16IC_ADD("deco_custom", nitrobal_deco16ic_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") @@ -905,6 +941,8 @@ static MACHINE_DRIVER_START( schmeisr ) MDRV_VIDEO_START(rohga) MDRV_VIDEO_UPDATE(schmeisr) + MDRV_DECO16IC_ADD("deco_custom", rohga_deco16ic_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") diff --git a/src/mame/drivers/supbtime.c b/src/mame/drivers/supbtime.c index ee7431da846..a9f48d20d14 100644 --- a/src/mame/drivers/supbtime.c +++ b/src/mame/drivers/supbtime.c @@ -69,9 +69,9 @@ static ADDRESS_MAP_START( supbtime_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x180000, 0x18000f) AM_READ(supbtime_controls_r) AM_RANGE(0x18000a, 0x18000d) AM_WRITENOP AM_RANGE(0x1a0000, 0x1a0001) AM_WRITE(sound_w) - AM_RANGE(0x300000, 0x30000f) AM_RAM_DEVWRITE("deco_custom", decodev_pf12_control_w) - AM_RANGE(0x320000, 0x321fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf1_data_w) - AM_RANGE(0x322000, 0x323fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf2_data_w) + AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("deco_custom", decodev_pf12_control_r, decodev_pf12_control_w) + AM_RANGE(0x320000, 0x321fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w) + AM_RANGE(0x322000, 0x323fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) AM_RANGE(0x340000, 0x3407ff) AM_RAM AM_BASE_MEMBER(supbtime_state, pf1_rowscroll) AM_RANGE(0x342000, 0x3427ff) AM_RAM AM_BASE_MEMBER(supbtime_state, pf2_rowscroll) ADDRESS_MAP_END @@ -84,9 +84,9 @@ static ADDRESS_MAP_START( chinatwn_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x180000, 0x18000f) AM_READ(supbtime_controls_r) AM_RANGE(0x18000a, 0x18000d) AM_WRITENOP AM_RANGE(0x1a0000, 0x1a3fff) AM_RAM - AM_RANGE(0x300000, 0x30000f) AM_RAM_DEVWRITE("deco_custom", decodev_pf12_control_w) - AM_RANGE(0x320000, 0x321fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf1_data_w) - AM_RANGE(0x322000, 0x323fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf2_data_w) + AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("deco_custom", decodev_pf12_control_r, decodev_pf12_control_w) + AM_RANGE(0x320000, 0x321fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w) + AM_RANGE(0x322000, 0x323fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) AM_RANGE(0x340000, 0x3407ff) AM_RAM AM_BASE_MEMBER(supbtime_state, pf1_rowscroll) // unused AM_RANGE(0x342000, 0x3427ff) AM_RAM AM_BASE_MEMBER(supbtime_state, pf2_rowscroll) // unused ADDRESS_MAP_END diff --git a/src/mame/drivers/tumblep.c b/src/mame/drivers/tumblep.c index a32de9bf1b9..3068b3bfc61 100644 --- a/src/mame/drivers/tumblep.c +++ b/src/mame/drivers/tumblep.c @@ -118,8 +118,8 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x18000c, 0x18000d) AM_WRITENOP AM_RANGE(0x1a0000, 0x1a07ff) AM_RAM AM_BASE_SIZE_MEMBER(tumblep_state, spriteram, spriteram_size) AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", decodev_pf12_control_w) - AM_RANGE(0x320000, 0x320fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf1_data_w) - AM_RANGE(0x322000, 0x322fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf2_data_w) + AM_RANGE(0x320000, 0x320fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w) + AM_RANGE(0x322000, 0x322fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) AM_RANGE(0x340000, 0x3407ff) AM_WRITEONLY AM_BASE_MEMBER(tumblep_state, pf1_rowscroll) // unused AM_RANGE(0x342000, 0x3427ff) AM_WRITEONLY AM_BASE_MEMBER(tumblep_state, pf2_rowscroll) // unused ADDRESS_MAP_END diff --git a/src/mame/drivers/vaportra.c b/src/mame/drivers/vaportra.c index a128e8c8a7a..e8de4360151 100644 --- a/src/mame/drivers/vaportra.c +++ b/src/mame/drivers/vaportra.c @@ -14,9 +14,8 @@ #include "sound/2203intf.h" #include "sound/2151intf.h" #include "sound/okim6295.h" -#include "includes/deco16ic.h" +#include "video/decodev.h" -VIDEO_START( vaportra ); VIDEO_UPDATE( vaportra ); WRITE16_HANDLER( vaportra_priority_w ); @@ -35,7 +34,7 @@ static WRITE16_HANDLER( vaportra_sound_w ) static READ16_HANDLER( vaportra_control_r ) { - switch (offset<<1) + switch (offset << 1) { case 4: return input_port_read(space->machine, "DSW"); @@ -56,12 +55,12 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x100000, 0x100003) AM_WRITE(vaportra_priority_w) AM_RANGE(0x100006, 0x100007) AM_WRITE(vaportra_sound_w) AM_RANGE(0x100000, 0x10000f) AM_READ(vaportra_control_r) - AM_RANGE(0x200000, 0x201fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) - AM_RANGE(0x202000, 0x203fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) - AM_RANGE(0x240000, 0x24000f) AM_WRITEONLY AM_BASE(&deco16_pf34_control) - AM_RANGE(0x280000, 0x281fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) - AM_RANGE(0x282000, 0x283fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) - AM_RANGE(0x2c0000, 0x2c000f) AM_WRITEONLY AM_BASE(&deco16_pf12_control) + AM_RANGE(0x200000, 0x201fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w) + AM_RANGE(0x202000, 0x203fff) AM_DEVREADWRITE("deco_custom", decodev_pf4_data_r, decodev_pf4_data_w) + AM_RANGE(0x240000, 0x24000f) AM_DEVWRITE("deco_custom", decodev_pf34_control_w) + AM_RANGE(0x280000, 0x281fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w) + AM_RANGE(0x282000, 0x283fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) + AM_RANGE(0x2c0000, 0x2c000f) AM_DEVWRITE("deco_custom", decodev_pf12_control_w) AM_RANGE(0x300000, 0x3009ff) AM_RAM_WRITE(vaportra_palette_24bit_rg_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x304000, 0x3049ff) AM_RAM_WRITE(vaportra_palette_24bit_b_w) AM_BASE_GENERIC(paletteram2) AM_RANGE(0x308000, 0x308001) AM_NOP @@ -215,6 +214,24 @@ static const ym2151_interface ym2151_config = }; +static int vaportra_bank_callback( const int bank ) +{ + return ((bank >> 4) & 0x7) * 0x1000; +} + +static const deco16ic_interface vaportra_deco16ic_intf = +{ + "screen", + 0, 0, 1, + 0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */ + 0x00, 0x20, 0x30, 0x40, /* color base */ + 0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */ + vaportra_bank_callback, + vaportra_bank_callback, + vaportra_bank_callback, + vaportra_bank_callback +}; + static MACHINE_DRIVER_START( vaportra ) @@ -238,9 +255,10 @@ static MACHINE_DRIVER_START( vaportra ) MDRV_GFXDECODE(vaportra) MDRV_PALETTE_LENGTH(1280) - MDRV_VIDEO_START(vaportra) MDRV_VIDEO_UPDATE(vaportra) + MDRV_DECO16IC_ADD("deco_custom", vaportra_deco16ic_intf) + /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/includes/cninja.h b/src/mame/includes/cninja.h index a48bb8043e5..d1b21757050 100644 --- a/src/mame/includes/cninja.h +++ b/src/mame/includes/cninja.h @@ -1,13 +1,14 @@ /*----------- defined in video/cninja.c -----------*/ -VIDEO_START( cninja ); -VIDEO_START( edrandy ); -VIDEO_START( robocop2 ); +extern UINT16 *cninja_pf1_rowscroll,*cninja_pf2_rowscroll; +extern UINT16 *cninja_pf3_rowscroll,*cninja_pf4_rowscroll; + VIDEO_START( stoneage ); -VIDEO_START( mutantf ); + VIDEO_UPDATE( cninja ); VIDEO_UPDATE( cninjabl ); VIDEO_UPDATE( edrandy ); VIDEO_UPDATE( robocop2 ); VIDEO_UPDATE( mutantf ); + VIDEO_EOF( cninja ); diff --git a/src/mame/video/boogwing.c b/src/mame/video/boogwing.c index 0478f182ece..a7b63b49ea0 100644 --- a/src/mame/video/boogwing.c +++ b/src/mame/video/boogwing.c @@ -4,7 +4,7 @@ UINT16 *boogwing_pf1_rowscroll,*boogwing_pf2_rowscroll; UINT16 *boogwing_pf3_rowscroll,*boogwing_pf4_rowscroll; -static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect, UINT16* spriteram_base, int gfx_region) +static void draw_sprites( running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect, UINT16* spriteram_base, int gfx_region ) { running_device *deco16ic = devtag_get_device(machine, "deco_custom"); int offs; @@ -136,18 +136,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan } } -VIDEO_START(boogwing) -{ -// deco16_2_video_init(machine, 0); - -// deco16_set_tilemap_bank_callback(1,boogwing_bank_callback); -// deco16_set_tilemap_bank_callback(2,boogwing_bank_callback2); -// deco16_set_tilemap_bank_callback(3,boogwing_bank_callback2); -// deco16_set_tilemap_colour_base(1,0); -// deco16_set_tilemap_transparency_mask(1, 0x1f); // 5bpp graphics -} - -VIDEO_UPDATE(boogwing) +VIDEO_UPDATE( boogwing ) { running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom"); UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff); diff --git a/src/mame/video/cbuster.c b/src/mame/video/cbuster.c index a7e9e4d527a..a89a344ef35 100644 --- a/src/mame/video/cbuster.c +++ b/src/mame/video/cbuster.c @@ -5,31 +5,12 @@ ***************************************************************************/ #include "emu.h" -#include "includes/deco16ic.h" +#include "video/decodev.h" static int twocrude_pri; -/******************************************************************************/ - -static int bank_callback(const int bank) -{ - return ((bank>>4)&0x7) * 0x1000; -} - -VIDEO_START( twocrude ) -{ - deco16_2_video_init(machine, 0); - - deco16_set_tilemap_bank_callback(0, bank_callback); - deco16_set_tilemap_bank_callback(1, bank_callback); - deco16_set_tilemap_bank_callback(2, bank_callback); - deco16_set_tilemap_bank_callback(3, bank_callback); - - deco16_pf1_colour_bank=0x00; - deco16_pf2_colour_bank=0x20; - deco16_pf4_colour_bank=0x40; - deco16_pf3_colour_bank=0x30; -} +UINT16 *twocrude_pf1_rowscroll,*twocrude_pf2_rowscroll; +UINT16 *twocrude_pf3_rowscroll,*twocrude_pf4_rowscroll; /******************************************************************************/ @@ -60,12 +41,12 @@ WRITE16_HANDLER( twocrude_palette_24bit_b_w ) void twocrude_pri_w(int pri) { - twocrude_pri=pri; + twocrude_pri = pri; } /******************************************************************************/ -static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int pri) +static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int pri ) { UINT16 *buffered_spriteram16 = machine->generic.buffered_spriteram.u16; int offs; @@ -137,25 +118,30 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta VIDEO_UPDATE( twocrude ) { - flip_screen_set(screen->machine, !(deco16_pf12_control[0]&0x80) ); + running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom"); + UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff); - deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); - deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll); + flip_screen_set(screen->machine, !BIT(flip, 7)); + + decodev_pf12_update(deco16ic, twocrude_pf1_rowscroll, twocrude_pf2_rowscroll); + decodev_pf34_update(deco16ic, twocrude_pf3_rowscroll, twocrude_pf4_rowscroll); /* Draw playfields & sprites */ - deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,0); - draw_sprites(screen->machine,bitmap,cliprect,0); + decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + draw_sprites(screen->machine, bitmap, cliprect, 0); - if (twocrude_pri) { - deco16_tilemap_2_draw(screen,bitmap,cliprect,0,0); - deco16_tilemap_3_draw(screen,bitmap,cliprect,0,0); + if (twocrude_pri) + { + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 0); + decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 0); } - else { - deco16_tilemap_3_draw(screen,bitmap,cliprect,0,0); - deco16_tilemap_2_draw(screen,bitmap,cliprect,0,0); + else + { + decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 0); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 0); } - draw_sprites(screen->machine,bitmap,cliprect,1); - deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); + draw_sprites(screen->machine, bitmap, cliprect, 1); + decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0); return 0; } diff --git a/src/mame/video/cninja.c b/src/mame/video/cninja.c index 36efe26d99f..1d28c61fbf7 100644 --- a/src/mame/video/cninja.c +++ b/src/mame/video/cninja.c @@ -5,98 +5,24 @@ ****************************************************************************/ #include "emu.h" -#include "includes/deco16ic.h" +#include "video/decodev.h" #include "includes/cninja.h" -/******************************************************************************/ - -static int cninja_bank_callback(const int bank) -{ - if ((bank>>4)&0xf) return 0x0000; /* Only 2 banks */ - return 0x1000; -} - -static int edrandy_bank_callback(const int bank) -{ - if ((bank>>4)&0xf) return 0x0000; /* Only 2 banks */ - return 0x1000; -} - -static int robocop2_bank_callback(const int bank) -{ - return (bank&0x30)<<8; -} - -static int mutantf_1_bank_callback(const int bank) -{ - return ((bank>>4)&0x3)<<12; -} - -static int mutantf_2_bank_callback(const int bank) -{ - return ((bank>>5)&0x1)<<14; -} +UINT16 *cninja_pf1_rowscroll,*cninja_pf2_rowscroll; +UINT16 *cninja_pf3_rowscroll,*cninja_pf4_rowscroll; /******************************************************************************/ -VIDEO_START( cninja ) -{ - deco16_2_video_init(machine, 1); - - deco16_set_tilemap_bank_callback(2,cninja_bank_callback); - deco16_set_tilemap_bank_callback(3,cninja_bank_callback); - deco16_set_tilemap_colour_base(3,48); -} - VIDEO_START( stoneage ) { - deco16_2_video_init(machine, 1); - - deco16_set_tilemap_bank_callback(2,edrandy_bank_callback); - deco16_set_tilemap_bank_callback(3,edrandy_bank_callback); - deco16_set_tilemap_colour_base(3,48); + running_device *deco16ic = devtag_get_device(machine, "deco_custom"); /* The bootleg has broken scroll registers */ - tilemap_set_scrolldx(deco16_get_tilemap(3,0),-10,-10); - tilemap_set_scrolldx(deco16_get_tilemap(1,0),-10,-10); - tilemap_set_scrolldx(deco16_get_tilemap(0,1),2,2); + decodev_set_scrolldx(deco16ic, 3, 0, -10, -10); /* pf4 16x16 tilemap */ + decodev_set_scrolldx(deco16ic, 1, 0, -10, -10); /* pf2 16x16 tilemap */ + decodev_set_scrolldx(deco16ic, 0, 1, 2, 2); /* pf1 8x8 tilemap */ } -VIDEO_START( edrandy ) -{ - deco16_2_video_init(machine, 0); - - deco16_set_tilemap_bank_callback(2,edrandy_bank_callback); - deco16_set_tilemap_bank_callback(3,edrandy_bank_callback); - deco16_set_tilemap_colour_base(3,48); -} - -VIDEO_START( robocop2 ) -{ - deco16_2_video_init(machine, 0); - - deco16_set_tilemap_bank_callback(1,robocop2_bank_callback); - deco16_set_tilemap_bank_callback(2,robocop2_bank_callback); - deco16_set_tilemap_bank_callback(3,robocop2_bank_callback); - deco16_set_tilemap_colour_base(3,48); -} - -VIDEO_START( mutantf ) -{ - deco16_2_video_init(machine, 0); - - deco16_set_tilemap_bank_callback(0,mutantf_1_bank_callback); - deco16_set_tilemap_bank_callback(1,mutantf_2_bank_callback); - deco16_set_tilemap_bank_callback(2,mutantf_1_bank_callback); - deco16_set_tilemap_bank_callback(3,mutantf_1_bank_callback); - - deco16_set_tilemap_colour_base(1,0x30); - deco16_set_tilemap_colour_base(2,0x20); - deco16_set_tilemap_colour_base(3,0x40); -} - -/******************************************************************************/ - /******************************************************************************/ static void cninja_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) @@ -447,106 +373,128 @@ static void mutantf_draw_sprites(running_machine *machine, bitmap_t *bitmap, con VIDEO_UPDATE( cninja ) { - flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); - deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); - deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll); + running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom"); + UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff); + + flip_screen_set(screen->machine, BIT(flip, 7)); + decodev_pf12_update(deco16ic, cninja_pf1_rowscroll, cninja_pf2_rowscroll); + decodev_pf34_update(deco16ic, cninja_pf3_rowscroll, cninja_pf4_rowscroll); /* Draw playfields */ - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); - bitmap_fill(bitmap,cliprect,512); - deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,1); - deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2); - deco16_tilemap_2_draw(screen,bitmap,cliprect,TILEMAP_DRAW_LAYER1,2); - deco16_tilemap_2_draw(screen,bitmap,cliprect,TILEMAP_DRAW_LAYER0,4); - cninja_draw_sprites(screen->machine,bitmap,cliprect); - deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + bitmap_fill(bitmap, cliprect, 512); + decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1); + decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 2); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 2); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_LAYER0, 4); + cninja_draw_sprites(screen->machine, bitmap, cliprect); + decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0); return 0; } VIDEO_UPDATE( cninjabl ) { - flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); - deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); - deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll); + running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom"); + UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff); + + flip_screen_set(screen->machine, BIT(flip, 7)); + decodev_pf12_update(deco16ic, cninja_pf1_rowscroll, cninja_pf2_rowscroll); + decodev_pf34_update(deco16ic, cninja_pf3_rowscroll, cninja_pf4_rowscroll); /* Draw playfields */ - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); - bitmap_fill(bitmap,cliprect,512); - deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,1); - deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2); - deco16_tilemap_2_draw(screen,bitmap,cliprect,TILEMAP_DRAW_LAYER1,2); - deco16_tilemap_2_draw(screen,bitmap,cliprect,TILEMAP_DRAW_LAYER0,4); - cninjabl_draw_sprites(screen->machine,bitmap,cliprect); - deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + bitmap_fill(bitmap, cliprect, 512); + decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1); + decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 2); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 2); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_LAYER0, 4); + cninjabl_draw_sprites(screen->machine, bitmap, cliprect); + decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0); return 0; } VIDEO_UPDATE( edrandy ) { - flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); - deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); - deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll); + running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom"); + UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff); - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); - bitmap_fill(bitmap,cliprect,0); - deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,1); - deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2); - deco16_tilemap_2_draw(screen,bitmap,cliprect,0,4); - cninja_draw_sprites(screen->machine,bitmap,cliprect); - deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); + flip_screen_set(screen->machine, BIT(flip, 7)); + decodev_pf12_update(deco16ic, cninja_pf1_rowscroll, cninja_pf2_rowscroll); + decodev_pf34_update(deco16ic, cninja_pf3_rowscroll, cninja_pf4_rowscroll); + + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + bitmap_fill(bitmap, cliprect, 0); + decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1); + decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 2); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 4); + cninja_draw_sprites(screen->machine, bitmap, cliprect); + decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0); return 0; } VIDEO_UPDATE( robocop2 ) { + running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom"); + UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff); + UINT16 priority = decodev_priority_r(deco16ic, 0, 0xffff); + /* One of the tilemap chips can switch between 2 tilemaps at 4bpp, or 1 at 8bpp */ - if (deco16_priority&4) { - deco16_set_tilemap_colour_mask(2,0); - deco16_set_tilemap_colour_mask(3,0); - deco16_pf34_set_gfxbank(0,4); - } else { - deco16_set_tilemap_colour_mask(2,0xf); - deco16_set_tilemap_colour_mask(3,0xf); - deco16_pf34_set_gfxbank(0,2); + if (priority & 4) + { + decodev_set_tilemap_colour_mask(deco16ic, 2, 0); + decodev_set_tilemap_colour_mask(deco16ic, 3, 0); + decodev_pf34_set_gfxbank(deco16ic, 0, 4); + } + else + { + decodev_set_tilemap_colour_mask(deco16ic, 2, 0xf); + decodev_set_tilemap_colour_mask(deco16ic, 3, 0xf); + decodev_pf34_set_gfxbank(deco16ic, 0, 2); } /* Update playfields */ - flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); - deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); - deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll); + flip_screen_set(screen->machine, BIT(flip, 7)); + decodev_pf12_update(deco16ic, cninja_pf1_rowscroll, cninja_pf2_rowscroll); + decodev_pf34_update(deco16ic, cninja_pf3_rowscroll, cninja_pf4_rowscroll); /* Draw playfields */ - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); - bitmap_fill(bitmap,cliprect,0x200); - if ((deco16_priority&4)==0) - deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,1); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + bitmap_fill(bitmap, cliprect, 0x200); + + if ((priority & 4) == 0) + decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1); /* Switchable priority */ - switch (deco16_priority&0x8) { + switch (priority & 0x8) + { case 8: - deco16_tilemap_2_draw(screen,bitmap,cliprect,0,2); - deco16_tilemap_3_draw(screen,bitmap,cliprect,0,4); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 2); + decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 4); break; default: case 0: - deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2); - deco16_tilemap_2_draw(screen,bitmap,cliprect,0,4); + decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 2); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 4); break; } - robocop2_draw_sprites(screen->machine,bitmap,cliprect); - deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); + robocop2_draw_sprites(screen->machine, bitmap, cliprect); + decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0); return 0; } VIDEO_UPDATE( mutantf ) { - flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); - deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); - deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll); + running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom"); + UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff); + UINT16 priority = decodev_priority_r(deco16ic, 0, 0xffff); + + flip_screen_set(screen->machine, BIT(flip, 7)); + decodev_pf12_update(deco16ic, cninja_pf1_rowscroll, cninja_pf2_rowscroll); + decodev_pf34_update(deco16ic, cninja_pf3_rowscroll, cninja_pf4_rowscroll); /* Draw playfields */ - bitmap_fill(bitmap,cliprect,0x400); /* Confirmed */ + bitmap_fill(bitmap, cliprect, 0x400); /* Confirmed */ /* There is no priority prom on this board, but there is a priority control word, the only values used in game appear @@ -559,9 +507,9 @@ VIDEO_UPDATE( mutantf ) The other bits may control alpha blend on the 2nd sprite chip, or layer order. */ - deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,0); - deco16_tilemap_2_draw(screen,bitmap,cliprect,0,0); - deco16_tilemap_3_draw(screen,bitmap,cliprect,0,0); + decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 0); + decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 0); /* We need to abuse the priority bitmap a little by clearing it before drawing each sprite layer. This is because there is no priority @@ -569,17 +517,20 @@ VIDEO_UPDATE( mutantf ) priority between sprites in each layer. Ie, if we didn't do this, then when two alpha blended shadows overlapped then they would be 25% transparent against the background, rather than 50% */ - if (deco16_priority&1) { - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); - mutantf_draw_sprites(screen->machine,bitmap,cliprect,screen->machine->generic.buffered_spriteram.u16,3); - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); - mutantf_draw_sprites(screen->machine,bitmap,cliprect,screen->machine->generic.buffered_spriteram2.u16,4); - } else { - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); - mutantf_draw_sprites(screen->machine,bitmap,cliprect,screen->machine->generic.buffered_spriteram2.u16,4); - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); - mutantf_draw_sprites(screen->machine,bitmap,cliprect,screen->machine->generic.buffered_spriteram.u16,3); + if (priority & 1) + { + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + mutantf_draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 3); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + mutantf_draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram2.u16, 4); + } + else + { + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + mutantf_draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram2.u16, 4); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + mutantf_draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 3); } - deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); + decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0); return 0; } diff --git a/src/mame/video/dassault.c b/src/mame/video/dassault.c index 17eded6f821..82bfc8251ce 100644 --- a/src/mame/video/dassault.c +++ b/src/mame/video/dassault.c @@ -5,50 +5,56 @@ ****************************************************************************/ #include "emu.h" -#include "includes/deco16ic.h" +#include "video/decodev.h" + +UINT16 *dassault_pf2_rowscroll,*dassault_pf4_rowscroll; /******************************************************************************/ -static void draw_sprites(running_machine* machine, bitmap_t *bitmap, const rectangle *cliprect, int pf_priority) +static void draw_sprites( running_machine* machine, bitmap_t *bitmap, const rectangle *cliprect, int pf_priority ) { + running_device *deco16ic = devtag_get_device(machine, "deco_custom"); UINT16 *buffered_spriteram16 = machine->generic.buffered_spriteram.u16; - int x,y,sprite,colour,multi,fx,fy,inc,flash,mult; + int x, y, sprite, colour, multi, fx, fy, inc, flash, mult; int offs, bank, gfxbank; const UINT16 *spritebase; /* Have to loop over the two sprite sources */ - for (bank=0; bank<2; bank++) + for (bank = 0; bank < 2; bank++) { - for (offs = 0x800-4;offs >= 0; offs -= 4) + for (offs = 0x800 - 4; offs >= 0; offs -= 4) { - int alpha=0xff, pmask=0; + int alpha = 0xff, pmask = 0; /* Draw the main spritebank after the other one */ - if (bank==0) + if (bank == 0) { - spritebase=buffered_spriteram16; - gfxbank=3; + spritebase = buffered_spriteram16; + gfxbank = 3; } else { - spritebase=machine->generic.buffered_spriteram2.u16; - gfxbank=4; + spritebase = machine->generic.buffered_spriteram2.u16; + gfxbank = 4; } - sprite = spritebase[offs+1] & 0x7fff; - if (!sprite) continue; + sprite = spritebase[offs + 1] & 0x7fff; + if (!sprite) + continue; - x = spritebase[offs+2]; + x = spritebase[offs + 2]; /* Alpha on chip 2 only */ - if (bank==1 && x&0xc000) - alpha=0x80; + if (bank == 1 && x & 0xc000) + alpha = 0x80; y = spritebase[offs]; - flash=y&0x1000; - if (flash && (video_screen_get_frame_number(machine->primary_screen) & 1)) continue; - colour = (x >> 9) &0x1f; - if (y&0x8000) colour+=32; + flash = y & 0x1000; + if (flash && (video_screen_get_frame_number(machine->primary_screen) & 1)) + continue; + colour = (x >> 9) & 0x1f; + if (y & 0x8000) + colour += 32; fx = y & 0x2000; fy = y & 0x4000; @@ -61,7 +67,8 @@ static void draw_sprites(running_machine* machine, bitmap_t *bitmap, const recta x = 304 - x; y = 240 - y; - if (x>320) continue; /* Speedup */ + if (x > 320) + continue; /* Speedup */ sprite &= ~multi; if (fy) @@ -72,70 +79,91 @@ static void draw_sprites(running_machine* machine, bitmap_t *bitmap, const recta inc = 1; } - if (flip_screen_get(machine)) { - y=240-y; - x=304-x; - if (fx) fx=0; else fx=1; - if (fy) fy=0; else fy=1; - mult=16; + if (flip_screen_get(machine)) + { + y = 240 - y; + x = 304 - x; + if (fx) fx = 0; else fx = 1; + if (fy) fy = 0; else fy = 1; + mult = 16; } - else mult=-16; + else mult = -16; /* Priority */ - switch (pf_priority&3) { + switch (pf_priority & 3) + { case 0: - if (bank==0) { - switch (spritebase[offs+2]&0xc000) { - case 0xc000: pmask=1; break; - case 0x8000: pmask=8; break; - case 0x4000: pmask=32; break; - case 0x0000: pmask=128; break; + if (bank == 0) + { + switch (spritebase[offs+2]&0xc000) + { + case 0xc000: pmask = 1; break; + case 0x8000: pmask = 8; break; + case 0x4000: pmask = 32; break; + case 0x0000: pmask = 128; break; } - } else { - if (spritebase[offs+2]&0x8000) pmask=64; /* Check */ - else pmask=64; + } + else + { + if (spritebase[offs + 2] & 0x8000) + pmask = 64; /* Check */ + else + pmask = 64; } break; case 1: - if (bank==0) { - switch (spritebase[offs+2]&0xc000) { - case 0xc000: pmask=1; break; - case 0x8000: pmask=8; break; - case 0x4000: pmask=32; break; - case 0x0000: pmask=128; break; + if (bank == 0) + { + switch (spritebase[offs + 2] & 0xc000) + { + case 0xc000: pmask = 1; break; + case 0x8000: pmask = 8; break; + case 0x4000: pmask = 32; break; + case 0x0000: pmask = 128; break; } - } else { - if (spritebase[offs+2]&0x8000) pmask=16; /* Check */ - else pmask=16; + } + else + { + if (spritebase[offs + 2] & 0x8000) + pmask = 16; /* Check */ + else + pmask = 16; } break; case 2: /* Unused */ case 3: - if (bank==0) { - switch (spritebase[offs+2]&0xc000) { - case 0xc000: pmask=1; break; - case 0x8000: pmask=8; break; - case 0x4000: pmask=32; break; - case 0x0000: pmask=128; break; + if (bank == 0) + { + switch (spritebase[offs + 2] & 0xc000) + { + case 0xc000: pmask = 1; break; + case 0x8000: pmask = 8; break; + case 0x4000: pmask = 32; break; + case 0x0000: pmask = 128; break; } - } else { - if (spritebase[offs+2]&0x8000) pmask=64; /* Check */ - else pmask=64; + } + else + { + if (spritebase[offs + 2] & 0x8000) + pmask = 64; /* Check */ + else + pmask = 64; } break; } while (multi >= 0) { - deco16_pdrawgfx( + decodev_pdrawgfx( + deco16ic, bitmap,cliprect,machine->gfx[gfxbank], sprite - multi * inc, colour, - fx,fy, - x,y + mult * multi, - 0,pmask,1<>4)&0xf)<<12; -} - -VIDEO_START( dassault ) -{ - deco16_2_video_init(machine, 0); - - deco16_set_tilemap_bank_callback(0,dassault_bank_callback); - deco16_set_tilemap_bank_callback(1,dassault_bank_callback); - deco16_set_tilemap_bank_callback(2,dassault_bank_callback); - deco16_set_tilemap_bank_callback(3,dassault_bank_callback); -} - -/******************************************************************************/ - VIDEO_UPDATE( dassault ) { + running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom"); + UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff); + UINT16 priority = decodev_priority_r(deco16ic, 0, 0xffff); + /* Update tilemaps */ - flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); - deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); - deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll); + flip_screen_set(screen->machine, BIT(flip, 7)); + decodev_pf12_update(deco16ic, 0, dassault_pf2_rowscroll); + decodev_pf34_update(deco16ic, 0, dassault_pf4_rowscroll); /* Draw playfields/update priority bitmap */ - deco16_clear_sprite_priority_bitmap(); - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); - bitmap_fill(bitmap,cliprect,screen->machine->pens[3072]); - deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,0); + decodev_clear_sprite_priority_bitmap(deco16ic); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + bitmap_fill(bitmap, cliprect, screen->machine->pens[3072]); + decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); /* The middle playfields can be swapped priority-wise */ - if ((deco16_priority&3)==0) { - deco16_tilemap_2_draw(screen,bitmap,cliprect,0,2); - deco16_tilemap_3_draw(screen,bitmap,cliprect,0,16); - } else if ((deco16_priority&3)==1) { - deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2); - deco16_tilemap_2_draw(screen,bitmap,cliprect,0,64); - } else if ((deco16_priority&3)==3) { - deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2); - deco16_tilemap_2_draw(screen,bitmap,cliprect,0,16); - } else { + if ((priority & 3) == 0) + { + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 2); + decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 16); + } + else if ((priority & 3) == 1) + { + decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 2); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 64); + } + else if ((priority & 3) == 3) + { + decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 2); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 16); + } + else + { /* Unused */ } /* Draw sprites - two sprite generators, with selectable priority */ - draw_sprites(screen->machine,bitmap,cliprect,deco16_priority); - deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); + draw_sprites(screen->machine, bitmap, cliprect, priority); + decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0); return 0; } diff --git a/src/mame/video/decodev.c b/src/mame/video/decodev.c index e1d9a50c8d9..bdb6bd0a4b3 100644 --- a/src/mame/video/decodev.c +++ b/src/mame/video/decodev.c @@ -582,99 +582,66 @@ static void custom_tilemap_draw( /******************************************************************************/ -#if 0 -/* Each game can have banking set up differently depending on how the roms are -connected, and what rom slots are used */ - -void deco16_set_tilemap_bank_callback(int tmap, int (*callback)(const int bank)) +/* robocop 2 can switch between 2 tilemaps at 4bpp, or 1 at 8bpp */ +void decodev_set_tilemap_colour_mask( running_device *device, int tmap, int mask ) { - switch (tmap) { - case 0: deco16_bank_callback_1=callback; break; - case 1: deco16_bank_callback_2=callback; break; - case 2: deco16_bank_callback_3=callback; break; - case 3: deco16_bank_callback_4=callback; break; + deco16ic_state *deco16ic = get_safe_token(device); + + switch (tmap) + { + case 0: deco16ic->pf1_colourmask = mask; break; + case 1: deco16ic->pf2_colourmask = mask; break; + case 2: deco16ic->pf3_colourmask = mask; break; + case 3: deco16ic->pf4_colourmask = mask; break; } } -/* Each game can have colours set up differently depending on how the playfield -generator is connected to paletteram */ - -void deco16_set_tilemap_colour_base(int tmap, int base) +void decodev_pf34_set_gfxbank( running_device *device, int small, int big ) { - switch (tmap) { - case 0: deco16_pf1_colour_bank=base; break; - case 1: deco16_pf2_colour_bank=base; break; - case 2: deco16_pf3_colour_bank=base; break; - case 3: deco16_pf4_colour_bank=base; break; + deco16ic_state *deco16ic = get_safe_token(device); + + if (deco16ic->pf34_last_big != big) + { + if (deco16ic->pf3_tilemap_16x16) + tilemap_mark_all_tiles_dirty(deco16ic->pf3_tilemap_16x16); + if (deco16ic->pf4_tilemap_16x16) + tilemap_mark_all_tiles_dirty(deco16ic->pf4_tilemap_16x16); + + deco16ic->pf34_last_big = big; } + deco16ic->pf34_16x16_gfx_bank = big; } -void deco16_set_tilemap_colour_mask(int tmap, int mask) +/* stoneage has broken scroll registers */ +void decodev_set_scrolldx( running_device *device, int tmap, int size, int dx, int dx_if_flipped ) { - switch (tmap) { - case 0: deco16_pf1_colourmask=mask; break; - case 1: deco16_pf2_colourmask=mask; break; - case 2: deco16_pf3_colourmask=mask; break; - case 3: deco16_pf4_colourmask=mask; break; + deco16ic_state *deco16ic = get_safe_token(device); + + switch (tmap) + { + case 0: + if (!size) + tilemap_set_scrolldx(deco16ic->pf1_tilemap_16x16, dx, dx_if_flipped); + else + tilemap_set_scrolldx(deco16ic->pf1_tilemap_8x8, dx, dx_if_flipped); + break; + case 1: + if (!size) + tilemap_set_scrolldx(deco16ic->pf2_tilemap_16x16, dx, dx_if_flipped); + else + tilemap_set_scrolldx(deco16ic->pf2_tilemap_8x8, dx, dx_if_flipped); + break; + case 2: + if (!size) + tilemap_set_scrolldx(deco16ic->pf3_tilemap_16x16, dx, dx_if_flipped); + break; + case 3: + if (!size) + tilemap_set_scrolldx(deco16ic->pf4_tilemap_16x16, dx, dx_if_flipped); + break; } } -void deco16_set_tilemap_transparency_mask(int tmap, int mask) -{ - switch (tmap) { - case 0: deco16_pf1_trans_mask=mask; break; - case 1: deco16_pf2_trans_mask=mask; break; - case 2: deco16_pf3_trans_mask=mask; break; - case 3: deco16_pf4_trans_mask=mask; break; - } -} - -void deco16_pf12_set_gfxbank(int small, int big) -{ - if (pf12_last_small!=small) { - if (pf1_tilemap_8x8) - tilemap_mark_all_tiles_dirty(pf1_tilemap_8x8); - if (pf2_tilemap_8x8) - tilemap_mark_all_tiles_dirty(pf2_tilemap_8x8); - pf12_last_small=small; - } - deco16_pf12_8x8_gfx_bank=small; - - if (pf12_last_big!=big) { - if (pf1_tilemap_16x16) - tilemap_mark_all_tiles_dirty(pf1_tilemap_16x16); - if (pf2_tilemap_16x16) - tilemap_mark_all_tiles_dirty(pf2_tilemap_16x16); - pf12_last_big=big; - } - deco16_pf12_16x16_gfx_bank=big; - -} - -void deco16_pf34_set_gfxbank(int small, int big) -{ - if (pf34_last_big!=big) { - if (pf3_tilemap_16x16) - tilemap_mark_all_tiles_dirty(pf3_tilemap_16x16); - if (pf4_tilemap_16x16) - tilemap_mark_all_tiles_dirty(pf4_tilemap_16x16); - pf34_last_big=big; - } - deco16_pf34_16x16_gfx_bank=big; -} - -tilemap_t *deco16_get_tilemap(int pf, int size) -{ - switch (pf) { - case 0: if (size) return pf1_tilemap_8x8; return pf1_tilemap_16x16; - case 1: if (size) return pf2_tilemap_8x8; return pf2_tilemap_16x16; - case 2: if (size) return 0; return pf3_tilemap_16x16; - case 3: if (size) return 0; return pf4_tilemap_16x16; - } - return 0; -} -#endif - /******************************************************************************/ WRITE16_DEVICE_HANDLER( decodev_pf1_data_w ) @@ -1057,8 +1024,8 @@ void decodev_pf34_update( running_device *device, const UINT16 *rowscroll_1_ptr, bank1 = deco16ic->bank_cb[2](deco16ic->pf34_control[7] & 0xff); if (bank1 != deco16ic->pf3_bank) { - //if (deco16ic->pf3_tilemap_8x8) tilemap_mark_all_tiles_dirty(deco16ic->pf3_tilemap_8x8); - if (deco16ic->pf3_tilemap_16x16) tilemap_mark_all_tiles_dirty(deco16ic->pf3_tilemap_16x16); + if (deco16ic->pf3_tilemap_16x16) + tilemap_mark_all_tiles_dirty(deco16ic->pf3_tilemap_16x16); deco16ic->pf3_bank = bank1; } @@ -1069,8 +1036,8 @@ void decodev_pf34_update( running_device *device, const UINT16 *rowscroll_1_ptr, bank2 = deco16ic->bank_cb[3](deco16ic->pf34_control[7] >> 8); if (bank2 != deco16ic->pf4_bank) { - //if (deco16ic->pf4_tilemap_8x8) tilemap_mark_all_tiles_dirty(deco16ic->pf4_tilemap_8x8); - if (deco16ic->pf4_tilemap_16x16) tilemap_mark_all_tiles_dirty(deco16ic->pf4_tilemap_16x16); + if (deco16ic->pf4_tilemap_16x16) + tilemap_mark_all_tiles_dirty(deco16ic->pf4_tilemap_16x16); deco16ic->pf4_bank = bank2; } @@ -1270,6 +1237,26 @@ static DEVICE_START( deco16ic ) deco16ic->sprite_priority_bitmap = auto_bitmap_alloc(device->machine, width, height, BITMAP_FORMAT_INDEXED8); + deco16ic->bank_cb[0] = intf->bank_cb0; + deco16ic->bank_cb[1] = intf->bank_cb1; + deco16ic->bank_cb[2] = intf->bank_cb2; + deco16ic->bank_cb[3] = intf->bank_cb3; + + deco16ic->pf1_trans_mask = intf->trans_mask1; + deco16ic->pf2_trans_mask = intf->trans_mask2; + deco16ic->pf3_trans_mask = intf->trans_mask3; + deco16ic->pf4_trans_mask = intf->trans_mask4; + + deco16ic->pf1_colour_bank = intf->col_base1; + deco16ic->pf2_colour_bank = intf->col_base2; + deco16ic->pf3_colour_bank = intf->col_base3; + deco16ic->pf4_colour_bank = intf->col_base4; + + deco16ic->pf1_colourmask = intf->col_mask1; + deco16ic->pf2_colourmask = intf->col_mask2; + deco16ic->pf3_colourmask = intf->col_mask3; + deco16ic->pf4_colourmask = intf->col_mask4; + deco16ic->pf1_tilemap_16x16 = tilemap_create_device(device, get_pf1_tile_info, deco16_scan_rows, 16, 16, 64, 32); deco16ic->pf1_tilemap_8x8 = tilemap_create_device(device, get_pf1_tile_info_b, tilemap_scan_rows, 8, 8, 64, 32); @@ -1316,26 +1303,6 @@ static DEVICE_START( deco16ic ) deco16ic->pf12_control = auto_alloc_array_clear(device->machine, UINT16, 0x10 / 2); deco16ic->pf34_control = auto_alloc_array_clear(device->machine, UINT16, 0x10 / 2); - deco16ic->bank_cb[0] = intf->bank_cb0; - deco16ic->bank_cb[1] = intf->bank_cb1; - deco16ic->bank_cb[2] = intf->bank_cb2; - deco16ic->bank_cb[3] = intf->bank_cb3; - - deco16ic->pf1_trans_mask = intf->trans_mask1; - deco16ic->pf2_trans_mask = intf->trans_mask2; - deco16ic->pf3_trans_mask = intf->trans_mask3; - deco16ic->pf4_trans_mask = intf->trans_mask4; - - deco16ic->pf1_colour_bank = intf->col_base1; - deco16ic->pf2_colour_bank = intf->col_base2; - deco16ic->pf3_colour_bank = intf->col_base3; - deco16ic->pf4_colour_bank = intf->col_base4; - - deco16ic->pf1_colourmask = intf->col_mask1; - deco16ic->pf2_colourmask = intf->col_mask2; - deco16ic->pf3_colourmask = intf->col_mask3; - deco16ic->pf4_colourmask = intf->col_mask4; - state_save_register_device_item(device, 0, deco16ic->priority); state_save_register_device_item(device, 0, deco16ic->raster_display_position); state_save_register_device_item(device, 0, deco16ic->use_custom_pf1); @@ -1363,29 +1330,6 @@ static DEVICE_START( deco16ic ) state_save_register_device_item_pointer(device, 0, deco16ic->pf34_control, 0x10 / 2); } -#if 0 -static void deco16_video_init(running_machine *machine, int pf12_only, int split, int full_width) -{ - - -} - -void deco16_1_video_init(running_machine *machine) /* 1 times playfield generator chip */ -{ - deco16_video_init(machine, 1, 0, 1); -} - -void deco16_2_video_init(running_machine *machine, int split) /* 2 times playfield generator chips */ -{ - deco16_video_init(machine, 0, split, 1); -} - -void deco16_2_video_init_half_width(running_machine *machine) /* 2 times playfield generator chips */ -{ - deco16_video_init(machine, 0, 0, 0); -} -#endif - static DEVICE_RESET( deco16ic ) { deco16ic_state *deco16ic = get_safe_token(device); diff --git a/src/mame/video/decodev.h b/src/mame/video/decodev.h index 30cfbfb3180..ba485f92290 100644 --- a/src/mame/video/decodev.h +++ b/src/mame/video/decodev.h @@ -104,14 +104,21 @@ void decodev_tilemap_2_draw(running_device *device, bitmap_t *bitmap, const rect void decodev_tilemap_3_draw(running_device *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority); void decodev_tilemap_4_draw(running_device *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority); -/* used by boogwing */ +/* used by boogwing, nitrobal */ void decodev_tilemap_34_combine_draw(running_device *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority); -/* used by boogwing */ +/* used by boogwing, dassault, nitrobal */ void decodev_clear_sprite_priority_bitmap(running_device *device); void decodev_pdrawgfx( running_device *device, bitmap_t *dest,const rectangle *clip,const gfx_element *gfx, UINT32 code,UINT32 color,int flipx,int flipy,int sx,int sy, int transparent_color,UINT32 pri_mask,UINT32 sprite_mask,UINT8 write_pri,UINT8 alpha); + +/* used by robocop2 */ +void decodev_set_tilemap_colour_mask(running_device *device, int tmap, int mask); +void decodev_pf34_set_gfxbank(running_device *device, int small, int big); + +/* used by stoneage */ +void decodev_set_scrolldx(running_device *device, int tmap, int size, int dx, int dx_if_flipped); diff --git a/src/mame/video/funkyjet.c b/src/mame/video/funkyjet.c index 88587e8f965..0b70b2e732e 100644 --- a/src/mame/video/funkyjet.c +++ b/src/mame/video/funkyjet.c @@ -5,15 +5,12 @@ ***************************************************************************/ #include "emu.h" -#include "includes/deco16ic.h" +#include "video/decodev.h" + +UINT16 *funkyjet_pf1_rowscroll,*funkyjet_pf2_rowscroll; /******************************************************************************/ -VIDEO_START( funkyjet ) -{ - deco16_1_video_init(machine); -} - static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) { UINT16 *spriteram16 = machine->generic.spriteram.u16; @@ -41,7 +38,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta if (x >= 320) x -= 512; if (y >= 256) y -= 512; y = 240 - y; - x = 304 - x; + x = 304 - x; if (x>320) continue; @@ -79,12 +76,15 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta VIDEO_UPDATE( funkyjet ) { - flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); - deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); + running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom"); + UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff); - bitmap_fill(bitmap,cliprect,768); - deco16_tilemap_2_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,0); - deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); - draw_sprites(screen->machine,bitmap,cliprect); + flip_screen_set(screen->machine, BIT(flip, 7)); + decodev_pf12_update(deco16ic, funkyjet_pf1_rowscroll, funkyjet_pf2_rowscroll); + + bitmap_fill(bitmap, cliprect, 768); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0); + draw_sprites(screen->machine, bitmap, cliprect); return 0; } diff --git a/src/mame/video/rohga.c b/src/mame/video/rohga.c index 044b7963fa3..57d26e16553 100644 --- a/src/mame/video/rohga.c +++ b/src/mame/video/rohga.c @@ -5,10 +5,13 @@ ***************************************************************************/ #include "emu.h" -#include "includes/deco16ic.h" +#include "video/decodev.h" static UINT16 * rohga_spriteram; +UINT16 *rohga_pf1_rowscroll,*rohga_pf2_rowscroll; +UINT16 *rohga_pf3_rowscroll,*rohga_pf4_rowscroll; + /******************************************************************************/ WRITE16_HANDLER( rohga_buffer_spriteram16_w ) @@ -19,48 +22,9 @@ WRITE16_HANDLER( rohga_buffer_spriteram16_w ) memcpy(space->machine->generic.buffered_spriteram.u16, space->machine->generic.spriteram.u16, 0x800); } -static int wizdfire_bank_callback(const int bank) -{ - return ((bank>>4)&0x3)<<12; -} - VIDEO_START( rohga ) { rohga_spriteram = auto_alloc_array(machine, UINT16, 0x800/2); - - deco16_2_video_init(machine, 0); - - deco16_set_tilemap_bank_callback(0,wizdfire_bank_callback); - deco16_set_tilemap_bank_callback(1,wizdfire_bank_callback); - deco16_set_tilemap_bank_callback(2,wizdfire_bank_callback); - deco16_set_tilemap_bank_callback(3,wizdfire_bank_callback); -} - -VIDEO_START( wizdfire ) -{ - deco16_2_video_init(machine, 0); - - deco16_set_tilemap_bank_callback(0,wizdfire_bank_callback); - deco16_set_tilemap_bank_callback(1,wizdfire_bank_callback); - deco16_set_tilemap_bank_callback(2,wizdfire_bank_callback); - deco16_set_tilemap_bank_callback(3,wizdfire_bank_callback); - - deco16_pf1_rowscroll=deco16_pf2_rowscroll=0; -} - -VIDEO_START( nitrobal ) -{ - deco16_2_video_init_half_width(machine); - - deco16_set_tilemap_bank_callback(0,wizdfire_bank_callback); - deco16_set_tilemap_bank_callback(1,wizdfire_bank_callback); - deco16_set_tilemap_bank_callback(2,wizdfire_bank_callback); - deco16_set_tilemap_bank_callback(3,wizdfire_bank_callback); - - deco16_set_tilemap_colour_base(2,0); - deco16_set_tilemap_colour_mask(2,0); - deco16_set_tilemap_colour_base(3,0); - deco16_set_tilemap_colour_mask(3,0); } /******************************************************************************/ @@ -241,7 +205,9 @@ static void wizdfire_draw_sprites(running_machine *machine, bitmap_t *bitmap, co static void nitrobal_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, const UINT16 *spriteptr, int gfxbank) { + running_device *deco16ic = devtag_get_device(machine, "deco_custom"); int offs,end,inc; + UINT16 priority = decodev_priority_r(deco16ic, 0, 0xffff); /* Alternate format from most 16 bit games - same as Captain America and Mutant Fighter @@ -374,7 +340,7 @@ sprite 2: // else // tilemap_pri=8; - if (deco16_priority) + if (priority) tilemap_pri=8; else tilemap_pri=64; @@ -416,7 +382,8 @@ sprite 2: for (x=0; xgfx[gfxbank], sprite + y + h * x, colour, @@ -434,45 +401,49 @@ sprite 2: static void update_rohga(running_device *screen, bitmap_t *bitmap, const rectangle *cliprect, int is_schmeisr) { + running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom"); + UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff); + UINT16 priority = decodev_priority_r(deco16ic, 0, 0xffff); + /* Update playfields */ - flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); - deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); - deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll); + flip_screen_set(screen->machine, BIT(flip, 7)); + decodev_pf12_update(deco16ic, rohga_pf1_rowscroll, rohga_pf2_rowscroll); + decodev_pf34_update(deco16ic, rohga_pf3_rowscroll, rohga_pf4_rowscroll); /* Draw playfields */ - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); - bitmap_fill(bitmap,cliprect,screen->machine->pens[768]); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + bitmap_fill(bitmap, cliprect, screen->machine->pens[768]); - switch (deco16_priority&3) + switch (priority & 3) { case 0: - if (deco16_priority&4) + if (priority & 4) { // Draw as 1 8BPP layer - deco16_tilemap_34_combine_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,3); + decodev_tilemap_34_combine_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 3); } else { // Draw as 2 4BPP layers - deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,1); - deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2); + decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1); + decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 2); } - deco16_tilemap_2_draw(screen,bitmap,cliprect,0,4); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 4); break; case 1: - deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,1); - deco16_tilemap_2_draw(screen,bitmap,cliprect,0,2); - deco16_tilemap_3_draw(screen,bitmap,cliprect,0,4); + decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 2); + decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 4); break; case 2: - deco16_tilemap_2_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,1); - deco16_tilemap_4_draw(screen,bitmap,cliprect,0,2); - deco16_tilemap_3_draw(screen,bitmap,cliprect,0,4); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1); + decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, 0, 2); + decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 4); break; } - rohga_draw_sprites(screen->machine,bitmap,cliprect,rohga_spriteram,is_schmeisr); - deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); + rohga_draw_sprites(screen->machine, bitmap, cliprect, rohga_spriteram, is_schmeisr); + decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0); } VIDEO_UPDATE( rohga ) @@ -491,52 +462,59 @@ VIDEO_UPDATE( schmeisr ) VIDEO_UPDATE( wizdfire ) { + running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom"); + UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff); + UINT16 priority = decodev_priority_r(deco16ic, 0, 0xffff); + /* Update playfields */ - flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); - deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); - deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll); + flip_screen_set(screen->machine, BIT(flip, 7)); + decodev_pf12_update(deco16ic, 0, 0); + decodev_pf34_update(deco16ic, rohga_pf3_rowscroll, rohga_pf4_rowscroll); /* Draw playfields - Palette of 2nd playfield chip visible if playfields turned off */ - bitmap_fill(bitmap,cliprect,screen->machine->pens[512]); + bitmap_fill(bitmap, cliprect, screen->machine->pens[512]); - deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,0); - wizdfire_draw_sprites(screen->machine,bitmap,cliprect,screen->machine->generic.buffered_spriteram.u16,4,3); - deco16_tilemap_2_draw(screen,bitmap,cliprect,0,0); - wizdfire_draw_sprites(screen->machine,bitmap,cliprect,screen->machine->generic.buffered_spriteram.u16,3,3); + decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + wizdfire_draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 4, 3); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 0); + wizdfire_draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 3, 3); - if ((deco16_priority&0x1f)==0x1f) /* Wizdfire has bit 0x40 always set, Dark Seal 2 doesn't?! */ - deco16_tilemap_3_draw(screen,bitmap,cliprect,TILEMAP_DRAW_ALPHA(0x80),0); + if ((priority & 0x1f) == 0x1f) /* Wizdfire has bit 0x40 always set, Dark Seal 2 doesn't?! */ + decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_ALPHA(0x80), 0); else - deco16_tilemap_3_draw(screen,bitmap,cliprect,0,0); + decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 0); /* See notes in wizdfire_draw_sprites about this */ - wizdfire_draw_sprites(screen->machine,bitmap,cliprect,screen->machine->generic.buffered_spriteram.u16,0,3); - wizdfire_draw_sprites(screen->machine,bitmap,cliprect,screen->machine->generic.buffered_spriteram2.u16,2,4); - wizdfire_draw_sprites(screen->machine,bitmap,cliprect,screen->machine->generic.buffered_spriteram2.u16,1,4); + wizdfire_draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 0, 3); + wizdfire_draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram2.u16, 2, 4); + wizdfire_draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram2.u16, 1, 4); - deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); + decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0); return 0; } VIDEO_UPDATE( nitrobal ) { + running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom"); + UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff); + /* Update playfields */ - flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); - deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); - deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll); + flip_screen_set(screen->machine, BIT(flip, 7)); + decodev_pf12_update(deco16ic, rohga_pf1_rowscroll, rohga_pf2_rowscroll); + decodev_pf34_update(deco16ic, rohga_pf3_rowscroll, rohga_pf4_rowscroll); /* Draw playfields - Palette of 2nd playfield chip visible if playfields turned off */ - bitmap_fill(bitmap,cliprect,screen->machine->pens[512]); - bitmap_fill(screen->machine->priority_bitmap,NULL,0); - deco16_clear_sprite_priority_bitmap(); + bitmap_fill(bitmap, cliprect, screen->machine->pens[512]); + bitmap_fill(screen->machine->priority_bitmap, NULL, 0); + decodev_clear_sprite_priority_bitmap(deco16ic); /* pf3 and pf4 are combined into a single 8bpp bitmap */ - deco16_tilemap_34_combine_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,0); + decodev_tilemap_34_combine_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); - deco16_tilemap_2_draw(screen,bitmap,cliprect,0,16); - nitrobal_draw_sprites(screen->machine,bitmap,cliprect,screen->machine->generic.buffered_spriteram.u16,3); - nitrobal_draw_sprites(screen->machine,bitmap,cliprect,screen->machine->generic.buffered_spriteram2.u16,4); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 16); + nitrobal_draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 3); + nitrobal_draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram2.u16, 4); - deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); + decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0); return 0; } diff --git a/src/mame/video/vaportra.c b/src/mame/video/vaportra.c index d1692922114..2b5f31cd449 100644 --- a/src/mame/video/vaportra.c +++ b/src/mame/video/vaportra.c @@ -10,40 +10,12 @@ ***************************************************************************/ #include "emu.h" -#include "includes/deco16ic.h" +#include "video/decodev.h" static UINT16 vaportra_priority[2]; /******************************************************************************/ -static int vaportra_bank_callback(const int bank) -{ - return ((bank>>4)&0x7) * 0x1000; -} - - -VIDEO_START( vaportra ) -{ - deco16_2_video_init(machine, 0); - - deco16_pf1_rowscroll = 0; - deco16_pf2_rowscroll = 0; - deco16_pf3_rowscroll = 0; - deco16_pf4_rowscroll = 0; - - deco16_set_tilemap_bank_callback(0, vaportra_bank_callback); - deco16_set_tilemap_bank_callback(1, vaportra_bank_callback); - deco16_set_tilemap_bank_callback(2, vaportra_bank_callback); - deco16_set_tilemap_bank_callback(3, vaportra_bank_callback); - - deco16_pf1_colour_bank=0x00; - deco16_pf2_colour_bank=0x20; - deco16_pf4_colour_bank=0x40; - deco16_pf3_colour_bank=0x30; -} - -/******************************************************************************/ - WRITE16_HANDLER( vaportra_priority_w ) { @@ -148,40 +120,45 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta VIDEO_UPDATE( vaportra ) { - int pri=vaportra_priority[0] & 0x03; + running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom"); + UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff); + int pri = vaportra_priority[0] & 0x03; - flip_screen_set(screen->machine, !(deco16_pf12_control[0]&0x80) ); - - deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); - deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll); + flip_screen_set(screen->machine, !BIT(flip, 7)); + decodev_pf12_update(deco16ic, 0, 0); + decodev_pf34_update(deco16ic, 0, 0); /* Draw playfields */ - if (pri==0) { - deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,0); - deco16_tilemap_3_draw(screen,bitmap,cliprect,0,0); - draw_sprites(screen->machine, bitmap,cliprect,0); - deco16_tilemap_2_draw(screen,bitmap,cliprect,0,0); + if (pri == 0) + { + decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 0); + draw_sprites(screen->machine, bitmap, cliprect, 0); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 0); } - else if (pri==1) { - deco16_tilemap_3_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,0); - deco16_tilemap_4_draw(screen,bitmap,cliprect,0,0); - draw_sprites(screen->machine, bitmap,cliprect,0); - deco16_tilemap_2_draw(screen,bitmap,cliprect,0,0); + else if (pri == 1) + { + decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, 0, 0); + draw_sprites(screen->machine, bitmap, cliprect, 0); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 0); } - else if (pri==2) { - deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,0); - deco16_tilemap_2_draw(screen,bitmap,cliprect,0,0); - draw_sprites(screen->machine, bitmap,cliprect,0); - deco16_tilemap_3_draw(screen,bitmap,cliprect,0,0); + else if (pri == 2) + { + decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 0); + draw_sprites(screen->machine, bitmap, cliprect, 0); + decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 0); } - else { - deco16_tilemap_3_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,0); - deco16_tilemap_2_draw(screen,bitmap,cliprect,0,0); - draw_sprites(screen->machine, bitmap,cliprect,0); - deco16_tilemap_4_draw(screen,bitmap,cliprect,0,0); + else + { + decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 0); + draw_sprites(screen->machine, bitmap, cliprect, 0); + decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, 0, 0); } - draw_sprites(screen->machine,bitmap,cliprect,1); - deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); + draw_sprites(screen->machine, bitmap, cliprect, 1); + decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0); return 0; }