From c3d693ce6fb6fe4334d7e8dc8a823515a83a1fa3 Mon Sep 17 00:00:00 2001 From: cam900 Date: Sat, 31 Mar 2018 18:07:50 +0900 Subject: [PATCH] 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 --- src/mame/drivers/dreamwld.cpp | 370 +++++++++++--------------- src/mame/drivers/psikyo.cpp | 274 ++++++++++--------- src/mame/includes/psikyo.h | 71 ++--- src/mame/video/psikyo.cpp | 480 +++++++++++----------------------- 4 files changed, 476 insertions(+), 719 deletions(-) diff --git a/src/mame/drivers/dreamwld.cpp b/src/mame/drivers/dreamwld.cpp index a9820d1ec94..26965c71d2a 100644 --- a/src/mame/drivers/dreamwld.cpp +++ b/src/mame/drivers/dreamwld.cpp @@ -102,51 +102,56 @@ Stephh's notes (based on the game M68EC020 code and some tests) : #include "screen.h" #include "speaker.h" +#include 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 m_spriteram; - required_shared_ptr m_bg_videoram; - required_shared_ptr m_bg2_videoram; + required_shared_ptr_array m_vram; required_shared_ptr m_vregs; required_shared_ptr m_workram; + optional_memory_region m_prot; + required_memory_region m_spritelut; + optional_memory_bank_array<2> m_okibank; + std::unique_ptr 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 m_spritebuf1; - std::unique_ptr m_spritebuf2; + std::unique_ptr 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 DECLARE_WRITE32_MEMBER(vram_w); + DECLARE_READ32_MEMBER(protdata_r); + template DECLARE_WRITE32_MEMBER(okibank_w); + template 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 +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 +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(0x2000 / 4); - m_spritebuf2 = std::make_unique(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(0x2000 / 4); + m_spritebuf[1] = std::make_unique(0x2000 / 4); m_lineram16 = make_unique_clear(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 +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) ) diff --git a/src/mame/drivers/psikyo.cpp b/src/mame/drivers/psikyo.cpp index 69825a76bec..0d0a8f231af 100644 --- a/src/mame/drivers/psikyo.cpp +++ b/src/mame/drivers/psikyo.cpp @@ -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 +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 +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); } diff --git a/src/mame/includes/psikyo.h b/src/mame/includes/psikyo.h index ce43c8a9ea1..393bf0a5eb8 100644 --- a/src/mame/includes/psikyo.h +++ b/src/mame/includes/psikyo.h @@ -10,45 +10,53 @@ #include "sound/okim6295.h" #include "screen.h" +#include + 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 m_spriteram; - required_shared_ptr m_vram_0; - required_shared_ptr m_vram_1; + required_shared_ptr_array m_vram; required_shared_ptr m_vregs; optional_shared_ptr m_bootleg_spritebuffer; - std::unique_ptr m_spritebuf1; - std::unique_ptr m_spritebuf2; + std::unique_ptr 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 DECLARE_WRITE8_MEMBER(sound_bankswitch_w); + template 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 TILE_GET_INFO_MEMBER(get_tile_info); virtual void machine_start() override; virtual void machine_reset() override; DECLARE_VIDEO_START(sngkace); diff --git a/src/mame/video/psikyo.cpp b/src/mame/video/psikyo.cpp index b5d0eeab5f6..3de171a3ea7 100644 --- a/src/mame/video/psikyo.cpp +++ b/src/mame/video/psikyo.cpp @@ -73,82 +73,23 @@ Offset: ***************************************************************************/ -TILE_GET_INFO_MEMBER(psikyo_state::get_tile_info_0) +template +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(0x2000 / 4); - m_spritebuf2 = std::make_unique(0x2000 / 4); + m_spritebuf[0] = std::make_unique(0x2000 / 4); + m_spritebuf[1] = std::make_unique(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); } }