mirror of
https://github.com/holub/mame
synced 2025-04-22 08:22:15 +03:00
more reduction (nw)
This commit is contained in:
parent
4d723ce783
commit
e5a008c29e
@ -1150,7 +1150,7 @@ static ADDRESS_MAP_START( gx_base_memmap, AS_PROGRAM, 32, konamigx_state )
|
||||
AM_RANGE(0x200000, 0x3fffff) AM_ROM // main program ROM
|
||||
AM_RANGE(0x400000, 0x7fffff) AM_ROM // data ROM
|
||||
AM_RANGE(0xc00000, 0xc1ffff) AM_RAM AM_SHARE("workram") // work RAM
|
||||
AM_RANGE(0xd00000, 0xd01fff) AM_DEVREAD("k056832", k056832_device, altK056832_5bpp_rom_long_r)
|
||||
AM_RANGE(0xd00000, 0xd01fff) AM_DEVREAD("k056832", k056832_device, k_5bpp_rom_long_r)
|
||||
AM_RANGE(0xd20000, 0xd20fff) AM_READWRITE_LEGACY(K053247_long_r, K053247_long_w)
|
||||
AM_RANGE(0xd21000, 0xd23fff) AM_RAM
|
||||
AM_RANGE(0xd40000, 0xd4003f) AM_DEVWRITE("k056832", k056832_device, altK056832_long_w)
|
||||
@ -1168,8 +1168,8 @@ static ADDRESS_MAP_START( gx_base_memmap, AS_PROGRAM, 32, konamigx_state )
|
||||
AM_RANGE(0xd5c000, 0xd5c003) AM_READ_PORT("INPUTS")
|
||||
AM_RANGE(0xd5e000, 0xd5e003) AM_READ_PORT("SERVICE")
|
||||
AM_RANGE(0xd80000, 0xd8001f) AM_WRITE_LEGACY(K054338_long_w)
|
||||
AM_RANGE(0xda0000, 0xda1fff) AM_DEVREADWRITE("k056832", k056832_device, altK056832_ram_long_r, altK056832_ram_long_w)
|
||||
AM_RANGE(0xda2000, 0xda3fff) AM_DEVREADWRITE("k056832", k056832_device, altK056832_ram_long_r, altK056832_ram_long_w)
|
||||
AM_RANGE(0xda0000, 0xda1fff) AM_DEVREADWRITE("k056832", k056832_device, ram_long_r, ram_long_w)
|
||||
AM_RANGE(0xda2000, 0xda3fff) AM_DEVREADWRITE("k056832", k056832_device, ram_long_r, ram_long_w)
|
||||
#if GX_DEBUG
|
||||
AM_RANGE(0xd40000, 0xd4003f) AM_READ_LEGACY(altK056832_long_r)
|
||||
AM_RANGE(0xd50000, 0xd500ff) AM_READ_LEGACY(K055555_long_r)
|
||||
@ -3717,9 +3717,9 @@ static const GXGameInfoT gameDefs[] =
|
||||
{ "", -1, -1, -1, -1 },
|
||||
};
|
||||
|
||||
READ32_MEMBER( konamigx_state::altK056832_6bpp_rom_long_r )
|
||||
READ32_MEMBER( konamigx_state::k_6bpp_rom_long_r )
|
||||
{
|
||||
return m_k056832->altK056832_6bpp_rom_long_r(space,offset,mem_mask);
|
||||
return m_k056832->k_6bpp_rom_long_r(space,offset,mem_mask);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(konamigx_state,konamigx)
|
||||
@ -3810,7 +3810,7 @@ DRIVER_INIT_MEMBER(konamigx_state,konamigx)
|
||||
break;
|
||||
|
||||
case BPP66:
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0xd00000, 0xd01fff, read32_delegate(FUNC(konamigx_state::altK056832_6bpp_rom_long_r), this));
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0xd00000, 0xd01fff, read32_delegate(FUNC(konamigx_state::k_6bpp_rom_long_r), this));
|
||||
|
||||
case BPP6:
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0xd4a000, 0xd4a00f, read32_delegate(FUNC(konamigx_state::gx6bppspr_r),this));
|
||||
|
@ -203,7 +203,7 @@ READ16_MEMBER(mystwarr_state::sound_status_msb_r)
|
||||
|
||||
WRITE16_MEMBER(mystwarr_state::irq_ack_w)
|
||||
{
|
||||
m_k056832->altK056832_b_word_w(space, offset, data, mem_mask);
|
||||
m_k056832->b_word_w(space, offset, data, mem_mask);
|
||||
|
||||
if (offset == 3 && ACCESSING_BITS_0_7)
|
||||
{
|
||||
@ -267,8 +267,8 @@ static ADDRESS_MAP_START( mystwarr_map, AS_PROGRAM, 16, mystwarr_state )
|
||||
AM_RANGE(0x49a000, 0x49a001) AM_WRITE(sound_irq_w)
|
||||
AM_RANGE(0x49c000, 0x49c01f) AM_DEVREADWRITE8("k053252", k053252_device, read, write, 0x00ff)
|
||||
AM_RANGE(0x49e000, 0x49e007) AM_WRITE(irq_ack_w) // VSCCS (custom)
|
||||
AM_RANGE(0x600000, 0x601fff) AM_DEVREADWRITE("k056832", k056832_device,altK056832_ram_word_r,altK056832_ram_word_w)
|
||||
AM_RANGE(0x602000, 0x603fff) AM_DEVREADWRITE("k056832", k056832_device,altK056832_ram_word_r,altK056832_ram_word_w) // tilemap RAM mirror read(essential)
|
||||
AM_RANGE(0x600000, 0x601fff) AM_DEVREADWRITE("k056832", k056832_device,ram_word_r,ram_word_w)
|
||||
AM_RANGE(0x602000, 0x603fff) AM_DEVREADWRITE("k056832", k056832_device,ram_word_r,ram_word_w) // tilemap RAM mirror read(essential)
|
||||
AM_RANGE(0x680000, 0x683fff) AM_DEVREAD("k056832", k056832_device, altK056832_mw_rom_word_r)
|
||||
AM_RANGE(0x700000, 0x701fff) AM_RAM_WRITE(paletteram_xrgb_word_be_w) AM_SHARE("paletteram")
|
||||
#if MW_DEBUG
|
||||
@ -299,7 +299,7 @@ static ADDRESS_MAP_START( metamrph_map, AS_PROGRAM, 16, mystwarr_state )
|
||||
AM_RANGE(0x26800e, 0x26800f) AM_WRITE(sound_cmd2_w)
|
||||
AM_RANGE(0x268014, 0x268015) AM_READ(sound_status_r)
|
||||
AM_RANGE(0x268000, 0x26801f) AM_RAM
|
||||
AM_RANGE(0x26c000, 0x26c007) AM_DEVWRITE("k056832", k056832_device,altK056832_b_word_w)
|
||||
AM_RANGE(0x26c000, 0x26c007) AM_DEVWRITE("k056832", k056832_device,b_word_w)
|
||||
AM_RANGE(0x270000, 0x27003f) AM_DEVWRITE("k056832", k056832_device,m_word_w)
|
||||
AM_RANGE(0x274000, 0x274001) AM_READ_PORT("P1_P3")
|
||||
AM_RANGE(0x274002, 0x274003) AM_READ_PORT("P2_P4")
|
||||
@ -307,8 +307,8 @@ static ADDRESS_MAP_START( metamrph_map, AS_PROGRAM, 16, mystwarr_state )
|
||||
AM_RANGE(0x278002, 0x278003) AM_READ(eeprom_r)
|
||||
AM_RANGE(0x27c000, 0x27c001) AM_READNOP // watchdog lives here
|
||||
AM_RANGE(0x27c000, 0x27c001) AM_WRITE(mmeeprom_w)
|
||||
AM_RANGE(0x300000, 0x301fff) AM_DEVREADWRITE("k056832", k056832_device,altK056832_ram_word_r,altK056832_ram_word_w)
|
||||
AM_RANGE(0x302000, 0x303fff) AM_DEVREADWRITE("k056832", k056832_device,altK056832_ram_word_r,altK056832_ram_word_w) // tilemap RAM mirror read/write (essential)
|
||||
AM_RANGE(0x300000, 0x301fff) AM_DEVREADWRITE("k056832", k056832_device,ram_word_r,ram_word_w)
|
||||
AM_RANGE(0x302000, 0x303fff) AM_DEVREADWRITE("k056832", k056832_device,ram_word_r,ram_word_w) // tilemap RAM mirror read/write (essential)
|
||||
AM_RANGE(0x310000, 0x311fff) AM_DEVREAD("k056832", k056832_device, altK056832_mw_rom_word_r)
|
||||
AM_RANGE(0x320000, 0x321fff) AM_DEVREAD("k053250_1", k053250_device, rom_r)
|
||||
AM_RANGE(0x330000, 0x331fff) AM_RAM_WRITE(paletteram_xrgb_word_be_w) AM_SHARE("paletteram")
|
||||
@ -342,7 +342,7 @@ static ADDRESS_MAP_START( viostorm_map, AS_PROGRAM, 16, mystwarr_state )
|
||||
AM_RANGE(0x26800e, 0x26800f) AM_WRITE(sound_cmd2_w)
|
||||
AM_RANGE(0x268014, 0x268015) AM_READ(sound_status_r)
|
||||
AM_RANGE(0x268000, 0x26801f) AM_RAM
|
||||
AM_RANGE(0x26c000, 0x26c007) AM_DEVWRITE("k056832", k056832_device,altK056832_b_word_w)
|
||||
AM_RANGE(0x26c000, 0x26c007) AM_DEVWRITE("k056832", k056832_device,b_word_w)
|
||||
AM_RANGE(0x270000, 0x27003f) AM_DEVWRITE("k056832", k056832_device,m_word_w)
|
||||
AM_RANGE(0x274000, 0x274001) AM_READ_PORT("P1_P3")
|
||||
AM_RANGE(0x274002, 0x274003) AM_READ_PORT("P2_P4")
|
||||
@ -350,8 +350,8 @@ static ADDRESS_MAP_START( viostorm_map, AS_PROGRAM, 16, mystwarr_state )
|
||||
AM_RANGE(0x278002, 0x278003) AM_READ(eeprom_r)
|
||||
AM_RANGE(0x27c000, 0x27c001) AM_READNOP // watchdog lives here
|
||||
AM_RANGE(0x27c000, 0x27c001) AM_WRITE(mmeeprom_w)
|
||||
AM_RANGE(0x300000, 0x301fff) AM_DEVREADWRITE("k056832", k056832_device,altK056832_ram_word_r,altK056832_ram_word_w)
|
||||
AM_RANGE(0x302000, 0x303fff) AM_DEVREADWRITE("k056832", k056832_device,altK056832_ram_word_r,altK056832_ram_word_w) // tilemap RAM mirror read(essential)
|
||||
AM_RANGE(0x300000, 0x301fff) AM_DEVREADWRITE("k056832", k056832_device,ram_word_r,ram_word_w)
|
||||
AM_RANGE(0x302000, 0x303fff) AM_DEVREADWRITE("k056832", k056832_device,ram_word_r,ram_word_w) // tilemap RAM mirror read(essential)
|
||||
AM_RANGE(0x304000, 0x3041ff) AM_RAM
|
||||
AM_RANGE(0x310000, 0x311fff) AM_DEVREAD("k056832", k056832_device, altK056832_mw_rom_word_r)
|
||||
AM_RANGE(0x330000, 0x331fff) AM_RAM_WRITE(paletteram_xrgb_word_be_w) AM_SHARE("paletteram")
|
||||
@ -439,11 +439,11 @@ static ADDRESS_MAP_START( martchmp_map, AS_PROGRAM, 16, mystwarr_state )
|
||||
AM_RANGE(0x418000, 0x41801f) AM_RAM // sound regs fall through
|
||||
AM_RANGE(0x41a000, 0x41a001) AM_WRITE(sound_irq_w)
|
||||
AM_RANGE(0x41c000, 0x41c01f) AM_DEVREADWRITE8("k053252", k053252_device, read, write, 0x00ff) // CCU
|
||||
AM_RANGE(0x41e000, 0x41e007) AM_DEVWRITE("k056832", k056832_device,altK056832_b_word_w) // VSCCS
|
||||
AM_RANGE(0x41e000, 0x41e007) AM_DEVWRITE("k056832", k056832_device,b_word_w) // VSCCS
|
||||
AM_RANGE(0x480000, 0x483fff) AM_READWRITE(K053247_martchmp_word_r,K053247_martchmp_word_w) AM_SHARE("spriteram") // sprite RAM
|
||||
AM_RANGE(0x600000, 0x601fff) AM_RAM_WRITE(paletteram_xrgb_word_be_w) AM_SHARE("paletteram") // palette RAM
|
||||
AM_RANGE(0x680000, 0x681fff) AM_DEVREADWRITE("k056832", k056832_device,altK056832_ram_word_r,altK056832_ram_word_w) // tilemap RAM
|
||||
AM_RANGE(0x682000, 0x683fff) AM_DEVREADWRITE("k056832", k056832_device,altK056832_ram_word_r,altK056832_ram_word_w) // tilemap RAM mirror read/write (essential)
|
||||
AM_RANGE(0x680000, 0x681fff) AM_DEVREADWRITE("k056832", k056832_device,ram_word_r,ram_word_w) // tilemap RAM
|
||||
AM_RANGE(0x682000, 0x683fff) AM_DEVREADWRITE("k056832", k056832_device,ram_word_r,ram_word_w) // tilemap RAM mirror read/write (essential)
|
||||
AM_RANGE(0x700000, 0x703fff) AM_DEVREAD("k056832", k056832_device, altK056832_mw_rom_word_r) // tile ROM readback
|
||||
#if MW_DEBUG
|
||||
AM_RANGE(0x400000, 0x4000ff) AM_READ_LEGACY(K055555_word_r)
|
||||
@ -460,8 +460,8 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( dadandrn_map, AS_PROGRAM, 16, mystwarr_state )
|
||||
AM_RANGE(0x000000, 0x1fffff) AM_ROM // main program and data ROM
|
||||
AM_RANGE(0x400000, 0x40ffff) AM_READWRITE(K053247_scattered_word_r,K053247_scattered_word_w) AM_SHARE("spriteram")
|
||||
AM_RANGE(0x410000, 0x411fff) AM_DEVREADWRITE("k056832", k056832_device,altK056832_ram_word_r,altK056832_ram_word_w) // tilemap RAM
|
||||
AM_RANGE(0x412000, 0x413fff) AM_DEVREADWRITE("k056832", k056832_device,altK056832_ram_word_r,altK056832_ram_word_w) // tilemap RAM mirror read/write (essential)
|
||||
AM_RANGE(0x410000, 0x411fff) AM_DEVREADWRITE("k056832", k056832_device,ram_word_r,ram_word_w) // tilemap RAM
|
||||
AM_RANGE(0x412000, 0x413fff) AM_DEVREADWRITE("k056832", k056832_device,ram_word_r,ram_word_w) // tilemap RAM mirror read/write (essential)
|
||||
AM_RANGE(0x420000, 0x421fff) AM_RAM_WRITE(paletteram_xrgb_word_be_w) AM_SHARE("paletteram")
|
||||
AM_RANGE(0x430000, 0x430007) AM_WRITE_LEGACY(K053246_word_w)
|
||||
AM_RANGE(0x440000, 0x443fff) AM_DEVREAD("k056832", k056832_device, altK056832_mw_rom_word_r)
|
||||
@ -470,7 +470,7 @@ static ADDRESS_MAP_START( dadandrn_map, AS_PROGRAM, 16, mystwarr_state )
|
||||
AM_RANGE(0x460000, 0x46001f) AM_WRITEONLY AM_SHARE("k053936_0_ct16")
|
||||
AM_RANGE(0x470000, 0x470fff) AM_RAM AM_SHARE("k053936_0_li16")
|
||||
AM_RANGE(0x480000, 0x48003f) AM_DEVWRITE("k056832", k056832_device,m_word_w) // VACSET
|
||||
AM_RANGE(0x482000, 0x482007) AM_DEVWRITE("k056832", k056832_device,altK056832_b_word_w) // VSCCS
|
||||
AM_RANGE(0x482000, 0x482007) AM_DEVWRITE("k056832", k056832_device,b_word_w) // VSCCS
|
||||
AM_RANGE(0x484000, 0x484003) AM_WRITE(ddd_053936_clip_w)
|
||||
AM_RANGE(0x486000, 0x48601f) AM_DEVREADWRITE8("k053252", k053252_device, read, write, 0x00ff)
|
||||
AM_RANGE(0x488000, 0x4880ff) AM_WRITE_LEGACY(K055555_word_w)
|
||||
@ -507,8 +507,8 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( gaiapols_map, AS_PROGRAM, 16, mystwarr_state )
|
||||
AM_RANGE(0x000000, 0x2fffff) AM_ROM // main program
|
||||
AM_RANGE(0x400000, 0x40ffff) AM_READWRITE(K053247_scattered_word_r,K053247_scattered_word_w) AM_SHARE("spriteram")
|
||||
AM_RANGE(0x410000, 0x411fff) AM_DEVREADWRITE("k056832", k056832_device,altK056832_ram_word_r,altK056832_ram_word_w) // tilemap RAM
|
||||
AM_RANGE(0x412000, 0x413fff) AM_DEVREADWRITE("k056832", k056832_device,altK056832_ram_word_r,altK056832_ram_word_w) // tilemap RAM mirror read / write (essential)
|
||||
AM_RANGE(0x410000, 0x411fff) AM_DEVREADWRITE("k056832", k056832_device,ram_word_r,ram_word_w) // tilemap RAM
|
||||
AM_RANGE(0x412000, 0x413fff) AM_DEVREADWRITE("k056832", k056832_device,ram_word_r,ram_word_w) // tilemap RAM mirror read / write (essential)
|
||||
AM_RANGE(0x420000, 0x421fff) AM_RAM_WRITE(paletteram_xrgb_word_be_w) AM_SHARE("paletteram")
|
||||
AM_RANGE(0x430000, 0x430007) AM_WRITE_LEGACY(K053246_word_w)
|
||||
AM_RANGE(0x440000, 0x441fff) AM_DEVREAD("k056832", k056832_device, altK056832_mw_rom_word_r)
|
||||
@ -517,7 +517,7 @@ static ADDRESS_MAP_START( gaiapols_map, AS_PROGRAM, 16, mystwarr_state )
|
||||
AM_RANGE(0x460000, 0x46001f) AM_WRITEONLY AM_SHARE("k053936_0_ct16")
|
||||
AM_RANGE(0x470000, 0x470fff) AM_RAM AM_SHARE("k053936_0_li16")
|
||||
AM_RANGE(0x480000, 0x48003f) AM_DEVWRITE("k056832", k056832_device,m_word_w) // VACSET
|
||||
AM_RANGE(0x482000, 0x482007) AM_DEVWRITE("k056832", k056832_device,altK056832_b_word_w) // VSCCS
|
||||
AM_RANGE(0x482000, 0x482007) AM_DEVWRITE("k056832", k056832_device,b_word_w) // VSCCS
|
||||
AM_RANGE(0x484000, 0x484003) AM_WRITE(ddd_053936_clip_w)
|
||||
AM_RANGE(0x486000, 0x48601f) AM_DEVREADWRITE8("k053252", k053252_device, read, write, 0x00ff)
|
||||
AM_RANGE(0x488000, 0x4880ff) AM_WRITE_LEGACY(K055555_word_w)
|
||||
|
@ -103,7 +103,7 @@ public:
|
||||
|
||||
void _gxcommoninitnosprites(running_machine &machine);
|
||||
void _gxcommoninit(running_machine &machine);
|
||||
DECLARE_READ32_MEMBER( altK056832_6bpp_rom_long_r );
|
||||
DECLARE_READ32_MEMBER( k_6bpp_rom_long_r );
|
||||
void konamigx_mixer(running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect,
|
||||
tilemap_t *sub1, int sub1flags,
|
||||
tilemap_t *sub2, int sub2flags,
|
||||
|
@ -524,6 +524,7 @@ void k056832_device::mark_page_dirty( int page )
|
||||
mark_all_lines_dirty(page);
|
||||
}
|
||||
|
||||
|
||||
void k056832_device::mark_plane_dirty( int layer )
|
||||
{
|
||||
int tilemode, i;
|
||||
@ -540,6 +541,9 @@ void k056832_device::mark_plane_dirty( int layer )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void k056832_device::mark_all_tilemaps_dirty( )
|
||||
{
|
||||
int i;
|
||||
@ -554,12 +558,6 @@ void k056832_device::mark_all_tilemaps_dirty( )
|
||||
}
|
||||
}
|
||||
|
||||
/* moo.c needs to call this in its VIDEO_UPDATE */
|
||||
void k056832_device::mark_all_tmaps_dirty( )
|
||||
{
|
||||
mark_all_tilemaps_dirty();
|
||||
}
|
||||
|
||||
void k056832_device::update_page_layout( )
|
||||
{
|
||||
int layer, rowstart, rowspan, colstart, colspan, r, c, page_idx, setlayer;
|
||||
@ -613,6 +611,9 @@ void k056832_device::update_page_layout( )
|
||||
mark_all_tilemaps_dirty();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int k056832_device::get_lookup( int bits )
|
||||
{
|
||||
int res;
|
||||
@ -708,6 +709,10 @@ void k056832_device::change_rambank( )
|
||||
mark_all_tilemaps_dirty();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int k056832_device::get_current_rambank( )
|
||||
{
|
||||
int bank = m_regs[0x19];
|
||||
@ -727,6 +732,9 @@ void k056832_device::change_rombank( )
|
||||
m_cur_gfx_banks = bank % m_num_gfx_banks;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void k056832_device::set_tile_bank( int bank )
|
||||
{
|
||||
m_uses_tile_banks = 1;
|
||||
@ -785,6 +793,7 @@ int k056832_device::rom_read_b( int offset, int blksize, int blksize2, int zeros
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
READ16_MEMBER( k056832_device::k_5bpp_rom_word_r )
|
||||
{
|
||||
if (mem_mask == 0xff00)
|
||||
@ -832,6 +841,9 @@ READ32_MEMBER( k056832_device::k_6bpp_rom_long_r )
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
READ16_MEMBER( k056832_device::rom_word_r )
|
||||
{
|
||||
int addr = 0x2000 * m_cur_gfx_banks + 2 * offset;
|
||||
@ -957,6 +969,10 @@ READ16_MEMBER( k056832_device::ram_half_word_r )
|
||||
return m_videoram[m_selected_page_x4096 + (((offset << 1) & 0xffe) | ((offset >> 11) ^ 1))];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
READ32_MEMBER( k056832_device::ram_long_r )
|
||||
{
|
||||
UINT16 *pMem = &m_videoram[m_selected_page_x4096 + offset * 2];
|
||||
@ -1092,6 +1108,8 @@ WRITE16_MEMBER( k056832_device::ram_word_w )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
WRITE16_MEMBER( k056832_device::ram_half_word_w )
|
||||
{
|
||||
UINT16 *adr = &m_videoram[m_selected_page_x4096 + (((offset << 1) & 0xffe) | 1)];
|
||||
@ -1133,6 +1151,9 @@ WRITE32_MEMBER( k056832_device::ram_long_w )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
WRITE32_MEMBER( k056832_device::unpaged_ram_long_w )
|
||||
{
|
||||
UINT16 *tile_ptr;
|
||||
@ -1273,6 +1294,125 @@ WRITE16_MEMBER( k056832_device::word_w )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
WRITE16_MEMBER( k056832_device::m_word_w )
|
||||
{
|
||||
int layer, flip, mask, i;
|
||||
UINT32 old_data, new_data;
|
||||
|
||||
old_data = m_regs[offset];
|
||||
COMBINE_DATA(&m_regs[offset]);
|
||||
new_data = m_regs[offset];
|
||||
|
||||
if (new_data != old_data)
|
||||
{
|
||||
switch(offset)
|
||||
{
|
||||
/* -x-- ---- dotclock select: 0=8Mhz, 1=6Mhz (not used by GX)
|
||||
* --x- ---- screen flip y
|
||||
* ---x ---- screen flip x
|
||||
* ---- --x- external linescroll RAM page enable
|
||||
*/
|
||||
case 0x00/2:
|
||||
if ((new_data & 0x30) != (old_data & 0x30))
|
||||
{
|
||||
flip = 0;
|
||||
if (new_data & 0x20) flip |= TILEMAP_FLIPY;
|
||||
if (new_data & 0x10) flip |= TILEMAP_FLIPX;
|
||||
for (i=0; i<K056832_PAGE_COUNT; i++)
|
||||
{
|
||||
m_tilemap[i]->set_flip(flip);
|
||||
}
|
||||
}
|
||||
|
||||
if ((new_data & 0x02) != (old_data & 0x02))
|
||||
{
|
||||
change_rambank();
|
||||
}
|
||||
break;
|
||||
|
||||
/* -------- -----xxx external irqlines enable (not used by GX)
|
||||
* -------- xx------ tilemap attribute config (FBIT0 and FBIT1)
|
||||
*/
|
||||
//case 0x06/2: break;
|
||||
|
||||
// -------- ----DCBA tile mode: 0=512x1, 1=8x8
|
||||
// -------- DCBA---- synchronous scroll: 0=off, 1=on
|
||||
case 0x08/2:
|
||||
for (layer=0; layer<4; layer++)
|
||||
{
|
||||
mask = 1<<layer;
|
||||
i = new_data & mask;
|
||||
if (i != (old_data & mask))
|
||||
{
|
||||
m_layer_tile_mode[layer] = i;
|
||||
mark_plane_dirty(layer);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
/* -------- ------xx layer A linescroll config
|
||||
* -------- ----xx-- layer B linescroll config
|
||||
* -------- --xx---- layer C linescroll config
|
||||
* -------- xx------ layer D linescroll config
|
||||
*
|
||||
* 0: linescroll
|
||||
* 2: rowscroll
|
||||
* 3: xy scroll
|
||||
*/
|
||||
//case 0x0a/2: break;
|
||||
|
||||
case 0x32/2:
|
||||
change_rambank();
|
||||
break;
|
||||
|
||||
case 0x34/2: /* ROM bank select for checksum */
|
||||
case 0x36/2: /* secondary ROM bank select for use with tile banking */
|
||||
change_rombank();
|
||||
break;
|
||||
|
||||
// extended tile address
|
||||
//case 0x38/2: break;
|
||||
|
||||
// 12 bit (signed) horizontal offset if global HFLIP enabled
|
||||
//case 0x3a/2: break;
|
||||
|
||||
// 11 bit (signed) vertical offset if global VFLIP enabled
|
||||
//case 0x3c/2: break;
|
||||
|
||||
default:
|
||||
layer = offset & 3;
|
||||
|
||||
if (offset >= 0x10/2 && offset <= 0x16/2)
|
||||
{
|
||||
m_y[layer] = (new_data&0x18)>>3;
|
||||
m_h[layer] = (new_data&0x3);
|
||||
m_active_layer = layer;
|
||||
update_page_layout();
|
||||
} else
|
||||
|
||||
if (offset >= 0x18/2 && offset <= 0x1e/2)
|
||||
{
|
||||
m_x[layer] = (new_data&0x18)>>3;
|
||||
m_w[layer] = (new_data&0x03);
|
||||
m_active_layer = layer;
|
||||
update_page_layout();
|
||||
} else
|
||||
|
||||
if (offset >= 0x20/2 && offset <= 0x26/2)
|
||||
{
|
||||
m_dy[layer] = (INT16)new_data;
|
||||
} else
|
||||
|
||||
if (offset >= 0x28/2 && offset <= 0x2e/2)
|
||||
{
|
||||
m_dx[layer] = (INT16)new_data;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WRITE32_MEMBER( k056832_device::long_w )
|
||||
{
|
||||
// GX does access of all 3 widths (8/16/32) so we can't do the
|
||||
@ -1283,11 +1423,25 @@ WRITE32_MEMBER( k056832_device::long_w )
|
||||
word_w(space, offset + 1, data, mem_mask);
|
||||
}
|
||||
|
||||
WRITE32_MEMBER( k056832_device::altK056832_long_w )
|
||||
{
|
||||
// GX does access of all 3 widths (8/16/32) so we can't do the
|
||||
// if (ACCESSING_xxx) trick. in particular, 8-bit writes
|
||||
// are used to the tilemap bank register.
|
||||
offset <<= 1;
|
||||
m_word_w(space, offset, data>>16, mem_mask >> 16);
|
||||
m_word_w(space, offset+1, data, mem_mask);
|
||||
}
|
||||
|
||||
|
||||
WRITE16_MEMBER( k056832_device::b_word_w )
|
||||
{
|
||||
COMBINE_DATA(&m_regsb[offset]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
WRITE8_MEMBER( k056832_device::write )
|
||||
{
|
||||
if (offset & 1)
|
||||
@ -2047,10 +2201,6 @@ void k056832_device::set_layer_association( int status )
|
||||
m_default_layer_association = status;
|
||||
}
|
||||
|
||||
int k056832_device::get_layer_association( )
|
||||
{
|
||||
return(m_layer_association);
|
||||
}
|
||||
|
||||
void k056832_device::set_layer_offs( int layer, int offsx, int offsy )
|
||||
{
|
||||
@ -2124,143 +2274,13 @@ READ16_MEMBER( k056832_device::b_word_r )
|
||||
/* */
|
||||
/***************************************************************************/
|
||||
|
||||
#define altK056832_mark_line_dirty(P,L) if (L<0x100) m_line_dirty[P][L>>5] |= 1<<(L&0x1f)
|
||||
#define altK056832_mark_all_lines_dirty(P) m_all_lines_dirty[P] = 1
|
||||
|
||||
void k056832_device::altK056832_mark_page_dirty(int page)
|
||||
{
|
||||
if (m_page_tile_mode[page])
|
||||
m_tilemap[page]->mark_all_dirty();
|
||||
else
|
||||
altK056832_mark_all_lines_dirty(page);
|
||||
}
|
||||
|
||||
void k056832_device::altK056832_mark_plane_dirty(int layer)
|
||||
{
|
||||
int tilemode, i;
|
||||
|
||||
tilemode = m_layer_tile_mode[layer];
|
||||
|
||||
for (i=0; i<K056832_PAGE_COUNT; i++)
|
||||
{
|
||||
if (m_layer_assoc_with_page[i] == layer)
|
||||
{
|
||||
m_page_tile_mode[i] = tilemode;
|
||||
altK056832_mark_page_dirty(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void k056832_device::altK056832_MarkAllTilemapsDirty(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i=0; i<K056832_PAGE_COUNT; i++)
|
||||
{
|
||||
if (m_layer_assoc_with_page[i] != -1)
|
||||
{
|
||||
m_page_tile_mode[i] = m_layer_tile_mode[m_layer_assoc_with_page[i]];
|
||||
altK056832_mark_page_dirty(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void k056832_device::altK056832_UpdatePageLayout(void)
|
||||
{
|
||||
int layer, rowstart, rowspan, colstart, colspan, r, c, pageIndex, setlayer;
|
||||
|
||||
// enable layer association by default
|
||||
m_layer_association = m_default_layer_association;
|
||||
|
||||
// disable association if a layer grabs the entire 4x4 map (happens in Twinbee and Dadandarn)
|
||||
for (layer=0; layer<4; layer++)
|
||||
{
|
||||
if (!m_y[layer] && !m_x[layer] && m_h[layer]==3 && m_w[layer]==3)
|
||||
{
|
||||
m_layer_association = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// winning spike and vsnet soccer don't like our layer association implementation..
|
||||
if (m_djmain_hack==2)
|
||||
m_layer_association = 0;
|
||||
|
||||
// disable all tilemaps
|
||||
for (pageIndex=0; pageIndex<K056832_PAGE_COUNT; pageIndex++)
|
||||
{
|
||||
m_layer_assoc_with_page[pageIndex] = -1;
|
||||
}
|
||||
|
||||
|
||||
// enable associated tilemaps
|
||||
for (layer=0; layer<4; layer++)
|
||||
{
|
||||
rowstart = m_y[layer];
|
||||
colstart = m_x[layer];
|
||||
rowspan = m_h[layer]+1;
|
||||
colspan = m_w[layer]+1;
|
||||
|
||||
setlayer = (m_layer_association) ? layer : m_active_layer;
|
||||
|
||||
for (r=0; r<rowspan; r++)
|
||||
{
|
||||
for (c=0; c<colspan; c++)
|
||||
{
|
||||
pageIndex = (((rowstart + r) & 3) << 2) + ((colstart + c) & 3);
|
||||
if (!(m_djmain_hack==1) || m_layer_assoc_with_page[pageIndex] == -1) //*
|
||||
m_layer_assoc_with_page[pageIndex] = setlayer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// refresh associated tilemaps
|
||||
altK056832_MarkAllTilemapsDirty();
|
||||
}
|
||||
|
||||
void k056832_device::altK056832_change_rambank(void)
|
||||
{
|
||||
/* ------xx page col
|
||||
* ---xx--- page row
|
||||
*/
|
||||
int bank = m_regs[0x19];
|
||||
|
||||
if (m_regs[0] & 0x02) // external linescroll enable
|
||||
{
|
||||
m_selected_page = K056832_PAGE_COUNT;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_selected_page = ((bank>>1)&0xc)|(bank&3);
|
||||
}
|
||||
m_selected_page_x4096 = m_selected_page << 12;
|
||||
|
||||
// refresh associated tilemaps
|
||||
altK056832_MarkAllTilemapsDirty();
|
||||
}
|
||||
|
||||
void k056832_device::altK056832_change_rombank(void)
|
||||
{
|
||||
int bank;
|
||||
|
||||
if (m_uses_tile_banks) /* Asterix */
|
||||
{
|
||||
bank = (m_regs[0x1a] >> 8) | (m_regs[0x1b] << 4) | (m_cur_tile_bank << 6);
|
||||
}
|
||||
else
|
||||
{
|
||||
bank = m_regs[0x1a] | (m_regs[0x1b] << 16);
|
||||
}
|
||||
|
||||
m_cur_gfx_banks = bank % m_num_gfx_banks;
|
||||
}
|
||||
|
||||
|
||||
void k056832_device::altK056832_postload()
|
||||
{
|
||||
altK056832_UpdatePageLayout();
|
||||
altK056832_change_rambank();
|
||||
altK056832_change_rombank();
|
||||
update_page_layout();
|
||||
change_rambank();
|
||||
change_rombank();
|
||||
}
|
||||
|
||||
void k056832_device::altK056832_vh_start(running_machine &machine, const char *gfx_memory_region, int bpp, int big,
|
||||
@ -2473,10 +2493,10 @@ void k056832_device::altK056832_vh_start(running_machine &machine, const char *g
|
||||
memset(m_regs, 0x00, sizeof(m_regs) );
|
||||
memset(m_regsb, 0x00, sizeof(m_regsb) );
|
||||
|
||||
altK056832_UpdatePageLayout();
|
||||
update_page_layout();
|
||||
|
||||
altK056832_change_rambank();
|
||||
altK056832_change_rombank();
|
||||
change_rambank();
|
||||
change_rombank();
|
||||
|
||||
machine.save().save_pointer(NAME(m_videoram), 0x10000);
|
||||
machine.save().save_item(NAME(m_regs));
|
||||
@ -2496,91 +2516,7 @@ void k056832_device::altK056832_vh_start(running_machine &machine, const char *g
|
||||
|
||||
|
||||
|
||||
/* generic helper routine for ROM checksumming */
|
||||
int k056832_device::altK056832_rom_read_b(running_machine &machine, int offset, int blksize, int blksize2, int zerosec)
|
||||
{
|
||||
UINT8 *rombase;
|
||||
int base, ret;
|
||||
|
||||
rombase = (UINT8 *)machine.root_device().memregion(altK056832_memory_region)->base();
|
||||
|
||||
if ((m_rom_half) && (zerosec))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// add in the bank offset
|
||||
offset += (m_cur_gfx_banks * 0x2000);
|
||||
|
||||
// figure out the base of the ROM block
|
||||
base = (offset / blksize) * blksize2;
|
||||
|
||||
// get the starting offset of the proper word inside the block
|
||||
base += (offset % blksize) * 2;
|
||||
|
||||
if (m_rom_half)
|
||||
{
|
||||
ret = rombase[base+1];
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = rombase[base];
|
||||
m_rom_half = 1;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
READ32_MEMBER( k056832_device::altK056832_5bpp_rom_long_r )
|
||||
{
|
||||
if (mem_mask == 0xff000000)
|
||||
{
|
||||
return altK056832_rom_read_b(space.machine(), offset*4, 4, 5, 0)<<24;
|
||||
}
|
||||
else if (mem_mask == 0x00ff0000)
|
||||
{
|
||||
return altK056832_rom_read_b(space.machine(), offset*4+1, 4, 5, 0)<<16;
|
||||
}
|
||||
else if (mem_mask == 0x0000ff00)
|
||||
{
|
||||
return altK056832_rom_read_b(space.machine(), offset*4+2, 4, 5, 0)<<8;
|
||||
}
|
||||
else if (mem_mask == 0x000000ff)
|
||||
{
|
||||
return altK056832_rom_read_b(space.machine(), offset*4+3, 4, 5, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG(("Non-byte read of tilemap ROM, PC=%x (mask=%x)\n", space.device().safe_pc(), mem_mask));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
READ32_MEMBER( k056832_device::altK056832_6bpp_rom_long_r )
|
||||
{
|
||||
if (mem_mask == 0xff000000)
|
||||
{
|
||||
return altK056832_rom_read_b(space.machine(), offset*4, 4, 6, 0)<<24;
|
||||
}
|
||||
else if (mem_mask == 0x00ff0000)
|
||||
{
|
||||
return altK056832_rom_read_b(space.machine(), offset*4+1, 4, 6, 0)<<16;
|
||||
}
|
||||
else if (mem_mask == 0x0000ff00)
|
||||
{
|
||||
return altK056832_rom_read_b(space.machine(), offset*4+2, 4, 6, 0)<<8;
|
||||
}
|
||||
else if (mem_mask == 0x000000ff)
|
||||
{
|
||||
return altK056832_rom_read_b(space.machine(), offset*4+3, 4, 6, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG(("Non-byte read of tilemap ROM, PC=%x (mask=%x)\n", space.device().safe_pc(), mem_mask));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// data is arranged like this:
|
||||
@ -2651,203 +2587,11 @@ READ16_MEMBER( k056832_device::altK056832_mw_rom_word_r )
|
||||
}
|
||||
|
||||
|
||||
/* only one page is mapped to videoram at a time through a window */
|
||||
READ16_MEMBER( k056832_device::altK056832_ram_word_r )
|
||||
{
|
||||
// reading from tile RAM resets the ROM readback "half" offset
|
||||
m_rom_half = 0;
|
||||
|
||||
return m_videoram[m_selected_page_x4096+offset];
|
||||
}
|
||||
|
||||
|
||||
READ32_MEMBER( k056832_device::altK056832_ram_long_r )
|
||||
{
|
||||
UINT16 *pMem = &m_videoram[m_selected_page_x4096+offset*2];
|
||||
|
||||
// reading from tile RAM resets the ROM readback "half" offset
|
||||
m_rom_half = 0;
|
||||
|
||||
return(pMem[0]<<16 | pMem[1]);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER( k056832_device::altK056832_ram_word_w )
|
||||
{
|
||||
UINT16 *tile_ptr;
|
||||
UINT16 old_mask, old_data;
|
||||
|
||||
tile_ptr = &m_videoram[m_selected_page_x4096+offset];
|
||||
old_mask = ~mem_mask;
|
||||
old_data = *tile_ptr;
|
||||
data = (data & mem_mask) | (old_data & old_mask);
|
||||
|
||||
if(data != old_data)
|
||||
{
|
||||
offset >>= 1;
|
||||
*tile_ptr = data;
|
||||
|
||||
if (m_page_tile_mode[m_selected_page])
|
||||
m_tilemap[m_selected_page]->mark_tile_dirty(offset);
|
||||
else
|
||||
altK056832_mark_line_dirty(m_selected_page, offset);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
WRITE32_MEMBER( k056832_device::altK056832_ram_long_w )
|
||||
{
|
||||
UINT16 *tile_ptr;
|
||||
UINT32 old_mask, old_data;
|
||||
|
||||
tile_ptr = &m_videoram[m_selected_page_x4096+offset*2];
|
||||
old_mask = ~mem_mask;
|
||||
old_data = (UINT32)tile_ptr[0]<<16 | (UINT32)tile_ptr[1];
|
||||
data = (data & mem_mask) | (old_data & old_mask);
|
||||
|
||||
if (data != old_data)
|
||||
{
|
||||
tile_ptr[0] = data>>16;
|
||||
tile_ptr[1] = data;
|
||||
|
||||
if (m_page_tile_mode[m_selected_page])
|
||||
m_tilemap[m_selected_page]->mark_tile_dirty(offset);
|
||||
else
|
||||
altK056832_mark_line_dirty(m_selected_page, offset);
|
||||
}
|
||||
}
|
||||
|
||||
WRITE16_MEMBER( k056832_device::m_word_w )
|
||||
{
|
||||
int layer, flip, mask, i;
|
||||
UINT32 old_data, new_data;
|
||||
|
||||
old_data = m_regs[offset];
|
||||
COMBINE_DATA(&m_regs[offset]);
|
||||
new_data = m_regs[offset];
|
||||
|
||||
if (new_data != old_data)
|
||||
{
|
||||
switch(offset)
|
||||
{
|
||||
/* -x-- ---- dotclock select: 0=8Mhz, 1=6Mhz (not used by GX)
|
||||
* --x- ---- screen flip y
|
||||
* ---x ---- screen flip x
|
||||
* ---- --x- external linescroll RAM page enable
|
||||
*/
|
||||
case 0x00/2:
|
||||
if ((new_data & 0x30) != (old_data & 0x30))
|
||||
{
|
||||
flip = 0;
|
||||
if (new_data & 0x20) flip |= TILEMAP_FLIPY;
|
||||
if (new_data & 0x10) flip |= TILEMAP_FLIPX;
|
||||
for (i=0; i<K056832_PAGE_COUNT; i++)
|
||||
{
|
||||
m_tilemap[i]->set_flip(flip);
|
||||
}
|
||||
}
|
||||
|
||||
if ((new_data & 0x02) != (old_data & 0x02))
|
||||
{
|
||||
altK056832_change_rambank();
|
||||
}
|
||||
break;
|
||||
|
||||
/* -------- -----xxx external irqlines enable (not used by GX)
|
||||
* -------- xx------ tilemap attribute config (FBIT0 and FBIT1)
|
||||
*/
|
||||
//case 0x06/2: break;
|
||||
|
||||
// -------- ----DCBA tile mode: 0=512x1, 1=8x8
|
||||
// -------- DCBA---- synchronous scroll: 0=off, 1=on
|
||||
case 0x08/2:
|
||||
for (layer=0; layer<4; layer++)
|
||||
{
|
||||
mask = 1<<layer;
|
||||
i = new_data & mask;
|
||||
if (i != (old_data & mask))
|
||||
{
|
||||
m_layer_tile_mode[layer] = i;
|
||||
altK056832_mark_plane_dirty(layer);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
/* -------- ------xx layer A linescroll config
|
||||
* -------- ----xx-- layer B linescroll config
|
||||
* -------- --xx---- layer C linescroll config
|
||||
* -------- xx------ layer D linescroll config
|
||||
*
|
||||
* 0: linescroll
|
||||
* 2: rowscroll
|
||||
* 3: xy scroll
|
||||
*/
|
||||
//case 0x0a/2: break;
|
||||
|
||||
case 0x32/2:
|
||||
altK056832_change_rambank();
|
||||
break;
|
||||
|
||||
case 0x34/2: /* ROM bank select for checksum */
|
||||
case 0x36/2: /* secondary ROM bank select for use with tile banking */
|
||||
altK056832_change_rombank();
|
||||
break;
|
||||
|
||||
// extended tile address
|
||||
//case 0x38/2: break;
|
||||
|
||||
// 12 bit (signed) horizontal offset if global HFLIP enabled
|
||||
//case 0x3a/2: break;
|
||||
|
||||
// 11 bit (signed) vertical offset if global VFLIP enabled
|
||||
//case 0x3c/2: break;
|
||||
|
||||
default:
|
||||
layer = offset & 3;
|
||||
|
||||
if (offset >= 0x10/2 && offset <= 0x16/2)
|
||||
{
|
||||
m_y[layer] = (new_data&0x18)>>3;
|
||||
m_h[layer] = (new_data&0x3);
|
||||
m_active_layer = layer;
|
||||
altK056832_UpdatePageLayout();
|
||||
} else
|
||||
|
||||
if (offset >= 0x18/2 && offset <= 0x1e/2)
|
||||
{
|
||||
m_x[layer] = (new_data&0x18)>>3;
|
||||
m_w[layer] = (new_data&0x03);
|
||||
m_active_layer = layer;
|
||||
altK056832_UpdatePageLayout();
|
||||
} else
|
||||
|
||||
if (offset >= 0x20/2 && offset <= 0x26/2)
|
||||
{
|
||||
m_dy[layer] = (INT16)new_data;
|
||||
} else
|
||||
|
||||
if (offset >= 0x28/2 && offset <= 0x2e/2)
|
||||
{
|
||||
m_dx[layer] = (INT16)new_data;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WRITE32_MEMBER( k056832_device::altK056832_long_w )
|
||||
{
|
||||
// GX does access of all 3 widths (8/16/32) so we can't do the
|
||||
// if (ACCESSING_xxx) trick. in particular, 8-bit writes
|
||||
// are used to the tilemap bank register.
|
||||
offset <<= 1;
|
||||
m_word_w(space, offset, data>>16, mem_mask >> 16);
|
||||
m_word_w(space, offset+1, data, mem_mask);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER( k056832_device::altK056832_b_word_w )
|
||||
{
|
||||
COMBINE_DATA( &m_regsb[offset] );
|
||||
}
|
||||
|
||||
|
||||
int k056832_device::altK056832_update_linemap(running_machine &machine, bitmap_rgb32 &bitmap, int page, int flags)
|
||||
@ -3161,7 +2905,7 @@ void k056832_device::m_tilemap_draw(running_machine &machine, bitmap_rgb32 &bitm
|
||||
if (last_colorbase[pageIndex] != new_colorbase)
|
||||
{
|
||||
last_colorbase[pageIndex] = new_colorbase;
|
||||
altK056832_mark_page_dirty(pageIndex);
|
||||
mark_page_dirty(pageIndex);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -3257,18 +3001,11 @@ void k056832_device::m_tilemap_draw(running_machine &machine, bitmap_rgb32 &bitm
|
||||
} // end of function
|
||||
|
||||
|
||||
int k056832_device::altK056832_get_LayerAssociation(void)
|
||||
int k056832_device::get_layer_association(void)
|
||||
{
|
||||
return(m_layer_association);
|
||||
}
|
||||
|
||||
void k056832_device::altK056832_set_LayerOffset(int layer, int offsx, int offsy)
|
||||
{
|
||||
m_layer_offs[layer][0] = offsx;
|
||||
m_layer_offs[layer][1] = offsy;
|
||||
}
|
||||
|
||||
|
||||
void k056832_device::altK056832_set_UpdateMode(int mode)
|
||||
{
|
||||
m_k055555_use = mode;
|
||||
|
@ -85,7 +85,7 @@ public:
|
||||
DECLARE_WRITE8_MEMBER( write );
|
||||
DECLARE_WRITE8_MEMBER( b_w );
|
||||
void mark_plane_dirty(int num);
|
||||
void mark_all_tmaps_dirty();
|
||||
void mark_all_tilemaps_dirty();
|
||||
void tilemap_draw(bitmap_ind16 &bitmap, const rectangle &cliprect, int num, UINT32 flags, UINT32 priority);
|
||||
void tilemap_draw(bitmap_rgb32 &bitmap, const rectangle &cliprect, int num, UINT32 flags, UINT32 priority);
|
||||
void tilemap_draw_dj(bitmap_rgb32 &bitmap, const rectangle &cliprect, int layer, UINT32 flags, UINT32 priority);
|
||||
@ -198,7 +198,6 @@ private:
|
||||
TILE_GET_INFO_MEMBER(get_tile_infof);
|
||||
|
||||
void mark_page_dirty(int page);
|
||||
void mark_all_tilemaps_dirty();
|
||||
void update_page_layout();
|
||||
void change_rambank();
|
||||
void change_rombank();
|
||||
@ -223,31 +222,18 @@ public:
|
||||
int (*scrolld)[4][2],
|
||||
void (*callback)(running_machine &machine, int layer, int *code, int *color, int *flags),
|
||||
int djmain_hack);
|
||||
DECLARE_READ16_MEMBER( altK056832_ram_word_r );
|
||||
DECLARE_WRITE16_MEMBER( altK056832_ram_word_w );
|
||||
DECLARE_READ32_MEMBER( altK056832_5bpp_rom_long_r );
|
||||
DECLARE_READ32_MEMBER( altK056832_6bpp_rom_long_r );
|
||||
|
||||
DECLARE_READ16_MEMBER( altK056832_mw_rom_word_r );
|
||||
DECLARE_WRITE16_MEMBER( m_word_w ); // "VRAM" registers
|
||||
DECLARE_WRITE16_MEMBER( altK056832_b_word_w );
|
||||
void altK056832_mark_plane_dirty(int num);
|
||||
void altK056832_MarkAllTilemapsDirty(void);
|
||||
void m_tilemap_draw(running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect, int num, UINT32 flags, UINT32 priority);
|
||||
int altK056832_get_LayerAssociation(void);
|
||||
void altK056832_set_LayerOffset(int layer, int offsx, int offsy);
|
||||
void altK056832_set_UpdateMode(int mode);
|
||||
|
||||
DECLARE_READ32_MEMBER( altK056832_ram_long_r );
|
||||
DECLARE_WRITE32_MEMBER( altK056832_ram_long_w );
|
||||
void altK056832_set_UpdateMode(int mode); // k055555 hook
|
||||
|
||||
DECLARE_WRITE32_MEMBER( altK056832_long_w );
|
||||
DECLARE_WRITE32_MEMBER( altK056832_b_long_w );
|
||||
|
||||
void altK056832_mark_page_dirty(int page);
|
||||
void altK056832_change_rambank(void);
|
||||
void altK056832_change_rombank(void);
|
||||
void altK056832_UpdatePageLayout(void);
|
||||
int altK056832_rom_read_b(running_machine &machine, int offset, int blksize, int blksize2, int zerosec);
|
||||
void altK056832_postload(void);
|
||||
|
||||
void m_tilemap_draw(running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect, int num, UINT32 flags, UINT32 priority);
|
||||
private:
|
||||
int altK056832_update_linemap(running_machine &machine, bitmap_rgb32 &bitmap, int page, int flags);
|
||||
|
||||
|
||||
|
@ -2044,10 +2044,10 @@ void konamigx_state::_gxcommoninitnosprites(running_machine &machine)
|
||||
// In most cases only a constant is needed to add to the X offsets to yield correct
|
||||
// displacement. This should be done by the CCU but the CRT timings have not been
|
||||
// figured out.
|
||||
m_k056832->altK056832_set_LayerOffset(0, -2, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(1, 0, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(2, 2, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(3, 3, 0);
|
||||
m_k056832->set_layer_offs(0, -2, 0);
|
||||
m_k056832->set_layer_offs(1, 0, 0);
|
||||
m_k056832->set_layer_offs(2, 2, 0);
|
||||
m_k056832->set_layer_offs(3, 3, 0);
|
||||
|
||||
konamigx_has_dual_screen = 0;
|
||||
konamigx_current_frame = 0;
|
||||
@ -2119,10 +2119,10 @@ VIDEO_START_MEMBER(konamigx_state,dragoonj)
|
||||
|
||||
_gxcommoninitnosprites(machine());
|
||||
|
||||
m_k056832->altK056832_set_LayerOffset(0, -2+1, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(1, 0+1, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(2, 2+1, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(3, 3+1, 0);
|
||||
m_k056832->set_layer_offs(0, -2+1, 0);
|
||||
m_k056832->set_layer_offs(1, 0+1, 0);
|
||||
m_k056832->set_layer_offs(2, 2+1, 0);
|
||||
m_k056832->set_layer_offs(3, 3+1, 0);
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER(konamigx_state,le2)
|
||||
@ -2181,10 +2181,10 @@ VIDEO_START_MEMBER(konamigx_state,konamigx_type3)
|
||||
// K053936GP_set_offset(0, -30, -1);
|
||||
K053936_set_offset(0, -30, +1);
|
||||
|
||||
m_k056832->altK056832_set_LayerOffset(0, -52, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(1, -48, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(2, -48, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(3, -48, 0);
|
||||
m_k056832->set_layer_offs(0, -52, 0);
|
||||
m_k056832->set_layer_offs(1, -48, 0);
|
||||
m_k056832->set_layer_offs(2, -48, 0);
|
||||
m_k056832->set_layer_offs(3, -48, 0);
|
||||
|
||||
konamigx_has_dual_screen = 1;
|
||||
konamigx_palformat = 1;
|
||||
@ -2207,10 +2207,10 @@ VIDEO_START_MEMBER(konamigx_state,konamigx_type4)
|
||||
gx_rozenable = 0;
|
||||
gx_specialrozenable = 3;
|
||||
|
||||
m_k056832->altK056832_set_LayerOffset(0, -27, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(1, -25, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(2, -24, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(3, -22, 0);
|
||||
m_k056832->set_layer_offs(0, -27, 0);
|
||||
m_k056832->set_layer_offs(1, -25, 0);
|
||||
m_k056832->set_layer_offs(2, -24, 0);
|
||||
m_k056832->set_layer_offs(3, -22, 0);
|
||||
|
||||
K053936_wraparound_enable(0, 0);
|
||||
K053936GP_set_offset(0, -36, 1);
|
||||
@ -2238,10 +2238,10 @@ VIDEO_START_MEMBER(konamigx_state,konamigx_type4_vsn)
|
||||
gx_rozenable = 0;
|
||||
gx_specialrozenable = 3;
|
||||
|
||||
m_k056832->altK056832_set_LayerOffset(0, -52, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(1, -48, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(2, -48, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(3, -48, 0);
|
||||
m_k056832->set_layer_offs(0, -52, 0);
|
||||
m_k056832->set_layer_offs(1, -48, 0);
|
||||
m_k056832->set_layer_offs(2, -48, 0);
|
||||
m_k056832->set_layer_offs(3, -48, 0);
|
||||
|
||||
K053936_wraparound_enable(0, 1); // wraparound doesn't work properly with the custom drawing function anyway, see the crowd in vsnet and rushhero
|
||||
K053936GP_set_offset(0, -30, 0);
|
||||
@ -2269,10 +2269,10 @@ VIDEO_START_MEMBER(konamigx_state,konamigx_type4_sd2)
|
||||
gx_specialrozenable = 3;
|
||||
|
||||
|
||||
m_k056832->altK056832_set_LayerOffset(0, -29, -1);
|
||||
m_k056832->altK056832_set_LayerOffset(1, -27, -1);
|
||||
m_k056832->altK056832_set_LayerOffset(2, -26, -1);
|
||||
m_k056832->altK056832_set_LayerOffset(3, -24, -1);
|
||||
m_k056832->set_layer_offs(0, -29, -1);
|
||||
m_k056832->set_layer_offs(1, -27, -1);
|
||||
m_k056832->set_layer_offs(2, -26, -1);
|
||||
m_k056832->set_layer_offs(3, -24, -1);
|
||||
|
||||
|
||||
K053936_wraparound_enable(0, 0);
|
||||
@ -2308,10 +2308,10 @@ VIDEO_START_MEMBER(konamigx_state,opengolf)
|
||||
|
||||
_gxcommoninitnosprites(machine());
|
||||
|
||||
m_k056832->altK056832_set_LayerOffset(0, -2+1, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(1, 0+1, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(2, 2+1, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(3, 3+1, 0);
|
||||
m_k056832->set_layer_offs(0, -2+1, 0);
|
||||
m_k056832->set_layer_offs(1, 0+1, 0);
|
||||
m_k056832->set_layer_offs(2, 2+1, 0);
|
||||
m_k056832->set_layer_offs(3, 3+1, 0);
|
||||
|
||||
gx_psac_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac1a_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128);
|
||||
gx_psac_tilemap2 = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac1b_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128);
|
||||
@ -2346,10 +2346,10 @@ VIDEO_START_MEMBER(konamigx_state,racinfrc)
|
||||
|
||||
_gxcommoninitnosprites(machine());
|
||||
|
||||
m_k056832->altK056832_set_LayerOffset(0, -2+1, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(1, 0+1, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(2, 2+1, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(3, 3+1, 0);
|
||||
m_k056832->set_layer_offs(0, -2+1, 0);
|
||||
m_k056832->set_layer_offs(1, 0+1, 0);
|
||||
m_k056832->set_layer_offs(2, 2+1, 0);
|
||||
m_k056832->set_layer_offs(3, 3+1, 0);
|
||||
|
||||
gx_psac_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac1a_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128);
|
||||
gx_psac_tilemap2 = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(konamigx_state::get_gx_psac1b_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 128);
|
||||
@ -2392,7 +2392,7 @@ UINT32 konamigx_state::screen_update_konamigx(screen_device &screen, bitmap_rgb3
|
||||
if (gx_tilemode == 0)
|
||||
{
|
||||
// driver approximates tile update in mode 0 for speed
|
||||
unchained = m_k056832->altK056832_get_LayerAssociation();
|
||||
unchained = m_k056832->get_layer_association();
|
||||
for (i=0; i<4; i++)
|
||||
{
|
||||
newbase = K055555_get_palette_index(i)<<6;
|
||||
@ -2401,7 +2401,7 @@ UINT32 konamigx_state::screen_update_konamigx(screen_device &screen, bitmap_rgb3
|
||||
layer_colorbase[i] = newbase;
|
||||
|
||||
if (unchained)
|
||||
m_k056832->altK056832_mark_plane_dirty(i);
|
||||
m_k056832->mark_plane_dirty(i);
|
||||
else
|
||||
dirty = 1;
|
||||
}
|
||||
@ -2428,7 +2428,7 @@ UINT32 konamigx_state::screen_update_konamigx(screen_device &screen, bitmap_rgb3
|
||||
}
|
||||
}
|
||||
|
||||
if (dirty) m_k056832->altK056832_MarkAllTilemapsDirty();
|
||||
if (dirty) m_k056832->mark_all_tilemaps_dirty();
|
||||
|
||||
// Type-1
|
||||
if (gx_specialrozenable == 1)
|
||||
|
@ -97,7 +97,7 @@ UINT32 moo_state::screen_update_moo(screen_device &screen, bitmap_rgb32 &bitmap,
|
||||
}
|
||||
}
|
||||
if (dirty)
|
||||
m_k056832->mark_all_tmaps_dirty();
|
||||
m_k056832->mark_all_tilemaps_dirty();
|
||||
}
|
||||
|
||||
layers[0] = 1;
|
||||
|
@ -175,10 +175,10 @@ VIDEO_START_MEMBER(mystwarr_state,gaiapols)
|
||||
|
||||
konamigx_mixer_init(machine(), 0);
|
||||
|
||||
m_k056832->altK056832_set_LayerOffset(0, -2+2-1, 0-1);
|
||||
m_k056832->altK056832_set_LayerOffset(1, 0+2, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(2, 2+2, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(3, 3+2, 0);
|
||||
m_k056832->set_layer_offs(0, -2+2-1, 0-1);
|
||||
m_k056832->set_layer_offs(1, 0+2, 0);
|
||||
m_k056832->set_layer_offs(2, 2+2, 0);
|
||||
m_k056832->set_layer_offs(3, 3+2, 0);
|
||||
|
||||
K053936_wraparound_enable(0, 1);
|
||||
K053936GP_set_offset(0, -10, 0); // floor tiles in demo loop2 (Elaine vs. boss)
|
||||
@ -217,10 +217,10 @@ VIDEO_START_MEMBER(mystwarr_state,dadandrn)
|
||||
|
||||
konamigx_mixer_primode(1);
|
||||
|
||||
m_k056832->altK056832_set_LayerOffset(0, -2+4, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(1, 0+4, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(2, 2+4, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(3, 3+4, 0);
|
||||
m_k056832->set_layer_offs(0, -2+4, 0);
|
||||
m_k056832->set_layer_offs(1, 0+4, 0);
|
||||
m_k056832->set_layer_offs(2, 2+4, 0);
|
||||
m_k056832->set_layer_offs(3, 3+4, 0);
|
||||
|
||||
K053936_wraparound_enable(0, 1);
|
||||
K053936GP_set_offset(0, -8, 0); // Brainy's laser
|
||||
@ -244,10 +244,10 @@ VIDEO_START_MEMBER(mystwarr_state,mystwarr)
|
||||
|
||||
konamigx_mixer_init(machine(), 0);
|
||||
|
||||
m_k056832->altK056832_set_LayerOffset(0, -2-3, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(1, 0-3, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(2, 2-3, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(3, 3-3, 0);
|
||||
m_k056832->set_layer_offs(0, -2-3, 0);
|
||||
m_k056832->set_layer_offs(1, 0-3, 0);
|
||||
m_k056832->set_layer_offs(2, 2-3, 0);
|
||||
m_k056832->set_layer_offs(3, 3-3, 0);
|
||||
|
||||
m_cbparam = 0;
|
||||
}
|
||||
@ -268,10 +268,10 @@ VIDEO_START_MEMBER(mystwarr_state,metamrph)
|
||||
konamigx_mixer_init(machine(), 0);
|
||||
|
||||
// other reference, floor at first boss
|
||||
m_k056832->altK056832_set_LayerOffset(0, -2+4, 0); // text
|
||||
m_k056832->altK056832_set_LayerOffset(1, 0+4, 0); // attract sea
|
||||
m_k056832->altK056832_set_LayerOffset(2, 2+4, 0); // attract red monster in background of sea
|
||||
m_k056832->altK056832_set_LayerOffset(3, 3+4, 0); // attract sky background to sea
|
||||
m_k056832->set_layer_offs(0, -2+4, 0); // text
|
||||
m_k056832->set_layer_offs(1, 0+4, 0); // attract sea
|
||||
m_k056832->set_layer_offs(2, 2+4, 0); // attract red monster in background of sea
|
||||
m_k056832->set_layer_offs(3, 3+4, 0); // attract sky background to sea
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER(mystwarr_state,viostorm)
|
||||
@ -289,10 +289,10 @@ VIDEO_START_MEMBER(mystwarr_state,viostorm)
|
||||
|
||||
konamigx_mixer_init(machine(), 0);
|
||||
|
||||
m_k056832->altK056832_set_LayerOffset(0, -2+1, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(1, 0+1, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(2, 2+1, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(3, 3+1, 0);
|
||||
m_k056832->set_layer_offs(0, -2+1, 0);
|
||||
m_k056832->set_layer_offs(1, 0+1, 0);
|
||||
m_k056832->set_layer_offs(2, 2+1, 0);
|
||||
m_k056832->set_layer_offs(3, 3+1, 0);
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER(mystwarr_state,martchmp)
|
||||
@ -310,10 +310,10 @@ VIDEO_START_MEMBER(mystwarr_state,martchmp)
|
||||
|
||||
konamigx_mixer_init(machine(), 0);
|
||||
|
||||
m_k056832->altK056832_set_LayerOffset(0, -2-4, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(1, 0-4, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(2, 2-4, 0);
|
||||
m_k056832->altK056832_set_LayerOffset(3, 3-4, 0);
|
||||
m_k056832->set_layer_offs(0, -2-4, 0);
|
||||
m_k056832->set_layer_offs(1, 0-4, 0);
|
||||
m_k056832->set_layer_offs(2, 2-4, 0);
|
||||
m_k056832->set_layer_offs(3, 3-4, 0);
|
||||
|
||||
K054338_invert_alpha(0);
|
||||
}
|
||||
@ -330,7 +330,7 @@ UINT32 mystwarr_state::screen_update_mystwarr(screen_device &screen, bitmap_rgb3
|
||||
{
|
||||
old = m_layer_colorbase[i];
|
||||
m_layer_colorbase[i] = K055555_get_palette_index(i)<<4;
|
||||
if( old != m_layer_colorbase[i] ) m_k056832->altK056832_mark_plane_dirty(i);
|
||||
if( old != m_layer_colorbase[i] ) m_k056832->mark_plane_dirty(i);
|
||||
}
|
||||
|
||||
m_sprite_colorbase = K055555_get_palette_index(4)<<5;
|
||||
@ -347,7 +347,7 @@ UINT32 mystwarr_state::screen_update_metamrph(screen_device &screen, bitmap_rgb3
|
||||
{
|
||||
old = m_layer_colorbase[i];
|
||||
m_layer_colorbase[i] = K055555_get_palette_index(i)<<4;
|
||||
if (old != m_layer_colorbase[i]) m_k056832->altK056832_mark_plane_dirty(i);
|
||||
if (old != m_layer_colorbase[i]) m_k056832->mark_plane_dirty(i);
|
||||
}
|
||||
|
||||
m_sprite_colorbase = K055555_get_palette_index(4)<<4;
|
||||
@ -364,7 +364,7 @@ UINT32 mystwarr_state::screen_update_martchmp(screen_device &screen, bitmap_rgb3
|
||||
{
|
||||
old = m_layer_colorbase[i];
|
||||
m_layer_colorbase[i] = K055555_get_palette_index(i)<<4;
|
||||
if (old != m_layer_colorbase[i]) m_k056832->altK056832_mark_plane_dirty(i);
|
||||
if (old != m_layer_colorbase[i]) m_k056832->mark_plane_dirty(i);
|
||||
}
|
||||
|
||||
m_sprite_colorbase = K055555_get_palette_index(4)<<5;
|
||||
@ -498,7 +498,7 @@ UINT32 mystwarr_state::screen_update_dadandrn(screen_device &screen, bitmap_rgb3
|
||||
rozmode = GXSUB_8BPP;
|
||||
}
|
||||
|
||||
if (m_k056832->altK056832_get_LayerAssociation())
|
||||
if (m_k056832->get_layer_association())
|
||||
{
|
||||
for (i=0; i<4; i++)
|
||||
{
|
||||
@ -506,7 +506,7 @@ UINT32 mystwarr_state::screen_update_dadandrn(screen_device &screen, bitmap_rgb3
|
||||
if (m_layer_colorbase[i] != newbase)
|
||||
{
|
||||
m_layer_colorbase[i] = newbase;
|
||||
m_k056832->altK056832_mark_plane_dirty(i);
|
||||
m_k056832->mark_plane_dirty(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -521,7 +521,7 @@ UINT32 mystwarr_state::screen_update_dadandrn(screen_device &screen, bitmap_rgb3
|
||||
dirty = 1;
|
||||
}
|
||||
}
|
||||
if (dirty) m_k056832->altK056832_MarkAllTilemapsDirty();
|
||||
if (dirty) m_k056832->mark_all_tilemaps_dirty();
|
||||
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user