dynduke.c, igs009.c: added save state support (nw)

This commit is contained in:
Ivan Vangelista 2015-05-20 23:50:55 +02:00
parent a394438a54
commit 6bc7a20a51
4 changed files with 174 additions and 148 deletions

View File

@ -82,19 +82,19 @@ static ADDRESS_MAP_START( master_map, AS_PROGRAM, 16, dynduke_state )
AM_RANGE(0x0b000, 0x0b001) AM_READ_PORT("P1_P2")
AM_RANGE(0x0b002, 0x0b003) AM_READ_PORT("DSW")
AM_RANGE(0x0b004, 0x0b005) AM_WRITENOP
AM_RANGE(0x0b006, 0x0b007) AM_WRITE(dynduke_control_w)
AM_RANGE(0x0c000, 0x0c7ff) AM_RAM_WRITE(dynduke_text_w) AM_SHARE("videoram")
AM_RANGE(0x0b006, 0x0b007) AM_WRITE(control_w)
AM_RANGE(0x0c000, 0x0c7ff) AM_RAM_WRITE(text_w) AM_SHARE("videoram")
AM_RANGE(0x0d000, 0x0d00d) AM_DEVREADWRITE("seibu_sound", seibu_sound_device, main_word_r, main_word_w)
AM_RANGE(0xa0000, 0xfffff) AM_ROM
ADDRESS_MAP_END
static ADDRESS_MAP_START( slave_map, AS_PROGRAM, 16, dynduke_state )
AM_RANGE(0x00000, 0x05fff) AM_RAM
AM_RANGE(0x06000, 0x067ff) AM_RAM_WRITE(dynduke_background_w) AM_SHARE("back_data")
AM_RANGE(0x06800, 0x06fff) AM_RAM_WRITE(dynduke_foreground_w) AM_SHARE("fore_data")
AM_RANGE(0x07000, 0x07fff) AM_RAM_WRITE(dynduke_paletteram_w) AM_SHARE("paletteram")
AM_RANGE(0x06000, 0x067ff) AM_RAM_WRITE(background_w) AM_SHARE("back_data")
AM_RANGE(0x06800, 0x06fff) AM_RAM_WRITE(foreground_w) AM_SHARE("fore_data")
AM_RANGE(0x07000, 0x07fff) AM_RAM_WRITE(paletteram_w) AM_SHARE("paletteram")
AM_RANGE(0x08000, 0x08fff) AM_RAM AM_SHARE("share1")
AM_RANGE(0x0a000, 0x0a001) AM_WRITE(dynduke_gfxbank_w)
AM_RANGE(0x0a000, 0x0a001) AM_WRITE(gfxbank_w)
AM_RANGE(0x0c000, 0x0c001) AM_WRITENOP
AM_RANGE(0xc0000, 0xfffff) AM_ROM
ADDRESS_MAP_END
@ -103,14 +103,14 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( masterj_map, AS_PROGRAM, 16, dynduke_state )
AM_RANGE(0x00000, 0x06fff) AM_RAM
AM_RANGE(0x07000, 0x07fff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x08000, 0x087ff) AM_RAM_WRITE(dynduke_text_w) AM_SHARE("videoram")
AM_RANGE(0x08000, 0x087ff) AM_RAM_WRITE(text_w) AM_SHARE("videoram")
AM_RANGE(0x09000, 0x0900d) AM_DEVREADWRITE("seibu_sound", seibu_sound_device, main_word_r, main_word_w)
AM_RANGE(0x0c000, 0x0c0ff) AM_RAM AM_SHARE("scroll_ram")
AM_RANGE(0x0e000, 0x0efff) AM_RAM AM_SHARE("share1")
AM_RANGE(0x0f000, 0x0f001) AM_READ_PORT("P1_P2")
AM_RANGE(0x0f002, 0x0f003) AM_READ_PORT("DSW")
AM_RANGE(0x0f004, 0x0f005) AM_WRITENOP
AM_RANGE(0x0f006, 0x0f007) AM_WRITE(dynduke_control_w)
AM_RANGE(0x0f006, 0x0f007) AM_WRITE(control_w)
AM_RANGE(0xa0000, 0xfffff) AM_ROM
ADDRESS_MAP_END
@ -265,7 +265,7 @@ GFXDECODE_END
/* Interrupt Generator */
INTERRUPT_GEN_MEMBER(dynduke_state::dynduke_interrupt)
INTERRUPT_GEN_MEMBER(dynduke_state::interrupt)
{
device.execute().set_input_line_and_vector(0, HOLD_LINE, 0xc8/4); // VBL
}
@ -276,11 +276,11 @@ static MACHINE_CONFIG_START( dynduke, dynduke_state )
// basic machine hardware
MCFG_CPU_ADD("maincpu", V30, 16000000/2) // NEC V30-8 CPU
MCFG_CPU_PROGRAM_MAP(master_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", dynduke_state, dynduke_interrupt)
MCFG_CPU_VBLANK_INT_DRIVER("screen", dynduke_state, interrupt)
MCFG_CPU_ADD("slave", V30, 16000000/2) // NEC V30-8 CPU
MCFG_CPU_PROGRAM_MAP(slave_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", dynduke_state, dynduke_interrupt)
MCFG_CPU_VBLANK_INT_DRIVER("screen", dynduke_state, interrupt)
SEIBU_SOUND_SYSTEM_CPU(14318180/4)
@ -294,7 +294,7 @@ static MACHINE_CONFIG_START( dynduke, dynduke_state )
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(dynduke_state, screen_update_dynduke)
MCFG_SCREEN_UPDATE_DRIVER(dynduke_state, screen_update)
MCFG_SCREEN_VBLANK_DEVICE("spriteram", buffered_spriteram16_device, vblank_copy_rising)
MCFG_SCREEN_PALETTE("palette")
@ -612,9 +612,9 @@ DRIVER_INIT_MEMBER(dynduke_state,dynduke)
/* Game Drivers */
GAME( 1989, dynduke, 0, dynduke, dynduke, dynduke_state, dynduke, ROT0, "Seibu Kaihatsu", "Dynamite Duke (Europe set 1)", 0 )
GAME( 1989, dyndukea, dynduke, dynduke, dynduke, dynduke_state, dynduke, ROT0, "Seibu Kaihatsu", "Dynamite Duke (Europe set 2)", 0 )
GAME( 1989, dyndukej, dynduke, dynduke, dynduke, dynduke_state, dynduke, ROT0, "Seibu Kaihatsu", "Dynamite Duke (Japan)", 0 )
GAME( 1989, dyndukeu, dynduke, dynduke, dynduke, dynduke_state, dynduke, ROT0, "Seibu Kaihatsu (Fabtek license)", "Dynamite Duke (US)", 0 )
GAME( 1989, dbldynj, dynduke, dbldyn, dynduke, dynduke_state, dynduke, ROT0, "Seibu Kaihatsu", "The Double Dynamites (Japan)", 0 )
GAME( 1989, dbldynu, dynduke, dynduke, dynduke, dynduke_state, dynduke, ROT0, "Seibu Kaihatsu (Fabtek license)", "The Double Dynamites (US)", 0 )
GAME( 1989, dynduke, 0, dynduke, dynduke, dynduke_state, dynduke, ROT0, "Seibu Kaihatsu", "Dynamite Duke (Europe set 1)", GAME_SUPPORTS_SAVE )
GAME( 1989, dyndukea, dynduke, dynduke, dynduke, dynduke_state, dynduke, ROT0, "Seibu Kaihatsu", "Dynamite Duke (Europe set 2)", GAME_SUPPORTS_SAVE )
GAME( 1989, dyndukej, dynduke, dynduke, dynduke, dynduke_state, dynduke, ROT0, "Seibu Kaihatsu", "Dynamite Duke (Japan)", GAME_SUPPORTS_SAVE )
GAME( 1989, dyndukeu, dynduke, dynduke, dynduke, dynduke_state, dynduke, ROT0, "Seibu Kaihatsu (Fabtek license)", "Dynamite Duke (US)", GAME_SUPPORTS_SAVE )
GAME( 1989, dbldynj, dynduke, dbldyn, dynduke, dynduke_state, dynduke, ROT0, "Seibu Kaihatsu", "The Double Dynamites (Japan)", GAME_SUPPORTS_SAVE )
GAME( 1989, dbldynu, dynduke, dynduke, dynduke, dynduke_state, dynduke, ROT0, "Seibu Kaihatsu (Fabtek license)", "The Double Dynamites (US)", GAME_SUPPORTS_SAVE )

View File

@ -37,52 +37,61 @@ class igs009_state : public driver_device
public:
igs009_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_bg_scroll(*this, "bg_scroll"),
m_gp98_reel1_ram(*this, "gp98_reel1_ram"),
m_gp98_reel2_ram(*this, "gp98_reel2_ram"),
m_gp98_reel3_ram(*this, "gp98_reel3_ram"),
m_gp98_reel4_ram(*this, "gp98_reel4_ram"),
m_bg_scroll2(*this, "bg_scroll2"),
m_fg_tile_ram(*this, "fg_tile_ram"),
m_fg_color_ram(*this, "fg_color_ram"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette") { }
m_palette(*this, "palette"),
m_bg_scroll(*this, "bg_scroll"),
m_reel1_ram(*this, "reel1_ram"),
m_reel2_ram(*this, "reel2_ram"),
m_reel3_ram(*this, "reel3_ram"),
m_reel4_ram(*this, "reel4_ram"),
m_bg_scroll2(*this, "bg_scroll2"),
m_fg_tile_ram(*this, "fg_tile_ram"),
m_fg_color_ram(*this, "fg_color_ram") { }
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_shared_ptr<UINT8> m_bg_scroll;
required_shared_ptr<UINT8> m_gp98_reel1_ram;
required_shared_ptr<UINT8> m_gp98_reel2_ram;
required_shared_ptr<UINT8> m_gp98_reel3_ram;
required_shared_ptr<UINT8> m_gp98_reel4_ram;
required_shared_ptr<UINT8> m_reel1_ram;
required_shared_ptr<UINT8> m_reel2_ram;
required_shared_ptr<UINT8> m_reel3_ram;
required_shared_ptr<UINT8> m_reel4_ram;
required_shared_ptr<UINT8> m_bg_scroll2;
required_shared_ptr<UINT8> m_fg_tile_ram;
required_shared_ptr<UINT8> m_fg_color_ram;
tilemap_t *m_gp98_reel1_tilemap;
tilemap_t *m_gp98_reel2_tilemap;
tilemap_t *m_gp98_reel3_tilemap;
tilemap_t *m_gp98_reel4_tilemap;
tilemap_t *m_reel1_tilemap;
tilemap_t *m_reel2_tilemap;
tilemap_t *m_reel3_tilemap;
tilemap_t *m_reel4_tilemap;
tilemap_t *m_fg_tilemap;
int m_video_enable;
int m_nmi_enable;
int m_hopper;
UINT8 m_out[3];
UINT8 m_igs_magic[2];
DECLARE_WRITE8_MEMBER(gp98_reel1_ram_w);
DECLARE_WRITE8_MEMBER(gp98_reel2_ram_w);
DECLARE_WRITE8_MEMBER(gp98_reel3_ram_w);
DECLARE_WRITE8_MEMBER(gp98_reel4_ram_w);
DECLARE_WRITE8_MEMBER(reel1_ram_w);
DECLARE_WRITE8_MEMBER(reel2_ram_w);
DECLARE_WRITE8_MEMBER(reel3_ram_w);
DECLARE_WRITE8_MEMBER(reel4_ram_w);
DECLARE_WRITE8_MEMBER(bg_scroll_w);
DECLARE_WRITE8_MEMBER(fg_tile_w);
DECLARE_WRITE8_MEMBER(fg_color_w);
DECLARE_WRITE8_MEMBER(jingbell_nmi_and_coins_w);
DECLARE_WRITE8_MEMBER(jingbell_video_and_leds_w);
DECLARE_WRITE8_MEMBER(jingbell_leds_w);
DECLARE_WRITE8_MEMBER(jingbell_magic_w);
DECLARE_READ8_MEMBER(jingbell_magic_r);
DECLARE_WRITE8_MEMBER(nmi_and_coins_w);
DECLARE_WRITE8_MEMBER(video_and_leds_w);
DECLARE_WRITE8_MEMBER(leds_w);
DECLARE_WRITE8_MEMBER(magic_w);
DECLARE_READ8_MEMBER(magic_r);
void show_out();
DECLARE_CUSTOM_INPUT_MEMBER(hopper_r);
DECLARE_DRIVER_INIT(jingbell);
INTERRUPT_GEN_MEMBER(interrupt);
TILE_GET_INFO_MEMBER(get_jingbell_reel1_tile_info);
TILE_GET_INFO_MEMBER(get_gp98_reel1_tile_info);
TILE_GET_INFO_MEMBER(get_jingbell_reel2_tile_info);
@ -92,15 +101,14 @@ public:
TILE_GET_INFO_MEMBER(get_jingbell_reel4_tile_info);
TILE_GET_INFO_MEMBER(get_gp98_reel4_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
DECLARE_DRIVER_INIT(jingbell);
virtual void machine_start();
virtual void machine_reset();
virtual void video_start();
DECLARE_VIDEO_START(gp98);
UINT32 screen_update_jingbell(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(jingbell_interrupt);
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
};
@ -110,15 +118,15 @@ public:
WRITE8_MEMBER(igs009_state::gp98_reel1_ram_w)
WRITE8_MEMBER(igs009_state::reel1_ram_w)
{
m_gp98_reel1_ram[offset] = data;
m_gp98_reel1_tilemap->mark_tile_dirty(offset);
m_reel1_ram[offset] = data;
m_reel1_tilemap->mark_tile_dirty(offset);
}
TILE_GET_INFO_MEMBER(igs009_state::get_jingbell_reel1_tile_info)
{
int code = m_gp98_reel1_ram[tile_index];
int code = m_reel1_ram[tile_index];
SET_TILE_INFO_MEMBER(0,
(code)+(((tile_index+1)&0x3)*0x100),
@ -129,7 +137,7 @@ TILE_GET_INFO_MEMBER(igs009_state::get_jingbell_reel1_tile_info)
TILE_GET_INFO_MEMBER(igs009_state::get_gp98_reel1_tile_info)
{
int code = m_gp98_reel1_ram[tile_index];
int code = m_reel1_ram[tile_index];
SET_TILE_INFO_MEMBER(0,
(code*4)+(tile_index&0x3),
@ -138,15 +146,15 @@ TILE_GET_INFO_MEMBER(igs009_state::get_gp98_reel1_tile_info)
}
WRITE8_MEMBER(igs009_state::gp98_reel2_ram_w)
WRITE8_MEMBER(igs009_state::reel2_ram_w)
{
m_gp98_reel2_ram[offset] = data;
m_gp98_reel2_tilemap->mark_tile_dirty(offset);
m_reel2_ram[offset] = data;
m_reel2_tilemap->mark_tile_dirty(offset);
}
TILE_GET_INFO_MEMBER(igs009_state::get_jingbell_reel2_tile_info)
{
int code = m_gp98_reel2_ram[tile_index];
int code = m_reel2_ram[tile_index];
SET_TILE_INFO_MEMBER(0,
(code)+(((tile_index+1)&0x3)*0x100),
@ -156,7 +164,7 @@ TILE_GET_INFO_MEMBER(igs009_state::get_jingbell_reel2_tile_info)
TILE_GET_INFO_MEMBER(igs009_state::get_gp98_reel2_tile_info)
{
int code = m_gp98_reel2_ram[tile_index];
int code = m_reel2_ram[tile_index];
SET_TILE_INFO_MEMBER(0,
(code*4)+(tile_index&0x3),
@ -166,15 +174,15 @@ TILE_GET_INFO_MEMBER(igs009_state::get_gp98_reel2_tile_info)
WRITE8_MEMBER(igs009_state::gp98_reel3_ram_w)
WRITE8_MEMBER(igs009_state::reel3_ram_w)
{
m_gp98_reel3_ram[offset] = data;
m_gp98_reel3_tilemap->mark_tile_dirty(offset);
m_reel3_ram[offset] = data;
m_reel3_tilemap->mark_tile_dirty(offset);
}
TILE_GET_INFO_MEMBER(igs009_state::get_jingbell_reel3_tile_info)
{
int code = m_gp98_reel3_ram[tile_index];
int code = m_reel3_ram[tile_index];
SET_TILE_INFO_MEMBER(0,
(code)+(((tile_index+1)&0x3)*0x100),
@ -184,7 +192,7 @@ TILE_GET_INFO_MEMBER(igs009_state::get_jingbell_reel3_tile_info)
TILE_GET_INFO_MEMBER(igs009_state::get_gp98_reel3_tile_info)
{
int code = m_gp98_reel3_ram[tile_index];
int code = m_reel3_ram[tile_index];
SET_TILE_INFO_MEMBER(0,
(code*4)+(tile_index&0x3),
@ -194,15 +202,15 @@ TILE_GET_INFO_MEMBER(igs009_state::get_gp98_reel3_tile_info)
WRITE8_MEMBER(igs009_state::gp98_reel4_ram_w)
WRITE8_MEMBER(igs009_state::reel4_ram_w)
{
m_gp98_reel4_ram[offset] = data;
m_gp98_reel4_tilemap->mark_tile_dirty(offset);
m_reel4_ram[offset] = data;
m_reel4_tilemap->mark_tile_dirty(offset);
}
TILE_GET_INFO_MEMBER(igs009_state::get_jingbell_reel4_tile_info)
{
int code = m_gp98_reel4_ram[tile_index];
int code = m_reel4_ram[tile_index];
SET_TILE_INFO_MEMBER(0,
(code)+(((tile_index+1)&0x3)*0x100),
@ -212,7 +220,7 @@ TILE_GET_INFO_MEMBER(igs009_state::get_jingbell_reel4_tile_info)
TILE_GET_INFO_MEMBER(igs009_state::get_gp98_reel4_tile_info)
{
int code = m_gp98_reel4_ram[tile_index];
int code = m_reel4_ram[tile_index];
SET_TILE_INFO_MEMBER(0,
(code*4)+(tile_index&0x3),
@ -256,15 +264,15 @@ void igs009_state::video_start()
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 0x80,0x20);
m_fg_tilemap->set_transparent_pen(0);
m_gp98_reel1_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_jingbell_reel1_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8);
m_gp98_reel2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_jingbell_reel2_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8);
m_gp98_reel3_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_jingbell_reel3_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8);
m_gp98_reel4_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_jingbell_reel4_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8);
m_reel1_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_jingbell_reel1_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8);
m_reel2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_jingbell_reel2_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8);
m_reel3_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_jingbell_reel3_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8);
m_reel4_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_jingbell_reel4_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8);
m_gp98_reel1_tilemap->set_scroll_cols(128);
m_gp98_reel2_tilemap->set_scroll_cols(128);
m_gp98_reel3_tilemap->set_scroll_cols(128);
m_gp98_reel4_tilemap->set_scroll_cols(128);
m_reel1_tilemap->set_scroll_cols(128);
m_reel2_tilemap->set_scroll_cols(128);
m_reel3_tilemap->set_scroll_cols(128);
m_reel4_tilemap->set_scroll_cols(128);
}
@ -273,19 +281,19 @@ VIDEO_START_MEMBER(igs009_state,gp98)
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 0x80,0x20);
m_fg_tilemap->set_transparent_pen(0);
m_gp98_reel1_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_gp98_reel1_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8);
m_gp98_reel2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_gp98_reel2_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8);
m_gp98_reel3_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_gp98_reel3_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8);
m_gp98_reel4_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_gp98_reel4_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8);
m_reel1_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_gp98_reel1_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8);
m_reel2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_gp98_reel2_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8);
m_reel3_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_gp98_reel3_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8);
m_reel4_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(igs009_state::get_gp98_reel4_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 128, 8);
m_gp98_reel1_tilemap->set_scroll_cols(128);
m_gp98_reel2_tilemap->set_scroll_cols(128);
m_gp98_reel3_tilemap->set_scroll_cols(128);
m_gp98_reel4_tilemap->set_scroll_cols(128);
m_reel1_tilemap->set_scroll_cols(128);
m_reel2_tilemap->set_scroll_cols(128);
m_reel3_tilemap->set_scroll_cols(128);
m_reel4_tilemap->set_scroll_cols(128);
}
UINT32 igs009_state::screen_update_jingbell(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
UINT32 igs009_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int layers_ctrl = m_video_enable ? -1 : 0;
@ -309,10 +317,10 @@ UINT32 igs009_state::screen_update_jingbell(screen_device &screen, bitmap_ind16
for (i= 0;i < 0x80;i++)
{
m_gp98_reel1_tilemap->set_scrolly(i, m_bg_scroll[i]*2);
m_gp98_reel2_tilemap->set_scrolly(i, m_bg_scroll[i+0x80]*2);
m_gp98_reel3_tilemap->set_scrolly(i, m_bg_scroll[i+0x100]*2);
m_gp98_reel4_tilemap->set_scrolly(i, m_bg_scroll[i+0x180]*2);
m_reel1_tilemap->set_scrolly(i, m_bg_scroll[i]*2);
m_reel2_tilemap->set_scrolly(i, m_bg_scroll[i+0x80]*2);
m_reel3_tilemap->set_scrolly(i, m_bg_scroll[i+0x100]*2);
m_reel4_tilemap->set_scrolly(i, m_bg_scroll[i+0x180]*2);
}
@ -330,19 +338,19 @@ UINT32 igs009_state::screen_update_jingbell(screen_device &screen, bitmap_ind16
if (rowenable==0)
{ // 0 and 1 are the same? or is there a global switchoff?
m_gp98_reel1_tilemap->draw(screen, bitmap, clip, 0,0);
m_reel1_tilemap->draw(screen, bitmap, clip, 0,0);
}
else if (rowenable==1)
{
m_gp98_reel2_tilemap->draw(screen, bitmap, clip, 0,0);
m_reel2_tilemap->draw(screen, bitmap, clip, 0,0);
}
else if (rowenable==2)
{
m_gp98_reel3_tilemap->draw(screen, bitmap, clip, 0,0);
m_reel3_tilemap->draw(screen, bitmap, clip, 0,0);
}
else if (rowenable==3)
{
m_gp98_reel4_tilemap->draw(screen, bitmap, clip, 0,0);
m_reel4_tilemap->draw(screen, bitmap, clip, 0,0);
}
@ -376,7 +384,7 @@ void igs009_state::show_out()
#endif
}
WRITE8_MEMBER(igs009_state::jingbell_nmi_and_coins_w)
WRITE8_MEMBER(igs009_state::nmi_and_coins_w)
{
if ((m_nmi_enable ^ data) & (~0xdd))
{
@ -397,7 +405,7 @@ WRITE8_MEMBER(igs009_state::jingbell_nmi_and_coins_w)
show_out();
}
WRITE8_MEMBER(igs009_state::jingbell_video_and_leds_w)
WRITE8_MEMBER(igs009_state::video_and_leds_w)
{
set_led_status(machine(), 4, data & 0x01); // start?
set_led_status(machine(), 5, data & 0x04); // l_bet?
@ -409,7 +417,7 @@ WRITE8_MEMBER(igs009_state::jingbell_video_and_leds_w)
show_out();
}
WRITE8_MEMBER(igs009_state::jingbell_leds_w)
WRITE8_MEMBER(igs009_state::leds_w)
{
set_led_status(machine(), 0, data & 0x01); // stop_1
set_led_status(machine(), 1, data & 0x02); // stop_2
@ -422,7 +430,7 @@ WRITE8_MEMBER(igs009_state::jingbell_leds_w)
}
WRITE8_MEMBER(igs009_state::jingbell_magic_w)
WRITE8_MEMBER(igs009_state::magic_w)
{
m_igs_magic[offset] = data;
@ -440,7 +448,7 @@ WRITE8_MEMBER(igs009_state::jingbell_magic_w)
}
}
READ8_MEMBER(igs009_state::jingbell_magic_r)
READ8_MEMBER(igs009_state::magic_r)
{
switch(m_igs_magic[0])
{
@ -476,29 +484,29 @@ static ADDRESS_MAP_START( jingbell_portmap, AS_IO, 8, igs009_state )
AM_RANGE( 0x2000, 0x23ff ) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE( 0x2400, 0x27ff ) AM_RAM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext")
AM_RANGE( 0x3000, 0x33ff ) AM_RAM_WRITE(gp98_reel1_ram_w ) AM_SHARE("gp98_reel1_ram")
AM_RANGE( 0x3400, 0x37ff ) AM_RAM_WRITE(gp98_reel2_ram_w ) AM_SHARE("gp98_reel2_ram")
AM_RANGE( 0x3800, 0x3bff ) AM_RAM_WRITE(gp98_reel3_ram_w ) AM_SHARE("gp98_reel3_ram")
AM_RANGE( 0x3c00, 0x3fff ) AM_RAM_WRITE(gp98_reel4_ram_w ) AM_SHARE("gp98_reel4_ram")
AM_RANGE( 0x3000, 0x33ff ) AM_RAM_WRITE(reel1_ram_w ) AM_SHARE("reel1_ram")
AM_RANGE( 0x3400, 0x37ff ) AM_RAM_WRITE(reel2_ram_w ) AM_SHARE("reel2_ram")
AM_RANGE( 0x3800, 0x3bff ) AM_RAM_WRITE(reel3_ram_w ) AM_SHARE("reel3_ram")
AM_RANGE( 0x3c00, 0x3fff ) AM_RAM_WRITE(reel4_ram_w ) AM_SHARE("reel4_ram")
AM_RANGE( 0x4000, 0x407f ) AM_RAM AM_SHARE("bg_scroll2")
AM_RANGE( 0x5000, 0x5fff ) AM_RAM_WRITE(fg_tile_w ) AM_SHARE("fg_tile_ram")
AM_RANGE( 0x6480, 0x6480 ) AM_WRITE(jingbell_nmi_and_coins_w )
AM_RANGE( 0x6480, 0x6480 ) AM_WRITE(nmi_and_coins_w )
AM_RANGE( 0x6481, 0x6481 ) AM_READ_PORT( "SERVICE" )
AM_RANGE( 0x6482, 0x6482 ) AM_READ_PORT( "COINS" )
AM_RANGE( 0x6490, 0x6490 ) AM_READ_PORT( "BUTTONS1" )
AM_RANGE( 0x6491, 0x6491 ) AM_WRITE(jingbell_video_and_leds_w )
AM_RANGE( 0x6492, 0x6492 ) AM_WRITE(jingbell_leds_w )
AM_RANGE( 0x6491, 0x6491 ) AM_WRITE(video_and_leds_w )
AM_RANGE( 0x6492, 0x6492 ) AM_WRITE(leds_w )
AM_RANGE( 0x64a0, 0x64a0 ) AM_READ_PORT( "BUTTONS2" )
AM_RANGE( 0x64b0, 0x64b1 ) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE( 0x64c0, 0x64c0 ) AM_DEVREADWRITE("oki", okim6295_device, read, write)
AM_RANGE( 0x64d0, 0x64d1 ) AM_READWRITE(jingbell_magic_r, jingbell_magic_w ) // DSW1-5
AM_RANGE( 0x64d0, 0x64d1 ) AM_READWRITE(magic_r, magic_w ) // DSW1-5
AM_RANGE( 0x7000, 0x7fff ) AM_RAM_WRITE(fg_color_w ) AM_SHARE("fg_color_ram")
@ -744,6 +752,15 @@ GFXDECODE_END
Machine Drivers
***************************************************************************/
void igs009_state::machine_start()
{
save_item(NAME(m_video_enable));
save_item(NAME(m_nmi_enable));
save_item(NAME(m_hopper));
save_item(NAME(m_out));
save_item(NAME(m_igs_magic));
}
void igs009_state::machine_reset()
{
m_nmi_enable = 0;
@ -751,7 +768,7 @@ void igs009_state::machine_reset()
m_video_enable = 1;
}
INTERRUPT_GEN_MEMBER(igs009_state::jingbell_interrupt)
INTERRUPT_GEN_MEMBER(igs009_state::interrupt)
{
if (m_nmi_enable & 0x80)
device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
@ -762,7 +779,7 @@ static MACHINE_CONFIG_START( jingbell, igs009_state )
MCFG_CPU_ADD("maincpu", Z180, XTAL_12MHz / 2) /* HD64180RP8, 8 MHz? */
MCFG_CPU_PROGRAM_MAP(jingbell_map)
MCFG_CPU_IO_MAP(jingbell_portmap)
MCFG_CPU_VBLANK_INT_DRIVER("screen", igs009_state, jingbell_interrupt)
MCFG_CPU_VBLANK_INT_DRIVER("screen", igs009_state, interrupt)
MCFG_NVRAM_ADD_0FILL("nvram")
@ -773,7 +790,7 @@ static MACHINE_CONFIG_START( jingbell, igs009_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(512, 256)
MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-16-1)
MCFG_SCREEN_UPDATE_DRIVER(igs009_state, screen_update_jingbell)
MCFG_SCREEN_UPDATE_DRIVER(igs009_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", jingbell)
@ -948,5 +965,5 @@ ROM_START( gp98 )
// no OKI on this
ROM_END
GAME( 1995?, jingbell, 0, jingbell, jingbell, igs009_state, jingbell, ROT0, "IGS", "Jingle Bell (Italy, V133I)", 0 )
GAME( 1998, gp98, 0, gp98, jingbell, driver_device, 0, ROT0, "Romtec Co. Ltd", "Grand Prix '98 (V100K)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS )
GAME( 1995?, jingbell, 0, jingbell, jingbell, igs009_state, jingbell, ROT0, "IGS", "Jingle Bell (Italy, V133I)", GAME_SUPPORTS_SAVE )
GAME( 1998, gp98, 0, gp98, jingbell, driver_device, 0, ROT0, "Romtec Co. Ltd", "Grand Prix '98 (V100K)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )

View File

@ -8,27 +8,27 @@ class dynduke_state : public driver_device
public:
dynduke_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_spriteram(*this, "spriteram") ,
m_scroll_ram(*this, "scroll_ram"),
m_videoram(*this, "videoram"),
m_back_data(*this, "back_data"),
m_fore_data(*this, "fore_data"),
m_maincpu(*this, "maincpu"),
m_seibu_sound(*this, "seibu_sound"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_spriteram(*this, "spriteram") ,
m_scroll_ram(*this, "scroll_ram"),
m_videoram(*this, "videoram"),
m_back_data(*this, "back_data"),
m_fore_data(*this, "fore_data"),
m_generic_paletteram_16(*this, "paletteram") { }
required_device<buffered_spriteram16_device> m_spriteram;
required_shared_ptr<UINT16> m_scroll_ram;
required_shared_ptr<UINT16> m_videoram;
required_shared_ptr<UINT16> m_back_data;
required_shared_ptr<UINT16> m_fore_data;
required_device<cpu_device> m_maincpu;
required_device<seibu_sound_device> m_seibu_sound;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<buffered_spriteram16_device> m_spriteram;
required_shared_ptr<UINT16> m_scroll_ram;
required_shared_ptr<UINT16> m_videoram;
required_shared_ptr<UINT16> m_back_data;
required_shared_ptr<UINT16> m_fore_data;
required_shared_ptr<UINT16> m_generic_paletteram_16;
tilemap_t *m_bg_layer;
@ -43,19 +43,23 @@ public:
int m_old_back;
int m_old_fore;
DECLARE_WRITE16_MEMBER(dynduke_paletteram_w);
DECLARE_WRITE16_MEMBER(dynduke_background_w);
DECLARE_WRITE16_MEMBER(dynduke_foreground_w);
DECLARE_WRITE16_MEMBER(dynduke_text_w);
DECLARE_WRITE16_MEMBER(dynduke_gfxbank_w);
DECLARE_WRITE16_MEMBER(dynduke_control_w);
DECLARE_DRIVER_INIT(dynduke);
DECLARE_WRITE16_MEMBER(paletteram_w);
DECLARE_WRITE16_MEMBER(background_w);
DECLARE_WRITE16_MEMBER(foreground_w);
DECLARE_WRITE16_MEMBER(text_w);
DECLARE_WRITE16_MEMBER(gfxbank_w);
DECLARE_WRITE16_MEMBER(control_w);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
TILE_GET_INFO_MEMBER(get_tx_tile_info);
virtual void video_start();
UINT32 screen_update_dynduke(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(dynduke_interrupt);
DECLARE_DRIVER_INIT(dynduke);
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,int pri);
void draw_background(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri );
INTERRUPT_GEN_MEMBER(interrupt);
};

View File

@ -7,31 +7,28 @@
/******************************************************************************/
WRITE16_MEMBER(dynduke_state::dynduke_paletteram_w)
WRITE16_MEMBER(dynduke_state::paletteram_w)
{
int color;
COMBINE_DATA(&m_generic_paletteram_16[offset]);
color=m_generic_paletteram_16[offset];
int color=m_generic_paletteram_16[offset];
m_palette->set_pen_color(offset,pal4bit(color >> 0),pal4bit(color >> 4),pal4bit(color >> 8));
}
WRITE16_MEMBER(dynduke_state::dynduke_background_w)
WRITE16_MEMBER(dynduke_state::background_w)
{
COMBINE_DATA(&m_back_data[offset]);
m_bg_layer->mark_tile_dirty(offset);
}
WRITE16_MEMBER(dynduke_state::dynduke_foreground_w)
WRITE16_MEMBER(dynduke_state::foreground_w)
{
COMBINE_DATA(&m_fore_data[offset]);
m_fg_layer->mark_tile_dirty(offset);
}
WRITE16_MEMBER(dynduke_state::dynduke_text_w)
WRITE16_MEMBER(dynduke_state::text_w)
{
UINT16 *videoram = m_videoram;
COMBINE_DATA(&videoram[offset]);
COMBINE_DATA(&m_videoram[offset]);
m_tx_layer->mark_tile_dirty(offset);
}
@ -63,8 +60,7 @@ TILE_GET_INFO_MEMBER(dynduke_state::get_fg_tile_info)
TILE_GET_INFO_MEMBER(dynduke_state::get_tx_tile_info)
{
UINT16 *videoram = m_videoram;
int tile=videoram[tile_index];
int tile=m_videoram[tile_index];
int color=(tile >> 8) & 0x0f;
tile = (tile & 0xff) | ((tile & 0xc000) >> 6);
@ -83,9 +79,18 @@ void dynduke_state::video_start()
m_fg_layer->set_transparent_pen(15);
m_tx_layer->set_transparent_pen(15);
save_item(NAME(m_back_bankbase));
save_item(NAME(m_fore_bankbase));
save_item(NAME(m_back_enable));
save_item(NAME(m_fore_enable));
save_item(NAME(m_sprite_enable));
save_item(NAME(m_txt_enable));
save_item(NAME(m_old_back));
save_item(NAME(m_old_fore));
}
WRITE16_MEMBER(dynduke_state::dynduke_gfxbank_w)
WRITE16_MEMBER(dynduke_state::gfxbank_w)
{
if (ACCESSING_BITS_0_7)
{
@ -103,7 +108,7 @@ WRITE16_MEMBER(dynduke_state::dynduke_gfxbank_w)
}
WRITE16_MEMBER(dynduke_state::dynduke_control_w)
WRITE16_MEMBER(dynduke_state::control_w)
{
if (ACCESSING_BITS_0_7)
{
@ -214,7 +219,7 @@ void dynduke_state::draw_background(bitmap_ind16 &bitmap, const rectangle &clipr
}
}
UINT32 dynduke_state::screen_update_dynduke(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
UINT32 dynduke_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
/* Setup the tilemaps */
m_fg_layer->set_scrolly(0, ((m_scroll_ram[0x11]&0x30)<<4)+((m_scroll_ram[0x12]&0x7f)<<1)+((m_scroll_ram[0x12]&0x80)>>7) );