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(0x0b000, 0x0b001) AM_READ_PORT("P1_P2")
AM_RANGE(0x0b002, 0x0b003) AM_READ_PORT("DSW") AM_RANGE(0x0b002, 0x0b003) AM_READ_PORT("DSW")
AM_RANGE(0x0b004, 0x0b005) AM_WRITENOP AM_RANGE(0x0b004, 0x0b005) AM_WRITENOP
AM_RANGE(0x0b006, 0x0b007) AM_WRITE(dynduke_control_w) AM_RANGE(0x0b006, 0x0b007) AM_WRITE(control_w)
AM_RANGE(0x0c000, 0x0c7ff) AM_RAM_WRITE(dynduke_text_w) AM_SHARE("videoram") 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(0x0d000, 0x0d00d) AM_DEVREADWRITE("seibu_sound", seibu_sound_device, main_word_r, main_word_w)
AM_RANGE(0xa0000, 0xfffff) AM_ROM AM_RANGE(0xa0000, 0xfffff) AM_ROM
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( slave_map, AS_PROGRAM, 16, dynduke_state ) static ADDRESS_MAP_START( slave_map, AS_PROGRAM, 16, dynduke_state )
AM_RANGE(0x00000, 0x05fff) AM_RAM AM_RANGE(0x00000, 0x05fff) AM_RAM
AM_RANGE(0x06000, 0x067ff) AM_RAM_WRITE(dynduke_background_w) AM_SHARE("back_data") AM_RANGE(0x06000, 0x067ff) AM_RAM_WRITE(background_w) AM_SHARE("back_data")
AM_RANGE(0x06800, 0x06fff) AM_RAM_WRITE(dynduke_foreground_w) AM_SHARE("fore_data") AM_RANGE(0x06800, 0x06fff) AM_RAM_WRITE(foreground_w) AM_SHARE("fore_data")
AM_RANGE(0x07000, 0x07fff) AM_RAM_WRITE(dynduke_paletteram_w) AM_SHARE("paletteram") AM_RANGE(0x07000, 0x07fff) AM_RAM_WRITE(paletteram_w) AM_SHARE("paletteram")
AM_RANGE(0x08000, 0x08fff) AM_RAM AM_SHARE("share1") 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(0x0c000, 0x0c001) AM_WRITENOP
AM_RANGE(0xc0000, 0xfffff) AM_ROM AM_RANGE(0xc0000, 0xfffff) AM_ROM
ADDRESS_MAP_END ADDRESS_MAP_END
@ -103,14 +103,14 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( masterj_map, AS_PROGRAM, 16, dynduke_state ) static ADDRESS_MAP_START( masterj_map, AS_PROGRAM, 16, dynduke_state )
AM_RANGE(0x00000, 0x06fff) AM_RAM AM_RANGE(0x00000, 0x06fff) AM_RAM
AM_RANGE(0x07000, 0x07fff) AM_RAM AM_SHARE("spriteram") 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(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(0x0c000, 0x0c0ff) AM_RAM AM_SHARE("scroll_ram")
AM_RANGE(0x0e000, 0x0efff) AM_RAM AM_SHARE("share1") AM_RANGE(0x0e000, 0x0efff) AM_RAM AM_SHARE("share1")
AM_RANGE(0x0f000, 0x0f001) AM_READ_PORT("P1_P2") AM_RANGE(0x0f000, 0x0f001) AM_READ_PORT("P1_P2")
AM_RANGE(0x0f002, 0x0f003) AM_READ_PORT("DSW") AM_RANGE(0x0f002, 0x0f003) AM_READ_PORT("DSW")
AM_RANGE(0x0f004, 0x0f005) AM_WRITENOP 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 AM_RANGE(0xa0000, 0xfffff) AM_ROM
ADDRESS_MAP_END ADDRESS_MAP_END
@ -265,7 +265,7 @@ GFXDECODE_END
/* Interrupt Generator */ /* 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 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 // basic machine hardware
MCFG_CPU_ADD("maincpu", V30, 16000000/2) // NEC V30-8 CPU MCFG_CPU_ADD("maincpu", V30, 16000000/2) // NEC V30-8 CPU
MCFG_CPU_PROGRAM_MAP(master_map) 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_ADD("slave", V30, 16000000/2) // NEC V30-8 CPU
MCFG_CPU_PROGRAM_MAP(slave_map) 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) 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_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
MCFG_SCREEN_SIZE(32*8, 32*8) MCFG_SCREEN_SIZE(32*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) 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_VBLANK_DEVICE("spriteram", buffered_spriteram16_device, vblank_copy_rising)
MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_PALETTE("palette")
@ -612,9 +612,9 @@ DRIVER_INIT_MEMBER(dynduke_state,dynduke)
/* Game Drivers */ /* Game Drivers */
GAME( 1989, dynduke, 0, dynduke, dynduke, dynduke_state, dynduke, ROT0, "Seibu Kaihatsu", "Dynamite Duke (Europe set 1)", 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)", 0 ) 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)", 0 ) 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)", 0 ) 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)", 0 ) 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)", 0 ) 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: public:
igs009_state(const machine_config &mconfig, device_type type, const char *tag) igs009_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, 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_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"), 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_bg_scroll;
required_shared_ptr<UINT8> m_gp98_reel1_ram; required_shared_ptr<UINT8> m_reel1_ram;
required_shared_ptr<UINT8> m_gp98_reel2_ram; required_shared_ptr<UINT8> m_reel2_ram;
required_shared_ptr<UINT8> m_gp98_reel3_ram; required_shared_ptr<UINT8> m_reel3_ram;
required_shared_ptr<UINT8> m_gp98_reel4_ram; required_shared_ptr<UINT8> m_reel4_ram;
required_shared_ptr<UINT8> m_bg_scroll2; required_shared_ptr<UINT8> m_bg_scroll2;
required_shared_ptr<UINT8> m_fg_tile_ram; required_shared_ptr<UINT8> m_fg_tile_ram;
required_shared_ptr<UINT8> m_fg_color_ram; required_shared_ptr<UINT8> m_fg_color_ram;
tilemap_t *m_gp98_reel1_tilemap;
tilemap_t *m_gp98_reel2_tilemap; tilemap_t *m_reel1_tilemap;
tilemap_t *m_gp98_reel3_tilemap; tilemap_t *m_reel2_tilemap;
tilemap_t *m_gp98_reel4_tilemap; tilemap_t *m_reel3_tilemap;
tilemap_t *m_reel4_tilemap;
tilemap_t *m_fg_tilemap; tilemap_t *m_fg_tilemap;
int m_video_enable; int m_video_enable;
int m_nmi_enable; int m_nmi_enable;
int m_hopper; int m_hopper;
UINT8 m_out[3]; UINT8 m_out[3];
UINT8 m_igs_magic[2]; UINT8 m_igs_magic[2];
DECLARE_WRITE8_MEMBER(gp98_reel1_ram_w);
DECLARE_WRITE8_MEMBER(gp98_reel2_ram_w); DECLARE_WRITE8_MEMBER(reel1_ram_w);
DECLARE_WRITE8_MEMBER(gp98_reel3_ram_w); DECLARE_WRITE8_MEMBER(reel2_ram_w);
DECLARE_WRITE8_MEMBER(gp98_reel4_ram_w); DECLARE_WRITE8_MEMBER(reel3_ram_w);
DECLARE_WRITE8_MEMBER(reel4_ram_w);
DECLARE_WRITE8_MEMBER(bg_scroll_w); DECLARE_WRITE8_MEMBER(bg_scroll_w);
DECLARE_WRITE8_MEMBER(fg_tile_w); DECLARE_WRITE8_MEMBER(fg_tile_w);
DECLARE_WRITE8_MEMBER(fg_color_w); DECLARE_WRITE8_MEMBER(fg_color_w);
DECLARE_WRITE8_MEMBER(jingbell_nmi_and_coins_w); DECLARE_WRITE8_MEMBER(nmi_and_coins_w);
DECLARE_WRITE8_MEMBER(jingbell_video_and_leds_w); DECLARE_WRITE8_MEMBER(video_and_leds_w);
DECLARE_WRITE8_MEMBER(jingbell_leds_w); DECLARE_WRITE8_MEMBER(leds_w);
DECLARE_WRITE8_MEMBER(jingbell_magic_w); DECLARE_WRITE8_MEMBER(magic_w);
DECLARE_READ8_MEMBER(jingbell_magic_r); DECLARE_READ8_MEMBER(magic_r);
void show_out(); void show_out();
DECLARE_CUSTOM_INPUT_MEMBER(hopper_r); 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_jingbell_reel1_tile_info);
TILE_GET_INFO_MEMBER(get_gp98_reel1_tile_info); TILE_GET_INFO_MEMBER(get_gp98_reel1_tile_info);
TILE_GET_INFO_MEMBER(get_jingbell_reel2_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_jingbell_reel4_tile_info);
TILE_GET_INFO_MEMBER(get_gp98_reel4_tile_info); TILE_GET_INFO_MEMBER(get_gp98_reel4_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info); TILE_GET_INFO_MEMBER(get_fg_tile_info);
DECLARE_DRIVER_INIT(jingbell);
virtual void machine_start();
virtual void machine_reset(); virtual void machine_reset();
virtual void video_start(); virtual void video_start();
DECLARE_VIDEO_START(gp98); DECLARE_VIDEO_START(gp98);
UINT32 screen_update_jingbell(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(jingbell_interrupt); UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
}; };
@ -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_reel1_ram[offset] = data;
m_gp98_reel1_tilemap->mark_tile_dirty(offset); m_reel1_tilemap->mark_tile_dirty(offset);
} }
TILE_GET_INFO_MEMBER(igs009_state::get_jingbell_reel1_tile_info) 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, SET_TILE_INFO_MEMBER(0,
(code)+(((tile_index+1)&0x3)*0x100), (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) 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, SET_TILE_INFO_MEMBER(0,
(code*4)+(tile_index&0x3), (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_reel2_ram[offset] = data;
m_gp98_reel2_tilemap->mark_tile_dirty(offset); m_reel2_tilemap->mark_tile_dirty(offset);
} }
TILE_GET_INFO_MEMBER(igs009_state::get_jingbell_reel2_tile_info) 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, SET_TILE_INFO_MEMBER(0,
(code)+(((tile_index+1)&0x3)*0x100), (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) 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, SET_TILE_INFO_MEMBER(0,
(code*4)+(tile_index&0x3), (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_reel3_ram[offset] = data;
m_gp98_reel3_tilemap->mark_tile_dirty(offset); m_reel3_tilemap->mark_tile_dirty(offset);
} }
TILE_GET_INFO_MEMBER(igs009_state::get_jingbell_reel3_tile_info) 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, SET_TILE_INFO_MEMBER(0,
(code)+(((tile_index+1)&0x3)*0x100), (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) 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, SET_TILE_INFO_MEMBER(0,
(code*4)+(tile_index&0x3), (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_reel4_ram[offset] = data;
m_gp98_reel4_tilemap->mark_tile_dirty(offset); m_reel4_tilemap->mark_tile_dirty(offset);
} }
TILE_GET_INFO_MEMBER(igs009_state::get_jingbell_reel4_tile_info) 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, SET_TILE_INFO_MEMBER(0,
(code)+(((tile_index+1)&0x3)*0x100), (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) 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, SET_TILE_INFO_MEMBER(0,
(code*4)+(tile_index&0x3), (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 = &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_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_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_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_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_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_reel1_tilemap->set_scroll_cols(128);
m_gp98_reel2_tilemap->set_scroll_cols(128); m_reel2_tilemap->set_scroll_cols(128);
m_gp98_reel3_tilemap->set_scroll_cols(128); m_reel3_tilemap->set_scroll_cols(128);
m_gp98_reel4_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 = &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_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_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_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_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_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_reel1_tilemap->set_scroll_cols(128);
m_gp98_reel2_tilemap->set_scroll_cols(128); m_reel2_tilemap->set_scroll_cols(128);
m_gp98_reel3_tilemap->set_scroll_cols(128); m_reel3_tilemap->set_scroll_cols(128);
m_gp98_reel4_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; 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++) for (i= 0;i < 0x80;i++)
{ {
m_gp98_reel1_tilemap->set_scrolly(i, m_bg_scroll[i]*2); m_reel1_tilemap->set_scrolly(i, m_bg_scroll[i]*2);
m_gp98_reel2_tilemap->set_scrolly(i, m_bg_scroll[i+0x80]*2); m_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_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_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) if (rowenable==0)
{ // 0 and 1 are the same? or is there a global switchoff? { // 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) 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) 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) 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 #endif
} }
WRITE8_MEMBER(igs009_state::jingbell_nmi_and_coins_w) WRITE8_MEMBER(igs009_state::nmi_and_coins_w)
{ {
if ((m_nmi_enable ^ data) & (~0xdd)) if ((m_nmi_enable ^ data) & (~0xdd))
{ {
@ -397,7 +405,7 @@ WRITE8_MEMBER(igs009_state::jingbell_nmi_and_coins_w)
show_out(); 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(), 4, data & 0x01); // start?
set_led_status(machine(), 5, data & 0x04); // l_bet? set_led_status(machine(), 5, data & 0x04); // l_bet?
@ -409,7 +417,7 @@ WRITE8_MEMBER(igs009_state::jingbell_video_and_leds_w)
show_out(); 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(), 0, data & 0x01); // stop_1
set_led_status(machine(), 1, data & 0x02); // stop_2 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; 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]) 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( 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( 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( 0x3000, 0x33ff ) AM_RAM_WRITE(reel1_ram_w ) AM_SHARE("reel1_ram")
AM_RANGE( 0x3400, 0x37ff ) AM_RAM_WRITE(gp98_reel2_ram_w ) AM_SHARE("gp98_reel2_ram") AM_RANGE( 0x3400, 0x37ff ) AM_RAM_WRITE(reel2_ram_w ) AM_SHARE("reel2_ram")
AM_RANGE( 0x3800, 0x3bff ) AM_RAM_WRITE(gp98_reel3_ram_w ) AM_SHARE("gp98_reel3_ram") AM_RANGE( 0x3800, 0x3bff ) AM_RAM_WRITE(reel3_ram_w ) AM_SHARE("reel3_ram")
AM_RANGE( 0x3c00, 0x3fff ) AM_RAM_WRITE(gp98_reel4_ram_w ) AM_SHARE("gp98_reel4_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( 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( 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( 0x6481, 0x6481 ) AM_READ_PORT( "SERVICE" )
AM_RANGE( 0x6482, 0x6482 ) AM_READ_PORT( "COINS" ) AM_RANGE( 0x6482, 0x6482 ) AM_READ_PORT( "COINS" )
AM_RANGE( 0x6490, 0x6490 ) AM_READ_PORT( "BUTTONS1" ) AM_RANGE( 0x6490, 0x6490 ) AM_READ_PORT( "BUTTONS1" )
AM_RANGE( 0x6491, 0x6491 ) AM_WRITE(jingbell_video_and_leds_w ) AM_RANGE( 0x6491, 0x6491 ) AM_WRITE(video_and_leds_w )
AM_RANGE( 0x6492, 0x6492 ) AM_WRITE(jingbell_leds_w ) AM_RANGE( 0x6492, 0x6492 ) AM_WRITE(leds_w )
AM_RANGE( 0x64a0, 0x64a0 ) AM_READ_PORT( "BUTTONS2" ) AM_RANGE( 0x64a0, 0x64a0 ) AM_READ_PORT( "BUTTONS2" )
AM_RANGE( 0x64b0, 0x64b1 ) AM_DEVWRITE("ymsnd", ym2413_device, write) AM_RANGE( 0x64b0, 0x64b1 ) AM_DEVWRITE("ymsnd", ym2413_device, write)
AM_RANGE( 0x64c0, 0x64c0 ) AM_DEVREADWRITE("oki", okim6295_device, read, 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") AM_RANGE( 0x7000, 0x7fff ) AM_RAM_WRITE(fg_color_w ) AM_SHARE("fg_color_ram")
@ -744,6 +752,15 @@ GFXDECODE_END
Machine Drivers 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() void igs009_state::machine_reset()
{ {
m_nmi_enable = 0; m_nmi_enable = 0;
@ -751,7 +768,7 @@ void igs009_state::machine_reset()
m_video_enable = 1; m_video_enable = 1;
} }
INTERRUPT_GEN_MEMBER(igs009_state::jingbell_interrupt) INTERRUPT_GEN_MEMBER(igs009_state::interrupt)
{ {
if (m_nmi_enable & 0x80) if (m_nmi_enable & 0x80)
device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); 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_ADD("maincpu", Z180, XTAL_12MHz / 2) /* HD64180RP8, 8 MHz? */
MCFG_CPU_PROGRAM_MAP(jingbell_map) MCFG_CPU_PROGRAM_MAP(jingbell_map)
MCFG_CPU_IO_MAP(jingbell_portmap) 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") 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_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(512, 256) MCFG_SCREEN_SIZE(512, 256)
MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-16-1) 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_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", jingbell) MCFG_GFXDECODE_ADD("gfxdecode", "palette", jingbell)
@ -948,5 +965,5 @@ ROM_START( gp98 )
// no OKI on this // no OKI on this
ROM_END ROM_END
GAME( 1995?, jingbell, 0, jingbell, jingbell, igs009_state, jingbell, ROT0, "IGS", "Jingle Bell (Italy, V133I)", 0 ) 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( 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: public:
dynduke_state(const machine_config &mconfig, device_type type, const char *tag) dynduke_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, 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_maincpu(*this, "maincpu"),
m_seibu_sound(*this, "seibu_sound"), m_seibu_sound(*this, "seibu_sound"),
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"), 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") { } 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<cpu_device> m_maincpu;
required_device<seibu_sound_device> m_seibu_sound; required_device<seibu_sound_device> m_seibu_sound;
required_device<gfxdecode_device> m_gfxdecode; required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette; 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; required_shared_ptr<UINT16> m_generic_paletteram_16;
tilemap_t *m_bg_layer; tilemap_t *m_bg_layer;
@ -43,19 +43,23 @@ public:
int m_old_back; int m_old_back;
int m_old_fore; int m_old_fore;
DECLARE_WRITE16_MEMBER(dynduke_paletteram_w); DECLARE_WRITE16_MEMBER(paletteram_w);
DECLARE_WRITE16_MEMBER(dynduke_background_w); DECLARE_WRITE16_MEMBER(background_w);
DECLARE_WRITE16_MEMBER(dynduke_foreground_w); DECLARE_WRITE16_MEMBER(foreground_w);
DECLARE_WRITE16_MEMBER(dynduke_text_w); DECLARE_WRITE16_MEMBER(text_w);
DECLARE_WRITE16_MEMBER(dynduke_gfxbank_w); DECLARE_WRITE16_MEMBER(gfxbank_w);
DECLARE_WRITE16_MEMBER(dynduke_control_w); DECLARE_WRITE16_MEMBER(control_w);
DECLARE_DRIVER_INIT(dynduke);
TILE_GET_INFO_MEMBER(get_bg_tile_info); TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info); TILE_GET_INFO_MEMBER(get_fg_tile_info);
TILE_GET_INFO_MEMBER(get_tx_tile_info); TILE_GET_INFO_MEMBER(get_tx_tile_info);
virtual void video_start(); virtual void video_start();
UINT32 screen_update_dynduke(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_DRIVER_INIT(dynduke);
INTERRUPT_GEN_MEMBER(dynduke_interrupt);
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_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,int pri);
void draw_background(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]); 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)); 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]); COMBINE_DATA(&m_back_data[offset]);
m_bg_layer->mark_tile_dirty(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]); COMBINE_DATA(&m_fore_data[offset]);
m_fg_layer->mark_tile_dirty(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(&m_videoram[offset]);
COMBINE_DATA(&videoram[offset]);
m_tx_layer->mark_tile_dirty(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) TILE_GET_INFO_MEMBER(dynduke_state::get_tx_tile_info)
{ {
UINT16 *videoram = m_videoram; int tile=m_videoram[tile_index];
int tile=videoram[tile_index];
int color=(tile >> 8) & 0x0f; int color=(tile >> 8) & 0x0f;
tile = (tile & 0xff) | ((tile & 0xc000) >> 6); tile = (tile & 0xff) | ((tile & 0xc000) >> 6);
@ -83,9 +79,18 @@ void dynduke_state::video_start()
m_fg_layer->set_transparent_pen(15); m_fg_layer->set_transparent_pen(15);
m_tx_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) 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) 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 */ /* 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) ); m_fg_layer->set_scrolly(0, ((m_scroll_ram[0x11]&0x30)<<4)+((m_scroll_ram[0x12]&0x7f)<<1)+((m_scroll_ram[0x12]&0x80)>>7) );