psikyo.cpp, dreamwld.cpp : Cleanups, Add notes (#3403)

* psikyo.cpp, dreamwld.cpp : Minor cleanups
dreamwld.cpp : Add Tilemap size register, Add notes

* dreamwld.cpp : Minor cleanup
psikyo.cpp : Documents of PIC, Minor cleanup

* psikyo.cpp : Fix background pen

* psikyo.cpp : Minor fix

* psikyo.cpp : Fix spacing
This commit is contained in:
cam900 2018-03-31 18:07:50 +09:00 committed by Vas Crabb
parent ecaba3d507
commit c3d693ce6f
4 changed files with 476 additions and 719 deletions

View File

@ -102,51 +102,56 @@ Stephh's notes (based on the game M68EC020 code and some tests) :
#include "screen.h"
#include "speaker.h"
#include <algorithm>
class dreamwld_state : public driver_device
{
public:
dreamwld_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_spriteram(*this, "spriteram"),
m_bg_videoram(*this, "bg_videoram"),
m_bg2_videoram(*this, "bg2_videoram"),
m_vregs(*this, "vregs"),
m_workram(*this, "workram"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette") { }
: driver_device(mconfig, type, tag)
, m_spriteram(*this, "spriteram")
, m_vram(*this, "vram_%u", 0)
, m_vregs(*this, "vregs")
, m_workram(*this, "workram")
, m_prot(*this, "prot")
, m_spritelut(*this, "spritelut")
, m_okibank(*this, "oki%ubank", 1)
, m_maincpu(*this, "maincpu")
, m_gfxdecode(*this, "gfxdecode")
, m_palette(*this, "palette")
{
std::fill(std::begin(m_old_linescroll), std::end(m_old_linescroll), 0);
}
/* memory pointers */
required_shared_ptr<uint32_t> m_spriteram;
required_shared_ptr<uint32_t> m_bg_videoram;
required_shared_ptr<uint32_t> m_bg2_videoram;
required_shared_ptr_array<uint32_t, 2> m_vram;
required_shared_ptr<uint32_t> m_vregs;
required_shared_ptr<uint32_t> m_workram;
optional_memory_region m_prot;
required_memory_region m_spritelut;
optional_memory_bank_array<2> m_okibank;
std::unique_ptr<uint16_t[]> m_lineram16;
DECLARE_READ16_MEMBER(lineram16_r) { return m_lineram16[offset]; }
DECLARE_WRITE16_MEMBER(lineram16_w) { COMBINE_DATA(&m_lineram16[offset]); }
/* video-related */
tilemap_t *m_bg_tilemap;
tilemap_t *m_bg2_tilemap;
tilemap_t *m_tilemap[2][2];
int m_tilebank[2];
int m_tilebankold[2];
int m_old_linescroll[2];
std::unique_ptr<uint32_t[]> m_spritebuf1;
std::unique_ptr<uint32_t[]> m_spritebuf2;
std::unique_ptr<uint32_t[]> m_spritebuf[2];
/* misc */
int m_protindex;
DECLARE_WRITE32_MEMBER(dreamwld_bg_videoram_w);
DECLARE_WRITE32_MEMBER(dreamwld_bg2_videoram_w);
DECLARE_READ32_MEMBER(dreamwld_protdata_r);
DECLARE_WRITE32_MEMBER(dreamwld_6295_0_bank_w);
DECLARE_WRITE32_MEMBER(dreamwld_6295_1_bank_w);
TILE_GET_INFO_MEMBER(get_dreamwld_bg_tile_info);
TILE_GET_INFO_MEMBER(get_dreamwld_bg2_tile_info);
template<int Layer> DECLARE_WRITE32_MEMBER(vram_w);
DECLARE_READ32_MEMBER(protdata_r);
template<int Chip> DECLARE_WRITE32_MEMBER(okibank_w);
template<int Layer> TILE_GET_INFO_MEMBER(get_tile_info);
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
@ -169,9 +174,9 @@ public:
void dreamwld_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
{
gfx_element *gfx = m_gfxdecode->gfx(0);
uint32_t *source = m_spritebuf1.get();
uint32_t *finish = m_spritebuf1.get() + 0x1000 / 4;
uint16_t *redirect = (uint16_t *)memregion("spritelut")->base();
uint32_t *source = m_spritebuf[0].get();
uint32_t *finish = m_spritebuf[0].get() + 0x1000 / 4;
uint16_t *redirect = (uint16_t *)m_spritelut->base();
int xoffset = 4;
while (source < finish)
@ -233,56 +238,48 @@ void dreamwld_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &clipre
}
}
WRITE32_MEMBER(dreamwld_state::dreamwld_bg_videoram_w)
template<int Layer>
WRITE32_MEMBER(dreamwld_state::vram_w)
{
COMBINE_DATA(&m_bg_videoram[offset]);
m_bg_tilemap->mark_tile_dirty(offset * 2);
m_bg_tilemap->mark_tile_dirty(offset * 2 + 1);
COMBINE_DATA(&m_vram[Layer][offset]);
m_tilemap[Layer]->mark_tile_dirty(offset * 2);
m_tilemap[Layer]->mark_tile_dirty(offset * 2 + 1);
}
TILE_GET_INFO_MEMBER(dreamwld_state::get_dreamwld_bg_tile_info)
template<int Layer>
TILE_GET_INFO_MEMBER(dreamwld_state::get_tile_info)
{
int tileno, colour;
tileno = (tile_index & 1) ? (m_bg_videoram[tile_index >> 1] & 0xffff) : ((m_bg_videoram[tile_index >> 1] >> 16) & 0xffff);
tileno = (tile_index & 1) ? (m_vram[Layer][tile_index >> 1] & 0xffff) : ((m_vram[Layer][tile_index >> 1] >> 16) & 0xffff);
colour = tileno >> 13;
tileno &= 0x1fff;
SET_TILE_INFO_MEMBER(1, tileno + m_tilebank[0] * 0x2000, 0x80 + colour, 0);
SET_TILE_INFO_MEMBER(1, tileno + m_tilebank[Layer] * 0x2000, (Layer * 0x40) + colour, 0);
}
WRITE32_MEMBER(dreamwld_state::dreamwld_bg2_videoram_w)
{
COMBINE_DATA(&m_bg2_videoram[offset]);
m_bg2_tilemap->mark_tile_dirty(offset * 2);
m_bg2_tilemap->mark_tile_dirty(offset * 2 + 1);
}
TILE_GET_INFO_MEMBER(dreamwld_state::get_dreamwld_bg2_tile_info)
{
uint16_t tileno, colour;
tileno = (tile_index & 1) ? (m_bg2_videoram[tile_index >> 1] & 0xffff) : ((m_bg2_videoram[tile_index >> 1] >> 16) & 0xffff);
colour = tileno >> 13;
tileno &= 0x1fff;
SET_TILE_INFO_MEMBER(1, tileno + m_tilebank[1] * 0x2000, 0xc0 + colour, 0);
}
void dreamwld_state::video_start()
{
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(dreamwld_state::get_dreamwld_bg_tile_info),this),TILEMAP_SCAN_ROWS, 16, 16, 64,64);
m_bg2_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(dreamwld_state::get_dreamwld_bg2_tile_info),this),TILEMAP_SCAN_ROWS, 16, 16, 64,64);
m_bg2_tilemap->set_transparent_pen(0);
m_bg_tilemap->set_scroll_rows(64*16); // line scrolling
m_bg_tilemap->set_scroll_cols(1);
m_bg2_tilemap->set_scroll_rows(64*16); // line scrolling
m_bg2_tilemap->set_scroll_cols(1);
m_spritebuf1 = std::make_unique<uint32_t[]>(0x2000 / 4);
m_spritebuf2 = std::make_unique<uint32_t[]>(0x2000 / 4);
m_tilemap[0][0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(dreamwld_state::get_tile_info<0>),this),TILEMAP_SCAN_ROWS, 16, 16, 64,64);
m_tilemap[1][0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(dreamwld_state::get_tile_info<1>),this),TILEMAP_SCAN_ROWS, 16, 16, 64,64);
m_tilemap[0][1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(dreamwld_state::get_tile_info<0>),this),TILEMAP_SCAN_ROWS, 16, 16, 128,32);
m_tilemap[1][1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(dreamwld_state::get_tile_info<1>),this),TILEMAP_SCAN_ROWS, 16, 16, 128,32);
m_tilemap[1]->set_transparent_pen(0);
for (int layer = 0; layer < 2; layer++)
{
for (int size = 0; size < 2; size++)
{
m_tilemap[layer][size]->set_scroll_rows(1);
m_tilemap[layer][size]->set_scroll_cols(1);
}
}
m_spritebuf[0] = std::make_unique<uint32_t[]>(0x2000 / 4);
m_spritebuf[1] = std::make_unique<uint32_t[]>(0x2000 / 4);
m_lineram16 = make_unique_clear<uint16_t[]>(0x400 / 2);
save_pointer(NAME(m_spritebuf[0].get()), 0x2000 / 4, 0);
save_pointer(NAME(m_spritebuf[1].get()), 0x2000 / 4, 1);
save_pointer(NAME(m_lineram16.get()), 0x400/2);
}
@ -292,120 +289,75 @@ WRITE_LINE_MEMBER(dreamwld_state::screen_vblank_dreamwld)
// rising edge
if (state)
{
memcpy(m_spritebuf2.get(), m_spritebuf1.get(), 0x2000);
memcpy(m_spritebuf1.get(), m_spriteram, 0x2000);
memcpy(m_spritebuf[1].get(), m_spritebuf[0].get(), 0x2000);
memcpy(m_spritebuf[0].get(), m_spriteram, 0x2000);
}
}
uint32_t dreamwld_state::screen_update_dreamwld(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
// int tm0size, tm1size;
tilemap_t *tmptilemap[2];
tilemap_t *tmptilemap0, *tmptilemap1;
int scrolly[2]{ m_vregs[(0x000 / 4)]+32, m_vregs[(0x008 / 4)]+32 };
tmptilemap0 = m_bg_tilemap;
tmptilemap1 = m_bg2_tilemap;
int scrollx[2]{ m_vregs[(0x004 / 4)] + 0, m_vregs[(0x00c / 4)] + 2 };
int layer0_scrolly = m_vregs[(0x000 / 4)]+32;
int layer1_scrolly = m_vregs[(0x008 / 4)]+32;
uint32_t layer_ctrl[2]{ m_vregs[0x010 / 4], m_vregs[0x014 / 4] };
int layer0_scrollx = m_vregs[(0x004 / 4)] + 0;
int layer1_scrollx = m_vregs[(0x00c / 4)] + 2;
uint32_t layer0_ctrl = m_vregs[0x010 / 4];
uint32_t layer1_ctrl = m_vregs[0x014 / 4];
m_tilebank[0] = (layer0_ctrl >> 6) & 1;
m_tilebank[1] = (layer1_ctrl >> 6) & 1;
if (m_tilebank[0] != m_tilebankold[0])
for (int layer = 0; layer < 2; layer++)
{
m_tilebankold[0] = m_tilebank[0];
m_bg_tilemap->mark_all_dirty();
}
m_tilebank[layer] = (layer_ctrl[layer] >> 6) & 1;
if (m_tilebank[1] != m_tilebankold[1])
{
m_tilebankold[1] = m_tilebank[1];
m_bg2_tilemap->mark_all_dirty();
}
tmptilemap0->set_scrolly(0, layer0_scrolly);
tmptilemap1->set_scrolly(0, layer1_scrolly);
// not on this hw?
#if 0
switch ((layer0_ctrl & 0x00c0) >> 6)
{
case 0: tm0size = 1; break;
case 1: tm0size = 2; break;
case 2: tm0size = 3; break;
default: tm0size = 0; break;
}
switch ((layer1_ctrl & 0x00c0) >> 6)
{
case 0: tm1size = 1; break;
case 1: tm1size = 2; break;
case 2: tm1size = 3; break;
default: tm1size = 0; break;
}
#endif
//popmessage("sizes %d %d\n", tm0size, tm1size);
for (int i = 0; i < 256; i++) /* 256 screen lines */
{
int x0 = 0, x1 = 0;
uint16_t* linebase;
/* layer 0 */
linebase = &m_lineram16[0x000];
if (layer0_ctrl & 0x0300)
if (m_tilebank[layer] != m_tilebankold[layer])
{
if (layer0_ctrl & 0x0200)
/* per-tile rowscroll */
x0 = linebase[((i+32)&0xff)/16];
else
/* per-line rowscroll */
x0 = linebase[(i+32)&0xff];
m_tilebankold[layer] = m_tilebank[layer];
for (int size = 0; size < 2; size++)
m_tilemap[layer][size]->mark_all_dirty();
}
tmptilemap0->set_scrollx(
(i + layer0_scrolly) & 0x3ff,
layer0_scrollx + x0 );
// Test mode only, Other size is enable?
int size = (layer_ctrl[layer] & 0x0400) >> 10;
tmptilemap[layer] = m_tilemap[layer][size];
int row_mask = 0x3ff >> size;
tmptilemap[layer]->set_scrolly(0, scrolly[layer]);
/* layer 1 */
linebase = &m_lineram16[0x200/2];
if (layer1_ctrl & 0x0300)
if (layer_ctrl[layer] & 0x0300)
{
if (layer1_ctrl & 0x0200)
/* per-tile rowscroll */
x1 = linebase[((i+32)&0xff)/16];
else
int tile_rowscroll = (layer_ctrl[layer] & 0x0200) >> 5;
if (m_old_linescroll[layer] != (layer_ctrl[layer] & 0x0300))
{
tmptilemap[layer]->set_scroll_rows(((64*16) >> size) >> tile_rowscroll);
m_old_linescroll[layer] = (layer_ctrl[layer] & 0x0300);
}
uint16_t* linebase = &m_lineram16[(layer * 0x200) / 2];
for (int i = 0; i < (256 >> tile_rowscroll); i++) /* 256 screen lines */
{
int x0 = 0;
/* per-line rowscroll */
x1 = linebase[(i+32)&0xff];
int x0 = linebase[(i+32)&0xff];
tmptilemap[layer]->set_scrollx(
(i + scrolly[layer]) & (row_mask >> tile_rowscroll),
scrollx[layer] + x0 );
}
}
else
{
if (m_old_linescroll != (layer_ctrl[layer] & 0x0300))
{
tmptilemap[layer]->set_scroll_rows(1);
m_old_linescroll = (layer_ctrl[layer] & 0x0300);
}
tmptilemap1->set_scrollx(
(i + layer1_scrolly) & 0x3ff,
layer1_scrollx + x1 );
tmptilemap[layer]->set_scrollx(0, scrollx[layer]);
}
}
tmptilemap0->draw(screen, bitmap, cliprect, 0, 0);
tmptilemap1->draw(screen, bitmap, cliprect, 0, 0);
tmptilemap[0]->draw(screen, bitmap, cliprect, 0, 0);
tmptilemap[1]->draw(screen, bitmap, cliprect, 0, 0);
draw_sprites(bitmap, cliprect);
@ -414,13 +366,12 @@ uint32_t dreamwld_state::screen_update_dreamwld(screen_device &screen, bitmap_in
READ32_MEMBER(dreamwld_state::dreamwld_protdata_r)
READ32_MEMBER(dreamwld_state::protdata_r)
{
//static int count = 0;
uint8_t *protdata = memregion("user1")->base();
size_t protsize = memregion("user1")->bytes();
uint8_t dat = protdata[(m_protindex++) % protsize];
size_t protsize = m_prot->bytes();
uint8_t dat = m_prot->base()[(m_protindex++) % protsize];
//printf("protection read %04x %02x\n", count, dat);
//count++;
@ -443,20 +394,13 @@ void dreamwld_state::oki2_map(address_map &map)
map(0x30000, 0x3ffff).bankr("oki2bank");
}
WRITE32_MEMBER(dreamwld_state::dreamwld_6295_0_bank_w)
template<int Chip>
WRITE32_MEMBER(dreamwld_state::okibank_w)
{
if (ACCESSING_BITS_0_7)
membank("oki1bank")->set_entry(data&3);
m_okibank[Chip]->set_entry(data&3);
else
logerror("OKI0: unk bank write %x mem_mask %8x\n", data, mem_mask);
}
WRITE32_MEMBER(dreamwld_state::dreamwld_6295_1_bank_w)
{
if (ACCESSING_BITS_0_7)
membank("oki2bank")->set_entry(data&3);
else
logerror("OKI1: unk bank write %x mem_mask %8x\n", data, mem_mask);
logerror("OKI%x: unk bank write %x mem_mask %8x\n", Chip, data, mem_mask);
}
@ -466,18 +410,18 @@ void dreamwld_state::baryon_map(address_map &map)
map(0x400000, 0x401fff).ram().share("spriteram");
map(0x600000, 0x601fff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette");
map(0x800000, 0x801fff).ram().w(this, FUNC(dreamwld_state::dreamwld_bg_videoram_w)).share("bg_videoram");
map(0x802000, 0x803fff).ram().w(this, FUNC(dreamwld_state::dreamwld_bg2_videoram_w)).share("bg2_videoram");
map(0x800000, 0x801fff).ram().w(this, FUNC(dreamwld_state::vram_w<0>)).share("vram_0");
map(0x802000, 0x803fff).ram().w(this, FUNC(dreamwld_state::vram_w<1>)).share("vram_1");
map(0x804000, 0x8043ff).rw(this, FUNC(dreamwld_state::lineram16_r), FUNC(dreamwld_state::lineram16_w)); // linescroll
map(0x804400, 0x805fff).ram().share("vregs");
map(0xc00000, 0xc00003).portr("INPUTS");
map(0xc00004, 0xc00007).portr("c00004");
map(0xc0000c, 0xc0000f).w(this, FUNC(dreamwld_state::dreamwld_6295_0_bank_w)); // sfx
map(0xc0000c, 0xc0000f).w(this, FUNC(dreamwld_state::okibank_w<0>)); // sfx
map(0xc00018, 0xc00018).rw("oki1", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); // sfx
map(0xc00030, 0xc00033).r(this, FUNC(dreamwld_state::dreamwld_protdata_r)); // it reads protection data (irq code) from here and puts it at ffd000
map(0xc00030, 0xc00033).r(this, FUNC(dreamwld_state::protdata_r)); // it reads protection data (irq code) from here and puts it at ffd000
map(0xfe0000, 0xffffff).ram().share("workram"); // work ram
}
@ -486,7 +430,7 @@ void dreamwld_state::dreamwld_map(address_map &map)
{
baryon_map(map);
map(0xc0002c, 0xc0002f).w(this, FUNC(dreamwld_state::dreamwld_6295_1_bank_w)); // sfx
map(0xc0002c, 0xc0002f).w(this, FUNC(dreamwld_state::okibank_w<1>)); // sfx
map(0xc00028, 0xc00028).rw("oki2", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); // sfx
}
@ -761,32 +705,30 @@ static const gfx_layout layout_16x16x4 =
16,16,
RGN_FRAC(1,1),
4,
{0,1,2,3},
{2*4,3*4,0*4,1*4,6*4,7*4,4*4,5*4,
10*4,11*4,8*4,9*4,14*4,15*4,12*4,13*4},
{0*64,1*64,2*64,3*64,4*64,5*64,6*64,7*64,
8*64,9*64,10*64,11*64,12*64,13*64,14*64,15*64},
{STEP4(0,1)},
{STEP16(0,4)},
{STEP16(0,4*16)},
16*16*4
};
static GFXDECODE_START( dreamwld )
GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x4, 0x000, 0x100 ) // [0] Sprites
GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x4, 0x000, 0x100 ) // [1] Layer 0 + 1
GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x4, 0x000, 0x40 ) // [0] Sprites
GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x4, 0x800, 0x48 ) // [1] Layer 0 + 1
GFXDECODE_END
void dreamwld_state::machine_start()
{
if (subdevice("oki1"))
if (m_okibank[0].found())
{
membank("oki1bank")->configure_entries(0, 4, memregion("oki1")->base()+0x30000, 0x10000);
membank("oki1bank")->set_entry(0);
m_okibank[0]->configure_entries(0, 4, memregion("oki1")->base()+0x30000, 0x10000);
m_okibank[0]->set_entry(0);
}
if (subdevice("oki2"))
if (m_okibank[1].found())
{
membank("oki2bank")->configure_entries(0, 4, memregion("oki2")->base()+0x30000, 0x10000);
membank("oki2bank")->set_entry(0);
m_okibank[1]->configure_entries(0, 4, memregion("oki2")->base()+0x30000, 0x10000);
m_okibank[1]->set_entry(0);
}
save_item(NAME(m_protindex));
@ -895,18 +837,18 @@ ROM_START( baryon ) // this set had original SemiCom labels
ROM_REGION( 0x10000, "cpu1", 0 ) /* 87C52 MCU Code */
ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped. */
ROM_REGION( 0x6bd, "user1", 0 ) /* Protection data - from baryona set, assumed to be the same */
ROM_REGION( 0x6bd, "prot", 0 ) /* Protection data - from baryona set, assumed to be the same */
ROM_LOAD( "protdata.bin", 0x000, 0x6bd, CRC(117f32a8) SHA1(837bea09d3e59ab9e13bd1103b1fc988edb361c0) ) /* extracted */
ROM_REGION( 0x80000, "oki1", 0 ) /* OKI Samples */
ROM_LOAD( "1_semicom", 0x000000, 0x80000, CRC(e0349074) SHA1(f3d53d96dff586a0ad1632f52e5559cdce5ed0d8) ) // eprom type 27C040
ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprite Tiles - decoded */
ROM_LOAD16_WORD_SWAP( "10_semicom", 0x000000, 0x200000, CRC(28bf828f) SHA1(271390cc4f4015a3b69976f0d0527947f13c971b) ) // eprom type 27C160
ROM_LOAD16_WORD_SWAP( "11_semicom", 0x200000, 0x200000, CRC(d0ff1bc6) SHA1(4aeb795222eedeeba770cf725122e989f97119b2) ) // eprom type 27C160
ROM_LOAD( "10_semicom", 0x000000, 0x200000, CRC(28bf828f) SHA1(271390cc4f4015a3b69976f0d0527947f13c971b) ) // eprom type 27C160
ROM_LOAD( "11_semicom", 0x200000, 0x200000, CRC(d0ff1bc6) SHA1(4aeb795222eedeeba770cf725122e989f97119b2) ) // eprom type 27C160
ROM_REGION( 0x200000, "gfx2", 0 ) /* BG Tiles - decoded */
ROM_LOAD16_WORD_SWAP( "8_semicom",0x000000, 0x200000, CRC(684012e6) SHA1(4cb60907184b67be130b8385e4336320c0f6e4a7) ) // eprom type 27C160
ROM_LOAD( "8_semicom",0x000000, 0x200000, CRC(684012e6) SHA1(4cb60907184b67be130b8385e4336320c0f6e4a7) ) // eprom type 27C160
ROM_REGION( 0x040000, "spritelut", 0 ) /* Sprite Code Lookup ... */
ROM_LOAD16_BYTE( "6_semicom", 0x000000, 0x020000, CRC(fdbb08b0) SHA1(4b3ac56c4c8370b1434fb6a481fce0d9c52313e0) ) // eprom type 27C010
@ -926,18 +868,18 @@ ROM_START( baryona ) // replacment labels? no SemiCom logo
ROM_REGION( 0x10000, "cpu1", 0 ) /* 87C52 MCU Code */
ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped. */
ROM_REGION( 0x6bd, "user1", 0 ) /* Protection data */
ROM_REGION( 0x6bd, "prot", 0 ) /* Protection data */
ROM_LOAD( "protdata.bin", 0x000, 0x6bd, CRC(117f32a8) SHA1(837bea09d3e59ab9e13bd1103b1fc988edb361c0) ) /* extracted */
ROM_REGION( 0x80000, "oki1", 0 ) /* OKI Samples */
ROM_LOAD( "1.bin", 0x000000, 0x80000, CRC(e0349074) SHA1(f3d53d96dff586a0ad1632f52e5559cdce5ed0d8) )
ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprite Tiles - decoded */
ROM_LOAD16_WORD_SWAP( "9.bin", 0x000000, 0x200000, CRC(28bf828f) SHA1(271390cc4f4015a3b69976f0d0527947f13c971b) )
ROM_LOAD16_WORD_SWAP( "11.bin", 0x200000, 0x200000, CRC(d0ff1bc6) SHA1(4aeb795222eedeeba770cf725122e989f97119b2) )
ROM_LOAD( "9.bin", 0x000000, 0x200000, CRC(28bf828f) SHA1(271390cc4f4015a3b69976f0d0527947f13c971b) )
ROM_LOAD( "11.bin", 0x200000, 0x200000, CRC(d0ff1bc6) SHA1(4aeb795222eedeeba770cf725122e989f97119b2) )
ROM_REGION( 0x200000, "gfx2", 0 ) /* BG Tiles - decoded */
ROM_LOAD16_WORD_SWAP( "2.bin",0x000000, 0x200000, CRC(684012e6) SHA1(4cb60907184b67be130b8385e4336320c0f6e4a7) )
ROM_LOAD( "2.bin",0x000000, 0x200000, CRC(684012e6) SHA1(4cb60907184b67be130b8385e4336320c0f6e4a7) )
ROM_REGION( 0x040000, "spritelut", 0 ) /* Sprite Code Lookup ... */
ROM_LOAD16_BYTE( "8.bin", 0x000000, 0x020000, CRC(fdbb08b0) SHA1(4b3ac56c4c8370b1434fb6a481fce0d9c52313e0) )
@ -996,7 +938,7 @@ ROM_START( cutefght )
ROM_REGION( 0x10000, "cpu1", 0 ) /* 87C52 MCU Code */
ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped. */
ROM_REGION( 0x1000, "user1", ROMREGION_ERASEFF ) /* Protection data */
ROM_REGION( 0x1000, "prot", ROMREGION_ERASEFF ) /* Protection data */
ROM_LOAD( "protdata.bin", 0x000, 0x701 , CRC(764c3c0e) SHA1(ae044d016850b730b2d97ccb7845b6b438c1e074) )
ROM_REGION( 0x80000, "oki1", 0 ) /* OKI Samples - 1st chip */
@ -1006,13 +948,13 @@ ROM_START( cutefght )
ROM_LOAD( "1_semicom", 0x000000, 0x80000, CRC(fa3b6890) SHA1(7534931c96d6fa05fee840a7ea07b87e2e2acc50) )
ROM_REGION( 0x800000, "gfx1", 0 ) /* Sprite Tiles - decoded */
ROM_LOAD16_WORD_SWAP( "10_semicom", 0x000000, 0x200000, CRC(62bf1e6e) SHA1(fb4b0db313e26687f0ebc6a8505a02e5348776da) )
ROM_LOAD16_WORD_SWAP( "11_semicom", 0x200000, 0x200000, CRC(796f23a7) SHA1(adaa4c8525de428599f4489ecc8e966fed0d514d) )
ROM_LOAD16_WORD_SWAP( "13_semicom", 0x400000, 0x200000, CRC(24222b3c) SHA1(08163863890c01728db89b8f4447841ecb4f4f62) )
ROM_LOAD16_WORD_SWAP( "14_semicom", 0x600000, 0x200000, CRC(385b69d7) SHA1(8e7cae5589e354bea0b77b061af1d0c81d796f7c) )
ROM_LOAD( "10_semicom", 0x000000, 0x200000, CRC(62bf1e6e) SHA1(fb4b0db313e26687f0ebc6a8505a02e5348776da) )
ROM_LOAD( "11_semicom", 0x200000, 0x200000, CRC(796f23a7) SHA1(adaa4c8525de428599f4489ecc8e966fed0d514d) )
ROM_LOAD( "13_semicom", 0x400000, 0x200000, CRC(24222b3c) SHA1(08163863890c01728db89b8f4447841ecb4f4f62) )
ROM_LOAD( "14_semicom", 0x600000, 0x200000, CRC(385b69d7) SHA1(8e7cae5589e354bea0b77b061af1d0c81d796f7c) )
ROM_REGION( 0x200000, "gfx2", 0 ) /* BG Tiles - decoded */
ROM_LOAD16_WORD_SWAP( "12_semicom",0x000000, 0x200000, CRC(45d29c22) SHA1(df719a061dcd14fb4388fb45dfee2054e56a1299) )
ROM_LOAD( "12_semicom",0x000000, 0x200000, CRC(45d29c22) SHA1(df719a061dcd14fb4388fb45dfee2054e56a1299) )
ROM_REGION( 0x040000, "spritelut", 0 ) /* Sprite Code Lookup ... */
ROM_LOAD16_BYTE( "7_semicom", 0x000000, 0x020000, CRC(39454102) SHA1(347e9242fd7e2092cfaacdce92691cf6024471ac) )
@ -1075,7 +1017,7 @@ ROM_START( rolcrush )
ROM_REGION( 0x10000, "cpu1", 0 ) /* 87C52 MCU Code */
ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped. */
ROM_REGION( 0x10000, "user1", ROMREGION_ERASE00 ) /* Protection data */
ROM_REGION( 0x10000, "prot", ROMREGION_ERASE00 ) /* Protection data */
ROM_LOAD( "protdata.bin", 0x000, 0x745, CRC(06b8a880) SHA1(b7d4bf26d34cb544825270c2c474bbd4c81a6c9e) ) /* extracted */
ROM_REGION( 0x80000, "oki1", 0 ) /* OKI Samples - 1st chip*/
@ -1085,10 +1027,10 @@ ROM_START( rolcrush )
/* not populared */
ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprite Tiles - decoded */
ROM_LOAD16_WORD_SWAP( "m27c160.8.bin", 0x000000, 0x200000, CRC(a509bc36) SHA1(aaa008e07e4b24ff9dbcee5925d6516d1662931c) )
ROM_LOAD( "m27c160.8.bin", 0x000000, 0x200000, CRC(a509bc36) SHA1(aaa008e07e4b24ff9dbcee5925d6516d1662931c) )
ROM_REGION( 0x200000, "gfx2", 0 ) /* BG Tiles - decoded */
ROM_LOAD16_WORD_SWAP( "m27c160.10.bin",0x000000, 0x200000, CRC(739b0cb0) SHA1(a7cc48502d84218586afa7276fa7ba759242f05e) )
ROM_LOAD( "m27c160.10.bin",0x000000, 0x200000, CRC(739b0cb0) SHA1(a7cc48502d84218586afa7276fa7ba759242f05e) )
ROM_REGION( 0x040000, "spritelut", 0 ) /* Sprite Code Lookup ... */
ROM_LOAD16_BYTE( "tms27c010_7.bin", 0x000000, 0x020000, CRC(4cb84384) SHA1(8dd02e2d9829c15cb19654779d2217a7d53d5971) )
@ -1109,7 +1051,7 @@ ROM_START( rolcrusha )
ROM_REGION( 0x10000, "cpu1", 0 ) /* 87C52 MCU Code */
ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped. */
ROM_REGION( 0x10000, "user1", ROMREGION_ERASE00 ) /* Protection data */
ROM_REGION( 0x10000, "prot", ROMREGION_ERASE00 ) /* Protection data */
ROM_LOAD( "protdata.bin", 0x000, 0x745, CRC(06b8a880) SHA1(b7d4bf26d34cb544825270c2c474bbd4c81a6c9e) )
ROM_REGION( 0x80000, "oki1", 0 ) /* OKI Samples - 1st chip*/
@ -1119,10 +1061,10 @@ ROM_START( rolcrusha )
/* not populared */
ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprite Tiles - decoded */
ROM_LOAD16_WORD_SWAP( "8", 0x000000, 0x200000, CRC(01446191) SHA1(b106ed6c085fad617552972db78866a3346e4553) )
ROM_LOAD( "8", 0x000000, 0x200000, CRC(01446191) SHA1(b106ed6c085fad617552972db78866a3346e4553) )
ROM_REGION( 0x200000, "gfx2", 0 ) /* BG Tiles - decoded */
ROM_LOAD16_WORD_SWAP( "10",0x000000, 0x200000, CRC(8cb75392) SHA1(8b274cd13876e65fffc157d8459331032c3c16db) )
ROM_LOAD( "10",0x000000, 0x200000, CRC(8cb75392) SHA1(8b274cd13876e65fffc157d8459331032c3c16db) )
ROM_REGION( 0x040000, "spritelut", 0 ) /* Sprite Code Lookup ... */
ROM_LOAD16_BYTE( "7", 0x000000, 0x020000, CRC(23d641e4) SHA1(1df8afb5c0118e8588d301db64f6adeb9ae40a79) )
@ -1184,7 +1126,7 @@ ROM_START( dreamwld )
ROM_REGION( 0x10000, "cpu1", 0 ) /* 87C52 MCU Code */
ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped. */
ROM_REGION( 0x6c9, "user1", 0 ) /* Protection data */
ROM_REGION( 0x6c9, "prot", 0 ) /* Protection data */
/* The MCU supplies this data.
The 68k reads it through a port, taking the size and destination write address from the level 1
and level 2 irq positions in the 68k vector table (there is code to check that they haven't been
@ -1199,10 +1141,10 @@ ROM_START( dreamwld )
ROM_LOAD( "6.bin", 0x000000, 0x80000, CRC(c8b91f30) SHA1(706004ca56d0a74bc7a3dfd73a21cdc09eb90f05) )
ROM_REGION( 0x400000, "gfx1", 0 ) /* Sprite Tiles - decoded */
ROM_LOAD16_WORD_SWAP( "9.bin", 0x000000, 0x200000, CRC(fa84e3af) SHA1(5978737d348fd382f4ec004d29870656c864d137) )
ROM_LOAD( "9.bin", 0x000000, 0x200000, CRC(fa84e3af) SHA1(5978737d348fd382f4ec004d29870656c864d137) )
ROM_REGION( 0x200000, "gfx2", 0 ) /* BG Tiles - decoded */
ROM_LOAD16_WORD_SWAP( "10.bin",0x000000, 0x200000, CRC(3553e4f5) SHA1(c335494f4a12a01a88e7cd578cae922954303cfd) )
ROM_LOAD( "10.bin",0x000000, 0x200000, CRC(3553e4f5) SHA1(c335494f4a12a01a88e7cd578cae922954303cfd) )
ROM_REGION( 0x040000, "spritelut", 0 ) /* Sprite Code Lookup ... */
ROM_LOAD16_BYTE( "8.bin", 0x000000, 0x020000, CRC(8d570df6) SHA1(e53e4b099c64eca11d027e0083caa101fcd99959) )
@ -1271,7 +1213,7 @@ ROM_START( gaialast )
ROM_REGION( 0x10000, "cpu1", 0 ) /* 87C52 MCU Code */
ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped. */
ROM_REGION( 0x6c9, "user1", ROMREGION_ERASEFF ) /* Protection data */
ROM_REGION( 0x6c9, "prot", ROMREGION_ERASEFF ) /* Protection data */
ROM_LOAD( "protdata.bin", 0x000, 0x6c9 , CRC(d3403b7b) SHA1(712a7f27fc41b632d584237f7641e8ae20035111) )
ROM_REGION( 0x80000, "oki1", 0 ) /* OKI Samples */
@ -1281,12 +1223,12 @@ ROM_START( gaialast )
/* not populared */
ROM_REGION( 0x800000, "gfx1", 0 ) /* Sprite Tiles - decoded */
ROM_LOAD16_WORD_SWAP( "10", 0x000000, 0x200000, CRC(5822ef93) SHA1(8ce22c30f8027f35c5f72eb6ce57a74540dd55da) )
ROM_LOAD16_WORD_SWAP( "11", 0x200000, 0x200000, CRC(f4f5770d) SHA1(ac850483cae321d286a09fe93ce7e49725722de0) )
ROM_LOAD16_WORD_SWAP( "12", 0x400000, 0x200000, CRC(a1f04571) SHA1(c29b3b3c209b63ad44ebfa5afb4b1832965e0936) )
ROM_LOAD( "10", 0x000000, 0x200000, CRC(5822ef93) SHA1(8ce22c30f8027f35c5f72eb6ce57a74540dd55da) )
ROM_LOAD( "11", 0x200000, 0x200000, CRC(f4f5770d) SHA1(ac850483cae321d286a09fe93ce7e49725722de0) )
ROM_LOAD( "12", 0x400000, 0x200000, CRC(a1f04571) SHA1(c29b3b3c209b63ad44ebfa5afb4b1832965e0936) )
ROM_REGION( 0x200000, "gfx2", 0 ) /* BG Tiles - decoded */
ROM_LOAD16_WORD_SWAP( "8",0x000000, 0x200000, CRC(32d16985) SHA1(2b7a20eea09e7d2debd42469e9f6ae49310f5747) )
ROM_LOAD( "8",0x000000, 0x200000, CRC(32d16985) SHA1(2b7a20eea09e7d2debd42469e9f6ae49310f5747) )
ROM_REGION( 0x040000, "spritelut", 0 ) /* Sprite Code Lookup ... */
ROM_LOAD16_BYTE( "6", 0x000000, 0x020000, CRC(5c82feed) SHA1(1857afecf1081adf015ade1efb5930e3a7deef78) )

View File

@ -70,6 +70,7 @@ This was pointed out by Bart Puype
#include "cpu/z80/z80.h"
#include "cpu/m68000/m68000.h"
#include "cpu/pic16c5x/pic16c5x.h"
#include "sound/2610intf.h"
#include "sound/ymf278b.h"
#include "sound/okim6295.h"
@ -220,6 +221,24 @@ READ32_MEMBER(psikyo_state::s1945_mcu_r)
return 0;
}
template<int Layer>
WRITE32_MEMBER(psikyo_state::vram_w)
{
COMBINE_DATA(&m_vram[Layer][offset]);
for (int size = 0; size < 4; size++)
{
if (ACCESSING_BITS_16_31)
{
m_tilemap[Layer][size]->mark_tile_dirty(offset * 2);
}
if (ACCESSING_BITS_0_15)
{
m_tilemap[Layer][size]->mark_tile_dirty(offset * 2 + 1);
}
}
}
/***************************************************************************
@ -234,8 +253,8 @@ void psikyo_state::psikyo_map(address_map &map)
map(0x000000, 0x0fffff).rom(); // ROM (not all used)
map(0x400000, 0x401fff).ram().share("spriteram"); // Sprites, buffered by two frames (list buffered + fb buffered)
map(0x600000, 0x601fff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette"); // Palette
map(0x800000, 0x801fff).ram().w(this, FUNC(psikyo_state::psikyo_vram_0_w)).share("vram_0"); // Layer 0
map(0x802000, 0x803fff).ram().w(this, FUNC(psikyo_state::psikyo_vram_1_w)).share("vram_1"); // Layer 1
map(0x800000, 0x801fff).ram().w(this, FUNC(psikyo_state::vram_w<0>)).share("vram_0"); // Layer 0
map(0x802000, 0x803fff).ram().w(this, FUNC(psikyo_state::vram_w<1>)).share("vram_1"); // Layer 1
map(0x804000, 0x807fff).ram().share("vregs"); // RAM + Vregs
// AM_RANGE(0xc00000, 0xc0000b) AM_READ(psikyo_input_r) // Depends on board
// AM_RANGE(0xc00004, 0xc0000b) AM_WRITE(s1945_mcu_w) // MCU on sh404
@ -243,6 +262,12 @@ void psikyo_state::psikyo_map(address_map &map)
map(0xfe0000, 0xffffff).ram(); // RAM
}
template<int Shift>
WRITE8_MEMBER(psikyo_state::sound_bankswitch_w)
{
m_audiobank->set_entry((data >> Shift) & 0x03);
}
READ32_MEMBER(psikyo_state::s1945bl_oki_r)
{
uint8_t dat = m_oki->read(space, 0);
@ -261,7 +286,7 @@ WRITE32_MEMBER(psikyo_state::s1945bl_oki_w)
// not at all sure about this, it seems to write 0 too often
uint8_t bank = (data & 0x00ff0000) >> 16;
if (bank < 4)
membank("okibank")->set_entry(bank);
m_okibank->set_entry(bank);
}
if (ACCESSING_BITS_8_15)
@ -284,8 +309,8 @@ void psikyo_state::psikyo_bootleg_map(address_map &map)
map(0x400000, 0x401fff).ram().share("spriteram"); // Sprites, buffered by two frames (list buffered + fb buffered)
map(0x600000, 0x601fff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette"); // Palette
map(0x800000, 0x801fff).ram().w(this, FUNC(psikyo_state::psikyo_vram_0_w)).share("vram_0"); // Layer 0
map(0x802000, 0x803fff).ram().w(this, FUNC(psikyo_state::psikyo_vram_1_w)).share("vram_1"); // Layer 1
map(0x800000, 0x801fff).ram().w(this, FUNC(psikyo_state::vram_w<0>)).share("vram_0"); // Layer 0
map(0x802000, 0x803fff).ram().w(this, FUNC(psikyo_state::vram_w<1>)).share("vram_1"); // Layer 1
map(0x804000, 0x807fff).ram().share("vregs"); // RAM + Vregs
map(0xc00000, 0xc0000b).r(this, FUNC(psikyo_state::gunbird_input_r)); // input ports
@ -303,9 +328,9 @@ READ32_MEMBER(psikyo_state::sngkace_input_r)
{
switch (offset)
{
case 0x0: return ioport("P1_P2")->read();
case 0x1: return ioport("DSW")->read();
case 0x2: return ioport("COIN")->read();
case 0x0: return m_in_p1_p2->read();
case 0x1: return m_in_dsw->read();
case 0x2: return m_in_coin->read();
default: logerror("PC %06X - Read input %02X !\n", m_maincpu->pc(), offset * 2);
return 0;
}
@ -318,23 +343,18 @@ void psikyo_state::sngkace_map(address_map &map)
map(0xc00013, 0xc00013).w(m_soundlatch, FUNC(generic_latch_8_device::write));
}
WRITE8_MEMBER(psikyo_state::sngkace_sound_bankswitch_w)
{
membank("bank1")->set_entry(data & 0x03);
}
void psikyo_state::sngkace_sound_map(address_map &map)
{
map(0x0000, 0x77ff).rom(); // ROM
map(0x7800, 0x7fff).ram(); // RAM
map(0x8000, 0xffff).bankr("bank1"); // Banked ROM
map(0x8000, 0xffff).bankr("audiobank"); // Banked ROM
}
void psikyo_state::sngkace_sound_io_map(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x03).rw("ymsnd", FUNC(ym2610_device::read), FUNC(ym2610_device::write));
map(0x04, 0x04).w(this, FUNC(psikyo_state::sngkace_sound_bankswitch_w));
map(0x04, 0x04).w(this, FUNC(psikyo_state::sound_bankswitch_w<0>));
map(0x08, 0x08).r(m_soundlatch, FUNC(generic_latch_8_device::read));
map(0x0c, 0x0c).w(m_soundlatch, FUNC(generic_latch_8_device::acknowledge_w));
}
@ -348,8 +368,8 @@ READ32_MEMBER(psikyo_state::gunbird_input_r)
{
switch (offset)
{
case 0x0: return ioport("P1_P2")->read();
case 0x1: return ioport("DSW")->read();
case 0x0: return m_in_p1_p2->read();
case 0x1: return m_in_dsw->read();
default: logerror("PC %06X - Read input %02X !\n", m_maincpu->pc(), offset * 2);
return 0;
}
@ -369,22 +389,17 @@ void psikyo_state::s1945jn_map(address_map &map)
map(0xc00011, 0xc00011).w(m_soundlatch, FUNC(generic_latch_8_device::write));
}
WRITE8_MEMBER(psikyo_state::gunbird_sound_bankswitch_w)
{
membank("bank1")->set_entry((data >> 4) & 0x03);
}
void psikyo_state::gunbird_sound_map(address_map &map)
{
map(0x0000, 0x7fff).rom(); // ROM
map(0x8000, 0x81ff).ram(); // RAM
map(0x8200, 0xffff).bankr("bank1"); // Banked ROM
map(0x8200, 0xffff).bankr("audiobank"); // Banked ROM
}
void psikyo_state::gunbird_sound_io_map(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x00).w(this, FUNC(psikyo_state::gunbird_sound_bankswitch_w));
map(0x00, 0x00).w(this, FUNC(psikyo_state::sound_bankswitch_w<4>));
map(0x04, 0x07).rw("ymsnd", FUNC(ym2610_device::read), FUNC(ym2610_device::write));
map(0x08, 0x08).r(m_soundlatch, FUNC(generic_latch_8_device::read));
map(0x0c, 0x0c).w(m_soundlatch, FUNC(generic_latch_8_device::acknowledge_w));
@ -398,8 +413,8 @@ READ32_MEMBER(psikyo_state::s1945_input_r)
{
switch (offset)
{
case 0x0: return ioport("P1_P2")->read();
case 0x1: return (ioport("DSW")->read() & 0xffff000f) | s1945_mcu_r(space, offset - 1, mem_mask);
case 0x0: return m_in_p1_p2->read();
case 0x1: return (m_in_dsw->read() & 0xffff000f) | s1945_mcu_r(space, offset - 1, mem_mask);
case 0x2: return s1945_mcu_r(space, offset - 1, mem_mask);
default: logerror("PC %06X - Read input %02X !\n", m_maincpu->pc(), offset * 2);
return 0;
@ -417,7 +432,7 @@ void psikyo_state::s1945_map(address_map &map)
void psikyo_state::s1945_sound_io_map(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x00).w(this, FUNC(psikyo_state::gunbird_sound_bankswitch_w));
map(0x00, 0x00).w(this, FUNC(psikyo_state::sound_bankswitch_w<4>));
map(0x02, 0x03).nopw();
map(0x08, 0x0d).rw("ymf", FUNC(ymf278b_device::read), FUNC(ymf278b_device::write));
map(0x10, 0x10).r(m_soundlatch, FUNC(generic_latch_8_device::read));
@ -970,11 +985,9 @@ static const gfx_layout layout_16x16x4 =
16,16,
RGN_FRAC(1,1),
4,
{0,1,2,3},
{2*4,3*4,0*4,1*4,6*4,7*4,4*4,5*4,
10*4,11*4,8*4,9*4,14*4,15*4,12*4,13*4},
{0*64,1*64,2*64,3*64,4*64,5*64,6*64,7*64,
8*64,9*64,10*64,11*64,12*64,13*64,14*64,15*64},
{STEP4(0,1)},
{STEP16(0,4)},
{STEP16(0,4*16)},
16*16*4
};
@ -996,8 +1009,7 @@ GFXDECODE_END
void psikyo_state::machine_start()
{
save_item(NAME(m_mcu_status));
save_item(NAME(m_tilemap_0_bank));
save_item(NAME(m_tilemap_1_bank));
save_item(NAME(m_tilemap_bank));
}
void psikyo_state::machine_reset()
@ -1022,7 +1034,6 @@ MACHINE_CONFIG_START(psikyo_state::sngkace)
MCFG_CPU_PROGRAM_MAP(sngkace_sound_map)
MCFG_CPU_IO_MAP(sngkace_sound_io_map)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(59.3)
@ -1069,7 +1080,6 @@ MACHINE_CONFIG_START(psikyo_state::gunbird)
MCFG_CPU_PROGRAM_MAP(gunbird_sound_map)
MCFG_CPU_IO_MAP(gunbird_sound_io_map)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(59.3)
@ -1111,7 +1121,6 @@ MACHINE_CONFIG_START(psikyo_state::s1945bl) /* Bootleg hardware based on the unp
MCFG_CPU_PROGRAM_MAP(psikyo_bootleg_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", psikyo_state, irq1_line_hold)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(59.3)
@ -1154,8 +1163,8 @@ MACHINE_CONFIG_START(psikyo_state::s1945)
MCFG_CPU_PROGRAM_MAP(gunbird_sound_map)
MCFG_CPU_IO_MAP(s1945_sound_io_map)
/* MCU should go here */
MCFG_CPU_ADD("mcu", PIC16C57, 4000000) /* 4 MHz? */
MCFG_DEVICE_DISABLE() /* Internal ROM aren't dumped */
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@ -1186,9 +1195,6 @@ MACHINE_CONFIG_START(psikyo_state::s1945)
MACHINE_CONFIG_END
/***************************************************************************
@ -1214,7 +1220,6 @@ OSC: 32.000, 14.31818 MHz
***************************************************************************/
ROM_START( samuraia )
ROM_REGION( 0x100000, "maincpu", 0 ) /* Main CPU Code */
ROM_LOAD32_WORD_SWAP( "4-u127.bin", 0x000000, 0x040000, CRC(8c9911ca) SHA1(821ba648b9a1d495c600cbf4606f2dbddc6f9e6f) ) // 1&0
ROM_LOAD32_WORD_SWAP( "5-u126.bin", 0x000002, 0x040000, CRC(d20c3ef0) SHA1(264e5a7e45e130a9e7152468733337668dc5b65f) ) // 3&2
@ -1223,11 +1228,11 @@ ROM_START( samuraia )
ROM_LOAD( "3-u58.bin", 0x00000, 0x20000, CRC(310f5c76) SHA1(dbfd1c5a7a514bccd89fc4f7191744cf76bb745d) )
ROM_REGION( 0x200000, "gfx1", 0 ) /* Sprites */
ROM_LOAD( "u14.bin", 0x000000, 0x200000, CRC(00a546cb) SHA1(30a8679b49928d5fcbe58b5eecc2ebd08173adf8) )
ROM_LOAD16_WORD_SWAP( "u14.bin", 0x000000, 0x200000, CRC(00a546cb) SHA1(30a8679b49928d5fcbe58b5eecc2ebd08173adf8) )
ROM_REGION( 0x200000, "gfx2", 0 ) /* Layers 0 + 1 */
ROM_LOAD( "u34.bin", 0x000000, 0x100000, CRC(e6a75bd8) SHA1(1aa84ea54584b6c8b2846194b48bf6d2afa67fee) )
ROM_LOAD( "u35.bin", 0x100000, 0x100000, CRC(c4ca0164) SHA1(c75422de2e0127cdc23d8c223b674a5bd85b00fb) )
ROM_LOAD16_WORD_SWAP( "u34.bin", 0x000000, 0x100000, CRC(e6a75bd8) SHA1(1aa84ea54584b6c8b2846194b48bf6d2afa67fee) )
ROM_LOAD16_WORD_SWAP( "u35.bin", 0x100000, 0x100000, CRC(c4ca0164) SHA1(c75422de2e0127cdc23d8c223b674a5bd85b00fb) )
ROM_REGION( 0x100000, "ymsnd", 0 ) /* Samples */
ROM_LOAD( "u68.bin", 0x000000, 0x100000, CRC(9a7f6c34) SHA1(c549b209bce1d2c6eeb512db198ad20c3f5fb0ea) )
@ -1246,11 +1251,11 @@ ROM_START( sngkace )
ROM_LOAD( "3-u58.bin", 0x00000, 0x20000, CRC(310f5c76) SHA1(dbfd1c5a7a514bccd89fc4f7191744cf76bb745d) )
ROM_REGION( 0x200000, "gfx1", 0 ) /* Sprites */
ROM_LOAD( "u14.bin", 0x000000, 0x200000, CRC(00a546cb) SHA1(30a8679b49928d5fcbe58b5eecc2ebd08173adf8) )
ROM_LOAD16_WORD_SWAP( "u14.bin", 0x000000, 0x200000, CRC(00a546cb) SHA1(30a8679b49928d5fcbe58b5eecc2ebd08173adf8) )
ROM_REGION( 0x200000, "gfx2", 0 ) /* Layers 0 + 1 */
ROM_LOAD( "u34.bin", 0x000000, 0x100000, CRC(e6a75bd8) SHA1(1aa84ea54584b6c8b2846194b48bf6d2afa67fee) )
ROM_LOAD( "u35.bin", 0x100000, 0x100000, CRC(c4ca0164) SHA1(c75422de2e0127cdc23d8c223b674a5bd85b00fb) )
ROM_LOAD16_WORD_SWAP( "u34.bin", 0x000000, 0x100000, CRC(e6a75bd8) SHA1(1aa84ea54584b6c8b2846194b48bf6d2afa67fee) )
ROM_LOAD16_WORD_SWAP( "u35.bin", 0x100000, 0x100000, CRC(c4ca0164) SHA1(c75422de2e0127cdc23d8c223b674a5bd85b00fb) )
ROM_REGION( 0x100000, "ymsnd", 0 ) /* Samples */
ROM_LOAD( "u68.bin", 0x000000, 0x100000, CRC(9a7f6c34) SHA1(c549b209bce1d2c6eeb512db198ad20c3f5fb0ea) )
@ -1269,11 +1274,11 @@ ROM_START( sngkacea ) // the roms have a very visible "." symbol after the numbe
ROM_LOAD( "3-u58.bin", 0x00000, 0x20000, CRC(310f5c76) SHA1(dbfd1c5a7a514bccd89fc4f7191744cf76bb745d) )
ROM_REGION( 0x200000, "gfx1", 0 ) /* Sprites */
ROM_LOAD( "u14.bin", 0x000000, 0x200000, CRC(00a546cb) SHA1(30a8679b49928d5fcbe58b5eecc2ebd08173adf8) )
ROM_LOAD16_WORD_SWAP( "u14.bin", 0x000000, 0x200000, CRC(00a546cb) SHA1(30a8679b49928d5fcbe58b5eecc2ebd08173adf8) )
ROM_REGION( 0x200000, "gfx2", 0 ) /* Layers 0 + 1 */
ROM_LOAD( "u34.bin", 0x000000, 0x100000, CRC(e6a75bd8) SHA1(1aa84ea54584b6c8b2846194b48bf6d2afa67fee) )
ROM_LOAD( "u35.bin", 0x100000, 0x100000, CRC(c4ca0164) SHA1(c75422de2e0127cdc23d8c223b674a5bd85b00fb) )
ROM_LOAD16_WORD_SWAP( "u34.bin", 0x000000, 0x100000, CRC(e6a75bd8) SHA1(1aa84ea54584b6c8b2846194b48bf6d2afa67fee) )
ROM_LOAD16_WORD_SWAP( "u35.bin", 0x100000, 0x100000, CRC(c4ca0164) SHA1(c75422de2e0127cdc23d8c223b674a5bd85b00fb) )
ROM_REGION( 0x100000, "ymsnd", 0 ) /* Samples */
ROM_LOAD( "u68.bin", 0x000000, 0x100000, CRC(9a7f6c34) SHA1(c549b209bce1d2c6eeb512db198ad20c3f5fb0ea) )
@ -1302,7 +1307,6 @@ Chips: PS2001B
***************************************************************************/
ROM_START( gunbird )
ROM_REGION( 0x100000, "maincpu", 0 ) /* Main CPU Code */
ROM_LOAD32_WORD_SWAP( "4.u46", 0x000000, 0x040000, CRC(b78ec99d) SHA1(399b79931652d9df1632cd4d7ec3d214e473a5c3) ) // 1&0
ROM_LOAD32_WORD_SWAP( "5.u39", 0x000002, 0x040000, CRC(925f095d) SHA1(301a536119a0320a756e9c6e51fb10e36b90ef16) ) // 3&2
@ -1311,13 +1315,13 @@ ROM_START( gunbird )
ROM_LOAD( "3.u71", 0x00000, 0x20000, CRC(2168e4ba) SHA1(ca7ad6acb5f806ce2528e7b52c19e8cceecb8543) )
ROM_REGION( 0x700000, "gfx1", 0 ) /* Sprites */
ROM_LOAD( "u14.bin", 0x000000, 0x200000, CRC(7d7e8a00) SHA1(9f35f5b54ae928e9bf2aa6ad4604f669857955ec) )
ROM_LOAD( "u24.bin", 0x200000, 0x200000, CRC(5e3ffc9d) SHA1(c284eb9ef56c8e6261fe11f91a10c5c5a56c9803) )
ROM_LOAD( "u15.bin", 0x400000, 0x200000, CRC(a827bfb5) SHA1(6e02436e12085016cf1982c9ae07b6c6dec82f1b) )
ROM_LOAD( "u25.bin", 0x600000, 0x100000, CRC(ef652e0c) SHA1(6dd994a15ced31d1bbd1a3b0e9d8d86eca33e217) )
ROM_LOAD16_WORD_SWAP( "u14.bin", 0x000000, 0x200000, CRC(7d7e8a00) SHA1(9f35f5b54ae928e9bf2aa6ad4604f669857955ec) )
ROM_LOAD16_WORD_SWAP( "u24.bin", 0x200000, 0x200000, CRC(5e3ffc9d) SHA1(c284eb9ef56c8e6261fe11f91a10c5c5a56c9803) )
ROM_LOAD16_WORD_SWAP( "u15.bin", 0x400000, 0x200000, CRC(a827bfb5) SHA1(6e02436e12085016cf1982c9ae07b6c6dec82f1b) )
ROM_LOAD16_WORD_SWAP( "u25.bin", 0x600000, 0x100000, CRC(ef652e0c) SHA1(6dd994a15ced31d1bbd1a3b0e9d8d86eca33e217) )
ROM_REGION( 0x200000, "gfx2", 0 ) /* Layers 0 + 1 */
ROM_LOAD( "u33.bin", 0x000000, 0x200000, CRC(54494e6b) SHA1(f5d090d2d34d908b56b53a246def194929eba990) )
ROM_LOAD16_WORD_SWAP( "u33.bin", 0x000000, 0x200000, CRC(54494e6b) SHA1(f5d090d2d34d908b56b53a246def194929eba990) )
ROM_REGION( 0x100000, "ymsnd", 0 ) /* ADPCM Samples */
ROM_LOAD( "u56.bin", 0x000000, 0x100000, CRC(9e07104d) SHA1(3bc54cb755bb3194197706965b532d62b48c4d12) )
@ -1334,7 +1338,6 @@ ROM_START( gunbird )
ROM_END
ROM_START( gunbirdk )
ROM_REGION( 0x100000, "maincpu", 0 ) /* Main CPU Code */
ROM_LOAD32_WORD_SWAP( "1k.u46", 0x000000, 0x080000, CRC(745cee52) SHA1(6c5bb92c92c55f882484417bc1aa580684019610) ) // 1&0
ROM_LOAD32_WORD_SWAP( "2k.u39", 0x000002, 0x080000, CRC(669632fb) SHA1(885dea42e6da35e9166a208b18dbd930642c26cd) ) // 3&2
@ -1343,13 +1346,13 @@ ROM_START( gunbirdk )
ROM_LOAD( "k3.u71", 0x00000, 0x20000, CRC(11994055) SHA1(619776c178361f23de37ff14e87284ec0f1f4f10) )
ROM_REGION( 0x700000, "gfx1", 0 ) /* Sprites */
ROM_LOAD( "u14.bin", 0x000000, 0x200000, CRC(7d7e8a00) SHA1(9f35f5b54ae928e9bf2aa6ad4604f669857955ec) )
ROM_LOAD( "u24.bin", 0x200000, 0x200000, CRC(5e3ffc9d) SHA1(c284eb9ef56c8e6261fe11f91a10c5c5a56c9803) )
ROM_LOAD( "u15.bin", 0x400000, 0x200000, CRC(a827bfb5) SHA1(6e02436e12085016cf1982c9ae07b6c6dec82f1b) )
ROM_LOAD( "u25.bin", 0x600000, 0x100000, CRC(ef652e0c) SHA1(6dd994a15ced31d1bbd1a3b0e9d8d86eca33e217) )
ROM_LOAD16_WORD_SWAP( "u14.bin", 0x000000, 0x200000, CRC(7d7e8a00) SHA1(9f35f5b54ae928e9bf2aa6ad4604f669857955ec) )
ROM_LOAD16_WORD_SWAP( "u24.bin", 0x200000, 0x200000, CRC(5e3ffc9d) SHA1(c284eb9ef56c8e6261fe11f91a10c5c5a56c9803) )
ROM_LOAD16_WORD_SWAP( "u15.bin", 0x400000, 0x200000, CRC(a827bfb5) SHA1(6e02436e12085016cf1982c9ae07b6c6dec82f1b) )
ROM_LOAD16_WORD_SWAP( "u25.bin", 0x600000, 0x100000, CRC(ef652e0c) SHA1(6dd994a15ced31d1bbd1a3b0e9d8d86eca33e217) )
ROM_REGION( 0x200000, "gfx2", 0 ) /* Layers 0 + 1 */
ROM_LOAD( "u33.bin", 0x000000, 0x200000, CRC(54494e6b) SHA1(f5d090d2d34d908b56b53a246def194929eba990) )
ROM_LOAD16_WORD_SWAP( "u33.bin", 0x000000, 0x200000, CRC(54494e6b) SHA1(f5d090d2d34d908b56b53a246def194929eba990) )
ROM_REGION( 0x100000, "ymsnd", 0 ) /* ADPCM Samples */
ROM_LOAD( "u56.bin", 0x000000, 0x100000, CRC(9e07104d) SHA1(3bc54cb755bb3194197706965b532d62b48c4d12) )
@ -1359,11 +1362,9 @@ ROM_START( gunbirdk )
ROM_REGION( 0x040000, "spritelut", 0 ) /* Sprites LUT */
ROM_LOAD( "u3.bin", 0x000000, 0x040000, CRC(0905aeb2) SHA1(8cca09f7dfe3f804e77515f7b1b1bdbeb7bb3d80) )
ROM_END
ROM_START( gunbirdj )
ROM_REGION( 0x100000, "maincpu", 0 ) /* Main CPU Code */
ROM_LOAD32_WORD_SWAP( "1.u46", 0x000000, 0x040000, CRC(474abd69) SHA1(27f37333075f9c92849101aad4875e69004d747b) ) // 1&0
ROM_LOAD32_WORD_SWAP( "2.u39", 0x000002, 0x040000, CRC(3e3e661f) SHA1(b5648546f390539b0f727a9a62d1b9516254ae21) ) // 3&2
@ -1372,13 +1373,13 @@ ROM_START( gunbirdj )
ROM_LOAD( "3.u71", 0x00000, 0x20000, CRC(2168e4ba) SHA1(ca7ad6acb5f806ce2528e7b52c19e8cceecb8543) )
ROM_REGION( 0x700000, "gfx1", 0 ) /* Sprites */
ROM_LOAD( "u14.bin", 0x000000, 0x200000, CRC(7d7e8a00) SHA1(9f35f5b54ae928e9bf2aa6ad4604f669857955ec) )
ROM_LOAD( "u24.bin", 0x200000, 0x200000, CRC(5e3ffc9d) SHA1(c284eb9ef56c8e6261fe11f91a10c5c5a56c9803) )
ROM_LOAD( "u15.bin", 0x400000, 0x200000, CRC(a827bfb5) SHA1(6e02436e12085016cf1982c9ae07b6c6dec82f1b) )
ROM_LOAD( "u25.bin", 0x600000, 0x100000, CRC(ef652e0c) SHA1(6dd994a15ced31d1bbd1a3b0e9d8d86eca33e217) )
ROM_LOAD16_WORD_SWAP( "u14.bin", 0x000000, 0x200000, CRC(7d7e8a00) SHA1(9f35f5b54ae928e9bf2aa6ad4604f669857955ec) )
ROM_LOAD16_WORD_SWAP( "u24.bin", 0x200000, 0x200000, CRC(5e3ffc9d) SHA1(c284eb9ef56c8e6261fe11f91a10c5c5a56c9803) )
ROM_LOAD16_WORD_SWAP( "u15.bin", 0x400000, 0x200000, CRC(a827bfb5) SHA1(6e02436e12085016cf1982c9ae07b6c6dec82f1b) )
ROM_LOAD16_WORD_SWAP( "u25.bin", 0x600000, 0x100000, CRC(ef652e0c) SHA1(6dd994a15ced31d1bbd1a3b0e9d8d86eca33e217) )
ROM_REGION( 0x200000, "gfx2", 0 ) /* Layers 0 + 1 */
ROM_LOAD( "u33.bin", 0x000000, 0x200000, CRC(54494e6b) SHA1(f5d090d2d34d908b56b53a246def194929eba990) )
ROM_LOAD16_WORD_SWAP( "u33.bin", 0x000000, 0x200000, CRC(54494e6b) SHA1(f5d090d2d34d908b56b53a246def194929eba990) )
ROM_REGION( 0x100000, "ymsnd", 0 ) /* ADPCM Samples */
ROM_LOAD( "u56.bin", 0x000000, 0x100000, CRC(9e07104d) SHA1(3bc54cb755bb3194197706965b532d62b48c4d12) )
@ -1388,12 +1389,10 @@ ROM_START( gunbirdj )
ROM_REGION( 0x040000, "spritelut", 0 ) /* Sprites LUT */
ROM_LOAD( "u3.bin", 0x000000, 0x040000, CRC(0905aeb2) SHA1(8cca09f7dfe3f804e77515f7b1b1bdbeb7bb3d80) )
ROM_END
ROM_START( btlkroad )
ROM_REGION( 0x100000, "maincpu", 0 ) /* Main CPU Code */
ROM_LOAD32_WORD_SWAP( "4-u46.bin", 0x000000, 0x040000, CRC(8a7a28b4) SHA1(f7197be673dfd0ddf46998af81792b81d8fe9fbf) ) // 1&0
ROM_LOAD32_WORD_SWAP( "5-u39.bin", 0x000002, 0x040000, CRC(933561fa) SHA1(f6f3b1e14b1cfeca26ef8260ac4771dc1531c357) ) // 3&2
@ -1402,13 +1401,13 @@ ROM_START( btlkroad )
ROM_LOAD( "3-u71.bin", 0x00000, 0x20000, CRC(22411fab) SHA1(1094cb51712e40ae65d0082b408572bdec06ae8b) )
ROM_REGION( 0x700000, "gfx1", 0 ) /* Sprites */
ROM_LOAD( "u14.bin", 0x000000, 0x200000, CRC(282d89c3) SHA1(3b4b17f4a37efa2f7e232488aaba7c77d10c84d2) )
ROM_LOAD( "u24.bin", 0x200000, 0x200000, CRC(bbe9d3d1) SHA1(9da0b0b993e8271a8119e9c2f602e52325983f79) )
ROM_LOAD( "u15.bin", 0x400000, 0x200000, CRC(d4d1b07c) SHA1(232109db8f6e137fbc8826f38a96057067cb19dc) )
// ROM_LOAD( "u25.bin", 0x600000, 0x100000 NOT PRESENT
ROM_LOAD16_WORD_SWAP( "u14.bin", 0x000000, 0x200000, CRC(282d89c3) SHA1(3b4b17f4a37efa2f7e232488aaba7c77d10c84d2) )
ROM_LOAD16_WORD_SWAP( "u24.bin", 0x200000, 0x200000, CRC(bbe9d3d1) SHA1(9da0b0b993e8271a8119e9c2f602e52325983f79) )
ROM_LOAD16_WORD_SWAP( "u15.bin", 0x400000, 0x200000, CRC(d4d1b07c) SHA1(232109db8f6e137fbc8826f38a96057067cb19dc) )
// ROM_LOAD16_WORD_SWAP( "u25.bin", 0x600000, 0x100000 NOT PRESENT
ROM_REGION( 0x200000, "gfx2", 0 ) /* Layers 0 + 1 */
ROM_LOAD( "u33.bin", 0x000000, 0x200000, CRC(4c8577f1) SHA1(d27043514632954a06667ac63f4a4e4a31870511) )
ROM_LOAD16_WORD_SWAP( "u33.bin", 0x000000, 0x200000, CRC(4c8577f1) SHA1(d27043514632954a06667ac63f4a4e4a31870511) )
ROM_REGION( 0x100000, "ymsnd", 0 ) /* ADPCM Samples */
ROM_LOAD( "u56.bin", 0x000000, 0x100000, CRC(51d73682) SHA1(562038d08e9a4389ffa39f3a659b2a29b94dc156) )
@ -1422,12 +1421,10 @@ ROM_START( btlkroad )
ROM_REGION( 0x0400, "plds", 0 )
ROM_LOAD( "tibpal16l8.u69", 0x0000, 0x0104, NO_DUMP ) /* PAL is read protected */
ROM_LOAD( "tibpal16l8.u19", 0x0200, 0x0104, NO_DUMP ) /* PAL is read protected */
ROM_END
ROM_START( btlkroadk )
ROM_REGION( 0x100000, "maincpu", 0 ) /* Main CPU Code */
ROM_LOAD32_WORD_SWAP( "4,dot.u46", 0x000000, 0x040000, CRC(e724d429) SHA1(8b5f80366fd22d6f7e7d8a9623de4fe231303267) ) // 1&0
ROM_LOAD32_WORD_SWAP( "5,dot.u39", 0x000002, 0x040000, CRC(c0d65765) SHA1(a6a26e6b9693a2ef245e9aaa4c9daa888aebb360)) // 3&2
@ -1436,13 +1433,13 @@ ROM_START( btlkroadk )
ROM_LOAD( "3,k.u71", 0x00000, 0x20000, CRC(e0f0c597) SHA1(cc337633f1f579baf0f8ba1dd65c5d51122a7e97) )
ROM_REGION( 0x700000, "gfx1", 0 ) /* Sprites */
ROM_LOAD( "u14.bin", 0x000000, 0x200000, CRC(282d89c3) SHA1(3b4b17f4a37efa2f7e232488aaba7c77d10c84d2) )
ROM_LOAD( "u24.bin", 0x200000, 0x200000, CRC(bbe9d3d1) SHA1(9da0b0b993e8271a8119e9c2f602e52325983f79) )
ROM_LOAD( "u15.bin", 0x400000, 0x200000, CRC(d4d1b07c) SHA1(232109db8f6e137fbc8826f38a96057067cb19dc) )
// ROM_LOAD( "u25.bin", 0x600000, 0x100000 NOT PRESENT
ROM_LOAD16_WORD_SWAP( "u14.bin", 0x000000, 0x200000, CRC(282d89c3) SHA1(3b4b17f4a37efa2f7e232488aaba7c77d10c84d2) )
ROM_LOAD16_WORD_SWAP( "u24.bin", 0x200000, 0x200000, CRC(bbe9d3d1) SHA1(9da0b0b993e8271a8119e9c2f602e52325983f79) )
ROM_LOAD16_WORD_SWAP( "u15.bin", 0x400000, 0x200000, CRC(d4d1b07c) SHA1(232109db8f6e137fbc8826f38a96057067cb19dc) )
// ROM_LOAD16_WORD_SWAP( "u25.bin", 0x600000, 0x100000 NOT PRESENT
ROM_REGION( 0x200000, "gfx2", 0 ) /* Layers 0 + 1 */
ROM_LOAD( "u33.bin", 0x000000, 0x200000, CRC(4c8577f1) SHA1(d27043514632954a06667ac63f4a4e4a31870511) )
ROM_LOAD16_WORD_SWAP( "u33.bin", 0x000000, 0x200000, CRC(4c8577f1) SHA1(d27043514632954a06667ac63f4a4e4a31870511) )
ROM_REGION( 0x100000, "ymsnd", 0 ) /* ADPCM Samples */
ROM_LOAD( "u56.bin", 0x000000, 0x100000, CRC(51d73682) SHA1(562038d08e9a4389ffa39f3a659b2a29b94dc156) )
@ -1456,7 +1453,6 @@ ROM_START( btlkroadk )
ROM_REGION( 0x0400, "plds", 0 )
ROM_LOAD( "tibpal16l8.u69", 0x0000, 0x0104, NO_DUMP ) /* PAL is read protected */
ROM_LOAD( "tibpal16l8.u19", 0x0200, 0x0104, NO_DUMP ) /* PAL is read protected */
ROM_END
/***************************************************************************
@ -1484,13 +1480,13 @@ ROM_START( s1945jn )
ROM_LOAD( "3-u71.bin", 0x00000, 0x20000, CRC(e3e366bd) SHA1(1f5b5909745802e263a896265ea365df76d3eaa5) )
ROM_REGION( 0x800000, "gfx1", 0 ) /* Sprites */
ROM_LOAD( "u20.bin", 0x000000, 0x200000, CRC(28a27fee) SHA1(913f3bc4d0c6fb6b776a020c8099bf96f16fd06f) )
ROM_LOAD( "u22.bin", 0x200000, 0x200000, CRC(ca152a32) SHA1(63efee83cb5982c77ca473288b3d1a96b89e6388) )
ROM_LOAD( "u21.bin", 0x400000, 0x200000, CRC(c5d60ea9) SHA1(e5ce90788211c856172e5323b01b2c7ab3d3fe50) )
ROM_LOAD( "u23.bin", 0x600000, 0x200000, CRC(48710332) SHA1(db38b732a09b31ce55a96ec62987baae9b7a00c1) )
ROM_LOAD16_WORD_SWAP( "u20.bin", 0x000000, 0x200000, CRC(28a27fee) SHA1(913f3bc4d0c6fb6b776a020c8099bf96f16fd06f) )
ROM_LOAD16_WORD_SWAP( "u22.bin", 0x200000, 0x200000, CRC(ca152a32) SHA1(63efee83cb5982c77ca473288b3d1a96b89e6388) )
ROM_LOAD16_WORD_SWAP( "u21.bin", 0x400000, 0x200000, CRC(c5d60ea9) SHA1(e5ce90788211c856172e5323b01b2c7ab3d3fe50) )
ROM_LOAD16_WORD_SWAP( "u23.bin", 0x600000, 0x200000, CRC(48710332) SHA1(db38b732a09b31ce55a96ec62987baae9b7a00c1) )
ROM_REGION( 0x200000, "gfx2", 0 ) /* Layer 0 + 1 */
ROM_LOAD( "u34.bin", 0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) )
ROM_LOAD16_WORD_SWAP( "u34.bin", 0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) )
ROM_REGION( 0x100000, "ymsnd", 0 ) /* ADPCM Samples */
ROM_LOAD( "u56.bin", 0x000000, 0x100000, CRC(fe1312c2) SHA1(8339a96a0885518d6e22cb3bdb9c2f82d011d86d) )
@ -1512,11 +1508,11 @@ ROM_START( s1945bl )
ROM_REGION( 0x800000, "gfx1", 0 ) /* Sprites */
// same content as original sets, alt rom layout
ROM_LOAD16_WORD_SWAP( "rv27c3200.m4", 0x000000, 0x400000, CRC(70c8f72e) SHA1(90d25f4ecd6bfe72b51713099625f643b12aa674) )
ROM_LOAD16_WORD_SWAP( "rv27c3200.m3", 0x400000, 0x400000, CRC(0dec2a8d) SHA1(b2f3143f2be50c825b61d5218cec26ba8ed1f07e) )
ROM_LOAD( "rv27c3200.m4", 0x000000, 0x400000, CRC(70c8f72e) SHA1(90d25f4ecd6bfe72b51713099625f643b12aa674) )
ROM_LOAD( "rv27c3200.m3", 0x400000, 0x400000, CRC(0dec2a8d) SHA1(b2f3143f2be50c825b61d5218cec26ba8ed1f07e) )
ROM_REGION( 0x200000, "gfx2", 0 ) /* Layer 0 + 1 */
ROM_LOAD( "rv27c1600.m1", 0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) )
ROM_LOAD16_WORD_SWAP( "rv27c1600.m1", 0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) )
ROM_REGION( 0x100000, "oki", 0 ) /* OKI Samples */
ROM_LOAD( "rv27c040.m6", 0x000000, 0x080000, CRC(c22e5b65) SHA1(d807bd7c136d6b51f54258b44ebf3eecbd5b35fa) )
@ -1605,7 +1601,6 @@ OSC: 16.000MHz
***************************************************************************/
ROM_START( s1945 )
ROM_REGION( 0x100000, "maincpu", 0 ) /* Main CPU Code */
ROM_LOAD32_WORD_SWAP( "2s.u40", 0x000000, 0x040000, CRC(9b10062a) SHA1(cf963bba157422b659d8d64b4493eb7d69cd07b7) ) // 1&0
ROM_LOAD32_WORD_SWAP( "3s.u41", 0x000002, 0x040000, CRC(f87e871a) SHA1(567167c7fcfb622f78e211d74b04060c3d29d6b7) ) // 3&2
@ -1613,17 +1608,17 @@ ROM_START( s1945 )
ROM_REGION( 0x020000, "audiocpu", 0 ) /* Sound CPU Code */
ROM_LOAD( "3-u63.bin", 0x00000, 0x20000, CRC(42d40ae1) SHA1(530a5a3f78ac489b84a631ea6ce21010a4f4d31b) )
ROM_REGION( 0x000100, "cpu2", 0 ) /* MCU? */
ROM_REGION( 0x000100, "mcu", 0 ) /* MCU? */
ROM_LOAD( "4-u59.bin", 0x00000, 0x00100, NO_DUMP )
ROM_REGION( 0x800000, "gfx1", 0 ) /* Sprites */
ROM_LOAD( "u20.bin", 0x000000, 0x200000, CRC(28a27fee) SHA1(913f3bc4d0c6fb6b776a020c8099bf96f16fd06f) )
ROM_LOAD( "u22.bin", 0x200000, 0x200000, CRC(ca152a32) SHA1(63efee83cb5982c77ca473288b3d1a96b89e6388) )
ROM_LOAD( "u21.bin", 0x400000, 0x200000, CRC(c5d60ea9) SHA1(e5ce90788211c856172e5323b01b2c7ab3d3fe50) )
ROM_LOAD( "u23.bin", 0x600000, 0x200000, CRC(48710332) SHA1(db38b732a09b31ce55a96ec62987baae9b7a00c1) )
ROM_LOAD16_WORD_SWAP( "u20.bin", 0x000000, 0x200000, CRC(28a27fee) SHA1(913f3bc4d0c6fb6b776a020c8099bf96f16fd06f) )
ROM_LOAD16_WORD_SWAP( "u22.bin", 0x200000, 0x200000, CRC(ca152a32) SHA1(63efee83cb5982c77ca473288b3d1a96b89e6388) )
ROM_LOAD16_WORD_SWAP( "u21.bin", 0x400000, 0x200000, CRC(c5d60ea9) SHA1(e5ce90788211c856172e5323b01b2c7ab3d3fe50) )
ROM_LOAD16_WORD_SWAP( "u23.bin", 0x600000, 0x200000, CRC(48710332) SHA1(db38b732a09b31ce55a96ec62987baae9b7a00c1) )
ROM_REGION( 0x200000, "gfx2", 0 ) /* Layer 0 + 1 */
ROM_LOAD( "u34.bin", 0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) )
ROM_LOAD16_WORD_SWAP( "u34.bin", 0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) )
ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */
ROM_LOAD( "u61.bin", 0x000000, 0x200000, CRC(a839cf47) SHA1(e179eb505c80d5bb3ccd9e228f2cf428c62b72ee) ) // 8 bit signed pcm (16KHz)
@ -1634,7 +1629,6 @@ ROM_START( s1945 )
ROM_END
ROM_START( s1945a )
ROM_REGION( 0x100000, "maincpu", 0 ) /* Main CPU Code */
ROM_LOAD32_WORD_SWAP( "4-u40.bin", 0x000000, 0x040000, CRC(29ffc217) SHA1(12dc3cb32253c3908f4c440c627a0e1b32ee7cac) ) // 1&0
ROM_LOAD32_WORD_SWAP( "5-u41.bin", 0x000002, 0x040000, CRC(c3d3fb64) SHA1(4388586bc0a6f3d62366b3c38b8b23f8a03dbf15) ) // 3&2
@ -1642,17 +1636,17 @@ ROM_START( s1945a )
ROM_REGION( 0x020000, "audiocpu", 0 ) /* Sound CPU Code */
ROM_LOAD( "3-u63.bin", 0x00000, 0x20000, CRC(42d40ae1) SHA1(530a5a3f78ac489b84a631ea6ce21010a4f4d31b) )
ROM_REGION( 0x000100, "cpu2", 0 ) /* MCU? */
ROM_REGION( 0x000100, "mcu", 0 ) /* MCU? */
ROM_LOAD( "4-u59.bin", 0x00000, 0x00100, NO_DUMP )
ROM_REGION( 0x800000, "gfx1", 0 ) /* Sprites */
ROM_LOAD( "u20.bin", 0x000000, 0x200000, CRC(28a27fee) SHA1(913f3bc4d0c6fb6b776a020c8099bf96f16fd06f) )
ROM_LOAD( "u22.bin", 0x200000, 0x200000, CRC(ca152a32) SHA1(63efee83cb5982c77ca473288b3d1a96b89e6388) )
ROM_LOAD( "u21.bin", 0x400000, 0x200000, CRC(c5d60ea9) SHA1(e5ce90788211c856172e5323b01b2c7ab3d3fe50) )
ROM_LOAD( "u23.bin", 0x600000, 0x200000, CRC(48710332) SHA1(db38b732a09b31ce55a96ec62987baae9b7a00c1) )
ROM_LOAD16_WORD_SWAP( "u20.bin", 0x000000, 0x200000, CRC(28a27fee) SHA1(913f3bc4d0c6fb6b776a020c8099bf96f16fd06f) )
ROM_LOAD16_WORD_SWAP( "u22.bin", 0x200000, 0x200000, CRC(ca152a32) SHA1(63efee83cb5982c77ca473288b3d1a96b89e6388) )
ROM_LOAD16_WORD_SWAP( "u21.bin", 0x400000, 0x200000, CRC(c5d60ea9) SHA1(e5ce90788211c856172e5323b01b2c7ab3d3fe50) )
ROM_LOAD16_WORD_SWAP( "u23.bin", 0x600000, 0x200000, CRC(48710332) SHA1(db38b732a09b31ce55a96ec62987baae9b7a00c1) )
ROM_REGION( 0x200000, "gfx2", 0 ) /* Layer 0 + 1 */
ROM_LOAD( "u34.bin", 0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) )
ROM_LOAD16_WORD_SWAP( "u34.bin", 0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) )
ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */
ROM_LOAD( "u61.bin", 0x000000, 0x200000, CRC(a839cf47) SHA1(e179eb505c80d5bb3ccd9e228f2cf428c62b72ee) ) // 8 bit signed pcm (16KHz)
@ -1663,7 +1657,6 @@ ROM_START( s1945a )
ROM_END
ROM_START( s1945j )
ROM_REGION( 0x100000, "maincpu", 0 ) /* Main CPU Code */
ROM_LOAD32_WORD_SWAP( "1-u40.bin", 0x000000, 0x040000, CRC(c00eb012) SHA1(080dae010ca83548ebdb3324585d15e48baf0541) ) // 1&0
ROM_LOAD32_WORD_SWAP( "2-u41.bin", 0x000002, 0x040000, CRC(3f5a134b) SHA1(18bb3bb1e1adadcf522795f5cf7d4dc5a5dd1f30) ) // 3&2
@ -1671,17 +1664,17 @@ ROM_START( s1945j )
ROM_REGION( 0x020000, "audiocpu", 0 ) /* Sound CPU Code */
ROM_LOAD( "3-u63.bin", 0x00000, 0x20000, CRC(42d40ae1) SHA1(530a5a3f78ac489b84a631ea6ce21010a4f4d31b) )
ROM_REGION( 0x000100, "cpu2", 0 ) /* MCU */
ROM_REGION( 0x000100, "mcu", 0 ) /* MCU */
ROM_LOAD( "4-u59.bin", 0x00000, 0x00100, NO_DUMP )
ROM_REGION( 0x800000, "gfx1", 0 ) /* Sprites */
ROM_LOAD( "u20.bin", 0x000000, 0x200000, CRC(28a27fee) SHA1(913f3bc4d0c6fb6b776a020c8099bf96f16fd06f) )
ROM_LOAD( "u22.bin", 0x200000, 0x200000, CRC(ca152a32) SHA1(63efee83cb5982c77ca473288b3d1a96b89e6388) )
ROM_LOAD( "u21.bin", 0x400000, 0x200000, CRC(c5d60ea9) SHA1(e5ce90788211c856172e5323b01b2c7ab3d3fe50) )
ROM_LOAD( "u23.bin", 0x600000, 0x200000, CRC(48710332) SHA1(db38b732a09b31ce55a96ec62987baae9b7a00c1) )
ROM_LOAD16_WORD_SWAP( "u20.bin", 0x000000, 0x200000, CRC(28a27fee) SHA1(913f3bc4d0c6fb6b776a020c8099bf96f16fd06f) )
ROM_LOAD16_WORD_SWAP( "u22.bin", 0x200000, 0x200000, CRC(ca152a32) SHA1(63efee83cb5982c77ca473288b3d1a96b89e6388) )
ROM_LOAD16_WORD_SWAP( "u21.bin", 0x400000, 0x200000, CRC(c5d60ea9) SHA1(e5ce90788211c856172e5323b01b2c7ab3d3fe50) )
ROM_LOAD16_WORD_SWAP( "u23.bin", 0x600000, 0x200000, CRC(48710332) SHA1(db38b732a09b31ce55a96ec62987baae9b7a00c1) )
ROM_REGION( 0x200000, "gfx2", 0 ) /* Layer 0 + 1 */
ROM_LOAD( "u34.bin", 0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) )
ROM_LOAD16_WORD_SWAP( "u34.bin", 0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) )
ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */
ROM_LOAD( "u61.bin", 0x000000, 0x200000, CRC(a839cf47) SHA1(e179eb505c80d5bb3ccd9e228f2cf428c62b72ee) ) // 8 bit signed pcm (16KHz)
@ -1692,7 +1685,6 @@ ROM_START( s1945j )
ROM_END
ROM_START( s1945k ) /* Same MCU as the current parent set, region dip has no effect on this set */
ROM_REGION( 0x100000, "maincpu", 0 ) /* Main CPU Code */
ROM_LOAD32_WORD_SWAP( "10.u40", 0x000000, 0x040000, CRC(5a32af36) SHA1(2eada37fd043c097a11bcf4e3e0bebb473bbc0df) ) // 1&0
ROM_LOAD32_WORD_SWAP( "9.u41", 0x000002, 0x040000, CRC(29cc6d7d) SHA1(aeee9e88922c25c75885483d115e064c6b71540b) ) // 3&2
@ -1700,17 +1692,17 @@ ROM_START( s1945k ) /* Same MCU as the current parent set, region dip has no eff
ROM_REGION( 0x020000, "audiocpu", 0 ) /* Sound CPU Code */
ROM_LOAD( "3-u63.bin", 0x00000, 0x20000, CRC(42d40ae1) SHA1(530a5a3f78ac489b84a631ea6ce21010a4f4d31b) )
ROM_REGION( 0x000100, "cpu2", 0 ) /* MCU */
ROM_REGION( 0x000100, "mcu", 0 ) /* MCU */
ROM_LOAD( "4-u59.bin", 0x00000, 0x00100, NO_DUMP )
ROM_REGION( 0x800000, "gfx1", 0 ) /* Sprites */
ROM_LOAD( "u20.bin", 0x000000, 0x200000, CRC(28a27fee) SHA1(913f3bc4d0c6fb6b776a020c8099bf96f16fd06f) )
ROM_LOAD( "u22.bin", 0x200000, 0x200000, CRC(ca152a32) SHA1(63efee83cb5982c77ca473288b3d1a96b89e6388) )
ROM_LOAD( "u21.bin", 0x400000, 0x200000, CRC(c5d60ea9) SHA1(e5ce90788211c856172e5323b01b2c7ab3d3fe50) )
ROM_LOAD( "u23.bin", 0x600000, 0x200000, CRC(48710332) SHA1(db38b732a09b31ce55a96ec62987baae9b7a00c1) )
ROM_LOAD16_WORD_SWAP( "u20.bin", 0x000000, 0x200000, CRC(28a27fee) SHA1(913f3bc4d0c6fb6b776a020c8099bf96f16fd06f) )
ROM_LOAD16_WORD_SWAP( "u22.bin", 0x200000, 0x200000, CRC(ca152a32) SHA1(63efee83cb5982c77ca473288b3d1a96b89e6388) )
ROM_LOAD16_WORD_SWAP( "u21.bin", 0x400000, 0x200000, CRC(c5d60ea9) SHA1(e5ce90788211c856172e5323b01b2c7ab3d3fe50) )
ROM_LOAD16_WORD_SWAP( "u23.bin", 0x600000, 0x200000, CRC(48710332) SHA1(db38b732a09b31ce55a96ec62987baae9b7a00c1) )
ROM_REGION( 0x200000, "gfx2", 0 ) /* Layer 0 + 1 */
ROM_LOAD( "u34.bin", 0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) )
ROM_LOAD16_WORD_SWAP( "u34.bin", 0x000000, 0x200000, CRC(aaf83e23) SHA1(1c75d09ff42c0c215f8c66c699ca75688c95a05e) )
ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */
ROM_LOAD( "u61.bin", 0x000000, 0x200000, CRC(a839cf47) SHA1(e179eb505c80d5bb3ccd9e228f2cf428c62b72ee) ) // 8 bit signed pcm (16KHz)
@ -1743,7 +1735,6 @@ Chips: PS2001B
***************************************************************************/
ROM_START( tengai )
ROM_REGION( 0x100000, "maincpu", 0 ) /* Main CPU Code */
ROM_LOAD32_WORD_SWAP( "5-u40.bin", 0x000000, 0x080000, CRC(90088195) SHA1(8ec48d581ecd14b3dad36edc65d5a273324cf3c1) ) // 1&0
ROM_LOAD32_WORD_SWAP( "4-u41.bin", 0x000002, 0x080000, CRC(0d53196c) SHA1(454bb4695b13ce44ca5dac7c6d4142a8b9afa798) ) // 3&2
@ -1751,16 +1742,16 @@ ROM_START( tengai )
ROM_REGION( 0x020000, "audiocpu", 0 ) /* Sound CPU Code */
ROM_LOAD( "1-u63.bin", 0x00000, 0x20000, CRC(2025e387) SHA1(334b0eb3b416d46ccaadff3eee6f1abba63285fb) )
ROM_REGION( 0x000100, "cpu2", 0 ) /* MCU */
ROM_REGION( 0x000100, "mcu", 0 ) /* MCU */
ROM_LOAD( "4-u59.bin", 0x00000, 0x00100, NO_DUMP )
ROM_REGION( 0x600000, "gfx1", 0 ) /* Sprites */
ROM_LOAD16_WORD_SWAP( "u20.bin", 0x000000, 0x200000, CRC(ed42ef73) SHA1(74693fcc83a2654ddb18fd513d528033863d6116) )
ROM_LOAD16_WORD_SWAP( "u22.bin", 0x200000, 0x200000, CRC(8d21caee) SHA1(2a68af8b2be2158dcb152c434e91a75871478d41) )
ROM_LOAD16_WORD_SWAP( "u21.bin", 0x400000, 0x200000, CRC(efe34eed) SHA1(7891495b443a5acc7b2f17fe694584f6cb0afacc) )
ROM_LOAD( "u20.bin", 0x000000, 0x200000, CRC(ed42ef73) SHA1(74693fcc83a2654ddb18fd513d528033863d6116) )
ROM_LOAD( "u22.bin", 0x200000, 0x200000, CRC(8d21caee) SHA1(2a68af8b2be2158dcb152c434e91a75871478d41) )
ROM_LOAD( "u21.bin", 0x400000, 0x200000, CRC(efe34eed) SHA1(7891495b443a5acc7b2f17fe694584f6cb0afacc) )
ROM_REGION( 0x400000, "gfx2", 0 ) /* Layer 0 + 1 */
ROM_LOAD16_WORD_SWAP( "u34.bin", 0x000000, 0x400000, CRC(2a2e2eeb) SHA1(f1d99353c0affc5c908985e6f2a5724e5223cccc) ) /* four banks of 0x100000 */
ROM_LOAD( "u34.bin", 0x000000, 0x400000, CRC(2a2e2eeb) SHA1(f1d99353c0affc5c908985e6f2a5724e5223cccc) ) /* four banks of 0x100000 */
ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */
ROM_LOAD( "u61.bin", 0x000000, 0x200000, CRC(a63633c5) SHA1(89e75a40518926ebcc7d88dea86c01ba0bb496e5) ) // 8 bit signed pcm (16KHz)
@ -1772,7 +1763,6 @@ ROM_START( tengai )
ROM_END
ROM_START( tengaij )
ROM_REGION( 0x100000, "maincpu", 0 ) /* Main CPU Code */
ROM_LOAD32_WORD_SWAP( "2-u40.bin", 0x000000, 0x080000, CRC(ab6fe58a) SHA1(6687a3af192b3eab60d75ca286ebb8e0636297b5) ) // 1&0
ROM_LOAD32_WORD_SWAP( "3-u41.bin", 0x000002, 0x080000, CRC(02e42e39) SHA1(6cdb7b1cebab50c0a44cd60cd437f0e878ccac5c) ) // 3&2
@ -1780,16 +1770,16 @@ ROM_START( tengaij )
ROM_REGION( 0x020000, "audiocpu", 0 ) /* Sound CPU Code */
ROM_LOAD( "1-u63.bin", 0x00000, 0x20000, CRC(2025e387) SHA1(334b0eb3b416d46ccaadff3eee6f1abba63285fb) )
ROM_REGION( 0x000100, "cpu2", 0 ) /* MCU */
ROM_REGION( 0x000100, "mcu", 0 ) /* MCU */
ROM_LOAD( "4-u59.bin", 0x00000, 0x00100, NO_DUMP )
ROM_REGION( 0x600000, "gfx1", 0 ) /* Sprites */
ROM_LOAD16_WORD_SWAP( "u20.bin", 0x000000, 0x200000, CRC(ed42ef73) SHA1(74693fcc83a2654ddb18fd513d528033863d6116) )
ROM_LOAD16_WORD_SWAP( "u22.bin", 0x200000, 0x200000, CRC(8d21caee) SHA1(2a68af8b2be2158dcb152c434e91a75871478d41) )
ROM_LOAD16_WORD_SWAP( "u21.bin", 0x400000, 0x200000, CRC(efe34eed) SHA1(7891495b443a5acc7b2f17fe694584f6cb0afacc) )
ROM_LOAD( "u20.bin", 0x000000, 0x200000, CRC(ed42ef73) SHA1(74693fcc83a2654ddb18fd513d528033863d6116) )
ROM_LOAD( "u22.bin", 0x200000, 0x200000, CRC(8d21caee) SHA1(2a68af8b2be2158dcb152c434e91a75871478d41) )
ROM_LOAD( "u21.bin", 0x400000, 0x200000, CRC(efe34eed) SHA1(7891495b443a5acc7b2f17fe694584f6cb0afacc) )
ROM_REGION( 0x400000, "gfx2", 0 ) /* Layer 0 + 1 */
ROM_LOAD16_WORD_SWAP( "u34.bin", 0x000000, 0x400000, CRC(2a2e2eeb) SHA1(f1d99353c0affc5c908985e6f2a5724e5223cccc) ) /* four banks of 0x100000 */
ROM_LOAD( "u34.bin", 0x000000, 0x400000, CRC(2a2e2eeb) SHA1(f1d99353c0affc5c908985e6f2a5724e5223cccc) ) /* four banks of 0x100000 */
ROM_REGION( 0x400000, "ymf", 0 ) /* Samples */
ROM_LOAD( "u61.bin", 0x000000, 0x200000, CRC(a63633c5) SHA1(89e75a40518926ebcc7d88dea86c01ba0bb496e5) ) // 8 bit signed pcm (16KHz)
@ -1826,7 +1816,7 @@ DRIVER_INIT_MEMBER(psikyo_state,sngkace)
m_ka302c_banking = 0; // SH201B doesn't have any gfx banking
/* setup audiocpu banks */
membank("bank1")->configure_entries(0, 4, memregion("audiocpu")->base(), 0x8000);
m_audiobank->configure_entries(0, 4, memregion("audiocpu")->base(), 0x8000);
/* Enable other regions */
#if 0
@ -1874,7 +1864,7 @@ DRIVER_INIT_MEMBER(psikyo_state,tengai)
/* setup audiocpu banks */
/* The banked rom is seen at 8200-ffff, so the last 0x200 bytes of the rom not reachable. */
membank("bank1")->configure_entries(0, 4, memregion("audiocpu")->base() + 0x200, 0x8000);
m_audiobank->configure_entries(0, 4, memregion("audiocpu")->base() + 0x200, 0x8000);
}
DRIVER_INIT_MEMBER(psikyo_state,gunbird)
@ -1883,7 +1873,7 @@ DRIVER_INIT_MEMBER(psikyo_state,gunbird)
/* setup audiocpu banks */
/* The banked rom is seen at 8200-ffff, so the last 0x200 bytes of the rom not reachable. */
membank("bank1")->configure_entries(0, 4, memregion("audiocpu")->base() + 0x200, 0x8000);
m_audiobank->configure_entries(0, 4, memregion("audiocpu")->base() + 0x200, 0x8000);
}
@ -1896,7 +1886,7 @@ DRIVER_INIT_MEMBER(psikyo_state,s1945)
/* setup audiocpu banks */
/* The banked rom is seen at 8200-ffff, so the last 0x200 bytes of the rom not reachable. */
membank("bank1")->configure_entries(0, 4, memregion("audiocpu")->base() + 0x200, 0x8000);
m_audiobank->configure_entries(0, 4, memregion("audiocpu")->base() + 0x200, 0x8000);
}
DRIVER_INIT_MEMBER(psikyo_state,s1945a)
@ -1908,7 +1898,7 @@ DRIVER_INIT_MEMBER(psikyo_state,s1945a)
/* setup audiocpu banks */
/* The banked rom is seen at 8200-ffff, so the last 0x200 bytes of the rom not reachable. */
membank("bank1")->configure_entries(0, 4, memregion("audiocpu")->base() + 0x200, 0x8000);
m_audiobank->configure_entries(0, 4, memregion("audiocpu")->base() + 0x200, 0x8000);
}
DRIVER_INIT_MEMBER(psikyo_state,s1945j)
@ -1920,15 +1910,15 @@ DRIVER_INIT_MEMBER(psikyo_state,s1945j)
/* setup audiocpu banks */
/* The banked rom is seen at 8200-ffff, so the last 0x200 bytes of the rom not reachable. */
membank("bank1")->configure_entries(0, 4, memregion("audiocpu")->base() + 0x200, 0x8000);
m_audiobank->configure_entries(0, 4, memregion("audiocpu")->base() + 0x200, 0x8000);
}
DRIVER_INIT_MEMBER(psikyo_state,s1945bl)
{
m_ka302c_banking = 1;
membank("okibank")->configure_entries(0, 4, memregion("oki")->base() + 0x30000, 0x10000);
membank("okibank")->set_entry(0);
m_okibank->configure_entries(0, 4, memregion("oki")->base() + 0x30000, 0x10000);
m_okibank->set_entry(0);
}

