more konami collapse (nw)

This commit is contained in:
David Haywood 2013-07-13 16:07:38 +00:00
parent c96889730f
commit fbfd4e457d
10 changed files with 179 additions and 202 deletions

View File

@ -517,7 +517,7 @@ WRITE32_MEMBER(konamigx_state::control_w)
m_soundcpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); m_soundcpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
} }
K053246_set_OBJCHA_line((data&0x100000) ? ASSERT_LINE : CLEAR_LINE); m_k055673->alt_K053246_set_OBJCHA_line((data&0x100000) ? ASSERT_LINE : CLEAR_LINE);
konamigx_wrport2 = (data>>16)&0xff; konamigx_wrport2 = (data>>16)&0xff;
} }
@ -618,13 +618,13 @@ TIMER_CALLBACK_MEMBER(konamigx_state::dmaend_callback)
} }
} }
static void dmastart_callback(int data) void konamigx_state::dmastart_callback(int data)
{ {
// raise the DMA busy flag // raise the DMA busy flag
gx_rdport1_3 |= 2; gx_rdport1_3 |= 2;
// begin transfer if DMAEN(bit4 of OBJSET1) is set (see p.48) // begin transfer if DMAEN(bit4 of OBJSET1) is set (see p.48)
if (K053246_read_register(5) & 0x10) if (m_k055673->alt_K053246_read_register(5) & 0x10)
{ {
// disabled by default since it doesn't work too well in MAME // disabled by default since it doesn't work too well in MAME
konamigx_objdma(); konamigx_objdma();
@ -907,12 +907,12 @@ READ32_MEMBER(konamigx_state::le2_gun_V_r)
READ32_MEMBER(konamigx_state::gx5bppspr_r) READ32_MEMBER(konamigx_state::gx5bppspr_r)
{ {
return (K055673_rom_word_r(space, offset*2+1, 0xffff) | K055673_rom_word_r(space, offset*2, 0xffff)<<16); return (m_k055673->alt_K055673_rom_word_r(space, offset*2+1, 0xffff) | m_k055673->alt_K055673_rom_word_r(space, offset*2, 0xffff)<<16);
} }
READ32_MEMBER(konamigx_state::gx6bppspr_r) READ32_MEMBER(konamigx_state::gx6bppspr_r)
{ {
return (K055673_GX6bpp_rom_word_r(space, offset*2+1, 0xffff) | K055673_GX6bpp_rom_word_r(space, offset*2, 0xffff)<<16); return (m_k055673->alt_K055673_GX6bpp_rom_word_r(space, offset*2+1, 0xffff) | m_k055673->alt_K055673_GX6bpp_rom_word_r(space, offset*2, 0xffff)<<16);
} }
READ32_MEMBER(konamigx_state::type1_roz_r1) READ32_MEMBER(konamigx_state::type1_roz_r1)
@ -1153,12 +1153,12 @@ static ADDRESS_MAP_START( gx_base_memmap, AS_PROGRAM, 32, konamigx_state )
AM_RANGE(0x400000, 0x7fffff) AM_ROM // data ROM AM_RANGE(0x400000, 0x7fffff) AM_ROM // data ROM
AM_RANGE(0xc00000, 0xc1ffff) AM_RAM AM_SHARE("workram") // work RAM AM_RANGE(0xc00000, 0xc1ffff) AM_RAM AM_SHARE("workram") // work RAM
AM_RANGE(0xd00000, 0xd01fff) AM_DEVREAD("k056832", k056832_device, k_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(0xd20000, 0xd20fff) AM_DEVREADWRITE("k055673", k055673_device, alt_K053247_long_r, alt_K053247_long_w)
AM_RANGE(0xd21000, 0xd23fff) AM_RAM AM_RANGE(0xd21000, 0xd23fff) AM_RAM
AM_RANGE(0xd40000, 0xd4003f) AM_DEVWRITE("k056832", k056832_device, long_w) AM_RANGE(0xd40000, 0xd4003f) AM_DEVWRITE("k056832", k056832_device, long_w)
AM_RANGE(0xd44000, 0xd4400f) AM_WRITE(konamigx_tilebank_w) AM_RANGE(0xd44000, 0xd4400f) AM_WRITE(konamigx_tilebank_w)
AM_RANGE(0xd48000, 0xd48007) AM_WRITE_LEGACY(K053246_long_w) AM_RANGE(0xd48000, 0xd48007) AM_DEVWRITE("k055673", k055673_device, alt_K053246_long_w)
AM_RANGE(0xd4a010, 0xd4a01f) AM_WRITE_LEGACY(K053247_reg_long_w) AM_RANGE(0xd4a010, 0xd4a01f) AM_DEVWRITE("k055673", k055673_device, alt_K053247_reg_long_w)
AM_RANGE(0xd4c000, 0xd4c01f) AM_READWRITE(ccu_r, ccu_w) AM_RANGE(0xd4c000, 0xd4c01f) AM_READWRITE(ccu_r, ccu_w)
AM_RANGE(0xd4e000, 0xd4e01f) AM_WRITENOP AM_RANGE(0xd4e000, 0xd4e01f) AM_WRITENOP
AM_RANGE(0xd50000, 0xd500ff) AM_DEVWRITE("k055555", k055555_device, K055555_long_w) AM_RANGE(0xd50000, 0xd500ff) AM_DEVWRITE("k055555", k055555_device, K055555_long_w)
@ -1796,6 +1796,7 @@ static MACHINE_CONFIG_START( konamigx, konamigx_state )
MCFG_K056832_ADD_NOINTF("k056832"/*, konamigx_k056832_intf*/) MCFG_K056832_ADD_NOINTF("k056832"/*, konamigx_k056832_intf*/)
MCFG_K055555_ADD("k055555") MCFG_K055555_ADD("k055555")
MCFG_K055673_ADD_NOINTF("k055673")
MCFG_VIDEO_START_OVERRIDE(konamigx_state,konamigx_5bpp) MCFG_VIDEO_START_OVERRIDE(konamigx_state,konamigx_5bpp)

View File

@ -530,7 +530,7 @@ static MACHINE_CONFIG_START( moo, moo_state )
MCFG_VIDEO_START_OVERRIDE(moo_state,moo) MCFG_VIDEO_START_OVERRIDE(moo_state,moo)
MCFG_K053247_ADD("k053246", moo_k053247_intf) MCFG_K053246_ADD("k053246", moo_k053247_intf)
MCFG_K056832_ADD("k056832", moo_k056832_intf) MCFG_K056832_ADD("k056832", moo_k056832_intf)
MCFG_K053251_ADD("k053251") MCFG_K053251_ADD("k053251")
MCFG_K054338_ADD("k054338", moo_k054338_intf) MCFG_K054338_ADD("k054338", moo_k054338_intf)
@ -573,7 +573,7 @@ static MACHINE_CONFIG_START( moobl, moo_state )
MCFG_VIDEO_START_OVERRIDE(moo_state,moo) MCFG_VIDEO_START_OVERRIDE(moo_state,moo)
MCFG_K053247_ADD("k053246", moo_k053247_intf) MCFG_K053246_ADD("k053246", moo_k053247_intf)
MCFG_K056832_ADD("k056832", moo_k056832_intf) MCFG_K056832_ADD("k056832", moo_k056832_intf)
MCFG_K053251_ADD("k053251") MCFG_K053251_ADD("k053251")
MCFG_K054338_ADD("k054338", moo_k054338_intf) MCFG_K054338_ADD("k054338", moo_k054338_intf)
@ -594,7 +594,7 @@ static MACHINE_CONFIG_DERIVED( bucky, moo )
MCFG_K054000_ADD("k054000") MCFG_K054000_ADD("k054000")
MCFG_DEVICE_REMOVE("k053246") MCFG_DEVICE_REMOVE("k053246")
MCFG_K053247_ADD("k053246", bucky_k053247_intf) // diff x offset MCFG_K053246_ADD("k053246", bucky_k053247_intf) // diff x offset
/* video hardware */ /* video hardware */
MCFG_PALETTE_LENGTH(4096) MCFG_PALETTE_LENGTH(4096)

View File

@ -129,7 +129,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(mystwarr_state::metamrph_interrupt)
m_maincpu->set_input_line(M68K_IRQ_6, HOLD_LINE); m_maincpu->set_input_line(M68K_IRQ_6, HOLD_LINE);
if(scanline == 248) if(scanline == 248)
if (K053246_is_IRQ_enabled()) m_maincpu->set_input_line(M68K_IRQ_5, HOLD_LINE); if (m_k055673->alt_K053246_is_IRQ_enabled()) m_maincpu->set_input_line(M68K_IRQ_5, HOLD_LINE);
} }
TIMER_DEVICE_CALLBACK_MEMBER(mystwarr_state::mchamp_interrupt) TIMER_DEVICE_CALLBACK_MEMBER(mystwarr_state::mchamp_interrupt)
@ -140,7 +140,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(mystwarr_state::mchamp_interrupt)
if(scanline == 247) if(scanline == 247)
{ {
if (K053246_is_IRQ_enabled()) m_maincpu->set_input_line(M68K_IRQ_6, HOLD_LINE); if (m_k055673->alt_K053246_is_IRQ_enabled()) m_maincpu->set_input_line(M68K_IRQ_6, HOLD_LINE);
} }
if(scanline == 23) if(scanline == 23)
@ -222,7 +222,7 @@ READ16_MEMBER(mystwarr_state::K053247_scattered_word_r)
else else
{ {
offset = (offset & 0x0007) | ((offset & 0x7f80) >> 4); offset = (offset & 0x0007) | ((offset & 0x7f80) >> 4);
return K053247_word_r(space,offset,mem_mask); return m_k055673->alt_K053247_word_r(space,offset,mem_mask);
} }
} }
@ -237,7 +237,7 @@ WRITE16_MEMBER(mystwarr_state::K053247_scattered_word_w)
{ {
offset = (offset & 0x0007) | ((offset & 0x7f80) >> 4); offset = (offset & 0x0007) | ((offset & 0x7f80) >> 4);
K053247_word_w(space,offset,data,mem_mask); m_k055673->alt_K053247_word_w(space,offset,data,mem_mask);
} }
} }
@ -248,9 +248,9 @@ static ADDRESS_MAP_START( mystwarr_map, AS_PROGRAM, 16, mystwarr_state )
AM_RANGE(0x200000, 0x20ffff) AM_RAM AM_SHARE("gx_workram") AM_RANGE(0x200000, 0x20ffff) AM_RAM AM_SHARE("gx_workram")
AM_RANGE(0x400000, 0x40ffff) AM_READWRITE(K053247_scattered_word_r,K053247_scattered_word_w) AM_SHARE("spriteram") AM_RANGE(0x400000, 0x40ffff) AM_READWRITE(K053247_scattered_word_r,K053247_scattered_word_w) AM_SHARE("spriteram")
AM_RANGE(0x480000, 0x4800ff) AM_DEVWRITE("k055555", k055555_device, K055555_word_w) AM_RANGE(0x480000, 0x4800ff) AM_DEVWRITE("k055555", k055555_device, K055555_word_w)
AM_RANGE(0x482000, 0x48200f) AM_READ_LEGACY(K055673_rom_word_r) AM_RANGE(0x482000, 0x48200f) AM_DEVWRITE("k055673", k055673_device, alt_K053246_word_w)
AM_RANGE(0x482010, 0x48201f) AM_WRITE_LEGACY(K053247_reg_word_w) AM_RANGE(0x482010, 0x48201f) AM_DEVWRITE("k055673", k055673_device,alt_K053247_reg_word_w)
AM_RANGE(0x484000, 0x484007) AM_WRITE_LEGACY(K053246_word_w) AM_RANGE(0x484000, 0x484007) AM_DEVWRITE("k055673", k055673_device, alt_K053246_word_w)
AM_RANGE(0x48a000, 0x48a01f) AM_WRITE_LEGACY(K054338_word_w) AM_RANGE(0x48a000, 0x48a01f) AM_WRITE_LEGACY(K054338_word_w)
AM_RANGE(0x48c000, 0x48c03f) AM_DEVWRITE("k056832", k056832_device,word_w) AM_RANGE(0x48c000, 0x48c03f) AM_DEVWRITE("k056832", k056832_device,word_w)
AM_RANGE(0x490000, 0x490001) AM_WRITE(mweeprom_w) AM_RANGE(0x490000, 0x490001) AM_WRITE(mweeprom_w)
@ -283,11 +283,11 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( metamrph_map, AS_PROGRAM, 16, mystwarr_state ) static ADDRESS_MAP_START( metamrph_map, AS_PROGRAM, 16, mystwarr_state )
AM_RANGE(0x000000, 0x1fffff) AM_ROM // main program AM_RANGE(0x000000, 0x1fffff) AM_ROM // main program
AM_RANGE(0x200000, 0x20ffff) AM_RAM AM_SHARE("gx_workram") AM_RANGE(0x200000, 0x20ffff) AM_RAM AM_SHARE("gx_workram")
AM_RANGE(0x210000, 0x210fff) AM_READWRITE_LEGACY(K053247_word_r,K053247_word_w) AM_RANGE(0x210000, 0x210fff) AM_DEVREADWRITE("k055673", k055673_device,alt_K053247_word_r,alt_K053247_word_w)
AM_RANGE(0x211000, 0x21ffff) AM_RAM AM_RANGE(0x211000, 0x21ffff) AM_RAM
AM_RANGE(0x240000, 0x240007) AM_WRITE_LEGACY(K053246_word_w) AM_RANGE(0x240000, 0x240007) AM_DEVWRITE("k055673", k055673_device, alt_K053246_word_w)
AM_RANGE(0x244000, 0x24400f) AM_READ_LEGACY(K055673_rom_word_r) AM_RANGE(0x244000, 0x24400f) AM_DEVWRITE("k055673", k055673_device, alt_K053246_word_w)
AM_RANGE(0x244010, 0x24401f) AM_WRITE_LEGACY(K053247_reg_word_w) AM_RANGE(0x244010, 0x24401f) AM_DEVWRITE("k055673", k055673_device,alt_K053247_reg_word_w)
AM_RANGE(0x24c000, 0x24ffff) AM_DEVREADWRITE("k053250_1", k053250_device, ram_r, ram_w) AM_RANGE(0x24c000, 0x24ffff) AM_DEVREADWRITE("k053250_1", k053250_device, ram_r, ram_w)
AM_RANGE(0x250000, 0x25000f) AM_DEVREADWRITE("k053250_1", k053250_device, reg_r, reg_w) AM_RANGE(0x250000, 0x25000f) AM_DEVREADWRITE("k053250_1", k053250_device, reg_r, reg_w)
AM_RANGE(0x254000, 0x25401f) AM_WRITE_LEGACY(K054338_word_w) AM_RANGE(0x254000, 0x25401f) AM_WRITE_LEGACY(K054338_word_w)
@ -325,11 +325,11 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( viostorm_map, AS_PROGRAM, 16, mystwarr_state ) static ADDRESS_MAP_START( viostorm_map, AS_PROGRAM, 16, mystwarr_state )
AM_RANGE(0x000000, 0x1fffff) AM_ROM // main program AM_RANGE(0x000000, 0x1fffff) AM_ROM // main program
AM_RANGE(0x200000, 0x20ffff) AM_RAM AM_SHARE("gx_workram") AM_RANGE(0x200000, 0x20ffff) AM_RAM AM_SHARE("gx_workram")
AM_RANGE(0x210000, 0x210fff) AM_READWRITE_LEGACY(K053247_word_r,K053247_word_w) AM_RANGE(0x210000, 0x210fff) AM_DEVREADWRITE("k055673", k055673_device, alt_K053247_word_r,alt_K053247_word_w)
AM_RANGE(0x211000, 0x21ffff) AM_RAM AM_RANGE(0x211000, 0x21ffff) AM_RAM
AM_RANGE(0x240000, 0x240007) AM_WRITE_LEGACY(K053246_word_w) AM_RANGE(0x240000, 0x240007) AM_DEVWRITE("k055673", k055673_device, alt_K053246_word_w)
AM_RANGE(0x244000, 0x24400f) AM_READ_LEGACY(K055673_rom_word_r) AM_RANGE(0x244000, 0x24400f) AM_DEVREAD("k055673", k055673_device, alt_K055673_rom_word_r)
AM_RANGE(0x244010, 0x24401f) AM_WRITE_LEGACY(K053247_reg_word_w) AM_RANGE(0x244010, 0x24401f) AM_DEVWRITE("k055673", k055673_device,alt_K053247_reg_word_w)
AM_RANGE(0x24c000, 0x24ffff) AM_RAM // K053250 ram AM_RANGE(0x24c000, 0x24ffff) AM_RAM // K053250 ram
AM_RANGE(0x250000, 0x25000f) AM_RAM // K053250 reg AM_RANGE(0x250000, 0x25000f) AM_RAM // K053250 reg
AM_RANGE(0x254000, 0x25401f) AM_WRITE_LEGACY(K054338_word_w) AM_RANGE(0x254000, 0x25401f) AM_WRITE_LEGACY(K054338_word_w)
@ -372,7 +372,7 @@ READ16_MEMBER(mystwarr_state::K053247_martchmp_word_r)
else else
{ {
offset = (offset & 0x0007) | ((offset & 0x1fe0) >> 2); offset = (offset & 0x0007) | ((offset & 0x1fe0) >> 2);
return K053247_word_r(space,offset,mem_mask); return m_k055673->alt_K053247_word_r(space,offset,mem_mask);
} }
} }
@ -386,7 +386,7 @@ WRITE16_MEMBER(mystwarr_state::K053247_martchmp_word_w)
{ {
offset = (offset & 0x0007) | ((offset & 0x1fe0) >> 2); offset = (offset & 0x0007) | ((offset & 0x1fe0) >> 2);
K053247_word_w(space,offset,data,mem_mask); m_k055673->alt_K053247_word_w(space,offset,data,mem_mask);
} }
} }
@ -404,7 +404,7 @@ WRITE16_MEMBER(mystwarr_state::mccontrol_w)
// bit 1 = IRQ enable // bit 1 = IRQ enable
// bit 2 = OBJCHA // bit 2 = OBJCHA
K053246_set_OBJCHA_line((data&0x04) ? ASSERT_LINE : CLEAR_LINE); m_k055673->alt_K053246_set_OBJCHA_line((data&0x04) ? ASSERT_LINE : CLEAR_LINE);
// if (data & 0xf8) logerror("Unk write %x to mccontrol\n", data); // if (data & 0xf8) logerror("Unk write %x to mccontrol\n", data);
@ -420,9 +420,9 @@ static ADDRESS_MAP_START( martchmp_map, AS_PROGRAM, 16, mystwarr_state )
AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_SHARE("gx_workram") // work RAM AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_SHARE("gx_workram") // work RAM
AM_RANGE(0x300000, 0x3fffff) AM_ROM // data ROM AM_RANGE(0x300000, 0x3fffff) AM_ROM // data ROM
AM_RANGE(0x400000, 0x4000ff) AM_DEVWRITE("k055555", k055555_device, K055555_word_w) // PCU2 AM_RANGE(0x400000, 0x4000ff) AM_DEVWRITE("k055555", k055555_device, K055555_word_w) // PCU2
AM_RANGE(0x402000, 0x40200f) AM_READ_LEGACY(K055673_rom_word_r) // sprite ROM readback AM_RANGE(0x402000, 0x40200f) AM_DEVWRITE("k055673", k055673_device, alt_K053246_word_w) // sprite ROM readback
AM_RANGE(0x402010, 0x40201f) AM_WRITE_LEGACY(K053247_reg_word_w) // OBJSET2 AM_RANGE(0x402010, 0x40201f) AM_DEVWRITE("k055673", k055673_device,alt_K053247_reg_word_w) // OBJSET2
AM_RANGE(0x404000, 0x404007) AM_WRITE_LEGACY(K053246_word_w) // OBJSET1 AM_RANGE(0x404000, 0x404007) AM_DEVWRITE("k055673", k055673_device, alt_K053246_word_w) // OBJSET1
AM_RANGE(0x40a000, 0x40a01f) AM_WRITE_LEGACY(K054338_word_w) // CLTC AM_RANGE(0x40a000, 0x40a01f) AM_WRITE_LEGACY(K054338_word_w) // CLTC
AM_RANGE(0x40c000, 0x40c03f) AM_DEVWRITE("k056832", k056832_device,word_w) // VACSET AM_RANGE(0x40c000, 0x40c03f) AM_DEVWRITE("k056832", k056832_device,word_w) // VACSET
AM_RANGE(0x40e000, 0x40e03f) AM_WRITE(K053990_martchmp_word_w) // protection AM_RANGE(0x40e000, 0x40e03f) AM_WRITE(K053990_martchmp_word_w) // protection
@ -462,10 +462,10 @@ static ADDRESS_MAP_START( dadandrn_map, AS_PROGRAM, 16, mystwarr_state )
AM_RANGE(0x410000, 0x411fff) AM_DEVREADWRITE("k056832", k056832_device,ram_word_r,ram_word_w) // tilemap RAM 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(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(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(0x430000, 0x430007) AM_DEVWRITE("k055673", k055673_device, alt_K053246_word_w)
AM_RANGE(0x440000, 0x443fff) AM_DEVREAD("k056832", k056832_device, mw_rom_word_r) AM_RANGE(0x440000, 0x443fff) AM_DEVREAD("k056832", k056832_device, mw_rom_word_r)
AM_RANGE(0x450000, 0x45000f) AM_READ_LEGACY(K055673_rom_word_r) AM_RANGE(0x450000, 0x45000f) AM_DEVWRITE("k055673", k055673_device, alt_K053246_word_w)
AM_RANGE(0x450010, 0x45001f) AM_WRITE_LEGACY(K053247_reg_word_w) AM_RANGE(0x450010, 0x45001f) AM_DEVWRITE("k055673", k055673_device,alt_K053247_reg_word_w)
AM_RANGE(0x460000, 0x46001f) AM_WRITEONLY AM_SHARE("k053936_0_ct16") AM_RANGE(0x460000, 0x46001f) AM_WRITEONLY AM_SHARE("k053936_0_ct16")
AM_RANGE(0x470000, 0x470fff) AM_RAM AM_SHARE("k053936_0_li16") AM_RANGE(0x470000, 0x470fff) AM_RAM AM_SHARE("k053936_0_li16")
AM_RANGE(0x480000, 0x48003f) AM_DEVWRITE("k056832", k056832_device,word_w) // VACSET AM_RANGE(0x480000, 0x48003f) AM_DEVWRITE("k056832", k056832_device,word_w) // VACSET
@ -509,10 +509,10 @@ static ADDRESS_MAP_START( gaiapols_map, AS_PROGRAM, 16, mystwarr_state )
AM_RANGE(0x410000, 0x411fff) AM_DEVREADWRITE("k056832", k056832_device,ram_word_r,ram_word_w) // tilemap RAM 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(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(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(0x430000, 0x430007) AM_DEVWRITE("k055673", k055673_device, alt_K053246_word_w)
AM_RANGE(0x440000, 0x441fff) AM_DEVREAD("k056832", k056832_device, mw_rom_word_r) AM_RANGE(0x440000, 0x441fff) AM_DEVREAD("k056832", k056832_device, mw_rom_word_r)
AM_RANGE(0x450000, 0x45000f) AM_READ_LEGACY(K055673_rom_word_r) AM_RANGE(0x450000, 0x45000f) AM_DEVWRITE("k055673", k055673_device, alt_K053246_word_w)
AM_RANGE(0x450010, 0x45001f) AM_WRITE_LEGACY(K053247_reg_word_w) AM_RANGE(0x450010, 0x45001f) AM_DEVWRITE("k055673", k055673_device,alt_K053247_reg_word_w)
AM_RANGE(0x460000, 0x46001f) AM_WRITEONLY AM_SHARE("k053936_0_ct16") AM_RANGE(0x460000, 0x46001f) AM_WRITEONLY AM_SHARE("k053936_0_ct16")
AM_RANGE(0x470000, 0x470fff) AM_RAM AM_SHARE("k053936_0_li16") AM_RANGE(0x470000, 0x470fff) AM_RAM AM_SHARE("k053936_0_li16")
AM_RANGE(0x480000, 0x48003f) AM_DEVWRITE("k056832", k056832_device,word_w) // VACSET AM_RANGE(0x480000, 0x48003f) AM_DEVWRITE("k056832", k056832_device,word_w) // VACSET
@ -1000,6 +1000,7 @@ static MACHINE_CONFIG_START( mystwarr, mystwarr_state )
MCFG_PALETTE_LENGTH(2048) MCFG_PALETTE_LENGTH(2048)
MCFG_K056832_ADD_NOINTF("k056832"/*, mystwarr_k056832_intf*/) MCFG_K056832_ADD_NOINTF("k056832"/*, mystwarr_k056832_intf*/)
MCFG_K055555_ADD("k055555") MCFG_K055555_ADD("k055555")
MCFG_K055673_ADD_NOINTF("k055673")
MCFG_VIDEO_START_OVERRIDE(mystwarr_state,mystwarr) MCFG_VIDEO_START_OVERRIDE(mystwarr_state,mystwarr)

