Haze: Each deco16ic device now handles 2 tilemaps, not 4.. (base of converting it to be a device for the tilemap chip). (no whatsnew)

This commit is contained in:
Scott Stone 2011-03-25 16:29:24 +00:00
parent fb5091182e
commit c5e98b9459
39 changed files with 716 additions and 732 deletions

View File

@ -41,6 +41,8 @@ public:
/* devices */
device_t *maincpu;
device_t *deco16ic;
device_t *deco16ic34;
device_t *lscreen;
device_t *rscreen;
device_t *eeprom;
@ -70,7 +72,7 @@ static VIDEO_START( backfire )
state->left = auto_bitmap_alloc(machine, 80*8, 32*8, BITMAP_FORMAT_INDEXED16);
state->right = auto_bitmap_alloc(machine, 80*8, 32*8, BITMAP_FORMAT_INDEXED16);
state->save_pointer(NAME(state->spriteram_1), 0x2000/2);
state->save_pointer(NAME(state->spriteram_2), 0x2000/2);
@ -89,8 +91,8 @@ static SCREEN_UPDATE( backfire )
/* screen 1 uses pf1 as the forground and pf3 as the background */
/* screen 2 uses pf2 as the foreground and pf4 as the background */
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll);
if (screen == state->lscreen)
{
@ -100,14 +102,14 @@ static SCREEN_UPDATE( backfire )
if (state->left_priority[0] == 0)
{
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 1);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 1);
deco16ic_tilemap_1_draw(state->deco16ic, bitmap, cliprect, 0, 2);
screen->machine->device<decospr_device>("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram_1, 0x800);
}
else if (state->left_priority[0] == 2)
{
deco16ic_tilemap_1_draw(state->deco16ic, bitmap, cliprect, 0, 2);
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 4);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 4);
screen->machine->device<decospr_device>("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram_1, 0x800);
}
else
@ -120,14 +122,14 @@ static SCREEN_UPDATE( backfire )
if (state->right_priority[0] == 0)
{
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, 0, 1);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, 0, 1);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 2);
screen->machine->device<decospr_device>("spritegen2")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram_2, 0x800);
}
else if (state->right_priority[0] == 2)
{
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 2);
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, 0, 4);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, 0, 4);
screen->machine->device<decospr_device>("spritegen2")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram_2, 0x800);
}
else
@ -248,14 +250,14 @@ static WRITE32_HANDLER( backfire_spriteram2_w )
static ADDRESS_MAP_START( backfire_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x10001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w)
AM_RANGE(0x100000, 0x10001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x110000, 0x111fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x114000, 0x115fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
AM_RANGE(0x120000, 0x120fff) AM_READWRITE(backfire_pf1_rowscroll_r, backfire_pf1_rowscroll_w)
AM_RANGE(0x124000, 0x124fff) AM_READWRITE(backfire_pf2_rowscroll_r, backfire_pf2_rowscroll_w)
AM_RANGE(0x130000, 0x13001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf34_control_dword_r, deco16ic_pf34_control_dword_w)
AM_RANGE(0x140000, 0x141fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_dword_r, deco16ic_pf3_data_dword_w)
AM_RANGE(0x144000, 0x145fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_dword_r, deco16ic_pf4_data_dword_w)
AM_RANGE(0x130000, 0x13001f) AM_DEVREADWRITE("deco_custom34", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x140000, 0x141fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x144000, 0x145fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
AM_RANGE(0x150000, 0x150fff) AM_READWRITE(backfire_pf3_rowscroll_r, backfire_pf3_rowscroll_w)
AM_RANGE(0x154000, 0x154fff) AM_READWRITE(backfire_pf4_rowscroll_r, backfire_pf4_rowscroll_w)
AM_RANGE(0x160000, 0x161fff) AM_WRITE(backfire_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram)
@ -379,6 +381,7 @@ static const gfx_layout tilelayout =
static GFXDECODE_START( backfire )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 128 ) /* Characters 8x8 */
GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 128 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "gfx2", 0, charlayout, 0, 128 ) /* Characters 8x8 */
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 128 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 0x200, 32 ) /* Sprites 16x16 (screen 1) */
GFXDECODE_ENTRY( "gfx4", 0, spritelayout, 0x600, 32 ) /* Sprites 16x16 (screen 2) */
@ -414,14 +417,25 @@ static int backfire_bank_callback( int bank )
static const deco16ic_interface backfire_deco16ic_intf =
{
"lscreen",
0, 0, 1, 1,
0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */
0x00, 0x40, 0x10, 0x50, /* color base */
0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0x00, 0x40, /* color base */
0x0f, 0x0f, /* color masks (default values) */
backfire_bank_callback,
backfire_bank_callback,
0,1
};
static const deco16ic_interface backfire_deco16ic34_intf =
{
"lscreen",
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0x10, 0x50, /* color base */
0x0f, 0x0f, /* color masks (default values) */
backfire_bank_callback,
backfire_bank_callback
backfire_bank_callback,
2,3
};
static MACHINE_START( backfire )
@ -430,6 +444,7 @@ static MACHINE_START( backfire )
state->maincpu = machine->device("maincpu");
state->deco16ic = machine->device("deco_custom");
state->deco16ic34 = machine->device("deco_custom34");
state->lscreen = machine->device("lscreen");
state->rscreen = machine->device("rscreen");
state->eeprom = machine->device("eeprom");
@ -482,12 +497,14 @@ static MACHINE_CONFIG_START( backfire, backfire_state )
MCFG_VIDEO_START(backfire)
MCFG_DECO16IC_ADD("deco_custom", backfire_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", backfire_deco16ic34_intf)
MCFG_DEVICE_ADD("spritegen", decospr_, 0)
decospr_device_config::set_gfx_region(device, 3);
decospr_device_config::set_gfx_region(device, 4);
decospr_device_config::set_pri_callback(device, backfire_pri_callback);
MCFG_DEVICE_ADD("spritegen2", decospr_, 0)
decospr_device_config::set_gfx_region(device, 4);
decospr_device_config::set_gfx_region(device, 5);
decospr_device_config::set_pri_callback(device, backfire_pri_callback);

View File

@ -106,15 +106,15 @@ static ADDRESS_MAP_START( boogwing_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x24e344, 0x24e345) AM_READ_PORT("INPUTS")
AM_RANGE(0x24e000, 0x24e7ff) AM_WRITE(deco16_104_prot_w) AM_BASE(&deco16_prot_ram)
AM_RANGE(0x260000, 0x26000f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w)
AM_RANGE(0x260000, 0x26000f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w)
AM_RANGE(0x264000, 0x265fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x266000, 0x267fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x268000, 0x268fff) AM_RAM AM_BASE_MEMBER(boogwing_state, pf1_rowscroll)
AM_RANGE(0x26a000, 0x26afff) AM_RAM AM_BASE_MEMBER(boogwing_state, pf2_rowscroll)
AM_RANGE(0x270000, 0x27000f) AM_DEVWRITE("deco_custom", deco16ic_pf34_control_w)
AM_RANGE(0x274000, 0x275fff) AM_RAM_DEVWRITE("deco_custom", deco16ic_pf3_data_w)
AM_RANGE(0x276000, 0x277fff) AM_RAM_DEVWRITE("deco_custom", deco16ic_pf4_data_w)
AM_RANGE(0x270000, 0x27000f) AM_DEVWRITE("deco_custom34", deco16ic_pf_control_w)
AM_RANGE(0x274000, 0x275fff) AM_RAM_DEVWRITE("deco_custom34", deco16ic_pf1_data_w)
AM_RANGE(0x276000, 0x277fff) AM_RAM_DEVWRITE("deco_custom34", deco16ic_pf2_data_w)
AM_RANGE(0x278000, 0x278fff) AM_RAM AM_BASE_MEMBER(boogwing_state, pf3_rowscroll)
AM_RANGE(0x27a000, 0x27afff) AM_RAM AM_BASE_MEMBER(boogwing_state, pf4_rowscroll)
@ -311,14 +311,25 @@ static int boogwing_bank_callback2( const int bank )
static const deco16ic_interface boogwing_deco16ic_intf =
{
"screen",
0, 0, 1, 1,
0x0f, 0x1f, 0x0f, 0x0f, /* trans masks (pf2 has 5bpp graphics) */
0, 0, 0, 16, /* color base (pf2 is non default) */
0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */
0, 1,
0x0f, 0x1f, /* trans masks (pf2 has 5bpp graphics) */
0, 0, /* color base (pf2 is non default) */
0x0f, 0x0f, /* color masks (default values) */
NULL,
boogwing_bank_callback,
0, 1
};
static const deco16ic_interface boogwing_deco16ic34_intf =
{
"screen",
0, 1,
0x0f, 0x0f,
0, 16,
0x0f, 0x0f,
boogwing_bank_callback2,
boogwing_bank_callback2
boogwing_bank_callback2,
0, 2
};
@ -347,6 +358,7 @@ static MACHINE_CONFIG_START( boogwing, boogwing_state )
MCFG_GFXDECODE(boogwing)
MCFG_DECO16IC_ADD("deco_custom", boogwing_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", boogwing_deco16ic34_intf)
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")

View File

@ -113,15 +113,15 @@ static ADDRESS_MAP_START( twocrude_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x0a4000, 0x0a47ff) AM_RAM AM_BASE_MEMBER(cbuster_state, pf1_rowscroll)
AM_RANGE(0x0a6000, 0x0a67ff) AM_RAM AM_BASE_MEMBER(cbuster_state, pf2_rowscroll)
AM_RANGE(0x0a8000, 0x0a8fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w)
AM_RANGE(0x0aa000, 0x0aafff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w)
AM_RANGE(0x0a8000, 0x0a8fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x0aa000, 0x0aafff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x0ac000, 0x0ac7ff) AM_RAM AM_BASE_MEMBER(cbuster_state, pf3_rowscroll)
AM_RANGE(0x0ae000, 0x0ae7ff) AM_RAM AM_BASE_MEMBER(cbuster_state, pf4_rowscroll)
AM_RANGE(0x0b0000, 0x0b07ff) AM_RAM AM_BASE_MEMBER(cbuster_state, spriteram16)
AM_RANGE(0x0b4000, 0x0b4001) AM_WRITENOP
AM_RANGE(0x0b5000, 0x0b500f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w)
AM_RANGE(0x0b6000, 0x0b600f) AM_DEVWRITE("deco_custom", deco16ic_pf34_control_w)
AM_RANGE(0x0b5000, 0x0b500f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w)
AM_RANGE(0x0b6000, 0x0b600f) AM_DEVWRITE("deco_custom34", deco16ic_pf_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)
@ -283,14 +283,25 @@ static int twocrude_bank_callback( const int bank )
static const deco16ic_interface twocrude_deco16ic_intf =
{
"screen",
0, 0, 1, 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) */
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0x00, 0x20, /* color base (default values) */
0x0f, 0x0f, /* color masks (default values) */
twocrude_bank_callback,
twocrude_bank_callback,
0,1,
};
static const deco16ic_interface twocrude_deco16ic34_intf =
{
"screen",
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0x30, 0x40, /* color base (default values) */
0x0f, 0x0f, /* color masks (default values) */
twocrude_bank_callback,
twocrude_bank_callback
twocrude_bank_callback,
0,2,
};
static MACHINE_START( cbuster )
@ -300,6 +311,7 @@ static MACHINE_START( cbuster )
state->maincpu = machine->device("maincpu");
state->audiocpu = machine->device("audiocpu");
state->deco16ic = machine->device("deco_custom");
state->deco16ic34 = machine->device("deco_custom34");
state->save_item(NAME(state->prot));
state->save_item(NAME(state->pri));
@ -340,6 +352,8 @@ static MACHINE_CONFIG_START( twocrude, cbuster_state )
MCFG_PALETTE_LENGTH(2048)
MCFG_DECO16IC_ADD("deco_custom", twocrude_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", twocrude_deco16ic34_intf)
MCFG_DEVICE_ADD("spritegen", decospr_, 0)
decospr_device_config::set_gfx_region(device, 3);

View File

@ -152,7 +152,7 @@ static READ16_HANDLER( robocop2_prot_r )
static WRITE16_HANDLER( cninja_pf12_control_w )
{
cninja_state *state = space->machine->driver_data<cninja_state>();
deco16ic_pf12_control_w(state->deco16ic, offset, data, mem_mask);
deco16ic_pf_control_w(state->deco16ic, offset, data, mem_mask);
space->machine->primary_screen->update_partial(space->machine->primary_screen->vpos());
}
@ -160,7 +160,7 @@ static WRITE16_HANDLER( cninja_pf12_control_w )
static WRITE16_HANDLER( cninja_pf34_control_w )
{
cninja_state *state = space->machine->driver_data<cninja_state>();
deco16ic_pf34_control_w(state->deco16ic, offset, data, mem_mask);
deco16ic_pf_control_w(state->deco16ic34, offset, data, mem_mask);
space->machine->primary_screen->update_partial(space->machine->primary_screen->vpos());
}
@ -175,8 +175,8 @@ static ADDRESS_MAP_START( cninja_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf2_rowscroll)
AM_RANGE(0x150000, 0x15000f) AM_WRITE(cninja_pf34_control_w)
AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w)
AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w)
AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf3_rowscroll)
AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf4_rowscroll)
@ -209,8 +209,8 @@ static ADDRESS_MAP_START( cninjabl_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf2_rowscroll)
AM_RANGE(0x150000, 0x15000f) AM_WRITE(cninja_pf34_control_w) // not used / incorrect on this
AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w)
AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w)
AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf3_rowscroll)
AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf4_rowscroll)
@ -237,8 +237,8 @@ static ADDRESS_MAP_START( edrandy_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf2_rowscroll)
AM_RANGE(0x150000, 0x15000f) AM_WRITE(cninja_pf34_control_w)
AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w)
AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w)
AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf3_rowscroll)
AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf4_rowscroll)
@ -265,8 +265,8 @@ static ADDRESS_MAP_START( robocop2_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x14e000, 0x14e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf2_rowscroll)
AM_RANGE(0x150000, 0x15000f) AM_WRITE(cninja_pf34_control_w)
AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w)
AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w)
AM_RANGE(0x154000, 0x154fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x156000, 0x156fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x15c000, 0x15c7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf3_rowscroll)
AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf4_rowscroll)
@ -301,8 +301,8 @@ static ADDRESS_MAP_START( mutantf_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x30a000, 0x30a7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf2_rowscroll)
AM_RANGE(0x310000, 0x31000f) AM_WRITE(cninja_pf34_control_w)
AM_RANGE(0x314000, 0x315fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w)
AM_RANGE(0x316000, 0x317fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w)
AM_RANGE(0x314000, 0x315fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x316000, 0x317fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x318000, 0x3187ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf3_rowscroll)
AM_RANGE(0x31a000, 0x31a7ff) AM_RAM AM_BASE_MEMBER(cninja_state, pf4_rowscroll)
@ -777,55 +777,104 @@ static int mutantf_2_bank_callback( const int bank )
static const deco16ic_interface cninja_deco16ic_intf =
{
"screen",
0, 1, 1, 1,
0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */
0, 16, 0, 48, /* color base */
0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */
1, 1,
0x0f, 0x0f, /* trans masks (default values) */
0, 16, /* color base */
0x0f, 0x0f, /* color masks (default values) */
NULL,
NULL,
cninja_bank_callback,
cninja_bank_callback
0, 1,
};
static const deco16ic_interface cninja_deco16ic34_intf =
{
"screen",
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0, 48, /* color base */
0x0f, 0x0f, /* color masks (default values) */
cninja_bank_callback,
cninja_bank_callback,
0, 2,
};
static const deco16ic_interface edrandy_deco16ic_intf =
{
"screen",
0, 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) */
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0, 16, /* color base */
0x0f, 0x0f, /* color masks (default values) */
NULL,
NULL,
cninja_bank_callback,
cninja_bank_callback
0,1,
};
static const deco16ic_interface edrandy_deco16ic34_intf =
{
"screen",
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0, 48, /* color base */
0x0f, 0x0f, /* color masks (default values) */
cninja_bank_callback,
cninja_bank_callback,
0,2,
};
static const deco16ic_interface robocop2_deco16ic_intf =
{
"screen",
0, 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) */
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0, 16, /* color base */
0x0f, 0x0f, /* color masks (default values) */
NULL,
robocop2_bank_callback,
robocop2_bank_callback,
robocop2_bank_callback
0,1,
};
static const deco16ic_interface robocop2_deco16ic34_intf =
{
"screen",
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0, 48, /* color base */
0x0f, 0x0f, /* color masks (default values) */
robocop2_bank_callback,
robocop2_bank_callback,
0,2,
};
static const deco16ic_interface mutantf_deco16ic_intf =
{
"screen",
0, 0, 1, 1,
0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */
0, 0x30, 0x20, 0x40, /* color base */
0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0, 0x30, /* color base */
0x0f, 0x0f, /* color masks (default values) */
mutantf_1_bank_callback,
mutantf_2_bank_callback,
mutantf_1_bank_callback,
mutantf_1_bank_callback
0,1,
};
static const deco16ic_interface mutantf_deco16ic34_intf =
{
"screen",
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0x20, 0x40, /* color base */
0x0f, 0x0f, /* color masks (default values) */
mutantf_1_bank_callback,
mutantf_1_bank_callback,
0,2,
};
static MACHINE_START( cninja )
{
cninja_state *state = machine->driver_data<cninja_state>();
@ -887,6 +936,8 @@ static MACHINE_CONFIG_START( cninja, cninja_state )
MCFG_PALETTE_LENGTH(2048)
MCFG_DECO16IC_ADD("deco_custom", cninja_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", cninja_deco16ic34_intf)
MCFG_DEVICE_ADD("spritegen", decospr_, 0)
decospr_device_config::set_gfx_region(device, 3);
decospr_device_config::set_pri_callback(device, cninja_pri_callback);
@ -940,6 +991,8 @@ static MACHINE_CONFIG_START( stoneage, cninja_state )
MCFG_VIDEO_START(stoneage)
MCFG_DECO16IC_ADD("deco_custom", cninja_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", cninja_deco16ic34_intf)
MCFG_DEVICE_ADD("spritegen", decospr_, 0)
decospr_device_config::set_gfx_region(device, 3);
decospr_device_config::set_pri_callback(device, cninja_pri_callback);
@ -989,6 +1042,7 @@ static MACHINE_CONFIG_START( cninjabl, cninja_state )
MCFG_PALETTE_LENGTH(2048)
MCFG_DECO16IC_ADD("deco_custom", cninja_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom32", cninja_deco16ic34_intf)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@ -1032,6 +1086,8 @@ static MACHINE_CONFIG_START( edrandy, cninja_state )
MCFG_PALETTE_LENGTH(2048)
MCFG_DECO16IC_ADD("deco_custom", edrandy_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", edrandy_deco16ic34_intf)
MCFG_DEVICE_ADD("spritegen", decospr_, 0)
decospr_device_config::set_gfx_region(device, 3);
decospr_device_config::set_pri_callback(device, cninja_pri_callback);
@ -1083,6 +1139,8 @@ static MACHINE_CONFIG_START( robocop2, cninja_state )
MCFG_PALETTE_LENGTH(2048)
MCFG_DECO16IC_ADD("deco_custom", robocop2_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", robocop2_deco16ic34_intf)
MCFG_DEVICE_ADD("spritegen", decospr_, 0)
decospr_device_config::set_gfx_region(device, 3);
decospr_device_config::set_pri_callback(device, cninja_pri_callback);
@ -1137,6 +1195,8 @@ static MACHINE_CONFIG_START( mutantf, cninja_state )
MCFG_PALETTE_LENGTH(2048)
MCFG_DECO16IC_ADD("deco_custom", mutantf_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", mutantf_deco16ic34_intf)
MCFG_DEVICE_ADD("spritegen1", decospr_, 0)
decospr_device_config::set_gfx_region(device, 3);

View File

@ -229,12 +229,12 @@ static ADDRESS_MAP_START( dassault_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x200000, 0x201fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x202000, 0x203fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x212000, 0x212fff) AM_WRITEONLY AM_BASE_MEMBER(dassault_state, pf2_rowscroll)
AM_RANGE(0x220000, 0x22000f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w)
AM_RANGE(0x220000, 0x22000f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w)
AM_RANGE(0x240000, 0x240fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w)
AM_RANGE(0x242000, 0x242fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w)
AM_RANGE(0x240000, 0x240fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x242000, 0x242fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x252000, 0x252fff) AM_WRITEONLY AM_BASE_MEMBER(dassault_state, pf4_rowscroll)
AM_RANGE(0x260000, 0x26000f) AM_DEVWRITE("deco_custom", deco16ic_pf34_control_w)
AM_RANGE(0x260000, 0x26000f) AM_DEVWRITE("deco_custom34", deco16ic_pf_control_w)
AM_RANGE(0x3f8000, 0x3fbfff) AM_RAM AM_BASE_MEMBER(dassault_state, ram) /* Main ram */
AM_RANGE(0x3fc000, 0x3fcfff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram2) /* Spriteram (2nd) */
@ -541,16 +541,28 @@ static int dassault_bank_callback( const int bank )
static const deco16ic_interface dassault_deco16ic_intf =
{
"screen",
0, 0, 1, 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) */
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0, 16, /* color base (default values) */
0x0f, 0x0f, /* color masks (default values) */
dassault_bank_callback,
dassault_bank_callback,
dassault_bank_callback,
dassault_bank_callback
0,1,
};
static const deco16ic_interface dassault_deco16ic34_intf =
{
"screen",
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0, 16, /* color base (default values) */
0x0f, 0x0f, /* color masks (default values) */
dassault_bank_callback,
dassault_bank_callback,
0,2,
};
static MACHINE_CONFIG_START( dassault, dassault_state )
/* basic machine hardware */
@ -582,6 +594,7 @@ static MACHINE_CONFIG_START( dassault, dassault_state )
MCFG_PALETTE_LENGTH(4096)
MCFG_DECO16IC_ADD("deco_custom", dassault_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", dassault_deco16ic34_intf)
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")

View File

@ -90,10 +90,10 @@ UINT16 dblwings_pri_callback(UINT16 x)
static SCREEN_UPDATE(dblewing)
{
dblewing_state *state = screen->machine->driver_data<dblewing_state>();
UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff);
UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff);
flip_screen_set(screen->machine, BIT(flip, 7));
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
bitmap_fill(bitmap, cliprect, 0); /* not Confirmed */
bitmap_fill(screen->machine->priority_bitmap, NULL, 0);
@ -320,7 +320,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_DEVWRITE("deco_custom", deco16ic_pf12_control_w)
AM_RANGE(0x28c000, 0x28c00f) AM_RAM_DEVWRITE("deco_custom", deco16ic_pf_control_w)
AM_RANGE(0x300000, 0x3007ff) AM_RAM AM_BASE_SIZE_MEMBER(dblewing_state, spriteram, spriteram_size)
AM_RANGE(0x320000, 0x3207ff) AM_RAM_WRITE(paletteram16_xxxxBBBBGGGGRRRR_word_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0xff0000, 0xff3fff) AM_MIRROR(0xc000) AM_RAM
@ -543,14 +543,13 @@ static int dblewing_bank_callback( const int bank )
static const deco16ic_interface dblewing_deco16ic_intf =
{
"screen",
1, 0, 1, 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) */
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0, 16, /* color base (default values) */
0x0f, 0x0f, /* color masks (default values) */
dblewing_bank_callback,
dblewing_bank_callback,
NULL,
NULL
0,1,
};
static MACHINE_START( dblewing )

View File

@ -66,7 +66,7 @@ static SCREEN_UPDATE( wcvol95 )
bitmap_fill(screen->machine->priority_bitmap, NULL, 0);
bitmap_fill(bitmap, NULL, 0);
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
screen->machine->device<decospr_device>("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram, 0x800);
@ -130,7 +130,7 @@ 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_MODERN("oki1", okim6295_device, read, write, 0x000000ff)
AM_RANGE(0x160000, 0x160003) AM_DEVREADWRITE8_MODERN("oki2", okim6295_device, read, write, 0x000000ff)
AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w)
AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x190000, 0x191fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x194000, 0x195fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
AM_RANGE(0x1a0000, 0x1a0fff) AM_READWRITE(wcvol95_pf1_rowscroll_r, wcvol95_pf1_rowscroll_w)
@ -142,7 +142,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( wcvol95_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x10001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w)
AM_RANGE(0x100000, 0x10001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x110000, 0x111fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x114000, 0x115fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
AM_RANGE(0x120000, 0x120fff) AM_READWRITE(wcvol95_pf1_rowscroll_r, wcvol95_pf1_rowscroll_w)
@ -315,14 +315,13 @@ static int deco156_bank_callback(const int bank)
static const deco16ic_interface deco156_deco16ic_intf =
{
"screen",
1, 0, 1, 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) */
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0, 16, /* color base (default values) */
0x0f, 0x0f, /* color masks (default values) */
deco156_bank_callback,
deco156_bank_callback,
NULL,
NULL
0,1,
};
UINT16 deco156_pri_callback(UINT16 x)

View File

@ -253,16 +253,28 @@ static int fghthist_bank_callback( int bank )
static const deco16ic_interface fghthist_deco16ic_intf =
{
"screen",
0, 0, 1, 1,
0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */
0x00, 0x10, 0x20, 0x30, /* color base */
0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0x00, 0x10, /* color base */
0x0f, 0x0f, /* color masks (default values) */
fghthist_bank_callback,
fghthist_bank_callback,
fghthist_bank_callback,
fghthist_bank_callback
0,1
};
static const deco16ic_interface fghthist_deco16ic34_intf =
{
"screen",
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0x20, 0x30, /* color base */
0x0f, 0x0f, /* color masks (default values) */
fghthist_bank_callback,
fghthist_bank_callback,
0,2
};
#if 0
static WRITE32_HANDLER( deco32_pf12_control_w )
@ -707,7 +719,7 @@ static WRITE32_HANDLER( deco32_buffer_spriteram_w )
{
deco32_state *state = space->machine->driver_data<deco32_state>();
memcpy(state->spriteram16_buffered, state->spriteram16, 0x1000);
}
}
static READ32_HANDLER( deco32_spriteram2_r )
{
@ -727,7 +739,7 @@ static WRITE32_HANDLER( deco32_buffer_spriteram2_w )
{
deco32_state *state = space->machine->driver_data<deco32_state>();
memcpy(state->spriteram16_2_buffered, state->spriteram16_2, 0x1000);
}
}
// tattass tests these as 32-bit ram, even if only 16-bits are hooked up to the tilemap chip - does it mirror parts of the dword?
@ -745,7 +757,7 @@ static ADDRESS_MAP_START( captaven_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x108000, 0x108003) AM_WRITENOP /* ? */
AM_RANGE(0x110000, 0x111fff) AM_READWRITE(deco32_spriteram_r, deco32_spriteram_w)
AM_RANGE(0x120000, 0x127fff) AM_RAM AM_BASE_MEMBER(deco32_state, ram) /* Main RAM */
AM_RANGE(0x128000, 0x128fff) AM_READ(captaven_prot_r)
AM_RANGE(0x1280c8, 0x1280cb) AM_WRITE(deco32_sound_w)
AM_RANGE(0x130000, 0x131fff) AM_RAM_WRITE(deco32_nonbuffered_palette_w) AM_BASE_GENERIC(paletteram) /* Palette RAM */
@ -755,23 +767,23 @@ static ADDRESS_MAP_START( captaven_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x178000, 0x178003) AM_WRITE(deco32_pri_w)
AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w)
AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x190000, 0x191fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x192000, 0x193fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w) /* Mirror address - bug in program code */
AM_RANGE(0x194000, 0x195fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
AM_RANGE(0x1a0000, 0x1a3fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf1_rowscroll32)
AM_RANGE(0x1a4000, 0x1a5fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf2_rowscroll32)
AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf34_control_dword_r, deco16ic_pf34_control_dword_w)
AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_dword_r, deco16ic_pf3_data_dword_w)
AM_RANGE(0x1d4000, 0x1d5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_dword_r, deco16ic_pf4_data_dword_w) // unused
AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE("deco_custom34", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x1d4000, 0x1d5fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) // unused
AM_RANGE(0x1e0000, 0x1e3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf3_rowscroll32)
AM_RANGE(0x1e4000, 0x1e5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf4_rowscroll32) // unused
ADDRESS_MAP_END
static ADDRESS_MAP_START( fghthist_map, ADDRESS_SPACE_PROGRAM, 32 )
// AM_RANGE(0x000000, 0x001fff) AM_ROM AM_WRITE(deco32_pf1_data_w) // wtf??
// AM_RANGE(0x000000, 0x001fff) AM_ROM AM_WRITE(deco32_pf1_data_w) // wtf??
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_BASE_MEMBER(deco32_state, ram)
AM_RANGE(0x120020, 0x12002f) AM_READ(fghthist_control_r)
@ -790,13 +802,13 @@ static ADDRESS_MAP_START( fghthist_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x184000, 0x185fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
AM_RANGE(0x192000, 0x193fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf1_rowscroll32)
AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf2_rowscroll32)
AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w)
AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_dword_r, deco16ic_pf3_data_dword_w)
AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_dword_r, deco16ic_pf4_data_dword_w)
AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf3_rowscroll32)
AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf4_rowscroll32)
AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf34_control_dword_r, deco16ic_pf34_control_dword_w)
AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("deco_custom34", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x16c000, 0x16c01f) AM_READNOP
AM_RANGE(0x17c000, 0x17c03f) AM_READNOP
@ -823,13 +835,13 @@ static ADDRESS_MAP_START( fghthsta_memmap, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x184000, 0x185fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
AM_RANGE(0x192000, 0x193fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf1_rowscroll32)
AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf2_rowscroll32)
AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w)
AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_dword_r, deco16ic_pf3_data_dword_w)
AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_dword_r, deco16ic_pf4_data_dword_w)
AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf3_rowscroll32)
AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf4_rowscroll32)
AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf34_control_dword_r, deco16ic_pf34_control_dword_w)
AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("deco_custom34", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x200000, 0x200fff) AM_READWRITE(deco16_146_fghthist_prot_r, deco16_146_fghthist_prot_w) AM_BASE(&deco32_prot_ram)
ADDRESS_MAP_END
@ -846,15 +858,15 @@ static ADDRESS_MAP_START( dragngun_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x138000, 0x138003) AM_NOP /* Palette dma complete in bit 0x8? ack? return 0 else tight loop */
AM_RANGE(0x138008, 0x13800b) AM_WRITE(deco32_palette_dma_w)
AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w)
AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x190000, 0x191fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x194000, 0x195fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
AM_RANGE(0x1a0000, 0x1a3fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf1_rowscroll32)
AM_RANGE(0x1a4000, 0x1a5fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf2_rowscroll32)
AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf34_control_dword_r, deco16ic_pf34_control_dword_w)
AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_dword_r, deco16ic_pf3_data_dword_w)
AM_RANGE(0x1d4000, 0x1d5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_dword_r, deco16ic_pf4_data_dword_w) // unused
AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE("deco_custom34", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x1d4000, 0x1d5fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) // unused
AM_RANGE(0x1e0000, 0x1e3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf3_rowscroll32)
AM_RANGE(0x1e4000, 0x1e5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf4_rowscroll32) // unused
@ -897,15 +909,15 @@ static ADDRESS_MAP_START( lockload_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x170000, 0x170007) AM_READ(lockload_gun_mirror_r) /* Not on Dragongun */
AM_RANGE(0x178008, 0x17800f) AM_WRITENOP /* Gun read ACK's */
AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w)
AM_RANGE(0x180000, 0x18001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x190000, 0x191fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x194000, 0x195fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
AM_RANGE(0x1a0000, 0x1a3fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf1_rowscroll32)
AM_RANGE(0x1a4000, 0x1a5fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf2_rowscroll32)
AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf34_control_dword_r, deco16ic_pf34_control_dword_w)
AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_dword_r, deco16ic_pf3_data_dword_w)
AM_RANGE(0x1d4000, 0x1d5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_dword_r, deco16ic_pf4_data_dword_w) // unused
AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE("deco_custom34", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x1d4000, 0x1d5fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w) // unused
AM_RANGE(0x1e0000, 0x1e3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf3_rowscroll32)
AM_RANGE(0x1e4000, 0x1e5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf4_rowscroll32) // unused
@ -963,13 +975,13 @@ static ADDRESS_MAP_START( tattass_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x184000, 0x185fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
AM_RANGE(0x192000, 0x193fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf1_rowscroll32)
AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf2_rowscroll32)
AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w)
AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_dword_r, deco16ic_pf3_data_dword_w)
AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_dword_r, deco16ic_pf4_data_dword_w)
AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf3_rowscroll32)
AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf4_rowscroll32)
AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf34_control_dword_r, deco16ic_pf34_control_dword_w)
AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("deco_custom34", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x200000, 0x200fff) AM_READWRITE(tattass_prot_r, tattass_prot_w) AM_BASE(&deco32_prot_ram)
ADDRESS_MAP_END
@ -1004,13 +1016,13 @@ static ADDRESS_MAP_START( nslasher_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x184000, 0x185fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
AM_RANGE(0x192000, 0x193fff) AM_RAM_WRITE(deco32_pf1_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf1_rowscroll32)
AM_RANGE(0x194000, 0x195fff) AM_RAM_WRITE(deco32_pf2_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf2_rowscroll32)
AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w)
AM_RANGE(0x1a0000, 0x1a001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_dword_r, deco16ic_pf3_data_dword_w)
AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_dword_r, deco16ic_pf4_data_dword_w)
AM_RANGE(0x1c2000, 0x1c3fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x1c4000, 0x1c5fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
AM_RANGE(0x1d2000, 0x1d3fff) AM_RAM_WRITE(deco32_pf3_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf3_rowscroll32)
AM_RANGE(0x1d4000, 0x1d5fff) AM_RAM_WRITE(deco32_pf4_rowscroll_w) AM_BASE_MEMBER(deco32_state, pf4_rowscroll32)
AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf34_control_dword_r, deco16ic_pf34_control_dword_w)
AM_RANGE(0x1e0000, 0x1e001f) AM_DEVREADWRITE("deco_custom34", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x200000, 0x200fff) AM_READWRITE(nslasher_prot_r, nslasher_prot_w) AM_BASE(&deco32_prot_ram)
ADDRESS_MAP_END
@ -1768,14 +1780,25 @@ static int captaven_bank_callback( int bank )
static const deco16ic_interface captaven_deco16ic_intf =
{
"screen",
0, 0, 1, 0, // pf12only, split, fullwidth12 / fullwidth34
0x0f, 0x0f, 0xff, 0x00, /* trans masks (default values) */
0x20, 0x20, 0x10, 0x00, /* color base */
0x0f, 0x0f, 0x0f, 0x00, /* color masks (default values) */
0,
0,
0, 1, // pf12only, split, fullwidth12 / fullwidth34
0x0f, 0x0f, /* trans masks (default values) */
0x20, 0x20, /* color base */
0x0f, 0x0f, /* color masks (default values) */
NULL,
NULL,
0,1
};
static const deco16ic_interface captaven_deco16ic34_intf =
{
"screen",
0, 0, // pf12only, split, fullwidth12 / fullwidth34
0xff, 0x00, /* trans masks (default values) */
0x10, 0x00, /* color base */
0x0f, 0x00, /* color masks (default values) */
captaven_bank_callback,
NULL,
0,2,
};
@ -1805,6 +1828,7 @@ static MACHINE_CONFIG_START( captaven, deco32_state )
MCFG_PALETTE_LENGTH(2048)
MCFG_DECO16IC_ADD("deco_custom", captaven_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", captaven_deco16ic34_intf)
MCFG_DEVICE_ADD("spritegen", decospr_, 0)
decospr_device_config::set_gfx_region(device, 3);
@ -1855,6 +1879,7 @@ static MACHINE_CONFIG_START( fghthist, deco32_state )
MCFG_PALETTE_LENGTH(2048)
MCFG_DECO16IC_ADD("deco_custom", fghthist_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", fghthist_deco16ic34_intf)
MCFG_DEVICE_ADD("spritegen", decospr_, 0)
decospr_device_config::set_gfx_region(device, 3);
@ -1901,6 +1926,7 @@ static MACHINE_CONFIG_START( fghthsta, deco32_state )
MCFG_PALETTE_LENGTH(2048)
MCFG_DECO16IC_ADD("deco_custom", fghthist_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", fghthist_deco16ic34_intf)
MCFG_DEVICE_ADD("spritegen", decospr_, 0)
decospr_device_config::set_gfx_region(device, 3);
@ -1942,27 +1968,49 @@ static int dragngun_bank2_callback( int bank )
static const deco16ic_interface dragngun_deco16ic_intf =
{
"screen",
0, 0, 1, 1, // dragon gun definitely needs pf3/4 full width, bgs in 2nd attract demo.
0x0f, 0x0f, 0xff, 0xff, /* trans masks (default values) */
0x20, 0x30, 0x04, 0x04, /* color base */
0x0f, 0x0f, 0x03, 0x03, /* color masks (default values) */
0, 1, // dragon gun definitely needs pf3/4 full width, bgs in 2nd attract demo.
0x0f, 0x0f, /* trans masks (default values) */
0x20, 0x30, /* color base */
0x0f, 0x0f, /* color masks (default values) */
dragngun_bank_callback,
dragngun_bank_callback,
0,1,
};
static const deco16ic_interface dragngun_deco16ic34_intf =
{
"screen",
0, 1, // dragon gun definitely needs pf3/4 full width, bgs in 2nd attract demo.
0xff, 0xff, /* trans masks (default values) */
0x04, 0x04, /* color base */
0x03, 0x03, /* color masks (default values) */
dragngun_bank2_callback,
NULL
NULL,
0,2,
};
static const deco16ic_interface lockload_deco16ic_intf =
{
"screen",
0, 0, 1, 0, // lockload definitely wants pf34 half width..
0x0f, 0x0f, 0xff, 0xff, /* trans masks (default values) */
0x20, 0x30, 0x04, 0x04, /* color base */
0x0f, 0x0f, 0x03, 0x03, /* color masks (default values) */
0, 1, // lockload definitely wants pf34 half width..
0x0f, 0x0f, /* trans masks (default values) */
0x20, 0x30, /* color base */
0x0f, 0x0f, /* color masks (default values) */
dragngun_bank_callback,
dragngun_bank_callback,
0,1,
};
static const deco16ic_interface lockload_deco16ic34_intf =
{
"screen",
0, 0, // lockload definitely wants pf34 half width..
0xff, 0xff, /* trans masks (default values) */
0x04, 0x04, /* color base */
0x03, 0x03, /* color masks (default values) */
dragngun_bank2_callback,
NULL
NULL,
0,2,
};
static MACHINE_CONFIG_START( dragngun, dragngun_state )
@ -1992,6 +2040,7 @@ static MACHINE_CONFIG_START( dragngun, dragngun_state )
MCFG_SCREEN_EOF(dragngun)
MCFG_DECO16IC_ADD("deco_custom", dragngun_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", dragngun_deco16ic34_intf)
MCFG_GFXDECODE(dragngun)
MCFG_PALETTE_LENGTH(2048)
@ -2046,6 +2095,7 @@ static MACHINE_CONFIG_START( lockload, dragngun_state )
MCFG_SCREEN_EOF(dragngun)
MCFG_DECO16IC_ADD("deco_custom", lockload_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", lockload_deco16ic34_intf)
MCFG_GFXDECODE(dragngun)
MCFG_PALETTE_LENGTH(2048)
@ -2083,16 +2133,28 @@ static int tattass_bank_callback( int bank )
static const deco16ic_interface tattass_deco16ic_intf =
{
"screen",
0, 0, 1, 1,
0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */
0x00, 0x10, 0x20, 0x30, /* color base */
0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0x00, 0x10, /* color base */
0x0f, 0x0f, /* color masks (default values) */
tattass_bank_callback,
tattass_bank_callback,
tattass_bank_callback,
tattass_bank_callback
0,1,
};
static const deco16ic_interface tattass_deco16ic34_intf =
{
"screen",
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0x20, 0x30, /* color base */
0x0f, 0x0f, /* color masks (default values) */
tattass_bank_callback,
tattass_bank_callback,
0,2,
};
static MACHINE_CONFIG_START( tattass, deco32_state )
@ -2112,17 +2174,18 @@ static MACHINE_CONFIG_START( tattass, deco32_state )
MCFG_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
MCFG_SCREEN_SIZE(42*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1)
MCFG_SCREEN_UPDATE(nslasher)
MCFG_DECO16IC_ADD("deco_custom", tattass_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", tattass_deco16ic34_intf)
MCFG_DEVICE_ADD("spritegen1", decospr_, 0)
decospr_device_config::set_gfx_region(device, 3);
MCFG_DEVICE_ADD("spritegen2", decospr_, 0)
decospr_device_config::set_gfx_region(device, 4);
MCFG_GFXDECODE(tattass)
MCFG_PALETTE_LENGTH(2048)
@ -2161,6 +2224,7 @@ static MACHINE_CONFIG_START( nslasher, deco32_state )
MCFG_SCREEN_UPDATE(nslasher)
MCFG_DECO16IC_ADD("deco_custom", tattass_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", tattass_deco16ic34_intf)
MCFG_DEVICE_ADD("spritegen1", decospr_, 0)
decospr_device_config::set_gfx_region(device, 3);

View File

@ -18,7 +18,7 @@
static ADDRESS_MAP_START( dietgo_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x200000, 0x20000f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w)
AM_RANGE(0x200000, 0x20000f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w)
AM_RANGE(0x210000, 0x211fff) AM_DEVWRITE("deco_custom", deco16ic_pf1_data_w)
AM_RANGE(0x212000, 0x213fff) AM_DEVWRITE("deco_custom", deco16ic_pf2_data_w)
AM_RANGE(0x220000, 0x2207ff) AM_WRITEONLY AM_BASE_MEMBER(dietgo_state, pf1_rowscroll)
@ -180,14 +180,13 @@ static int dietgo_bank_callback(const int bank)
static const deco16ic_interface dietgo_deco16ic_intf =
{
"screen",
1, 0, 1, 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) */
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0, 16, /* color base (default values) */
0x0f, 0x0f, /* color masks (default values) */
dietgo_bank_callback,
dietgo_bank_callback,
NULL,
NULL
0,1,
};
@ -227,7 +226,7 @@ static MACHINE_CONFIG_START( dietgo, dietgo_state )
MCFG_DECO16IC_ADD("deco_custom", dietgo_deco16ic_intf)
MCFG_DEVICE_ADD("spritegen", decospr_, 0)
decospr_device_config::set_gfx_region(device, 2);
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")

View File

@ -108,7 +108,7 @@ 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_DEVWRITE("deco_custom", deco16ic_pf12_control_w)
AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w)
AM_RANGE(0x320000, 0x321fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x322000, 0x323fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x340000, 0x340bff) AM_RAM AM_BASE_MEMBER(funkyjet_state, pf1_rowscroll)
@ -289,11 +289,12 @@ static const ym2151_interface ym2151_config =
static const deco16ic_interface funkyjet_deco16ic_intf =
{
"screen",
1, 0, 1, 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
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0, 16, /* color base (default values) */
0x0f, 0x0f, /* color masks (default values) */
NULL, NULL,
0,1,
};
static MACHINE_START( funkyjet )

View File

@ -75,13 +75,13 @@ static VIDEO_START( mirage )
static SCREEN_UPDATE( mirage )
{
mirage_state *state = screen->machine->driver_data<mirage_state>();
UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff);
UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff);
flip_screen_set(screen->machine, BIT(flip, 7));
screen->machine->device<decospr_device>("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 0x400);
screen->machine->device<decospr_device>("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 0x400);
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
bitmap_fill(bitmap, cliprect, 256); /* not verified */
@ -150,7 +150,7 @@ static ADDRESS_MAP_START( mirage_map, ADDRESS_SPACE_PROGRAM, 16 )
// AM_RANGE(0x140006, 0x140007) AM_READ(random_readers)
// AM_RANGE(0x150006, 0x150007) AM_READNOP
AM_RANGE(0x160000, 0x160001) AM_WRITENOP
AM_RANGE(0x168000, 0x16800f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w)
AM_RANGE(0x168000, 0x16800f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w)
AM_RANGE(0x16a000, 0x16a001) AM_WRITENOP
AM_RANGE(0x16c000, 0x16c001) AM_WRITE(okim1_rombank_w)
AM_RANGE(0x16c002, 0x16c003) AM_WRITE(okim0_rombank_w)
@ -290,14 +290,13 @@ static int mirage_bank_callback( const int bank )
static const deco16ic_interface mirage_deco16ic_intf =
{
"screen",
1, 0, 1, 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) */
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0, 16, /* color base (default values) */
0x0f, 0x0f, /* color masks (default values) */
mirage_bank_callback,
mirage_bank_callback,
NULL,
NULL
0,1,
};

View File

@ -86,7 +86,7 @@ static ADDRESS_MAP_START( pktgaldx_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x150000, 0x15000f) AM_DEVWRITE8_MODERN("oki2", okim6295_device, write, 0x00ff)
AM_RANGE(0x150006, 0x150007) AM_DEVREAD8_MODERN("oki2", okim6295_device, read, 0x00ff)
AM_RANGE(0x161800, 0x16180f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w)
AM_RANGE(0x161800, 0x16180f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w)
AM_RANGE(0x164800, 0x164801) AM_DEVWRITE("oki2", pktgaldx_oki_bank_w)
AM_RANGE(0x167800, 0x167fff) AM_READWRITE(deco16_104_pktgaldx_prot_r,deco16_104_pktgaldx_prot_w) AM_BASE(&deco16_prot_ram)
AM_RANGE(0x170000, 0x17ffff) AM_RAM
@ -300,16 +300,17 @@ static int pktgaldx_bank_callback( const int bank )
static const deco16ic_interface pktgaldx_deco16ic_intf =
{
"screen",
1, 0, 1, 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) */
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0, 16, /* color base (default values) */
0x0f, 0x0f, /* color masks (default values) */
NULL,
pktgaldx_bank_callback,
NULL,
NULL
0,1,
};
static MACHINE_START( pktgaldx )
{
pktgaldx_state *state = machine->driver_data<pktgaldx_state>();

View File

@ -136,8 +136,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_DEVWRITE("deco_custom", deco16ic_pf12_control_w)
AM_RANGE(0x240000, 0x24000f) AM_DEVWRITE("deco_custom", deco16ic_pf34_control_w)
AM_RANGE(0x200000, 0x20000f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w)
AM_RANGE(0x240000, 0x24000f) AM_DEVWRITE("deco_custom34", deco16ic_pf_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 */
@ -152,8 +152,8 @@ static ADDRESS_MAP_START( rohga_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x3c0000, 0x3c1fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x3c2000, 0x3c2fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x3c4000, 0x3c4fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w)
AM_RANGE(0x3c6000, 0x3c6fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w)
AM_RANGE(0x3c4000, 0x3c4fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x3c6000, 0x3c6fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x3c8000, 0x3c8fff) AM_MIRROR(0x1000) AM_RAM AM_BASE_MEMBER(rohga_state, pf1_rowscroll)
AM_RANGE(0x3ca000, 0x3cafff) AM_MIRROR(0x1000) AM_RAM AM_BASE_MEMBER(rohga_state, pf2_rowscroll)
@ -170,15 +170,15 @@ static ADDRESS_MAP_START( wizdfire_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x200000, 0x200fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x202000, 0x202fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x208000, 0x208fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w)
AM_RANGE(0x20a000, 0x20afff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w)
AM_RANGE(0x208000, 0x208fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x20a000, 0x20afff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x20b000, 0x20b3ff) AM_WRITEONLY /* ? Always 0 written */
AM_RANGE(0x20c000, 0x20c7ff) AM_RAM AM_BASE_MEMBER(rohga_state, pf3_rowscroll)
AM_RANGE(0x20e000, 0x20e7ff) AM_RAM AM_BASE_MEMBER(rohga_state, pf4_rowscroll)
AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w)
AM_RANGE(0x310000, 0x31000f) AM_DEVWRITE("deco_custom", deco16ic_pf34_control_w)
AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w)
AM_RANGE(0x310000, 0x31000f) AM_DEVWRITE("deco_custom34", deco16ic_pf_control_w)
AM_RANGE(0x320000, 0x320001) AM_DEVWRITE("deco_custom", deco16ic_priority_w) /* Priority */
AM_RANGE(0x320002, 0x320003) AM_WRITENOP /* ? */
@ -201,16 +201,16 @@ static ADDRESS_MAP_START( nitrobal_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x200000, 0x200fff) AM_MIRROR(0x1000) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x202000, 0x2027ff) AM_MIRROR(0x800) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x208000, 0x2087ff) AM_MIRROR(0x800) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w)
AM_RANGE(0x20a000, 0x20a7ff) AM_MIRROR(0x800) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w)
AM_RANGE(0x208000, 0x2087ff) AM_MIRROR(0x800) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x20a000, 0x20a7ff) AM_MIRROR(0x800) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x204000, 0x2047ff) AM_RAM AM_BASE_MEMBER(rohga_state, pf1_rowscroll)
AM_RANGE(0x206000, 0x2067ff) AM_RAM AM_BASE_MEMBER(rohga_state, pf2_rowscroll)
AM_RANGE(0x20c000, 0x20c7ff) AM_RAM AM_BASE_MEMBER(rohga_state, pf3_rowscroll)
AM_RANGE(0x20e000, 0x20e7ff) AM_RAM AM_BASE_MEMBER(rohga_state, pf4_rowscroll)
AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w)
AM_RANGE(0x310000, 0x31000f) AM_DEVWRITE("deco_custom", deco16ic_pf34_control_w)
AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w)
AM_RANGE(0x310000, 0x31000f) AM_DEVWRITE("deco_custom34", deco16ic_pf_control_w)
AM_RANGE(0x320000, 0x320001) AM_READ_PORT("DSW3") AM_DEVWRITE("deco_custom", deco16ic_priority_w) /* Priority */
AM_RANGE(0x320002, 0x320003) AM_WRITENOP /* ? */
@ -231,8 +231,8 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( schmeisr_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x200000, 0x20000f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w)
AM_RANGE(0x240000, 0x24000f) AM_DEVWRITE("deco_custom", deco16ic_pf34_control_w)
AM_RANGE(0x200000, 0x20000f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w)
AM_RANGE(0x240000, 0x24000f) AM_DEVWRITE("deco_custom34", deco16ic_pf_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")
@ -246,8 +246,8 @@ static ADDRESS_MAP_START( schmeisr_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x3c0000, 0x3c1fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x3c2000, 0x3c2fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x3c4000, 0x3c4fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w)
AM_RANGE(0x3c6000, 0x3c6fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w)
AM_RANGE(0x3c4000, 0x3c4fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x3c6000, 0x3c6fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x3c8000, 0x3c8fff) AM_MIRROR(0x1000) AM_RAM AM_BASE_MEMBER(rohga_state, pf1_rowscroll)
AM_RANGE(0x3ca000, 0x3cafff) AM_MIRROR(0x1000) AM_RAM AM_BASE_MEMBER(rohga_state, pf2_rowscroll)
AM_RANGE(0x3cc000, 0x3ccfff) AM_MIRROR(0x1000) AM_RAM AM_BASE_MEMBER(rohga_state, pf3_rowscroll)
@ -749,27 +749,49 @@ static int rohga_bank_callback( const int bank )
static const deco16ic_interface rohga_deco16ic_intf =
{
"screen",
0, 0, 1, 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) */
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0, 16,/* color base (default values) */
0x0f, 0x0f, /* color masks (default values) */
rohga_bank_callback,
rohga_bank_callback,
0, 1,
};
static const deco16ic_interface rohga_deco16ic34_intf =
{
"screen",
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0, 16, /* color base (default values) */
0x0f, 0x0f, /* color masks (default values) */
rohga_bank_callback,
rohga_bank_callback
rohga_bank_callback,
0, 2,
};
static const deco16ic_interface nitrobal_deco16ic_intf =
{
"screen",
0, 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 */
0, 0,
0x0f, 0x0f, /* trans masks (default values) */
0, 16, /* color base (pf4 is not default) */
0x0f, 0x0f, /* color masks */
rohga_bank_callback,
rohga_bank_callback,
0, 1,
};
static const deco16ic_interface nitrobal_deco16ic34_intf =
{
"screen",
0, 0,
0x0f, 0x0f, /* trans masks (default values) */
0, 0, /* color base (pf4 is not default) */
0, 0, /* color masks */
rohga_bank_callback,
rohga_bank_callback
rohga_bank_callback,
0, 2,
};
static MACHINE_CONFIG_START( rohga, rohga_state )
@ -799,6 +821,7 @@ static MACHINE_CONFIG_START( rohga, rohga_state )
MCFG_VIDEO_START(rohga)
MCFG_DECO16IC_ADD("deco_custom", rohga_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", rohga_deco16ic34_intf)
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -842,6 +865,7 @@ static MACHINE_CONFIG_START( wizdfire, rohga_state )
MCFG_PALETTE_LENGTH(2048)
MCFG_DECO16IC_ADD("deco_custom", rohga_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", rohga_deco16ic34_intf)
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -885,6 +909,7 @@ static MACHINE_CONFIG_START( nitrobal, rohga_state )
MCFG_PALETTE_LENGTH(2048)
MCFG_DECO16IC_ADD("deco_custom", nitrobal_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", nitrobal_deco16ic34_intf)
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -930,6 +955,7 @@ static MACHINE_CONFIG_START( schmeisr, rohga_state )
MCFG_VIDEO_START(rohga)
MCFG_DECO16IC_ADD("deco_custom", rohga_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", rohga_deco16ic34_intf)
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")

View File

@ -251,10 +251,10 @@ static WRITE32_HANDLER( simpl156_pf2_rowscroll_w )
static ADDRESS_MAP_START( joemacr_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x100000, 0x107fff) AM_READWRITE(simpl156_mainram_r, simpl156_mainram_w) AM_BASE_MEMBER(simpl156_state, mainram) // main ram
AM_RANGE(0x110000, 0x111fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w)
AM_RANGE(0x110000, 0x111fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w)
AM_RANGE(0x120000, 0x120fff) AM_READWRITE(simpl156_palette_r, simpl156_palette_w)
AM_RANGE(0x130000, 0x130003) AM_READWRITE(simpl156_system_r, simpl156_eeprom_w)
AM_RANGE(0x140000, 0x14001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w)
AM_RANGE(0x140000, 0x14001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x150000, 0x151fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x152000, 0x153fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x154000, 0x155fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
@ -275,10 +275,10 @@ static ADDRESS_MAP_START( chainrec_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x201000, 0x201fff) AM_RAM AM_BASE_MEMBER(simpl156_state, systemram) // work ram (32-bit)
AM_RANGE(0x3c0000, 0x3c0003) AM_DEVREADWRITE8_MODERN("okimusic", okim6295_device, read, write, 0x000000ff)
AM_RANGE(0x400000, 0x407fff) AM_READWRITE(simpl156_mainram_r, simpl156_mainram_w) AM_BASE_MEMBER(simpl156_state, mainram) // main ram?
AM_RANGE(0x410000, 0x411fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w)
AM_RANGE(0x410000, 0x411fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w)
AM_RANGE(0x420000, 0x420fff) AM_READWRITE(simpl156_palette_r,simpl156_palette_w)
AM_RANGE(0x430000, 0x430003) AM_READWRITE(simpl156_system_r,simpl156_eeprom_w)
AM_RANGE(0x440000, 0x44001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w)
AM_RANGE(0x440000, 0x44001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x450000, 0x451fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x452000, 0x453fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x454000, 0x455fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
@ -296,10 +296,10 @@ static ADDRESS_MAP_START( magdrop_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x201000, 0x201fff) AM_RAM AM_BASE_MEMBER(simpl156_state, systemram) // work ram (32-bit)
AM_RANGE(0x340000, 0x340003) AM_DEVREADWRITE8_MODERN("okimusic", okim6295_device, read, write, 0x000000ff)
AM_RANGE(0x380000, 0x387fff) AM_READWRITE(simpl156_mainram_r, simpl156_mainram_w) AM_BASE_MEMBER(simpl156_state, mainram) // main ram?
AM_RANGE(0x390000, 0x391fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w)
AM_RANGE(0x390000, 0x391fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w)
AM_RANGE(0x3a0000, 0x3a0fff) AM_READWRITE(simpl156_palette_r,simpl156_palette_w)
AM_RANGE(0x3b0000, 0x3b0003) AM_READWRITE(simpl156_system_r,simpl156_eeprom_w)
AM_RANGE(0x3c0000, 0x3c001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w)
AM_RANGE(0x3c0000, 0x3c001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x3d0000, 0x3d1fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x3d2000, 0x3d3fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x3d4000, 0x3d5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
@ -317,10 +317,10 @@ static ADDRESS_MAP_START( magdropp_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x201000, 0x201fff) AM_RAM AM_BASE_MEMBER(simpl156_state, systemram) // work ram (32-bit)
AM_RANGE(0x4c0000, 0x4c0003) AM_DEVREADWRITE8_MODERN("okimusic", okim6295_device, read, write, 0x000000ff)
AM_RANGE(0x680000, 0x687fff) AM_READWRITE(simpl156_mainram_r, simpl156_mainram_w) AM_BASE_MEMBER(simpl156_state, mainram) // main ram?
AM_RANGE(0x690000, 0x691fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w)
AM_RANGE(0x690000, 0x691fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w)
AM_RANGE(0x6a0000, 0x6a0fff) AM_READWRITE(simpl156_palette_r,simpl156_palette_w)
AM_RANGE(0x6b0000, 0x6b0003) AM_READWRITE(simpl156_system_r,simpl156_eeprom_w)
AM_RANGE(0x6c0000, 0x6c001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w)
AM_RANGE(0x6c0000, 0x6c001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x6d0000, 0x6d1fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x6d2000, 0x6d3fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x6d4000, 0x6d5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
@ -337,10 +337,10 @@ static ADDRESS_MAP_START( mitchell156_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x100000, 0x100003) AM_DEVREADWRITE8_MODERN("okisfx", okim6295_device, read, write, 0x000000ff)
AM_RANGE(0x140000, 0x140003) AM_DEVREADWRITE8_MODERN("okimusic", okim6295_device, read, write, 0x000000ff)
AM_RANGE(0x180000, 0x187fff) AM_READWRITE(simpl156_mainram_r, simpl156_mainram_w) AM_BASE_MEMBER(simpl156_state, mainram) // main ram
AM_RANGE(0x190000, 0x191fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w)
AM_RANGE(0x190000, 0x191fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w)
AM_RANGE(0x1a0000, 0x1a0fff) AM_READWRITE(simpl156_palette_r,simpl156_palette_w)
AM_RANGE(0x1b0000, 0x1b0003) AM_READWRITE(simpl156_system_r,simpl156_eeprom_w)
AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf12_control_dword_r, deco16ic_pf12_control_dword_w)
AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_dword_r, deco16ic_pf_control_dword_w)
AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x1d2000, 0x1d3fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_dword_r, deco16ic_pf1_data_dword_w)
AM_RANGE(0x1d4000, 0x1d5fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_dword_r, deco16ic_pf2_data_dword_w)
@ -407,14 +407,13 @@ static int simpl156_bank_callback(const int bank)
static const deco16ic_interface simpl156_deco16ic_intf =
{
"screen",
1, 0, 1, 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) */
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0, 16,/* color base (default values) */
0x0f, 0x0f, /* color masks (default values) */
simpl156_bank_callback,
simpl156_bank_callback,
NULL,
NULL
0,1,
};
UINT16 simpl156_pri_callback(UINT16 x)

View File

@ -69,7 +69,7 @@ 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_DEVREADWRITE("deco_custom", deco16ic_pf12_control_r, deco16ic_pf12_control_w)
AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_r, deco16ic_pf_control_w)
AM_RANGE(0x320000, 0x321fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x322000, 0x323fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x340000, 0x3407ff) AM_RAM AM_BASE_MEMBER(supbtime_state, pf1_rowscroll)
@ -84,7 +84,7 @@ 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_DEVREADWRITE("deco_custom", deco16ic_pf12_control_r, deco16ic_pf12_control_w)
AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("deco_custom", deco16ic_pf_control_r, deco16ic_pf_control_w)
AM_RANGE(0x320000, 0x321fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x322000, 0x323fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x340000, 0x3407ff) AM_RAM AM_BASE_MEMBER(supbtime_state, pf1_rowscroll) // unused
@ -323,11 +323,12 @@ static const ym2151_interface ym2151_config =
static const deco16ic_interface supbtime_deco16ic_intf =
{
"screen",
1, 0, 1, 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
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0, 16, /* color base (default values) */
0x0f, 0x0f, /* color masks (default values) */
NULL, NULL,
0,1
};
static MACHINE_START( supbtime )

View File

@ -119,7 +119,7 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x180000, 0x18000f) AM_READ(tumblepop_controls_r)
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", deco16ic_pf12_control_w)
AM_RANGE(0x300000, 0x30000f) AM_DEVWRITE("deco_custom", deco16ic_pf_control_w)
AM_RANGE(0x320000, 0x320fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x322000, 0x322fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x340000, 0x3407ff) AM_WRITEONLY AM_BASE_MEMBER(tumblep_state, pf1_rowscroll) // unused
@ -288,11 +288,12 @@ static const ym2151_interface ym2151_config =
static const deco16ic_interface tumblep_deco16ic_intf =
{
"screen",
1, 0, 1, 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
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0, 16, /* color base (default values) */
0x0f, 0x0f, /* color masks (default values) */
NULL, NULL,
0,1
};
static MACHINE_START( tumblep )

View File

@ -52,12 +52,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_DEVREADWRITE("deco_custom", deco16ic_pf3_data_r, deco16ic_pf3_data_w)
AM_RANGE(0x202000, 0x203fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf4_data_r, deco16ic_pf4_data_w)
AM_RANGE(0x240000, 0x24000f) AM_DEVWRITE("deco_custom", deco16ic_pf34_control_w)
AM_RANGE(0x200000, 0x201fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x202000, 0x203fff) AM_DEVREADWRITE("deco_custom34", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x240000, 0x24000f) AM_DEVWRITE("deco_custom34", deco16ic_pf_control_w)
AM_RANGE(0x280000, 0x281fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf1_data_r, deco16ic_pf1_data_w)
AM_RANGE(0x282000, 0x283fff) AM_DEVREADWRITE("deco_custom", deco16ic_pf2_data_r, deco16ic_pf2_data_w)
AM_RANGE(0x2c0000, 0x2c000f) AM_DEVWRITE("deco_custom", deco16ic_pf12_control_w)
AM_RANGE(0x2c0000, 0x2c000f) AM_DEVWRITE("deco_custom", deco16ic_pf_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
@ -193,6 +193,7 @@ static const gfx_layout tilelayout =
static GFXDECODE_START( vaportra )
GFXDECODE_ENTRY( "gfx1", 0x000000, charlayout, 0x000, 0x500 ) /* Characters 8x8 */
GFXDECODE_ENTRY( "gfx1", 0x000000, tilelayout, 0x000, 0x500 ) /* Tiles 16x16 */
GFXDECODE_ENTRY( "gfx2", 0x000000, charlayout, 0x000, 0x500 ) /* Characters 8x8 */
GFXDECODE_ENTRY( "gfx2", 0x000000, tilelayout, 0x000, 0x500 ) /* Tiles 16x16 */ // ok
GFXDECODE_ENTRY( "gfx3", 0x000000, tilelayout, 0x100, 16 ) /* Sprites 16x16 */
GFXDECODE_END
@ -219,17 +220,28 @@ static int vaportra_bank_callback( const int bank )
static const deco16ic_interface vaportra_deco16ic_intf =
{
"screen",
0, 0, 1, 1,
0x0f, 0x0f, 0x0f, 0x0f, /* trans masks (default values) */
0x00, 0x20, 0x30, 0x40, /* color base */
0x0f, 0x0f, 0x0f, 0x0f, /* color masks (default values) */
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0x00, 0x20, /* color base */
0x0f, 0x0f, /* color masks (default values) */
vaportra_bank_callback,
vaportra_bank_callback,
vaportra_bank_callback,
vaportra_bank_callback
0,1
};
static const deco16ic_interface vaportra_deco16ic34_intf =
{
"screen",
0, 1,
0x0f, 0x0f, /* trans masks (default values) */
0x30, 0x40, /* color base */
0x0f, 0x0f, /* color masks (default values) */
vaportra_bank_callback,
vaportra_bank_callback,
2,3
};
static MACHINE_START( vaportra )
{
vaportra_state *state = machine->driver_data<vaportra_state>();
@ -237,6 +249,7 @@ static MACHINE_START( vaportra )
state->maincpu = machine->device("maincpu");
state->audiocpu = machine->device("audiocpu");
state->deco16ic = machine->device("deco_custom");
state->deco16ic34 = machine->device("deco_custom34");
state->save_item(NAME(state->priority));
}
@ -278,6 +291,8 @@ static MACHINE_CONFIG_START( vaportra, vaportra_state )
MCFG_DECO16IC_ADD("deco_custom", vaportra_deco16ic_intf)
MCFG_DECO16IC_ADD("deco_custom34", vaportra_deco16ic34_intf)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")

View File

@ -15,6 +15,7 @@ public:
maincpu(*this, "maincpu"),
audiocpu(*this, "audiocpu"),
deco16ic(*this, "deco_custom"),
deco16ic34(*this, "deco_custom34"),
oki1(*this, "oki1"),
oki2(*this, "oki2") { }
@ -28,6 +29,7 @@ public:
required_device<cpu_device> maincpu;
required_device<cpu_device> audiocpu;
required_device<deco16ic_device> deco16ic;
required_device<deco16ic_device> deco16ic34;
required_device<okim6295_device> oki1;
required_device<okim6295_device> oki2;
};

View File

@ -27,6 +27,7 @@ public:
device_t *maincpu;
device_t *audiocpu;
device_t *deco16ic;
device_t *deco16ic34;
};

View File

@ -15,6 +15,7 @@ public:
maincpu(*this, "maincpu"),
audiocpu(*this, "audiocpu"),
deco16ic(*this, "deco_custom"),
deco16ic34(*this, "deco_custom34"),
raster_irq_timer(*this, "raster_timer"),
oki2(*this, "oki2") { }
@ -32,6 +33,7 @@ public:
required_device<cpu_device> maincpu;
required_device<cpu_device> audiocpu;
required_device<deco16ic_device> deco16ic;
required_device<deco16ic_device> deco16ic34;
optional_device<timer_device> raster_irq_timer;
optional_device<okim6295_device> oki2;
};

