mirror of
https://github.com/holub/mame
synced 2025-05-20 20:58:51 +03:00
Kaneko sprites are now a device. This should facilitate cleaning up video related files as well (sprites and tilemaps). [David Haywood]
Cleanup and notes for maygayep.c - From Haze (nw)
This commit is contained in:
parent
8d8f2056a3
commit
57c5cd82e9
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -4788,6 +4788,8 @@ src/mame/video/kan_panb.h svneol=native#text/plain
|
||||
src/mame/video/kan_pand.c svneol=native#text/plain
|
||||
src/mame/video/kan_pand.h svneol=native#text/plain
|
||||
src/mame/video/kaneko16.c svneol=native#text/plain
|
||||
src/mame/video/kaneko_spr.c svneol=native#text/plain
|
||||
src/mame/video/kaneko_spr.h svneol=native#text/plain
|
||||
src/mame/video/kaneko_tmap.c svneol=native#text/plain
|
||||
src/mame/video/kaneko_tmap.h svneol=native#text/plain
|
||||
src/mame/video/kangaroo.c svneol=native#text/plain
|
||||
|
@ -359,7 +359,7 @@ static ADDRESS_MAP_START( galsnew_map, AS_PROGRAM, 16, expro02_state )
|
||||
|
||||
AM_RANGE(0x700000, 0x700fff) AM_RAM AM_SHARE("spriteram") // sprites? 0x72f words tested
|
||||
|
||||
AM_RANGE(0x780000, 0x78001f) AM_RAM_WRITE(kaneko16_sprites_regs_w) AM_SHARE("sprites_regs") // sprite regs? tileregs?
|
||||
AM_RANGE(0x780000, 0x78001f) AM_DEVREADWRITE("kan_spr", kaneko16_sprite_device, kaneko16_sprites_regs_r, kaneko16_sprites_regs_w)
|
||||
|
||||
AM_RANGE(0x800000, 0x800001) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0x800002, 0x800003) AM_READ_PORT("DSW2")
|
||||
@ -389,7 +389,7 @@ static ADDRESS_MAP_START( fantasia_map, AS_PROGRAM, 16, expro02_state )
|
||||
AM_RANGE(0x600000, 0x600fff) AM_RAM_WRITE(galsnew_paletteram_w) AM_SHARE("paletteram") // palette?
|
||||
AM_RANGE(0x680000, 0x68001f) AM_DEVREADWRITE("view2_0", kaneko_view2_tilemap_device, kaneko_tmap_regs_r, kaneko_tmap_regs_w)
|
||||
AM_RANGE(0x700000, 0x700fff) AM_RAM AM_SHARE("spriteram") // sprites? 0x72f words tested
|
||||
AM_RANGE(0x780000, 0x78001f) AM_RAM_WRITE(kaneko16_sprites_regs_w) AM_SHARE("sprites_regs") // sprite regs? tileregs?
|
||||
AM_RANGE(0x780000, 0x78001f) AM_DEVREADWRITE("kan_spr", kaneko16_sprite_device, kaneko16_sprites_regs_r, kaneko16_sprites_regs_w)
|
||||
AM_RANGE(0x800000, 0x800001) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0x800002, 0x800003) AM_READ_PORT("DSW2")
|
||||
AM_RANGE(0x800004, 0x800005) AM_READ_PORT("DSW3")
|
||||
@ -423,17 +423,7 @@ static TIMER_DEVICE_CALLBACK( expro02_scanline )
|
||||
|
||||
static MACHINE_RESET( galsnew )
|
||||
{
|
||||
expro02_state *state = machine.driver_data<expro02_state>();
|
||||
state->m_sprite_type = 0;
|
||||
|
||||
state->m_sprite_xoffs = 0;
|
||||
state->m_sprite_yoffs = -1*0x40; // align testgrid with bitmap in service mode
|
||||
|
||||
// priorities not verified
|
||||
state->m_priority.sprite[0] = 8; // above all
|
||||
state->m_priority.sprite[1] = 8; // above all
|
||||
state->m_priority.sprite[2] = 8; // above all
|
||||
state->m_priority.sprite[3] = 8; // above all
|
||||
// expro02_state *state = machine.driver_data<expro02_state>();
|
||||
}
|
||||
|
||||
/*************************************
|
||||
@ -490,6 +480,12 @@ static MACHINE_CONFIG_START( galsnew, expro02_state )
|
||||
kaneko_view2_tilemap_device::set_gfx_region(*device, 1);
|
||||
kaneko_view2_tilemap_device::set_offset(*device, 0x5b, 0x8, 256, 224);
|
||||
|
||||
MCFG_DEVICE_ADD_VU002_SPRITES
|
||||
kaneko16_sprite_device::set_priorities(*device, 8,8,8,8); // above all (not verified)
|
||||
kaneko16_sprite_device::set_offsets(*device, 0, -0x40);
|
||||
|
||||
|
||||
|
||||
MCFG_VIDEO_START(galsnew)
|
||||
MCFG_PALETTE_INIT(berlwall)
|
||||
|
||||
|
@ -73,13 +73,9 @@ WRITE16_MEMBER(galpani2_state::galpani2_eeprom_w)
|
||||
|
||||
static MACHINE_RESET( galpani2 )
|
||||
{
|
||||
galpani2_state *state = machine.driver_data<galpani2_state>();
|
||||
MACHINE_RESET_CALL(kaneko16);
|
||||
|
||||
state->m_sprite_type = 1;
|
||||
|
||||
state->m_sprite_xoffs = 0x10000 - 0x16c0 + 0xc00;
|
||||
state->m_sprite_yoffs = 0x000;
|
||||
machine.scheduler().boost_interleave(attotime::zero, attotime::from_usec(50)); //initial mcu xchk
|
||||
}
|
||||
|
||||
@ -295,7 +291,7 @@ static ADDRESS_MAP_START( galpani2_mem1, AS_PROGRAM, 16, galpani2_state )
|
||||
AM_RANGE(0x110000, 0x11000f) AM_RAM // ? corrupted? stack dumper on POST failure, pc+sr on gp2se
|
||||
AM_RANGE(0x300000, 0x301fff) AM_RAM // ?
|
||||
AM_RANGE(0x302000, 0x303fff) AM_RAM AM_SHARE("spriteram") // Sprites
|
||||
AM_RANGE(0x304000, 0x30401f) AM_RAM_WRITE(kaneko16_sprites_regs_w) AM_SHARE("sprites_regs") // Sprites Regs
|
||||
AM_RANGE(0x304000, 0x30401f) AM_DEVREADWRITE("kan_spr", kaneko16_sprite_device, kaneko16_sprites_regs_r, kaneko16_sprites_regs_w)
|
||||
AM_RANGE(0x308000, 0x308001) AM_WRITENOP // ? 0 at startup
|
||||
AM_RANGE(0x30c000, 0x30c001) AM_WRITENOP // ? hblank effect ?
|
||||
AM_RANGE(0x310000, 0x3101ff) AM_RAM_WRITE_LEGACY(galpani2_palette_0_w) AM_SHARE("palette.0") // ?
|
||||
@ -611,6 +607,9 @@ static MACHINE_CONFIG_START( galpani2, galpani2_state )
|
||||
MCFG_GFXDECODE(galpani2)
|
||||
MCFG_PALETTE_LENGTH(0x4000 + 0x200 + 0x8000) // sprites, bg8, bg15
|
||||
|
||||
MCFG_DEVICE_ADD_KC002_SPRITES
|
||||
kaneko16_sprite_device::set_offsets(*device, 0x10000 - 0x16c0 + 0xc00, 0);
|
||||
|
||||
MCFG_PALETTE_INIT(galpani2)
|
||||
MCFG_VIDEO_START(galpani2)
|
||||
|
||||
|
@ -104,71 +104,27 @@ Dip locations verified from manual for:
|
||||
|
||||
MACHINE_RESET( kaneko16 )
|
||||
{
|
||||
kaneko16_state *state = machine.driver_data<kaneko16_state>();
|
||||
state->m_sprite_type = 0;
|
||||
|
||||
state->m_sprite_xoffs = 0;
|
||||
state->m_sprite_yoffs = 0;
|
||||
|
||||
state->m_sprite_fliptype = 0;
|
||||
|
||||
/*
|
||||
Sx = Sprites with priority x, x = tiles with priority x,
|
||||
Sprites - Tiles Order (bottom -> top):
|
||||
|
||||
0 S0 1 2 3
|
||||
0 1 S1 2 3
|
||||
0 1 2 S2 3
|
||||
0 1 2 3 S3
|
||||
*/
|
||||
state->m_priority.sprite[0] = 1; // above tile[0], below the others
|
||||
state->m_priority.sprite[1] = 2; // above tile[0-1], below the others
|
||||
state->m_priority.sprite[2] = 3; // above tile[0-2], below the others
|
||||
state->m_priority.sprite[3] = 8; // above all
|
||||
}
|
||||
|
||||
static MACHINE_RESET( berlwall )
|
||||
{
|
||||
kaneko16_state *state = machine.driver_data<kaneko16_state>();
|
||||
MACHINE_RESET_CALL(kaneko16);
|
||||
|
||||
state->m_sprite_type = 2; // like type 0, but using 16 instead of 8 bytes
|
||||
}
|
||||
|
||||
static MACHINE_RESET( blazeon )
|
||||
{
|
||||
kaneko16_state *state = machine.driver_data<kaneko16_state>();
|
||||
MACHINE_RESET_CALL(kaneko16);
|
||||
|
||||
state->m_sprite_xoffs = 0x10000 - 0x680;
|
||||
state->m_sprite_yoffs = 0x000;
|
||||
|
||||
/*
|
||||
Sx = Sprites with priority x, x = tiles with priority x,
|
||||
Sprites - Tiles Order (bottom -> top):
|
||||
|
||||
0 S0 1 2 3
|
||||
0 1 S1 2 3
|
||||
0 1 2 3 S2
|
||||
0 1 2 3 S3
|
||||
*/
|
||||
state->m_priority.sprite[0] = 1; // above tile[0], below the others
|
||||
state->m_priority.sprite[1] = 2; // above tile[0-1], below the others
|
||||
state->m_priority.sprite[2] = 8; // above all
|
||||
state->m_priority.sprite[3] = 8; // ""
|
||||
}
|
||||
|
||||
static MACHINE_RESET( bloodwar )
|
||||
{
|
||||
kaneko16_state *state = machine.driver_data<kaneko16_state>();
|
||||
state->m_priority.sprite[0] = 2; // ever used ?
|
||||
state->m_priority.sprite[1] = 3; // character selection / vs. portraits
|
||||
state->m_priority.sprite[2] = 5; // winning portrait
|
||||
state->m_priority.sprite[3] = 7;
|
||||
|
||||
state->m_sprite_type = 1;
|
||||
|
||||
state->m_priority.VIEW2_2_pri = 1;
|
||||
state->VIEW2_2_pri = 1;
|
||||
|
||||
state->m_toybox_mcu_run = bloodwar_mcu_run;
|
||||
toybox_mcu_init(machine);
|
||||
@ -177,14 +133,9 @@ static MACHINE_RESET( bloodwar )
|
||||
static MACHINE_RESET( bonkadv )
|
||||
{
|
||||
kaneko16_state *state = machine.driver_data<kaneko16_state>();
|
||||
state->m_priority.sprite[0] = 2; // ever used ?
|
||||
state->m_priority.sprite[1] = 3; // volcano lava on level 2
|
||||
state->m_priority.sprite[2] = 5; // in-game player
|
||||
state->m_priority.sprite[3] = 7; // demostration text
|
||||
|
||||
state->m_sprite_type = 1;
|
||||
|
||||
state->m_priority.VIEW2_2_pri = 1;
|
||||
state->VIEW2_2_pri = 1;
|
||||
|
||||
state->m_toybox_mcu_run = bonkadv_mcu_run;
|
||||
toybox_mcu_init(machine);
|
||||
@ -195,12 +146,8 @@ static MACHINE_RESET( bakubrkr )
|
||||
kaneko16_state *state = machine.driver_data<kaneko16_state>();
|
||||
MACHINE_RESET_CALL(kaneko16);
|
||||
|
||||
state->m_priority.sprite[0] = 8; // above all
|
||||
state->m_priority.sprite[1] = 8; // above all
|
||||
state->m_priority.sprite[2] = 8; // above all
|
||||
state->m_priority.sprite[3] = 8; // above all
|
||||
|
||||
state->m_priority.VIEW2_2_pri = 1;
|
||||
state->VIEW2_2_pri = 1;
|
||||
}
|
||||
|
||||
static MACHINE_RESET( gtmr )
|
||||
@ -208,9 +155,8 @@ static MACHINE_RESET( gtmr )
|
||||
kaneko16_state *state = machine.driver_data<kaneko16_state>();
|
||||
MACHINE_RESET_CALL(kaneko16);
|
||||
|
||||
state->m_sprite_type = 1;
|
||||
|
||||
state->m_priority.VIEW2_2_pri = 1;
|
||||
state->VIEW2_2_pri = 1;
|
||||
|
||||
state->m_toybox_mcu_run = gtmr_mcu_run;
|
||||
toybox_mcu_init(machine);
|
||||
@ -220,28 +166,9 @@ static MACHINE_RESET( mgcrystl )
|
||||
{
|
||||
kaneko16_state *state = machine.driver_data<kaneko16_state>();
|
||||
MACHINE_RESET_CALL(kaneko16);
|
||||
/*
|
||||
Sx = Sprites with priority x, x = tiles with priority x,
|
||||
Sprites - Tiles Order:
|
||||
|
||||
S0: below 0 2
|
||||
|
||||
S1: over 2
|
||||
below 0
|
||||
|
||||
S2: over 0 2
|
||||
|
||||
S3: over all
|
||||
|
||||
tiles of the 2nd VIEW2 chip always behind sprites?
|
||||
|
||||
*/
|
||||
state->m_priority.sprite[0] = 2; // below all
|
||||
state->m_priority.sprite[1] = 3; // above tile[0], below the others
|
||||
state->m_priority.sprite[2] = 5; // above all
|
||||
state->m_priority.sprite[3] = 7; // ""
|
||||
|
||||
state->m_priority.VIEW2_2_pri = 0;
|
||||
state->VIEW2_2_pri = 0;
|
||||
}
|
||||
|
||||
|
||||
@ -251,18 +178,9 @@ static MACHINE_RESET( shogwarr )
|
||||
kaneko16_state *state = machine.driver_data<kaneko16_state>();
|
||||
MACHINE_RESET_CALL(kaneko16);
|
||||
|
||||
state->m_sprite_xoffs = 0xa00;
|
||||
|
||||
state->m_sprite_yoffs = -0x40;
|
||||
|
||||
state->m_sprite_type = 0;
|
||||
state->m_sprite_fliptype = 1;
|
||||
|
||||
state->m_priority.sprite[0] = 1; // below all
|
||||
state->m_priority.sprite[1] = 3; // above tile[0], below the others
|
||||
state->m_priority.sprite[2] = 5; // above all
|
||||
state->m_priority.sprite[3] = 7; // ""
|
||||
state->m_priority.VIEW2_2_pri = 0;
|
||||
|
||||
state->VIEW2_2_pri = 0;
|
||||
|
||||
calc3_mcu_init(machine);
|
||||
}
|
||||
@ -396,7 +314,7 @@ static ADDRESS_MAP_START( berlwall, AS_PROGRAM, 16, kaneko16_state )
|
||||
// AM_RANGE(0x480000, 0x480001) AM_RAM // ?
|
||||
AM_RANGE(0x500000, 0x500001) AM_READWRITE(kaneko16_bg15_reg_r, kaneko16_bg15_reg_w) AM_SHARE("bg15_reg") // High Color Background
|
||||
AM_RANGE(0x580000, 0x580001) AM_READWRITE(kaneko16_bg15_select_r, kaneko16_bg15_select_w) AM_SHARE("bg15_select")
|
||||
AM_RANGE(0x600000, 0x60003f) AM_RAM_WRITE(kaneko16_sprites_regs_w) AM_SHARE("sprites_regs") // Sprites Regs
|
||||
AM_RANGE(0x600000, 0x60003f) AM_DEVREADWRITE("kan_spr", kaneko16_sprite_device, kaneko16_sprites_regs_r, kaneko16_sprites_regs_w)
|
||||
AM_RANGE(0x680000, 0x680001) AM_READ_PORT("P1")
|
||||
AM_RANGE(0x680002, 0x680003) AM_READ_PORT("P2")
|
||||
AM_RANGE(0x680004, 0x680005) AM_READ_PORT("SYSTEM")
|
||||
@ -443,7 +361,7 @@ static ADDRESS_MAP_START( bakubrkr, AS_PROGRAM, 16, kaneko16_state )
|
||||
AM_RANGE(0x600000, 0x601fff) AM_RAM AM_SHARE("spriteram") // Sprites
|
||||
AM_RANGE(0x700000, 0x700fff) AM_RAM_WRITE(paletteram_xGGGGGRRRRRBBBBB_word_w) AM_SHARE("paletteram") // Palette
|
||||
AM_RANGE(0x800000, 0x80001f) AM_DEVREADWRITE("view2_0", kaneko_view2_tilemap_device, kaneko_tmap_regs_r, kaneko_tmap_regs_w)
|
||||
AM_RANGE(0x900000, 0x90001f) AM_RAM_WRITE(kaneko16_sprites_regs_w) AM_SHARE("sprites_regs") // Sprites Regs
|
||||
AM_RANGE(0x900000, 0x90001f) AM_DEVREADWRITE("kan_spr", kaneko16_sprite_device, kaneko16_sprites_regs_r, kaneko16_sprites_regs_w)
|
||||
AM_RANGE(0xa80000, 0xa80001) AM_READ(watchdog_reset16_r) // Watchdog
|
||||
AM_RANGE(0xb00000, 0xb0001f) AM_DEVREADWRITE("view2_1", kaneko_view2_tilemap_device, kaneko_tmap_regs_r, kaneko_tmap_regs_w)
|
||||
AM_RANGE(0xd00000, 0xd00001) AM_WRITE(kaneko16_eeprom_w) // EEPROM
|
||||
@ -465,7 +383,7 @@ static ADDRESS_MAP_START( blazeon, AS_PROGRAM, 16, kaneko16_state )
|
||||
AM_RANGE(0x600000, 0x603fff) AM_DEVREADWRITE("view2_0", kaneko_view2_tilemap_device, kaneko_tmap_vram_r, kaneko_tmap_vram_w )
|
||||
AM_RANGE(0x700000, 0x700fff) AM_RAM AM_SHARE("spriteram") // Sprites
|
||||
AM_RANGE(0x800000, 0x80001f) AM_DEVREADWRITE("view2_0", kaneko_view2_tilemap_device, kaneko_tmap_regs_r, kaneko_tmap_regs_w)
|
||||
AM_RANGE(0x900000, 0x90001f) AM_RAM_WRITE(kaneko16_sprites_regs_w) AM_SHARE("sprites_regs") // Sprites Regs #1
|
||||
AM_RANGE(0x900000, 0x90001f) AM_DEVREADWRITE("kan_spr", kaneko16_sprite_device, kaneko16_sprites_regs_r, kaneko16_sprites_regs_w)
|
||||
AM_RANGE(0x980000, 0x98001f) AM_RAM // Sprites Regs #2
|
||||
AM_RANGE(0xc00000, 0xc00001) AM_READ_PORT("DSW2_P1")
|
||||
AM_RANGE(0xc00002, 0xc00003) AM_READ_PORT("DSW1_P2")
|
||||
@ -530,7 +448,7 @@ static ADDRESS_MAP_START( bloodwar, AS_PROGRAM, 16, kaneko16_state )
|
||||
AM_RANGE(0x580000, 0x583fff) AM_DEVREADWRITE("view2_1", kaneko_view2_tilemap_device, kaneko_tmap_vram_r, kaneko_tmap_vram_w )
|
||||
AM_RANGE(0x600000, 0x60001f) AM_DEVREADWRITE("view2_0", kaneko_view2_tilemap_device, kaneko_tmap_regs_r, kaneko_tmap_regs_w)
|
||||
AM_RANGE(0x680000, 0x68001f) AM_DEVREADWRITE("view2_1", kaneko_view2_tilemap_device, kaneko_tmap_regs_r, kaneko_tmap_regs_w)
|
||||
AM_RANGE(0x700000, 0x70001f) AM_RAM_WRITE(kaneko16_sprites_regs_w) AM_SHARE("sprites_regs") // Sprites Regs
|
||||
AM_RANGE(0x700000, 0x70001f) AM_DEVREADWRITE("kan_spr", kaneko16_sprite_device, kaneko16_sprites_regs_r, kaneko16_sprites_regs_w)
|
||||
AM_RANGE(0x800000, 0x800001) AM_DEVREADWRITE8("oki1", okim6295_device, read, write, 0x00ff)
|
||||
AM_RANGE(0x880000, 0x880001) AM_DEVREADWRITE8("oki2", okim6295_device, read, write, 0x00ff)
|
||||
AM_RANGE(0x900000, 0x900039) AM_READWRITE(bloodwar_calc_r, bloodwar_calc_w)
|
||||
@ -588,7 +506,7 @@ static ADDRESS_MAP_START( bonkadv, AS_PROGRAM, 16, kaneko16_state )
|
||||
AM_RANGE(0x580000, 0x583fff) AM_DEVREADWRITE("view2_1", kaneko_view2_tilemap_device, kaneko_tmap_vram_r, kaneko_tmap_vram_w )
|
||||
AM_RANGE(0x600000, 0x60001f) AM_DEVREADWRITE("view2_0", kaneko_view2_tilemap_device, kaneko_tmap_regs_r, kaneko_tmap_regs_w)
|
||||
AM_RANGE(0x680000, 0x68001f) AM_DEVREADWRITE("view2_1", kaneko_view2_tilemap_device, kaneko_tmap_regs_r, kaneko_tmap_regs_w)
|
||||
AM_RANGE(0x700000, 0x70001f) AM_RAM_WRITE(kaneko16_sprites_regs_w) AM_SHARE("sprites_regs") // Sprites Regs
|
||||
AM_RANGE(0x700000, 0x70001f) AM_DEVREADWRITE("kan_spr", kaneko16_sprite_device, kaneko16_sprites_regs_r, kaneko16_sprites_regs_w)
|
||||
AM_RANGE(0x800000, 0x800001) AM_DEVREADWRITE8("oki1", okim6295_device, read, write, 0x00ff)
|
||||
AM_RANGE(0x880000, 0x880001) AM_DEVREADWRITE8("oki2", okim6295_device, read, write, 0x00ff)
|
||||
AM_RANGE(0x900000, 0x900015) AM_READWRITE(galpanib_calc_r,galpanib_calc_w)
|
||||
@ -668,7 +586,7 @@ static ADDRESS_MAP_START( gtmr_map, AS_PROGRAM, 16, kaneko16_state )
|
||||
AM_RANGE(0x600000, 0x60000f) AM_DEVREADWRITE("view2_0", kaneko_view2_tilemap_device, kaneko_tmap_regs_r, kaneko_tmap_regs_w)
|
||||
AM_RANGE(0x680000, 0x68001f) AM_DEVREADWRITE("view2_1", kaneko_view2_tilemap_device, kaneko_tmap_regs_r, kaneko_tmap_regs_w)
|
||||
|
||||
AM_RANGE(0x700000, 0x70001f) AM_READWRITE(kaneko16_sprites_regs_r, kaneko16_sprites_regs_w) AM_SHARE("sprites_regs") // Sprites Regs
|
||||
AM_RANGE(0x700000, 0x70001f) AM_DEVREADWRITE("kan_spr", kaneko16_sprite_device, kaneko16_sprites_regs_r, kaneko16_sprites_regs_w)
|
||||
|
||||
AM_RANGE(0x800000, 0x800001) AM_DEVREADWRITE8("oki1", okim6295_device, read, write, 0x00ff) // Samples
|
||||
AM_RANGE(0x880000, 0x880001) AM_DEVREADWRITE8("oki2", okim6295_device, read, write, 0x00ff)
|
||||
@ -736,7 +654,7 @@ static ADDRESS_MAP_START( gtmr2_map, AS_PROGRAM, 16, kaneko16_state )
|
||||
AM_RANGE(0x600000, 0x60000f) AM_DEVREADWRITE("view2_0", kaneko_view2_tilemap_device, kaneko_tmap_regs_r, kaneko_tmap_regs_w)
|
||||
|
||||
AM_RANGE(0x680000, 0x68001f) AM_DEVREADWRITE("view2_1", kaneko_view2_tilemap_device, kaneko_tmap_regs_r, kaneko_tmap_regs_w)
|
||||
AM_RANGE(0x700000, 0x70001f) AM_READWRITE(kaneko16_sprites_regs_r, kaneko16_sprites_regs_w) AM_SHARE("sprites_regs") // Sprites Regs
|
||||
AM_RANGE(0x700000, 0x70001f) AM_DEVREADWRITE("kan_spr", kaneko16_sprite_device, kaneko16_sprites_regs_r, kaneko16_sprites_regs_w)
|
||||
AM_RANGE(0x800000, 0x800001) AM_DEVREADWRITE8("oki1", okim6295_device, read, write, 0x00ff) // Samples
|
||||
AM_RANGE(0x880000, 0x880001) AM_DEVREADWRITE8("oki2", okim6295_device, read, write, 0x00ff)
|
||||
|
||||
@ -772,7 +690,7 @@ static ADDRESS_MAP_START( mgcrystl, AS_PROGRAM, 16, kaneko16_state )
|
||||
AM_RANGE(0x680000, 0x683fff) AM_DEVREADWRITE("view2_1", kaneko_view2_tilemap_device, kaneko_tmap_vram_r, kaneko_tmap_vram_w )
|
||||
AM_RANGE(0x700000, 0x701fff) AM_RAM AM_SHARE("spriteram") // Sprites
|
||||
AM_RANGE(0x800000, 0x80001f) AM_DEVREADWRITE("view2_0", kaneko_view2_tilemap_device, kaneko_tmap_regs_r, kaneko_tmap_regs_w)
|
||||
AM_RANGE(0x900000, 0x90001f) AM_RAM_WRITE(kaneko16_sprites_regs_w) AM_SHARE("sprites_regs") // Sprites Regs
|
||||
AM_RANGE(0x900000, 0x90001f) AM_DEVREADWRITE("kan_spr", kaneko16_sprite_device, kaneko16_sprites_regs_r, kaneko16_sprites_regs_w)
|
||||
AM_RANGE(0xb00000, 0xb0001f) AM_DEVREADWRITE("view2_1", kaneko_view2_tilemap_device, kaneko_tmap_regs_r, kaneko_tmap_regs_w)
|
||||
AM_RANGE(0xa00000, 0xa00001) AM_READ(watchdog_reset16_r) // Watchdog
|
||||
AM_RANGE(0xc00000, 0xc00001) AM_READ_PORT("DSW_P1")
|
||||
@ -835,7 +753,7 @@ static ADDRESS_MAP_START( shogwarr, AS_PROGRAM, 16, kaneko16_state )
|
||||
AM_RANGE(0x580000, 0x581fff) AM_RAM AM_SHARE("spriteram") // Sprites
|
||||
AM_RANGE(0x600000, 0x603fff) AM_DEVREADWRITE("view2_0", kaneko_view2_tilemap_device, kaneko_tmap_vram_r, kaneko_tmap_vram_w )
|
||||
AM_RANGE(0x800000, 0x80001f) AM_DEVREADWRITE("view2_0", kaneko_view2_tilemap_device, kaneko_tmap_regs_r, kaneko_tmap_regs_w)
|
||||
AM_RANGE(0x900000, 0x90001f) AM_RAM_WRITE(kaneko16_sprites_regs_w) AM_SHARE("sprites_regs") // Sprites Regs
|
||||
AM_RANGE(0x900000, 0x90001f) AM_DEVREADWRITE("kan_spr", kaneko16_sprite_device, kaneko16_sprites_regs_r, kaneko16_sprites_regs_w)
|
||||
AM_RANGE(0xa00000, 0xa0007f) AM_READWRITE(bloodwar_calc_r, bloodwar_calc_w)
|
||||
AM_RANGE(0xa80000, 0xa80001) AM_READWRITE(watchdog_reset16_r, watchdog_reset16_w) // Watchdog
|
||||
AM_RANGE(0xb80000, 0xb80001) AM_READ_PORT("P1")
|
||||
@ -1820,6 +1738,10 @@ static MACHINE_CONFIG_START( berlwall, kaneko16_state )
|
||||
kaneko_view2_tilemap_device::set_gfx_region(*device, 1);
|
||||
kaneko_view2_tilemap_device::set_offset(*device, 0x5b, -0x8, 256, 240);
|
||||
|
||||
MCFG_DEVICE_ADD_VU002_SPRITES
|
||||
kaneko16_sprite_device::set_altspacing(*device, 1);
|
||||
|
||||
|
||||
MCFG_PALETTE_INIT(berlwall)
|
||||
MCFG_VIDEO_START(berlwall)
|
||||
|
||||
@ -1873,6 +1795,12 @@ static MACHINE_CONFIG_START( bakubrkr, kaneko16_state )
|
||||
kaneko_view2_tilemap_device::set_gfx_region(*device, 2);
|
||||
kaneko_view2_tilemap_device::set_offset(*device, 0x5b, -0x8, 256, 240);
|
||||
|
||||
MCFG_DEVICE_ADD_VU002_SPRITES
|
||||
kaneko16_sprite_device::set_priorities(*device, 8,8,8,8); // above all
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
MCFG_VIDEO_START(kaneko16_2xVIEW2)
|
||||
|
||||
@ -1935,6 +1863,12 @@ static MACHINE_CONFIG_START( blazeon, kaneko16_state )
|
||||
kaneko_view2_tilemap_device::set_gfx_region(*device, 1);
|
||||
kaneko_view2_tilemap_device::set_offset(*device, 0x33, 0x8, 320, 240);
|
||||
|
||||
MCFG_DEVICE_ADD_VU002_SPRITES
|
||||
kaneko16_sprite_device::set_priorities(*device, 1 /* "above tile[0], below the others" */ ,2 /* "above tile[0-1], below the others" */ ,8 /* above all */,8 /* above all */);
|
||||
kaneko16_sprite_device::set_offsets(*device, 0x10000 - 0x680, 0x000);
|
||||
|
||||
// there is actually a 2nd sprite chip! looks like our device emulation handles both at once
|
||||
|
||||
MCFG_VIDEO_START(kaneko16_1xVIEW2)
|
||||
|
||||
/* sound hardware */
|
||||
@ -1992,6 +1926,8 @@ static MACHINE_CONFIG_START( gtmr, kaneko16_state )
|
||||
kaneko_view2_tilemap_device::set_gfx_region(*device, 2);
|
||||
kaneko_view2_tilemap_device::set_offset(*device, 0x33, 0x0, 320, 240);
|
||||
|
||||
MCFG_DEVICE_ADD_KC002_SPRITES
|
||||
|
||||
MCFG_VIDEO_START(kaneko16_2xVIEW2)
|
||||
|
||||
/* sound hardware */
|
||||
@ -2015,6 +1951,10 @@ static MACHINE_CONFIG_DERIVED( bloodwar, gtmr )
|
||||
MCFG_CPU_PROGRAM_MAP(bloodwar)
|
||||
|
||||
MCFG_MACHINE_RESET( bloodwar )
|
||||
|
||||
MCFG_DEVICE_MODIFY("kan_spr")
|
||||
kaneko16_sprite_device::set_priorities(*device, 2 /* never used? */ ,3 /* character selection / vs. portraits */ ,5 /* winning portrait*/ ,7 /* ? */);
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
/***************************************************************************
|
||||
@ -2039,6 +1979,9 @@ static MACHINE_CONFIG_DERIVED( bonkadv, gtmr )
|
||||
MCFG_CPU_PROGRAM_MAP(bonkadv)
|
||||
|
||||
MCFG_MACHINE_RESET( bonkadv )
|
||||
|
||||
MCFG_DEVICE_MODIFY("kan_spr")
|
||||
kaneko16_sprite_device::set_priorities(*device, 2 /* never used? */ ,3 /* volcano lava on level 2 */ ,5 /* in-game player */ ,7 /* demostration text */);
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
/***************************************************************************
|
||||
@ -2076,6 +2019,12 @@ static MACHINE_CONFIG_START( mgcrystl, kaneko16_state )
|
||||
kaneko_view2_tilemap_device::set_gfx_region(*device, 2);
|
||||
kaneko_view2_tilemap_device::set_offset(*device, 0x5b, -0x8, 256, 240);
|
||||
|
||||
MCFG_DEVICE_ADD_VU002_SPRITES
|
||||
kaneko16_sprite_device::set_priorities(*device, 2 /* below all */ ,3 /* above tile[0], below the other */ ,5 /* above all */ ,7 /* above all */);
|
||||
|
||||
|
||||
|
||||
|
||||
MCFG_VIDEO_START(kaneko16_2xVIEW2)
|
||||
|
||||
/* sound hardware */
|
||||
@ -2194,6 +2143,11 @@ static MACHINE_CONFIG_START( shogwarr, kaneko16_state )
|
||||
|
||||
MCFG_VIDEO_START(kaneko16_1xVIEW2)
|
||||
|
||||
MCFG_DEVICE_ADD_VU002_SPRITES
|
||||
kaneko16_sprite_device::set_priorities(*device, 1 /* below all */ ,3 /* above tile[0], below the others */ ,5 /* above all */ ,7 /* above all */);
|
||||
kaneko16_sprite_device::set_offsets(*device, 0xa00, -0x40);
|
||||
kaneko16_sprite_device::set_fliptype(*device, 1);
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
|
@ -1,7 +1,8 @@
|
||||
/************************************************************************************************************
|
||||
|
||||
Maygay EPOCH hardware
|
||||
mechanical fruit machine HW
|
||||
'mechanical' fruit machine HW
|
||||
primary use 1997 - 2003
|
||||
|
||||
HD6413002FN16 (H8-3002) CPU
|
||||
|
||||
@ -7142,15 +7143,16 @@ GAME( 199?, ep_crazyc, ep_crazy, maygayep, maygayep, maygayep_state, maygayep,
|
||||
GAME( 199?, ep_crazyd, ep_crazy, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Reel Crazy (Maygay) (EPOCH) (1.9, set 5)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_crazye, ep_crazy, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Reel Crazy (Maygay) (EPOCH) (1.9, set 6)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_mario, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Super Mario (Maygay) (EPOCH) (1.5, set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_marioa, ep_mario, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Super Mario (Maygay) (EPOCH) (1.5, set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_mariob, ep_mario, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Super Mario (Maygay) (EPOCH) (1.A, set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_marioc, ep_mario, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Super Mario (Maygay) (EPOCH) (1.A, set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_mariod, ep_mario, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Super Mario (Maygay) (EPOCH) (2.A, set 5)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_marioe, ep_mario, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Super Mario (Maygay) (EPOCH) (2.A, set 6)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_mariof, ep_mario, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Super Mario (Maygay) (EPOCH) (1.C, set 7)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_mariog, ep_mario, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Super Mario (Maygay) (EPOCH) (1.C, set 8)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_marioh, ep_mario, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Super Mario (Maygay) (EPOCH) (1.B, set 9)",GAME_IS_SKELETON_MECHANICAL )
|
||||
// CA000527 SUPER MARIO - version number seems to jump backwards from 2.A after 1.A, with 2.A having the exact same build date as 1.A.. is the KJ / SM / CW bit significant? or is the 2.A revision a mistake, it comes after the 1.A in label tho, so 1.A isn't a correction.
|
||||
GAME( 1997, ep_mario, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Super Mario (Maygay) (EPOCH) (1.5, set 1)",GAME_IS_SKELETON_MECHANICAL ) // SA970024 SA970018 11:40:00 DEC 02 1997 MAB, V1.5 EPOCH APOLLO AllCash
|
||||
GAME( 1997, ep_marioa, ep_mario, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Super Mario (Maygay) (EPOCH) (1.5, set 2)",GAME_IS_SKELETON_MECHANICAL ) // SA970025 SA970019 11:40:00 DEC 02 1997 MAB, V1.5 EPOCH APOLLO AllCash
|
||||
GAME( 1997, ep_mariob, ep_mario, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Super Mario (Maygay) (EPOCH) (1.A, set 3)",GAME_IS_SKELETON_MECHANICAL ) // SA970036 SA970024 11:15:00 DEC 23 1997 KJGio.x, 1.A EPOCH APOLLO
|
||||
GAME( 1997, ep_marioc, ep_mario, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Super Mario (Maygay) (EPOCH) (1.A, set 4)",GAME_IS_SKELETON_MECHANICAL ) // SA970037 SA970025 11:15:00 DEC 23 1997 KJGio.x, 1.A EPOCH APOLLO
|
||||
GAME( 1997, ep_mariod, ep_mario, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Super Mario (Maygay) (EPOCH) (2.A, set 5)",GAME_IS_SKELETON_MECHANICAL ) // SA970038 SA970026 11:15:00 DEC 23 1997 KJGio.x, 2.A EPOCH APOLLO
|
||||
GAME( 1997, ep_marioe, ep_mario, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Super Mario (Maygay) (EPOCH) (2.A, set 6)",GAME_IS_SKELETON_MECHANICAL ) // SA970039 SA970027 11:15:00 DEC 23 1997 KJGio.x, 2.A EPOCH APOLLO
|
||||
GAME( 1998, ep_marioh, ep_mario, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Super Mario (Maygay) (EPOCH) (1.B, set 9)",GAME_IS_SKELETON_MECHANICAL ) // SA980286 SA970037 10:05:00 AUG 26 1998 SJMio.x, 1.B EPOCH APOLLO
|
||||
GAME( 1999, ep_mariof, ep_mario, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Super Mario (Maygay) (EPOCH) (1.C, set 7)",GAME_IS_SKELETON_MECHANICAL ) // SA990033 SA980286 14:05:00 FEB 26 1999 CWGio.x, 1.C EPOCH APOLLO
|
||||
GAME( 1999, ep_mariog, ep_mario, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Super Mario (Maygay) (EPOCH) (1.C, set 8)",GAME_IS_SKELETON_MECHANICAL ) // SA990034 SA980287 14:05:00 FEB 26 1999 CWGio.x, 1.C EPOCH APOLLO
|
||||
|
||||
GAME( 199?, ep_tincn, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Tin Can Alley (Maygay) (EPOCH) (1.5, set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_tincna, ep_tincn, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Tin Can Alley (Maygay) (EPOCH) (1.5, set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
@ -7529,129 +7531,57 @@ GAME( 199?, ep_pknid, ep_pkni, maygayep, maygayep, maygayep_state, maygayep, R
|
||||
GAME( 199?, ep_pknie, ep_pkni, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "The Phoenix Knights (Global) (EPOCH) (1.7, set 6)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_pknif, ep_pkni, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "The Phoenix Knights (Global) (EPOCH) (1.7, set 7)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_royrc, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Impulse", "Royal Roulette Club (Impulse) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_royrca, ep_royrc, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Impulse", "Royal Roulette Club (Impulse) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_snbev, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Saturday Night Beaver (Global) (EPOCH) (1.8, set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_snbeva, ep_snbev, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Saturday Night Beaver (Global) (EPOCH) (1.8, set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_snbevb, ep_snbev, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Saturday Night Beaver (Global) (EPOCH) (1.9, set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_snbevc, ep_snbev, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Saturday Night Beaver (Global) (EPOCH) (1.9, set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_snbevd, ep_snbev, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Saturday Night Beaver (Global) (EPOCH) (2.1, set 5)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_snbeve, ep_snbev, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Saturday Night Beaver (Global) (EPOCH) (2.1, set 6)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_snbev, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Saturday Night Beaver (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_snbeva, ep_snbev, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Saturday Night Beaver (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_snbevb, ep_snbev, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Saturday Night Beaver (Global) (EPOCH) (set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_snbevc, ep_snbev, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Saturday Night Beaver (Global) (EPOCH) (set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_snbevd, ep_snbev, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Saturday Night Beaver (Global) (EPOCH) (set 5)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_snbeve, ep_snbev, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Saturday Night Beaver (Global) (EPOCH) (set 6)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_spook, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spooky Hollow (Global) (EPOCH) (1.3, set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_spooka, ep_spook, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spooky Hollow (Global) (EPOCH) (1.3, set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_spookb, ep_spook, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spooky Hollow (Global) (EPOCH) (2.7, set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_spook, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spooky Hollow (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_spooka, ep_spook, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spooky Hollow (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_spookb, ep_spook, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spooky Hollow (Global) (EPOCH) (set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_sdcla, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spotted Dick Classic (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_sdclaa, ep_sdcla, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spotted Dick Classic (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_sdclab, ep_sdcla, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spotted Dick Classic (Global) (EPOCH) (set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_sdclac, ep_sdcla, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spotted Dick Classic (Global) (EPOCH) (set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_sdclad, ep_sdcla, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spotted Dick Classic (Global) (EPOCH) (set 5)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_sdclae, ep_sdcla, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spotted Dick Classic (Global) (EPOCH) (set 6)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_sdclaf, ep_sdcla, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spotted Dick Classic (Global) (EPOCH) (set 7)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_sdclag, ep_sdcla, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spotted Dick Classic (Global) (EPOCH) (set 8)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_milhr, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.2, set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_milhra, ep_milhr, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.2, set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_milhrb, ep_milhr, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.3, set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_milhrc, ep_milhr, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.3, set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_milhrd, ep_milhr, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.6, set 5)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_milhre, ep_milhr, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.6, set 6)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_milhrf, ep_milhr, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.9, set 7)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_milhrg, ep_milhr, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Wants To Be A Millionhare? (Global) (EPOCH) (1.9, set 8)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_sdclb, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spotted Dick Club (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_sdclba, ep_sdclb, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spotted Dick Club (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_bbars, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Balloon Bars (Maygay) (EPOCH) (1.2, set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_bbarsa, ep_bbars, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Balloon Bars (Maygay) (EPOCH) (1.2, set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_bbarsb, ep_bbars, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Balloon Bars (Maygay) (EPOCH) (2.0, set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_bbarsc, ep_bbars, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Balloon Bars (Maygay) (EPOCH) (2.0, set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_stm, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Storm Force (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_stma, ep_stm, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Storm Force (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_stmb, ep_stm, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Storm Force (Global) (EPOCH) (set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_stmc, ep_stm, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Storm Force (Global) (EPOCH) (set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_cslay, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Cash Slayer (Global) (EPOCH) (1.4, set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_cslaya, ep_cslay, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Cash Slayer (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL ) // incomplete pair
|
||||
|
||||
GAME( 199?, ep_stmcl, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Storm Force Club (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_stmcla, ep_stmcl, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Storm Force Club (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_monky, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Monkey Business (Global) (EPOCH) (1.4, set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_monkya, ep_monky, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Monkey Business (Global) (EPOCH) (1.5, set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_snset, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Extreme", "Sunset Strip (Extreme) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_snseta, ep_snset, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Extreme", "Sunset Strip (Extreme) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 1999, ep_lug, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "London Underground (Maygay) (EPOCH) (2.4, set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 1999, ep_luga, ep_lug, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "London Underground (Maygay) (EPOCH) (2.9, set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 2002, ep_lugb, ep_lug, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "London Underground (Maygay) (EPOCH) (3.1, set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 2002, ep_lugc, ep_lug, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "London Underground (Maygay) (EPOCH) (3.1, set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_twarp, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Extreme", "Time Warp (Extreme) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_twarpa, ep_twarp, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Extreme", "Time Warp (Extreme) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_twarpb, ep_twarp, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Extreme", "Time Warp (Extreme) (EPOCH) (set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_twarpc, ep_twarp, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Extreme", "Time Warp (Extreme) (EPOCH) (set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_crzbn, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Crazy Bingo (Maygay) (EPOCH) (1.1, set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_crzbna, ep_crzbn, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Crazy Bingo (Maygay) (EPOCH) (1.1, set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_crzbnb, ep_crzbn, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Crazy Bingo (Maygay) (EPOCH) (1.1 Gala, set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_crzbnc, ep_crzbn, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Crazy Bingo (Maygay) (EPOCH) (1.1 Gala, set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_tod, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Truth Or Dare (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_toda, ep_tod, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Truth Or Dare (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
// Z0000024 CASINOCR AZ
|
||||
GAME( 199?, ep_cascza, ep_cascz, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Casino Crazy (Global) (EPOCH) (2.1, set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_utnut, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Utter Nutter (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_utnuta, ep_utnut, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Utter Nutter (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_utnutb, ep_utnut, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Utter Nutter (Global) (EPOCH) (set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_utnutc, ep_utnut, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Utter Nutter (Global) (EPOCH) (set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wside, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Wildside (Global) (EPOCH) (1.2, set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wsidea, ep_wside, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Wildside (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL ) // incomplete pair
|
||||
|
||||
GAME( 199?, ep_utncl, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Utter Nutter Club (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_utncla, ep_utncl, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Utter Nutter Club (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_imj, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "I'm A Jackpot (Global) (EPOCH) (1.5)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_wleek, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Weakest Leek Club (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wleeka, ep_wleek, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Weakest Leek Club (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_wud, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "What's Up Doc (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wuda, ep_wud, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "What's Up Doc (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wudb, ep_wud, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "What's Up Doc (Global) (EPOCH) (set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wudc, ep_wud, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "What's Up Doc (Global) (EPOCH) (set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wudd, ep_wud, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "What's Up Doc (Global) (EPOCH) (set 5)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wude, ep_wud, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "What's Up Doc (Global) (EPOCH) (set 6)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_milhr, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Wants To Be A Millionhare? (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_milhra, ep_milhr, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Wants To Be A Millionhare? (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_milhrb, ep_milhr, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Wants To Be A Millionhare? (Global) (EPOCH) (set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_milhrc, ep_milhr, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Wants To Be A Millionhare? (Global) (EPOCH) (set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_milhrd, ep_milhr, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Wants To Be A Millionhare? (Global) (EPOCH) (set 5)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_milhre, ep_milhr, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Wants To Be A Millionhare? (Global) (EPOCH) (set 6)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_milhrf, ep_milhr, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Wants To Be A Millionhare? (Global) (EPOCH) (set 7)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_milhrg, ep_milhr, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Wants To Be A Millionhare? (Global) (EPOCH) (set 8)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_mlhrc, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_mlhrca, ep_mlhrc, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_mlhrcb, ep_mlhrc, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_mlhrcc, ep_mlhrc, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_mlhrcd, ep_mlhrc, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 5)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_mlhrce, ep_mlhrc, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 6)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_wf, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Wildfire (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wfa, ep_wf, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Wildfire (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wfb, ep_wf, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Wildfire (Global) (EPOCH) (set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wfc, ep_wf, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Wildfire (Global) (EPOCH) (set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wfd, ep_wf, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Wildfire (Global) (EPOCH) (set 5)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wfe, ep_wf, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Wildfire (Global) (EPOCH) (set 6)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wff, ep_wf, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Wildfire (Global) (EPOCH) (set 7)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wfg, ep_wf, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Wildfire (Global) (EPOCH) (set 8)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_bbars, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Balloon Bars (Maygay) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_bbarsa, ep_bbars, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Balloon Bars (Maygay) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_bbarsb, ep_bbars, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Balloon Bars (Maygay) (EPOCH) (set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_bbarsc, ep_bbars, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Balloon Bars (Maygay) (EPOCH) (set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_cslay, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Cash Slayer (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_cslaya, ep_cslay, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Cash Slayer (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_monky, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Monkey Business (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_monkya, ep_monky, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Monkey Business (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_makmv, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Make Your Move (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_makmva, ep_makmv, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Make Your Move (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_lug, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "London Underground (Maygay) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_luga, ep_lug, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "London Underground (Maygay) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_lugb, ep_lug, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "London Underground (Maygay) (EPOCH) (set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_lugc, ep_lug, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "London Underground (Maygay) (EPOCH) (set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_crzbn, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Crazy Bingo (Maygay) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_crzbna, ep_crzbn, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Crazy Bingo (Maygay) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_crzbnb, ep_crzbn, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Crazy Bingo (Maygay) (EPOCH) (set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_crzbnc, ep_crzbn, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Maygay", "Crazy Bingo (Maygay) (EPOCH) (set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_cascz, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Casino Crazy (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_cascza, ep_cascz, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Casino Crazy (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_wside, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Wildside (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wsidea, ep_wside, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Wildside (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_goldf, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Impulse", "Gold Fever (Impulse) (EPOCH)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_imj, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "I'm A Jackpot (Global) (EPOCH)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_party, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Party Party (Global) (EPOCH)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 1998, ep_party, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Party Party (Global) (EPOCH) (1.1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
|
||||
/* no header info */
|
||||
@ -8021,6 +7951,72 @@ GAME( 199?, ep_mummyf, ep_mummy, maygayep, maygayep, maygayep_state, maygayep,
|
||||
GAME( 199?, ep_rchik, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Rich Chics Club (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_rchika, ep_rchik, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Rich Chics Club (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_royrc, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Impulse", "Royal Roulette Club (Impulse) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_royrca, ep_royrc, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Impulse", "Royal Roulette Club (Impulse) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_sdcla, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spotted Dick Classic (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_sdclaa, ep_sdcla, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spotted Dick Classic (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_sdclab, ep_sdcla, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spotted Dick Classic (Global) (EPOCH) (set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_sdclac, ep_sdcla, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spotted Dick Classic (Global) (EPOCH) (set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_sdclaf, ep_sdcla, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spotted Dick Classic (Global) (EPOCH) (set 7)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_sdclag, ep_sdcla, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spotted Dick Classic (Global) (EPOCH) (set 8)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_sdclad, ep_sdcla, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spotted Dick Classic (Global) (EPOCH) (set 5)",GAME_IS_SKELETON_MECHANICAL ) // larger roms, header not cleared
|
||||
GAME( 199?, ep_sdclae, ep_sdcla, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spotted Dick Classic (Global) (EPOCH) (set 6)",GAME_IS_SKELETON_MECHANICAL ) // larger roms, header not cleared
|
||||
|
||||
GAME( 199?, ep_sdclb, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spotted Dick Club (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_sdclba, ep_sdclb, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Spotted Dick Club (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_stm, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Storm Force (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_stma, ep_stm, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Storm Force (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_stmb, ep_stm, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Storm Force (Global) (EPOCH) (set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_stmc, ep_stm, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Storm Force (Global) (EPOCH) (set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_stmcl, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Storm Force Club (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_stmcla, ep_stmcl, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Storm Force Club (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_tod, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Truth Or Dare (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_toda, ep_tod, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Truth Or Dare (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_utnut, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Utter Nutter (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_utnuta, ep_utnut, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Utter Nutter (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_utnutb, ep_utnut, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Utter Nutter (Global) (EPOCH) (set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_utnutc, ep_utnut, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Utter Nutter (Global) (EPOCH) (set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_utncl, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Utter Nutter Club (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_utncla, ep_utncl, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Utter Nutter Club (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_wleek, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Weakest Leek Club (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wleeka, ep_wleek, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Weakest Leek Club (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_wud, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "What's Up Doc (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wuda, ep_wud, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "What's Up Doc (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wudb, ep_wud, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "What's Up Doc (Global) (EPOCH) (set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wudc, ep_wud, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "What's Up Doc (Global) (EPOCH) (set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wudd, ep_wud, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "What's Up Doc (Global) (EPOCH) (set 5)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wude, ep_wud, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "What's Up Doc (Global) (EPOCH) (set 6)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_mlhrc, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_mlhrca, ep_mlhrc, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_mlhrcb, ep_mlhrc, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_mlhrcc, ep_mlhrc, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_mlhrcd, ep_mlhrc, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 5)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_mlhrce, ep_mlhrc, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Who Whats To Be A Millionhare Club (Global) (EPOCH) (set 6)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_wf, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Wildfire (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wfa, ep_wf, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Wildfire (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wfb, ep_wf, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Wildfire (Global) (EPOCH) (set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wfc, ep_wf, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Wildfire (Global) (EPOCH) (set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wfd, ep_wf, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Wildfire (Global) (EPOCH) (set 5)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wfe, ep_wf, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Wildfire (Global) (EPOCH) (set 6)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wff, ep_wf, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Wildfire (Global) (EPOCH) (set 7)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_wfg, ep_wf, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Wildfire (Global) (EPOCH) (set 8)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_makmv, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Make Your Move (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_makmva, ep_makmv, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Make Your Move (Global) (EPOCH) (set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_cascz, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Global", "Casino Crazy (Global) (EPOCH) (set 1)",GAME_IS_SKELETON_MECHANICAL ) // check identity, other set has header
|
||||
|
||||
GAME( 199?, ep_goldf, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Impulse", "Gold Fever (Impulse) (EPOCH)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
/* minimal header info */
|
||||
|
||||
@ -8092,3 +8088,10 @@ GAME( 199?, ep_lla, ep_ll, maygayep, maygayep, maygayep_state, maygayep, ROT
|
||||
GAME( 199?, ep_redl, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Extreme", "Red Line (Extreme) (EPOCH) (RELI 0.1, set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_redla, ep_redl, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Extreme", "Red Line (Extreme) (EPOCH) (RELI 0.1, set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_snset, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Extreme", "Sunset Strip (Extreme) (EPOCH) (SUST 0.1, set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_snseta, ep_snset, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Extreme", "Sunset Strip (Extreme) (EPOCH) (SUST 0.1, set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
||||
GAME( 199?, ep_twarp, 0, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Extreme", "Time Warp (Extreme) (EPOCH) (TWRP 0.1, set 1)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_twarpa, ep_twarp, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Extreme", "Time Warp (Extreme) (EPOCH) (TWRP 0.1, set 2)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_twarpb, ep_twarp, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Extreme", "Time Warp (Extreme) (EPOCH) (TWRP 0.4, set 3)",GAME_IS_SKELETON_MECHANICAL )
|
||||
GAME( 199?, ep_twarpc, ep_twarp, maygayep, maygayep, maygayep_state, maygayep, ROT0, "Extreme", "Time Warp (Extreme) (EPOCH) (TWRP 0.4, set 4)",GAME_IS_SKELETON_MECHANICAL )
|
||||
|
@ -107,17 +107,7 @@ public:
|
||||
|
||||
static MACHINE_RESET( sandscrp )
|
||||
{
|
||||
sandscrp_state *state = machine.driver_data<sandscrp_state>();
|
||||
state->m_sprite_type = 0;
|
||||
|
||||
state->m_sprite_xoffs = 0;
|
||||
state->m_sprite_yoffs = 0;
|
||||
|
||||
state->m_priority.sprite[0] = 1; // above tile[0], below the others
|
||||
state->m_priority.sprite[1] = 2; // above tile[0-1], below the others
|
||||
state->m_priority.sprite[2] = 3; // above tile[0-2], below the others
|
||||
state->m_priority.sprite[3] = 8; // above all
|
||||
state->m_sprite_type = 3; // "different" sprites layout
|
||||
// sandscrp_state *state = machine.driver_data<sandscrp_state>();
|
||||
}
|
||||
|
||||
/* Sand Scorpion */
|
||||
@ -174,8 +164,8 @@ WRITE16_MEMBER(sandscrp_state::sandscrp_irq_cause_w)
|
||||
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
m_sprite_flipx = data & 1;
|
||||
m_sprite_flipy = data & 1;
|
||||
// m_sprite_flipx = data & 1;
|
||||
// m_sprite_flipy = data & 1;
|
||||
|
||||
if (data & 0x08) m_sprite_irq = 0;
|
||||
if (data & 0x10) m_unknown_irq = 0;
|
||||
|
@ -9,12 +9,8 @@
|
||||
|
||||
#include "machine/nvram.h"
|
||||
#include "video/kaneko_tmap.h"
|
||||
#include "video/kaneko_spr.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int VIEW2_2_pri;
|
||||
int sprite[4];
|
||||
} kaneko16_priority_t;
|
||||
|
||||
|
||||
typedef struct
|
||||
@ -78,13 +74,13 @@ public:
|
||||
m_spriteram(*this, "spriteram"),
|
||||
m_bg15_reg(*this, "bg15_reg"),
|
||||
m_bg15_select(*this, "bg15_select"),
|
||||
m_sprites_regs(*this, "sprites_regs"),
|
||||
m_mcu_ram(*this, "mcu_ram"),
|
||||
m_mainram(*this, "mainram"),
|
||||
m_galsnew_bg_pixram(*this, "galsnew_bgram"),
|
||||
m_galsnew_fg_pixram(*this, "galsnew_fgram"),
|
||||
m_view2_0(*this, "view2_0"),
|
||||
m_view2_1(*this, "view2_1")
|
||||
m_view2_1(*this, "view2_1"),
|
||||
m_kaneko_spr(*this, "kan_spr")
|
||||
{ }
|
||||
|
||||
|
||||
@ -92,32 +88,26 @@ public:
|
||||
optional_shared_ptr<UINT16> m_spriteram;
|
||||
optional_shared_ptr<UINT16> m_bg15_reg;
|
||||
optional_shared_ptr<UINT16> m_bg15_select;
|
||||
optional_shared_ptr<UINT16> m_sprites_regs;
|
||||
optional_shared_ptr<UINT16> m_mcu_ram;
|
||||
optional_shared_ptr<UINT16> m_mainram;
|
||||
optional_shared_ptr<UINT16> m_galsnew_bg_pixram;
|
||||
optional_shared_ptr<UINT16> m_galsnew_fg_pixram;
|
||||
optional_device<kaneko_view2_tilemap_device> m_view2_0;
|
||||
optional_device<kaneko_view2_tilemap_device> m_view2_1;
|
||||
optional_device<kaneko16_sprite_device> m_kaneko_spr;
|
||||
|
||||
UINT8 m_nvram_save[128];
|
||||
int m_sprite_type;
|
||||
int m_sprite_fliptype;
|
||||
UINT16 m_sprite_xoffs;
|
||||
UINT16 m_sprite_flipx;
|
||||
UINT16 m_sprite_yoffs;
|
||||
UINT16 m_sprite_flipy;
|
||||
struct tempsprite *m_first_sprite;
|
||||
kaneko16_priority_t m_priority;
|
||||
|
||||
calc1_hit_t m_hit;
|
||||
calc3_hit_t m_hit3;
|
||||
calc3_t m_calc3;
|
||||
void (*m_toybox_mcu_run)(running_machine &machine);
|
||||
UINT16 m_toybox_mcu_com[4];
|
||||
UINT16 m_disp_enable;
|
||||
int m_keep_sprites;
|
||||
|
||||
int VIEW2_2_pri;
|
||||
|
||||
bitmap_ind16 m_bg15_bitmap;
|
||||
bitmap_ind16 m_sprites_bitmap;
|
||||
|
||||
DECLARE_READ16_MEMBER(kaneko16_rnd_r);
|
||||
DECLARE_WRITE16_MEMBER(kaneko16_coin_lockout_w);
|
||||
@ -148,8 +138,7 @@ public:
|
||||
DECLARE_WRITE16_MEMBER(shogwarr_calc_w);
|
||||
DECLARE_READ16_MEMBER(shogwarr_calc_r);
|
||||
DECLARE_WRITE16_MEMBER(kaneko16_display_enable);
|
||||
DECLARE_READ16_MEMBER(kaneko16_sprites_regs_r);
|
||||
DECLARE_WRITE16_MEMBER(kaneko16_sprites_regs_w);
|
||||
|
||||
DECLARE_READ16_MEMBER(kaneko16_bg15_select_r);
|
||||
DECLARE_WRITE16_MEMBER(kaneko16_bg15_select_w);
|
||||
DECLARE_READ16_MEMBER(kaneko16_bg15_reg_r);
|
||||
|
@ -847,6 +847,7 @@ $(MAMEOBJ)/kaneko.a: \
|
||||
$(DRIVERS)/jchan.o \
|
||||
$(DRIVERS)/kaneko16.o $(MACHINE)/kaneko16.o $(VIDEO)/kaneko16.o \
|
||||
$(VIDEO)/kaneko_tmap.o \
|
||||
$(VIDEO)/kaneko_spr.o \
|
||||
$(DRIVERS)/sandscrp.o \
|
||||
$(DRIVERS)/suprnova.o $(VIDEO)/suprnova.o \
|
||||
$(VIDEO)/sknsspr.o \
|
||||
|
@ -194,6 +194,6 @@ if (screen.machine().input().code_pressed(KEYCODE_Z))
|
||||
cliprect,0x4000 + 0);
|
||||
}
|
||||
|
||||
if (layers_ctrl & 0x8) kaneko16_draw_sprites(screen.machine(), bitmap, cliprect);
|
||||
if (layers_ctrl & 0x8) state->m_kaneko_spr->kaneko16_draw_sprites(screen.machine(), bitmap, cliprect, state->m_spriteram, state->m_spriteram.bytes());
|
||||
return 0;
|
||||
}
|
||||
|
@ -4,18 +4,6 @@
|
||||
|
||||
driver by Luca Elia (l.elia@tin.it)
|
||||
|
||||
[ 1 High Color Layer ]
|
||||
|
||||
In ROM (Optional)
|
||||
|
||||
[ 1024 Sprites ]
|
||||
|
||||
Sprites are 16 x 16 x 4 in the older games, 16 x 16 x 8 in
|
||||
gtmr & gtmr2.
|
||||
Sprites types 0 and 2 can also have a simple effect keeping
|
||||
sprites on the screen
|
||||
|
||||
|
||||
**************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
@ -23,15 +11,6 @@
|
||||
#include "kan_pand.h"
|
||||
|
||||
|
||||
struct tempsprite
|
||||
{
|
||||
int code,color;
|
||||
int x,y;
|
||||
int xoffs,yoffs;
|
||||
int flipx,flipy;
|
||||
int priority;
|
||||
};
|
||||
|
||||
|
||||
WRITE16_MEMBER(kaneko16_state::kaneko16_display_enable)
|
||||
{
|
||||
@ -42,18 +21,12 @@ VIDEO_START( kaneko16_sprites )
|
||||
{
|
||||
kaneko16_state *state = machine.driver_data<kaneko16_state>();
|
||||
state->m_disp_enable = 1; // default enabled for games not using it
|
||||
state->m_keep_sprites = 0; // default disabled for games not using it
|
||||
|
||||
/* 0x400 sprites max */
|
||||
state->m_first_sprite = auto_alloc_array(machine, struct tempsprite, 0x400);
|
||||
}
|
||||
|
||||
VIDEO_START( kaneko16_1xVIEW2_tilemaps )
|
||||
{
|
||||
kaneko16_state *state = machine.driver_data<kaneko16_state>();
|
||||
state->m_disp_enable = 1; // default enabled for games not using it
|
||||
state->m_keep_sprites = 0; // default disabled for games not using it
|
||||
machine.primary_screen->register_screen_bitmap(state->m_sprites_bitmap);
|
||||
}
|
||||
|
||||
|
||||
@ -137,445 +110,9 @@ VIDEO_START( berlwall )
|
||||
|
||||
VIDEO_START( galsnew )
|
||||
{
|
||||
kaneko16_state *state = machine.driver_data<kaneko16_state>();
|
||||
VIDEO_START_CALL(kaneko16_sprites);
|
||||
|
||||
machine.primary_screen->register_screen_bitmap(state->m_sprites_bitmap);
|
||||
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Sprites Drawing
|
||||
|
||||
Sprite data is layed out in RAM in different ways for different games
|
||||
(type 0,1,2,etc.). This basically involves the bits in the attribute
|
||||
word to be shuffled around and/or the words being in different order.
|
||||
|
||||
Each sprite is always stuffed in 4 words. There may be some extra
|
||||
padding words though (e.g. type 2 sprites are like type 0 but the
|
||||
data is held in the last 8 bytes of every 16). Examples are:
|
||||
|
||||
Type 0: shogwarr, blazeon, bakubrkr.
|
||||
Type 1: gtmr.
|
||||
Type 2: berlwall
|
||||
|
||||
Offset: Format: Value:
|
||||
|
||||
0000.w Attribute (type 0 & 2)
|
||||
|
||||
f--- ---- ---- ---- Multisprite: Use Latched Code + 1
|
||||
-e-- ---- ---- ---- Multisprite: Use Latched Color (And Flip?)
|
||||
--d- ---- ---- ---- Multisprite: Use Latched X,Y As Offsets
|
||||
---c ba-- ---- ----
|
||||
---- --9- ---- ---- High Priority (vs FG Tiles Of High Priority)
|
||||
---- ---8 ---- ---- High Priority (vs BG Tiles Of High Priority)
|
||||
---- ---- 7654 32-- Color
|
||||
---- ---- ---- --1- X Flip
|
||||
---- ---- ---- ---0 Y Flip
|
||||
|
||||
Attribute (type 1)
|
||||
|
||||
f--- ---- ---- ---- Multisprite: Use Latched Code + 1
|
||||
-e-- ---- ---- ---- Multisprite: Use Latched Color (And Flip?)
|
||||
--d- ---- ---- ---- Multisprite: Use Latched X,Y As Offsets
|
||||
---c ba-- ---- ----
|
||||
---- --9- ---- ---- X Flip
|
||||
---- ---8 ---- ---- Y Flip
|
||||
---- ---- 7--- ---- High Priority (vs FG Tiles Of High Priority)
|
||||
---- ---- -6-- ---- High Priority (vs BG Tiles Of High Priority)
|
||||
---- ---- --54 3210 Color
|
||||
|
||||
0002.w Code
|
||||
0004.w X Position << 6
|
||||
0006.w Y Position << 6
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#define USE_LATCHED_XY 1
|
||||
#define USE_LATCHED_CODE 2
|
||||
#define USE_LATCHED_COLOR 4
|
||||
|
||||
static int kaneko16_parse_sprite_type012(running_machine &machine, int i, struct tempsprite *s)
|
||||
{
|
||||
kaneko16_state *state = machine.driver_data<kaneko16_state>();
|
||||
UINT16 *spriteram16 = state->m_spriteram;
|
||||
int attr, xoffs, offs;
|
||||
|
||||
if (state->m_sprite_type == 2) offs = i * 16/2 + 0x8/2;
|
||||
else offs = i * 8/2;
|
||||
|
||||
if (offs >= (state->m_spriteram.bytes()/2)) return -1;
|
||||
|
||||
attr = spriteram16[offs + 0];
|
||||
s->code = spriteram16[offs + 1];
|
||||
s->x = spriteram16[offs + 2];
|
||||
s->y = spriteram16[offs + 3];
|
||||
|
||||
if (state->m_sprite_type == 1)
|
||||
{
|
||||
s->color = (attr & 0x003f);
|
||||
s->priority = (attr & 0x00c0) >> 6;
|
||||
s->flipy = (attr & 0x0100);
|
||||
s->flipx = (attr & 0x0200);
|
||||
s->code += (s->y & 1) << 16; // bloodwar
|
||||
}
|
||||
else
|
||||
{
|
||||
s->flipy = (attr & 0x0001);
|
||||
s->flipx = (attr & 0x0002);
|
||||
s->color = (attr & 0x00fc) >> 2;
|
||||
s->priority = (attr & 0x0300) >> 8;
|
||||
}
|
||||
xoffs = (attr & 0x1800) >> 11;
|
||||
s->yoffs = state->m_sprites_regs[0x10/2 + xoffs*2 + 1];
|
||||
s->xoffs = state->m_sprites_regs[0x10/2 + xoffs*2 + 0];
|
||||
|
||||
if (state->m_sprite_flipy)
|
||||
{
|
||||
s->yoffs -= state->m_sprites_regs[0x2/2];
|
||||
s->yoffs -= machine.primary_screen->visible_area().min_y<<6;
|
||||
}
|
||||
else
|
||||
{
|
||||
s->yoffs -= state->m_sprites_regs[0x2/2];
|
||||
s->yoffs += machine.primary_screen->visible_area().min_y<<6;
|
||||
}
|
||||
|
||||
return ( (attr & 0x2000) ? USE_LATCHED_XY : 0 ) |
|
||||
( (attr & 0x4000) ? USE_LATCHED_COLOR : 0 ) |
|
||||
( (attr & 0x8000) ? USE_LATCHED_CODE : 0 ) ;
|
||||
}
|
||||
|
||||
// custom function to draw a single sprite. needed to keep correct sprites - sprites and sprites - tilemaps priorities
|
||||
static void kaneko16_draw_sprites_custom(bitmap_ind16 &dest_bmp,const rectangle &clip,const gfx_element *gfx,
|
||||
UINT32 code,UINT32 color,int flipx,int flipy,int sx,int sy,
|
||||
int priority)
|
||||
{
|
||||
pen_t pen_base = gfx->color_base + gfx->color_granularity * (color % gfx->total_colors);
|
||||
const UINT8 *source_base = gfx_element_get_data(gfx, code % gfx->total_elements);
|
||||
bitmap_ind8 &priority_bitmap = gfx->machine().priority_bitmap;
|
||||
int sprite_screen_height = ((1<<16)*gfx->height+0x8000)>>16;
|
||||
int sprite_screen_width = ((1<<16)*gfx->width+0x8000)>>16;
|
||||
|
||||
if (sprite_screen_width && sprite_screen_height)
|
||||
{
|
||||
/* compute sprite increment per screen pixel */
|
||||
int dx = (gfx->width<<16)/sprite_screen_width;
|
||||
int dy = (gfx->height<<16)/sprite_screen_height;
|
||||
|
||||
int ex = sx+sprite_screen_width;
|
||||
int ey = sy+sprite_screen_height;
|
||||
|
||||
int x_index_base;
|
||||
int y_index;
|
||||
|
||||
if( flipx )
|
||||
{
|
||||
x_index_base = (sprite_screen_width-1)*dx;
|
||||
dx = -dx;
|
||||
}
|
||||
else
|
||||
{
|
||||
x_index_base = 0;
|
||||
}
|
||||
|
||||
if( flipy )
|
||||
{
|
||||
y_index = (sprite_screen_height-1)*dy;
|
||||
dy = -dy;
|
||||
}
|
||||
else
|
||||
{
|
||||
y_index = 0;
|
||||
}
|
||||
|
||||
if( sx < clip.min_x)
|
||||
{ /* clip left */
|
||||
int pixels = clip.min_x-sx;
|
||||
sx += pixels;
|
||||
x_index_base += pixels*dx;
|
||||
}
|
||||
if( sy < clip.min_y )
|
||||
{ /* clip top */
|
||||
int pixels = clip.min_y-sy;
|
||||
sy += pixels;
|
||||
y_index += pixels*dy;
|
||||
}
|
||||
/* NS 980211 - fixed incorrect clipping */
|
||||
if( ex > clip.max_x+1 )
|
||||
{ /* clip right */
|
||||
int pixels = ex-clip.max_x-1;
|
||||
ex -= pixels;
|
||||
}
|
||||
if( ey > clip.max_y+1 )
|
||||
{ /* clip bottom */
|
||||
int pixels = ey-clip.max_y-1;
|
||||
ey -= pixels;
|
||||
}
|
||||
|
||||
if( ex>sx )
|
||||
{ /* skip if inner loop doesn't draw anything */
|
||||
int y;
|
||||
|
||||
for( y=sy; y<ey; y++ )
|
||||
{
|
||||
const UINT8 *source = source_base + (y_index>>16) * gfx->line_modulo;
|
||||
UINT16 *dest = &dest_bmp.pix16(y);
|
||||
UINT8 *pri = &priority_bitmap.pix8(y);
|
||||
|
||||
int x, x_index = x_index_base;
|
||||
for( x=sx; x<ex; x++ )
|
||||
{
|
||||
int c = source[x_index>>16];
|
||||
if( c != 0 )
|
||||
{
|
||||
if (pri[x] < priority)
|
||||
dest[x] = pen_base + c;
|
||||
pri[x] = 0xff; // mark it "already drawn"
|
||||
}
|
||||
x_index += dx;
|
||||
}
|
||||
|
||||
y_index += dy;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Build a list of sprites to display & draw them */
|
||||
|
||||
void kaneko16_draw_sprites(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
kaneko16_state *state = machine.driver_data<kaneko16_state>();
|
||||
/* Sprites *must* be parsed from the first in RAM to the last,
|
||||
because of the multisprite feature. But they *must* be drawn
|
||||
from the last in RAM (frontmost) to the first in order to
|
||||
cope with priorities using pdrawgfx.
|
||||
|
||||
Hence we parse them from first to last and put the result
|
||||
in a temp buffer, then draw the buffer's contents from last
|
||||
to first. */
|
||||
|
||||
int max = (machine.primary_screen->width() > 0x100) ? (0x200<<6) : (0x100<<6);
|
||||
|
||||
int i = 0;
|
||||
struct tempsprite *s = state->m_first_sprite;
|
||||
|
||||
/* These values are latched from the last sprite. */
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
int code = 0;
|
||||
int color = 0;
|
||||
int priority = 0;
|
||||
int xoffs = 0;
|
||||
int yoffs = 0;
|
||||
int flipx = 0;
|
||||
int flipy = 0;
|
||||
|
||||
while (1)
|
||||
{
|
||||
int flags;
|
||||
|
||||
switch( state->m_sprite_type )
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
case 2: flags = kaneko16_parse_sprite_type012(machine, i,s); break;
|
||||
default: flags = -1;
|
||||
}
|
||||
|
||||
if (flags == -1) // End of Sprites
|
||||
break;
|
||||
|
||||
if (flags & USE_LATCHED_CODE)
|
||||
s->code = ++code; // Use the latched code + 1 ..
|
||||
else
|
||||
code = s->code; // .. or latch this value
|
||||
|
||||
|
||||
if (flags & USE_LATCHED_COLOR)
|
||||
{
|
||||
s->color = color;
|
||||
s->priority = priority;
|
||||
s->xoffs = xoffs;
|
||||
s->yoffs = yoffs;
|
||||
|
||||
if (state->m_sprite_fliptype==0)
|
||||
{
|
||||
s->flipx = flipx;
|
||||
s->flipy = flipy;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
color = s->color;
|
||||
priority = s->priority;
|
||||
xoffs = s->xoffs;
|
||||
yoffs = s->yoffs;
|
||||
|
||||
if (state->m_sprite_fliptype==0)
|
||||
{
|
||||
flipx = s->flipx;
|
||||
flipy = s->flipy;
|
||||
}
|
||||
}
|
||||
|
||||
// brap boys explicitly doesn't want the flip to be latched, maybe there is a different bit to enable that behavior?
|
||||
if (state->m_sprite_fliptype==1)
|
||||
{
|
||||
flipx = s->flipx;
|
||||
flipy = s->flipy;
|
||||
}
|
||||
|
||||
if (flags & USE_LATCHED_XY)
|
||||
{
|
||||
s->x += x;
|
||||
s->y += y;
|
||||
}
|
||||
// Always latch the latest result
|
||||
x = s->x;
|
||||
y = s->y;
|
||||
|
||||
/* We can now buffer this sprite */
|
||||
|
||||
s->x = s->xoffs + s->x;
|
||||
s->y = s->yoffs + s->y;
|
||||
|
||||
s->x += state->m_sprite_xoffs;
|
||||
s->y += state->m_sprite_yoffs;
|
||||
|
||||
if (state->m_sprite_flipx) { s->x = max - s->x - (16<<6); s->flipx = !s->flipx; }
|
||||
if (state->m_sprite_flipy) { s->y = max - s->y - (16<<6); s->flipy = !s->flipy; }
|
||||
|
||||
s->x = ( (s->x & 0x7fc0) - (s->x & 0x8000) ) / 0x40;
|
||||
s->y = ( (s->y & 0x7fc0) - (s->y & 0x8000) ) / 0x40;
|
||||
|
||||
i++;
|
||||
s++;
|
||||
}
|
||||
|
||||
|
||||
/* Let's finally draw the sprites we buffered, in reverse order
|
||||
(for pdrawgfx) */
|
||||
|
||||
for (s--; s >= state->m_first_sprite; s--)
|
||||
{
|
||||
int curr_pri = s->priority;
|
||||
|
||||
UINT32 primask = state->m_priority.sprite[curr_pri];
|
||||
|
||||
kaneko16_draw_sprites_custom(
|
||||
bitmap,cliprect,machine.gfx[0],
|
||||
s->code,
|
||||
s->color,
|
||||
s->flipx, s->flipy,
|
||||
s->x, s->y,
|
||||
primask );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
|
||||
Sprites Registers
|
||||
|
||||
Offset: Format: Value:
|
||||
|
||||
0000.w f--- ---- ---- ---- Sprites Disable?? (see blazeon)
|
||||
-edc ba98 7654 3---
|
||||
---- ---- ---- -2-- Keep sprites on screen (only sprites types 0 and 2)
|
||||
---- ---- ---- --1- Flip X
|
||||
---- ---- ---- ---0 Flip Y
|
||||
|
||||
0002.w Y Offset << 6 (Global)
|
||||
|
||||
|
||||
0004..000e.w ?
|
||||
|
||||
|
||||
0010.w X Offset << 6 #0
|
||||
0012.w Y Offset << 6 #0
|
||||
|
||||
0014.w X Offset << 6 #1
|
||||
0016.w Y Offset << 6 #1
|
||||
|
||||
0018.w X Offset << 6 #2
|
||||
001a.w Y Offset << 6 #2
|
||||
|
||||
001c.w X Offset << 6 #3
|
||||
001e.w Y Offset << 6 #3
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
/*
|
||||
[gtmr]
|
||||
|
||||
Initial self test:
|
||||
600000: 4BC0 94C0 4C40 94C0-0404 0002 0000 0000 (Layers 1 regs)
|
||||
680000: 4BC0 94C0 4C40 94C0-1C1C 0002 0000 0000 (Layers 2 regs)
|
||||
Race start:
|
||||
600000: DC00 7D00 DC80 7D00-0404 0002 0000 0000 (Layers 1 regs)
|
||||
680000: DC00 7D00 DC80 7D00-1C1C 0002 0000 0000 (Layers 2 regs)
|
||||
|
||||
[gtmr]
|
||||
700000: 0040 0000 0001 0180-0000 0000 0000 0000 (Sprites regs)
|
||||
700010: 0040 0000 0040 0000-0040 0000 2840 1E00 ; 1,0 .. a1,78
|
||||
; a0*2=screenx/2
|
||||
; 78*2=screeny/2
|
||||
FLIP ON:
|
||||
700000: 0043 FFC0 0001 0180-0000 0000 0000 0000 (Sprites regs)
|
||||
700010: 2FC0 4400 2FC0 4400-2FC0 4400 57C0 6200 ; bf,110 .. 15f,188
|
||||
; 15f-bf=a0! 188-110=78!
|
||||
|
||||
[berlwall]
|
||||
600000: 48CC 03C0 0001 0100-0000 0000 0000 0000 (Sprites regs)
|
||||
600010: 0000 0000 0000 0000-0000 0000 0000 0000
|
||||
FLIP ON:
|
||||
600000: 48CF FC00 0001 0100-0000 0000 0000 0000 (Sprites regs)
|
||||
600010: 0000 0000 0000 0000-0000 0000 0000 0000
|
||||
|
||||
[mgcrystl]
|
||||
900000: 4FCC 0000 0040 00C0-xxxx 0001 0001 0001 (Sprites regs)
|
||||
900010: 0000 FC40 A000 9C40-1E00 1A40 0000 FC40
|
||||
FLIP ON:
|
||||
900000: 4FCF 0000 0040 00C0-xxxx 0001 0001 0001 (Sprites regs)
|
||||
900010: 0000 0400 A000 A400-1E00 2200 0000 0400 ; +1f<<6 on y
|
||||
*/
|
||||
|
||||
READ16_MEMBER(kaneko16_state::kaneko16_sprites_regs_r)
|
||||
{
|
||||
return m_sprites_regs[offset];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(kaneko16_state::kaneko16_sprites_regs_w)
|
||||
{
|
||||
UINT16 new_data;
|
||||
|
||||
COMBINE_DATA(&m_sprites_regs[offset]);
|
||||
new_data = m_sprites_regs[offset];
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0:
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
m_sprite_flipx = new_data & 2;
|
||||
m_sprite_flipy = new_data & 1;
|
||||
|
||||
if(m_sprite_type == 0 || m_sprite_type == 2)
|
||||
m_keep_sprites = ~new_data & 4;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// logerror("CPU #0 PC %06X : Warning, sprites reg %04X <- %04X\n",cpu_get_pc(&space.device()),offset*2,data);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -603,24 +140,6 @@ WRITE16_MEMBER(kaneko16_state::kaneko16_bg15_reg_w)
|
||||
|
||||
|
||||
|
||||
static void kaneko16_render_sprites(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
kaneko16_state *state = machine.driver_data<kaneko16_state>();
|
||||
/* Sprites last (rendered with pdrawgfx, so they can slip
|
||||
in between the layers) */
|
||||
|
||||
if(state->m_keep_sprites)
|
||||
{
|
||||
/* keep sprites on screen */
|
||||
kaneko16_draw_sprites(machine,state->m_sprites_bitmap,cliprect);
|
||||
copybitmap_trans(bitmap,state->m_sprites_bitmap,0,0,0,0,cliprect,0);
|
||||
}
|
||||
else
|
||||
{
|
||||
state->m_sprites_bitmap.fill(0, cliprect);
|
||||
kaneko16_draw_sprites(machine,bitmap,cliprect);
|
||||
}
|
||||
}
|
||||
|
||||
static void kaneko16_render_15bpp_bitmap(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
@ -645,14 +164,22 @@ static void kaneko16_render_15bpp_bitmap(running_machine &machine, bitmap_ind16
|
||||
|
||||
static void kaneko16_fill_bitmap(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
|
||||
kaneko16_state *state = machine.driver_data<kaneko16_state>();
|
||||
if(state->m_sprite_type == 1)
|
||||
bitmap.fill(0x7f00, cliprect);
|
||||
else
|
||||
/* Fill the bitmap with pen 0. This is wrong, but will work most of
|
||||
the times. To do it right, each pixel should be drawn with pen 0
|
||||
of the bottomost tile that covers it (which is pretty tricky to do) */
|
||||
bitmap.fill(0, cliprect);
|
||||
if (state->m_kaneko_spr)
|
||||
if(state->m_kaneko_spr->get_sprite_type()== 1)
|
||||
{
|
||||
bitmap.fill(0x7f00, cliprect);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Fill the bitmap with pen 0. This is wrong, but will work most of
|
||||
the times. To do it right, each pixel should be drawn with pen 0
|
||||
of the bottomost tile that covers it (which is pretty tricky to do) */
|
||||
bitmap.fill(0, cliprect);
|
||||
|
||||
}
|
||||
|
||||
static SCREEN_UPDATE_IND16( common )
|
||||
@ -668,7 +195,7 @@ static SCREEN_UPDATE_IND16( common )
|
||||
for ( i = 0; i < 8; i++ )
|
||||
{
|
||||
if (state->m_view2_0) state->m_view2_0->render_tilemap_chip(bitmap,cliprect,i);
|
||||
if (state->m_view2_1) state->m_view2_1->render_tilemap_chip_alt(bitmap,cliprect,i, state->m_priority.VIEW2_2_pri);
|
||||
if (state->m_view2_1) state->m_view2_1->render_tilemap_chip_alt(bitmap,cliprect,i, state->VIEW2_2_pri);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -684,7 +211,7 @@ SCREEN_UPDATE_IND16(berlwall)
|
||||
if (!state->m_disp_enable) return 0;
|
||||
|
||||
SCREEN_UPDATE16_CALL(common);
|
||||
kaneko16_render_sprites(screen.machine(),bitmap,cliprect);
|
||||
state->m_kaneko_spr->kaneko16_render_sprites(screen.machine(),bitmap,cliprect, state->m_spriteram, state->m_spriteram.bytes());
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -705,7 +232,7 @@ SCREEN_UPDATE_IND16( kaneko16 )
|
||||
if (!state->m_disp_enable) return 0;
|
||||
|
||||
SCREEN_UPDATE16_CALL(common);
|
||||
kaneko16_render_sprites(screen.machine(),bitmap,cliprect);
|
||||
state->m_kaneko_spr->kaneko16_render_sprites(screen.machine(),bitmap,cliprect, state->m_spriteram, state->m_spriteram.bytes());
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -753,7 +280,7 @@ SCREEN_UPDATE_IND16( galsnew )
|
||||
|
||||
SCREEN_UPDATE16_CALL(common);
|
||||
|
||||
kaneko16_render_sprites(screen.machine(),bitmap,cliprect);
|
||||
state->m_kaneko_spr->kaneko16_render_sprites(screen.machine(),bitmap,cliprect, state->m_spriteram, state->m_spriteram.bytes());
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
563
src/mame/video/kaneko_spr.c
Normal file
563
src/mame/video/kaneko_spr.c
Normal file
@ -0,0 +1,563 @@
|
||||
/* Kaneko Sprites */
|
||||
|
||||
/*
|
||||
Kaneko 16-bit sprites
|
||||
VU-002 052 151021 ('type 0') (blazeon, berlwall etc., confirmed)
|
||||
KC-002 L0002 023 9321EK702 ('type 1') (gtmr, bloodwar etc., confirmed)
|
||||
|
||||
|
||||
[ 1024 Sprites ]
|
||||
|
||||
Sprites are 16 x 16 x 4 in the older games, 16 x 16 x 8 in
|
||||
gtmr & gtmr2.
|
||||
Sprites types 0 and 2 can also have a simple effect keeping
|
||||
sprites on the screen
|
||||
|
||||
|
||||
Notes:
|
||||
- Blaze On has 2 sprite chips, with 2 sets of sprite registers, the
|
||||
existing code here just handles it as one, ignoring the second
|
||||
set of registers, we should really be producing 2 sprite bitmaps
|
||||
and manually mixing them.
|
||||
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
#include "kaneko_spr.h"
|
||||
|
||||
const device_type KANEKO16_SPRITE = &device_creator<kaneko16_sprite_device>;
|
||||
|
||||
kaneko16_sprite_device::kaneko16_sprite_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, KANEKO16_SPRITE, "kaneko16_sprite_device", tag, owner, clock)
|
||||
{
|
||||
m_keep_sprites = 0; // default disabled for games not using it
|
||||
|
||||
|
||||
m_sprite_xoffs = 0;
|
||||
m_sprite_yoffs = 0;
|
||||
|
||||
m_sprite_fliptype = 0;
|
||||
m_sprite_type = 0;
|
||||
|
||||
m_altspacing = 0;
|
||||
/*
|
||||
Sx = Sprites with priority x, x = tiles with priority x,
|
||||
Sprites - Tiles Order (bottom -> top):
|
||||
|
||||
0 S0 1 2 3
|
||||
0 1 S1 2 3
|
||||
0 1 2 S2 3
|
||||
0 1 2 3 S3
|
||||
*/
|
||||
m_priority.sprite[0] = 1; // above tile[0], below the others
|
||||
m_priority.sprite[1] = 2; // above tile[0-1], below the others
|
||||
m_priority.sprite[2] = 3; // above tile[0-2], below the others
|
||||
m_priority.sprite[3] = 8; // above all
|
||||
}
|
||||
|
||||
|
||||
void kaneko16_sprite_device::device_start()
|
||||
{
|
||||
m_first_sprite = auto_alloc_array(machine(), struct tempsprite, 0x400);
|
||||
m_sprites_regs = auto_alloc_array_clear(machine(), UINT16, 0x20/2);
|
||||
machine().primary_screen->register_screen_bitmap(m_sprites_bitmap);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void kaneko16_sprite_device::device_reset()
|
||||
{
|
||||
m_sprite_flipx = 0;
|
||||
m_sprite_flipy = 0;
|
||||
}
|
||||
|
||||
void kaneko16_sprite_device::set_priorities(device_t &device, int pri0, int pri1, int pri2, int pri3)
|
||||
{
|
||||
kaneko16_sprite_device &dev = downcast<kaneko16_sprite_device &>(device);
|
||||
|
||||
dev.m_priority.sprite[0] = pri0;
|
||||
dev.m_priority.sprite[1] = pri1;
|
||||
dev.m_priority.sprite[2] = pri2;
|
||||
dev.m_priority.sprite[3] = pri3;
|
||||
}
|
||||
|
||||
void kaneko16_sprite_device::set_type(device_t &device, int type)
|
||||
{
|
||||
kaneko16_sprite_device &dev = downcast<kaneko16_sprite_device &>(device);
|
||||
dev.m_sprite_type = type;
|
||||
}
|
||||
|
||||
void kaneko16_sprite_device::set_altspacing(device_t &device, int spacing)
|
||||
{
|
||||
kaneko16_sprite_device &dev = downcast<kaneko16_sprite_device &>(device);
|
||||
dev.m_altspacing = spacing;
|
||||
}
|
||||
|
||||
void kaneko16_sprite_device::set_fliptype(device_t &device, int fliptype)
|
||||
{
|
||||
kaneko16_sprite_device &dev = downcast<kaneko16_sprite_device &>(device);
|
||||
dev.m_sprite_fliptype = fliptype;
|
||||
|
||||
}
|
||||
|
||||
void kaneko16_sprite_device::set_offsets(device_t &device, int xoffs, int yoffs)
|
||||
{
|
||||
kaneko16_sprite_device &dev = downcast<kaneko16_sprite_device &>(device);
|
||||
dev.m_sprite_xoffs = xoffs;
|
||||
dev.m_sprite_yoffs = yoffs;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Sprites Drawing
|
||||
|
||||
Sprite data is layed out in RAM in different ways for different games
|
||||
(type 0,1,2,etc.). This basically involves the bits in the attribute
|
||||
word to be shuffled around and/or the words being in different order.
|
||||
|
||||
Each sprite is always stuffed in 4 words. There may be some extra
|
||||
padding words though (e.g. type 2 sprites are like type 0 but the
|
||||
data is held in the last 8 bytes of every 16). Examples are:
|
||||
|
||||
Type 0: shogwarr, blazeon, bakubrkr.
|
||||
Type 1: gtmr.
|
||||
Type 2: berlwall
|
||||
|
||||
Offset: Format: Value:
|
||||
|
||||
0000.w Attribute (type 0 & 2)
|
||||
|
||||
f--- ---- ---- ---- Multisprite: Use Latched Code + 1
|
||||
-e-- ---- ---- ---- Multisprite: Use Latched Color (And Flip?)
|
||||
--d- ---- ---- ---- Multisprite: Use Latched X,Y As Offsets
|
||||
---c ba-- ---- ----
|
||||
---- --9- ---- ---- High Priority (vs FG Tiles Of High Priority)
|
||||
---- ---8 ---- ---- High Priority (vs BG Tiles Of High Priority)
|
||||
---- ---- 7654 32-- Color
|
||||
---- ---- ---- --1- X Flip
|
||||
---- ---- ---- ---0 Y Flip
|
||||
|
||||
Attribute (type 1)
|
||||
|
||||
f--- ---- ---- ---- Multisprite: Use Latched Code + 1
|
||||
-e-- ---- ---- ---- Multisprite: Use Latched Color (And Flip?)
|
||||
--d- ---- ---- ---- Multisprite: Use Latched X,Y As Offsets
|
||||
---c ba-- ---- ----
|
||||
---- --9- ---- ---- X Flip
|
||||
---- ---8 ---- ---- Y Flip
|
||||
---- ---- 7--- ---- High Priority (vs FG Tiles Of High Priority)
|
||||
---- ---- -6-- ---- High Priority (vs BG Tiles Of High Priority)
|
||||
---- ---- --54 3210 Color
|
||||
|
||||
0002.w Code
|
||||
0004.w X Position << 6
|
||||
0006.w Y Position << 6
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#define USE_LATCHED_XY 1
|
||||
#define USE_LATCHED_CODE 2
|
||||
#define USE_LATCHED_COLOR 4
|
||||
|
||||
int kaneko16_sprite_device::kaneko16_parse_sprite_type012(running_machine &machine, int i, struct tempsprite *s, UINT16* spriteram16, int spriteram16_bytes)
|
||||
{
|
||||
int attr, xoffs, offs;
|
||||
|
||||
if (m_altspacing) offs = i * 16/2 + 0x8/2;
|
||||
else offs = i * 8/2;
|
||||
|
||||
if (offs >= (spriteram16_bytes/2)) return -1;
|
||||
|
||||
attr = spriteram16[offs + 0];
|
||||
s->code = spriteram16[offs + 1];
|
||||
s->x = spriteram16[offs + 2];
|
||||
s->y = spriteram16[offs + 3];
|
||||
|
||||
if (m_sprite_type == 1)
|
||||
{
|
||||
s->color = (attr & 0x003f);
|
||||
s->priority = (attr & 0x00c0) >> 6;
|
||||
s->flipy = (attr & 0x0100);
|
||||
s->flipx = (attr & 0x0200);
|
||||
s->code += (s->y & 1) << 16; // bloodwar
|
||||
}
|
||||
else
|
||||
{
|
||||
s->flipy = (attr & 0x0001);
|
||||
s->flipx = (attr & 0x0002);
|
||||
s->color = (attr & 0x00fc) >> 2;
|
||||
s->priority = (attr & 0x0300) >> 8;
|
||||
}
|
||||
|
||||
xoffs = (attr & 0x1800) >> 11;
|
||||
s->yoffs = m_sprites_regs[0x10/2 + xoffs*2 + 1];
|
||||
s->xoffs = m_sprites_regs[0x10/2 + xoffs*2 + 0];
|
||||
|
||||
if (m_sprite_flipy)
|
||||
{
|
||||
s->yoffs -= m_sprites_regs[0x2/2];
|
||||
s->yoffs -= machine.primary_screen->visible_area().min_y<<6;
|
||||
}
|
||||
else
|
||||
{
|
||||
s->yoffs -= m_sprites_regs[0x2/2];
|
||||
s->yoffs += machine.primary_screen->visible_area().min_y<<6;
|
||||
}
|
||||
|
||||
return ( (attr & 0x2000) ? USE_LATCHED_XY : 0 ) |
|
||||
( (attr & 0x4000) ? USE_LATCHED_COLOR : 0 ) |
|
||||
( (attr & 0x8000) ? USE_LATCHED_CODE : 0 ) ;
|
||||
}
|
||||
|
||||
// custom function to draw a single sprite. needed to keep correct sprites - sprites and sprites - tilemaps priorities
|
||||
void kaneko16_sprite_device::kaneko16_draw_sprites_custom(bitmap_ind16 &dest_bmp,const rectangle &clip,const gfx_element *gfx,
|
||||
UINT32 code,UINT32 color,int flipx,int flipy,int sx,int sy,
|
||||
int priority)
|
||||
{
|
||||
pen_t pen_base = gfx->color_base + gfx->color_granularity * (color % gfx->total_colors);
|
||||
const UINT8 *source_base = gfx_element_get_data(gfx, code % gfx->total_elements);
|
||||
bitmap_ind8 &priority_bitmap = gfx->machine().priority_bitmap;
|
||||
int sprite_screen_height = ((1<<16)*gfx->height+0x8000)>>16;
|
||||
int sprite_screen_width = ((1<<16)*gfx->width+0x8000)>>16;
|
||||
|
||||
if (sprite_screen_width && sprite_screen_height)
|
||||
{
|
||||
/* compute sprite increment per screen pixel */
|
||||
int dx = (gfx->width<<16)/sprite_screen_width;
|
||||
int dy = (gfx->height<<16)/sprite_screen_height;
|
||||
|
||||
int ex = sx+sprite_screen_width;
|
||||
int ey = sy+sprite_screen_height;
|
||||
|
||||
int x_index_base;
|
||||
int y_index;
|
||||
|
||||
if( flipx )
|
||||
{
|
||||
x_index_base = (sprite_screen_width-1)*dx;
|
||||
dx = -dx;
|
||||
}
|
||||
else
|
||||
{
|
||||
x_index_base = 0;
|
||||
}
|
||||
|
||||
if( flipy )
|
||||
{
|
||||
y_index = (sprite_screen_height-1)*dy;
|
||||
dy = -dy;
|
||||
}
|
||||
else
|
||||
{
|
||||
y_index = 0;
|
||||
}
|
||||
|
||||
if( sx < clip.min_x)
|
||||
{ /* clip left */
|
||||
int pixels = clip.min_x-sx;
|
||||
sx += pixels;
|
||||
x_index_base += pixels*dx;
|
||||
}
|
||||
if( sy < clip.min_y )
|
||||
{ /* clip top */
|
||||
int pixels = clip.min_y-sy;
|
||||
sy += pixels;
|
||||
y_index += pixels*dy;
|
||||
}
|
||||
/* NS 980211 - fixed incorrect clipping */
|
||||
if( ex > clip.max_x+1 )
|
||||
{ /* clip right */
|
||||
int pixels = ex-clip.max_x-1;
|
||||
ex -= pixels;
|
||||
}
|
||||
if( ey > clip.max_y+1 )
|
||||
{ /* clip bottom */
|
||||
int pixels = ey-clip.max_y-1;
|
||||
ey -= pixels;
|
||||
}
|
||||
|
||||
if( ex>sx )
|
||||
{ /* skip if inner loop doesn't draw anything */
|
||||
int y;
|
||||
|
||||
for( y=sy; y<ey; y++ )
|
||||
{
|
||||
const UINT8 *source = source_base + (y_index>>16) * gfx->line_modulo;
|
||||
UINT16 *dest = &dest_bmp.pix16(y);
|
||||
UINT8 *pri = &priority_bitmap.pix8(y);
|
||||
|
||||
int x, x_index = x_index_base;
|
||||
for( x=sx; x<ex; x++ )
|
||||
{
|
||||
int c = source[x_index>>16];
|
||||
if( c != 0 )
|
||||
{
|
||||
if (pri[x] < priority)
|
||||
dest[x] = pen_base + c;
|
||||
pri[x] = 0xff; // mark it "already drawn"
|
||||
}
|
||||
x_index += dx;
|
||||
}
|
||||
|
||||
y_index += dy;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Build a list of sprites to display & draw them */
|
||||
|
||||
void kaneko16_sprite_device::kaneko16_draw_sprites(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, UINT16* spriteram16, int spriteram16_bytes)
|
||||
{
|
||||
/* Sprites *must* be parsed from the first in RAM to the last,
|
||||
because of the multisprite feature. But they *must* be drawn
|
||||
from the last in RAM (frontmost) to the first in order to
|
||||
cope with priorities using pdrawgfx.
|
||||
|
||||
Hence we parse them from first to last and put the result
|
||||
in a temp buffer, then draw the buffer's contents from last
|
||||
to first. */
|
||||
|
||||
int max = (machine.primary_screen->width() > 0x100) ? (0x200<<6) : (0x100<<6);
|
||||
|
||||
int i = 0;
|
||||
struct tempsprite *s = m_first_sprite;
|
||||
|
||||
/* These values are latched from the last sprite. */
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
int code = 0;
|
||||
int color = 0;
|
||||
int priority = 0;
|
||||
int xoffs = 0;
|
||||
int yoffs = 0;
|
||||
int flipx = 0;
|
||||
int flipy = 0;
|
||||
|
||||
while (1)
|
||||
{
|
||||
int flags;
|
||||
|
||||
switch( m_sprite_type )
|
||||
{
|
||||
case 0:
|
||||
case 1: flags = kaneko16_parse_sprite_type012(machine, i,s, spriteram16, spriteram16_bytes); break;
|
||||
default: flags = -1;
|
||||
}
|
||||
|
||||
if (flags == -1) // End of Sprites
|
||||
break;
|
||||
|
||||
if (flags & USE_LATCHED_CODE)
|
||||
s->code = ++code; // Use the latched code + 1 ..
|
||||
else
|
||||
code = s->code; // .. or latch this value
|
||||
|
||||
|
||||
if (flags & USE_LATCHED_COLOR)
|
||||
{
|
||||
s->color = color;
|
||||
s->priority = priority;
|
||||
s->xoffs = xoffs;
|
||||
s->yoffs = yoffs;
|
||||
|
||||
if (m_sprite_fliptype==0)
|
||||
{
|
||||
s->flipx = flipx;
|
||||
s->flipy = flipy;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
color = s->color;
|
||||
priority = s->priority;
|
||||
xoffs = s->xoffs;
|
||||
yoffs = s->yoffs;
|
||||
|
||||
if (m_sprite_fliptype==0)
|
||||
{
|
||||
flipx = s->flipx;
|
||||
flipy = s->flipy;
|
||||
}
|
||||
}
|
||||
|
||||
// brap boys explicitly doesn't want the flip to be latched, maybe there is a different bit to enable that behavior?
|
||||
if (m_sprite_fliptype==1)
|
||||
{
|
||||
flipx = s->flipx;
|
||||
flipy = s->flipy;
|
||||
}
|
||||
|
||||
if (flags & USE_LATCHED_XY)
|
||||
{
|
||||
s->x += x;
|
||||
s->y += y;
|
||||
}
|
||||
// Always latch the latest result
|
||||
x = s->x;
|
||||
y = s->y;
|
||||
|
||||
/* We can now buffer this sprite */
|
||||
|
||||
s->x = s->xoffs + s->x;
|
||||
s->y = s->yoffs + s->y;
|
||||
|
||||
s->x += m_sprite_xoffs;
|
||||
s->y += m_sprite_yoffs;
|
||||
|
||||
if (m_sprite_flipx) { s->x = max - s->x - (16<<6); s->flipx = !s->flipx; }
|
||||
if (m_sprite_flipy) { s->y = max - s->y - (16<<6); s->flipy = !s->flipy; }
|
||||
|
||||
s->x = ( (s->x & 0x7fc0) - (s->x & 0x8000) ) / 0x40;
|
||||
s->y = ( (s->y & 0x7fc0) - (s->y & 0x8000) ) / 0x40;
|
||||
|
||||
i++;
|
||||
s++;
|
||||
}
|
||||
|
||||
|
||||
/* Let's finally draw the sprites we buffered, in reverse order
|
||||
(for pdrawgfx) */
|
||||
|
||||
for (s--; s >= m_first_sprite; s--)
|
||||
{
|
||||
int curr_pri = s->priority;
|
||||
|
||||
UINT32 primask = m_priority.sprite[curr_pri];
|
||||
|
||||
kaneko16_draw_sprites_custom(
|
||||
bitmap,cliprect,machine.gfx[0],
|
||||
s->code,
|
||||
s->color,
|
||||
s->flipx, s->flipy,
|
||||
s->x, s->y,
|
||||
primask );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
|
||||
Sprites Registers
|
||||
|
||||
Offset: Format: Value:
|
||||
|
||||
0000.w f--- ---- ---- ---- Sprites Disable?? (see blazeon)
|
||||
-edc ba98 7654 3---
|
||||
---- ---- ---- -2-- Keep sprites on screen (only sprites types 0 and 2)
|
||||
---- ---- ---- --1- Flip X
|
||||
---- ---- ---- ---0 Flip Y
|
||||
|
||||
0002.w Y Offset << 6 (Global)
|
||||
|
||||
|
||||
0004..000e.w ?
|
||||
|
||||
|
||||
0010.w X Offset << 6 #0
|
||||
0012.w Y Offset << 6 #0
|
||||
|
||||
0014.w X Offset << 6 #1
|
||||
0016.w Y Offset << 6 #1
|
||||
|
||||
0018.w X Offset << 6 #2
|
||||
001a.w Y Offset << 6 #2
|
||||
|
||||
001c.w X Offset << 6 #3
|
||||
001e.w Y Offset << 6 #3
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
/*
|
||||
[gtmr]
|
||||
|
||||
Initial self test:
|
||||
600000: 4BC0 94C0 4C40 94C0-0404 0002 0000 0000 (Layers 1 regs)
|
||||
680000: 4BC0 94C0 4C40 94C0-1C1C 0002 0000 0000 (Layers 2 regs)
|
||||
Race start:
|
||||
600000: DC00 7D00 DC80 7D00-0404 0002 0000 0000 (Layers 1 regs)
|
||||
680000: DC00 7D00 DC80 7D00-1C1C 0002 0000 0000 (Layers 2 regs)
|
||||
|
||||
[gtmr]
|
||||
700000: 0040 0000 0001 0180-0000 0000 0000 0000 (Sprites regs)
|
||||
700010: 0040 0000 0040 0000-0040 0000 2840 1E00 ; 1,0 .. a1,78
|
||||
; a0*2=screenx/2
|
||||
; 78*2=screeny/2
|
||||
FLIP ON:
|
||||
700000: 0043 FFC0 0001 0180-0000 0000 0000 0000 (Sprites regs)
|
||||
700010: 2FC0 4400 2FC0 4400-2FC0 4400 57C0 6200 ; bf,110 .. 15f,188
|
||||
; 15f-bf=a0! 188-110=78!
|
||||
|
||||
[berlwall]
|
||||
600000: 48CC 03C0 0001 0100-0000 0000 0000 0000 (Sprites regs)
|
||||
600010: 0000 0000 0000 0000-0000 0000 0000 0000
|
||||
FLIP ON:
|
||||
600000: 48CF FC00 0001 0100-0000 0000 0000 0000 (Sprites regs)
|
||||
600010: 0000 0000 0000 0000-0000 0000 0000 0000
|
||||
|
||||
[mgcrystl]
|
||||
900000: 4FCC 0000 0040 00C0-xxxx 0001 0001 0001 (Sprites regs)
|
||||
900010: 0000 FC40 A000 9C40-1E00 1A40 0000 FC40
|
||||
FLIP ON:
|
||||
900000: 4FCF 0000 0040 00C0-xxxx 0001 0001 0001 (Sprites regs)
|
||||
900010: 0000 0400 A000 A400-1E00 2200 0000 0400 ; +1f<<6 on y
|
||||
*/
|
||||
|
||||
READ16_MEMBER(kaneko16_sprite_device::kaneko16_sprites_regs_r)
|
||||
{
|
||||
return m_sprites_regs[offset];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(kaneko16_sprite_device::kaneko16_sprites_regs_w)
|
||||
{
|
||||
UINT16 new_data;
|
||||
|
||||
COMBINE_DATA(&m_sprites_regs[offset]);
|
||||
new_data = m_sprites_regs[offset];
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0:
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
m_sprite_flipx = new_data & 2;
|
||||
m_sprite_flipy = new_data & 1;
|
||||
|
||||
if(m_sprite_type == 0)
|
||||
m_keep_sprites = ~new_data & 4;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// logerror("CPU #0 PC %06X : Warning, sprites reg %04X <- %04X\n",cpu_get_pc(&space.device()),offset*2,data);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void kaneko16_sprite_device::kaneko16_render_sprites(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, UINT16* spriteram16, int spriteram16_bytes)
|
||||
{
|
||||
/* Sprites last (rendered with pdrawgfx, so they can slip
|
||||
in between the layers) */
|
||||
|
||||
if(m_keep_sprites)
|
||||
{
|
||||
/* keep sprites on screen */
|
||||
kaneko16_draw_sprites(machine,m_sprites_bitmap, cliprect, spriteram16, spriteram16_bytes);
|
||||
copybitmap_trans(bitmap,m_sprites_bitmap,0,0,0,0,cliprect,0);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_sprites_bitmap.fill(0, cliprect);
|
||||
kaneko16_draw_sprites(machine,bitmap,cliprect, spriteram16, spriteram16_bytes);
|
||||
}
|
||||
}
|
106
src/mame/video/kaneko_spr.h
Normal file
106
src/mame/video/kaneko_spr.h
Normal file
@ -0,0 +1,106 @@
|
||||
/* Kaneko Sprites */
|
||||
|
||||
/* berlwall, blazeon etc. */
|
||||
#define MCFG_DEVICE_ADD_VU002_SPRITES \
|
||||
MCFG_DEVICE_ADD("kan_spr", KANEKO16_SPRITE, 0) \
|
||||
kaneko16_sprite_device::set_type(*device, 0); \
|
||||
|
||||
/* gtmr, gtmr2, bloodwar etc. */
|
||||
#define MCFG_DEVICE_ADD_KC002_SPRITES \
|
||||
MCFG_DEVICE_ADD("kan_spr", KANEKO16_SPRITE, 0) \
|
||||
kaneko16_sprite_device::set_type(*device, 1); \
|
||||
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int sprite[4];
|
||||
} kaneko16_priority_t;
|
||||
|
||||
struct tempsprite
|
||||
{
|
||||
int code,color;
|
||||
int x,y;
|
||||
int xoffs,yoffs;
|
||||
int flipx,flipy;
|
||||
int priority;
|
||||
};
|
||||
|
||||
|
||||
|
||||
class kaneko16_sprite_device : public device_t
|
||||
{
|
||||
public:
|
||||
kaneko16_sprite_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
static void set_type(device_t &device, int type);
|
||||
static void set_altspacing(device_t &device, int spacing);
|
||||
static void set_fliptype(device_t &device, int fliptype);
|
||||
static void set_offsets(device_t &device, int xoffs, int yoffs);
|
||||
|
||||
static void set_priorities(device_t &device, int pri0, int pri1, int pri2, int pri3);
|
||||
|
||||
|
||||
|
||||
// sprite type: todo, different class instead (set when declaring device in MCFG)
|
||||
int m_sprite_type;
|
||||
|
||||
// alt ram addressing (set when declaring device in MCFG)
|
||||
// used on Berlin Wall.. it's the same sprite chip, so probably just a different RAM hookup on the PCB, maybe also
|
||||
// related to the 'COPY BOARD' protection check on one set? investigate..
|
||||
int m_altspacing;
|
||||
|
||||
// flip latching (set when declaring device in MCFG ) probably needs figuring out properly, only brapboys wants it?
|
||||
int m_sprite_fliptype;
|
||||
|
||||
// offsets (set when declaring device in MCFG )
|
||||
UINT16 m_sprite_xoffs;
|
||||
UINT16 m_sprite_yoffs;
|
||||
|
||||
// priority for mixing (set when declaring device in MCFG )
|
||||
kaneko16_priority_t m_priority;
|
||||
|
||||
|
||||
|
||||
// used in the bitmap clear functions
|
||||
int get_sprite_type(void)
|
||||
{
|
||||
return m_sprite_type;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// registers
|
||||
UINT16 m_sprite_flipx;
|
||||
UINT16 m_sprite_flipy;
|
||||
UINT16* m_sprites_regs;
|
||||
|
||||
struct tempsprite *m_first_sprite;
|
||||
int m_keep_sprites;
|
||||
bitmap_ind16 m_sprites_bitmap;
|
||||
|
||||
|
||||
void kaneko16_render_sprites(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, UINT16* spriteram16, int spriteram16_bytes);
|
||||
void kaneko16_draw_sprites(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, UINT16* spriteram16, int spriteram16_bytes);
|
||||
|
||||
void kaneko16_draw_sprites_custom(bitmap_ind16 &dest_bmp,const rectangle &clip,const gfx_element *gfx,
|
||||
UINT32 code,UINT32 color,int flipx,int flipy,int sx,int sy,
|
||||
int priority);
|
||||
|
||||
int kaneko16_parse_sprite_type012(running_machine &machine, int i, struct tempsprite *s, UINT16* spriteram16, int spriteram16_bytes);
|
||||
|
||||
|
||||
DECLARE_READ16_MEMBER(kaneko16_sprites_regs_r);
|
||||
DECLARE_WRITE16_MEMBER(kaneko16_sprites_regs_w);
|
||||
|
||||
|
||||
protected:
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
|
||||
private:
|
||||
|
||||
};
|
||||
|
||||
extern const device_type KANEKO16_SPRITE;
|
||||
|
Loading…
Reference in New Issue
Block a user