mirror of
https://github.com/holub/mame
synced 2025-04-24 17:30:55 +03:00
Merge branch 'master' of https://github.com/mamedev/mame
This commit is contained in:
commit
e7f2974003
@ -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 )
|
||||
|
@ -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);
|
||||
};
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user