View File

@ -16,6 +16,7 @@ public:
audiocpu(*this, "audiocpu"),
subcpu(*this, "sub"),
deco16ic(*this, "deco_custom"),
deco16ic34(*this, "deco_custom34"),
oki2(*this, "oki2") { }
/* memory pointers */
@ -30,6 +31,7 @@ public:
required_device<cpu_device> audiocpu;
required_device<cpu_device> subcpu;
required_device<deco16ic_device> deco16ic;
required_device<deco16ic_device> deco16ic34;
required_device<okim6295_device> oki2;
};

View File

@ -22,7 +22,7 @@ public:
int ace_ram_dirty;
int has_ace_ram;
UINT32 *ace_ram;
UINT8 *dirty_palette;
int pri;
@ -42,8 +42,9 @@ public:
UINT32 *pf2_rowscroll32;
UINT32 *pf3_rowscroll32;
UINT32 *pf4_rowscroll32;
device_t *deco16ic;
device_t *deco16ic34;
};
class dragngun_state : public deco32_state

View File

@ -15,6 +15,7 @@ public:
maincpu(*this, "maincpu"),
audiocpu(*this, "audiocpu"),
deco16ic(*this, "deco_custom"),
deco16ic34(*this, "deco_custom34"),
oki1(*this, "oki1"),
oki2(*this, "oki2") { }
@ -29,6 +30,7 @@ public:
required_device<cpu_device> maincpu;
required_device<cpu_device> audiocpu;
required_device<deco16ic_device> deco16ic;
required_device<deco16ic_device> deco16ic34;
required_device<okim6295_device> oki1;
required_device<okim6295_device> oki2;
};

