summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author cam900 <dbtlrchl@naver.com>2019-03-20 18:02:52 +0900
committer cam900 <dbtlrchl@naver.com>2019-03-20 18:02:52 +0900
commit5423b119911d0b4f13822eca21c3ccaba91e459f (patch)
tree068dbf0a65a660fea4bf9f7fe7a49560982175be
parentdd888d052d18af8293f10f37567c303bdb2ddc9d (diff)
twincobr.cpp, wardner.cpp : Updates
Simplify handlers, Fix minor namings, Remove register_postload, Fix some code styles, Use shorter type values Mark tilemap dirty when ROM/RAM bank is changed
-rw-r--r--src/mame/drivers/twincobr.cpp16
-rw-r--r--src/mame/drivers/wardner.cpp40
-rw-r--r--src/mame/includes/twincobr.h116
-rw-r--r--src/mame/machine/twincobr.cpp39
-rw-r--r--src/mame/video/twincobr.cpp144
5 files changed, 176 insertions, 179 deletions
diff --git a/src/mame/drivers/twincobr.cpp b/src/mame/drivers/twincobr.cpp
index 8bb8cefa7a3..13260ae4e60 100644
--- a/src/mame/drivers/twincobr.cpp
+++ b/src/mame/drivers/twincobr.cpp
@@ -413,7 +413,7 @@ void twincobr_state::main_program_map(address_map &map)
map(0x078008, 0x078009).portr("VBLANK"); /* V-Blank & FShark Coin/Start */
map(0x07800b, 0x07800b).w(m_coinlatch, FUNC(ls259_device::write_nibble_d0)); /* Flying Shark DSP Comms & coin stuff */
map(0x07800d, 0x07800d).w(m_mainlatch, FUNC(ls259_device::write_nibble_d0)); /* Twin Cobra DSP Comms & system control */
- map(0x07a000, 0x07afff).rw(FUNC(twincobr_state::twincobr_sharedram_r), FUNC(twincobr_state::twincobr_sharedram_w)); /* 16-bit on 68000 side, 8-bit on Z80 side */
+ map(0x07a000, 0x07afff).rw(FUNC(twincobr_state::twincobr_sharedram_r), FUNC(twincobr_state::twincobr_sharedram_w)).umask16(0x00ff); /* 16-bit on 68000 side, 8-bit on Z80 side */
map(0x07e000, 0x07e001).rw(FUNC(twincobr_state::twincobr_txram_r), FUNC(twincobr_state::twincobr_txram_w)); /* data for text video RAM */
map(0x07e002, 0x07e003).rw(FUNC(twincobr_state::twincobr_bgram_r), FUNC(twincobr_state::twincobr_bgram_w)); /* data for bg video RAM */
map(0x07e004, 0x07e005).rw(FUNC(twincobr_state::twincobr_fgram_r), FUNC(twincobr_state::twincobr_fgram_w)); /* data for fg video RAM */
@@ -626,8 +626,8 @@ static const gfx_layout charlayout =
RGN_FRAC(1,3), /* 2048 characters */
3, /* 3 bits per pixel */
{ RGN_FRAC(0,3), RGN_FRAC(1,3), RGN_FRAC(2,3) },
- { 0, 1, 2, 3, 4, 5, 6, 7 },
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
+ { STEP8(0,1) },
+ { STEP8(0,8) },
8*8 /* every char takes 8 consecutive bytes */
};
@@ -637,8 +637,8 @@ static const gfx_layout tilelayout =
RGN_FRAC(1,4), /* 4096/8192 tiles */
4, /* 4 bits per pixel */
{ RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) },
- { 0, 1, 2, 3, 4, 5, 6, 7 },
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
+ { STEP8(0,1) },
+ { STEP8(0,8) },
8*8 /* every tile takes 8 consecutive bytes */
};
@@ -667,8 +667,6 @@ void twincobr_state::twincobr(machine_config &config)
config.m_minimum_quantum = attotime::from_hz(6000);
- MCFG_MACHINE_RESET_OVERRIDE(twincobr_state,twincobr)
-
LS259(config, m_mainlatch);
m_mainlatch->q_out_cb<2>().set(FUNC(twincobr_state::int_enable_w));
m_mainlatch->q_out_cb<3>().set(FUNC(twincobr_state::flipscreen_w));
@@ -698,7 +696,7 @@ void twincobr_state::twincobr(machine_config &config)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
m_screen->set_raw(28_MHz_XTAL/4, 446, 0, 320, 286, 0, 240);
- m_screen->set_screen_update(FUNC(twincobr_state::screen_update_toaplan0));
+ m_screen->set_screen_update(FUNC(twincobr_state::screen_update));
m_screen->screen_vblank().set(m_spriteram16, FUNC(buffered_spriteram16_device::vblank_copy_rising));
m_screen->screen_vblank().append(FUNC(twincobr_state::twincobr_vblank_irq));
m_screen->set_palette(m_palette);
@@ -1296,7 +1294,7 @@ ROM_END
void twincobr_state::init_twincobr()
{
- twincobr_driver_savestate();
+ driver_savestate();
}
diff --git a/src/mame/drivers/wardner.cpp b/src/mame/drivers/wardner.cpp
index a89ab9a1b35..9665ae01fa9 100644
--- a/src/mame/drivers/wardner.cpp
+++ b/src/mame/drivers/wardner.cpp
@@ -181,14 +181,14 @@ void wardner_state::main_program_map(address_map &map)
{
map(0x0000, 0x6fff).rom();
map(0x7000, 0x7fff).ram();
- map(0x8000, 0x8fff).w(FUNC(wardner_state::wardner_sprite_w)); // AM_SHARE("spriteram8")
- map(0xa000, 0xafff).w(m_palette, FUNC(palette_device::write8)); // AM_SHARE("palette")
+ map(0x8000, 0x8fff).w(FUNC(wardner_state::wardner_sprite_w)); // .share("spriteram8")
+ map(0xa000, 0xafff).w(m_palette, FUNC(palette_device::write8)); // .share("palette")
map(0xc000, 0xc7ff).writeonly().share("sharedram");
map(0x8000, 0xffff).r(m_membank, FUNC(address_map_bank_device::read8));
}
// Overlapped RAM/Banked ROM
-// Can't use AM_RANGE(0x00000, 0x3ffff) for ROM because the shared pointers get messed up somehow
+// Can't use map(0x00000, 0x3ffff) for ROM because the shared pointers get messed up somehow
void wardner_state::main_bank_map(address_map &map)
{
map(0x00000, 0x00fff).r(FUNC(wardner_state::wardner_sprite_r)).share("spriteram8");
@@ -338,24 +338,24 @@ INPUT_PORTS_END
static const gfx_layout charlayout =
{
- 8,8, /* 8*8 characters */
- 2048, /* 2048 characters */
- 3, /* 3 bits per pixel */
- { 0*2048*8*8, 1*2048*8*8, 2*2048*8*8 }, /* the bitplanes are separated */
- { 0, 1, 2, 3, 4, 5, 6, 7 },
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
- 8*8 /* every char takes 8 consecutive bytes */
+ 8,8, /* 8*8 characters */
+ RGN_FRAC(1,3), /* 2048 characters */
+ 3, /* 3 bits per pixel */
+ { RGN_FRAC(0,3), RGN_FRAC(1,3), RGN_FRAC(2,3) }, /* the bitplanes are separated */
+ { STEP8(0,1) },
+ { STEP8(0,8) },
+ 8*8 /* every char takes 8 consecutive bytes */
};
static const gfx_layout tilelayout =
{
- 8,8, /* 8*8 tiles */
- 4096, /* 4096 tiles */
- 4, /* 4 bits per pixel */
- { 0*4096*8*8, 1*4096*8*8, 2*4096*8*8, 3*4096*8*8 }, /* the bitplanes are separated */
- { 0, 1, 2, 3, 4, 5, 6, 7 },
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
- 8*8 /* every tile takes 8 consecutive bytes */
+ 8,8, /* 8*8 tiles */
+ RGN_FRAC(1,4), /* 4096 tiles */
+ 4, /* 4 bits per pixel */
+ { RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) }, /* the bitplanes are separated */
+ { STEP8(0,1) },
+ { STEP8(0,8) },
+ 8*8 /* every tile takes 8 consecutive bytes */
};
@@ -369,12 +369,12 @@ GFXDECODE_END
void wardner_state::driver_start()
{
/* Save-State stuff in src/machine/twincobr.cpp */
- twincobr_driver_savestate();
+ driver_savestate();
}
void wardner_state::machine_reset()
{
- MACHINE_RESET_CALL_MEMBER(twincobr);
+ twincobr_state::machine_reset();
m_membank->set_bank(0);
}
@@ -429,7 +429,7 @@ void wardner_state::wardner(machine_config &config)
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
m_screen->set_raw(14_MHz_XTAL/2, 446, 0, 320, 286, 0, 240);
- m_screen->set_screen_update(FUNC(wardner_state::screen_update_toaplan0));
+ m_screen->set_screen_update(FUNC(wardner_state::screen_update));
m_screen->screen_vblank().set(m_spriteram8, FUNC(buffered_spriteram8_device::vblank_copy_rising));
m_screen->screen_vblank().append(FUNC(wardner_state::wardner_vblank_irq));
m_screen->set_palette(m_palette);
diff --git a/src/mame/includes/twincobr.h b/src/mame/includes/twincobr.h
index 5bcda60c5bc..e212a0fe71c 100644
--- a/src/mame/includes/twincobr.h
+++ b/src/mame/includes/twincobr.h
@@ -43,50 +43,52 @@ public:
void init_twincobr();
protected:
+ virtual void device_post_load() override;
+ virtual void machine_reset() override;
virtual void video_start() override;
- optional_shared_ptr<uint8_t> m_sharedram;
+ optional_shared_ptr<u8> m_sharedram;
optional_device<buffered_spriteram8_device> m_spriteram8;
optional_device<buffered_spriteram16_device> m_spriteram16;
- int32_t m_fg_rom_bank;
- int32_t m_bg_ram_bank;
+ u32 m_fg_rom_bank;
+ u32 m_bg_ram_bank;
int m_intenable;
int m_dsp_on;
int m_dsp_bio;
int m_fsharkbt_8741;
int m_dsp_execute;
- uint32_t m_dsp_addr_w;
- uint32_t m_main_ram_seg;
- std::unique_ptr<uint16_t[]> m_bgvideoram16;
- std::unique_ptr<uint16_t[]> m_fgvideoram16;
- std::unique_ptr<uint16_t[]> m_txvideoram16;
+ u32 m_dsp_addr_w;
+ u32 m_main_ram_seg;
+ std::unique_ptr<u16[]> m_bgvideoram16;
+ std::unique_ptr<u16[]> m_fgvideoram16;
+ std::unique_ptr<u16[]> m_txvideoram16;
size_t m_bgvideoram_size;
size_t m_fgvideoram_size;
size_t m_txvideoram_size;
- int32_t m_txscrollx;
- int32_t m_txscrolly;
- int32_t m_fgscrollx;
- int32_t m_fgscrolly;
- int32_t m_bgscrollx;
- int32_t m_bgscrolly;
- int32_t m_txoffs;
- int32_t m_fgoffs;
- int32_t m_bgoffs;
- int32_t m_display_on;
+ s32 m_txscrollx;
+ s32 m_txscrolly;
+ s32 m_fgscrollx;
+ s32 m_fgscrolly;
+ s32 m_bgscrollx;
+ s32 m_bgscrolly;
+ s32 m_txoffs;
+ s32 m_fgoffs;
+ s32 m_bgoffs;
+ s32 m_display_on;
tilemap_t *m_bg_tilemap;
tilemap_t *m_fg_tilemap;
tilemap_t *m_tx_tilemap;
- DECLARE_WRITE16_MEMBER(twincobr_dsp_addrsel_w);
- DECLARE_READ16_MEMBER(twincobr_dsp_r);
- DECLARE_WRITE16_MEMBER(twincobr_dsp_w);
- DECLARE_WRITE16_MEMBER(wardner_dsp_addrsel_w);
- DECLARE_READ16_MEMBER(wardner_dsp_r);
- DECLARE_WRITE16_MEMBER(wardner_dsp_w);
- DECLARE_WRITE16_MEMBER(twincobr_dsp_bio_w);
- DECLARE_READ16_MEMBER(fsharkbt_dsp_r);
- DECLARE_WRITE16_MEMBER(fsharkbt_dsp_w);
+ void twincobr_dsp_addrsel_w(u16 data);
+ u16 twincobr_dsp_r();
+ void twincobr_dsp_w(u16 data);
+ void wardner_dsp_addrsel_w(u16 data);
+ u16 wardner_dsp_r();
+ void wardner_dsp_w(u16 data);
+ void twincobr_dsp_bio_w(u16 data);
+ u16 fsharkbt_dsp_r();
+ void fsharkbt_dsp_w(u16 data);
DECLARE_READ_LINE_MEMBER(twincobr_bio_r);
DECLARE_WRITE_LINE_MEMBER(int_enable_w);
DECLARE_WRITE_LINE_MEMBER(dsp_int_w);
@@ -94,47 +96,45 @@ protected:
DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
DECLARE_WRITE_LINE_MEMBER(coin_lockout_1_w);
DECLARE_WRITE_LINE_MEMBER(coin_lockout_2_w);
- DECLARE_READ16_MEMBER(twincobr_sharedram_r);
- DECLARE_WRITE16_MEMBER(twincobr_sharedram_w);
- DECLARE_WRITE16_MEMBER(twincobr_txoffs_w);
- DECLARE_READ16_MEMBER(twincobr_txram_r);
- DECLARE_WRITE16_MEMBER(twincobr_txram_w);
- DECLARE_WRITE16_MEMBER(twincobr_bgoffs_w);
- DECLARE_READ16_MEMBER(twincobr_bgram_r);
- DECLARE_WRITE16_MEMBER(twincobr_bgram_w);
- DECLARE_WRITE16_MEMBER(twincobr_fgoffs_w);
- DECLARE_READ16_MEMBER(twincobr_fgram_r);
- DECLARE_WRITE16_MEMBER(twincobr_fgram_w);
- DECLARE_WRITE16_MEMBER(twincobr_txscroll_w);
- DECLARE_WRITE16_MEMBER(twincobr_bgscroll_w);
- DECLARE_WRITE16_MEMBER(twincobr_fgscroll_w);
- DECLARE_WRITE16_MEMBER(twincobr_exscroll_w);
- DECLARE_WRITE8_MEMBER(wardner_txlayer_w);
- DECLARE_WRITE8_MEMBER(wardner_bglayer_w);
- DECLARE_WRITE8_MEMBER(wardner_fglayer_w);
- DECLARE_WRITE8_MEMBER(wardner_txscroll_w);
- DECLARE_WRITE8_MEMBER(wardner_bgscroll_w);
- DECLARE_WRITE8_MEMBER(wardner_fgscroll_w);
- DECLARE_WRITE8_MEMBER(wardner_exscroll_w);
- DECLARE_READ8_MEMBER(wardner_videoram_r);
- DECLARE_WRITE8_MEMBER(wardner_videoram_w);
- DECLARE_READ8_MEMBER(wardner_sprite_r);
- DECLARE_WRITE8_MEMBER(wardner_sprite_w);
+ u8 twincobr_sharedram_r(offs_t offset);
+ void twincobr_sharedram_w(offs_t offset, u8 data);
+ void twincobr_txoffs_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ u16 twincobr_txram_r();
+ void twincobr_txram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void twincobr_bgoffs_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ u16 twincobr_bgram_r();
+ void twincobr_bgram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void twincobr_fgoffs_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ u16 twincobr_fgram_r();
+ void twincobr_fgram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void twincobr_txscroll_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void twincobr_bgscroll_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void twincobr_fgscroll_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void twincobr_exscroll_w(offs_t offset, u16 data);
+ void wardner_txlayer_w(offs_t offset, u8 data);
+ void wardner_bglayer_w(offs_t offset, u8 data);
+ void wardner_fglayer_w(offs_t offset, u8 data);
+ void wardner_txscroll_w(offs_t offset, u8 data);
+ void wardner_bgscroll_w(offs_t offset, u8 data);
+ void wardner_fgscroll_w(offs_t offset, u8 data);
+ void wardner_exscroll_w(offs_t offset, u8 data);
+ u8 wardner_videoram_r(offs_t offset);
+ void wardner_videoram_w(offs_t offset, u8 data);
+ u8 wardner_sprite_r(offs_t offset);
+ void wardner_sprite_w(offs_t offset, u8 data);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
TILE_GET_INFO_MEMBER(get_tx_tile_info);
- DECLARE_MACHINE_RESET(twincobr);
- uint32_t screen_update_toaplan0(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
DECLARE_WRITE_LINE_MEMBER(twincobr_vblank_irq);
DECLARE_WRITE_LINE_MEMBER(wardner_vblank_irq);
- void twincobr_restore_dsp();
void twincobr_create_tilemaps();
DECLARE_WRITE_LINE_MEMBER(display_on_w);
DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
DECLARE_WRITE_LINE_MEMBER(bg_ram_bank_w);
DECLARE_WRITE_LINE_MEMBER(fg_rom_bank_w);
- void twincobr_log_vram();
- void twincobr_driver_savestate();
+ void log_vram();
+ void driver_savestate();
required_device<cpu_device> m_maincpu;
required_device<tms32010_device> m_dsp;
required_device<toaplan_scu_device> m_spritegen;
diff --git a/src/mame/machine/twincobr.cpp b/src/mame/machine/twincobr.cpp
index 5fa63ece69a..2bfdbbf9f79 100644
--- a/src/mame/machine/twincobr.cpp
+++ b/src/mame/machine/twincobr.cpp
@@ -34,7 +34,7 @@ WRITE_LINE_MEMBER(twincobr_state::wardner_vblank_irq)
}
-WRITE16_MEMBER(twincobr_state::twincobr_dsp_addrsel_w)
+void twincobr_state::twincobr_dsp_addrsel_w(u16 data)
{
/* This sets the main CPU RAM address the DSP should */
/* read/write, via the DSP IO port 0 */
@@ -50,11 +50,11 @@ WRITE16_MEMBER(twincobr_state::twincobr_dsp_addrsel_w)
LOG(("DSP PC:%04x IO write %04x (%08x) at port 0\n",m_dsp->pcbase(),data,m_main_ram_seg + m_dsp_addr_w));
}
-READ16_MEMBER(twincobr_state::twincobr_dsp_r)
+u16 twincobr_state::twincobr_dsp_r()
{
/* DSP can read data from main CPU RAM via DSP IO port 1 */
- uint16_t input_data = 0;
+ u16 input_data = 0;
switch (m_main_ram_seg)
{
case 0x30000:
@@ -68,7 +68,7 @@ READ16_MEMBER(twincobr_state::twincobr_dsp_r)
return input_data;
}
-WRITE16_MEMBER(twincobr_state::twincobr_dsp_w)
+void twincobr_state::twincobr_dsp_w(u16 data)
{
/* Data written to main CPU RAM via DSP IO port 1 */
m_dsp_execute = 0;
@@ -84,7 +84,7 @@ WRITE16_MEMBER(twincobr_state::twincobr_dsp_w)
LOG(("DSP PC:%04x IO write %04x at %08x (port 1)\n",m_dsp->pcbase(),data,m_main_ram_seg + m_dsp_addr_w));
}
-WRITE16_MEMBER(twincobr_state::wardner_dsp_addrsel_w)
+void twincobr_state::wardner_dsp_addrsel_w(u16 data)
{
/* This sets the main CPU RAM address the DSP should */
/* read/write, via the DSP IO port 0 */
@@ -99,11 +99,11 @@ WRITE16_MEMBER(twincobr_state::wardner_dsp_addrsel_w)
LOG(("DSP PC:%04x IO write %04x (%08x) at port 0\n",m_dsp->pcbase(),data,m_main_ram_seg + m_dsp_addr_w));
}
-READ16_MEMBER(twincobr_state::wardner_dsp_r)
+u16 twincobr_state::wardner_dsp_r()
{
/* DSP can read data from main CPU RAM via DSP IO port 1 */
- uint16_t input_data = 0;
+ u16 input_data = 0;
switch (m_main_ram_seg)
{
case 0x7000:
@@ -118,7 +118,7 @@ READ16_MEMBER(twincobr_state::wardner_dsp_r)
return input_data;
}
-WRITE16_MEMBER(twincobr_state::wardner_dsp_w)
+void twincobr_state::wardner_dsp_w(u16 data)
{
/* Data written to main CPU RAM via DSP IO port 1 */
m_dsp_execute = 0;
@@ -135,7 +135,7 @@ WRITE16_MEMBER(twincobr_state::wardner_dsp_w)
LOG(("DSP PC:%04x IO write %04x at %08x (port 1)\n",m_dsp->pcbase(),data,m_main_ram_seg + m_dsp_addr_w));
}
-WRITE16_MEMBER(twincobr_state::twincobr_dsp_bio_w)
+void twincobr_state::twincobr_dsp_bio_w(u16 data)
{
/* data 0xffff means inhibit BIO line to DSP and enable */
/* communication to main processor */
@@ -159,7 +159,7 @@ WRITE16_MEMBER(twincobr_state::twincobr_dsp_bio_w)
}
}
-READ16_MEMBER(twincobr_state::fsharkbt_dsp_r)
+u16 twincobr_state::fsharkbt_dsp_r()
{
/* IO Port 2 used by Flying Shark bootleg */
/* DSP reads data from an extra MCU (8741) at IO port 2 */
@@ -170,7 +170,7 @@ READ16_MEMBER(twincobr_state::fsharkbt_dsp_r)
return (m_fsharkbt_8741 & 1);
}
-WRITE16_MEMBER(twincobr_state::fsharkbt_dsp_w)
+void twincobr_state::fsharkbt_dsp_w(u16 data)
{
/* Flying Shark bootleg DSP writes data to an extra MCU (8741) at IO port 2 */
#if 0
@@ -209,7 +209,7 @@ WRITE_LINE_MEMBER(twincobr_state::dsp_int_w)
}
}
-void twincobr_state::twincobr_restore_dsp()
+void twincobr_state::device_post_load()
{
dsp_int_w(m_dsp_on);
}
@@ -236,21 +236,18 @@ WRITE_LINE_MEMBER(twincobr_state::coin_lockout_2_w)
}
-READ16_MEMBER(twincobr_state::twincobr_sharedram_r)
+u8 twincobr_state::twincobr_sharedram_r(offs_t offset)
{
return m_sharedram[offset];
}
-WRITE16_MEMBER(twincobr_state::twincobr_sharedram_w)
+void twincobr_state::twincobr_sharedram_w(offs_t offset, u8 data)
{
- if (ACCESSING_BITS_0_7)
- {
- m_sharedram[offset] = data & 0xff;
- }
+ m_sharedram[offset] = data;
}
-MACHINE_RESET_MEMBER(twincobr_state,twincobr)
+void twincobr_state::machine_reset()
{
m_dsp_addr_w = 0;
m_main_ram_seg = 0;
@@ -259,7 +256,7 @@ MACHINE_RESET_MEMBER(twincobr_state,twincobr)
m_fsharkbt_8741 = -1;
}
-void twincobr_state::twincobr_driver_savestate()
+void twincobr_state::driver_savestate()
{
save_item(NAME(m_intenable));
save_item(NAME(m_dsp_on));
@@ -268,6 +265,4 @@ void twincobr_state::twincobr_driver_savestate()
save_item(NAME(m_dsp_bio));
save_item(NAME(m_dsp_execute));
save_item(NAME(m_fsharkbt_8741));
-
- machine().save().register_postload(save_prepost_delegate(FUNC(twincobr_state::twincobr_restore_dsp), this));
}
diff --git a/src/mame/video/twincobr.cpp b/src/mame/video/twincobr.cpp
index 61951369a1b..ed15675d03d 100644
--- a/src/mame/video/twincobr.cpp
+++ b/src/mame/video/twincobr.cpp
@@ -24,11 +24,9 @@
TILE_GET_INFO_MEMBER(twincobr_state::get_bg_tile_info)
{
- int code, tile_number, color;
-
- code = m_bgvideoram16[tile_index+m_bg_ram_bank];
- tile_number = code & 0x0fff;
- color = (code & 0xf000) >> 12;
+ const u16 code = m_bgvideoram16[tile_index+m_bg_ram_bank];
+ const u32 tile_number = code & 0x0fff;
+ const u32 color = (code & 0xf000) >> 12;
SET_TILE_INFO_MEMBER(2,
tile_number,
color,
@@ -37,11 +35,9 @@ TILE_GET_INFO_MEMBER(twincobr_state::get_bg_tile_info)
TILE_GET_INFO_MEMBER(twincobr_state::get_fg_tile_info)
{
- int code, tile_number, color;
-
- code = m_fgvideoram16[tile_index];
- tile_number = (code & 0x0fff) | m_fg_rom_bank;
- color = (code & 0xf000) >> 12;
+ const u16 code = m_fgvideoram16[tile_index];
+ const u32 tile_number = (code & 0x0fff) | m_fg_rom_bank;
+ const u32 color = (code & 0xf000) >> 12;
SET_TILE_INFO_MEMBER(1,
tile_number,
color,
@@ -50,11 +46,9 @@ TILE_GET_INFO_MEMBER(twincobr_state::get_fg_tile_info)
TILE_GET_INFO_MEMBER(twincobr_state::get_tx_tile_info)
{
- int code, tile_number, color;
-
- code = m_txvideoram16[tile_index];
- tile_number = code & 0x07ff;
- color = (code & 0xf800) >> 11;
+ const u16 code = m_txvideoram16[tile_index];
+ const u32 tile_number = code & 0x07ff;
+ const u32 color = (code & 0xf800) >> 11;
SET_TILE_INFO_MEMBER(0,
tile_number,
color,
@@ -93,9 +87,9 @@ void twincobr_state::video_start()
twincobr_create_tilemaps();
- m_txvideoram16 = make_unique_clear<uint16_t[]>(m_txvideoram_size);
- m_fgvideoram16 = make_unique_clear<uint16_t[]>(m_fgvideoram_size);
- m_bgvideoram16 = make_unique_clear<uint16_t[]>(m_bgvideoram_size);
+ m_txvideoram16 = make_unique_clear<u16[]>(m_txvideoram_size);
+ m_fgvideoram16 = make_unique_clear<u16[]>(m_fgvideoram_size);
+ m_bgvideoram16 = make_unique_clear<u16[]>(m_bgvideoram_size);
m_display_on = 0;
@@ -135,140 +129,148 @@ WRITE_LINE_MEMBER(twincobr_state::flipscreen_w)
WRITE_LINE_MEMBER(twincobr_state::bg_ram_bank_w)
{
m_bg_ram_bank = state ? 0x1000 : 0x0000;
+ m_bg_tilemap->mark_all_dirty();
}
WRITE_LINE_MEMBER(twincobr_state::fg_rom_bank_w)
{
m_fg_rom_bank = state ? 0x1000 : 0x0000;
+ m_fg_tilemap->mark_all_dirty();
}
-WRITE16_MEMBER(twincobr_state::twincobr_txoffs_w)
+void twincobr_state::twincobr_txoffs_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_txoffs);
m_txoffs %= m_txvideoram_size;
}
-READ16_MEMBER(twincobr_state::twincobr_txram_r)
+u16 twincobr_state::twincobr_txram_r()
{
return m_txvideoram16[m_txoffs];
}
-WRITE16_MEMBER(twincobr_state::twincobr_txram_w)
+void twincobr_state::twincobr_txram_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_txvideoram16[m_txoffs]);
m_tx_tilemap->mark_tile_dirty(m_txoffs);
}
-WRITE16_MEMBER(twincobr_state::twincobr_bgoffs_w)
+void twincobr_state::twincobr_bgoffs_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_bgoffs);
m_bgoffs %= (m_bgvideoram_size >> 1);
}
-READ16_MEMBER(twincobr_state::twincobr_bgram_r)
+u16 twincobr_state::twincobr_bgram_r()
{
return m_bgvideoram16[m_bgoffs+m_bg_ram_bank];
}
-WRITE16_MEMBER(twincobr_state::twincobr_bgram_w)
+void twincobr_state::twincobr_bgram_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_bgvideoram16[m_bgoffs+m_bg_ram_bank]);
m_bg_tilemap->mark_tile_dirty((m_bgoffs+m_bg_ram_bank));
}
-WRITE16_MEMBER(twincobr_state::twincobr_fgoffs_w)
+void twincobr_state::twincobr_fgoffs_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_fgoffs);
m_fgoffs %= m_fgvideoram_size;
}
-READ16_MEMBER(twincobr_state::twincobr_fgram_r)
+u16 twincobr_state::twincobr_fgram_r()
{
return m_fgvideoram16[m_fgoffs];
}
-WRITE16_MEMBER(twincobr_state::twincobr_fgram_w)
+void twincobr_state::twincobr_fgram_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_fgvideoram16[m_fgoffs]);
m_fg_tilemap->mark_tile_dirty(m_fgoffs);
}
-WRITE16_MEMBER(twincobr_state::twincobr_txscroll_w)
+void twincobr_state::twincobr_txscroll_w(offs_t offset, u16 data, u16 mem_mask)
{
- if (offset == 0) {
+ if (offset == 0)
+ {
COMBINE_DATA(&m_txscrollx);
m_tx_tilemap->set_scrollx(0, m_txscrollx);
}
- else {
+ else
+ {
COMBINE_DATA(&m_txscrolly);
m_tx_tilemap->set_scrolly(0, m_txscrolly);
}
}
-WRITE16_MEMBER(twincobr_state::twincobr_bgscroll_w)
+void twincobr_state::twincobr_bgscroll_w(offs_t offset, u16 data, u16 mem_mask)
{
- if (offset == 0) {
+ if (offset == 0)
+ {
COMBINE_DATA(&m_bgscrollx);
m_bg_tilemap->set_scrollx(0, m_bgscrollx);
}
- else {
+ else
+ {
COMBINE_DATA(&m_bgscrolly);
m_bg_tilemap->set_scrolly(0, m_bgscrolly);
}
}
-WRITE16_MEMBER(twincobr_state::twincobr_fgscroll_w)
+void twincobr_state::twincobr_fgscroll_w(offs_t offset, u16 data, u16 mem_mask)
{
- if (offset == 0) {
+ if (offset == 0)
+ {
COMBINE_DATA(&m_fgscrollx);
m_fg_tilemap->set_scrollx(0, m_fgscrollx);
}
- else {
+ else
+ {
COMBINE_DATA(&m_fgscrolly);
m_fg_tilemap->set_scrolly(0, m_fgscrolly);
}
}
-WRITE16_MEMBER(twincobr_state::twincobr_exscroll_w)/* Extra unused video layer */
+void twincobr_state::twincobr_exscroll_w(offs_t offset, u16 data)/* Extra unused video layer */
{
if (offset == 0) logerror("PC - write %04x to unknown video scroll Y register\n",data);
else logerror("PC - write %04x to unknown video scroll X register\n",data);
}
/******************** Wardner interface to this hardware ********************/
-WRITE8_MEMBER(twincobr_state::wardner_txlayer_w)
+void twincobr_state::wardner_txlayer_w(offs_t offset, u8 data)
{
int shift = 8 * (offset & 1);
- twincobr_txoffs_w(space, offset / 2, data << shift, 0xff << shift);
+ twincobr_txoffs_w(offset / 2, data << shift, 0xff << shift);
}
-WRITE8_MEMBER(twincobr_state::wardner_bglayer_w)
+void twincobr_state::wardner_bglayer_w(offs_t offset, u8 data)
{
int shift = 8 * (offset & 1);
- twincobr_bgoffs_w(space, offset / 2, data << shift, 0xff << shift);
+ twincobr_bgoffs_w(offset / 2, data << shift, 0xff << shift);
}
-WRITE8_MEMBER(twincobr_state::wardner_fglayer_w)
+void twincobr_state::wardner_fglayer_w(offs_t offset, u8 data)
{
int shift = 8 * (offset & 1);
- twincobr_fgoffs_w(space, offset / 2, data << shift, 0xff << shift);
+ twincobr_fgoffs_w(offset / 2, data << shift, 0xff << shift);
}
-WRITE8_MEMBER(twincobr_state::wardner_txscroll_w)
+void twincobr_state::wardner_txscroll_w(offs_t offset, u8 data)
{
int shift = 8 * (offset & 1);
- twincobr_txscroll_w(space, offset / 2, data << shift, 0xff << shift);
+ twincobr_txscroll_w(offset / 2, data << shift, 0xff << shift);
}
-WRITE8_MEMBER(twincobr_state::wardner_bgscroll_w)
+void twincobr_state::wardner_bgscroll_w(offs_t offset, u8 data)
{
int shift = 8 * (offset & 1);
- twincobr_bgscroll_w(space, offset / 2, data << shift, 0xff << shift);
+ twincobr_bgscroll_w(offset / 2, data << shift, 0xff << shift);
}
-WRITE8_MEMBER(twincobr_state::wardner_fgscroll_w)
+void twincobr_state::wardner_fgscroll_w(offs_t offset, u8 data)
{
int shift = 8 * (offset & 1);
- twincobr_fgscroll_w(space, offset / 2, data << shift, 0xff << shift);
+ twincobr_fgscroll_w(offset / 2, data << shift, 0xff << shift);
}
-WRITE8_MEMBER(twincobr_state::wardner_exscroll_w)/* Extra unused video layer */
+void twincobr_state::wardner_exscroll_w(offs_t offset, u8 data)/* Extra unused video layer */
{
switch (offset)
{
@@ -279,37 +281,39 @@ WRITE8_MEMBER(twincobr_state::wardner_exscroll_w)/* Extra unused video layer */
}
}
-READ8_MEMBER(twincobr_state::wardner_videoram_r)
+u8 twincobr_state::wardner_videoram_r(offs_t offset)
{
int shift = 8 * (offset & 1);
- switch (offset/2) {
- case 0: return twincobr_txram_r(space,0,0xffff) >> shift;
- case 1: return twincobr_bgram_r(space,0,0xffff) >> shift;
- case 2: return twincobr_fgram_r(space,0,0xffff) >> shift;
+ switch (offset / 2)
+ {
+ case 0: return twincobr_txram_r() >> shift;
+ case 1: return twincobr_bgram_r() >> shift;
+ case 2: return twincobr_fgram_r() >> shift;
}
return 0;
}
-WRITE8_MEMBER(twincobr_state::wardner_videoram_w)
+void twincobr_state::wardner_videoram_w(offs_t offset, u8 data)
{
int shift = 8 * (offset & 1);
- switch (offset/2) {
- case 0: twincobr_txram_w(space,0,data << shift, 0xff << shift); break;
- case 1: twincobr_bgram_w(space,0,data << shift, 0xff << shift); break;
- case 2: twincobr_fgram_w(space,0,data << shift, 0xff << shift); break;
+ switch (offset / 2)
+ {
+ case 0: twincobr_txram_w(0,data << shift, 0xff << shift); break;
+ case 1: twincobr_bgram_w(0,data << shift, 0xff << shift); break;
+ case 2: twincobr_fgram_w(0,data << shift, 0xff << shift); break;
}
}
-READ8_MEMBER(twincobr_state::wardner_sprite_r)
+u8 twincobr_state::wardner_sprite_r(offs_t offset)
{
- uint16_t *spriteram16 = reinterpret_cast<uint16_t *>(m_spriteram8->live());
+ u16 *spriteram16 = reinterpret_cast<u16 *>(m_spriteram8->live());
int shift = (offset & 1) * 8;
return spriteram16[offset/2] >> shift;
}
-WRITE8_MEMBER(twincobr_state::wardner_sprite_w)
+void twincobr_state::wardner_sprite_w(offs_t offset, u8 data)
{
- uint16_t *spriteram16 = reinterpret_cast<uint16_t *>(m_spriteram8->live());
+ u16 *spriteram16 = reinterpret_cast<u16 *>(m_spriteram8->live());
if (offset & 1)
spriteram16[offset/2] = (spriteram16[offset/2] & 0x00ff) | (data << 8);
else
@@ -320,7 +324,7 @@ WRITE8_MEMBER(twincobr_state::wardner_sprite_w)
-void twincobr_state::twincobr_log_vram()
+void twincobr_state::log_vram()
{
#ifdef MAME_DEBUG
@@ -360,12 +364,12 @@ void twincobr_state::twincobr_log_vram()
}
-uint32_t twincobr_state::screen_update_toaplan0(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 twincobr_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- twincobr_log_vram();
+ log_vram();
- uint16_t *buffered_spriteram16;
- uint32_t bytes;
+ u16 *buffered_spriteram16;
+ u32 bytes;
if (m_spriteram16 != nullptr)
{
buffered_spriteram16 = m_spriteram16->buffer();
@@ -373,7 +377,7 @@ uint32_t twincobr_state::screen_update_toaplan0(screen_device &screen, bitmap_in
}
else
{
- buffered_spriteram16 = reinterpret_cast<uint16_t *>(m_spriteram8->buffer());
+ buffered_spriteram16 = reinterpret_cast<u16 *>(m_spriteram8->buffer());
bytes = m_spriteram8->bytes();
}