View File

@ -611,8 +611,9 @@ static MACHINE_CONFIG_START( kongambl, kongambl_state )
MCFG_VIDEO_START_OVERRIDE(kongambl_state,kongambl) MCFG_VIDEO_START_OVERRIDE(kongambl_state,kongambl)
MCFG_K053247_ADD("k053246", k053247_intf) MCFG_K053246_ADD("k053246", k053247_intf)
MCFG_K055555_ADD("k055555") MCFG_K055555_ADD("k055555")
MCFG_K055673_ADD_NOINTF("k055673")
MCFG_GFXDECODE(tasman) MCFG_GFXDECODE(tasman)

View File

@ -15,6 +15,7 @@ public:
m_workram(*this,"workram"), m_workram(*this,"workram"),
m_psacram(*this,"psacram"), m_psacram(*this,"psacram"),
m_subpaletteram32(*this,"subpaletteram"), m_subpaletteram32(*this,"subpaletteram"),
m_k055673(*this, "k055673"),
m_k055555(*this, "k055555"), m_k055555(*this, "k055555"),
m_k056832(*this, "k056832"), m_k056832(*this, "k056832"),
m_k053936_0_ctrl(*this,"k053936_0_ctrl",32), m_k053936_0_ctrl(*this,"k053936_0_ctrl",32),
@ -32,6 +33,7 @@ public:
optional_shared_ptr<UINT32> m_workram; optional_shared_ptr<UINT32> m_workram;
optional_shared_ptr<UINT32> m_psacram; optional_shared_ptr<UINT32> m_psacram;
optional_shared_ptr<UINT32> m_subpaletteram32; optional_shared_ptr<UINT32> m_subpaletteram32;
required_device<k055673_device> m_k055673;
required_device<k055555_device> m_k055555; required_device<k055555_device> m_k055555;
required_device<k056832_device> m_k056832; required_device<k056832_device> m_k056832;
optional_shared_ptr<UINT16> m_k053936_0_ctrl; optional_shared_ptr<UINT16> m_k053936_0_ctrl;
@ -118,6 +120,10 @@ public:
void konamigx_esc_alert(UINT32 *srcbase, int srcoffs, int count, int mode); void konamigx_esc_alert(UINT32 *srcbase, int srcoffs, int count, int mode);
void konamigx_precache_registers(void); void konamigx_precache_registers(void);
void dmastart_callback(int data);
void konamigx_mixer_init(running_machine &machine, int objdma);
}; };