View File

@ -23,6 +23,7 @@ public:
device_t *maincpu;
device_t *audiocpu;
device_t *deco16ic;
device_t *deco16ic34;
};

View File

@ -140,12 +140,12 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rect
SCREEN_UPDATE( boogwing )
{
boogwing_state *state = screen->machine->driver_data<boogwing_state>();
UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff);
UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff);
UINT16 priority = deco16ic_priority_r(state->deco16ic, 0, 0xffff);
flip_screen_set(screen->machine, BIT(flip, 7));
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll);
/* Draw playfields */
deco16ic_clear_sprite_priority_bitmap(state->deco16ic);
@ -157,17 +157,17 @@ SCREEN_UPDATE( boogwing )
if ((priority & 0x7) == 0x5)
{
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_34_combine_draw(state->deco16ic, bitmap, cliprect, 0, 32);
deco16ic_tilemap_12_combine_draw(state->deco16ic34, bitmap, cliprect, 0, 32);
}
else if ((priority & 0x7) == 0x1 || (priority & 0x7) == 0x2)
{
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 8);
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 32);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 32);
}
else if ((priority & 0x7) == 0x3)
{
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 8);
// This mode uses playfield 3 to shadow sprites & playfield 2 (instead of
@ -176,8 +176,8 @@ SCREEN_UPDATE( boogwing )
}
else
{
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 8);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 8);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 32);
}

