seibucop: Eliminate machine().device, hardcoded tags and dependency on palette_device (nw)

This commit is contained in:
AJR 2018-06-13 09:43:58 -04:00
parent 70f2df6c52
commit 1088a2e724
9 changed files with 78 additions and 49 deletions

View File

@ -1236,6 +1236,8 @@ MACHINE_CONFIG_START(legionna_state::legionna)
MCFG_DEVICE_ADD("raiden2cop", RAIDEN2COP, 0)
MCFG_RAIDEN2COP_VIDEORAM_OUT_CB(WRITE16(*this, legionna_state, videowrite_cb_w))
MCFG_RAIDEN2COP_PALETTERAM_OUT_CB(WRITE16(m_palette, palette_device, write16))
MCFG_RAIDEN2COP_HOST_CPU("maincpu")
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@ -1253,7 +1255,7 @@ MACHINE_CONFIG_START(legionna_state::legionna)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_legionna)
MCFG_PALETTE_ADD_INIT_BLACK("palette", 128*16)
//MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_VIDEO_START_OVERRIDE(legionna_state,legionna)
@ -1287,6 +1289,8 @@ MACHINE_CONFIG_START(legionna_state::heatbrl)
MCFG_DEVICE_ADD("raiden2cop", RAIDEN2COP, 0)
MCFG_RAIDEN2COP_VIDEORAM_OUT_CB(WRITE16(*this, legionna_state, videowrite_cb_w))
MCFG_RAIDEN2COP_PALETTERAM_OUT_CB(WRITE16(m_palette, palette_device, write16))
MCFG_RAIDEN2COP_HOST_CPU("maincpu")
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@ -1306,7 +1310,7 @@ MACHINE_CONFIG_START(legionna_state::heatbrl)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_heatbrl)
MCFG_PALETTE_ADD_INIT_BLACK("palette", 128*16)
//MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_VIDEO_START_OVERRIDE(legionna_state,heatbrl)
@ -1340,6 +1344,8 @@ MACHINE_CONFIG_START(legionna_state::godzilla)
MCFG_DEVICE_ADD("raiden2cop", RAIDEN2COP, 0)
MCFG_RAIDEN2COP_VIDEORAM_OUT_CB(WRITE16(*this, legionna_state, videowrite_cb_w))
MCFG_RAIDEN2COP_PALETTERAM_OUT_CB(WRITE16(m_palette, palette_device, write16))
MCFG_RAIDEN2COP_HOST_CPU("maincpu")
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@ -1360,7 +1366,7 @@ MACHINE_CONFIG_START(legionna_state::godzilla)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_heatbrl)
MCFG_PALETTE_ADD_INIT_BLACK("palette", 128*16)
//MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_VIDEO_START_OVERRIDE(legionna_state,godzilla)
@ -1394,6 +1400,8 @@ MACHINE_CONFIG_START(legionna_state::denjinmk)
MCFG_DEVICE_ADD("raiden2cop", RAIDEN2COP, 0)
MCFG_RAIDEN2COP_VIDEORAM_OUT_CB(WRITE16(*this, legionna_state, videowrite_cb_w))
MCFG_RAIDEN2COP_PALETTERAM_OUT_CB(WRITE16(m_palette, palette_device, write16))
MCFG_RAIDEN2COP_HOST_CPU("maincpu")
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@ -1413,7 +1421,7 @@ MACHINE_CONFIG_START(legionna_state::denjinmk)
MCFG_PALETTE_ADD_INIT_BLACK("palette", 128*16)
//MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_VIDEO_START_OVERRIDE(legionna_state,denjinmk)
@ -1447,6 +1455,8 @@ MACHINE_CONFIG_START(legionna_state::grainbow)
MCFG_DEVICE_ADD("raiden2cop", RAIDEN2COP, 0)
MCFG_RAIDEN2COP_VIDEORAM_OUT_CB(WRITE16(*this, legionna_state, videowrite_cb_w))
MCFG_RAIDEN2COP_PALETTERAM_OUT_CB(WRITE16(m_palette, palette_device, write16))
MCFG_RAIDEN2COP_HOST_CPU("maincpu")
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@ -1466,7 +1476,7 @@ MACHINE_CONFIG_START(legionna_state::grainbow)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_grainbow)
MCFG_PALETTE_ADD_INIT_BLACK("palette", 128*16)
//MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_VIDEO_START_OVERRIDE(legionna_state,grainbow)
@ -1501,6 +1511,8 @@ MACHINE_CONFIG_START(legionna_state::cupsoc)
MCFG_DEVICE_ADD("raiden2cop", RAIDEN2COP, 0)
MCFG_RAIDEN2COP_VIDEORAM_OUT_CB(WRITE16(*this, legionna_state, videowrite_cb_w))
MCFG_RAIDEN2COP_PALETTERAM_OUT_CB(WRITE16(m_palette, palette_device, write16))
MCFG_RAIDEN2COP_HOST_CPU("maincpu")
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@ -1520,7 +1532,7 @@ MACHINE_CONFIG_START(legionna_state::cupsoc)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_cupsoc)
MCFG_PALETTE_ADD_INIT_BLACK("palette", 128*16)
//MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_VIDEO_START_OVERRIDE(legionna_state,cupsoc)

