From 7eb14cd2b7d9489ef6a56fe5df9d0c0e0fc76877 Mon Sep 17 00:00:00 2001 From: "Alex W. Jackson" Date: Sun, 21 Sep 2014 22:26:53 +0000 Subject: [PATCH] MT 5700 [Alex Jackson] --- src/mame/drivers/terracre.c | 81 +++++++----------------------------- src/mame/includes/terracre.h | 23 +++++----- src/mame/video/terracre.c | 18 ++++---- 3 files changed, 36 insertions(+), 86 deletions(-) diff --git a/src/mame/drivers/terracre.c b/src/mame/drivers/terracre.c index c144590f72e..b9dbf26655b 100644 --- a/src/mame/drivers/terracre.c +++ b/src/mame/drivers/terracre.c @@ -182,7 +182,7 @@ static ADDRESS_MAP_START( terracre_map, AS_PROGRAM, 16, terracre_state ) AM_RANGE(0x000000, 0x01ffff) AM_ROM AM_RANGE(0x020000, 0x0201ff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x020200, 0x021fff) AM_RAM - AM_RANGE(0x022000, 0x022fff) AM_WRITE(amazon_background_w) AM_SHARE("amazon_videoram") + AM_RANGE(0x022000, 0x022fff) AM_WRITE(amazon_background_w) AM_SHARE("bg_videoram") AM_RANGE(0x023000, 0x023fff) AM_RAM AM_RANGE(0x024000, 0x024001) AM_READ_PORT("P1") AM_RANGE(0x024002, 0x024003) AM_READ_PORT("P2") @@ -192,14 +192,14 @@ static ADDRESS_MAP_START( terracre_map, AS_PROGRAM, 16, terracre_state ) AM_RANGE(0x026002, 0x026003) AM_WRITE(amazon_scrollx_w) AM_RANGE(0x026004, 0x026005) AM_WRITE(amazon_scrolly_w) AM_RANGE(0x02600c, 0x02600d) AM_WRITE(amazon_sound_w) - AM_RANGE(0x028000, 0x0287ff) AM_WRITE(amazon_foreground_w) AM_SHARE("videoram") + AM_RANGE(0x028000, 0x0287ff) AM_WRITE(amazon_foreground_w) AM_SHARE("fg_videoram") ADDRESS_MAP_END static ADDRESS_MAP_START( amazon_map, AS_PROGRAM, 16, terracre_state ) AM_RANGE(0x000000, 0x01ffff) AM_ROM AM_RANGE(0x040000, 0x0401ff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x040200, 0x040fff) AM_RAM - AM_RANGE(0x042000, 0x042fff) AM_WRITE(amazon_background_w) AM_SHARE("amazon_videoram") + AM_RANGE(0x042000, 0x042fff) AM_WRITE(amazon_background_w) AM_SHARE("bg_videoram") AM_RANGE(0x044000, 0x044001) AM_READ_PORT("IN0") AM_RANGE(0x044002, 0x044003) AM_READ_PORT("IN1") AM_RANGE(0x044004, 0x044005) AM_READ_PORT("IN2") @@ -208,7 +208,7 @@ static ADDRESS_MAP_START( amazon_map, AS_PROGRAM, 16, terracre_state ) AM_RANGE(0x046002, 0x046003) AM_WRITE(amazon_scrollx_w) AM_RANGE(0x046004, 0x046005) AM_WRITE(amazon_scrolly_w) AM_RANGE(0x04600c, 0x04600d) AM_WRITE(amazon_sound_w) - AM_RANGE(0x050000, 0x050fff) AM_WRITE(amazon_foreground_w) AM_SHARE("videoram") + AM_RANGE(0x050000, 0x050fff) AM_WRITE(amazon_foreground_w) AM_SHARE("fg_videoram") AM_RANGE(0x070000, 0x070003) AM_READWRITE(amazon_protection_r, amazon_protection_w) ADDRESS_MAP_END @@ -510,42 +510,6 @@ static GFXDECODE_START( terracre ) GFXDECODE_ENTRY( "gfx3", 0, sprite_layout, 1*16+16*16, 256 ) GFXDECODE_END -static MACHINE_CONFIG_START( amazon, terracre_state ) - MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz/2) // 8mhz - MCFG_CPU_PROGRAM_MAP(amazon_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", terracre_state, irq1_line_hold) - - MCFG_CPU_ADD("audiocpu", Z80, XTAL_16MHz/4) // 4mhz? should be derived from XTAL_22MHz? how? - MCFG_CPU_PROGRAM_MAP(sound_map) - MCFG_CPU_IO_MAP(sound_3526_io_map) - MCFG_CPU_PERIODIC_INT_DRIVER(terracre_state, irq0_line_hold, XTAL_16MHz/4/512) // ? - - MCFG_MACHINE_START_OVERRIDE(terracre_state,amazon) - - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE( 60 ) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(terracre_state, screen_update_amazon) - MCFG_SCREEN_PALETTE("palette") - - MCFG_GFXDECODE_ADD("gfxdecode", "palette", terracre) - MCFG_PALETTE_ADD("palette", 1*16+16*16+16*256) - MCFG_PALETTE_INDIRECT_ENTRIES(256) - MCFG_PALETTE_INIT_OWNER(terracre_state, terracre) - - MCFG_SPEAKER_STANDARD_MONO("mono") - - MCFG_SOUND_ADD("ymsnd", YM3526, XTAL_16MHz/4) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) - - MCFG_DAC_ADD("dac1") - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) - - MCFG_DAC_ADD("dac2") - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) -MACHINE_CONFIG_END static MACHINE_CONFIG_START( ym3526, terracre_state ) MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz/2) // 8mhz @@ -557,12 +521,15 @@ static MACHINE_CONFIG_START( ym3526, terracre_state ) MCFG_CPU_IO_MAP(sound_3526_io_map) MCFG_CPU_PERIODIC_INT_DRIVER(terracre_state, irq0_line_hold, XTAL_16MHz/4/512) // ? + MCFG_BUFFERED_SPRITERAM16_ADD("spriteram") + MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE( 60 ) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) MCFG_SCREEN_SIZE(32*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(terracre_state, screen_update_amazon) + MCFG_SCREEN_VBLANK_DEVICE("spriteram", buffered_spriteram16_device, vblank_copy_rising) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", terracre) @@ -582,42 +549,24 @@ static MACHINE_CONFIG_START( ym3526, terracre_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( ym2203, terracre_state ) - MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz/2) // 8mhz - MCFG_CPU_PROGRAM_MAP(terracre_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", terracre_state, irq1_line_hold) - - MCFG_CPU_ADD("audiocpu", Z80, XTAL_16MHz/4) // 4.0mhz when compared to sound recordings, should be derived from XTAL_22MHz? how? - MCFG_CPU_PROGRAM_MAP(sound_map) +static MACHINE_CONFIG_DERIVED( ym2203, ym3526 ) + MCFG_CPU_MODIFY("audiocpu") MCFG_CPU_IO_MAP(sound_2203_io_map) - MCFG_CPU_PERIODIC_INT_DRIVER(terracre_state, irq0_line_hold, XTAL_16MHz/4/512) // ? - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(terracre_state, screen_update_amazon) - MCFG_SCREEN_PALETTE("palette") - - MCFG_GFXDECODE_ADD("gfxdecode", "palette", terracre) - MCFG_PALETTE_ADD("palette", 1*16+16*16+16*256) - MCFG_PALETTE_INDIRECT_ENTRIES(256) - MCFG_PALETTE_INIT_OWNER(terracre_state, terracre) - - MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_DEVICE_REMOVE("ymsnd") MCFG_SOUND_ADD("ym1", YM2203, XTAL_16MHz/4) MCFG_SOUND_ROUTE(0, "mono", 0.20) MCFG_SOUND_ROUTE(1, "mono", 0.20) MCFG_SOUND_ROUTE(2, "mono", 0.20) MCFG_SOUND_ROUTE(3, "mono", 0.40) +MACHINE_CONFIG_END - MCFG_DAC_ADD("dac1") - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) +static MACHINE_CONFIG_DERIVED( amazon, ym3526 ) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(amazon_map) - MCFG_DAC_ADD("dac2") - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + MCFG_MACHINE_START_OVERRIDE(terracre_state,amazon) MACHINE_CONFIG_END diff --git a/src/mame/includes/terracre.h b/src/mame/includes/terracre.h index ed105fb2209..2853a71c130 100644 --- a/src/mame/includes/terracre.h +++ b/src/mame/includes/terracre.h @@ -1,18 +1,24 @@ +#include "video/bufsprite.h" + class terracre_state : public driver_device { public: terracre_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_spriteram(*this, "spriteram"), - m_amazon_videoram(*this, "amazon_videoram"), - m_videoram(*this, "videoram"), m_maincpu(*this, "maincpu"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_spriteram(*this, "spriteram"), + m_bg_videoram(*this, "bg_videoram"), + m_fg_videoram(*this, "fg_videoram") { } - required_shared_ptr m_spriteram; - required_shared_ptr m_amazon_videoram; - required_shared_ptr m_videoram; + required_device m_maincpu; + required_device m_gfxdecode; + required_device m_palette; + required_device m_spriteram; + + required_shared_ptr m_bg_videoram; + required_shared_ptr m_fg_videoram; const UINT16 *m_mpProtData; UINT8 m_mAmazonProtCmd; @@ -40,7 +46,4 @@ public: DECLARE_MACHINE_START(amazon); UINT32 screen_update_amazon(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect ); - required_device m_maincpu; - required_device m_gfxdecode; - required_device m_palette; }; diff --git a/src/mame/video/terracre.c b/src/mame/video/terracre.c index 6a7e2f16851..613329b7e22 100644 --- a/src/mame/video/terracre.c +++ b/src/mame/video/terracre.c @@ -15,15 +15,14 @@ TILE_GET_INFO_MEMBER(terracre_state::get_bg_tile_info) /* xxxx.----.----.---- * ----.xx--.----.---- * ----.--xx.xxxx.xxxx */ - unsigned data = m_amazon_videoram[tile_index]; + unsigned data = m_bg_videoram[tile_index]; unsigned color = data>>11; SET_TILE_INFO_MEMBER(1,data&0x3ff,color,0 ); } TILE_GET_INFO_MEMBER(terracre_state::get_fg_tile_info) { - UINT16 *videoram = m_videoram; - int data = videoram[tile_index]; + unsigned data = m_fg_videoram[tile_index]; SET_TILE_INFO_MEMBER(0,data&0xff,0,0 ); } @@ -31,8 +30,8 @@ void terracre_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec { const UINT8 *spritepalettebank = memregion("user1")->base(); gfx_element *pGfx = m_gfxdecode->gfx(2); - const UINT16 *pSource = m_spriteram; - int i; + const UINT16 *pSource = m_spriteram->buffer(); + int flip = flip_screen(); int transparent_pen; if( pGfx->elements() > 0x200 ) @@ -43,7 +42,7 @@ void terracre_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec { transparent_pen = 0x0; } - for( i=0; i<0x200; i+=8 ) + for( int i=0; i<0x200; i+=8 ) { int tile = pSource[1]&0xff; int attrs = pSource[2]; @@ -73,7 +72,7 @@ void terracre_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec color += 16 * (spritepalettebank[(tile>>1)&0xff] & 0x0f); } - if (flip_screen()) + if (flip) { sx=240-sx; sy=240-sy; @@ -146,14 +145,13 @@ PALETTE_INIT_MEMBER(terracre_state, terracre) WRITE16_MEMBER(terracre_state::amazon_background_w) { - COMBINE_DATA( &m_amazon_videoram[offset] ); + COMBINE_DATA( &m_bg_videoram[offset] ); m_background->mark_tile_dirty(offset ); } WRITE16_MEMBER(terracre_state::amazon_foreground_w) { - UINT16 *videoram = m_videoram; - COMBINE_DATA( &videoram[offset] ); + COMBINE_DATA( &m_fg_videoram[offset] ); m_foreground->mark_tile_dirty(offset ); }