View File

@ -50,29 +50,29 @@ VIDEO_START( twocrude )
SCREEN_UPDATE( twocrude )
{
cbuster_state *state = screen->machine->driver_data<cbuster_state>();
UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff);
UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff);
flip_screen_set(screen->machine, !BIT(flip, 7));
screen->machine->device<decospr_device>("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_buffer, 0x400);
screen->machine->device<decospr_device>("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_buffer, 0x400);
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll);
/* Draw playfields & sprites */
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
screen->machine->device<decospr_device>("spritegen")->inefficient_copy_sprite_bitmap(screen->machine, bitmap, cliprect, 0x0800, 0x0900, 0x100, 0x0ff);
screen->machine->device<decospr_device>("spritegen")->inefficient_copy_sprite_bitmap(screen->machine, bitmap, cliprect, 0x0900, 0x0900, 0x500, 0x0ff);
if (state->pri)
{
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 0);
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 0);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 0);
}
else
{
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 0);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 0);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 0);
}

View File

@ -126,17 +126,17 @@ static void cninjabl_draw_sprites( running_machine *machine, bitmap_t *bitmap, c
SCREEN_UPDATE( cninja )
{
cninja_state *state = screen->machine->driver_data<cninja_state>();
UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff);
UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff);
flip_screen_set(screen->machine, BIT(flip, 7));
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll);
/* Draw playfields */
bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
bitmap_fill(bitmap, cliprect, 512);
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 2);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 2);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_LAYER0, 4);
screen->machine->device<decospr_device>("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 0x400);
@ -147,17 +147,17 @@ SCREEN_UPDATE( cninja )
SCREEN_UPDATE( cninjabl )
{
cninja_state *state = screen->machine->driver_data<cninja_state>();
UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff);
UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff);
flip_screen_set(screen->machine, BIT(flip, 7));
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll);
/* Draw playfields */
bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
bitmap_fill(bitmap, cliprect, 512);
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 2);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 2);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_LAYER0, 4);
cninjabl_draw_sprites(screen->machine, bitmap, cliprect);
@ -168,16 +168,16 @@ SCREEN_UPDATE( cninjabl )
SCREEN_UPDATE( edrandy )
{
cninja_state *state = screen->machine->driver_data<cninja_state>();
UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff);
UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff);
flip_screen_set(screen->machine, BIT(flip, 7));
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll);
bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
bitmap_fill(bitmap, cliprect, 0);
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 2);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 4);
screen->machine->device<decospr_device>("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 0x400);
deco16ic_tilemap_1_draw(state->deco16ic, bitmap, cliprect, 0, 0);
@ -187,7 +187,7 @@ SCREEN_UPDATE( edrandy )
SCREEN_UPDATE( robocop2 )
{
cninja_state *state = screen->machine->driver_data<cninja_state>();
UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff);
UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff);
UINT16 priority = deco16ic_priority_r(state->deco16ic, 0, 0xffff);
/* One of the tilemap chips can switch between 2 tilemaps at 4bpp, or 1 at 8bpp */
@ -195,37 +195,37 @@ SCREEN_UPDATE( robocop2 )
{
deco16ic_set_tilemap_colour_mask(state->deco16ic, 2, 0);
deco16ic_set_tilemap_colour_mask(state->deco16ic, 3, 0);
deco16ic_pf34_set_gfxbank(state->deco16ic, 0, 4);
deco16ic_pf12_set_gfxbank(state->deco16ic34, 0, 4);
}
else
{
deco16ic_set_tilemap_colour_mask(state->deco16ic, 2, 0xf);
deco16ic_set_tilemap_colour_mask(state->deco16ic, 3, 0xf);
deco16ic_pf34_set_gfxbank(state->deco16ic, 0, 2);
deco16ic_pf12_set_gfxbank(state->deco16ic34, 0, 2);
}
/* Update playfields */
flip_screen_set(screen->machine, BIT(flip, 7));
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll);
/* Draw playfields */
bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
bitmap_fill(bitmap, cliprect, 0x200);
if ((priority & 4) == 0)
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
/* Switchable priority */
switch (priority & 0x8)
{
case 8:
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 2);
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 4);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 4);
break;
default:
case 0:
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 2);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 4);
break;
}
@ -244,13 +244,13 @@ VIDEO_START( mutantf )
SCREEN_UPDATE( mutantf )
{
cninja_state *state = screen->machine->driver_data<cninja_state>();
UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff);
UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff);
UINT16 priority = deco16ic_priority_r(state->deco16ic, 0, 0xffff);
flip_screen_set(screen->machine, BIT(flip, 7));
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll);
/* Draw playfields */
bitmap_fill(bitmap, cliprect, 0x400); /* Confirmed */
@ -272,10 +272,10 @@ SCREEN_UPDATE( mutantf )
The other bits may control alpha blend on the 2nd sprite chip, or
layer order.
*/
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 0);
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 0);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 0);
if (priority & 1)
{

View File

@ -175,34 +175,34 @@ static void draw_sprites( running_machine* machine, bitmap_t *bitmap, const rect
SCREEN_UPDATE( dassault )
{
dassault_state *state = screen->machine->driver_data<dassault_state>();
UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff);
UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff);
UINT16 priority = deco16ic_priority_r(state->deco16ic, 0, 0xffff);
/* Update tilemaps */
flip_screen_set(screen->machine, BIT(flip, 7));
deco16ic_pf12_update(state->deco16ic, 0, state->pf2_rowscroll);
deco16ic_pf34_update(state->deco16ic, 0, state->pf4_rowscroll);
deco16ic_pf_update(state->deco16ic, 0, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic34, 0, state->pf4_rowscroll);
/* Draw playfields/update priority bitmap */
deco16ic_clear_sprite_priority_bitmap(state->deco16ic);
bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
bitmap_fill(bitmap, cliprect, screen->machine->pens[3072]);
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
/* The middle playfields can be swapped priority-wise */
if ((priority & 3) == 0)
{
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 2);
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 16);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 16);
}
else if ((priority & 3) == 1)
{
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 2);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 64);
}
else if ((priority & 3) == 3)
{
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 2);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 16);
}
else