View File

@ -373,7 +373,7 @@ WRITE16_MEMBER(r2dx_v33_state::r2dx_paldma_w)
{
uint16_t palval = space.read_word(src);
src += 2;
m_palette->set_pen_color(i, pal5bit(palval >> 0), pal5bit(palval >> 5), pal5bit(palval >> 10));
m_palette->write16(space, i, palval, 0xffff);
}
}
@ -805,7 +805,7 @@ MACHINE_CONFIG_START(r2dx_v33_state::rdx_v33)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_rdx_v33)
MCFG_PALETTE_ADD("palette", 2048)
//MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_VIDEO_START_OVERRIDE(raiden2_state,raiden2)
@ -843,7 +843,7 @@ MACHINE_CONFIG_START(r2dx_v33_state::nzerotea)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_rdx_v33)
MCFG_PALETTE_ADD("palette", 2048)
//MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_VIDEO_START_OVERRIDE(raiden2_state,raiden2)

View File

@ -377,25 +377,25 @@ void raiden2_state::draw_sprites(const rectangle &cliprect)
WRITE16_MEMBER(raiden2_state::raiden2_background_w)
{
COMBINE_DATA(&back_data[offset]);
COMBINE_DATA(&m_back_data[offset]);
background_layer->mark_tile_dirty(offset);
}
WRITE16_MEMBER(raiden2_state::raiden2_midground_w)
{
COMBINE_DATA(&mid_data[offset]);
COMBINE_DATA(&m_mid_data[offset]);
midground_layer->mark_tile_dirty(offset);
}
WRITE16_MEMBER(raiden2_state::raiden2_foreground_w)
{
COMBINE_DATA(&fore_data[offset]);
COMBINE_DATA(&m_fore_data[offset]);
foreground_layer->mark_tile_dirty(offset);
}
WRITE16_MEMBER(raiden2_state::raiden2_text_w)
{
COMBINE_DATA(&text_data[offset]);
COMBINE_DATA(&m_text_data[offset]);
text_layer->mark_tile_dirty(offset);
}
@ -481,7 +481,7 @@ WRITE16_MEMBER(raiden2_state::raidendx_cop_bank_2_w)
TILE_GET_INFO_MEMBER(raiden2_state::get_back_tile_info)
{
int tile = back_data[tile_index];
int tile = m_back_data[tile_index];
int color = (tile >> 12) | (0 << 4);
tile = (tile & 0xfff) | (bg_bank << 12);
@ -491,7 +491,7 @@ TILE_GET_INFO_MEMBER(raiden2_state::get_back_tile_info)
TILE_GET_INFO_MEMBER(raiden2_state::get_mid_tile_info)
{
int tile = mid_data[tile_index];
int tile = m_mid_data[tile_index];
int color = (tile >> 12) | (2 << 4);
tile = (tile & 0xfff) | (mid_bank << 12);
@ -501,7 +501,7 @@ TILE_GET_INFO_MEMBER(raiden2_state::get_mid_tile_info)
TILE_GET_INFO_MEMBER(raiden2_state::get_fore_tile_info)
{
int tile = fore_data[tile_index];
int tile = m_fore_data[tile_index];
int color = (tile >> 12) | (1 << 4);
tile = (tile & 0xfff) | (fg_bank << 12);
@ -511,7 +511,7 @@ TILE_GET_INFO_MEMBER(raiden2_state::get_fore_tile_info)
TILE_GET_INFO_MEMBER(raiden2_state::get_text_tile_info)
{
int tile = text_data[tile_index];
int tile = m_text_data[tile_index];
int color = (tile>>12)&0xf;
tile &= 0xfff;
@ -524,15 +524,18 @@ TILE_GET_INFO_MEMBER(raiden2_state::get_text_tile_info)
VIDEO_START_MEMBER(raiden2_state,raiden2)
{
back_data = make_unique_clear<uint16_t[]>(0x800/2);
fore_data = make_unique_clear<uint16_t[]>(0x800/2);
mid_data = make_unique_clear<uint16_t[]>(0x800/2);
text_data = make_unique_clear<uint16_t[]>(0x1000/2);
m_back_data = make_unique_clear<uint16_t[]>(0x800/2);
m_fore_data = make_unique_clear<uint16_t[]>(0x800/2);
m_mid_data = make_unique_clear<uint16_t[]>(0x800/2);
m_text_data = make_unique_clear<uint16_t[]>(0x1000/2);
m_palette_data = make_unique_clear<uint16_t[]>(0x1000/2);
m_palette->basemem().set(m_palette_data.get(), 0x1000/2 * sizeof(uint16_t), 16, ENDIANNESS_LITTLE, 2);
save_pointer(NAME(back_data.get()), 0x800/2);
save_pointer(NAME(fore_data.get()), 0x800/2);
save_pointer(NAME(mid_data.get()), 0x800/2);
save_pointer(NAME(text_data.get()), 0x1000/2);
save_pointer(NAME(m_back_data.get()), 0x800/2);
save_pointer(NAME(m_fore_data.get()), 0x800/2);
save_pointer(NAME(m_mid_data.get()), 0x800/2);
save_pointer(NAME(m_text_data.get()), 0x1000/2);
save_pointer(NAME(m_palette_data.get()), 0x1000/2);
text_layer = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(raiden2_state::get_text_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64,32 );
background_layer = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(raiden2_state::get_back_tile_info),this), TILEMAP_SCAN_ROWS, 16,16, 32,32 );
@ -1450,7 +1453,7 @@ MACHINE_CONFIG_START(raiden2_state::raiden2)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_raiden2)
MCFG_PALETTE_ADD("palette", 2048)
//MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_DEVICE_ADD("crtc", SEIBU_CRTC, 0)
MCFG_SEIBU_CRTC_LAYER_EN_CB(WRITE16(*this, raiden2_state, tilemap_enable_w))
@ -1458,6 +1461,8 @@ MACHINE_CONFIG_START(raiden2_state::raiden2)
MCFG_DEVICE_ADD("raiden2cop", RAIDEN2COP, 0)
MCFG_RAIDEN2COP_VIDEORAM_OUT_CB(WRITE16(*this, raiden2_state, m_videoram_private_w))
MCFG_RAIDEN2COP_PALETTERAM_OUT_CB(WRITE16(m_palette, palette_device, write16))
MCFG_RAIDEN2COP_HOST_CPU("maincpu")
MCFG_VIDEO_START_OVERRIDE(raiden2_state,raiden2)
@ -1524,7 +1529,7 @@ MACHINE_CONFIG_START(raiden2_state::zeroteam)
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_raiden2)
MCFG_PALETTE_ADD("palette", 2048)
//MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_DEVICE_ADD("crtc", SEIBU_CRTC, 0)
MCFG_SEIBU_CRTC_LAYER_EN_CB(WRITE16(*this, raiden2_state, tilemap_enable_w))
@ -1532,6 +1537,8 @@ MACHINE_CONFIG_START(raiden2_state::zeroteam)
MCFG_DEVICE_ADD("raiden2cop", RAIDEN2COP, 0)
MCFG_RAIDEN2COP_VIDEORAM_OUT_CB(WRITE16(*this, raiden2_state, m_videoram_private_w))
MCFG_RAIDEN2COP_PALETTERAM_OUT_CB(WRITE16(m_palette, palette_device, write16))
MCFG_RAIDEN2COP_HOST_CPU("maincpu")
MCFG_VIDEO_START_OVERRIDE(raiden2_state,raiden2)

View File

@ -37,6 +37,7 @@ public:
std::unique_ptr<uint16_t[]> m_mid_data;
std::unique_ptr<uint16_t[]> m_textram;
std::unique_ptr<uint16_t[]> m_scrollram16;
std::unique_ptr<uint16_t[]> m_paletteram;
uint16_t m_layer_disable;
std::unique_ptr<uint16_t[]> m_layer_config;
int m_sprite_xoffs;

View File

@ -9,12 +9,6 @@ class raiden2_state : public driver_device
public:
raiden2_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
/*
back_data(*this, "back_data"),
fore_data(*this, "fore_data"),
mid_data(*this, "mid_data"),
text_data(*this, "text_data"),
*/
sprites(*this, "sprites") ,
m_maincpu(*this, "maincpu"),
m_seibu_sound(*this, "seibu_sound"),
@ -44,10 +38,11 @@ public:
}
std::unique_ptr<uint16_t[]> back_data;
std::unique_ptr<uint16_t[]> fore_data;
std::unique_ptr<uint16_t[]> mid_data;
std::unique_ptr<uint16_t[]> text_data; // private buffers, allocated in init
std::unique_ptr<uint16_t[]> m_back_data;
std::unique_ptr<uint16_t[]> m_fore_data;
std::unique_ptr<uint16_t[]> m_mid_data;
std::unique_ptr<uint16_t[]> m_text_data; // private buffers, allocated in init
std::unique_ptr<uint16_t[]> m_palette_data;
required_shared_ptr<uint16_t> sprites;
required_device<cpu_device> m_maincpu;
optional_device<seibu_sound_device> m_seibu_sound;

