This commit is contained in:
RobertoFresca 2015-10-26 15:20:17 -03:00
commit e7f2974003
3 changed files with 85 additions and 89 deletions

View File

@ -34,7 +34,8 @@
c300 interrupt enable
c302 flip screen
c304 trigger interrupt on audio CPU
c308 Protection ??? Stuffs in some values computed from ROM content
c308 video enable (?). Protection ??? Stuffs in some values computed
from ROM content
c30a coin counter 1
c30c coin counter 2
@ -61,14 +62,14 @@
*
*************************************/
INTERRUPT_GEN_MEMBER(timeplt_state::timeplt_interrupt)
INTERRUPT_GEN_MEMBER(timeplt_state::interrupt)
{
if (m_nmi_enable)
device.execute().set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
}
WRITE8_MEMBER(timeplt_state::timeplt_nmi_enable_w)
WRITE8_MEMBER(timeplt_state::nmi_enable_w)
{
m_nmi_enable = data & 1;
if (!m_nmi_enable)
@ -83,7 +84,7 @@ WRITE8_MEMBER(timeplt_state::timeplt_nmi_enable_w)
*
*************************************/
WRITE8_MEMBER(timeplt_state::timeplt_coin_counter_w)
WRITE8_MEMBER(timeplt_state::coincounter_w)
{
coin_counter_w(machine(), offset >> 1, data);
}
@ -121,71 +122,39 @@ CUSTOM_INPUT_MEMBER(timeplt_state::chkun_hopper_status_r)
*
*************************************/
static ADDRESS_MAP_START( timeplt_main_map, AS_PROGRAM, 8, timeplt_state )
static ADDRESS_MAP_START( common_main_map, AS_PROGRAM, 8, timeplt_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0x5fff) AM_ROM
AM_RANGE(0xa000, 0xa3ff) AM_RAM_WRITE(timeplt_colorram_w) AM_SHARE("colorram")
AM_RANGE(0xa400, 0xa7ff) AM_RAM_WRITE(timeplt_videoram_w) AM_SHARE("videoram")
AM_RANGE(0xa000, 0xa3ff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
AM_RANGE(0xa400, 0xa7ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
AM_RANGE(0xa800, 0xafff) AM_RAM
AM_RANGE(0xb000, 0xb0ff) AM_MIRROR(0x0b00) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0xb400, 0xb4ff) AM_MIRROR(0x0b00) AM_RAM AM_SHARE("spriteram2")
AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x0cff) AM_WRITE(soundlatch_byte_w)
AM_RANGE(0xc200, 0xc200) AM_MIRROR(0x0cff) AM_WRITE(watchdog_reset_w)
AM_RANGE(0xc300, 0xc300) AM_MIRROR(0x0cf1) AM_WRITE(timeplt_nmi_enable_w)
AM_RANGE(0xc302, 0xc302) AM_MIRROR(0x0cf1) AM_WRITE(timeplt_flipscreen_w)
AM_RANGE(0xc304, 0xc304) AM_MIRROR(0x0cf1) AM_DEVWRITE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w)
AM_RANGE(0xc30a, 0xc30c) AM_MIRROR(0x0cf1) AM_WRITE(timeplt_coin_counter_w)
AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x0cff) AM_READ(timeplt_scanline_r)
AM_RANGE(0xc200, 0xc200) AM_MIRROR(0x0cff) AM_READ_PORT("DSW1")
AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x0cff) AM_READ(scanline_r) AM_WRITE(soundlatch_byte_w)
AM_RANGE(0xc200, 0xc200) AM_MIRROR(0x0cff) AM_READ_PORT("DSW1") AM_WRITE(watchdog_reset_w)
AM_RANGE(0xc300, 0xc300) AM_MIRROR(0x0c9f) AM_READ_PORT("IN0")
AM_RANGE(0xc302, 0xc302) AM_MIRROR(0x0cf1) AM_WRITE(flipscreen_w)
AM_RANGE(0xc304, 0xc304) AM_MIRROR(0x0cf1) AM_DEVWRITE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w)
AM_RANGE(0xc30a, 0xc30c) AM_MIRROR(0x0cf1) AM_WRITE(coincounter_w)
AM_RANGE(0xc320, 0xc320) AM_MIRROR(0x0c9f) AM_READ_PORT("IN1")
AM_RANGE(0xc340, 0xc340) AM_MIRROR(0x0c9f) AM_READ_PORT("IN2")
AM_RANGE(0xc360, 0xc360) AM_MIRROR(0x0c9f) AM_READ_PORT("DSW0")
ADDRESS_MAP_END
static ADDRESS_MAP_START( timeplt_main_map, AS_PROGRAM, 8, timeplt_state )
AM_IMPORT_FROM(common_main_map)
AM_RANGE(0xc300, 0xc300) AM_MIRROR(0x0cf1) AM_WRITE(nmi_enable_w)
AM_RANGE(0xc308, 0xc308) AM_MIRROR(0x0cf1) AM_WRITE(video_enable_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( psurge_main_map, AS_PROGRAM, 8, timeplt_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0x5fff) AM_ROM
AM_IMPORT_FROM(common_main_map)
AM_RANGE(0x6004, 0x6004) AM_READ(psurge_protection_r)
AM_RANGE(0xa000, 0xa3ff) AM_RAM_WRITE(timeplt_colorram_w) AM_SHARE("colorram")
AM_RANGE(0xa400, 0xa7ff) AM_RAM_WRITE(timeplt_videoram_w) AM_SHARE("videoram")
AM_RANGE(0xa800, 0xafff) AM_RAM
AM_RANGE(0xb000, 0xb0ff) AM_MIRROR(0x0b00) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0xb400, 0xb4ff) AM_MIRROR(0x0b00) AM_RAM AM_SHARE("spriteram2")
AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x0cff) AM_WRITE(soundlatch_byte_w)
AM_RANGE(0xc200, 0xc200) AM_MIRROR(0x0cff) AM_WRITE(watchdog_reset_w)
AM_RANGE(0xc302, 0xc302) AM_MIRROR(0x0cf1) AM_WRITE(timeplt_flipscreen_w)
AM_RANGE(0xc304, 0xc304) AM_MIRROR(0x0cf1) AM_DEVWRITE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w)
AM_RANGE(0xc30a, 0xc30c) AM_MIRROR(0x0cf1) AM_WRITE(timeplt_coin_counter_w)
AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x0cff) AM_READ(timeplt_scanline_r)
AM_RANGE(0xc200, 0xc200) AM_MIRROR(0x0cff) AM_READ_PORT("DSW1")
AM_RANGE(0xc300, 0xc300) AM_MIRROR(0x0c9f) AM_READ_PORT("IN0")
AM_RANGE(0xc320, 0xc320) AM_MIRROR(0x0c9f) AM_READ_PORT("IN1")
AM_RANGE(0xc340, 0xc340) AM_MIRROR(0x0c9f) AM_READ_PORT("IN2")
AM_RANGE(0xc360, 0xc360) AM_MIRROR(0x0c9f) AM_READ_PORT("DSW0")
ADDRESS_MAP_END
static ADDRESS_MAP_START( chkun_main_map, AS_PROGRAM, 8, timeplt_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0x5fff) AM_ROM
AM_IMPORT_FROM(timeplt_main_map)
AM_RANGE(0x6000, 0x67ff) AM_RAM
AM_RANGE(0xa000, 0xa3ff) AM_RAM_WRITE(timeplt_colorram_w) AM_SHARE("colorram")
AM_RANGE(0xa400, 0xa7ff) AM_RAM_WRITE(timeplt_videoram_w) AM_SHARE("videoram")
AM_RANGE(0xa800, 0xafff) AM_RAM
AM_RANGE(0xb000, 0xb0ff) AM_MIRROR(0x0b00) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0xb400, 0xb4ff) AM_MIRROR(0x0b00) AM_RAM AM_SHARE("spriteram2")
AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x0cff) AM_WRITE(soundlatch_byte_w)
AM_RANGE(0xc200, 0xc200) AM_MIRROR(0x0cff) AM_WRITE(watchdog_reset_w)
AM_RANGE(0xc300, 0xc300) AM_MIRROR(0x0cf1) AM_WRITE(timeplt_nmi_enable_w)
AM_RANGE(0xc302, 0xc302) AM_MIRROR(0x0cf1) AM_WRITE(timeplt_flipscreen_w)
AM_RANGE(0xc304, 0xc304) AM_MIRROR(0x0cf1) AM_DEVWRITE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w)
AM_RANGE(0xc30a, 0xc30c) AM_MIRROR(0x0cf1) AM_WRITE(timeplt_coin_counter_w)
AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x0cff) AM_READ(timeplt_scanline_r)
AM_RANGE(0xc200, 0xc200) AM_MIRROR(0x0cff) AM_READ_PORT("DSW1")
AM_RANGE(0xc300, 0xc300) AM_MIRROR(0x0c9f) AM_READ_PORT("IN0")
AM_RANGE(0xc320, 0xc320) AM_MIRROR(0x0c9f) AM_READ_PORT("IN1")
AM_RANGE(0xc340, 0xc340) AM_MIRROR(0x0c9f) AM_READ_PORT("IN2")
AM_RANGE(0xc360, 0xc360) AM_MIRROR(0x0c9f) AM_READ_PORT("DSW0")
ADDRESS_MAP_END
@ -457,7 +426,7 @@ static MACHINE_CONFIG_START( timeplt, timeplt_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, MASTER_CLOCK/3/2) /* not confirmed, but common for Konami games of the era */
MCFG_CPU_PROGRAM_MAP(timeplt_main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", timeplt_state, timeplt_interrupt)
MCFG_CPU_VBLANK_INT_DRIVER("screen", timeplt_state, interrupt)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@ -465,7 +434,7 @@ static MACHINE_CONFIG_START( timeplt, timeplt_state )
MCFG_SCREEN_REFRESH_RATE(60)
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(timeplt_state, screen_update_timeplt)
MCFG_SCREEN_UPDATE_DRIVER(timeplt_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", timeplt)
@ -483,6 +452,8 @@ static MACHINE_CONFIG_DERIVED( psurge, timeplt )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(psurge_main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", timeplt_state, nmi_line_pulse)
MCFG_VIDEO_START_OVERRIDE(timeplt_state,psurge)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( bikkuric, timeplt )

View File

@ -15,17 +15,20 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_tc8830f(*this, "tc8830f"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
m_colorram(*this, "colorram"),
m_videoram(*this, "videoram"),
m_spriteram(*this, "spriteram"),
m_spriteram2(*this, "spriteram2"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette")
m_spriteram2(*this, "spriteram2")
{ }
required_device<cpu_device> m_maincpu;
optional_device<tc8830f_device> m_tc8830f;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
/* memory pointers */
required_shared_ptr<UINT8> m_colorram;
@ -33,33 +36,43 @@ public:
required_shared_ptr<UINT8> m_spriteram;
required_shared_ptr<UINT8> m_spriteram2;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
/* video-related */
tilemap_t *m_bg_tilemap;
/* misc */
UINT8 m_nmi_enable;
bool m_video_enable;
DECLARE_WRITE8_MEMBER(timeplt_nmi_enable_w);
DECLARE_WRITE8_MEMBER(timeplt_coin_counter_w);
/* common */
DECLARE_WRITE8_MEMBER(coincounter_w);
DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE8_MEMBER(colorram_w);
DECLARE_WRITE8_MEMBER(flipscreen_w);
DECLARE_READ8_MEMBER(scanline_r);
/* all but psurge */
DECLARE_WRITE8_MEMBER(nmi_enable_w);
DECLARE_WRITE8_MEMBER(video_enable_w);
/* psurge */
DECLARE_READ8_MEMBER(psurge_protection_r);
DECLARE_WRITE8_MEMBER(timeplt_videoram_w);
DECLARE_WRITE8_MEMBER(timeplt_colorram_w);
DECLARE_WRITE8_MEMBER(timeplt_flipscreen_w);
DECLARE_READ8_MEMBER(timeplt_scanline_r);
/* chkun */
DECLARE_CUSTOM_INPUT_MEMBER(chkun_hopper_status_r);
DECLARE_WRITE8_MEMBER(chkun_sound_w);
TILE_GET_INFO_MEMBER(get_tile_info);
TILE_GET_INFO_MEMBER(get_chkun_tile_info);
virtual void machine_start();
virtual void machine_reset();
virtual void video_start();
DECLARE_PALETTE_INIT(timeplt);
DECLARE_VIDEO_START(chkun);
UINT32 screen_update_timeplt(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(timeplt_interrupt);
DECLARE_VIDEO_START(psurge);
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
INTERRUPT_GEN_MEMBER(interrupt);
};

View File

@ -125,6 +125,15 @@ TILE_GET_INFO_MEMBER(timeplt_state::get_chkun_tile_info)
void timeplt_state::video_start()
{
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(timeplt_state::get_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
m_video_enable = 0;
save_item(NAME(m_video_enable));
}
VIDEO_START_MEMBER(timeplt_state,psurge)
{
video_start();
m_video_enable = 1; //psurge doesn't seem to have the video enable
}
VIDEO_START_MEMBER(timeplt_state,chkun)
@ -140,27 +149,31 @@ VIDEO_START_MEMBER(timeplt_state,chkun)
*
*************************************/
WRITE8_MEMBER(timeplt_state::timeplt_videoram_w)
WRITE8_MEMBER(timeplt_state::videoram_w)
{
m_videoram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset);
}
WRITE8_MEMBER(timeplt_state::timeplt_colorram_w)
WRITE8_MEMBER(timeplt_state::colorram_w)
{
m_colorram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset);
}
WRITE8_MEMBER(timeplt_state::timeplt_flipscreen_w)
WRITE8_MEMBER(timeplt_state::flipscreen_w)
{
flip_screen_set(~data & 1);
}
WRITE8_MEMBER(timeplt_state::video_enable_w)
{
m_video_enable = data & 1;
}
READ8_MEMBER(timeplt_state::timeplt_scanline_r)
READ8_MEMBER(timeplt_state::scanline_r)
{
return m_screen->vpos();
}
@ -175,19 +188,15 @@ READ8_MEMBER(timeplt_state::timeplt_scanline_r)
void timeplt_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
{
UINT8 *spriteram = m_spriteram;
UINT8 *spriteram_2 = m_spriteram2;
int offs;
for (offs = 0x3e;offs >= 0x10;offs -= 2)
for (int offs = 0x3e;offs >= 0x10;offs -= 2)
{
int sx = spriteram[offs];
int sy = 241 - spriteram_2[offs + 1];
int sx = m_spriteram[offs];
int sy = 241 - m_spriteram2[offs + 1];
int code = spriteram[offs + 1];
int color = spriteram_2[offs] & 0x3f;
int flipx = ~spriteram_2[offs] & 0x40;
int flipy = spriteram_2[offs] & 0x80;
int code = m_spriteram[offs + 1];
int color = m_spriteram2[offs] & 0x3f;
int flipx = ~m_spriteram2[offs] & 0x40;
int flipy = m_spriteram2[offs] & 0x80;
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
code,
@ -205,10 +214,13 @@ void timeplt_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprec
*
*************************************/
UINT32 timeplt_state::screen_update_timeplt(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
UINT32 timeplt_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
draw_sprites(bitmap, cliprect);
m_bg_tilemap->draw(screen, bitmap, cliprect, 1, 0);
if (m_video_enable)
{
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
draw_sprites(bitmap, cliprect);
m_bg_tilemap->draw(screen, bitmap, cliprect, 1, 0);
}
return 0;
}