View File

@ -140,8 +140,8 @@ Rowscroll style:
2010-02: Converted to be a device.
TODO:
- properly support PCBs with two ICs (i.e. no pf3/pf4 because they actually belong to a 2nd chip)
- move here emulation of the sprite chips (currently replicated in each driver)?
- convert to c++ device
- splite tilemap emulation from other emulation
***************************************************************************/
@ -149,7 +149,6 @@ Rowscroll style:
#include "video/deco16ic.h"
#include "ui.h"
/* Note, each device should have 2 tilemaps, not 4.. games with 4 chips use 2 devices.. this should be fixed here! */
typedef struct _deco16ic_state deco16ic_state;
struct _deco16ic_state
@ -157,35 +156,33 @@ struct _deco16ic_state
screen_device *screen;
UINT16 *pf1_data, *pf2_data;
UINT16 *pf3_data, *pf4_data;
UINT16 *pf12_control, *pf34_control;
UINT16 *pf12_control;
UINT16 *raster_display_list;
UINT8 *dirty_palette;
const UINT16 *pf1_rowscroll_ptr, *pf2_rowscroll_ptr;
const UINT16 *pf3_rowscroll_ptr, *pf4_rowscroll_ptr;
tilemap_t *pf1_tilemap_16x16, *pf2_tilemap_16x16, *pf3_tilemap_16x16, *pf4_tilemap_16x16 ;
tilemap_t *pf1_tilemap_16x16, *pf2_tilemap_16x16;
tilemap_t *pf1_tilemap_8x8, *pf2_tilemap_8x8;
bitmap_t *sprite_priority_bitmap;
deco16_bank_cb bank_cb[4];
deco16_bank_cb bank_cb[2];
UINT16 priority;
int raster_display_position;
int use_custom_pf1, use_custom_pf2, use_custom_pf3, use_custom_pf4;
int use_custom_pf1, use_custom_pf2;
int pf1_bank, pf2_bank, pf3_bank, pf4_bank;
int pf12_16x16_gfx_bank, pf34_16x16_gfx_bank, pf12_8x8_gfx_bank;
int pf1_colourmask, pf2_colourmask, pf3_colourmask, pf4_colourmask;
int pf1_colour_bank, pf2_colour_bank, pf3_colour_bank, pf4_colour_bank;
int pf1_trans_mask, pf2_trans_mask, pf3_trans_mask, pf4_trans_mask;
int pf1_bank, pf2_bank;
int pf12_16x16_gfx_bank, pf12_8x8_gfx_bank;
int pf1_colourmask, pf2_colourmask;
int pf1_colour_bank, pf2_colour_bank;
int pf1_trans_mask, pf2_trans_mask;
int pf12_last_small, pf12_last_big, pf34_last_big;
int pf12_last_small, pf12_last_big;
int pf3_8bpp_mode;
int pf1_8bpp_mode;
};
/*****************************************************************************
@ -287,76 +284,6 @@ static TILEMAP_MAPPER( deco16_scan_rows )
return (col & 0x1f) + ((row & 0x1f) << 5) + ((col & 0x20) << 5) + ((row & 0x20) << 6);
}
static TILE_GET_INFO_DEVICE( get_pf4_tile_info )
{
deco16ic_state *deco16ic = get_safe_token(device);
UINT16 tile = deco16ic->pf4_data[tile_index];
UINT8 colour = (tile >> 12) & 0xf;
UINT8 flags = 0;
if (tile & 0x8000)
{
if ((deco16ic->pf34_control[6] >> 8) & 0x01)
{
flags |= TILE_FLIPX;
colour &= 0x7;
}
if ((deco16ic->pf34_control[6] >> 8) & 0x02)
{
flags|=TILE_FLIPY;
colour &= 0x7;
}
}
SET_TILE_INFO_DEVICE(
deco16ic->pf34_16x16_gfx_bank,
(tile & 0xfff) | deco16ic->pf4_bank,
(colour & deco16ic->pf4_colourmask) + deco16ic->pf4_colour_bank,
flags);
}
static TILE_GET_INFO_DEVICE( get_pf3_tile_info )
{
deco16ic_state *deco16ic = get_safe_token(device);
UINT16 tile = deco16ic->pf3_data[tile_index];
UINT8 colour = (tile >> 12) & 0xf;
UINT8 flags = 0;
if (tile & 0x8000)
{
if ((deco16ic->pf34_control[6] >> 0) & 0x01)
{
flags |= TILE_FLIPX;
colour &= 0x7;
}
if ((deco16ic->pf34_control[6] >> 0) & 0x02)
{
flags |= TILE_FLIPY;
colour &= 0x7;
}
}
if (deco16ic->pf3_8bpp_mode)
{
// Captain America operates this chip in 8bpp mode.
// In 8bpp mode you appear to only get 1 layer, not 2, but you also
// have an extra 2 tile bits, and 2 less colour bits.
SET_TILE_INFO_DEVICE(
deco16ic->pf34_16x16_gfx_bank,
(tile & 0x3fff) | deco16ic->pf3_bank,
((colour & deco16ic->pf3_colourmask) + deco16ic->pf3_colour_bank)>>2,
flags);
}
else
{
SET_TILE_INFO_DEVICE(
deco16ic->pf34_16x16_gfx_bank,
(tile & 0xfff) | deco16ic->pf3_bank,
((colour & deco16ic->pf3_colourmask) + deco16ic->pf3_colour_bank),
flags);
}
}
static TILE_GET_INFO_DEVICE( get_pf2_tile_info )
{
deco16ic_state *deco16ic = get_safe_token(device);
@ -406,11 +333,25 @@ static TILE_GET_INFO_DEVICE( get_pf1_tile_info )
}
}
SET_TILE_INFO_DEVICE(
deco16ic->pf12_16x16_gfx_bank,
(tile & 0xfff) | deco16ic->pf1_bank,
(colour & deco16ic->pf1_colourmask) + deco16ic->pf1_colour_bank,
flags);
if (deco16ic->pf1_8bpp_mode)
{
// Captain America operates this chip in 8bpp mode.
// In 8bpp mode you appear to only get 1 layer, not 2, but you also
// have an extra 2 tile bits, and 2 less colour bits.
SET_TILE_INFO_DEVICE(
deco16ic->pf12_16x16_gfx_bank,
(tile & 0x3fff) | deco16ic->pf1_bank,
((colour & deco16ic->pf1_colourmask) + deco16ic->pf1_colour_bank)>>2,
flags);
}
else
{
SET_TILE_INFO_DEVICE(
deco16ic->pf12_16x16_gfx_bank,
(tile & 0xfff) | deco16ic->pf1_bank,
(colour & deco16ic->pf1_colourmask) + deco16ic->pf1_colour_bank,
flags);
}
}
static TILE_GET_INFO_DEVICE( get_pf2_tile_info_b )
@ -523,7 +464,7 @@ static void custom_tilemap_draw(
width_mask = src_bitmap0->width - 1;
height_mask = src_bitmap0->height - 1;
src_y = scrolly + starty;
for (y = starty; y < endy; y++)
{
@ -547,7 +488,7 @@ static void custom_tilemap_draw(
if (src_bitmap1)
{
p |= (*BITMAP_ADDR16(src_bitmap1, (src_y + column_offset) & height_mask, src_x) & combine_mask) << combine_shift;
p |= (*BITMAP_ADDR16(src_bitmap1, (src_y + column_offset) & height_mask, src_x) & combine_mask) << combine_shift;
}
src_x = (src_x + 1) & width_mask;
@ -586,7 +527,7 @@ static void custom_tilemap_draw(
{
UINT16 p2 = *BITMAP_ADDR16(src_bitmap1, (src_y + column_offset) & height_mask, src_x);
p = 0x200+( ((p&0x30)<<4) | (p&0x0f) | ((p2 & 0x0f)<<4));
}
}
}
src_x = (src_x + 1) & width_mask;
@ -608,10 +549,10 @@ static void custom_tilemap_draw(
/******************************************************************************/
/* captain america seems to have a similar 8bpp feature to robocop2, investigate merging */
void deco16ic_set_pf3_8bpp_mode(device_t *device, int mode)
void deco16ic_set_pf1_8bpp_mode(device_t *device, int mode)
{
deco16ic_state *deco16ic = get_safe_token(device);
deco16ic->pf3_8bpp_mode = mode;
deco16ic->pf1_8bpp_mode = mode;
}
/* robocop 2 can switch between 2 tilemaps at 4bpp, or 1 at 8bpp */
@ -623,25 +564,34 @@ void deco16ic_set_tilemap_colour_mask( device_t *device, int tmap, int mask )
{
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;
}
}
void deco16ic_pf34_set_gfxbank( device_t *device, int small, int big )
void deco16ic_pf12_set_gfxbank( device_t *device, int small, int big )
{
deco16ic_state *deco16ic = get_safe_token(device);
if (deco16ic->pf34_last_big != big)
if (deco16ic->pf12_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);
if (deco16ic->pf1_tilemap_16x16)
tilemap_mark_all_tiles_dirty(deco16ic->pf1_tilemap_16x16);
if (deco16ic->pf2_tilemap_16x16)
tilemap_mark_all_tiles_dirty(deco16ic->pf2_tilemap_16x16);
deco16ic->pf34_last_big = big;
deco16ic->pf12_last_big = big;
}
deco16ic->pf34_16x16_gfx_bank = big;
deco16ic->pf12_16x16_gfx_bank = big;
if (deco16ic->pf12_last_small != small)
{
if (deco16ic->pf1_tilemap_8x8)
tilemap_mark_all_tiles_dirty(deco16ic->pf1_tilemap_8x8);
if (deco16ic->pf2_tilemap_8x8)
tilemap_mark_all_tiles_dirty(deco16ic->pf2_tilemap_8x8);
deco16ic->pf12_last_small = small;
}
deco16ic->pf12_8x8_gfx_bank = small;
}
/* stoneage has broken scroll registers */
@ -663,14 +613,6 @@ void deco16ic_set_scrolldx( device_t *device, int tmap, int size, int dx, int dx
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;
}
}
@ -698,22 +640,6 @@ WRITE16_DEVICE_HANDLER( deco16ic_pf2_data_w )
tilemap_mark_tile_dirty(deco16ic->pf2_tilemap_16x16, offset);
}
WRITE16_DEVICE_HANDLER( deco16ic_pf3_data_w )
{
deco16ic_state *deco16ic = get_safe_token(device);
COMBINE_DATA(&deco16ic->pf3_data[offset]);
tilemap_mark_tile_dirty(deco16ic->pf3_tilemap_16x16, offset);
}
WRITE16_DEVICE_HANDLER( deco16ic_pf4_data_w )
{
deco16ic_state *deco16ic = get_safe_token(device);
COMBINE_DATA(&deco16ic->pf4_data[offset]);
tilemap_mark_tile_dirty(deco16ic->pf4_tilemap_16x16, offset);
}
READ16_DEVICE_HANDLER( deco16ic_pf1_data_r )
{
deco16ic_state *deco16ic = get_safe_token(device);
@ -726,67 +652,31 @@ READ16_DEVICE_HANDLER( deco16ic_pf2_data_r )
return deco16ic->pf2_data[offset];
}
READ16_DEVICE_HANDLER( deco16ic_pf3_data_r )
{
deco16ic_state *deco16ic = get_safe_token(device);
return deco16ic->pf3_data[offset];
}
READ16_DEVICE_HANDLER( deco16ic_pf4_data_r )
{
deco16ic_state *deco16ic = get_safe_token(device);
return deco16ic->pf4_data[offset];
}
WRITE16_DEVICE_HANDLER( deco16ic_pf12_control_w )
WRITE16_DEVICE_HANDLER( deco16ic_pf_control_w )
{
deco16ic_state *deco16ic = get_safe_token(device);
COMBINE_DATA(&deco16ic->pf12_control[offset]);
device->machine->primary_screen->update_partial(device->machine->primary_screen->vpos());
}
WRITE16_DEVICE_HANDLER( deco16ic_pf34_control_w )
{
deco16ic_state *deco16ic = get_safe_token(device);
COMBINE_DATA(&deco16ic->pf34_control[offset]);
device->machine->primary_screen->update_partial(device->machine->primary_screen->vpos());
}
READ16_DEVICE_HANDLER( deco16ic_pf12_control_r )
READ16_DEVICE_HANDLER( deco16ic_pf_control_r )
{
deco16ic_state *deco16ic = get_safe_token(device);
return deco16ic->pf12_control[offset];
}
READ16_DEVICE_HANDLER( deco16ic_pf34_control_r )
READ32_DEVICE_HANDLER ( deco16ic_pf_control_dword_r )
{
deco16ic_state *deco16ic = get_safe_token(device);
return deco16ic->pf34_control[offset];
return deco16ic_pf_control_r(device, offset, 0xffff)^0xffff0000;
}
READ32_DEVICE_HANDLER ( deco16ic_pf12_control_dword_r )
WRITE32_DEVICE_HANDLER( deco16ic_pf_control_dword_w )
{
return deco16ic_pf12_control_r(device, offset, 0xffff)^0xffff0000;
deco16ic_pf_control_w(device, offset, data & 0xffff, mem_mask & 0xffff);
}
WRITE32_DEVICE_HANDLER( deco16ic_pf12_control_dword_w )
{
deco16ic_pf12_control_w(device, offset, data & 0xffff, mem_mask & 0xffff);
}
READ32_DEVICE_HANDLER ( deco16ic_pf34_control_dword_r )
{
return deco16ic_pf34_control_r(device, offset, 0xffff)^0xffff0000;
}
WRITE32_DEVICE_HANDLER( deco16ic_pf34_control_dword_w )
{
deco16ic_pf34_control_w(device, offset, data & 0xffff, mem_mask & 0xffff);
}
READ32_DEVICE_HANDLER( deco16ic_pf1_data_dword_r )
{
return deco16ic_pf1_data_r(device, offset, 0xffff)^0xffff0000;
@ -807,25 +697,6 @@ WRITE32_DEVICE_HANDLER( deco16ic_pf2_data_dword_w )
deco16ic_pf2_data_w(device, offset, data & 0xffff, mem_mask & 0xffff);
}
READ32_DEVICE_HANDLER( deco16ic_pf3_data_dword_r )
{
return deco16ic_pf3_data_r(device, offset, 0xffff)^0xffff0000;
}
WRITE32_DEVICE_HANDLER( deco16ic_pf3_data_dword_w )
{
deco16ic_pf3_data_w(device, offset, data & 0xffff, mem_mask & 0xffff);
}
READ32_DEVICE_HANDLER( deco16ic_pf4_data_dword_r )
{
return deco16ic_pf4_data_r(device, offset, 0xffff)^0xffff0000;
}
WRITE32_DEVICE_HANDLER( deco16ic_pf4_data_dword_w )
{
deco16ic_pf4_data_w(device, offset, data & 0xffff, mem_mask & 0xffff);
}
/*****************************************************************************************/
@ -844,9 +715,6 @@ static int deco16_pf_update(
/* Toggle between 8x8 and 16x16 modes (and master enable bit) */
if (BIT(control1, 7))
{
if (!tilemap_8x8)
popmessage("Deco16: Playfield switched into 8x8 mode but no tilemap defined");
if (tilemap_8x8)
tilemap_set_enable(tilemap_8x8, BIT(control0, 7));
@ -856,9 +724,6 @@ static int deco16_pf_update(
}
else
{
if (!tilemap_16x16)
popmessage("Deco16: Playfield switched into 16x16 mode but no tilemap defined");
if (tilemap_8x8)
tilemap_set_enable(tilemap_8x8, 0);
@ -986,7 +851,7 @@ static int deco16_pf_update(
return use_custom;
}
void deco16ic_pf12_update( device_t *device, const UINT16 *rowscroll_1_ptr, const UINT16 *rowscroll_2_ptr )
void deco16ic_pf_update( device_t *device, const UINT16 *rowscroll_1_ptr, const UINT16 *rowscroll_2_ptr )
{
deco16ic_state *deco16ic = get_safe_token(device);
int bank1, bank2;
@ -1029,43 +894,6 @@ void deco16ic_pf12_update( device_t *device, const UINT16 *rowscroll_1_ptr, cons
}
}
void deco16ic_pf34_update( device_t *device, const UINT16 *rowscroll_1_ptr, const UINT16 *rowscroll_2_ptr )
{
deco16ic_state *deco16ic = get_safe_token(device);
int bank1, bank2;
/* Update scrolling and tilemap enable */
deco16ic->pf3_rowscroll_ptr = rowscroll_1_ptr;
deco16ic->pf4_rowscroll_ptr = rowscroll_2_ptr;
deco16ic->use_custom_pf4 = deco16_pf_update(0, deco16ic->pf4_tilemap_16x16, rowscroll_2_ptr, deco16ic->pf34_control[3], deco16ic->pf34_control[4], deco16ic->pf34_control[5] >> 8, deco16ic->pf34_control[6] >> 8);
deco16ic->use_custom_pf3 = deco16_pf_update(0, deco16ic->pf3_tilemap_16x16, rowscroll_1_ptr, deco16ic->pf34_control[1], deco16ic->pf34_control[2], deco16ic->pf34_control[5] & 0xff, deco16ic->pf34_control[6] & 0xff);
/* Update banking and global flip state */
if (deco16ic->bank_cb[2])
{
bank1 = deco16ic->bank_cb[2](deco16ic->pf34_control[7] & 0xff);
if (bank1 != deco16ic->pf3_bank)
{
if (deco16ic->pf3_tilemap_16x16)
tilemap_mark_all_tiles_dirty(deco16ic->pf3_tilemap_16x16);
deco16ic->pf3_bank = bank1;
}
}
if (deco16ic->bank_cb[3])
{
bank2 = deco16ic->bank_cb[3](deco16ic->pf34_control[7] >> 8);
if (bank2 != deco16ic->pf4_bank)
{
if (deco16ic->pf4_tilemap_16x16)
tilemap_mark_all_tiles_dirty(deco16ic->pf4_tilemap_16x16);
deco16ic->pf4_bank = bank2;
}
}
}
/*****************************************************************************************/
void deco16ic_print_debug_info(device_t *device, bitmap_t *bitmap)
@ -1084,16 +912,6 @@ void deco16ic_print_debug_info(device_t *device, bitmap_t *bitmap)
else
sprintf(buf, "\n\n");
if (deco16ic->pf34_control)
{
sprintf(&buf[strlen(buf)],"%04X %04X %04X %04X\n", deco16ic->pf34_control[0], deco16ic->pf34_control[1], deco16ic->pf34_control[2], deco16ic->pf34_control[3]);
sprintf(&buf[strlen(buf)],"%04X %04X %04X %04X\n", deco16ic->pf34_control[4], deco16ic->pf34_control[5], deco16ic->pf34_control[6], deco16ic->pf34_control[7]);
}
else
sprintf(&buf[strlen(buf)], "\n\n");
sprintf(&buf[strlen(buf)],"%04X", deco16ic->priority);
ui_draw_text(&device->machine->render().ui_container(), buf, 60, 40);
}
@ -1213,33 +1031,14 @@ void deco16ic_tilemap_2_draw(device_t *device, bitmap_t *bitmap, const rectangle
}
}
void deco16ic_tilemap_3_draw(device_t *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority)
{
deco16ic_state *deco16ic = get_safe_token(device);
if (deco16ic->use_custom_pf3)
custom_tilemap_draw(device, bitmap, cliprect, 0, deco16ic->pf3_tilemap_16x16, 0, 0, deco16ic->pf3_rowscroll_ptr, deco16ic->pf34_control[1], deco16ic->pf34_control[2], deco16ic->pf34_control[5] & 0xff, deco16ic->pf34_control[6] & 0xff, 0, 0, deco16ic->pf3_trans_mask, flags, priority, 0);
else if (deco16ic->pf3_tilemap_16x16)
tilemap_draw(bitmap, cliprect, deco16ic->pf3_tilemap_16x16, flags, priority);
}
void deco16ic_tilemap_4_draw(device_t *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority)
{
deco16ic_state *deco16ic = get_safe_token(device);
if (deco16ic->use_custom_pf4)
custom_tilemap_draw(device, bitmap, cliprect, 0, deco16ic->pf4_tilemap_16x16, 0, 0, deco16ic->pf4_rowscroll_ptr, deco16ic->pf34_control[3], deco16ic->pf34_control[4], deco16ic->pf34_control[5] >> 8, deco16ic->pf34_control[6] >> 8, 0, 0, deco16ic->pf4_trans_mask, flags, priority, 0);
else if (deco16ic->pf4_tilemap_16x16)
tilemap_draw(bitmap, cliprect, deco16ic->pf4_tilemap_16x16, flags, priority);
}
/*****************************************************************************************/
// Combines the output of two 4BPP tilemaps into an 8BPP tilemap
void deco16ic_tilemap_34_combine_draw(device_t *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority, int is_tattoo)
void deco16ic_tilemap_12_combine_draw(device_t *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority, int is_tattoo)
{
deco16ic_state *deco16ic = get_safe_token(device);
custom_tilemap_draw(device, bitmap, cliprect, 0, deco16ic->pf3_tilemap_16x16, 0, deco16ic->pf4_tilemap_16x16, deco16ic->pf3_rowscroll_ptr, deco16ic->pf34_control[1], deco16ic->pf34_control[2], deco16ic->pf34_control[5] & 0xff, deco16ic->pf34_control[6] & 0xff, 0xf, 4, 0xff, flags, priority, is_tattoo);
custom_tilemap_draw(device, bitmap, cliprect, 0, deco16ic->pf1_tilemap_16x16, 0, deco16ic->pf2_tilemap_16x16, deco16ic->pf1_rowscroll_ptr, deco16ic->pf12_control[1], deco16ic->pf12_control[2], deco16ic->pf12_control[5] & 0xff, deco16ic->pf12_control[6] & 0xff, 0xf, 4, 0xff, flags, priority, is_tattoo);
}
@ -1261,26 +1060,23 @@ static DEVICE_START( deco16ic )
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);
deco16ic->pf1_tilemap_16x16 = tilemap_create_device(device, get_pf1_tile_info, deco16_scan_rows, 16, 16, intf->full_width12 ? 64 : 32, 32);
// deco16ic->pf1_tilemap_8x8 = tilemap_create_device(device, get_pf1_tile_info_b, tilemap_scan_rows, 8, 8, intf->full_width12 ? 64 : 32, 32);
deco16ic->pf1_tilemap_8x8 = tilemap_create_device(device, get_pf1_tile_info_b, tilemap_scan_rows, 8, 8, 64 , 32);
deco16ic->pf12_8x8_gfx_bank = intf->_8x8_gfxregion;
deco16ic->pf12_16x16_gfx_bank = intf->_16x16_gfxregion;
if (intf->split)
deco16ic->pf2_tilemap_16x16 = tilemap_create_device(device, get_pf2_tile_info, deco16_scan_rows, 16, 16, intf->full_width12 ? 64 : 32, 32);
@ -1289,17 +1085,6 @@ static DEVICE_START( deco16ic )
deco16ic->pf2_tilemap_8x8 = tilemap_create_device(device, get_pf2_tile_info_b, tilemap_scan_rows, 8, 8, intf->full_width12 ? 64 : 32, 32);
if (!intf->pf12_only)
{
deco16ic->pf4_tilemap_16x16 = tilemap_create_device(device, get_pf4_tile_info, deco16_scan_rows, 16, 16, intf->full_width34 ? 64 : 32, 32);
deco16ic->pf3_tilemap_16x16 = tilemap_create_device(device, get_pf3_tile_info, deco16_scan_rows, 16, 16, intf->full_width34 ? 64 : 32, 32);
}
else
{
deco16ic->pf3_tilemap_16x16 = 0;
deco16ic->pf4_tilemap_16x16 = 0;
}
tilemap_set_transparent_pen(deco16ic->pf1_tilemap_8x8, 0);
tilemap_set_transparent_pen(deco16ic->pf2_tilemap_8x8, 0);
tilemap_set_transparent_pen(deco16ic->pf1_tilemap_16x16, 0);
@ -1308,73 +1093,53 @@ static DEVICE_START( deco16ic )
if (intf->split) /* Caveman Ninja only */
tilemap_set_transmask(deco16ic->pf2_tilemap_16x16, 0, 0x00ff, 0xff01);
if (!intf->pf12_only)
{
tilemap_set_transparent_pen(deco16ic->pf3_tilemap_16x16, 0);
tilemap_set_transparent_pen(deco16ic->pf4_tilemap_16x16, 0);
}
deco16ic->pf3_8bpp_mode = 0;
deco16ic->pf1_8bpp_mode = 0;
deco16ic->dirty_palette = auto_alloc_array_clear(device->machine, UINT8, 4096);
deco16ic->raster_display_list = auto_alloc_array_clear(device->machine, UINT16, 20 * 256 / 2);
deco16ic->pf1_data = auto_alloc_array_clear(device->machine, UINT16, 0x2000 / 2);
deco16ic->pf2_data = auto_alloc_array_clear(device->machine, UINT16, 0x2000 / 2);
deco16ic->pf3_data = auto_alloc_array_clear(device->machine, UINT16, 0x2000 / 2);
deco16ic->pf4_data = auto_alloc_array_clear(device->machine, UINT16, 0x2000 / 2);
deco16ic->pf12_control = auto_alloc_array_clear(device->machine, UINT16, 0x10 / 2);
deco16ic->pf34_control = auto_alloc_array_clear(device->machine, UINT16, 0x10 / 2);
device->save_item(NAME(deco16ic->priority));
device->save_item(NAME(deco16ic->raster_display_position));
device->save_item(NAME(deco16ic->use_custom_pf1));
device->save_item(NAME(deco16ic->use_custom_pf2));
device->save_item(NAME(deco16ic->use_custom_pf3));
device->save_item(NAME(deco16ic->use_custom_pf4));
device->save_item(NAME(deco16ic->pf1_bank));
device->save_item(NAME(deco16ic->pf2_bank));
device->save_item(NAME(deco16ic->pf3_bank));
device->save_item(NAME(deco16ic->pf4_bank));
device->save_item(NAME(deco16ic->pf12_8x8_gfx_bank));
device->save_item(NAME(deco16ic->pf12_16x16_gfx_bank));
device->save_item(NAME(deco16ic->pf34_16x16_gfx_bank));
device->save_item(NAME(deco16ic->pf12_last_small));
device->save_item(NAME(deco16ic->pf12_last_big));
device->save_item(NAME(deco16ic->pf34_last_big));
device->save_item(NAME(deco16ic->pf3_8bpp_mode));
device->save_item(NAME(deco16ic->pf1_8bpp_mode));
device->save_pointer(NAME(deco16ic->dirty_palette), 4096);
device->save_pointer(NAME(deco16ic->raster_display_list), 20 * 256 / 2);
device->save_pointer(NAME(deco16ic->pf1_data), 0x2000 / 2);
device->save_pointer(NAME(deco16ic->pf2_data), 0x2000 / 2);
device->save_pointer(NAME(deco16ic->pf3_data), 0x2000 / 2);
device->save_pointer(NAME(deco16ic->pf4_data), 0x2000 / 2);
device->save_pointer(NAME(deco16ic->pf12_control), 0x10 / 2);
device->save_pointer(NAME(deco16ic->pf34_control), 0x10 / 2);
}
static DEVICE_RESET( deco16ic )
{
deco16ic_state *deco16ic = get_safe_token(device);
deco16ic->pf1_bank = deco16ic->pf2_bank = deco16ic->pf3_bank = deco16ic->pf4_bank = 0;
deco16ic->pf1_bank = deco16ic->pf2_bank = 0;
deco16ic->pf12_8x8_gfx_bank = 0;
deco16ic->pf12_16x16_gfx_bank = 1;
deco16ic->pf34_16x16_gfx_bank = 2;
deco16ic->raster_display_position = 0;
deco16ic->pf12_last_small = deco16ic->pf12_last_big = deco16ic->pf34_last_big = -1;
deco16ic->pf12_last_small = deco16ic->pf12_last_big = -1;
deco16ic->priority = 0;
deco16ic->use_custom_pf1 = deco16ic->use_custom_pf2 = deco16ic->use_custom_pf3 = deco16ic->use_custom_pf4 = 0;
deco16ic->use_custom_pf1 = deco16ic->use_custom_pf2 = 0;
deco16ic->pf1_rowscroll_ptr = 0;
deco16ic->pf2_rowscroll_ptr = 0;
deco16ic->pf3_rowscroll_ptr = 0;
deco16ic->pf4_rowscroll_ptr = 0;
}