View File

@ -170,7 +170,8 @@ raiden2cop_device::raiden2cop_device(const machine_config &mconfig, const char *
m_LEGACY_r1(0),
m_videoramout_cb(*this),
m_palette(*this, ":palette")
m_paletteramout_cb(*this),
m_host_cpu(*this, finder_base::DUMMY_TAG)
{
memset(cop_func_trigger, 0, sizeof(uint16_t)*(0x100/8));
memset(cop_func_value, 0, sizeof(uint16_t)*(0x100/8));
@ -279,8 +280,8 @@ void raiden2cop_device::device_start()
save_item(NAME(m_LEGACY_r1));
m_videoramout_cb.resolve_safe();
// TODO: tag parameter in device
m_host_cpu = machine().device<cpu_device>("maincpu");
m_paletteramout_cb.resolve_safe();
m_host_space = &m_host_cpu->space(AS_PROGRAM);
m_host_endian = m_host_space->endianness() == ENDIANNESS_BIG; // m_cpu_is_68k

View File

@ -17,7 +17,13 @@
#define LOG_Move0905 0
#define MCFG_RAIDEN2COP_VIDEORAM_OUT_CB(_devcb) \
devcb = &downcast<raiden2cop_device &>(*device).set_m_videoramout_cb(DEVCB_##_devcb);
devcb = &downcast<raiden2cop_device &>(*device).set_videoramout_cb(DEVCB_##_devcb);
#define MCFG_RAIDEN2COP_PALETTERAM_OUT_CB(_devcb) \
devcb = &downcast<raiden2cop_device &>(*device).set_paletteramout_cb(DEVCB_##_devcb);
#define MCFG_RAIDEN2COP_HOST_CPU(_tag) \
downcast<raiden2cop_device &>(*device).set_host_cpu_tag(_tag);
#define MCFG_RAIDEN2COP_ADD(_tag ) \
MCFG_DEVICE_ADD(_tag, RAIDEN2COP, 0)
@ -76,7 +82,9 @@ public:
uint8_t fade_table(int v);
template<class Object> devcb_base &set_m_videoramout_cb(Object &&cb) { return m_videoramout_cb.set_callback(std::forward<Object>(cb)); }
template<class Object> devcb_base &set_videoramout_cb(Object &&cb) { return m_videoramout_cb.set_callback(std::forward<Object>(cb)); }
template<class Object> devcb_base &set_paletteramout_cb(Object &&cb) { return m_paletteramout_cb.set_callback(std::forward<Object>(cb)); }
template<class T> void set_host_cpu_tag(T &&tag) { m_host_cpu.set_tag(std::forward<T>(tag)); }
// Number Conversion
@ -208,11 +216,11 @@ protected:
virtual void device_start() override;
private:
// internal state
// device callbacks
devcb_write16 m_videoramout_cb;
required_device<palette_device> m_palette;
devcb_write16 m_paletteramout_cb;
cpu_device *m_host_cpu; /**< reference to the host cpu */
required_device<cpu_device> m_host_cpu; /**< reference to the host cpu */
address_space *m_host_space; /**< reference to the host cpu space */
bool m_host_endian; /**< reference to the host cpu endianness, some commands cares! */
uint8_t m_byte_endian_val; /**< 2 if m_host_endian is big (68k) else 0 */

View File

@ -22,7 +22,8 @@ void raiden2cop_device::dma_palette_buffer()
{
uint16_t palval = m_host_space->read_word(src);
src += 2;
m_palette->set_pen_color(i, pal5bit(palval >> 0), pal5bit(palval >> 5), pal5bit(palval >> 10));
m_paletteramout_cb(i, palval, 0xffff);
//m_palette->set_pen_color(i, pal5bit(palval >> 0), pal5bit(palval >> 5), pal5bit(palval >> 10));
}
}

View File

@ -223,6 +223,9 @@ void legionna_state::common_video_allocate_ptr()
m_mid_data = make_unique_clear<uint16_t[]>(0x800/2);
m_textram = make_unique_clear<uint16_t[]>(0x1000/2);
m_scrollram16 = std::make_unique<uint16_t[]>(0x60/2);
m_paletteram = make_unique_clear<uint16_t[]>(0x1000/2);
m_palette->basemem().set(m_paletteram.get(), 0x1000/2 * sizeof(uint16_t), 16, ENDIANNESS_BIG, 2);
m_sprite_xoffs = 0;
m_sprite_yoffs = 0;
@ -231,6 +234,7 @@ void legionna_state::common_video_allocate_ptr()
save_pointer(NAME(m_mid_data.get()), 0x800/2);
save_pointer(NAME(m_textram.get()), 0x1000/2);
save_pointer(NAME(m_scrollram16.get()), 0x60/2);
save_pointer(NAME(m_paletteram.get()), 0x1000/2);
save_item(NAME(m_back_gfx_bank));
save_item(NAME(m_mid_gfx_bank));