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