View File

@ -24,15 +24,14 @@ typedef struct _deco16ic_interface deco16ic_interface;
struct _deco16ic_interface
{
const char *screen;
int pf12_only;
int split;
int full_width12;
int full_width34;
int trans_mask1, trans_mask2, trans_mask3, trans_mask4;
int col_base1, col_base2, col_base3, col_base4;
int col_mask1, col_mask2, col_mask3, col_mask4;
deco16_bank_cb bank_cb0, bank_cb1, bank_cb2, bank_cb3;
int trans_mask1, trans_mask2;
int col_base1, col_base2;
int col_mask1, col_mask2;
deco16_bank_cb bank_cb0, bank_cb1;
int _8x8_gfxregion, _16x16_gfxregion;
};
DECLARE_LEGACY_DEVICE(DECO16IC, deco16ic);
@ -52,37 +51,26 @@ DECLARE_LEGACY_DEVICE(DECO16IC, deco16ic);
WRITE16_DEVICE_HANDLER( deco16ic_pf1_data_w );
WRITE16_DEVICE_HANDLER( deco16ic_pf2_data_w );
WRITE16_DEVICE_HANDLER( deco16ic_pf3_data_w );
WRITE16_DEVICE_HANDLER( deco16ic_pf4_data_w );
READ16_DEVICE_HANDLER( deco16ic_pf1_data_r );
READ16_DEVICE_HANDLER( deco16ic_pf2_data_r );
READ16_DEVICE_HANDLER( deco16ic_pf3_data_r );
READ16_DEVICE_HANDLER( deco16ic_pf4_data_r );
WRITE16_DEVICE_HANDLER( deco16ic_pf12_control_w );
WRITE16_DEVICE_HANDLER( deco16ic_pf34_control_w );
READ16_DEVICE_HANDLER( deco16ic_pf12_control_r );
READ16_DEVICE_HANDLER( deco16ic_pf34_control_r );
WRITE16_DEVICE_HANDLER( deco16ic_pf_control_w );
READ16_DEVICE_HANDLER( deco16ic_pf_control_r );
WRITE32_DEVICE_HANDLER( deco16ic_pf1_data_dword_w );
WRITE32_DEVICE_HANDLER( deco16ic_pf2_data_dword_w );
WRITE32_DEVICE_HANDLER( deco16ic_pf3_data_dword_w );
WRITE32_DEVICE_HANDLER( deco16ic_pf4_data_dword_w );
READ32_DEVICE_HANDLER( deco16ic_pf1_data_dword_r );
READ32_DEVICE_HANDLER( deco16ic_pf2_data_dword_r );
READ32_DEVICE_HANDLER( deco16ic_pf3_data_dword_r );
READ32_DEVICE_HANDLER( deco16ic_pf4_data_dword_r );
WRITE32_DEVICE_HANDLER( deco16ic_pf12_control_dword_w );
WRITE32_DEVICE_HANDLER( deco16ic_pf34_control_dword_w );
READ32_DEVICE_HANDLER( deco16ic_pf12_control_dword_r );
READ32_DEVICE_HANDLER( deco16ic_pf34_control_dword_r );
WRITE32_DEVICE_HANDLER( deco16ic_pf_control_dword_w );
READ32_DEVICE_HANDLER( deco16ic_pf_control_dword_r );
WRITE16_DEVICE_HANDLER( deco16ic_nonbuffered_palette_w );
WRITE16_DEVICE_HANDLER( deco16ic_buffered_palette_w );
@ -95,17 +83,13 @@ READ16_DEVICE_HANDLER( deco16ic_71_r );
void deco16ic_print_debug_info(device_t *device, bitmap_t *bitmap);
void deco16ic_pf12_update(device_t *device, const UINT16 *rowscroll_1_ptr, const UINT16 *rowscroll_2_ptr);
void deco16ic_pf34_update(device_t *device, const UINT16 *rowscroll_1_ptr, const UINT16 *rowscroll_2_ptr);
void deco16ic_pf_update(device_t *device, const UINT16 *rowscroll_1_ptr, const UINT16 *rowscroll_2_ptr);
void deco16ic_tilemap_1_draw(device_t *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority);
void deco16ic_tilemap_2_draw(device_t *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority);
void deco16ic_tilemap_3_draw(device_t *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority);
void deco16ic_tilemap_4_draw(device_t *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority);
/* used by boogwing, nitrobal */
void deco16ic_tilemap_34_combine_draw(device_t *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority, int is_tattoo = false);
void deco16ic_tilemap_12_combine_draw(device_t *device, bitmap_t *bitmap, const rectangle *cliprect, int flags, UINT32 priority, int is_tattoo = false);
/* used by boogwing, dassault, nitrobal */
void deco16ic_clear_sprite_priority_bitmap(device_t *device);
@ -117,10 +101,10 @@ void deco16ic_pdrawgfx(
/* used by robocop2 */
void deco16ic_set_tilemap_colour_mask(device_t *device, int tmap, int mask);
void deco16ic_pf34_set_gfxbank(device_t *device, int small, int big);
void deco16ic_pf12_set_gfxbank(device_t *device, int small, int big);
/* used by captaven */
void deco16ic_set_pf3_8bpp_mode(device_t *device, int mode);
void deco16ic_set_pf1_8bpp_mode(device_t *device, int mode);
/* used by stoneage */
void deco16ic_set_scrolldx(device_t *device, int tmap, int size, int dx, int dx_if_flipped);

View File

@ -548,7 +548,7 @@ VIDEO_START( dragngun )
{
dragngun_state *state = machine->driver_data<dragngun_state>();
state->dirty_palette = auto_alloc_array(machine, UINT8, 4096);
memset(state->dirty_palette,0,4096);
state_save_register_global(machine, state->dragngun_sprite_ctrl);
@ -590,7 +590,7 @@ SCREEN_EOF( captaven )
SCREEN_EOF( dragngun )
{
}
@ -600,34 +600,35 @@ SCREEN_UPDATE( captaven )
{
deco32_state *state = screen->machine->driver_data<deco32_state>();
state->deco16ic = screen->machine->device("deco_custom");
state->deco16ic34 = screen->machine->device("deco_custom34");
tilemap_set_flip_all(screen->machine,flip_screen_get(screen->machine) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
bitmap_fill(screen->machine->priority_bitmap,cliprect,0);
bitmap_fill(bitmap,cliprect,screen->machine->pens[0x000]); // Palette index not confirmed
deco16ic_set_pf3_8bpp_mode(state->deco16ic, 1);
deco16ic_set_pf1_8bpp_mode(state->deco16ic34, 1);
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll);
// pf4 not used (because pf3 is in 8bpp mode)
if ((state->pri&1)==0)
{
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 1);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 1);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 2);
}
else
{
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 1);
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 2);
}
deco16ic_tilemap_1_draw(state->deco16ic, bitmap, cliprect, 0, 4);
screen->machine->device<decospr_device>("spritegen")->set_alt_format(true);
screen->machine->device<decospr_device>("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_buffered, 0x400);
screen->machine->device<decospr_device>("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_buffered, 0x400);
return 0;
}
@ -636,22 +637,23 @@ SCREEN_UPDATE( dragngun )
{
deco32_state *state = screen->machine->driver_data<deco32_state>();
state->deco16ic = screen->machine->device("deco_custom");
state->deco16ic34 = screen->machine->device("deco_custom34");
bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine));
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll);
//deco16ic_set_pf3_8bpp_mode(state->deco16ic, 1); // despite being 8bpp this doesn't require the same shifting as captaven, why not?
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, 0, 0); // it uses pf3 in 8bpp mode instead, like captaven
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 0);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, 0, 0); // it uses pf3 in 8bpp mode instead, like captaven
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 0);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 0);
// zooming sprite draw is very slow, and sprites are buffered.. however, one of the levels attempts to use
// partial updates for every line, which causes things to be very slow... the sprites appear to support
// multiple layers of alpha, so rendering to a buffer for layer isn't easy (maybe there are multiple sprite
// chips at work?)
// chips at work?)
//
// really, it needs optimizing .. the raster effects also need fixing properly, they're not correct using
// partial updates right now but the old buffering of scroll values was a hack and doesn't work properly
@ -679,27 +681,28 @@ SCREEN_UPDATE( fghthist )
{
deco32_state *state = screen->machine->driver_data<deco32_state>();
state->deco16ic = screen->machine->device("deco_custom");
state->deco16ic34 = screen->machine->device("deco_custom34");
bitmap_fill(screen->machine->priority_bitmap,cliprect,0);
bitmap_fill(bitmap,cliprect,screen->machine->pens[0x000]); // Palette index not confirmed
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll);
screen->machine->device<decospr_device>("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_buffered, 0x800, true);
screen->machine->device<decospr_device>("spritegen")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_buffered, 0x800, true);
/* Draw screen */
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, 0, 1);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, 0, 1);
if(state->pri&1)
{
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 2);
screen->machine->device<decospr_device>("spritegen")->inefficient_copy_sprite_bitmap(screen->machine, bitmap, cliprect, 0x0800, 0x0800, 1024, 0x1ff);
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 4);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 4);
}
else
{
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 2);
screen->machine->device<decospr_device>("spritegen")->inefficient_copy_sprite_bitmap(screen->machine, bitmap, cliprect, 0x0800, 0x0800, 1024, 0x1ff);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 4);
}
@ -730,7 +733,7 @@ static void mixDualAlphaSprites(bitmap_t *bitmap, const rectangle *cliprect, con
bitmap_t* sprite0_mix_bitmap = machine->device<decospr_device>("spritegen1")->get_sprite_temp_bitmap();
bitmap_t* sprite1_mix_bitmap = machine->device<decospr_device>("spritegen2")->get_sprite_temp_bitmap();
/* Mix sprites into main bitmap, based on priority & alpha */
for (y=8; y<248; y++) {
UINT8* tilemapPri=BITMAP_ADDR8(machine->priority_bitmap, y, 0);
@ -856,9 +859,10 @@ SCREEN_UPDATE( nslasher )
deco32_state *state = screen->machine->driver_data<deco32_state>();
int alphaTilemap=0;
state->deco16ic = screen->machine->device("deco_custom");
state->deco16ic34 = screen->machine->device("deco_custom34");
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll);
/* This is not a conclusive test for deciding if tilemap needs alpha blending */
if (state->ace_ram[0x17]!=0x0 && state->pri)
@ -875,33 +879,33 @@ SCREEN_UPDATE( nslasher )
screen->machine->device<decospr_device>("spritegen1")->set_pix_raw_shift(8);
screen->machine->device<decospr_device>("spritegen2")->set_pix_raw_shift(8);
screen->machine->device<decospr_device>("spritegen1")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_buffered, 0x800, true);
screen->machine->device<decospr_device>("spritegen2")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_2_buffered, 0x800, true);
screen->machine->device<decospr_device>("spritegen1")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_buffered, 0x800, true);
screen->machine->device<decospr_device>("spritegen2")->draw_sprites(screen->machine, bitmap, cliprect, state->spriteram16_2_buffered, 0x800, true);
/* Render alpha-blended tilemap to seperate buffer for proper mixing */
bitmap_fill(state->tilemap_alpha_bitmap,cliprect,0);
/* Draw playfields & sprites */
if (state->pri&2)
{
deco16ic_tilemap_34_combine_draw(state->deco16ic, bitmap, cliprect, 0, 1, 1);
deco16ic_tilemap_12_combine_draw(state->deco16ic34, bitmap, cliprect, 0, 1, 1);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 4);
}
else
{
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, 0, 1);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, 0, 1);
if (state->pri&1)
{
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 2);
if (alphaTilemap)
deco16ic_tilemap_3_draw(state->deco16ic, state->tilemap_alpha_bitmap, cliprect, 0, 4);
deco16ic_tilemap_1_draw(state->deco16ic34, state->tilemap_alpha_bitmap, cliprect, 0, 4);
else
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 4);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 4);
}
else
{
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 2);
if (alphaTilemap)
deco16ic_tilemap_2_draw(state->deco16ic, state->tilemap_alpha_bitmap, cliprect, 0, 4);
else

