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
This commit is contained in:
Fabio Priuli 2010-02-25 12:42:06 +00:00
parent 56c1f02268
commit e462954734
23 changed files with 929 additions and 856 deletions

View File

@ -90,7 +90,6 @@
extern UINT16 *boogwing_pf1_rowscroll,*boogwing_pf2_rowscroll; extern UINT16 *boogwing_pf1_rowscroll,*boogwing_pf2_rowscroll;
extern UINT16 *boogwing_pf3_rowscroll,*boogwing_pf4_rowscroll; extern UINT16 *boogwing_pf3_rowscroll,*boogwing_pf4_rowscroll;
VIDEO_START(boogwing);
VIDEO_UPDATE(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(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(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(0x264000, 0x265fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w)
AM_RANGE(0x266000, 0x267fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf2_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(0x268000, 0x268fff) AM_RAM AM_BASE(&boogwing_pf1_rowscroll)
AM_RANGE(0x26a000, 0x26afff) AM_RAM AM_BASE(&boogwing_pf2_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_PALETTE_LENGTH(2048)
MDRV_GFXDECODE(boogwing) MDRV_GFXDECODE(boogwing)
MDRV_VIDEO_START(boogwing)
MDRV_VIDEO_UPDATE(boogwing) MDRV_VIDEO_UPDATE(boogwing)
MDRV_DECO16IC_ADD("deco_custom", boogwing_deco16ic_intf) MDRV_DECO16IC_ADD("deco_custom", boogwing_deco16ic_intf)

View File

@ -22,11 +22,13 @@
#include "sound/2203intf.h" #include "sound/2203intf.h"
#include "sound/2151intf.h" #include "sound/2151intf.h"
#include "sound/okim6295.h" #include "sound/okim6295.h"
#include "includes/deco16ic.h" #include "video/decodev.h"
VIDEO_START( twocrude );
VIDEO_UPDATE( 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_rg_w );
WRITE16_HANDLER( twocrude_palette_24bit_b_w ); WRITE16_HANDLER( twocrude_palette_24bit_b_w );
@ -89,7 +91,7 @@ static WRITE16_HANDLER( twocrude_control_w )
static READ16_HANDLER( twocrude_control_r ) static READ16_HANDLER( twocrude_control_r )
{ {
switch (offset<<1) switch (offset << 1)
{ {
case 0: /* Player 1 & Player 2 joysticks & fire buttons */ case 0: /* Player 1 & Player 2 joysticks & fire buttons */
return input_port_read(space->machine, "P1_P2"); 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(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x080000, 0x083fff) AM_RAM AM_BASE(&twocrude_ram) 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(0x0a0000, 0x0a1fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w)
AM_RANGE(0x0a2000, 0x0a2fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) AM_RANGE(0x0a2000, 0x0a2fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w)
AM_RANGE(0x0a4000, 0x0a47ff) AM_RAM AM_BASE(&deco16_pf1_rowscroll) AM_RANGE(0x0a4000, 0x0a47ff) AM_RAM AM_BASE(&twocrude_pf1_rowscroll)
AM_RANGE(0x0a6000, 0x0a67ff) AM_RAM AM_BASE(&deco16_pf2_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(0x0a8000, 0x0a8fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w)
AM_RANGE(0x0aa000, 0x0aafff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) AM_RANGE(0x0aa000, 0x0aafff) AM_DEVREADWRITE("deco_custom", decodev_pf4_data_r, decodev_pf4_data_w)
AM_RANGE(0x0ac000, 0x0ac7ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) AM_RANGE(0x0ac000, 0x0ac7ff) AM_RAM AM_BASE(&twocrude_pf3_rowscroll)
AM_RANGE(0x0ae000, 0x0ae7ff) AM_RAM AM_BASE(&deco16_pf4_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(0x0b0000, 0x0b07ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
AM_RANGE(0x0b4000, 0x0b4001) AM_WRITENOP AM_RANGE(0x0b4000, 0x0b4001) AM_WRITENOP
AM_RANGE(0x0b5000, 0x0b500f) AM_WRITEONLY AM_BASE(&deco16_pf12_control) AM_RANGE(0x0b5000, 0x0b500f) AM_DEVWRITE("deco_custom", decodev_pf12_control_w)
AM_RANGE(0x0b6000, 0x0b600f) AM_WRITEONLY AM_BASE(&deco16_pf34_control) 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(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(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) AM_RANGE(0x0bc000, 0x0bc00f) AM_READWRITE(twocrude_control_r, twocrude_control_w)
@ -280,6 +282,24 @@ static const ym2151_interface ym2151_config =
sound_irq 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 ) static MACHINE_DRIVER_START( twocrude )
/* basic machine hardware */ /* basic machine hardware */
@ -303,9 +323,10 @@ static MACHINE_DRIVER_START( twocrude )
MDRV_GFXDECODE(cbuster) MDRV_GFXDECODE(cbuster)
MDRV_PALETTE_LENGTH(2048) MDRV_PALETTE_LENGTH(2048)
MDRV_VIDEO_START(twocrude)
MDRV_VIDEO_UPDATE(twocrude) MDRV_VIDEO_UPDATE(twocrude)
MDRV_DECO16IC_ADD("deco_custom", twocrude_deco16ic_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")

View File

@ -43,14 +43,14 @@ Note about version levels using Mutant Fighter as the example:
#include "emu.h" #include "emu.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "includes/cninja.h"
#include "cpu/h6280/h6280.h" #include "cpu/h6280/h6280.h"
#include "includes/deco16ic.h" #include "includes/cninja.h"
#include "includes/decocrpt.h" #include "includes/decocrpt.h"
#include "includes/decoprot.h" #include "includes/decoprot.h"
#include "sound/2203intf.h" #include "sound/2203intf.h"
#include "sound/2151intf.h" #include "sound/2151intf.h"
#include "sound/okim6295.h" #include "sound/okim6295.h"
#include "video/decodev.h"
static int cninja_scanline, cninja_irq_mask; static int cninja_scanline, cninja_irq_mask;
static running_device *raster_irq_timer; static running_device *raster_irq_timer;
@ -144,14 +144,16 @@ static READ16_HANDLER( robocop2_prot_r )
static WRITE16_HANDLER( deco16_pf12_control_w ) 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)); video_screen_update_partial(space->machine->primary_screen, video_screen_get_vpos(space->machine->primary_screen));
} }
static WRITE16_HANDLER( deco16_pf34_control_w ) 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)); 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 ) static ADDRESS_MAP_START( cninja_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x0bffff) AM_ROM AM_RANGE(0x000000, 0x0bffff) AM_ROM
AM_RANGE(0x140000, 0x14000f) AM_WRITE(deco16_pf12_control_w) AM_BASE(&deco16_pf12_control) AM_RANGE(0x140000, 0x14000f) AM_WRITE(deco16_pf12_control_w)
AM_RANGE(0x144000, 0x144fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) AM_RANGE(0x144000, 0x144fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w)
AM_RANGE(0x146000, 0x146fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) AM_RANGE(0x146000, 0x146fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w)
AM_RANGE(0x14c000, 0x14c7ff) AM_WRITEONLY AM_BASE(&deco16_pf1_rowscroll) AM_RANGE(0x14c000, 0x14c7ff) AM_WRITEONLY AM_BASE(&cninja_pf1_rowscroll)
AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE(&deco16_pf2_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(0x150000, 0x15000f) AM_WRITE(deco16_pf34_control_w)
AM_RANGE(0x154000, 0x154fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w)
AM_RANGE(0x156000, 0x156fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom", decodev_pf4_data_r, decodev_pf4_data_w)
AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE(&cninja_pf3_rowscroll)
AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE(&deco16_pf4_rowscroll) AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE(&cninja_pf4_rowscroll)
AM_RANGE(0x184000, 0x187fff) AM_RAM AM_BASE(&cninja_ram) AM_RANGE(0x184000, 0x187fff) AM_RAM AM_BASE(&cninja_ram)
AM_RANGE(0x190000, 0x190007) AM_READWRITE(cninja_irq_r, cninja_irq_w) 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(0x1a4000, 0x1a47ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) /* Sprites */
AM_RANGE(0x1b4000, 0x1b4001) AM_WRITE(buffer_spriteram16_w) /* DMA flag */ 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(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(0x140000, 0x14000f) AM_WRITE(deco16_pf12_control_w)
AM_RANGE(0x144000, 0x144fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) AM_RANGE(0x144000, 0x144fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w)
AM_RANGE(0x146000, 0x146fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) AM_RANGE(0x146000, 0x146fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w)
AM_RANGE(0x14c000, 0x14c7ff) AM_WRITEONLY AM_BASE(&deco16_pf1_rowscroll) AM_RANGE(0x14c000, 0x14c7ff) AM_WRITEONLY AM_BASE(&cninja_pf1_rowscroll)
AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE(&deco16_pf2_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(0x150000, 0x15000f) AM_WRITE(deco16_pf34_control_w) // not used / incorrect on this
AM_RANGE(0x154000, 0x154fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w)
AM_RANGE(0x156000, 0x156fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom", decodev_pf4_data_r, decodev_pf4_data_w)
AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE(&cninja_pf3_rowscroll)
AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE(&deco16_pf4_rowscroll) AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE(&cninja_pf4_rowscroll)
AM_RANGE(0x17ff22, 0x17ff23) AM_READ_PORT("DSW") AM_RANGE(0x17ff22, 0x17ff23) AM_READ_PORT("DSW")
AM_RANGE(0x17ff28, 0x17ff29) AM_READ_PORT("IN1") 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(0x17ff2c, 0x17ff2d) AM_READ_PORT("IN0")
AM_RANGE(0x180000, 0x187fff) AM_RAM // more ram on bootleg? AM_RANGE(0x180000, 0x187fff) AM_RAM // more ram on bootleg?
AM_RANGE(0x190000, 0x190007) AM_READWRITE(cninja_irq_r, cninja_irq_w) 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 */ AM_RANGE(0x1b4000, 0x1b4001) AM_WRITE(buffer_spriteram16_w) /* DMA flag */
ADDRESS_MAP_END ADDRESS_MAP_END
@ -221,19 +223,19 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( edrandy_map, ADDRESS_SPACE_PROGRAM, 16 ) static ADDRESS_MAP_START( edrandy_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x140000, 0x14000f) AM_WRITE(deco16_pf12_control_w) AM_BASE(&deco16_pf12_control) AM_RANGE(0x140000, 0x14000f) AM_WRITE(deco16_pf12_control_w)
AM_RANGE(0x144000, 0x144fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) AM_RANGE(0x144000, 0x144fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w)
AM_RANGE(0x146000, 0x146fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) AM_RANGE(0x146000, 0x146fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w)
AM_RANGE(0x14c000, 0x14c7ff) AM_RAM AM_BASE(&deco16_pf1_rowscroll) AM_RANGE(0x14c000, 0x14c7ff) AM_RAM AM_BASE(&cninja_pf1_rowscroll)
AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE(&deco16_pf2_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(0x150000, 0x15000f) AM_WRITE(deco16_pf34_control_w)
AM_RANGE(0x154000, 0x154fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w)
AM_RANGE(0x156000, 0x156fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom", decodev_pf4_data_r, decodev_pf4_data_w)
AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE(&cninja_pf3_rowscroll)
AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE(&deco16_pf4_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(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(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 */ 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 ) static ADDRESS_MAP_START( robocop2_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x140000, 0x14000f) AM_WRITE(deco16_pf12_control_w) AM_BASE(&deco16_pf12_control) AM_RANGE(0x140000, 0x14000f) AM_WRITE(deco16_pf12_control_w)
AM_RANGE(0x144000, 0x144fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) AM_RANGE(0x144000, 0x144fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w)
AM_RANGE(0x146000, 0x146fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) AM_RANGE(0x146000, 0x146fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w)
AM_RANGE(0x14c000, 0x14c7ff) AM_RAM AM_BASE(&deco16_pf1_rowscroll) AM_RANGE(0x14c000, 0x14c7ff) AM_RAM AM_BASE(&cninja_pf1_rowscroll)
AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE(&deco16_pf2_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(0x150000, 0x15000f) AM_WRITE(deco16_pf34_control_w)
AM_RANGE(0x154000, 0x154fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w)
AM_RANGE(0x156000, 0x156fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom", decodev_pf4_data_r, decodev_pf4_data_w)
AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE(&cninja_pf3_rowscroll)
AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE(&deco16_pf4_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(0x180000, 0x1807ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
// AM_RANGE(0x18c000, 0x18c0ff) AM_WRITE(cninja_loopback_w) /* Protection writes */ // AM_RANGE(0x18c000, 0x18c0ff) AM_WRITE(cninja_loopback_w) /* Protection writes */
AM_RANGE(0x18c000, 0x18c7ff) AM_READ(robocop2_prot_r) /* Protection device */ AM_RANGE(0x18c000, 0x18c7ff) AM_READ(robocop2_prot_r) /* Protection device */
AM_RANGE(0x18c064, 0x18c065) AM_WRITE(cninja_sound_w) AM_RANGE(0x18c064, 0x18c065) AM_WRITE(cninja_sound_w)
AM_RANGE(0x198000, 0x198001) AM_WRITE(buffer_spriteram16_w) /* DMA flag */ 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(0x1b0000, 0x1b0007) AM_READWRITE(cninja_irq_r, cninja_irq_w)
AM_RANGE(0x1b8000, 0x1bbfff) AM_RAM AM_BASE(&cninja_ram) /* Main ram */ 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 */ AM_RANGE(0x1f8000, 0x1f8001) AM_READ_PORT("DSW3") /* Dipswitch #3 */
ADDRESS_MAP_END 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(0x100000, 0x103fff) AM_RAM
AM_RANGE(0x120000, 0x1207ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0x120000, 0x1207ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
AM_RANGE(0x140000, 0x1407ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram2) 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(0x160000, 0x161fff) AM_RAM_DEVWRITE("deco_custom", decodev_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0x180000, 0x180001) AM_WRITE(deco16_priority_w) AM_RANGE(0x180000, 0x180001) AM_DEVWRITE("deco_custom", decodev_priority_w)
AM_RANGE(0x180002, 0x180003) AM_WRITENOP /* VBL irq ack */ 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(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(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(0x300000, 0x30000f) AM_WRITE(deco16_pf12_control_w)
AM_RANGE(0x304000, 0x305fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) AM_RANGE(0x304000, 0x305fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w)
AM_RANGE(0x306000, 0x307fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) AM_RANGE(0x306000, 0x307fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w)
AM_RANGE(0x308000, 0x3087ff) AM_RAM AM_BASE(&deco16_pf1_rowscroll) AM_RANGE(0x308000, 0x3087ff) AM_RAM AM_BASE(&cninja_pf1_rowscroll)
AM_RANGE(0x30a000, 0x30a7ff) AM_RAM AM_BASE(&deco16_pf2_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(0x310000, 0x31000f) AM_WRITE(deco16_pf34_control_w)
AM_RANGE(0x314000, 0x315fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) AM_RANGE(0x314000, 0x315fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w)
AM_RANGE(0x316000, 0x317fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) AM_RANGE(0x316000, 0x317fff) AM_DEVREADWRITE("deco_custom", decodev_pf4_data_r, decodev_pf4_data_w)
AM_RANGE(0x318000, 0x3187ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) AM_RANGE(0x318000, 0x3187ff) AM_RAM AM_BASE(&cninja_pf3_rowscroll)
AM_RANGE(0x31a000, 0x31a7ff) AM_RAM AM_BASE(&deco16_pf4_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 */ AM_RANGE(0xad00ac, 0xad00ff) AM_READNOP /* Reads from here seem to be a game code bug */
ADDRESS_MAP_END 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 ) static MACHINE_DRIVER_START( cninja )
/* basic machine hardware */ /* basic machine hardware */
@ -772,9 +848,10 @@ static MACHINE_DRIVER_START( cninja )
MDRV_GFXDECODE(cninja) MDRV_GFXDECODE(cninja)
MDRV_PALETTE_LENGTH(2048) MDRV_PALETTE_LENGTH(2048)
MDRV_VIDEO_START(cninja)
MDRV_VIDEO_UPDATE(cninja) MDRV_VIDEO_UPDATE(cninja)
MDRV_DECO16IC_ADD("deco_custom", cninja_deco16ic_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
@ -824,6 +901,8 @@ static MACHINE_DRIVER_START( stoneage )
MDRV_VIDEO_START(stoneage) MDRV_VIDEO_START(stoneage)
MDRV_VIDEO_UPDATE(cninja) MDRV_VIDEO_UPDATE(cninja)
MDRV_DECO16IC_ADD("deco_custom", cninja_deco16ic_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
@ -868,9 +947,10 @@ static MACHINE_DRIVER_START( cninjabl )
MDRV_GFXDECODE(cninjabl) MDRV_GFXDECODE(cninjabl)
MDRV_PALETTE_LENGTH(2048) MDRV_PALETTE_LENGTH(2048)
MDRV_VIDEO_START(cninja)
MDRV_VIDEO_UPDATE(cninjabl) MDRV_VIDEO_UPDATE(cninjabl)
MDRV_DECO16IC_ADD("deco_custom", cninja_deco16ic_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
@ -911,9 +991,10 @@ static MACHINE_DRIVER_START( edrandy )
MDRV_GFXDECODE(cninja) MDRV_GFXDECODE(cninja)
MDRV_PALETTE_LENGTH(2048) MDRV_PALETTE_LENGTH(2048)
MDRV_VIDEO_START(edrandy)
MDRV_VIDEO_UPDATE(edrandy) MDRV_VIDEO_UPDATE(edrandy)
MDRV_DECO16IC_ADD("deco_custom", edrandy_deco16ic_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
@ -960,9 +1041,10 @@ static MACHINE_DRIVER_START( robocop2 )
MDRV_GFXDECODE(robocop2) MDRV_GFXDECODE(robocop2)
MDRV_PALETTE_LENGTH(2048) MDRV_PALETTE_LENGTH(2048)
MDRV_VIDEO_START(robocop2)
MDRV_VIDEO_UPDATE(robocop2) MDRV_VIDEO_UPDATE(robocop2)
MDRV_DECO16IC_ADD("deco_custom", robocop2_deco16ic_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -1008,9 +1090,10 @@ static MACHINE_DRIVER_START( mutantf )
MDRV_GFXDECODE(mutantf) MDRV_GFXDECODE(mutantf)
MDRV_PALETTE_LENGTH(2048) MDRV_PALETTE_LENGTH(2048)
MDRV_VIDEO_START(mutantf)
MDRV_VIDEO_UPDATE(mutantf) MDRV_VIDEO_UPDATE(mutantf)
MDRV_DECO16IC_ADD("deco_custom", mutantf_deco16ic_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")

View File

@ -124,12 +124,13 @@ Dip locations verified with US conversion kit manual.
#include "emu.h" #include "emu.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "cpu/h6280/h6280.h" #include "cpu/h6280/h6280.h"
#include "includes/deco16ic.h"
#include "sound/2203intf.h" #include "sound/2203intf.h"
#include "sound/2151intf.h" #include "sound/2151intf.h"
#include "sound/okim6295.h" #include "sound/okim6295.h"
#include "video/decodev.h"
extern UINT16 *dassault_pf2_rowscroll,*dassault_pf4_rowscroll;
VIDEO_START( dassault );
VIDEO_UPDATE( dassault ); VIDEO_UPDATE( dassault );
static UINT16 *dassault_ram,*shared_ram,*dassault_ram2; 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 ) static READ16_HANDLER( dassault_control_r )
{ {
switch (offset<<1) switch (offset << 1)
{ {
case 0: /* Player 1 & Player 2 joysticks & fire buttons */ case 0: /* Player 1 & Player 2 joysticks & fire buttons */
return input_port_read(space->machine, "P1_P2"); return input_port_read(space->machine, "P1_P2");
@ -161,9 +162,9 @@ static READ16_HANDLER( dassault_control_r )
static WRITE16_HANDLER( dassault_control_w ) static WRITE16_HANDLER( dassault_control_w )
{ {
coin_counter_w(space->machine, 0,data&1); coin_counter_w(space->machine, 0, data & 1);
if (data&0xfffe) if (data & 0xfffe)
logerror("Coin cointrol %04x\n",data); logerror("Coin cointrol %04x\n", data);
} }
static READ16_HANDLER( dassault_sub_control_r ) 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 ) static ADDRESS_MAP_START( dassault_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x07ffff) AM_ROM 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(0x140004, 0x140007) AM_WRITENOP /* ? */
AM_RANGE(0x180000, 0x180001) AM_WRITE(dassault_sound_w) AM_RANGE(0x180000, 0x180001) AM_WRITE(dassault_sound_w)
AM_RANGE(0x1c0000, 0x1c000f) AM_READ(dassault_control_r) 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(0x1c000c, 0x1c000d) AM_WRITE(buffer_spriteram16_2_w)
AM_RANGE(0x1c000e, 0x1c000f) AM_WRITE(dassault_control_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(0x200000, 0x201fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w)
AM_RANGE(0x202000, 0x203fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) AM_RANGE(0x202000, 0x203fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w)
AM_RANGE(0x212000, 0x212fff) AM_WRITEONLY AM_BASE(&deco16_pf2_rowscroll) AM_RANGE(0x212000, 0x212fff) AM_WRITEONLY AM_BASE(&dassault_pf2_rowscroll)
AM_RANGE(0x220000, 0x22000f) AM_WRITEONLY AM_BASE(&deco16_pf12_control) 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(0x240000, 0x240fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w)
AM_RANGE(0x242000, 0x242fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) AM_RANGE(0x242000, 0x242fff) AM_DEVREADWRITE("deco_custom", decodev_pf4_data_r, decodev_pf4_data_w)
AM_RANGE(0x252000, 0x252fff) AM_WRITEONLY AM_BASE(&deco16_pf4_rowscroll) AM_RANGE(0x252000, 0x252fff) AM_WRITEONLY AM_BASE(&dassault_pf4_rowscroll)
AM_RANGE(0x260000, 0x26000f) AM_WRITEONLY AM_BASE(&deco16_pf34_control) 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(0x3f8000, 0x3fbfff) AM_RAM AM_BASE(&dassault_ram) /* Main ram */
AM_RANGE(0x3fc000, 0x3fcfff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram2) /* Spriteram (2nd) */ 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 ) static MACHINE_DRIVER_START( dassault )
/* basic machine hardware */ /* basic machine hardware */
@ -556,9 +575,10 @@ static MACHINE_DRIVER_START( dassault )
MDRV_GFXDECODE(dassault) MDRV_GFXDECODE(dassault)
MDRV_PALETTE_LENGTH(4096) MDRV_PALETTE_LENGTH(4096)
MDRV_VIDEO_START(dassault)
MDRV_VIDEO_UPDATE(dassault) MDRV_VIDEO_UPDATE(dassault)
MDRV_DECO16IC_ADD("deco_custom", dassault_deco16ic_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")

View File

@ -21,9 +21,9 @@ Protection TODO:
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "includes/decocrpt.h" #include "includes/decocrpt.h"
#include "includes/deco16ic.h"
#include "sound/2151intf.h" #include "sound/2151intf.h"
#include "sound/okim6295.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) 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 (x >= 320) x -= 512;
if (y >= 256) y -= 512; if (y >= 256) y -= 512;
y = 240 - y; y = 240 - y;
x = 304 - x; x = 304 - x;
if (x>320) continue; 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) static VIDEO_UPDATE(dblewing)
{ {
flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom");
deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff);
bitmap_fill(bitmap,cliprect,0); /* not Confirmed */ flip_screen_set(screen->machine, BIT(flip, 7));
bitmap_fill(screen->machine->priority_bitmap,NULL,0); decodev_pf12_update(deco16ic, dblewing_pf1_rowscroll, dblewing_pf2_rowscroll);
deco16_tilemap_2_draw(screen,bitmap,cliprect,0,2); bitmap_fill(bitmap, cliprect, 0); /* not Confirmed */
deco16_tilemap_1_draw(screen,bitmap,cliprect,0,4); bitmap_fill(screen->machine->priority_bitmap, NULL, 0);
draw_sprites(screen->machine,bitmap,cliprect);
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; return 0;
} }
@ -386,17 +377,17 @@ static WRITE16_HANDLER( dblewing_prot_w )
static ADDRESS_MAP_START( dblewing_map, ADDRESS_SPACE_PROGRAM, 16 ) static ADDRESS_MAP_START( dblewing_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) AM_RANGE(0x100000, 0x100fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w)
AM_RANGE(0x102000, 0x102fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) AM_RANGE(0x102000, 0x102fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w)
AM_RANGE(0x104000, 0x104fff) AM_RAM AM_BASE(&deco16_pf1_rowscroll) AM_RANGE(0x104000, 0x104fff) AM_RAM AM_BASE(&dblewing_pf1_rowscroll)
AM_RANGE(0x106000, 0x106fff) AM_RAM AM_BASE(&deco16_pf2_rowscroll) AM_RANGE(0x106000, 0x106fff) AM_RAM AM_BASE(&dblewing_pf2_rowscroll)
/* protection */ /* protection */
// AM_RANGE(0x280104, 0x280105) AM_WRITENOP // ?? // AM_RANGE(0x280104, 0x280105) AM_WRITENOP // ??
// AM_RANGE(0x2800ac, 0x2800ad) AM_READ_PORT("DSW") // dips // AM_RANGE(0x2800ac, 0x2800ad) AM_READ_PORT("DSW") // dips
// AM_RANGE(0x280298, 0x280299) AM_READ_PORT("SYSTEM") // vbl // AM_RANGE(0x280298, 0x280299) AM_READ_PORT("SYSTEM") // vbl
// AM_RANGE(0x280506, 0x280507) AM_READ_PORT("UNK") // 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(0x280330, 0x280331) AM_READNOP // sound?
// AM_RANGE(0x280380, 0x280381) AM_WRITENOP // 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(0x284000, 0x284001) AM_RAM
AM_RANGE(0x288000, 0x288001) 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(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(0x320000, 0x3207ff) AM_RAM_WRITE(paletteram16_xxxxBBBBGGGGRRRR_word_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0xff0000, 0xff3fff) AM_MIRROR(0xc000) AM_RAM AM_RANGE(0xff0000, 0xff3fff) AM_MIRROR(0xc000) AM_RAM
@ -616,6 +607,24 @@ static const ym2151_interface ym2151_config =
sound_irq 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 ) static MACHINE_DRIVER_START( dblewing )
/* basic machine hardware */ /* basic machine hardware */
MDRV_CPU_ADD("maincpu", M68000, 14000000) /* DE102 */ MDRV_CPU_ADD("maincpu", M68000, 14000000) /* DE102 */
@ -639,9 +648,10 @@ static MACHINE_DRIVER_START( dblewing )
MDRV_PALETTE_LENGTH(4096) MDRV_PALETTE_LENGTH(4096)
MDRV_GFXDECODE(dblewing) MDRV_GFXDECODE(dblewing)
MDRV_VIDEO_START(dblewing)
MDRV_VIDEO_UPDATE(dblewing) MDRV_VIDEO_UPDATE(dblewing)
MDRV_DECO16IC_ADD("deco_custom", dblewing_deco16ic_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")

View File

@ -13,43 +13,29 @@
*/ */
#define DE156CPU ARM #define DE156CPU ARM
#include "emu.h" #include "emu.h"
#include "cpu/arm/arm.h"
#include "includes/decocrpt.h" #include "includes/decocrpt.h"
#include "includes/deco32.h"
#include "machine/eeprom.h" #include "machine/eeprom.h"
#include "sound/okim6295.h" #include "sound/okim6295.h"
#include "sound/ymz280b.h" #include "sound/ymz280b.h"
#include "cpu/arm/arm.h" #include "video/decodev.h"
#include "includes/deco16ic.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 ) static VIDEO_START( wcvol95 )
{ {
/* allocate the ram as 16-bit (we do it here because the CPU is 32-bit) */ /* 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); deco156_pf1_rowscroll = auto_alloc_array(machine, UINT16, 0x800/2);
deco16_pf2_data = auto_alloc_array(machine, UINT16, 0x2000/2); deco156_pf2_rowscroll = auto_alloc_array(machine, UINT16, 0x800/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);
machine->generic.paletteram.u16 = auto_alloc_array(machine, UINT16, 0x1000/2); machine->generic.paletteram.u16 = auto_alloc_array(machine, UINT16, 0x1000/2);
/* and register the allocated ram so that save states still work */ /* 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, deco156_pf1_rowscroll, 0x800/2);
state_save_register_global_pointer(machine, deco16_pf2_data, 0x2000/2); state_save_register_global_pointer(machine, deco156_pf2_rowscroll, 0x800/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, machine->generic.paletteram.u16, 0x1000/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 /* 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 (x >= 320) x -= 512;
if (y >= 256) y -= 512; if (y >= 256) y -= 512;
y = 240 - y; y = 240 - y;
x = 304 - x; x = 304 - x;
if (x>320) continue; if (x>320) continue;
@ -133,14 +119,16 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan
static VIDEO_UPDATE( wcvol95 ) static VIDEO_UPDATE( wcvol95 )
{ {
bitmap_fill(screen->machine->priority_bitmap,NULL,0); running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom");
bitmap_fill(bitmap,NULL,0);
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); decodev_pf12_update(deco16ic, deco156_pf1_rowscroll, deco156_pf2_rowscroll);
draw_sprites(screen->machine,bitmap,cliprect);
deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); 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; 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)); 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_pf1_rowscroll_r ) { return deco156_pf1_rowscroll[offset]^0xffff0000; }
static READ32_HANDLER( wcvol95_pf2_rowscroll_r ) { return deco16_pf2_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(&deco16_pf1_rowscroll[offset]); } 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(&deco16_pf2_rowscroll[offset]); } static WRITE32_HANDLER( wcvol95_pf2_rowscroll_w ) { data &=0x0000ffff; mem_mask &=0x0000ffff; COMBINE_DATA(&deco156_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 ADDRESS_MAP_START( hvysmsh_map, ADDRESS_SPACE_PROGRAM, 32 ) 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(0x12000c, 0x12000f) AM_DEVWRITE("oki1", hvysmsh_oki_0_bank_w)
AM_RANGE(0x140000, 0x140003) AM_DEVREADWRITE8("oki1", okim6295_r, okim6295_w, 0x000000ff) 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(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(0x180000, 0x18001f) AM_DEVREADWRITE("deco_custom", decodev_pf12_control_dword_r, decodev_pf12_control_dword_w)
AM_RANGE(0x190000, 0x191fff) AM_READWRITE( wcvol95_pf1_data_r, wcvol95_pf1_data_w ) AM_RANGE(0x190000, 0x191fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_dword_r, decodev_pf1_data_dword_w)
AM_RANGE(0x194000, 0x195fff) AM_READWRITE( wcvol95_pf2_data_r, wcvol95_pf2_data_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(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(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(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(0x1d0010, 0x1d002f) AM_READNOP // Check for DMA complete?
AM_RANGE(0x1e0000, 0x1e1fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0x1e0000, 0x1e1fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( wcvol95_map, ADDRESS_SPACE_PROGRAM, 32 ) static ADDRESS_MAP_START( wcvol95_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x10001f) AM_READWRITE( wcvol95_pf12_control_r, wcvol95_pf12_control_w ) AM_RANGE(0x100000, 0x10001f) AM_DEVREADWRITE("deco_custom", decodev_pf12_control_dword_r, decodev_pf12_control_dword_w)
AM_RANGE(0x110000, 0x111fff) AM_READWRITE( wcvol95_pf1_data_r, wcvol95_pf1_data_w ) AM_RANGE(0x110000, 0x111fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_dword_r, decodev_pf1_data_dword_w)
AM_RANGE(0x114000, 0x115fff) AM_READWRITE( wcvol95_pf2_data_r, wcvol95_pf2_data_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(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(0x124000, 0x124fff) AM_READWRITE(wcvol95_pf2_rowscroll_r, wcvol95_pf2_rowscroll_w)
AM_RANGE(0x130000, 0x137fff) AM_RAM AM_RANGE(0x130000, 0x137fff) AM_RAM
AM_RANGE(0x140000, 0x140003) AM_READ_PORT("INPUTS") AM_RANGE(0x140000, 0x140003) AM_READ_PORT("INPUTS")
AM_RANGE(0x150000, 0x150003) AM_WRITE_PORT("EEPROMOUT") 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); 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 ) static MACHINE_DRIVER_START( hvysmsh )
/* basic machine hardware */ /* basic machine hardware */
@ -391,6 +405,8 @@ static MACHINE_DRIVER_START( hvysmsh )
MDRV_VIDEO_START(wcvol95) MDRV_VIDEO_START(wcvol95)
MDRV_VIDEO_UPDATE(wcvol95) MDRV_VIDEO_UPDATE(wcvol95)
MDRV_DECO16IC_ADD("deco_custom", deco156_deco16ic_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -430,6 +446,8 @@ static MACHINE_DRIVER_START( wcvol95 )
MDRV_VIDEO_START(wcvol95) MDRV_VIDEO_START(wcvol95)
MDRV_VIDEO_UPDATE(wcvol95) MDRV_VIDEO_UPDATE(wcvol95)
MDRV_DECO16IC_ADD("deco_custom", deco156_deco16ic_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")

View File

@ -95,11 +95,12 @@ Notes:
#include "includes/decocrpt.h" #include "includes/decocrpt.h"
#include "includes/decoprot.h" #include "includes/decoprot.h"
#include "includes/deco16ic.h" #include "video/decodev.h"
VIDEO_START( funkyjet );
VIDEO_UPDATE( funkyjet ); VIDEO_UPDATE( funkyjet );
extern UINT16 *funkyjet_pf1_rowscroll,*funkyjet_pf2_rowscroll;
/******************************************************************************/ /******************************************************************************/
static ADDRESS_MAP_START( funkyjet_map, ADDRESS_SPACE_PROGRAM, 16 ) 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(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(0x184000, 0x184001) AM_WRITENOP
AM_RANGE(0x188000, 0x188001) AM_WRITENOP AM_RANGE(0x188000, 0x188001) AM_WRITENOP
AM_RANGE(0x300000, 0x30000f) AM_WRITEONLY AM_BASE(&deco16_pf12_control) AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", decodev_pf12_control_w)
AM_RANGE(0x320000, 0x321fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) AM_RANGE(0x320000, 0x321fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w)
AM_RANGE(0x322000, 0x323fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) AM_RANGE(0x322000, 0x323fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w)
AM_RANGE(0x340000, 0x340bff) AM_RAM AM_BASE(&deco16_pf1_rowscroll) AM_RANGE(0x340000, 0x340bff) AM_RAM AM_BASE(&funkyjet_pf1_rowscroll)
AM_RANGE(0x342000, 0x342bff) AM_RAM AM_BASE(&deco16_pf2_rowscroll) AM_RANGE(0x342000, 0x342bff) AM_RAM AM_BASE(&funkyjet_pf2_rowscroll)
ADDRESS_MAP_END ADDRESS_MAP_END
/******************************************************************************/ /******************************************************************************/
@ -287,6 +288,16 @@ static const ym2151_interface ym2151_config =
sound_irq 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 ) static MACHINE_DRIVER_START( funkyjet )
/* basic machine hardware */ /* basic machine hardware */
@ -308,9 +319,10 @@ static MACHINE_DRIVER_START( funkyjet )
MDRV_GFXDECODE(funkyjet) MDRV_GFXDECODE(funkyjet)
MDRV_PALETTE_LENGTH(1024) MDRV_PALETTE_LENGTH(1024)
MDRV_VIDEO_START(funkyjet)
MDRV_VIDEO_UPDATE(funkyjet) MDRV_VIDEO_UPDATE(funkyjet)
MDRV_DECO16IC_ADD("deco_custom", funkyjet_deco16ic_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")

View File

@ -195,8 +195,8 @@ static WRITE16_HANDLER( okim0_rombank_w )
static ADDRESS_MAP_START( mirage_map, ADDRESS_SPACE_PROGRAM, 16 ) static ADDRESS_MAP_START( mirage_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x000000, 0x07ffff) AM_ROM
/* tilemaps */ /* tilemaps */
AM_RANGE(0x100000, 0x101fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf1_data_w) // 0x100000 - 0x101fff 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_RAM_DEVWRITE("deco_custom", decodev_pf2_data_w) // 0x102000 - 0x102fff tested AM_RANGE(0x102000, 0x103fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w) // 0x102000 - 0x102fff tested
/* linescroll */ /* linescroll */
AM_RANGE(0x110000, 0x110bff) AM_RAM AM_BASE_MEMBER(mirage_state, pf1_rowscroll) 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) AM_RANGE(0x112000, 0x112bff) AM_RAM AM_BASE_MEMBER(mirage_state, pf2_rowscroll)

View File

@ -73,8 +73,8 @@ static WRITE16_DEVICE_HANDLER(pktgaldx_oki_bank_w)
static ADDRESS_MAP_START( pktgaldx_map, ADDRESS_SPACE_PROGRAM, 16 ) static ADDRESS_MAP_START( pktgaldx_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x100fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf1_data_w) AM_RANGE(0x100000, 0x100fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w)
AM_RANGE(0x102000, 0x102fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf2_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(0x110000, 0x1107ff) AM_RAM AM_BASE_MEMBER(pktgaldx_state, pf1_rowscroll)
AM_RANGE(0x112000, 0x1127ff) AM_RAM AM_BASE_MEMBER(pktgaldx_state, pf2_rowscroll) AM_RANGE(0x112000, 0x1127ff) AM_RAM AM_BASE_MEMBER(pktgaldx_state, pf2_rowscroll)

View File

@ -109,19 +109,20 @@
#include "cpu/h6280/h6280.h" #include "cpu/h6280/h6280.h"
#include "includes/decocrpt.h" #include "includes/decocrpt.h"
#include "includes/decoprot.h" #include "includes/decoprot.h"
#include "includes/deco16ic.h"
#include "sound/2151intf.h" #include "sound/2151intf.h"
#include "sound/okim6295.h" #include "sound/okim6295.h"
#include "video/decodev.h"
VIDEO_START( rohga ); VIDEO_START( rohga );
VIDEO_START( wizdfire );
VIDEO_START( nitrobal );
VIDEO_UPDATE( rohga ); VIDEO_UPDATE( rohga );
VIDEO_UPDATE( schmeisr ); VIDEO_UPDATE( schmeisr );
VIDEO_UPDATE( wizdfire ); VIDEO_UPDATE( wizdfire );
VIDEO_UPDATE( nitrobal ); VIDEO_UPDATE( nitrobal );
WRITE16_HANDLER( rohga_buffer_spriteram16_w ); 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 ) static READ16_HANDLER( rohga_irq_ack_r )
{ {
cputag_set_input_line(space->machine, "maincpu", 6, CLEAR_LINE); 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 ) static ADDRESS_MAP_START( rohga_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x1fffff) AM_ROM AM_RANGE(0x000000, 0x1fffff) AM_ROM
AM_RANGE(0x200000, 0x20000f) AM_WRITEONLY AM_BASE(&deco16_pf12_control) AM_RANGE(0x200000, 0x20000f) AM_DEVWRITE("deco_custom", decodev_pf12_control_w)
AM_RANGE(0x240000, 0x24000f) AM_WRITEONLY AM_BASE(&deco16_pf34_control) 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(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(0x300000, 0x300001) AM_WRITE(rohga_buffer_spriteram16_w) /* write 1 for sprite dma */
AM_RANGE(0x310000, 0x310009) AM_WRITENOP /* Palette control? */ 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(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(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(0x3c0000, 0x3c1fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w)
AM_RANGE(0x3c2000, 0x3c2fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) AM_RANGE(0x3c2000, 0x3c2fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w)
AM_RANGE(0x3c4000, 0x3c4fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) AM_RANGE(0x3c4000, 0x3c4fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w)
AM_RANGE(0x3c6000, 0x3c6fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) 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(0x3c8000, 0x3c8fff) AM_MIRROR(0x1000) AM_RAM AM_BASE(&rohga_pf1_rowscroll)
AM_RANGE(0x3ca000, 0x3cafff) AM_MIRROR(0x1000) AM_RAM AM_BASE(&deco16_pf2_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(&deco16_pf3_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(&deco16_pf4_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(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 */ AM_RANGE(0x3f0000, 0x3f3fff) AM_RAM /* Main ram */
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( wizdfire_map, ADDRESS_SPACE_PROGRAM, 16 ) static ADDRESS_MAP_START( wizdfire_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x1fffff) AM_ROM AM_RANGE(0x000000, 0x1fffff) AM_ROM
AM_RANGE(0x200000, 0x200fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) AM_RANGE(0x200000, 0x200fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w)
AM_RANGE(0x202000, 0x202fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) AM_RANGE(0x202000, 0x202fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w)
AM_RANGE(0x208000, 0x208fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) AM_RANGE(0x208000, 0x208fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w)
AM_RANGE(0x20a000, 0x20afff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) 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(0x20b000, 0x20b3ff) AM_WRITEONLY /* ? Always 0 written */
AM_RANGE(0x20c000, 0x20c7ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) AM_RANGE(0x20c000, 0x20c7ff) AM_RAM AM_BASE(&rohga_pf3_rowscroll)
AM_RANGE(0x20e000, 0x20e7ff) AM_RAM AM_BASE(&deco16_pf4_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(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", decodev_pf12_control_w)
AM_RANGE(0x310000, 0x31000f) AM_WRITEONLY AM_BASE(&deco16_pf34_control) 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(0x320002, 0x320003) AM_WRITENOP /* ? */
AM_RANGE(0x320004, 0x320005) AM_WRITE(wizdfire_irq_ack_w) /* VBL IRQ ack */ 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(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(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(0x380000, 0x381fff) AM_RAM_DEVWRITE("deco_custom", decodev_buffered_palette_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0x390008, 0x390009) AM_WRITE(deco16_palette_dma_w) 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(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 AM_RANGE(0xfdc000, 0xffffff) AM_RAM
@ -204,20 +205,20 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( nitrobal_map, ADDRESS_SPACE_PROGRAM, 16 ) static ADDRESS_MAP_START( nitrobal_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x1fffff) AM_ROM 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(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_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) 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_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) 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_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) 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(0x204000, 0x2047ff) AM_RAM AM_BASE(&rohga_pf1_rowscroll)
AM_RANGE(0x206000, 0x2067ff) AM_RAM AM_BASE(&deco16_pf2_rowscroll) AM_RANGE(0x206000, 0x2067ff) AM_RAM AM_BASE(&rohga_pf2_rowscroll)
AM_RANGE(0x20c000, 0x20c7ff) AM_RAM AM_BASE(&deco16_pf3_rowscroll) AM_RANGE(0x20c000, 0x20c7ff) AM_RAM AM_BASE(&rohga_pf3_rowscroll)
AM_RANGE(0x20e000, 0x20e7ff) AM_RAM AM_BASE(&deco16_pf4_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(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", decodev_pf12_control_w)
AM_RANGE(0x310000, 0x31000f) AM_WRITEONLY AM_BASE(&deco16_pf34_control) 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(0x320002, 0x320003) AM_WRITENOP /* ? */
AM_RANGE(0x320004, 0x320005) AM_WRITE(wizdfire_irq_ack_w) /* VBL IRQ ack */ 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(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(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(0x380000, 0x381fff) AM_RAM_DEVWRITE("deco_custom", decodev_buffered_palette_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0x390008, 0x390009) AM_WRITE(deco16_palette_dma_w) AM_RANGE(0x390008, 0x390009) AM_DEVWRITE("deco_custom", decodev_palette_dma_w)
AM_RANGE(0xfec000, 0xff3fff) AM_RAM 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 */ 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 ) static ADDRESS_MAP_START( schmeisr_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x200000, 0x20000f) AM_WRITEONLY AM_BASE(&deco16_pf12_control) AM_RANGE(0x200000, 0x20000f) AM_DEVWRITE("deco_custom", decodev_pf12_control_w)
AM_RANGE(0x240000, 0x24000f) AM_WRITEONLY AM_BASE(&deco16_pf34_control) 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(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(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(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(0x310002, 0x310003) AM_READ_PORT("IN1")
AM_RANGE(0x310000, 0x310009) AM_WRITENOP /* Palette control? */ 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(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(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(0x3c0000, 0x3c1fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w)
AM_RANGE(0x3c2000, 0x3c2fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) AM_RANGE(0x3c2000, 0x3c2fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w)
AM_RANGE(0x3c4000, 0x3c4fff) AM_RAM_WRITE(deco16_pf3_data_w) AM_BASE(&deco16_pf3_data) AM_RANGE(0x3c4000, 0x3c4fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w)
AM_RANGE(0x3c6000, 0x3c6fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) 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(0x3c8000, 0x3c8fff) AM_MIRROR(0x1000) AM_RAM AM_BASE(&rohga_pf1_rowscroll)
AM_RANGE(0x3ca000, 0x3cafff) AM_MIRROR(0x1000) AM_RAM AM_BASE(&deco16_pf2_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(&deco16_pf3_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(&deco16_pf4_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(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 */ AM_RANGE(0xff0000, 0xff7fff) AM_RAM /* Main ram */
ADDRESS_MAP_END 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 ) static MACHINE_DRIVER_START( rohga )
/* basic machine hardware */ /* basic machine hardware */
@ -770,6 +802,8 @@ static MACHINE_DRIVER_START( rohga )
MDRV_VIDEO_START(rohga) MDRV_VIDEO_START(rohga)
MDRV_VIDEO_UPDATE(rohga) MDRV_VIDEO_UPDATE(rohga)
MDRV_DECO16IC_ADD("deco_custom", rohga_deco16ic_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -812,9 +846,10 @@ static MACHINE_DRIVER_START( wizdfire )
MDRV_GFXDECODE(wizdfire) MDRV_GFXDECODE(wizdfire)
MDRV_PALETTE_LENGTH(2048) MDRV_PALETTE_LENGTH(2048)
MDRV_VIDEO_START(wizdfire)
MDRV_VIDEO_UPDATE(wizdfire) MDRV_VIDEO_UPDATE(wizdfire)
MDRV_DECO16IC_ADD("deco_custom", rohga_deco16ic_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -857,9 +892,10 @@ static MACHINE_DRIVER_START( nitrobal )
MDRV_GFXDECODE(wizdfire) MDRV_GFXDECODE(wizdfire)
MDRV_PALETTE_LENGTH(2048) MDRV_PALETTE_LENGTH(2048)
MDRV_VIDEO_START(nitrobal)
MDRV_VIDEO_UPDATE(nitrobal) MDRV_VIDEO_UPDATE(nitrobal)
MDRV_DECO16IC_ADD("deco_custom", nitrobal_deco16ic_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -905,6 +941,8 @@ static MACHINE_DRIVER_START( schmeisr )
MDRV_VIDEO_START(rohga) MDRV_VIDEO_START(rohga)
MDRV_VIDEO_UPDATE(schmeisr) MDRV_VIDEO_UPDATE(schmeisr)
MDRV_DECO16IC_ADD("deco_custom", rohga_deco16ic_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")

View File

@ -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(0x180000, 0x18000f) AM_READ(supbtime_controls_r)
AM_RANGE(0x18000a, 0x18000d) AM_WRITENOP AM_RANGE(0x18000a, 0x18000d) AM_WRITENOP
AM_RANGE(0x1a0000, 0x1a0001) AM_WRITE(sound_w) AM_RANGE(0x1a0000, 0x1a0001) AM_WRITE(sound_w)
AM_RANGE(0x300000, 0x30000f) AM_RAM_DEVWRITE("deco_custom", decodev_pf12_control_w) AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("deco_custom", decodev_pf12_control_r, decodev_pf12_control_w)
AM_RANGE(0x320000, 0x321fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf1_data_w) AM_RANGE(0x320000, 0x321fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w)
AM_RANGE(0x322000, 0x323fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf2_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(0x340000, 0x3407ff) AM_RAM AM_BASE_MEMBER(supbtime_state, pf1_rowscroll)
AM_RANGE(0x342000, 0x3427ff) AM_RAM AM_BASE_MEMBER(supbtime_state, pf2_rowscroll) AM_RANGE(0x342000, 0x3427ff) AM_RAM AM_BASE_MEMBER(supbtime_state, pf2_rowscroll)
ADDRESS_MAP_END 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(0x180000, 0x18000f) AM_READ(supbtime_controls_r)
AM_RANGE(0x18000a, 0x18000d) AM_WRITENOP AM_RANGE(0x18000a, 0x18000d) AM_WRITENOP
AM_RANGE(0x1a0000, 0x1a3fff) AM_RAM AM_RANGE(0x1a0000, 0x1a3fff) AM_RAM
AM_RANGE(0x300000, 0x30000f) AM_RAM_DEVWRITE("deco_custom", decodev_pf12_control_w) AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("deco_custom", decodev_pf12_control_r, decodev_pf12_control_w)
AM_RANGE(0x320000, 0x321fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf1_data_w) AM_RANGE(0x320000, 0x321fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w)
AM_RANGE(0x322000, 0x323fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf2_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(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 AM_RANGE(0x342000, 0x3427ff) AM_RAM AM_BASE_MEMBER(supbtime_state, pf2_rowscroll) // unused
ADDRESS_MAP_END ADDRESS_MAP_END

View File

@ -118,8 +118,8 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x18000c, 0x18000d) AM_WRITENOP AM_RANGE(0x18000c, 0x18000d) AM_WRITENOP
AM_RANGE(0x1a0000, 0x1a07ff) AM_RAM AM_BASE_SIZE_MEMBER(tumblep_state, spriteram, spriteram_size) 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(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(0x320000, 0x320fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w)
AM_RANGE(0x322000, 0x322fff) AM_RAM_DEVWRITE("deco_custom", decodev_pf2_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(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 AM_RANGE(0x342000, 0x3427ff) AM_WRITEONLY AM_BASE_MEMBER(tumblep_state, pf2_rowscroll) // unused
ADDRESS_MAP_END ADDRESS_MAP_END

View File

@ -14,9 +14,8 @@
#include "sound/2203intf.h" #include "sound/2203intf.h"
#include "sound/2151intf.h" #include "sound/2151intf.h"
#include "sound/okim6295.h" #include "sound/okim6295.h"
#include "includes/deco16ic.h" #include "video/decodev.h"
VIDEO_START( vaportra );
VIDEO_UPDATE( vaportra ); VIDEO_UPDATE( vaportra );
WRITE16_HANDLER( vaportra_priority_w ); WRITE16_HANDLER( vaportra_priority_w );
@ -35,7 +34,7 @@ static WRITE16_HANDLER( vaportra_sound_w )
static READ16_HANDLER( vaportra_control_r ) static READ16_HANDLER( vaportra_control_r )
{ {
switch (offset<<1) switch (offset << 1)
{ {
case 4: case 4:
return input_port_read(space->machine, "DSW"); 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(0x100000, 0x100003) AM_WRITE(vaportra_priority_w)
AM_RANGE(0x100006, 0x100007) AM_WRITE(vaportra_sound_w) AM_RANGE(0x100006, 0x100007) AM_WRITE(vaportra_sound_w)
AM_RANGE(0x100000, 0x10000f) AM_READ(vaportra_control_r) 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(0x200000, 0x201fff) AM_DEVREADWRITE("deco_custom", decodev_pf3_data_r, decodev_pf3_data_w)
AM_RANGE(0x202000, 0x203fff) AM_RAM_WRITE(deco16_pf4_data_w) AM_BASE(&deco16_pf4_data) AM_RANGE(0x202000, 0x203fff) AM_DEVREADWRITE("deco_custom", decodev_pf4_data_r, decodev_pf4_data_w)
AM_RANGE(0x240000, 0x24000f) AM_WRITEONLY AM_BASE(&deco16_pf34_control) AM_RANGE(0x240000, 0x24000f) AM_DEVWRITE("deco_custom", decodev_pf34_control_w)
AM_RANGE(0x280000, 0x281fff) AM_RAM_WRITE(deco16_pf1_data_w) AM_BASE(&deco16_pf1_data) AM_RANGE(0x280000, 0x281fff) AM_DEVREADWRITE("deco_custom", decodev_pf1_data_r, decodev_pf1_data_w)
AM_RANGE(0x282000, 0x283fff) AM_RAM_WRITE(deco16_pf2_data_w) AM_BASE(&deco16_pf2_data) AM_RANGE(0x282000, 0x283fff) AM_DEVREADWRITE("deco_custom", decodev_pf2_data_r, decodev_pf2_data_w)
AM_RANGE(0x2c0000, 0x2c000f) AM_WRITEONLY AM_BASE(&deco16_pf12_control) 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(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(0x304000, 0x3049ff) AM_RAM_WRITE(vaportra_palette_24bit_b_w) AM_BASE_GENERIC(paletteram2)
AM_RANGE(0x308000, 0x308001) AM_NOP 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 ) static MACHINE_DRIVER_START( vaportra )
@ -238,9 +255,10 @@ static MACHINE_DRIVER_START( vaportra )
MDRV_GFXDECODE(vaportra) MDRV_GFXDECODE(vaportra)
MDRV_PALETTE_LENGTH(1280) MDRV_PALETTE_LENGTH(1280)
MDRV_VIDEO_START(vaportra)
MDRV_VIDEO_UPDATE(vaportra) MDRV_VIDEO_UPDATE(vaportra)
MDRV_DECO16IC_ADD("deco_custom", vaportra_deco16ic_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")

View File

@ -1,13 +1,14 @@
/*----------- defined in video/cninja.c -----------*/ /*----------- defined in video/cninja.c -----------*/
VIDEO_START( cninja ); extern UINT16 *cninja_pf1_rowscroll,*cninja_pf2_rowscroll;
VIDEO_START( edrandy ); extern UINT16 *cninja_pf3_rowscroll,*cninja_pf4_rowscroll;
VIDEO_START( robocop2 );
VIDEO_START( stoneage ); VIDEO_START( stoneage );
VIDEO_START( mutantf );
VIDEO_UPDATE( cninja ); VIDEO_UPDATE( cninja );
VIDEO_UPDATE( cninjabl ); VIDEO_UPDATE( cninjabl );
VIDEO_UPDATE( edrandy ); VIDEO_UPDATE( edrandy );
VIDEO_UPDATE( robocop2 ); VIDEO_UPDATE( robocop2 );
VIDEO_UPDATE( mutantf ); VIDEO_UPDATE( mutantf );
VIDEO_EOF( cninja ); VIDEO_EOF( cninja );

View File

@ -4,7 +4,7 @@
UINT16 *boogwing_pf1_rowscroll,*boogwing_pf2_rowscroll; UINT16 *boogwing_pf1_rowscroll,*boogwing_pf2_rowscroll;
UINT16 *boogwing_pf3_rowscroll,*boogwing_pf4_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"); running_device *deco16ic = devtag_get_device(machine, "deco_custom");
int offs; int offs;
@ -136,18 +136,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan
} }
} }
VIDEO_START(boogwing) VIDEO_UPDATE( 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)
{ {
running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom"); running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom");
UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff); UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff);

View File

@ -5,31 +5,12 @@
***************************************************************************/ ***************************************************************************/
#include "emu.h" #include "emu.h"
#include "includes/deco16ic.h" #include "video/decodev.h"
static int twocrude_pri; static int twocrude_pri;
/******************************************************************************/ UINT16 *twocrude_pf1_rowscroll,*twocrude_pf2_rowscroll;
UINT16 *twocrude_pf3_rowscroll,*twocrude_pf4_rowscroll;
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;
}
/******************************************************************************/ /******************************************************************************/
@ -60,12 +41,12 @@ WRITE16_HANDLER( twocrude_palette_24bit_b_w )
void twocrude_pri_w(int pri) 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; UINT16 *buffered_spriteram16 = machine->generic.buffered_spriteram.u16;
int offs; int offs;
@ -137,25 +118,30 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
VIDEO_UPDATE( twocrude ) 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); flip_screen_set(screen->machine, !BIT(flip, 7));
deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll);
decodev_pf12_update(deco16ic, twocrude_pf1_rowscroll, twocrude_pf2_rowscroll);
decodev_pf34_update(deco16ic, twocrude_pf3_rowscroll, twocrude_pf4_rowscroll);
/* Draw playfields & sprites */ /* Draw playfields & sprites */
deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,0); decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
draw_sprites(screen->machine,bitmap,cliprect,0); draw_sprites(screen->machine, bitmap, cliprect, 0);
if (twocrude_pri) { if (twocrude_pri)
deco16_tilemap_2_draw(screen,bitmap,cliprect,0,0); {
deco16_tilemap_3_draw(screen,bitmap,cliprect,0,0); decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 0);
decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 0);
} }
else { else
deco16_tilemap_3_draw(screen,bitmap,cliprect,0,0); {
deco16_tilemap_2_draw(screen,bitmap,cliprect,0,0); 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); draw_sprites(screen->machine, bitmap, cliprect, 1);
deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0);
return 0; return 0;
} }

View File

@ -5,98 +5,24 @@
****************************************************************************/ ****************************************************************************/
#include "emu.h" #include "emu.h"
#include "includes/deco16ic.h" #include "video/decodev.h"
#include "includes/cninja.h" #include "includes/cninja.h"
/******************************************************************************/ UINT16 *cninja_pf1_rowscroll,*cninja_pf2_rowscroll;
UINT16 *cninja_pf3_rowscroll,*cninja_pf4_rowscroll;
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;
}
/******************************************************************************/ /******************************************************************************/
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 ) VIDEO_START( stoneage )
{ {
deco16_2_video_init(machine, 1); running_device *deco16ic = devtag_get_device(machine, "deco_custom");
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);
/* The bootleg has broken scroll registers */ /* The bootleg has broken scroll registers */
tilemap_set_scrolldx(deco16_get_tilemap(3,0),-10,-10); decodev_set_scrolldx(deco16ic, 3, 0, -10, -10); /* pf4 16x16 tilemap */
tilemap_set_scrolldx(deco16_get_tilemap(1,0),-10,-10); decodev_set_scrolldx(deco16ic, 1, 0, -10, -10); /* pf2 16x16 tilemap */
tilemap_set_scrolldx(deco16_get_tilemap(0,1),2,2); 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) 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 ) VIDEO_UPDATE( cninja )
{ {
flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom");
deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff);
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 */ /* Draw playfields */
bitmap_fill(screen->machine->priority_bitmap,cliprect,0); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
bitmap_fill(bitmap,cliprect,512); bitmap_fill(bitmap, cliprect, 512);
deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,1); decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2); decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 2);
deco16_tilemap_2_draw(screen,bitmap,cliprect,TILEMAP_DRAW_LAYER1,2); decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 2);
deco16_tilemap_2_draw(screen,bitmap,cliprect,TILEMAP_DRAW_LAYER0,4); decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_LAYER0, 4);
cninja_draw_sprites(screen->machine,bitmap,cliprect); cninja_draw_sprites(screen->machine, bitmap, cliprect);
deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0);
return 0; return 0;
} }
VIDEO_UPDATE( cninjabl ) VIDEO_UPDATE( cninjabl )
{ {
flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom");
deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff);
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 */ /* Draw playfields */
bitmap_fill(screen->machine->priority_bitmap,cliprect,0); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
bitmap_fill(bitmap,cliprect,512); bitmap_fill(bitmap, cliprect, 512);
deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,1); decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2); decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 2);
deco16_tilemap_2_draw(screen,bitmap,cliprect,TILEMAP_DRAW_LAYER1,2); decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 2);
deco16_tilemap_2_draw(screen,bitmap,cliprect,TILEMAP_DRAW_LAYER0,4); decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_LAYER0, 4);
cninjabl_draw_sprites(screen->machine,bitmap,cliprect); cninjabl_draw_sprites(screen->machine, bitmap, cliprect);
deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0);
return 0; return 0;
} }
VIDEO_UPDATE( edrandy ) VIDEO_UPDATE( edrandy )
{ {
flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom");
deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff);
deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll);
bitmap_fill(screen->machine->priority_bitmap,cliprect,0); flip_screen_set(screen->machine, BIT(flip, 7));
bitmap_fill(bitmap,cliprect,0); decodev_pf12_update(deco16ic, cninja_pf1_rowscroll, cninja_pf2_rowscroll);
deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,1); decodev_pf34_update(deco16ic, cninja_pf3_rowscroll, cninja_pf4_rowscroll);
deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2);
deco16_tilemap_2_draw(screen,bitmap,cliprect,0,4); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
cninja_draw_sprites(screen->machine,bitmap,cliprect); bitmap_fill(bitmap, cliprect, 0);
deco16_tilemap_1_draw(screen,bitmap,cliprect,0,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; return 0;
} }
VIDEO_UPDATE( robocop2 ) 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 */ /* One of the tilemap chips can switch between 2 tilemaps at 4bpp, or 1 at 8bpp */
if (deco16_priority&4) { if (priority & 4)
deco16_set_tilemap_colour_mask(2,0); {
deco16_set_tilemap_colour_mask(3,0); decodev_set_tilemap_colour_mask(deco16ic, 2, 0);
deco16_pf34_set_gfxbank(0,4); decodev_set_tilemap_colour_mask(deco16ic, 3, 0);
} else { decodev_pf34_set_gfxbank(deco16ic, 0, 4);
deco16_set_tilemap_colour_mask(2,0xf); }
deco16_set_tilemap_colour_mask(3,0xf); else
deco16_pf34_set_gfxbank(0,2); {
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 */ /* Update playfields */
flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); flip_screen_set(screen->machine, BIT(flip, 7));
deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); decodev_pf12_update(deco16ic, cninja_pf1_rowscroll, cninja_pf2_rowscroll);
deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll); decodev_pf34_update(deco16ic, cninja_pf3_rowscroll, cninja_pf4_rowscroll);
/* Draw playfields */ /* Draw playfields */
bitmap_fill(screen->machine->priority_bitmap,cliprect,0); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
bitmap_fill(bitmap,cliprect,0x200); bitmap_fill(bitmap, cliprect, 0x200);
if ((deco16_priority&4)==0)
deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,1); if ((priority & 4) == 0)
decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
/* Switchable priority */ /* Switchable priority */
switch (deco16_priority&0x8) { switch (priority & 0x8)
{
case 8: case 8:
deco16_tilemap_2_draw(screen,bitmap,cliprect,0,2); decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 2);
deco16_tilemap_3_draw(screen,bitmap,cliprect,0,4); decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 4);
break; break;
default: default:
case 0: case 0:
deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2); 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; break;
} }
robocop2_draw_sprites(screen->machine,bitmap,cliprect); robocop2_draw_sprites(screen->machine, bitmap, cliprect);
deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0);
return 0; return 0;
} }
VIDEO_UPDATE( mutantf ) VIDEO_UPDATE( mutantf )
{ {
flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom");
deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff);
deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll); 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 */ /* 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 /* There is no priority prom on this board, but there is a
priority control word, the only values used in game appear 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 The other bits may control alpha blend on the 2nd sprite chip, or
layer order. layer order.
*/ */
deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,0); decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16_tilemap_2_draw(screen,bitmap,cliprect,0,0); decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 0);
deco16_tilemap_3_draw(screen,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 /* We need to abuse the priority bitmap a little by clearing it before
drawing each sprite layer. This is because there is no priority 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, 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% then when two alpha blended shadows overlapped then they would be 25%
transparent against the background, rather than 50% */ transparent against the background, rather than 50% */
if (deco16_priority&1) { 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);
bitmap_fill(screen->machine->priority_bitmap,cliprect,0); mutantf_draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 3);
mutantf_draw_sprites(screen->machine,bitmap,cliprect,screen->machine->generic.buffered_spriteram2.u16,4); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
} else { 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_spriteram2.u16,4); else
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);
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; return 0;
} }

View File

@ -5,50 +5,56 @@
****************************************************************************/ ****************************************************************************/
#include "emu.h" #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; 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; int offs, bank, gfxbank;
const UINT16 *spritebase; const UINT16 *spritebase;
/* Have to loop over the two sprite sources */ /* 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 */ /* Draw the main spritebank after the other one */
if (bank==0) if (bank == 0)
{ {
spritebase=buffered_spriteram16; spritebase = buffered_spriteram16;
gfxbank=3; gfxbank = 3;
} }
else else
{ {
spritebase=machine->generic.buffered_spriteram2.u16; spritebase = machine->generic.buffered_spriteram2.u16;
gfxbank=4; gfxbank = 4;
} }
sprite = spritebase[offs+1] & 0x7fff; sprite = spritebase[offs + 1] & 0x7fff;
if (!sprite) continue; if (!sprite)
continue;
x = spritebase[offs+2]; x = spritebase[offs + 2];
/* Alpha on chip 2 only */ /* Alpha on chip 2 only */
if (bank==1 && x&0xc000) if (bank == 1 && x & 0xc000)
alpha=0x80; alpha = 0x80;
y = spritebase[offs]; y = spritebase[offs];
flash=y&0x1000; flash = y & 0x1000;
if (flash && (video_screen_get_frame_number(machine->primary_screen) & 1)) continue; if (flash && (video_screen_get_frame_number(machine->primary_screen) & 1))
colour = (x >> 9) &0x1f; continue;
if (y&0x8000) colour+=32; colour = (x >> 9) & 0x1f;
if (y & 0x8000)
colour += 32;
fx = y & 0x2000; fx = y & 0x2000;
fy = y & 0x4000; fy = y & 0x4000;
@ -61,7 +67,8 @@ static void draw_sprites(running_machine* machine, bitmap_t *bitmap, const recta
x = 304 - x; x = 304 - x;
y = 240 - y; y = 240 - y;
if (x>320) continue; /* Speedup */ if (x > 320)
continue; /* Speedup */
sprite &= ~multi; sprite &= ~multi;
if (fy) if (fy)
@ -72,70 +79,91 @@ static void draw_sprites(running_machine* machine, bitmap_t *bitmap, const recta
inc = 1; inc = 1;
} }
if (flip_screen_get(machine)) { if (flip_screen_get(machine))
y=240-y; {
x=304-x; y = 240 - y;
if (fx) fx=0; else fx=1; x = 304 - x;
if (fy) fy=0; else fy=1; if (fx) fx = 0; else fx = 1;
mult=16; if (fy) fy = 0; else fy = 1;
mult = 16;
} }
else mult=-16; else mult = -16;
/* Priority */ /* Priority */
switch (pf_priority&3) { switch (pf_priority & 3)
{
case 0: case 0:
if (bank==0) { if (bank == 0)
switch (spritebase[offs+2]&0xc000) { {
case 0xc000: pmask=1; break; switch (spritebase[offs+2]&0xc000)
case 0x8000: pmask=8; break; {
case 0x4000: pmask=32; break; case 0xc000: pmask = 1; break;
case 0x0000: pmask=128; 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
else pmask=64; {
if (spritebase[offs + 2] & 0x8000)
pmask = 64; /* Check */
else
pmask = 64;
} }
break; break;
case 1: case 1:
if (bank==0) { if (bank == 0)
switch (spritebase[offs+2]&0xc000) { {
case 0xc000: pmask=1; break; switch (spritebase[offs + 2] & 0xc000)
case 0x8000: pmask=8; break; {
case 0x4000: pmask=32; break; case 0xc000: pmask = 1; break;
case 0x0000: pmask=128; 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
else pmask=16; {
if (spritebase[offs + 2] & 0x8000)
pmask = 16; /* Check */
else
pmask = 16;
} }
break; break;
case 2: /* Unused */ case 2: /* Unused */
case 3: case 3:
if (bank==0) { if (bank == 0)
switch (spritebase[offs+2]&0xc000) { {
case 0xc000: pmask=1; break; switch (spritebase[offs + 2] & 0xc000)
case 0x8000: pmask=8; break; {
case 0x4000: pmask=32; break; case 0xc000: pmask = 1; break;
case 0x0000: pmask=128; 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
else pmask=64; {
if (spritebase[offs + 2] & 0x8000)
pmask = 64; /* Check */
else
pmask = 64;
} }
break; break;
} }
while (multi >= 0) while (multi >= 0)
{ {
deco16_pdrawgfx( decodev_pdrawgfx(
deco16ic,
bitmap,cliprect,machine->gfx[gfxbank], bitmap,cliprect,machine->gfx[gfxbank],
sprite - multi * inc, sprite - multi * inc,
colour, colour,
fx,fy, fx, fy,
x,y + mult * multi, x, y + mult * multi,
0,pmask,1<<bank, 1, alpha); 0, pmask, 1 << bank, 1, alpha);
multi--; multi--;
} }
@ -145,52 +173,46 @@ static void draw_sprites(running_machine* machine, bitmap_t *bitmap, const recta
/******************************************************************************/ /******************************************************************************/
static int dassault_bank_callback(const int bank)
{
return ((bank>>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 ) 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 */ /* Update tilemaps */
flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); flip_screen_set(screen->machine, BIT(flip, 7));
deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); decodev_pf12_update(deco16ic, 0, dassault_pf2_rowscroll);
deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll); decodev_pf34_update(deco16ic, 0, dassault_pf4_rowscroll);
/* Draw playfields/update priority bitmap */ /* Draw playfields/update priority bitmap */
deco16_clear_sprite_priority_bitmap(); decodev_clear_sprite_priority_bitmap(deco16ic);
bitmap_fill(screen->machine->priority_bitmap,cliprect,0); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
bitmap_fill(bitmap,cliprect,screen->machine->pens[3072]); bitmap_fill(bitmap, cliprect, screen->machine->pens[3072]);
deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,0); decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
/* The middle playfields can be swapped priority-wise */ /* The middle playfields can be swapped priority-wise */
if ((deco16_priority&3)==0) { if ((priority & 3) == 0)
deco16_tilemap_2_draw(screen,bitmap,cliprect,0,2); {
deco16_tilemap_3_draw(screen,bitmap,cliprect,0,16); decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 2);
} else if ((deco16_priority&3)==1) { decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 16);
deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2); }
deco16_tilemap_2_draw(screen,bitmap,cliprect,0,64); else if ((priority & 3) == 1)
} else if ((deco16_priority&3)==3) { {
deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2); decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 2);
deco16_tilemap_2_draw(screen,bitmap,cliprect,0,16); decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 64);
} else { }
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 */ /* Unused */
} }
/* Draw sprites - two sprite generators, with selectable priority */ /* Draw sprites - two sprite generators, with selectable priority */
draw_sprites(screen->machine,bitmap,cliprect,deco16_priority); draw_sprites(screen->machine, bitmap, cliprect, priority);
deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0);
return 0; return 0;
} }

View File

@ -582,99 +582,66 @@ static void custom_tilemap_draw(
/******************************************************************************/ /******************************************************************************/
#if 0 /* robocop 2 can switch between 2 tilemaps at 4bpp, or 1 at 8bpp */
/* Each game can have banking set up differently depending on how the roms are void decodev_set_tilemap_colour_mask( running_device *device, int tmap, int mask )
connected, and what rom slots are used */
void deco16_set_tilemap_bank_callback(int tmap, int (*callback)(const int bank))
{ {
switch (tmap) { deco16ic_state *deco16ic = get_safe_token(device);
case 0: deco16_bank_callback_1=callback; break;
case 1: deco16_bank_callback_2=callback; break; switch (tmap)
case 2: deco16_bank_callback_3=callback; break; {
case 3: deco16_bank_callback_4=callback; break; 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 void decodev_pf34_set_gfxbank( running_device *device, int small, int big )
generator is connected to paletteram */
void deco16_set_tilemap_colour_base(int tmap, int base)
{ {
switch (tmap) { deco16ic_state *deco16ic = get_safe_token(device);
case 0: deco16_pf1_colour_bank=base; break;
case 1: deco16_pf2_colour_bank=base; break; if (deco16ic->pf34_last_big != big)
case 2: deco16_pf3_colour_bank=base; break; {
case 3: deco16_pf4_colour_bank=base; break; 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) { deco16ic_state *deco16ic = get_safe_token(device);
case 0: deco16_pf1_colourmask=mask; break;
case 1: deco16_pf2_colourmask=mask; break; switch (tmap)
case 2: deco16_pf3_colourmask=mask; break; {
case 3: deco16_pf4_colourmask=mask; break; 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 ) 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); bank1 = deco16ic->bank_cb[2](deco16ic->pf34_control[7] & 0xff);
if (bank1 != deco16ic->pf3_bank) if (bank1 != deco16ic->pf3_bank)
{ {
//if (deco16ic->pf3_tilemap_8x8) tilemap_mark_all_tiles_dirty(deco16ic->pf3_tilemap_8x8); if (deco16ic->pf3_tilemap_16x16)
if (deco16ic->pf3_tilemap_16x16) tilemap_mark_all_tiles_dirty(deco16ic->pf3_tilemap_16x16); tilemap_mark_all_tiles_dirty(deco16ic->pf3_tilemap_16x16);
deco16ic->pf3_bank = bank1; 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); bank2 = deco16ic->bank_cb[3](deco16ic->pf34_control[7] >> 8);
if (bank2 != deco16ic->pf4_bank) if (bank2 != deco16ic->pf4_bank)
{ {
//if (deco16ic->pf4_tilemap_8x8) tilemap_mark_all_tiles_dirty(deco16ic->pf4_tilemap_8x8); if (deco16ic->pf4_tilemap_16x16)
if (deco16ic->pf4_tilemap_16x16) tilemap_mark_all_tiles_dirty(deco16ic->pf4_tilemap_16x16); tilemap_mark_all_tiles_dirty(deco16ic->pf4_tilemap_16x16);
deco16ic->pf4_bank = bank2; 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->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_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); 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->pf12_control = auto_alloc_array_clear(device->machine, UINT16, 0x10 / 2);
deco16ic->pf34_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->priority);
state_save_register_device_item(device, 0, deco16ic->raster_display_position); state_save_register_device_item(device, 0, deco16ic->raster_display_position);
state_save_register_device_item(device, 0, deco16ic->use_custom_pf1); 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); 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 ) static DEVICE_RESET( deco16ic )
{ {
deco16ic_state *deco16ic = get_safe_token(device); deco16ic_state *deco16ic = get_safe_token(device);

View File

@ -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_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); 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); 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_clear_sprite_priority_bitmap(running_device *device);
void decodev_pdrawgfx( void decodev_pdrawgfx(
running_device *device, running_device *device,
bitmap_t *dest,const rectangle *clip,const gfx_element *gfx, bitmap_t *dest,const rectangle *clip,const gfx_element *gfx,
UINT32 code,UINT32 color,int flipx,int flipy,int sx,int sy, 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); 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);

View File

@ -5,15 +5,12 @@
***************************************************************************/ ***************************************************************************/
#include "emu.h" #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) static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
{ {
UINT16 *spriteram16 = machine->generic.spriteram.u16; 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 (x >= 320) x -= 512;
if (y >= 256) y -= 512; if (y >= 256) y -= 512;
y = 240 - y; y = 240 - y;
x = 304 - x; x = 304 - x;
if (x>320) continue; if (x>320) continue;
@ -79,12 +76,15 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
VIDEO_UPDATE( funkyjet ) VIDEO_UPDATE( funkyjet )
{ {
flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom");
deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff);
bitmap_fill(bitmap,cliprect,768); flip_screen_set(screen->machine, BIT(flip, 7));
deco16_tilemap_2_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,0); decodev_pf12_update(deco16ic, funkyjet_pf1_rowscroll, funkyjet_pf2_rowscroll);
deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0);
draw_sprites(screen->machine,bitmap,cliprect); 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; return 0;
} }

View File

@ -5,10 +5,13 @@
***************************************************************************/ ***************************************************************************/
#include "emu.h" #include "emu.h"
#include "includes/deco16ic.h" #include "video/decodev.h"
static UINT16 * rohga_spriteram; static UINT16 * rohga_spriteram;
UINT16 *rohga_pf1_rowscroll,*rohga_pf2_rowscroll;
UINT16 *rohga_pf3_rowscroll,*rohga_pf4_rowscroll;
/******************************************************************************/ /******************************************************************************/
WRITE16_HANDLER( rohga_buffer_spriteram16_w ) 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); 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 ) VIDEO_START( rohga )
{ {
rohga_spriteram = auto_alloc_array(machine, UINT16, 0x800/2); 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) 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; 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 Alternate format from most 16 bit games - same as Captain America and Mutant Fighter
@ -374,7 +340,7 @@ sprite 2:
// else // else
// tilemap_pri=8; // tilemap_pri=8;
if (deco16_priority) if (priority)
tilemap_pri=8; tilemap_pri=8;
else else
tilemap_pri=64; tilemap_pri=64;
@ -416,7 +382,8 @@ sprite 2:
for (x=0; x<w; x++) { for (x=0; x<w; x++) {
for (y=0; y<h; y++) { for (y=0; y<h; y++) {
deco16_pdrawgfx( decodev_pdrawgfx(
deco16ic,
bitmap,cliprect,machine->gfx[gfxbank], bitmap,cliprect,machine->gfx[gfxbank],
sprite + y + h * x, sprite + y + h * x,
colour, colour,
@ -434,45 +401,49 @@ sprite 2:
static void update_rohga(running_device *screen, bitmap_t *bitmap, const rectangle *cliprect, int is_schmeisr) 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 */ /* Update playfields */
flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); flip_screen_set(screen->machine, BIT(flip, 7));
deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); decodev_pf12_update(deco16ic, rohga_pf1_rowscroll, rohga_pf2_rowscroll);
deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll); decodev_pf34_update(deco16ic, rohga_pf3_rowscroll, rohga_pf4_rowscroll);
/* Draw playfields */ /* Draw playfields */
bitmap_fill(screen->machine->priority_bitmap,cliprect,0); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
bitmap_fill(bitmap,cliprect,screen->machine->pens[768]); bitmap_fill(bitmap, cliprect, screen->machine->pens[768]);
switch (deco16_priority&3) switch (priority & 3)
{ {
case 0: case 0:
if (deco16_priority&4) if (priority & 4)
{ {
// Draw as 1 8BPP layer // 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 else
{ {
// Draw as 2 4BPP layers // Draw as 2 4BPP layers
deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,1); decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
deco16_tilemap_3_draw(screen,bitmap,cliprect,0,2); 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; break;
case 1: case 1:
deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,1); decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
deco16_tilemap_2_draw(screen,bitmap,cliprect,0,2); decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 2);
deco16_tilemap_3_draw(screen,bitmap,cliprect,0,4); decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 4);
break; break;
case 2: case 2:
deco16_tilemap_2_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,1); decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
deco16_tilemap_4_draw(screen,bitmap,cliprect,0,2); decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, 0, 2);
deco16_tilemap_3_draw(screen,bitmap,cliprect,0,4); decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 4);
break; break;
} }
rohga_draw_sprites(screen->machine,bitmap,cliprect,rohga_spriteram,is_schmeisr); rohga_draw_sprites(screen->machine, bitmap, cliprect, rohga_spriteram, is_schmeisr);
deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0);
} }
VIDEO_UPDATE( rohga ) VIDEO_UPDATE( rohga )
@ -491,52 +462,59 @@ VIDEO_UPDATE( schmeisr )
VIDEO_UPDATE( wizdfire ) 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 */ /* Update playfields */
flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); flip_screen_set(screen->machine, BIT(flip, 7));
deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); decodev_pf12_update(deco16ic, 0, 0);
deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll); decodev_pf34_update(deco16ic, rohga_pf3_rowscroll, rohga_pf4_rowscroll);
/* Draw playfields - Palette of 2nd playfield chip visible if playfields turned off */ /* 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); 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); wizdfire_draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 4, 3);
deco16_tilemap_2_draw(screen,bitmap,cliprect,0,0); decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 0);
wizdfire_draw_sprites(screen->machine,bitmap,cliprect,screen->machine->generic.buffered_spriteram.u16,3,3); 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?! */ if ((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); decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_ALPHA(0x80), 0);
else 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 */ /* 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_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, 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_spriteram2.u16, 1, 4);
deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0);
return 0; return 0;
} }
VIDEO_UPDATE( nitrobal ) VIDEO_UPDATE( nitrobal )
{ {
running_device *deco16ic = devtag_get_device(screen->machine, "deco_custom");
UINT16 flip = decodev_pf12_control_r(deco16ic, 0, 0xffff);
/* Update playfields */ /* Update playfields */
flip_screen_set(screen->machine, deco16_pf12_control[0]&0x80 ); flip_screen_set(screen->machine, BIT(flip, 7));
deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); decodev_pf12_update(deco16ic, rohga_pf1_rowscroll, rohga_pf2_rowscroll);
deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll); decodev_pf34_update(deco16ic, rohga_pf3_rowscroll, rohga_pf4_rowscroll);
/* Draw playfields - Palette of 2nd playfield chip visible if playfields turned off */ /* 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]);
bitmap_fill(screen->machine->priority_bitmap,NULL,0); bitmap_fill(screen->machine->priority_bitmap, NULL, 0);
deco16_clear_sprite_priority_bitmap(); decodev_clear_sprite_priority_bitmap(deco16ic);
/* pf3 and pf4 are combined into a single 8bpp bitmap */ /* 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); 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_spriteram.u16, 3);
nitrobal_draw_sprites(screen->machine,bitmap,cliprect,screen->machine->generic.buffered_spriteram2.u16,4); 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; return 0;
} }

View File

@ -10,40 +10,12 @@
***************************************************************************/ ***************************************************************************/
#include "emu.h" #include "emu.h"
#include "includes/deco16ic.h" #include "video/decodev.h"
static UINT16 vaportra_priority[2]; 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 ) WRITE16_HANDLER( vaportra_priority_w )
{ {
@ -148,40 +120,45 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
VIDEO_UPDATE( vaportra ) 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) ); flip_screen_set(screen->machine, !BIT(flip, 7));
decodev_pf12_update(deco16ic, 0, 0);
deco16_pf12_update(deco16_pf1_rowscroll,deco16_pf2_rowscroll); decodev_pf34_update(deco16ic, 0, 0);
deco16_pf34_update(deco16_pf3_rowscroll,deco16_pf4_rowscroll);
/* Draw playfields */ /* Draw playfields */
if (pri==0) { if (pri == 0)
deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,0); {
deco16_tilemap_3_draw(screen,bitmap,cliprect,0,0); decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
draw_sprites(screen->machine, bitmap,cliprect,0); decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 0);
deco16_tilemap_2_draw(screen,bitmap,cliprect,0,0); draw_sprites(screen->machine, bitmap, cliprect, 0);
decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 0);
} }
else if (pri==1) { else if (pri == 1)
deco16_tilemap_3_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,0); {
deco16_tilemap_4_draw(screen,bitmap,cliprect,0,0); decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
draw_sprites(screen->machine, bitmap,cliprect,0); decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, 0, 0);
deco16_tilemap_2_draw(screen,bitmap,cliprect,0,0); draw_sprites(screen->machine, bitmap, cliprect, 0);
decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 0);
} }
else if (pri==2) { else if (pri == 2)
deco16_tilemap_4_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,0); {
deco16_tilemap_2_draw(screen,bitmap,cliprect,0,0); decodev_tilemap_4_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
draw_sprites(screen->machine, bitmap,cliprect,0); decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 0);
deco16_tilemap_3_draw(screen,bitmap,cliprect,0,0); draw_sprites(screen->machine, bitmap, cliprect, 0);
decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, 0, 0);
} }
else { else
deco16_tilemap_3_draw(screen,bitmap,cliprect,TILEMAP_DRAW_OPAQUE,0); {
deco16_tilemap_2_draw(screen,bitmap,cliprect,0,0); decodev_tilemap_3_draw(deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
draw_sprites(screen->machine, bitmap,cliprect,0); decodev_tilemap_2_draw(deco16ic, bitmap, cliprect, 0, 0);
deco16_tilemap_4_draw(screen,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); draw_sprites(screen->machine, bitmap, cliprect, 1);
deco16_tilemap_1_draw(screen,bitmap,cliprect,0,0); decodev_tilemap_1_draw(deco16ic, bitmap, cliprect, 0, 0);
return 0; return 0;
} }