View File

@ -2,6 +2,7 @@
#include "machine/k053252.h" #include "machine/k053252.h"
#include "video/k055555.h" #include "video/k055555.h"
#include "video/k054000.h" #include "video/k054000.h"
#include "video/k053246_k053247_k055673.h"
class mystwarr_state : public konamigx_state class mystwarr_state : public konamigx_state
{ {
@ -11,6 +12,7 @@ public:
m_maincpu(*this,"maincpu"), m_maincpu(*this,"maincpu"),
m_k053252(*this, "k053252"), m_k053252(*this, "k053252"),
m_k056832(*this, "k056832"), m_k056832(*this, "k056832"),
m_k055673(*this, "k055673"),
m_gx_workram(*this,"gx_workram"), m_gx_workram(*this,"gx_workram"),
m_spriteram(*this,"spriteram") m_spriteram(*this,"spriteram")
{ } { }
@ -18,6 +20,7 @@ public:
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<k053252_device> m_k053252; required_device<k053252_device> m_k053252;
required_device<k056832_device> m_k056832; required_device<k056832_device> m_k056832;
required_device<k055673_device> m_k055673;
required_shared_ptr<UINT16> m_gx_workram; required_shared_ptr<UINT16> m_gx_workram;
optional_shared_ptr<UINT16> m_spriteram; optional_shared_ptr<UINT16> m_spriteram;
UINT8 m_mw_irq_control; UINT8 m_mw_irq_control;

View File

@ -75,7 +75,7 @@ void k053247_device::clear_all()
m_intf_screen = 0; m_intf_screen = 0;
m_intf_gfx_memory_region = 0; m_intf_gfx_memory_region = 0;
m_intf_gfx_num = 0; m_intf_gfx_num = -1;
m_intf_plane_order = 0; m_intf_plane_order = 0;
m_intf_dx = m_intf_dy = 0; m_intf_dx = m_intf_dy = 0;
m_intf_deinterleave = 0; m_intf_deinterleave = 0;
@ -769,6 +769,11 @@ k055673_device::k055673_device(const machine_config &mconfig, const char *tag, d
void k055673_device::device_start() void k055673_device::device_start()
{ {
/* early out for the non-interface cases for now */
if (m_intf_gfx_num == -1)
return;
UINT32 total; UINT32 total;
UINT8 *s1, *s2, *d; UINT8 *s1, *s2, *d;
long i; long i;
@ -1076,31 +1081,6 @@ static void decode_gfx(running_machine &machine, int gfx_index, UINT8 *data, UIN
machine.gfx[gfx_index] = auto_alloc(machine, gfx_element(machine, gl, data, machine.total_colors() >> bpp, 0)); machine.gfx[gfx_index] = auto_alloc(machine, gfx_element(machine, gl, data, machine.total_colors() >> bpp, 0));
} }
/***************************************************************************/
/* */
/* 05324x Family Sprite Generators */
/* */
/***************************************************************************/
static int K05324x_z_rejection;
/*
In a K053247+K055555 setup objects with Z-code 0x00 should be ignored
when PRFLIP is cleared, while objects with Z-code 0xff should be
ignored when PRFLIP is set.
These behaviors can also be seen in older K053245(6)+K053251 setups.
Bucky'O Hare, The Simpsons and Sunset Riders rely on their implications
to prepare and retire sprites. They probably apply to many other Konami
games but it's hard to tell because most artifacts have been filtered
by exclusion sort.
A driver may call K05324x_set_z_rejection() to set which zcode to ignore.
Parameter:
-1 = accept all(default)
0x00-0xff = zcode to ignore
*/
/***************************************************************************/ /***************************************************************************/
/* */ /* */
@ -1108,35 +1088,27 @@ static int K05324x_z_rejection;
/* */ /* */
/***************************************************************************/ /***************************************************************************/
static const char *K053247_memory_region;
static int K053247_dx, K053247_dy, K053247_wraparound;
static UINT8 K053246_regs[8];
static UINT16 K053247_regs[16];
static UINT16 *K053247_ram=0;
static gfx_element *K053247_gfx;
static void (*K053247_callback)(running_machine &machine, int *code,int *color,int *priority);
static UINT8 K053246_OBJCHA_line;
void K053247_export_config(UINT16 **ram, gfx_element **gfx, void (**callback)(running_machine &, int *, int *, int *), int *dx, int *dy) void k053247_device::alt_K053247_export_config(UINT16 **ram, gfx_element **gfx, void (**callback)(running_machine &, int *, int *, int *), int *dx, int *dy)
{ {
if(ram) if(ram)
*ram = K053247_ram; *ram = m_ram;
if(gfx) if(gfx)
*gfx = K053247_gfx; *gfx = m_gfx;
if(callback) if(callback)
*callback = K053247_callback; *callback = m_callback;
if(dx) if(dx)
*dx = K053247_dx; *dx = m_dx;
if(dy) if(dy)
*dy = K053247_dy; *dy = m_dy;
} }
int K053246_read_register(int regnum) { return(K053246_regs[regnum]); } int k053247_device::alt_K053246_read_register(int regnum) { return(m_kx46_regs[regnum]); }
int K053247_read_register(int regnum) { return(K053247_regs[regnum]); } int k053247_device::alt_K053247_read_register(int regnum) { return(m_kx47_regs[regnum]); }
/* K055673 used with the 54246 in PreGX/Run and Gun/System GX games */ /* alt_K055673 used with the 54246 in PreGX/Run and Gun/System GX games */
void K055673_vh_start(running_machine &machine, const char *gfx_memory_region, int layout, int dx, int dy, void (*callback)(running_machine &machine, int *code,int *color,int *priority)) void k053247_device::alt_K055673_vh_start(running_machine &machine, const char *gfx_memory_region, int layout, int dx, int dy, void (*callback)(running_machine &machine, int *code,int *color,int *priority))
{ {
int gfx_index; int gfx_index;
UINT32 total; UINT32 total;
@ -1186,7 +1158,7 @@ void K055673_vh_start(running_machine &machine, const char *gfx_memory_region, i
}; };
UINT8 *s1, *s2, *d; UINT8 *s1, *s2, *d;
long i; long i;
UINT16 *K055673_rom; UINT16 *alt_K055673_rom;
int size4; int size4;
/* find first empty slot to decode gfx */ /* find first empty slot to decode gfx */
@ -1195,7 +1167,7 @@ void K055673_vh_start(running_machine &machine, const char *gfx_memory_region, i
break; break;
assert(gfx_index != MAX_GFX_ELEMENTS); assert(gfx_index != MAX_GFX_ELEMENTS);
K055673_rom = (UINT16 *)machine.root_device().memregion(gfx_memory_region)->base(); alt_K055673_rom = (UINT16 *)machine.root_device().memregion(gfx_memory_region)->base();
/* decode the graphics */ /* decode the graphics */
switch(layout) switch(layout)
@ -1204,8 +1176,8 @@ void K055673_vh_start(running_machine &machine, const char *gfx_memory_region, i
size4 = (machine.root_device().memregion(gfx_memory_region)->bytes()/(1024*1024))/5; size4 = (machine.root_device().memregion(gfx_memory_region)->bytes()/(1024*1024))/5;
size4 *= 4*1024*1024; size4 *= 4*1024*1024;
/* set the # of tiles based on the 4bpp section */ /* set the # of tiles based on the 4bpp section */
K055673_rom = auto_alloc_array(machine, UINT16, size4 * 5 / 2); alt_K055673_rom = auto_alloc_array(machine, UINT16, size4 * 5 / 2);
d = (UINT8 *)K055673_rom; d = (UINT8 *)alt_K055673_rom;
// now combine the graphics together to form 5bpp // now combine the graphics together to form 5bpp
s1 = machine.root_device().memregion(gfx_memory_region)->base(); // 4bpp area s1 = machine.root_device().memregion(gfx_memory_region)->base(); // 4bpp area
s2 = s1 + (size4); // 1bpp area s2 = s1 + (size4); // 1bpp area
@ -1219,22 +1191,22 @@ void K055673_vh_start(running_machine &machine, const char *gfx_memory_region, i
} }
total = size4 / 128; total = size4 / 128;
decode_gfx(machine, gfx_index, (UINT8 *)K055673_rom, total, &spritelayout, 4); decode_gfx(machine, gfx_index, (UINT8 *)alt_K055673_rom, total, &spritelayout, 4);
break; break;
case K055673_LAYOUT_RNG: case K055673_LAYOUT_RNG:
total = machine.root_device().memregion(gfx_memory_region)->bytes() / (16*16/2); total = machine.root_device().memregion(gfx_memory_region)->bytes() / (16*16/2);
decode_gfx(machine, gfx_index, (UINT8 *)K055673_rom, total, &spritelayout2, 4); decode_gfx(machine, gfx_index, (UINT8 *)alt_K055673_rom, total, &spritelayout2, 4);
break; break;
case K055673_LAYOUT_LE2: case K055673_LAYOUT_LE2:
total = machine.root_device().memregion(gfx_memory_region)->bytes() / (16*16); total = machine.root_device().memregion(gfx_memory_region)->bytes() / (16*16);
decode_gfx(machine, gfx_index, (UINT8 *)K055673_rom, total, &spritelayout3, 4); decode_gfx(machine, gfx_index, (UINT8 *)alt_K055673_rom, total, &spritelayout3, 4);
break; break;
case K055673_LAYOUT_GX6: case K055673_LAYOUT_GX6:
total = machine.root_device().memregion(gfx_memory_region)->bytes() / (16*16*6/8); total = machine.root_device().memregion(gfx_memory_region)->bytes() / (16*16*6/8);
decode_gfx(machine, gfx_index, (UINT8 *)K055673_rom, total, &spritelayout4, 4); decode_gfx(machine, gfx_index, (UINT8 *)alt_K055673_rom, total, &spritelayout4, 4);
break; break;
default: default:
@ -1244,79 +1216,79 @@ void K055673_vh_start(running_machine &machine, const char *gfx_memory_region, i
if (VERBOSE && !(machine.config().m_video_attributes & VIDEO_HAS_SHADOWS)) if (VERBOSE && !(machine.config().m_video_attributes & VIDEO_HAS_SHADOWS))
popmessage("driver should use VIDEO_HAS_SHADOWS"); popmessage("driver should use VIDEO_HAS_SHADOWS");
K053247_dx = dx; m_dx = dx;
K053247_dy = dy; m_dy = dy;
K053247_wraparound = 1; m_wraparound = 1;
K05324x_z_rejection = -1; m_z_rejection = -1;
K053247_memory_region = gfx_memory_region; m_memory_region = gfx_memory_region;
K053247_gfx = machine.gfx[gfx_index]; m_gfx = machine.gfx[gfx_index];
K053247_callback = callback; m_callback = callback;
K053246_OBJCHA_line = CLEAR_LINE; m_objcha_line = CLEAR_LINE;
K053247_ram = auto_alloc_array(machine, UINT16, 0x1000/2); m_ram = auto_alloc_array(machine, UINT16, 0x1000/2);
memset(K053247_ram, 0, 0x1000); memset(m_ram, 0, 0x1000);
memset(K053246_regs, 0, 8); memset(m_kx46_regs, 0, 8);
memset(K053247_regs, 0, 32); memset(m_kx47_regs, 0, 32);
machine.save().save_pointer(NAME(K053247_ram), 0x800); machine.save().save_pointer(NAME(m_ram), 0x800);
machine.save().save_item(NAME(K053246_regs)); machine.save().save_item(NAME(m_kx46_regs));
machine.save().save_item(NAME(K053247_regs)); machine.save().save_item(NAME(m_kx47_regs));
machine.save().save_item(NAME(K053246_OBJCHA_line)); machine.save().save_item(NAME(m_objcha_line));
} }
WRITE16_HANDLER( K053247_reg_word_w ) // write-only OBJSET2 registers (see p.43 table 6.1) WRITE16_MEMBER( k053247_device::alt_K053247_reg_word_w ) // write-only OBJSET2 registers (see p.43 table 6.1)
{ {
COMBINE_DATA(K053247_regs + offset); COMBINE_DATA(m_kx47_regs + offset);
} }
WRITE32_HANDLER( K053247_reg_long_w ) WRITE32_MEMBER( k053247_device::alt_K053247_reg_long_w )
{ {
offset <<= 1; offset <<= 1;
COMBINE_DATA(K053247_regs + offset + 1); COMBINE_DATA(m_kx47_regs + offset + 1);
mem_mask >>= 16; mem_mask >>= 16;
data >>= 16; data >>= 16;
COMBINE_DATA(K053247_regs + offset); COMBINE_DATA(m_kx47_regs + offset);
} }
READ16_HANDLER( K053247_word_r ) READ16_MEMBER( k053247_device::alt_K053247_word_r )
{ {
return K053247_ram[offset]; return m_ram[offset];
} }
WRITE16_HANDLER( K053247_word_w ) WRITE16_MEMBER( k053247_device::alt_K053247_word_w )
{ {
COMBINE_DATA(K053247_ram + offset); COMBINE_DATA(m_ram + offset);
} }
READ32_HANDLER( K053247_long_r ) READ32_MEMBER( k053247_device::alt_K053247_long_r )
{ {
return K053247_ram[offset*2+1] | (K053247_ram[offset*2]<<16); return m_ram[offset*2+1] | (m_ram[offset*2]<<16);
} }
WRITE32_HANDLER( K053247_long_w ) WRITE32_MEMBER( k053247_device::alt_K053247_long_w )
{ {
offset <<= 1; offset <<= 1;
COMBINE_DATA(K053247_ram + offset + 1); COMBINE_DATA(m_ram + offset + 1);
mem_mask >>= 16; mem_mask >>= 16;
data >>= 16; data >>= 16;
COMBINE_DATA(K053247_ram + offset); COMBINE_DATA(m_ram + offset);
} }
// Mystic Warriors hardware games support a non-OBJCHA based ROM readback // Mystic Warriors hardware games support a non-OBJCHA based ROM readback
// write the address to the 246 as usual, but there's a completely separate ROM // write the address to the 246 as usual, but there's a completely separate ROM
// window that works without needing an OBJCHA line. // window that works without needing an OBJCHA line.
// in this window, +0 = 32 bits from one set of ROMs, and +8 = 32 bits from another set // in this window, +0 = 32 bits from one set of ROMs, and +8 = 32 bits from another set
READ16_HANDLER( K055673_rom_word_r ) // 5bpp READ16_MEMBER( k053247_device::alt_K055673_rom_word_r ) // 5bpp
{ {
UINT8 *ROM8 = (UINT8 *)space.machine().root_device().memregion(K053247_memory_region)->base(); UINT8 *ROM8 = (UINT8 *)space.machine().root_device().memregion(m_memory_region)->base();
UINT16 *ROM = (UINT16 *)space.machine().root_device().memregion(K053247_memory_region)->base(); UINT16 *ROM = (UINT16 *)space.machine().root_device().memregion(m_memory_region)->base();
int size4 = (space.machine().root_device().memregion(K053247_memory_region)->bytes()/(1024*1024))/5; int size4 = (space.machine().root_device().memregion(m_memory_region)->bytes()/(1024*1024))/5;
int romofs; int romofs;
size4 *= 4*1024*1024; // get offset to 5th bit size4 *= 4*1024*1024; // get offset to 5th bit
ROM8 += size4; ROM8 += size4;
romofs = K053246_regs[6]<<16 | K053246_regs[7]<<8 | K053246_regs[4]; romofs = m_kx46_regs[6]<<16 | m_kx46_regs[7]<<8 | m_kx46_regs[4];
switch (offset) switch (offset)
{ {
@ -1344,12 +1316,12 @@ READ16_HANDLER( K055673_rom_word_r ) // 5bpp
return 0; return 0;
} }
READ16_HANDLER( K055673_GX6bpp_rom_word_r ) READ16_MEMBER( k053247_device::alt_K055673_GX6bpp_rom_word_r )
{ {
UINT16 *ROM = (UINT16 *)space.machine().root_device().memregion(K053247_memory_region)->base(); UINT16 *ROM = (UINT16 *)space.machine().root_device().memregion(m_memory_region)->base();
int romofs; int romofs;
romofs = K053246_regs[6]<<16 | K053246_regs[7]<<8 | K053246_regs[4]; romofs = m_kx46_regs[6]<<16 | m_kx46_regs[7]<<8 | m_kx46_regs[4];
romofs /= 4; // romofs increments 4 at a time romofs /= 4; // romofs increments 4 at a time
romofs *= 12/2; // each increment of romofs = 12 new bytes (6 new words) romofs *= 12/2; // each increment of romofs = 12 new bytes (6 new words)
@ -1378,36 +1350,36 @@ READ16_HANDLER( K055673_GX6bpp_rom_word_r )
return 0; return 0;
} }
static WRITE8_HANDLER( K053246_w ) WRITE8_MEMBER( k053247_device::alt_K053246_w )
{ {
K053246_regs[offset] = data; m_kx46_regs[offset] = data;
} }
WRITE16_HANDLER( K053246_word_w ) WRITE16_MEMBER( k053247_device::alt_K053246_word_w )
{ {
if (ACCESSING_BITS_8_15) if (ACCESSING_BITS_8_15)
K053246_w(space, offset<<1,(data >> 8) & 0xff, (mem_mask >> 8) & 0xff); alt_K053246_w(space, offset<<1,(data >> 8) & 0xff, (mem_mask >> 8) & 0xff);
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
K053246_w(space, (offset<<1) + 1,data & 0xff, mem_mask & 0xff); alt_K053246_w(space, (offset<<1) + 1,data & 0xff, mem_mask & 0xff);
} }
WRITE32_HANDLER( K053246_long_w ) WRITE32_MEMBER( k053247_device::alt_K053246_long_w )
{ {
offset <<= 1; offset <<= 1;
K053246_word_w(space, offset, data>>16, mem_mask >> 16); alt_K053246_word_w(space, offset, data>>16, mem_mask >> 16);
K053246_word_w(space, offset+1, data, mem_mask); alt_K053246_word_w(space, offset+1, data, mem_mask);
} }
void K053246_set_OBJCHA_line(int state) void k053247_device::alt_K053246_set_OBJCHA_line(int state)
{ {
K053246_OBJCHA_line = state; m_objcha_line = state;
} }
int K053246_is_IRQ_enabled(void) int k053247_device::alt_K053246_is_IRQ_enabled(void)
{ {
// This bit enables obj DMA rather than obj IRQ even though the two functions usually coincide. // This bit enables obj DMA rather than obj IRQ even though the two functions usually coincide.
return K053246_regs[5] & 0x10; return m_kx46_regs[5] & 0x10;
} }

View File

@ -102,6 +102,31 @@ public:
const char *m_memory_region; const char *m_memory_region;
screen_device *m_screen; screen_device *m_screen;
/* alt implementation - to be collapsed */
void alt_K055673_vh_start(running_machine &machine, const char *gfx_memory_region, int alt_layout, int dx, int dy,
void (*callback)(running_machine &machine, int *code,int *color,int *priority));
DECLARE_READ16_MEMBER( alt_K055673_rom_word_r );
DECLARE_READ16_MEMBER( alt_K055673_GX6bpp_rom_word_r );
DECLARE_READ16_MEMBER( alt_K053247_word_r );
DECLARE_WRITE16_MEMBER( alt_K053247_word_w );
DECLARE_READ32_MEMBER( alt_K053247_long_r );
DECLARE_WRITE32_MEMBER( alt_K053247_long_w );
DECLARE_WRITE16_MEMBER( alt_K053247_reg_word_w ); // "OBJSET2" registers
DECLARE_WRITE32_MEMBER( alt_K053247_reg_long_w );
int alt_K053247_read_register(int regnum);
void alt_K053247_set_SpriteOffset(int offsx, int offsy);
void alt_K053247_export_config(UINT16 **ram, gfx_element **gfx, void (**callback)(running_machine &, int *, int *, int *), int *dx, int *dy);
DECLARE_WRITE8_MEMBER( alt_K053246_w );
DECLARE_WRITE16_MEMBER( alt_K053246_word_w );
DECLARE_WRITE32_MEMBER( alt_K053246_long_w );
void alt_K053246_set_OBJCHA_line(int state);
int alt_K053246_is_IRQ_enabled(void);
int alt_K053246_read_register(int regnum);
template<class _BitmapClass> template<class _BitmapClass>
void k053247_sprites_draw_common( _BitmapClass &bitmap, const rectangle &cliprect ); void k053247_sprites_draw_common( _BitmapClass &bitmap, const rectangle &cliprect );
@ -139,51 +164,19 @@ extern const device_type K055673;
#define MCFG_K053246_ADD(_tag, _interface) \ #define MCFG_K053246_ADD(_tag, _interface) \
MCFG_DEVICE_ADD(_tag, K053246, 0) \ MCFG_DEVICE_ADD(_tag, K053246, 0) \
MCFG_DEVICE_CONFIG(_interface) MCFG_DEVICE_CONFIG(_interface)
#define MCFG_K053247_ADD(_tag, _interface) \
MCFG_DEVICE_ADD(_tag, K053247, 0) \
MCFG_DEVICE_CONFIG(_interface)
#define MCFG_K055673_ADD(_tag, _interface) \ #define MCFG_K055673_ADD(_tag, _interface) \
MCFG_DEVICE_ADD(_tag, K055673, 0) \ MCFG_DEVICE_ADD(_tag, K055673, 0) \
MCFG_DEVICE_CONFIG(_interface) MCFG_DEVICE_CONFIG(_interface)
#define MCFG_K055673_ADD_NOINTF(_tag ) \
MCFG_DEVICE_ADD(_tag, K055673, 0) \
/* old non-device stuff */ /* old non-device stuff */
void K055673_vh_start(running_machine &machine, const char *gfx_memory_region, int alt_layout, int dx, int dy,
void (*callback)(running_machine &machine, int *code,int *color,int *priority));
DECLARE_READ16_HANDLER( K055673_rom_word_r );
DECLARE_READ16_HANDLER( K055673_GX6bpp_rom_word_r );
/*
Callback procedures for non-standard shadows:
1) translate shadow code to the correct 2-bit form (0=off, 1-3=style)
2) shift shadow code left by K053247_SHDSHIFT and add the K053247_CUSTOMSHADOW flag
3) combine the result with sprite color
*/
#define K053247_CUSTOMSHADOW 0x20000000
#define K053247_SHDSHIFT 20
DECLARE_READ16_HANDLER( K053247_word_r );
DECLARE_WRITE16_HANDLER( K053247_word_w );
DECLARE_READ32_HANDLER( K053247_long_r );
DECLARE_WRITE32_HANDLER( K053247_long_w );
DECLARE_WRITE16_HANDLER( K053247_reg_word_w ); // "OBJSET2" registers
DECLARE_WRITE32_HANDLER( K053247_reg_long_w );
int K053247_read_register(int regnum);
void K053247_set_SpriteOffset(int offsx, int offsy);
void K053247_export_config(UINT16 **ram, gfx_element **gfx, void (**callback)(running_machine &, int *, int *, int *), int *dx, int *dy);
DECLARE_WRITE16_HANDLER( K053246_word_w );
DECLARE_WRITE32_HANDLER( K053246_long_w );
void K053246_set_OBJCHA_line(int state);
int K053246_is_IRQ_enabled(void);
int K053246_read_register(int regnum);

View File

@ -856,21 +856,21 @@ void konamigx_state::konamigx_precache_registers(void)
static const int coregshifts[5]= {4,5,6,7,8}; static const int coregshifts[5]= {4,5,6,7,8};
int i; int i;
K053246_objset1 = K053246_read_register(5); K053246_objset1 = m_k055673->alt_K053246_read_register(5);
i = K053247_read_register(0x8/2); i = m_k055673->alt_K053247_read_register(0x8/2);
K053247_vrcbk[0] = (i & 0x000f) << 14; K053247_vrcbk[0] = (i & 0x000f) << 14;
K053247_vrcbk[1] = (i & 0x0f00) << 6; K053247_vrcbk[1] = (i & 0x0f00) << 6;
i = K053247_read_register(0xa/2); i = m_k055673->alt_K053247_read_register(0xa/2);
K053247_vrcbk[2] = (i & 0x000f) << 14; K053247_vrcbk[2] = (i & 0x000f) << 14;
K053247_vrcbk[3] = (i & 0x0f00) << 6; K053247_vrcbk[3] = (i & 0x0f00) << 6;
// COREG == OBJSET2+1C == bit8-11 of OPSET ??? (see p.50 last table, needs p.49 to confirm) // COREG == OBJSET2+1C == bit8-11 of OPSET ??? (see p.50 last table, needs p.49 to confirm)
K053247_opset = K053247_read_register(0xc/2); K053247_opset = m_k055673->alt_K053247_read_register(0xc/2);
i = K053247_opset & 7; if (i > 4) i = 4; i = K053247_opset & 7; if (i > 4) i = 4;
K053247_coreg = K053247_read_register(0xc/2)>>8 & 0xf; K053247_coreg = m_k055673->alt_K053247_read_register(0xc/2)>>8 & 0xf;
K053247_coreg =(K053247_coreg & coregmasks[i]) << 12; K053247_coreg =(K053247_coreg & coregmasks[i]) << 12;
K053247_coregshift = coregshifts[i]; K053247_coregshift = coregshifts[i];
@ -1130,7 +1130,7 @@ static void K053247GP_set_SpriteOffset(int offsx, int offsy)
K053247_dy = offsy; K053247_dy = offsy;
} }
void konamigx_mixer_init(running_machine &machine, int objdma) void konamigx_state::konamigx_mixer_init(running_machine &machine, int objdma)
{ {
gx_objdma = 0; gx_objdma = 0;
gx_primode = 0; gx_primode = 0;
@ -1139,7 +1139,7 @@ void konamigx_mixer_init(running_machine &machine, int objdma)
gx_shdzbuf = auto_alloc_array(machine, UINT8, GX_ZBUFSIZE); gx_shdzbuf = auto_alloc_array(machine, UINT8, GX_ZBUFSIZE);
gx_objpool = auto_alloc_array(machine, struct GX_OBJ, GX_MAX_OBJECTS); gx_objpool = auto_alloc_array(machine, struct GX_OBJ, GX_MAX_OBJECTS);
K053247_export_config(&K053247_ram, &K053247_gfx, &K053247_callback, &K053247_dx, &K053247_dy); m_k055673->alt_K053247_export_config(&K053247_ram, &K053247_gfx, &K053247_callback, &K053247_dx, &K053247_dy);
K054338_export_config(&K054338_shdRGB); K054338_export_config(&K054338_shdRGB);
if (objdma) if (objdma)
@ -1223,8 +1223,8 @@ void konamigx_state::konamigx_mixer(running_machine &machine, bitmap_rgb32 &bitm
flipscreeny = K053246_objset1 & 2; flipscreeny = K053246_objset1 & 2;
// get "display window" offsets // get "display window" offsets
offx = (K053246_read_register(0)<<8 | K053246_read_register(1)) & 0x3ff; offx = (m_k055673->alt_K053246_read_register(0)<<8 | m_k055673->alt_K053246_read_register(1)) & 0x3ff;
offy = (K053246_read_register(2)<<8 | K053246_read_register(3)) & 0x3ff; offy = (m_k055673->alt_K053246_read_register(2)<<8 | m_k055673->alt_K053246_read_register(3)) & 0x3ff;
// init OBJSET2 and mixer parameters (see p.51 and chapter 7) // init OBJSET2 and mixer parameters (see p.51 and chapter 7)
layerid[0] = 0; layerid[1] = 1; layerid[2] = 2; layerid[3] = 3; layerid[4] = 4; layerid[5] = 5; layerid[0] = 0; layerid[1] = 1; layerid[2] = 2; layerid[3] = 3; layerid[4] = 4; layerid[5] = 5;
@ -2055,7 +2055,7 @@ void konamigx_state::_gxcommoninitnosprites(running_machine &machine)
void konamigx_state::_gxcommoninit(running_machine &machine) void konamigx_state::_gxcommoninit(running_machine &machine)
{ {
// (+ve values move objects to the right and -ve values move objects to the left) // (+ve values move objects to the right and -ve values move objects to the left)
K055673_vh_start(machine, "gfx2", K055673_LAYOUT_GX, -26, -23, konamigx_type2_sprite_callback); m_k055673->alt_K055673_vh_start(machine, "gfx2", K055673_LAYOUT_GX, -26, -23, konamigx_type2_sprite_callback);
_gxcommoninitnosprites(machine); _gxcommoninitnosprites(machine);
} }
@ -2106,7 +2106,7 @@ VIDEO_START_MEMBER(konamigx_state,konamigx_5bpp)
VIDEO_START_MEMBER(konamigx_state,winspike) VIDEO_START_MEMBER(konamigx_state,winspike)
{ {
m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_8, 0, NULL, konamigx_alpha_tile_callback, 2); m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_8, 0, NULL, konamigx_alpha_tile_callback, 2);
K055673_vh_start(machine(), "gfx2", K055673_LAYOUT_LE2, -53, -23, konamigx_type2_sprite_callback); m_k055673->alt_K055673_vh_start(machine(), "gfx2", K055673_LAYOUT_LE2, -53, -23, konamigx_type2_sprite_callback);
_gxcommoninitnosprites(machine()); _gxcommoninitnosprites(machine());
} }
@ -2114,7 +2114,7 @@ VIDEO_START_MEMBER(konamigx_state,winspike)
VIDEO_START_MEMBER(konamigx_state,dragoonj) VIDEO_START_MEMBER(konamigx_state,dragoonj)
{ {
m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_5, 1, NULL, konamigx_type2_tile_callback, 0); m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_5, 1, NULL, konamigx_type2_tile_callback, 0);
K055673_vh_start(machine(), "gfx2", K055673_LAYOUT_RNG, -53, -23, konamigx_dragoonj_sprite_callback); m_k055673->alt_K055673_vh_start(machine(), "gfx2", K055673_LAYOUT_RNG, -53, -23, konamigx_dragoonj_sprite_callback);
_gxcommoninitnosprites(machine()); _gxcommoninitnosprites(machine());
@ -2127,7 +2127,7 @@ VIDEO_START_MEMBER(konamigx_state,dragoonj)
VIDEO_START_MEMBER(konamigx_state,le2) VIDEO_START_MEMBER(konamigx_state,le2)
{ {
m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_8, 1, NULL, konamigx_type2_tile_callback, 0); m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_8, 1, NULL, konamigx_type2_tile_callback, 0);
K055673_vh_start(machine(), "gfx2", K055673_LAYOUT_LE2, -46, -23, konamigx_le2_sprite_callback); m_k055673->alt_K055673_vh_start(machine(), "gfx2", K055673_LAYOUT_LE2, -46, -23, konamigx_le2_sprite_callback);
_gxcommoninitnosprites(machine()); _gxcommoninitnosprites(machine());
@ -2156,7 +2156,7 @@ VIDEO_START_MEMBER(konamigx_state,konamigx_type3)
int height = machine().primary_screen->height(); int height = machine().primary_screen->height();
m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_6, 0, NULL, konamigx_type2_tile_callback, 1); m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_6, 0, NULL, konamigx_type2_tile_callback, 1);
K055673_vh_start(machine(), "gfx2", K055673_LAYOUT_GX6, -132, -23, konamigx_type2_sprite_callback); m_k055673->alt_K055673_vh_start(machine(), "gfx2", K055673_LAYOUT_GX6, -132, -23, konamigx_type2_sprite_callback);
dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height);
dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height);
@ -2195,7 +2195,7 @@ VIDEO_START_MEMBER(konamigx_state,konamigx_type4)
int height = machine().primary_screen->height(); int height = machine().primary_screen->height();
m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_8, 0, NULL, konamigx_type2_tile_callback, 0); m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_8, 0, NULL, konamigx_type2_tile_callback, 0);
K055673_vh_start(machine(), "gfx2", K055673_LAYOUT_GX6, -79, -24, konamigx_type2_sprite_callback); // -23 looks better in intro m_k055673->alt_K055673_vh_start(machine(), "gfx2", K055673_LAYOUT_GX6, -79, -24, konamigx_type2_sprite_callback); // -23 looks better in intro
dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height);
dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height);
@ -2226,7 +2226,7 @@ VIDEO_START_MEMBER(konamigx_state,konamigx_type4_vsn)
int height = machine().primary_screen->height(); int height = machine().primary_screen->height();
m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_8, 0, NULL, konamigx_type2_tile_callback, 2); // set djmain_hack to 2 to kill layer association or half the tilemaps vanish on screen 0 m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_8, 0, NULL, konamigx_type2_tile_callback, 2); // set djmain_hack to 2 to kill layer association or half the tilemaps vanish on screen 0
K055673_vh_start(machine(), "gfx2", K055673_LAYOUT_GX6, -132, -23, konamigx_type2_sprite_callback); m_k055673->alt_K055673_vh_start(machine(), "gfx2", K055673_LAYOUT_GX6, -132, -23, konamigx_type2_sprite_callback);
dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height);
dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height);
@ -2256,7 +2256,7 @@ VIDEO_START_MEMBER(konamigx_state,konamigx_type4_sd2)
int height = machine().primary_screen->height(); int height = machine().primary_screen->height();
m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_8, 0, NULL, konamigx_type2_tile_callback, 0); m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_8, 0, NULL, konamigx_type2_tile_callback, 0);
K055673_vh_start(machine(), "gfx2", K055673_LAYOUT_GX6, -81, -23, konamigx_type2_sprite_callback); m_k055673->alt_K055673_vh_start(machine(), "gfx2", K055673_LAYOUT_GX6, -81, -23, konamigx_type2_sprite_callback);
dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); dualscreen_left_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height);
dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height); dualscreen_right_tempbitmap = auto_bitmap_rgb32_alloc(machine(), width, height);
@ -2290,7 +2290,7 @@ VIDEO_START_MEMBER(konamigx_state,konamigx_6bpp_2)
if (!strcmp(machine().system().name,"salmndr2") || !strcmp(machine().system().name,"salmndr2a")) if (!strcmp(machine().system().name,"salmndr2") || !strcmp(machine().system().name,"salmndr2a"))
{ {
K055673_vh_start(machine(), "gfx2", K055673_LAYOUT_GX6, -48, -23, konamigx_salmndr2_sprite_callback); m_k055673->alt_K055673_vh_start(machine(), "gfx2", K055673_LAYOUT_GX6, -48, -23, konamigx_salmndr2_sprite_callback);
_gxcommoninitnosprites(machine()); _gxcommoninitnosprites(machine());
} }
@ -2303,7 +2303,7 @@ VIDEO_START_MEMBER(konamigx_state,konamigx_6bpp_2)
VIDEO_START_MEMBER(konamigx_state,opengolf) VIDEO_START_MEMBER(konamigx_state,opengolf)
{ {
m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_5, 0, NULL, konamigx_type2_tile_callback, 0); m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_5, 0, NULL, konamigx_type2_tile_callback, 0);
K055673_vh_start(machine(), "gfx2", K055673_LAYOUT_GX6, -53, -23, konamigx_type2_sprite_callback); m_k055673->alt_K055673_vh_start(machine(), "gfx2", K055673_LAYOUT_GX6, -53, -23, konamigx_type2_sprite_callback);
_gxcommoninitnosprites(machine()); _gxcommoninitnosprites(machine());
@ -2341,7 +2341,7 @@ VIDEO_START_MEMBER(konamigx_state,opengolf)
VIDEO_START_MEMBER(konamigx_state,racinfrc) VIDEO_START_MEMBER(konamigx_state,racinfrc)
{ {
m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_6, 0, NULL, konamigx_type2_tile_callback, 0); m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_6, 0, NULL, konamigx_type2_tile_callback, 0);
K055673_vh_start(machine(), "gfx2", K055673_LAYOUT_GX, -53, -23, konamigx_type2_sprite_callback); m_k055673->alt_K055673_vh_start(machine(), "gfx2", K055673_LAYOUT_GX, -53, -23, konamigx_type2_sprite_callback);
_gxcommoninitnosprites(machine()); _gxcommoninitnosprites(machine());

