diff options
author | R. Belmont <rb6502@users.noreply.github.com> | 2019-04-13 09:40:58 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-13 09:40:58 -0400 |
commit | 8178098fe0824c09938a75ecceff729fddd9115a (patch) | |
tree | 85fa647094182aac27d9f5d5fa59869360810c6b | |
parent | dc9889f3388a1c373b3f12634e614839f5bbbc59 (diff) | |
parent | ec925ce52fdce8837a9c0c8cf13089f62a4283ab (diff) |
Merge pull request #4867 from cam900/ginganin_args
ginganin.cpp : Updates
-rw-r--r-- | src/mame/drivers/ginganin.cpp | 79 | ||||
-rw-r--r-- | src/mame/includes/ginganin.h | 31 | ||||
-rw-r--r-- | src/mame/video/ginganin.cpp | 31 |
3 files changed, 62 insertions, 79 deletions
diff --git a/src/mame/drivers/ginganin.cpp b/src/mame/drivers/ginganin.cpp index 6e41e76af36..f1cfdc963f1 100644 --- a/src/mame/drivers/ginganin.cpp +++ b/src/mame/drivers/ginganin.cpp @@ -76,16 +76,16 @@ f5d6 print 7 digit BCD number: d0.l to (a1)+ color $3000 */ -void ginganin_state::ginganin_map(address_map &map) +void ginganin_state::main_map(address_map &map) { /* The ROM area: 10000-13fff is written with: 0000 0000 0000 0001, at startup only. Why? */ map(0x000000, 0x01ffff).rom(); map(0x020000, 0x023fff).ram(); - map(0x030000, 0x0307ff).ram().w(FUNC(ginganin_state::ginganin_txtram16_w)).share("txtram"); + map(0x030000, 0x0307ff).ram().w(FUNC(ginganin_state::txtram_w)).share("txtram"); map(0x040000, 0x0407ff).ram().share("spriteram"); map(0x050000, 0x0507ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); - map(0x060000, 0x06000f).ram().w(FUNC(ginganin_state::ginganin_vregs16_w)).share("vregs"); - map(0x068000, 0x06bfff).ram().w(FUNC(ginganin_state::ginganin_fgram16_w)).share("fgram"); + map(0x060000, 0x06000f).ram().w(FUNC(ginganin_state::vregs_w)).share("vregs"); + map(0x068000, 0x06bfff).ram().w(FUNC(ginganin_state::fgram_w)).share("fgram"); map(0x070000, 0x070001).portr("P1_P2"); map(0x070002, 0x070003).portr("DSW"); } @@ -104,7 +104,7 @@ void ginganin_state::sound_map(address_map &map) map(0x1800, 0x1800).r(m_soundlatch, FUNC(generic_latch_8_device::read)); map(0x2000, 0x2001).w("ymsnd", FUNC(y8950_device::write)); map(0x2800, 0x2801).w("psg", FUNC(ym2149_device::address_data_w)); - map(0x4000, 0xffff).rom(); + map(0x4000, 0xffff).rom().region("audiocpu", 0x4000); } @@ -189,41 +189,33 @@ INPUT_PORTS_END */ -#define layout16x16(_name_,_romsize_) \ -static const gfx_layout _name_ =\ -{\ - 16,16,\ - (_romsize_)*8/(16*16*4),\ - 4,\ - {0, 1, 2, 3},\ - {0*4,1*4,2*4,3*4,4*4,5*4,6*4,7*4,\ - 0*4+32*16,1*4+32*16,2*4+32*16,3*4+32*16,4*4+32*16,5*4+32*16,6*4+32*16,7*4+32*16},\ - {0*32,1*32,2*32,3*32,4*32,5*32,6*32,7*32,\ - 8*32,9*32,10*32,11*32,12*32,13*32,14*32,15*32},\ - 16*16*4\ +static const gfx_layout layout16x16 = +{ + 16,16, + RGN_FRAC(1,1), + 4, + { STEP4(0,1) }, + { STEP8(0,4), STEP8(4*8*16,4) }, + { STEP16(0,4*8) }, + 16*16*4 }; -#define layout8x8(_name_,_romsize_) \ -static const gfx_layout _name_ =\ -{\ - 8,8,\ - (_romsize_)*8/(8*8*4),\ - 4,\ - {0, 1, 2, 3},\ - {0*4,1*4,2*4,3*4,4*4,5*4,6*4,7*4}, \ - {0*32,1*32,2*32,3*32,4*32,5*32,6*32,7*32},\ - 8*8*4\ +static const gfx_layout layout8x8 = +{ + 8,8, + RGN_FRAC(1,1), + 4, + { STEP4(0,1) }, + { STEP8(0,4) }, + { STEP8(0,4*8) }, + 8*8*4 }; -layout16x16(tilelayout, 0x20000) -layout8x8 (txtlayout, 0x04000) -layout16x16(spritelayout,0x50000) - static GFXDECODE_START( gfx_ginganin ) - GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 256*3, 16 ) /* [0] bg */ - GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 256*2, 16 ) /* [1] fg */ - GFXDECODE_ENTRY( "gfx3", 0, txtlayout, 256*0, 16 ) /* [2] txt */ - GFXDECODE_ENTRY( "gfx4", 0, spritelayout, 256*1, 16 ) /* [3] sprites */ + GFXDECODE_ENTRY( "gfx1", 0, layout16x16, 256*3, 16 ) /* [0] bg */ + GFXDECODE_ENTRY( "gfx2", 0, layout16x16, 256*2, 16 ) /* [1] fg */ + GFXDECODE_ENTRY( "gfx3", 0, layout8x8, 256*0, 16 ) /* [2] txt */ + GFXDECODE_ENTRY( "gfx4", 0, layout16x16, 256*1, 16 ) /* [3] sprites */ GFXDECODE_END @@ -249,13 +241,12 @@ void ginganin_state::ginganin(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, MAIN_CLOCK); - m_maincpu->set_addrmap(AS_PROGRAM, &ginganin_state::ginganin_map); + m_maincpu->set_addrmap(AS_PROGRAM, &ginganin_state::main_map); m_maincpu->set_vblank_int("screen", FUNC(ginganin_state::irq1_line_hold)); /* ? (vectors 1-7 contain the same address) */ MC6809(config, m_audiocpu, SOUND_CLOCK); // MBL68B09? m_audiocpu->set_addrmap(AS_PROGRAM, &ginganin_state::sound_map); - ptm6840_device &ptm(PTM6840(config, "6840ptm", SOUND_CLOCK/2)); ptm.set_external_clocks(0, 0, 0); ptm.o1_callback().set(FUNC(ginganin_state::ptm_irq)); @@ -266,7 +257,7 @@ void ginganin_state::ginganin(machine_config &config) screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(256, 256); screen.set_visarea(0, 255, 0 + 16 , 255 - 16); - screen.set_screen_update(FUNC(ginganin_state::screen_update_ginganin)); + screen.set_screen_update(FUNC(ginganin_state::screen_update)); screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_ginganin); @@ -316,7 +307,7 @@ ROM_START( ginganin ) ROM_LOAD( "gn_08.bin", 0x020000, 0x10000, CRC(f7c73c18) SHA1(102700e2217bcd1532af56ee6a00ad608c8217db) ) ROM_LOAD( "gn_09.bin", 0x030000, 0x10000, CRC(a5e07c3b) SHA1(cdda02cd847330575612cb33d1bb38a5d50a3e6d) ) - ROM_REGION( 0x08000, "gfx5", 0 ) /* background tilemaps */ + ROM_REGION( 0x08000, "bgrom", 0 ) /* background tilemaps */ ROM_LOAD( "gn_11.bin", 0x00000, 0x08000, CRC(f0d0e605) SHA1(0c541e8e036573be1d99ecb71fdb4568ca8cc269) ) ROM_REGION( 0x20000, "ymsnd", 0 ) /* samples */ @@ -351,7 +342,7 @@ ROM_START( ginganina ) ROM_LOAD( "gn_08.bin", 0x020000, 0x10000, CRC(f7c73c18) SHA1(102700e2217bcd1532af56ee6a00ad608c8217db) ) ROM_LOAD( "gn_09.bin", 0x030000, 0x10000, CRC(a5e07c3b) SHA1(cdda02cd847330575612cb33d1bb38a5d50a3e6d) ) - ROM_REGION( 0x08000, "gfx5", 0 ) /* background tilemaps */ + ROM_REGION( 0x08000, "bgrom", 0 ) /* background tilemaps */ ROM_LOAD( "gn_11.bin", 0x00000, 0x08000, CRC(f0d0e605) SHA1(0c541e8e036573be1d99ecb71fdb4568ca8cc269) ) ROM_REGION( 0x20000, "ymsnd", 0 ) /* samples */ @@ -360,19 +351,13 @@ ROM_START( ginganina ) ROM_END - void ginganin_state::init_ginganin() { /* main cpu patches */ - uint16_t *rom = (uint16_t *)memregion("maincpu")->base(); + u16 *rom = (u16 *)memregion("maincpu")->base(); /* avoid writes to rom getting to the log */ rom[0x408 / 2] = 0x6000; rom[0x40a / 2] = 0x001c; - - - /* sound cpu patches */ - /* let's clear the RAM: ROM starts at 0x4000 */ - memset(memregion("audiocpu")->base(), 0, 0x800); } diff --git a/src/mame/includes/ginganin.h b/src/mame/includes/ginganin.h index 6aee0fb9120..b348486f471 100644 --- a/src/mame/includes/ginganin.h +++ b/src/mame/includes/ginganin.h @@ -22,6 +22,7 @@ public: m_spriteram(*this, "spriteram"), m_vregs(*this, "vregs"), m_fgram(*this, "fgram"), + m_bgrom(*this, "bgrom"), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_gfxdecode(*this, "gfxdecode"), @@ -35,20 +36,22 @@ public: private: /* memory pointers */ - required_shared_ptr<uint16_t> m_txtram; - required_shared_ptr<uint16_t> m_spriteram; - required_shared_ptr<uint16_t> m_vregs; - required_shared_ptr<uint16_t> m_fgram; + required_shared_ptr<u16> m_txtram; + required_shared_ptr<u16> m_spriteram; + required_shared_ptr<u16> m_vregs; + required_shared_ptr<u16> m_fgram; + + required_region_ptr<u8> m_bgrom; /* video-related */ tilemap_t *m_bg_tilemap; tilemap_t *m_fg_tilemap; tilemap_t *m_tx_tilemap; - int m_layers_ctrl; - int m_flipscreen; + int m_layers_ctrl; + int m_flipscreen; #ifdef MAME_DEBUG - int m_posx; - int m_posy; + int m_posx; + int m_posy; #endif /* devices */ @@ -58,9 +61,9 @@ private: required_device<palette_device> m_palette; required_device<generic_latch_8_device> m_soundlatch; - DECLARE_WRITE16_MEMBER(ginganin_fgram16_w); - DECLARE_WRITE16_MEMBER(ginganin_txtram16_w); - DECLARE_WRITE16_MEMBER(ginganin_vregs16_w); + void fgram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void txtram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void vregs_w(offs_t offset, u16 data, u16 mem_mask = ~0); DECLARE_WRITE_LINE_MEMBER(ptm_irq); TILE_GET_INFO_MEMBER(get_bg_tile_info); TILE_GET_INFO_MEMBER(get_fg_tile_info); @@ -68,9 +71,9 @@ private: virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; - uint32_t screen_update_ginganin(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void draw_sprites( bitmap_ind16 &bitmap,const rectangle &cliprect ); - void ginganin_map(address_map &map); + u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect); + void main_map(address_map &map); void sound_map(address_map &map); }; diff --git a/src/mame/video/ginganin.cpp b/src/mame/video/ginganin.cpp index a477c41b80b..2b99a30d27d 100644 --- a/src/mame/video/ginganin.cpp +++ b/src/mame/video/ginganin.cpp @@ -78,8 +78,7 @@ Note: if MAME_DEBUG is defined, pressing Z with: TILE_GET_INFO_MEMBER(ginganin_state::get_bg_tile_info) { - uint8_t *gfx = memregion("gfx5")->base(); - int code = gfx[2 * tile_index + 0] * 256 + gfx[2 * tile_index + 1]; + const u32 code = m_bgrom[2 * tile_index + 0] * 256 + m_bgrom[2 * tile_index + 1]; SET_TILE_INFO_MEMBER(BG_GFX, code, code >> 12, @@ -95,14 +94,14 @@ TILE_GET_INFO_MEMBER(ginganin_state::get_bg_tile_info) TILE_GET_INFO_MEMBER(ginganin_state::get_fg_tile_info) { - uint16_t code = m_fgram[tile_index]; + const u16 code = m_fgram[tile_index]; SET_TILE_INFO_MEMBER(FG_GFX, code, code >> 12, 0); } -WRITE16_MEMBER(ginganin_state::ginganin_fgram16_w) +void ginganin_state::fgram_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_fgram[offset]); m_fg_tilemap->mark_tile_dirty(offset); @@ -117,14 +116,14 @@ WRITE16_MEMBER(ginganin_state::ginganin_fgram16_w) TILE_GET_INFO_MEMBER(ginganin_state::get_txt_tile_info) { - uint16_t code = m_txtram[tile_index]; + const u16 code = m_txtram[tile_index]; SET_TILE_INFO_MEMBER(TXT_GFX, code, code >> 12, 0); } -WRITE16_MEMBER(ginganin_state::ginganin_txtram16_w) +void ginganin_state::txtram_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_txtram[offset]); m_tx_tilemap->mark_tile_dirty(offset); @@ -142,7 +141,7 @@ void ginganin_state::video_start() } -WRITE16_MEMBER(ginganin_state::ginganin_vregs16_w) +void ginganin_state::vregs_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_vregs[offset]); data = m_vregs[offset]; @@ -202,17 +201,14 @@ Offset: Values: Format: ------------------------------------------------------------------------ */ -void ginganin_state::draw_sprites( bitmap_ind16 &bitmap,const rectangle &cliprect ) +void ginganin_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect) { - uint16_t *spriteram = m_spriteram; - int offs; - - for (offs = 0; offs < (m_spriteram.bytes() >> 1); offs += 4) + for (int offs = 0; offs < (m_spriteram.bytes() >> 1); offs += 4) { - int y = spriteram[offs + 0]; - int x = spriteram[offs + 1]; - int code = spriteram[offs + 2]; - int attr = spriteram[offs + 3]; + int y = m_spriteram[offs + 0]; + int x = m_spriteram[offs + 1]; + const u32 code = m_spriteram[offs + 2]; + const u16 attr = m_spriteram[offs + 3]; int flipx = code & 0x4000; int flipy = code & 0x8000; @@ -237,7 +233,7 @@ void ginganin_state::draw_sprites( bitmap_ind16 &bitmap,const rectangle &cliprec } -uint32_t ginganin_state::screen_update_ginganin(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +u32 ginganin_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { int layers_ctrl1 = m_layers_ctrl; @@ -268,7 +264,6 @@ if (machine().input().code_pressed(KEYCODE_Z)) } #endif - if (layers_ctrl1 & 1) m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); else |