diff --git a/src/mame/drivers/legionna.cpp b/src/mame/drivers/legionna.cpp index e4db8f136b8..21f7ce75ea7 100644 --- a/src/mame/drivers/legionna.cpp +++ b/src/mame/drivers/legionna.cpp @@ -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) diff --git a/src/mame/drivers/r2dx_v33.cpp b/src/mame/drivers/r2dx_v33.cpp index c1162f3f19d..2e454de3025 100644 --- a/src/mame/drivers/r2dx_v33.cpp +++ b/src/mame/drivers/r2dx_v33.cpp @@ -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) diff --git a/src/mame/drivers/raiden2.cpp b/src/mame/drivers/raiden2.cpp index 16ac0d40761..4b47914c972 100644 --- a/src/mame/drivers/raiden2.cpp +++ b/src/mame/drivers/raiden2.cpp @@ -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(0x800/2); - fore_data = make_unique_clear(0x800/2); - mid_data = make_unique_clear(0x800/2); - text_data = make_unique_clear(0x1000/2); + m_back_data = make_unique_clear(0x800/2); + m_fore_data = make_unique_clear(0x800/2); + m_mid_data = make_unique_clear(0x800/2); + m_text_data = make_unique_clear(0x1000/2); + m_palette_data = make_unique_clear(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) diff --git a/src/mame/includes/legionna.h b/src/mame/includes/legionna.h index f921881a2fb..01e2f984bae 100644 --- a/src/mame/includes/legionna.h +++ b/src/mame/includes/legionna.h @@ -37,6 +37,7 @@ public: std::unique_ptr m_mid_data; std::unique_ptr m_textram; std::unique_ptr m_scrollram16; + std::unique_ptr m_paletteram; uint16_t m_layer_disable; std::unique_ptr m_layer_config; int m_sprite_xoffs; diff --git a/src/mame/includes/raiden2.h b/src/mame/includes/raiden2.h index 3d6a87ebe15..d7494517464 100644 --- a/src/mame/includes/raiden2.h +++ b/src/mame/includes/raiden2.h @@ -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 back_data; - std::unique_ptr fore_data; - std::unique_ptr mid_data; - std::unique_ptr text_data; // private buffers, allocated in init + std::unique_ptr m_back_data; + std::unique_ptr m_fore_data; + std::unique_ptr m_mid_data; + std::unique_ptr m_text_data; // private buffers, allocated in init + std::unique_ptr m_palette_data; required_shared_ptr sprites; required_device m_maincpu; optional_device m_seibu_sound; diff --git a/src/mame/machine/seibucop/seibucop.cpp b/src/mame/machine/seibucop/seibucop.cpp index 1cf410684cb..229eda863a8 100644 --- a/src/mame/machine/seibucop/seibucop.cpp +++ b/src/mame/machine/seibucop/seibucop.cpp @@ -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("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 diff --git a/src/mame/machine/seibucop/seibucop.h b/src/mame/machine/seibucop/seibucop.h index 84a20e3e199..7bd5809d9bf 100644 --- a/src/mame/machine/seibucop/seibucop.h +++ b/src/mame/machine/seibucop/seibucop.h @@ -17,7 +17,13 @@ #define LOG_Move0905 0 #define MCFG_RAIDEN2COP_VIDEORAM_OUT_CB(_devcb) \ - devcb = &downcast(*device).set_m_videoramout_cb(DEVCB_##_devcb); + devcb = &downcast(*device).set_videoramout_cb(DEVCB_##_devcb); + +#define MCFG_RAIDEN2COP_PALETTERAM_OUT_CB(_devcb) \ + devcb = &downcast(*device).set_paletteramout_cb(DEVCB_##_devcb); + +#define MCFG_RAIDEN2COP_HOST_CPU(_tag) \ + downcast(*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 devcb_base &set_m_videoramout_cb(Object &&cb) { return m_videoramout_cb.set_callback(std::forward(cb)); } + template devcb_base &set_videoramout_cb(Object &&cb) { return m_videoramout_cb.set_callback(std::forward(cb)); } + template devcb_base &set_paletteramout_cb(Object &&cb) { return m_paletteramout_cb.set_callback(std::forward(cb)); } + template void set_host_cpu_tag(T &&tag) { m_host_cpu.set_tag(std::forward(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 m_palette; + devcb_write16 m_paletteramout_cb; - cpu_device *m_host_cpu; /**< reference to the host cpu */ + required_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 */ diff --git a/src/mame/machine/seibucop/seibucop_dma.hxx b/src/mame/machine/seibucop/seibucop_dma.hxx index 4b43b3e4732..b4bdfb160e7 100644 --- a/src/mame/machine/seibucop/seibucop_dma.hxx +++ b/src/mame/machine/seibucop/seibucop_dma.hxx @@ -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)); } } diff --git a/src/mame/video/legionna.cpp b/src/mame/video/legionna.cpp index 89bfe3c6302..1e234d8a823 100644 --- a/src/mame/video/legionna.cpp +++ b/src/mame/video/legionna.cpp @@ -219,10 +219,13 @@ TILE_GET_INFO_MEMBER(legionna_state::get_text_tile_info) void legionna_state::common_video_allocate_ptr() { m_back_data = make_unique_clear(0x800/2); - m_fore_data = make_unique_clear(0x800/2); - m_mid_data = make_unique_clear(0x800/2); - m_textram = make_unique_clear(0x1000/2); + m_fore_data = make_unique_clear(0x800/2); + m_mid_data = make_unique_clear(0x800/2); + m_textram = make_unique_clear(0x1000/2); m_scrollram16 = std::make_unique(0x60/2); + m_paletteram = make_unique_clear(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));