View File

@ -170,7 +170,7 @@ VIDEO_START_MEMBER(mystwarr_state,gaiapols)
mystwarr_decode_tiles(machine()); mystwarr_decode_tiles(machine());
K055673_vh_start(machine(), "gfx2", 1, -61, -22, gaiapols_sprite_callback); // stage2 brick walls m_k055673->alt_K055673_vh_start(machine(), "gfx2", 1, -61, -22, gaiapols_sprite_callback); // stage2 brick walls
konamigx_mixer_init(machine(), 0); konamigx_mixer_init(machine(), 0);
@ -210,7 +210,7 @@ VIDEO_START_MEMBER(mystwarr_state,dadandrn)
mystwarr_decode_tiles(machine()); mystwarr_decode_tiles(machine());
K055673_vh_start(machine(), "gfx2", 0, -42, -22, gaiapols_sprite_callback); m_k055673->alt_K055673_vh_start(machine(), "gfx2", 0, -42, -22, gaiapols_sprite_callback);
konamigx_mixer_init(machine(), 0); konamigx_mixer_init(machine(), 0);
@ -239,7 +239,7 @@ VIDEO_START_MEMBER(mystwarr_state,mystwarr)
mystwarr_decode_tiles(machine()); mystwarr_decode_tiles(machine());
K055673_vh_start(machine(), "gfx2", 0, -48, -24, mystwarr_sprite_callback); m_k055673->alt_K055673_vh_start(machine(), "gfx2", 0, -48, -24, mystwarr_sprite_callback);
konamigx_mixer_init(machine(), 0); konamigx_mixer_init(machine(), 0);
@ -262,7 +262,7 @@ VIDEO_START_MEMBER(mystwarr_state,metamrph)
mystwarr_decode_tiles(machine()); mystwarr_decode_tiles(machine());
K055673_vh_start(machine(), "gfx2", 1, -51, -22, metamrph_sprite_callback); m_k055673->alt_K055673_vh_start(machine(), "gfx2", 1, -51, -22, metamrph_sprite_callback);
konamigx_mixer_init(machine(), 0); konamigx_mixer_init(machine(), 0);
@ -284,7 +284,7 @@ VIDEO_START_MEMBER(mystwarr_state,viostorm)
mystwarr_decode_tiles(machine()); mystwarr_decode_tiles(machine());
K055673_vh_start(machine(), "gfx2", 1, -62, -23, metamrph_sprite_callback); m_k055673->alt_K055673_vh_start(machine(), "gfx2", 1, -62, -23, metamrph_sprite_callback);
konamigx_mixer_init(machine(), 0); konamigx_mixer_init(machine(), 0);
@ -305,7 +305,7 @@ VIDEO_START_MEMBER(mystwarr_state,martchmp)
mystwarr_decode_tiles(machine()); mystwarr_decode_tiles(machine());
K055673_vh_start(machine(), "gfx2", 0, -58, -23, martchmp_sprite_callback); m_k055673->alt_K055673_vh_start(machine(), "gfx2", 0, -58, -23, martchmp_sprite_callback);
konamigx_mixer_init(machine(), 0); konamigx_mixer_init(machine(), 0);