View File

@ -6,10 +6,10 @@
SCREEN_UPDATE( dietgo )
{
dietgo_state *state = screen->machine->driver_data<dietgo_state>();
UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff);
UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff);
flip_screen_set(screen->machine, BIT(flip, 7));
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
bitmap_fill(bitmap, cliprect, 256); /* not verified */

View File

@ -14,10 +14,10 @@
SCREEN_UPDATE( funkyjet )
{
funkyjet_state *state = screen->machine->driver_data<funkyjet_state>();
UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff);
UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff);
flip_screen_set(screen->machine, BIT(flip, 7));
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
bitmap_fill(bitmap, cliprect, 768);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);

View File

@ -8,10 +8,10 @@
SCREEN_UPDATE( pktgaldx )
{
pktgaldx_state *state = screen->machine->driver_data<pktgaldx_state>();
UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff);
UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff);
flip_screen_set(screen->machine, BIT(flip, 7));
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
bitmap_fill(bitmap, cliprect, 0); /* not Confirmed */
bitmap_fill(screen->machine->priority_bitmap, NULL, 0);

View File

@ -422,13 +422,13 @@ sprite 2:
static void update_rohga( device_t *screen, bitmap_t *bitmap, const rectangle *cliprect, int is_schmeisr )
{
rohga_state *state = screen->machine->driver_data<rohga_state>();
UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff);
UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff);
UINT16 priority = deco16ic_priority_r(state->deco16ic, 0, 0xffff);
/* Update playfields */
flip_screen_set(screen->machine, BIT(flip, 7));
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll);
/* Draw playfields */
bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
@ -440,25 +440,25 @@ static void update_rohga( device_t *screen, bitmap_t *bitmap, const rectangle *c
if (priority & 4)
{
// Draw as 1 8BPP layer
deco16ic_tilemap_34_combine_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 3);
deco16ic_tilemap_12_combine_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 3);
}
else
{
// Draw as 2 4BPP layers
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 2);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 2);
}
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 4);
break;
case 1:
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 2);
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 4);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 4);
break;
case 2:
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 1);
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, 0, 2);
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 4);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, 0, 2);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 4);
break;
}
@ -483,26 +483,26 @@ SCREEN_UPDATE( schmeisr )
SCREEN_UPDATE( wizdfire )
{
rohga_state *state = screen->machine->driver_data<rohga_state>();
UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff);
UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff);
UINT16 priority = deco16ic_priority_r(state->deco16ic, 0, 0xffff);
/* Update playfields */
flip_screen_set(screen->machine, BIT(flip, 7));
deco16ic_pf12_update(state->deco16ic, 0, 0);
deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll);
deco16ic_pf_update(state->deco16ic, 0, 0);
deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll);
/* Draw playfields - Palette of 2nd playfield chip visible if playfields turned off */
bitmap_fill(bitmap, cliprect, screen->machine->pens[512]);
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
wizdfire_draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 4, 3);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 0);
wizdfire_draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 3, 3);
if ((priority & 0x1f) == 0x1f) /* Wizdfire has bit 0x40 always set, Dark Seal 2 doesn't?! */
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_ALPHA(0x80), 0);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_ALPHA(0x80), 0);
else
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 0);
deco16ic_tilemap_1_draw(state->deco16ic34, 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);
@ -516,12 +516,12 @@ SCREEN_UPDATE( wizdfire )
SCREEN_UPDATE( nitrobal )
{
rohga_state *state = screen->machine->driver_data<rohga_state>();
UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff);
UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff);
/* Update playfields */
flip_screen_set(screen->machine, BIT(flip, 7));
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf34_update(state->deco16ic, state->pf3_rowscroll, state->pf4_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic34, state->pf3_rowscroll, state->pf4_rowscroll);
/* Draw playfields - Palette of 2nd playfield chip visible if playfields turned off */
bitmap_fill(bitmap, cliprect, screen->machine->pens[512]);
@ -529,7 +529,7 @@ SCREEN_UPDATE( nitrobal )
deco16ic_clear_sprite_priority_bitmap(state->deco16ic);
/* pf3 and pf4 are combined into a single 8bpp bitmap */
deco16ic_tilemap_34_combine_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_12_combine_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 16);
nitrobal_draw_sprites(screen->machine, bitmap, cliprect, screen->machine->generic.buffered_spriteram.u16, 3);