View File

@ -10,45 +10,53 @@
#include "sound/okim6295.h"
#include "screen.h"
#include <algorithm>
class psikyo_state : public driver_device
{
public:
psikyo_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_spriteram(*this, "spriteram"),
m_vram_0(*this, "vram_0"),
m_vram_1(*this, "vram_1"),
m_vregs(*this, "vregs"),
m_bootleg_spritebuffer(*this, "boot_spritebuf"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_oki(*this, "oki"),
m_soundlatch(*this, "soundlatch"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette") { }
: driver_device(mconfig, type, tag)
, m_spriteram(*this, "spriteram")
, m_vram(*this, "vram_%u", 0)
, m_vregs(*this, "vregs")
, m_bootleg_spritebuffer(*this, "boot_spritebuf")
, m_spritelut(*this, "spritelut")
, m_audiobank(*this, "audiobank")
, m_okibank(*this, "okibank")
, m_in_dsw(*this, "DSW")
, m_in_p1_p2(*this, "P1_P2")
, m_in_coin(*this, "COIN")
, m_maincpu(*this, "maincpu")
, m_audiocpu(*this, "audiocpu")
, m_oki(*this, "oki")
, m_soundlatch(*this, "soundlatch")
, m_gfxdecode(*this, "gfxdecode")
, m_screen(*this, "screen")
, m_palette(*this, "palette")
{
std::fill(std::begin(m_old_linescroll), std::end(m_old_linescroll), 0);
}
/* memory pointers */
required_shared_ptr<uint32_t> m_spriteram;
required_shared_ptr<uint32_t> m_vram_0;
required_shared_ptr<uint32_t> m_vram_1;
required_shared_ptr_array<uint32_t, 2> m_vram;
required_shared_ptr<uint32_t> m_vregs;
optional_shared_ptr<uint32_t> m_bootleg_spritebuffer;
std::unique_ptr<uint32_t[]> m_spritebuf1;
std::unique_ptr<uint32_t[]> m_spritebuf2;
std::unique_ptr<uint32_t[]> m_spritebuf[2];
required_memory_region m_spritelut;
optional_memory_bank m_audiobank;
optional_memory_bank m_okibank;
optional_ioport m_in_dsw;
optional_ioport m_in_p1_p2;
optional_ioport m_in_coin;
/* video-related */
tilemap_t *m_tilemap_0_size0;
tilemap_t *m_tilemap_0_size1;
tilemap_t *m_tilemap_0_size2;
tilemap_t *m_tilemap_0_size3;
tilemap_t *m_tilemap_1_size0;
tilemap_t *m_tilemap_1_size1;
tilemap_t *m_tilemap_1_size2;
tilemap_t *m_tilemap_1_size3;
int m_tilemap_0_bank;
int m_tilemap_1_bank;
tilemap_t *m_tilemap[2][4];
int m_tilemap_bank[2];
int m_ka302c_banking;
int m_old_linescroll[2];
/* game-specific */
// 1945 MCU
@ -71,10 +79,8 @@ public:
DECLARE_READ32_MEMBER(s1945_input_r);
DECLARE_READ32_MEMBER(s1945bl_oki_r);
DECLARE_WRITE32_MEMBER(s1945bl_oki_w);
DECLARE_WRITE8_MEMBER(sngkace_sound_bankswitch_w);
DECLARE_WRITE8_MEMBER(gunbird_sound_bankswitch_w);
DECLARE_WRITE32_MEMBER(psikyo_vram_0_w);
DECLARE_WRITE32_MEMBER(psikyo_vram_1_w);
template<int Shift> DECLARE_WRITE8_MEMBER(sound_bankswitch_w);
template<int Layer> DECLARE_WRITE32_MEMBER(vram_w);
DECLARE_CUSTOM_INPUT_MEMBER(z80_nmi_r);
DECLARE_CUSTOM_INPUT_MEMBER(mcu_status_r);
DECLARE_DRIVER_INIT(s1945a);
@ -84,8 +90,7 @@ public:
DECLARE_DRIVER_INIT(s1945bl);
DECLARE_DRIVER_INIT(tengai);
DECLARE_DRIVER_INIT(gunbird);
TILE_GET_INFO_MEMBER(get_tile_info_0);
TILE_GET_INFO_MEMBER(get_tile_info_1);
template<int Layer> TILE_GET_INFO_MEMBER(get_tile_info);
virtual void machine_start() override;
virtual void machine_reset() override;
DECLARE_VIDEO_START(sngkace);

View File

@ -73,82 +73,23 @@ Offset:
***************************************************************************/
TILE_GET_INFO_MEMBER(psikyo_state::get_tile_info_0)
template<int Layer>
TILE_GET_INFO_MEMBER(psikyo_state::get_tile_info)
{
uint16_t code = ((uint16_t *)m_vram_0.target())[BYTE_XOR_BE(tile_index)];
uint16_t code = ((uint16_t *)m_vram[Layer].target())[BYTE_XOR_BE(tile_index)];
SET_TILE_INFO_MEMBER(1,
(code & 0x1fff) + 0x2000 * m_tilemap_0_bank,
(code >> 13) & 7,
(code & 0x1fff) + 0x2000 * m_tilemap_bank[Layer],
((code >> 13) & 7) + (Layer * 0x40),
0);
}
TILE_GET_INFO_MEMBER(psikyo_state::get_tile_info_1)
{
uint16_t code = ((uint16_t *)m_vram_1.target())[BYTE_XOR_BE(tile_index)];
SET_TILE_INFO_MEMBER(1,
(code & 0x1fff) + 0x2000 * m_tilemap_1_bank,
((code >> 13) & 7) + 0x40, // So we only have to decode the gfx once.
0);
}
WRITE32_MEMBER(psikyo_state::psikyo_vram_0_w)
{
COMBINE_DATA(&m_vram_0[offset]);
if (ACCESSING_BITS_16_31)
{
m_tilemap_0_size0->mark_tile_dirty(offset * 2);
m_tilemap_0_size1->mark_tile_dirty(offset * 2);
m_tilemap_0_size2->mark_tile_dirty(offset * 2);
m_tilemap_0_size3->mark_tile_dirty(offset * 2);
}
if (ACCESSING_BITS_0_15)
{
m_tilemap_0_size0->mark_tile_dirty(offset * 2 + 1);
m_tilemap_0_size1->mark_tile_dirty(offset * 2 + 1);
m_tilemap_0_size2->mark_tile_dirty(offset * 2 + 1);
m_tilemap_0_size3->mark_tile_dirty(offset * 2 + 1);
}
}
WRITE32_MEMBER(psikyo_state::psikyo_vram_1_w)
{
COMBINE_DATA(&m_vram_1[offset]);
if (ACCESSING_BITS_16_31)
{
m_tilemap_1_size0->mark_tile_dirty(offset * 2);
m_tilemap_1_size1->mark_tile_dirty(offset * 2);
m_tilemap_1_size2->mark_tile_dirty(offset * 2);
m_tilemap_1_size3->mark_tile_dirty(offset * 2);
}
if (ACCESSING_BITS_0_15)
{
m_tilemap_1_size0->mark_tile_dirty(offset * 2 + 1);
m_tilemap_1_size1->mark_tile_dirty(offset * 2 + 1);
m_tilemap_1_size2->mark_tile_dirty(offset * 2 + 1);
m_tilemap_1_size3->mark_tile_dirty(offset * 2 + 1);
}
}
void psikyo_state::psikyo_switch_banks( int tmap, int bank )
{
if ((tmap == 0) && (bank != m_tilemap_0_bank))
if (bank != m_tilemap_bank[tmap])
{
m_tilemap_0_bank = bank;
m_tilemap_0_size0->mark_all_dirty();
m_tilemap_0_size1->mark_all_dirty();
m_tilemap_0_size2->mark_all_dirty();
m_tilemap_0_size3->mark_all_dirty();
}
else if ((tmap == 1) && (bank != m_tilemap_1_bank))
{
m_tilemap_1_bank = bank;
m_tilemap_1_size0->mark_all_dirty();
m_tilemap_1_size1->mark_all_dirty();
m_tilemap_1_size2->mark_all_dirty();
m_tilemap_1_size3->mark_all_dirty();
m_tilemap_bank[tmap] = bank;
for (int size = 0; size < 4; size++)
m_tilemap[tmap][size]->mark_all_dirty();
}
}
@ -158,45 +99,24 @@ VIDEO_START_MEMBER(psikyo_state,psikyo)
/* The Hardware is Capable of Changing the Dimensions of the Tilemaps, its safer to create
the various sized tilemaps now as opposed to later */
m_tilemap_0_size0 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(psikyo_state::get_tile_info_0),this), TILEMAP_SCAN_ROWS, 16, 16, 0x20, 0x80);
m_tilemap_0_size1 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(psikyo_state::get_tile_info_0),this), TILEMAP_SCAN_ROWS, 16, 16, 0x40, 0x40);
m_tilemap_0_size2 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(psikyo_state::get_tile_info_0),this), TILEMAP_SCAN_ROWS, 16, 16, 0x80, 0x20);
m_tilemap_0_size3 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(psikyo_state::get_tile_info_0),this), TILEMAP_SCAN_ROWS, 16, 16, 0x100, 0x10);
for (int size = 0; size < 4; size++)
{
m_tilemap[0][size] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(psikyo_state::get_tile_info<0>),this), TILEMAP_SCAN_ROWS, 16, 16, 0x20 << size, 0x80 >> size);
m_tilemap[1][size] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(psikyo_state::get_tile_info<1>),this), TILEMAP_SCAN_ROWS, 16, 16, 0x20 << size, 0x80 >> size);
m_tilemap_1_size0 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(psikyo_state::get_tile_info_1),this), TILEMAP_SCAN_ROWS, 16, 16, 0x20, 0x80);
m_tilemap_1_size1 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(psikyo_state::get_tile_info_1),this), TILEMAP_SCAN_ROWS, 16, 16, 0x40, 0x40);
m_tilemap_1_size2 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(psikyo_state::get_tile_info_1),this), TILEMAP_SCAN_ROWS, 16, 16, 0x80, 0x20);
m_tilemap_1_size3 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(psikyo_state::get_tile_info_1),this), TILEMAP_SCAN_ROWS, 16, 16, 0x100, 0x10);
for (int layer = 0; layer < 2; layer++)
{
m_tilemap[layer][size]->set_scroll_rows(1);
m_tilemap[layer][size]->set_scroll_cols(1);
}
}
m_spritebuf1 = std::make_unique<uint32_t[]>(0x2000 / 4);
m_spritebuf2 = std::make_unique<uint32_t[]>(0x2000 / 4);
m_spritebuf[0] = std::make_unique<uint32_t[]>(0x2000 / 4);
m_spritebuf[1] = std::make_unique<uint32_t[]>(0x2000 / 4);
m_tilemap_0_size0->set_scroll_rows(0x80 * 16); // line scrolling
m_tilemap_0_size0->set_scroll_cols(1);
m_tilemap_0_size1->set_scroll_rows(0x40 * 16); // line scrolling
m_tilemap_0_size1->set_scroll_cols(1);
m_tilemap_0_size2->set_scroll_rows(0x20 * 16); // line scrolling
m_tilemap_0_size2->set_scroll_cols(1);
m_tilemap_0_size3->set_scroll_rows(0x10 * 16); // line scrolling
m_tilemap_0_size3->set_scroll_cols(1);
m_tilemap_1_size0->set_scroll_rows(0x80 * 16); // line scrolling
m_tilemap_1_size0->set_scroll_cols(1);
m_tilemap_1_size1->set_scroll_rows(0x40 * 16); // line scrolling
m_tilemap_1_size1->set_scroll_cols(1);
m_tilemap_1_size2->set_scroll_rows(0x20 * 16); // line scrolling
m_tilemap_1_size2->set_scroll_cols(1);
m_tilemap_1_size3->set_scroll_rows(0x10 * 16); // line scrolling
m_tilemap_1_size3->set_scroll_cols(1);
save_pointer(NAME(m_spritebuf1.get()), 0x2000 / 4);
save_pointer(NAME(m_spritebuf2.get()), 0x2000 / 4);
save_pointer(NAME(m_spritebuf[0].get()), 0x2000 / 4, 0);
save_pointer(NAME(m_spritebuf[1].get()), 0x2000 / 4, 1);
save_item(NAME(m_old_linescroll));
}
VIDEO_START_MEMBER(psikyo_state,sngkace)
@ -258,9 +178,9 @@ void psikyo_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, co
/* tile layers 0 & 1 have priorities 1 & 2 */
static const int pri[] = { 0, 0xfc, 0xff, 0xff };
int offs;
uint16_t *spritelist = (uint16_t *)(m_spritebuf2.get() + 0x1800 / 4);
uint8_t *TILES = memregion("spritelut")->base(); // Sprites LUT
int TILES_LEN = memregion("spritelut")->bytes();
uint16_t *spritelist = (uint16_t *)(m_spritebuf[1].get() + 0x1800 / 4);
uint8_t *TILES = m_spritelut->base(); // Sprites LUT
int TILES_LEN = m_spritelut->bytes();
int width = m_screen->width();
int height = m_screen->height();
@ -291,7 +211,7 @@ void psikyo_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, co
sprite = spritelist[BYTE_XOR_BE(offs)];
sprite %= 0x300;
source = &m_spritebuf2[sprite * 8 / 4];
source = &m_spritebuf[1][sprite * 8 / 4];
/* Draw this sprite */
@ -375,9 +295,9 @@ void psikyo_state::draw_sprites_bootleg( screen_device &screen, bitmap_ind16 &bi
/* tile layers 0 & 1 have priorities 1 & 2 */
static const int pri[] = { 0, 0xfc, 0xff, 0xff };
int offs;
uint16_t *spritelist = (uint16_t *)(m_spritebuf2.get()+ 0x1800 / 4);
uint8_t *TILES = memregion("spritelut")->base(); // Sprites LUT
int TILES_LEN = memregion("spritelut")->bytes();
uint16_t *spritelist = (uint16_t *)(m_spritebuf[1].get()+ 0x1800 / 4);
uint8_t *TILES = m_spritelut->base(); // Sprites LUT
int TILES_LEN = m_spritelut->bytes();
int width = m_screen->width();
int height = m_screen->height();
@ -409,7 +329,7 @@ void psikyo_state::draw_sprites_bootleg( screen_device &screen, bitmap_ind16 &bi
sprite = spritelist[BYTE_XOR_BE(offs)];
sprite %= 0x300;
source = &m_spritebuf2[sprite * 8 / 4];
source = &m_spritebuf[1][sprite * 8 / 4];
/* Draw this sprite */
@ -496,31 +416,23 @@ void psikyo_state::draw_sprites_bootleg( screen_device &screen, bitmap_ind16 &bi
int psikyo_state::tilemap_width( int size )
{
if (size == 0)
return 0x80 * 16;
else if(size == 1)
return 0x40 * 16;
else if(size == 2)
return 0x20 * 16;
else
return 0x10 * 16;
return (0x80 * 16) >> size;
}
uint32_t psikyo_state::screen_update_psikyo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
uint16_t bgpen = 0;
int i, layers_ctrl = -1;
uint32_t tm0size, tm1size;
uint32_t tmsize[2];
uint32_t layer0_scrollx, layer0_scrolly;
uint32_t layer1_scrollx, layer1_scrolly;
uint32_t layer0_ctrl = m_vregs[0x412 / 4];
uint32_t layer1_ctrl = m_vregs[0x416 / 4];
uint32_t spr_ctrl = m_spritebuf2[0x1ffe / 4];
uint32_t scrollx[2]{ m_vregs[0x406 / 4], m_vregs[0x40e / 4] }, scrolly[2]{ m_vregs[0x402 / 4], m_vregs[0x40a / 4] };
uint32_t layer_ctrl[2]{ m_vregs[0x412 / 4], m_vregs[0x416 / 4] };
uint32_t spr_ctrl = m_spritebuf[1][0x1ffe / 4];
tilemap_t *tmptilemap0, *tmptilemap1;
tilemap_t *tmptilemap[2];
flip_screen_set(~ioport("DSW")->read() & 0x00010000); // hardwired to a DSW bit
flip_screen_set(~m_in_dsw->read() & 0x00010000); // hardwired to a DSW bit
/* Layers enable (not quite right) */
@ -551,119 +463,73 @@ uint32_t psikyo_state::screen_update_psikyo(screen_device &screen, bitmap_ind16
L:0178-0548, 1 needs size 2, 2 needs size ? Test
L:0178-0588, 2 needs size 3 More Intro
*/
/* For gfx banking for s1945jn/gunbird/btlkroad */
if (m_ka302c_banking)
for (int layer = 0; layer < 2; layer++)
{
psikyo_switch_banks(0, (layer0_ctrl & 0x400) >> 10);
psikyo_switch_banks(1, (layer1_ctrl & 0x400) >> 10);
}
switch ((layer0_ctrl & 0x00c0) >> 6)
{
case 0: tm0size = 1; break;
case 1: tm0size = 2; break;
case 2: tm0size = 3; break;
default: tm0size = 0; break;
}
switch ((layer1_ctrl & 0x00c0) >> 6)
{
case 0: tm1size = 1; break;
case 1: tm1size = 2; break;
case 2: tm1size = 3; break;
default: tm1size = 0; break;
}
if (tm0size == 0)
tmptilemap0 = m_tilemap_0_size0;
else if (tm0size == 1)
tmptilemap0 = m_tilemap_0_size1;
else if (tm0size == 2)
tmptilemap0 = m_tilemap_0_size2;
else
tmptilemap0 = m_tilemap_0_size3;
if (tm1size == 0)
tmptilemap1 = m_tilemap_1_size0;
else if (tm1size == 1)
tmptilemap1 = m_tilemap_1_size1;
else if (tm1size == 2)
tmptilemap1 = m_tilemap_1_size2;
else
tmptilemap1 = m_tilemap_1_size3;
tmptilemap0->enable(~layer0_ctrl & 1);
tmptilemap1->enable(~layer1_ctrl & 1);
/* Layers scrolling */
layer0_scrolly = m_vregs[0x402 / 4];
layer0_scrollx = m_vregs[0x406 / 4];
layer1_scrolly = m_vregs[0x40a / 4];
layer1_scrollx = m_vregs[0x40e / 4];
tmptilemap0->set_scrolly(0, layer0_scrolly);
tmptilemap1->set_scrolly(0, layer1_scrolly);
for (i = 0; i < 256; i++) /* 256 screen lines */
{
int x0 = 0, x1 = 0;
/* layer 0 */
if (layer0_ctrl & 0x0300)
/* For gfx banking for s1945jn/gunbird/btlkroad */
if (m_ka302c_banking)
{
if (layer0_ctrl & 0x0200)
/* per-tile rowscroll */
x0 = ((uint16_t *)m_vregs.target())[BYTE_XOR_BE(0x000/2 + i/16)];
else
/* per-line rowscroll */
x0 = ((uint16_t *)m_vregs.target())[BYTE_XOR_BE(0x000/2 + i)];
psikyo_switch_banks(layer, (layer_ctrl[layer] & 0x400) >> 10);
}
tmptilemap0->set_scrollx(
(i + layer0_scrolly) % tilemap_width(tm0size),
layer0_scrollx + x0 );
/* layer 1 */
if (layer1_ctrl & 0x0300)
switch ((layer_ctrl[layer] & 0x00c0) >> 6)
{
if (layer1_ctrl & 0x0200)
/* per-tile rowscroll */
x1 = ((uint16_t *)m_vregs.target())[BYTE_XOR_BE(0x200/2 + i/16)];
else
/* per-line rowscroll */
x1 = ((uint16_t *)m_vregs.target())[BYTE_XOR_BE(0x200/2 + i)];
case 0: tmsize[layer] = 1; break;
case 1: tmsize[layer] = 2; break;
case 2: tmsize[layer] = 3; break;
default: tmsize[layer] = 0; break;
}
tmptilemap[layer] = m_tilemap[layer][tmsize[layer]];
tmptilemap1->set_scrollx(
(i + layer1_scrolly) % tilemap_width(tm1size),
layer1_scrollx + x1 );
tmptilemap[layer]->enable(~layer_ctrl[layer] & 1);
/* Layers scrolling */
tmptilemap[layer]->set_scrolly(0, scrolly[layer]);
if (layer_ctrl[layer] & 0x0300) /* per-line rowscroll */
{
int tile_rowscroll = (layer_ctrl[layer] & 0x0200) >> 5; /* per-tile rowscroll */
if (m_old_linescroll[layer] != (layer_ctrl[layer] & 0x0300))
{
m_tilemap[layer][size]->set_scroll_rows(tilemap_width(tmsize[layer]) >> tile_rowscroll);
m_old_linescroll[layer] = (layer_ctrl[layer] & 0x0300);
}
for (i = 0; i < (256 >> tile_rowscroll); i++) /* 256 screen lines */
{
int x0 = ((uint16_t *)m_vregs.target())[BYTE_XOR_BE((layer * 0x200)/2 + i)];
tmptilemap[layer]->set_scrollx(
(i + scrolly[layer]) % (tilemap_width(tmsize[layer]) >> tile_rowscroll),
scrollx[layer] + x0 );
}
}
else
{
if (m_old_linescroll[layer] != (layer_ctrl[layer] & 0x0300))
{
m_tilemap[layer][size]->set_scroll_rows(1);
m_old_linescroll[layer] = (layer_ctrl[layer] & 0x0300);
}
tmptilemap[layer]->set_scrollx(0, scrollx[layer]);
}
tmptilemap[layer]->set_transparent_pen((layer_ctrl[layer] & 8 ? 0 : 15));
}
m_tilemap_0_size0->set_transparent_pen((layer0_ctrl & 8 ? 0 : 15));
m_tilemap_0_size1->set_transparent_pen((layer0_ctrl & 8 ? 0 : 15));
m_tilemap_0_size2->set_transparent_pen((layer0_ctrl & 8 ? 0 : 15));
m_tilemap_0_size3->set_transparent_pen((layer0_ctrl & 8 ? 0 : 15));
// TODO : is this correct?
if (layers_ctrl & 1)
bgpen = ((layer_ctrl[0] & 8) ? 0x800 : 0x80f);
else if (layers_ctrl & 2)
bgpen = ((layer_ctrl[1] & 8) ? 0xc00 : 0xc0f);
else
bgpen = m_palette->black_pen(); // TODO
m_tilemap_1_size0->set_transparent_pen((layer1_ctrl & 8 ? 0 : 15));
m_tilemap_1_size1->set_transparent_pen((layer1_ctrl & 8 ? 0 : 15));
m_tilemap_1_size2->set_transparent_pen((layer1_ctrl & 8 ? 0 : 15));
m_tilemap_1_size3->set_transparent_pen((layer1_ctrl & 8 ? 0 : 15));
bitmap.fill(m_palette->black_pen(), cliprect);
bitmap.fill(bgpen, cliprect);
screen.priority().fill(0, cliprect);
if (layers_ctrl & 1)
tmptilemap0->draw(screen, bitmap, cliprect, layer0_ctrl & 2 ? TILEMAP_DRAW_OPAQUE : 0, 1);
tmptilemap[0]->draw(screen, bitmap, cliprect, layer_ctrl[0] & 2 ? TILEMAP_DRAW_OPAQUE : 0, 1);
if (layers_ctrl & 2)
tmptilemap1->draw(screen, bitmap, cliprect, layer1_ctrl & 2 ? TILEMAP_DRAW_OPAQUE : 0, 2);
tmptilemap[1]->draw(screen, bitmap, cliprect, layer_ctrl[1] & 2 ? TILEMAP_DRAW_OPAQUE : 0, 2);
if (layers_ctrl & 4)
draw_sprites(screen, bitmap, cliprect, (spr_ctrl & 4 ? 0 : 15));
@ -681,19 +547,18 @@ uint32_t psikyo_state::screen_update_psikyo(screen_device &screen, bitmap_ind16
uint32_t psikyo_state::screen_update_psikyo_bootleg(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
uint16_t bgpen = 0;
int i, layers_ctrl = -1;
uint32_t tm0size, tm1size;
uint32_t tmsize[2];
uint32_t layer0_scrollx, layer0_scrolly;
uint32_t layer1_scrollx, layer1_scrolly;
uint32_t layer0_ctrl = m_vregs[0x412 / 4];
uint32_t layer1_ctrl = m_vregs[0x416 / 4];
uint32_t spr_ctrl = m_spritebuf2[0x1ffe / 4];
uint32_t scrollx[2]{ m_vregs[0x406 / 4], m_vregs[0x40e / 4] }, scrolly[2]{ m_vregs[0x402 / 4], m_vregs[0x40a / 4] };
uint32_t layer_ctrl[2]{ m_vregs[0x412 / 4], m_vregs[0x416 / 4] };
uint32_t spr_ctrl = m_spritebuf[1][0x1ffe / 4];
tilemap_t *tmptilemap0, *tmptilemap1;
tilemap_t *tmptilemap[2];
flip_screen_set(~ioport("DSW")->read() & 0x00010000); // hardwired to a DSW bit
flip_screen_set(~m_in_dsw->read() & 0x00010000); // hardwired to a DSW bit
/* Layers enable (not quite right) */
@ -724,119 +589,74 @@ uint32_t psikyo_state::screen_update_psikyo_bootleg(screen_device &screen, bitma
L:0178-0548, 1 needs size 2, 2 needs size ? Test
L:0178-0588, 2 needs size 3 More Intro
*/
/* For gfx banking for s1945jn/gunbird/btlkroad */
if (m_ka302c_banking)
for (int layer = 0; layer < 2; layer++)
{
psikyo_switch_banks(0, (layer0_ctrl & 0x400) >> 10);
psikyo_switch_banks(1, (layer1_ctrl & 0x400) >> 10);
}
switch ((layer0_ctrl & 0x00c0) >> 6)
{
case 0: tm0size = 1; break;
case 1: tm0size = 2; break;
case 2: tm0size = 3; break;
default: tm0size = 0; break;
}
switch ((layer1_ctrl & 0x00c0) >> 6)
{
case 0: tm1size = 1; break;
case 1: tm1size = 2; break;
case 2: tm1size = 3; break;
default: tm1size = 0; break;
}
if (tm0size == 0)
tmptilemap0 = m_tilemap_0_size0;
else if (tm0size == 1)
tmptilemap0 = m_tilemap_0_size1;
else if (tm0size == 2)
tmptilemap0 = m_tilemap_0_size2;
else
tmptilemap0 = m_tilemap_0_size3;
if (tm1size == 0)
tmptilemap1 = m_tilemap_1_size0;
else if (tm1size == 1)
tmptilemap1 = m_tilemap_1_size1;
else if (tm1size == 2)
tmptilemap1 = m_tilemap_1_size2;
else
tmptilemap1 = m_tilemap_1_size3;
tmptilemap0->enable(~layer0_ctrl & 1);
tmptilemap1->enable(~layer1_ctrl & 1);
/* Layers scrolling */
layer0_scrolly = m_vregs[0x402 / 4];
layer0_scrollx = m_vregs[0x406 / 4];
layer1_scrolly = m_vregs[0x40a / 4];
layer1_scrollx = m_vregs[0x40e / 4];
tmptilemap0->set_scrolly(0, layer0_scrolly);
tmptilemap1->set_scrolly(0, layer1_scrolly);
for (i = 0; i < 256; i++) /* 256 screen lines */
{
int x0 = 0, x1 = 0;
/* layer 0 */
if (layer0_ctrl & 0x0300)
/* For gfx banking for s1945jn/gunbird/btlkroad */
if (m_ka302c_banking)
{
if (layer0_ctrl & 0x0200)
/* per-tile rowscroll */
x0 = ((uint16_t *)m_vregs.target())[BYTE_XOR_BE(0x000/2 + i/16)];
else
/* per-line rowscroll */
x0 = ((uint16_t *)m_vregs.target())[BYTE_XOR_BE(0x000/2 + i)];
psikyo_switch_banks(layer, (layer_ctrl[layer] & 0x400) >> 10);
}
tmptilemap0->set_scrollx(
(i + layer0_scrolly) % tilemap_width(tm0size),
layer0_scrollx + x0 );
/* layer 1 */
if (layer1_ctrl & 0x0300)
switch ((layer_ctrl[layer] & 0x00c0) >> 6)
{
if (layer1_ctrl & 0x0200)
/* per-tile rowscroll */
x1 = ((uint16_t *)m_vregs.target())[BYTE_XOR_BE(0x200/2 + i/16)];
else
/* per-line rowscroll */
x1 = ((uint16_t *)m_vregs.target())[BYTE_XOR_BE(0x200/2 + i)];
case 0: tmsize[layer] = 1; break;
case 1: tmsize[layer] = 2; break;
case 2: tmsize[layer] = 3; break;
default: tmsize[layer] = 0; break;
}
tmptilemap[layer] = m_tilemap[layer][tmsize[layer]];
tmptilemap1->set_scrollx(
(i + layer1_scrolly) % tilemap_width(tm1size),
layer1_scrollx + x1 );
tmptilemap[layer]->enable(~layer_ctrl[layer] & 1);
/* Layers scrolling */
tmptilemap[layer]->set_scrolly(0, scrolly[layer]);
if (layer_ctrl[layer] & 0x0300) /* per-line rowscroll */
{
int tile_rowscroll = (layer_ctrl[layer] & 0x0200) >> 5; /* per-tile rowscroll */
if (m_old_linescroll[layer] != (layer_ctrl[layer] & 0x0300))
{
m_tilemap[layer][size]->set_scroll_rows(tilemap_width(tmsize[layer]) >> tile_rowscroll);
m_old_linescroll[layer] = (layer_ctrl[layer] & 0x0300);
}
for (i = 0; i < (256 >> tile_rowscroll); i++) /* 256 screen lines */
{
int x0 = ((uint16_t *)m_vregs.target())[BYTE_XOR_BE((layer * 0x200)/2 + i)];
tmptilemap[layer]->set_scrollx(
(i + scrolly[layer]) % (tilemap_width(tmsize[layer]) >> tile_rowscroll),
scrollx[layer] + x0 );
}
}
else
{
if (m_old_linescroll[layer] != (layer_ctrl[layer] & 0x0300))
{
m_tilemap[layer][size]->set_scroll_rows(1);
m_old_linescroll[layer] = (layer_ctrl[layer] & 0x0300);
}
tmptilemap[layer]->set_scrollx(0, scrollx[layer]);
}
tmptilemap[layer]->set_transparent_pen((layer_ctrl[layer] & 8 ? 0 : 15));
}
m_tilemap_0_size0->set_transparent_pen((layer0_ctrl & 8 ? 0 : 15));
m_tilemap_0_size1->set_transparent_pen((layer0_ctrl & 8 ? 0 : 15));
m_tilemap_0_size2->set_transparent_pen((layer0_ctrl & 8 ? 0 : 15));
m_tilemap_0_size3->set_transparent_pen((layer0_ctrl & 8 ? 0 : 15));
// TODO : is this correct?
if (layers_ctrl & 1)
bgpen = ((layer_ctrl[0] & 8) ? 0x800 : 0x80f);
else if (layers_ctrl & 2)
bgpen = ((layer_ctrl[1] & 8) ? 0xc00 : 0xc0f);
else
bgpen = m_palette->black_pen(); // TODO
m_tilemap_1_size0->set_transparent_pen((layer1_ctrl & 8 ? 0 : 15));
m_tilemap_1_size1->set_transparent_pen((layer1_ctrl & 8 ? 0 : 15));
m_tilemap_1_size2->set_transparent_pen((layer1_ctrl & 8 ? 0 : 15));
m_tilemap_1_size3->set_transparent_pen((layer1_ctrl & 8 ? 0 : 15));
bitmap.fill(m_palette->black_pen(), cliprect);
bitmap.fill(bgpen, cliprect);
screen.priority().fill(0, cliprect);
if (layers_ctrl & 1)
tmptilemap0->draw(screen, bitmap, cliprect, layer0_ctrl & 2 ? TILEMAP_DRAW_OPAQUE : 0, 1);
tmptilemap[0]->draw(screen, bitmap, cliprect, layer_ctrl[0] & 2 ? TILEMAP_DRAW_OPAQUE : 0, 1);
if (layers_ctrl & 2)
tmptilemap1->draw(screen, bitmap, cliprect, layer1_ctrl & 2 ? TILEMAP_DRAW_OPAQUE : 0, 2);
tmptilemap[1]->draw(screen, bitmap, cliprect, layer_ctrl[1] & 2 ? TILEMAP_DRAW_OPAQUE : 0, 2);
if (layers_ctrl & 4)
draw_sprites_bootleg(screen, bitmap, cliprect, (spr_ctrl & 4 ? 0 : 15));
@ -850,7 +670,7 @@ WRITE_LINE_MEMBER(psikyo_state::screen_vblank_psikyo)
// rising edge
if (state)
{
memcpy(m_spritebuf2.get(), m_spritebuf1.get(), 0x2000);
memcpy(m_spritebuf1.get(), m_spriteram, 0x2000);
memcpy(m_spritebuf[1].get(), m_spritebuf[0].get(), 0x2000);
memcpy(m_spritebuf[0].get(), m_spriteram, 0x2000);
}
}