MT 5700 [Alex Jackson]

This commit is contained in:
Alex W. Jackson 2014-09-21 22:26:53 +00:00
parent 6bb0f325dc
commit 7eb14cd2b7
3 changed files with 36 additions and 86 deletions

View File

@ -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

View File

@ -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<UINT16> m_spriteram;
required_shared_ptr<UINT16> m_amazon_videoram;
required_shared_ptr<UINT16> m_videoram;
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<buffered_spriteram16_device> m_spriteram;
required_shared_ptr<UINT16> m_bg_videoram;
required_shared_ptr<UINT16> 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<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
};

View File

@ -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 );
}