View File

@ -31,7 +31,7 @@ SCREEN_UPDATE( simpl156 )
bitmap_fill(screen->machine->priority_bitmap, NULL, 0);
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
bitmap_fill(bitmap, cliprect, 256);

View File

@ -24,10 +24,10 @@ End sequence uses rowscroll '98 c0' on pf1 (jmp to 1d61a on supbtimj)
SCREEN_UPDATE(supbtime)
{
supbtime_state *state = screen->machine->driver_data<supbtime_state>();
UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff);
UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff);
flip_screen_set(screen->machine, BIT(flip, 7));
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
bitmap_fill(bitmap, cliprect, 768);

View File

@ -22,10 +22,10 @@ to switch between 8*8 tiles and 16*16 tiles.
SCREEN_UPDATE( tumblep )
{
tumblep_state *state = screen->machine->driver_data<tumblep_state>();
UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff);
UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff);
flip_screen_set(screen->machine, BIT(flip, 7));
deco16ic_pf12_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
deco16ic_pf_update(state->deco16ic, state->pf1_rowscroll, state->pf2_rowscroll);
bitmap_fill(bitmap, cliprect, 256); /* not verified */

View File

@ -110,7 +110,7 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rect
while (multi >= 0)
{
drawgfx_transpen(bitmap,cliprect,machine->gfx[3],
drawgfx_transpen(bitmap,cliprect,machine->gfx[4],
sprite - multi * inc,
colour,
fx,fy,
@ -125,41 +125,41 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rect
SCREEN_UPDATE( vaportra )
{
vaportra_state *state = screen->machine->driver_data<vaportra_state>();
UINT16 flip = deco16ic_pf12_control_r(state->deco16ic, 0, 0xffff);
UINT16 flip = deco16ic_pf_control_r(state->deco16ic, 0, 0xffff);
int pri = state->priority[0] & 0x03;
flip_screen_set(screen->machine, !BIT(flip, 7));
deco16ic_pf12_update(state->deco16ic, 0, 0);
deco16ic_pf34_update(state->deco16ic, 0, 0);
deco16ic_pf_update(state->deco16ic, 0, 0);
deco16ic_pf_update(state->deco16ic34, 0, 0);
/* Draw playfields */
if (pri == 0)
{
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 0);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 0);
draw_sprites(screen->machine, bitmap, cliprect, 0);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 0);
}
else if (pri == 1)
{
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, 0, 0);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, 0, 0);
draw_sprites(screen->machine, bitmap, cliprect, 0);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 0);
}
else if (pri == 2)
{
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 0);
draw_sprites(screen->machine, bitmap, cliprect, 0);
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, 0, 0);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, 0, 0);
}
else
{
deco16ic_tilemap_3_draw(state->deco16ic, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_1_draw(state->deco16ic34, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
deco16ic_tilemap_2_draw(state->deco16ic, bitmap, cliprect, 0, 0);
draw_sprites(screen->machine, bitmap, cliprect, 0);
deco16ic_tilemap_4_draw(state->deco16ic, bitmap, cliprect, 0, 0);
deco16ic_tilemap_2_draw(state->deco16ic34, bitmap, cliprect, 0, 0);
}
draw_sprites(screen->machine, bitmap, cliprect, 1);