mirror of
https://github.com/holub/mame
synced 2025-10-07 09:25:34 +03:00
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:
parent
ecaba3d507
commit
c3d693ce6f
@ -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) )
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user