galpani3.cpp : Implement/Fix some effects(Background color fading in intro, Girl display in stage start), Add notes

kaneko_grap2.cpp : Add device_palette_interface for palette, Minor cleanups
This commit is contained in:
cam900 2018-07-15 01:12:31 +09:00 committed by Vas Crabb
parent 9edafeb048
commit 7eff013f87
3 changed files with 33 additions and 26 deletions

View File

@ -171,7 +171,7 @@ void galpani3_state::video_start()
// TODO : m_framebuffer_bright1 is alpha-blended? // TODO : m_framebuffer_bright1 is alpha-blended?
#define FB_DRAW_PIXEL(_chip, _pixel) \ #define FB_DRAW_PIXEL(_chip, _pixel) \
int alpha = 0xff; \ int alpha = 0xff; \
uint32_t pal = m_grap2[_chip]->pen_r(_pixel); \ const pen_t &pal = m_grap2[_chip]->pen(_pixel); \
if (m_grap2[_chip]->m_framebuffer_palette[_pixel] & 0x8000) \ if (m_grap2[_chip]->m_framebuffer_palette[_pixel] & 0x8000) \
{ \ { \
alpha = (m_grap2[_chip]->m_framebuffer_bright2 & 0xff); \ alpha = (m_grap2[_chip]->m_framebuffer_bright2 & 0xff); \
@ -250,7 +250,10 @@ uint32_t galpani3_state::screen_update_galpani3(screen_device &screen, bitmap_rg
else if (pridat==0xcf) // the girl else if (pridat==0xcf) // the girl
{ {
SPRITE_DRAW_PIXEL(0x0000); SPRITE_DRAW_PIXEL(0x0000);
FB_DRAW_PIXEL(0, 0x100); if (m_grap2[0]->m_framebuffer_enable)
{
FB_DRAW_PIXEL(0, 0x100);
}
SPRITE_DRAW_PIXEL(0x4000); SPRITE_DRAW_PIXEL(0x4000);
if (m_grap2[1]->m_framebuffer_enable) if (m_grap2[1]->m_framebuffer_enable)
{ {
@ -263,6 +266,25 @@ uint32_t galpani3_state::screen_update_galpani3(screen_device &screen, bitmap_rg
} }
SPRITE_DRAW_PIXEL(0xc000); SPRITE_DRAW_PIXEL(0xc000);
} }
else if (pridat==0x30) // during the 'gals boxes' on the intro
{
SPRITE_DRAW_PIXEL(0x0000);
if (m_grap2[1]->m_framebuffer_enable) // TODO : Opaqued and Swapped order?
{
FB_DRAW_PIXEL(1, dat2);
}
SPRITE_DRAW_PIXEL(0x4000);
if (dat1 && m_grap2[0]->m_framebuffer_enable)
{
FB_DRAW_PIXEL(0, dat1);
}
SPRITE_DRAW_PIXEL(0x8000);
if (dat3 && m_grap2[2]->m_framebuffer_enable)
{
FB_DRAW_PIXEL(2, dat3);
}
SPRITE_DRAW_PIXEL(0xc000);
}
else else
{ {
SPRITE_DRAW_PIXEL(0x0000); SPRITE_DRAW_PIXEL(0x0000);

View File

@ -37,24 +37,19 @@ DEFINE_DEVICE_TYPE(KANEKO_GRAP2, kaneko_grap2_device, "kaneko_grap2", "Kaneko GR
kaneko_grap2_device::kaneko_grap2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) kaneko_grap2_device::kaneko_grap2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, KANEKO_GRAP2, tag, owner, clock) : device_t(mconfig, KANEKO_GRAP2, tag, owner, clock)
, device_rom_interface(mconfig, *this, 32) // TODO : Unknown Address Bits , device_rom_interface(mconfig, *this, 32) // TODO : Unknown Address Bits
, m_palette(*this, "palette") , device_palette_interface(mconfig, *this)
{ {
} }
MACHINE_CONFIG_START(kaneko_grap2_device::device_add_mconfig)
MCFG_PALETTE_ADD("palette", 0x101)
MCFG_PALETTE_FORMAT(xGGGGGRRRRRBBBBB)
MACHINE_CONFIG_END
void kaneko_grap2_device::device_start() void kaneko_grap2_device::device_start()
{ {
m_framebuffer = make_unique_clear<uint16_t[]>(0x80000/2); m_framebuffer = make_unique_clear<uint16_t[]>(0x80000/2);
m_framebuffer_palette = make_unique_clear<uint16_t[]>(0x101); // 0x00-0xff is internal palette, 0x100 is background colour m_framebuffer_palette = make_unique_clear<uint16_t[]>(PALETTE_SIZE);
m_framebuffer_unk1 = make_unique_clear<uint16_t[]>(0x400/2); m_framebuffer_unk1 = make_unique_clear<uint16_t[]>(0x400/2);
m_framebuffer_unk2 = make_unique_clear<uint16_t[]>(0x400/2); m_framebuffer_unk2 = make_unique_clear<uint16_t[]>(0x400/2);
save_pointer(NAME(m_framebuffer), 0x80000/2); save_pointer(NAME(m_framebuffer), 0x80000/2);
save_pointer(NAME(m_framebuffer_palette), 0x101); save_pointer(NAME(m_framebuffer_palette), PALETTE_SIZE);
save_pointer(NAME(m_framebuffer_unk1), 0x400/2); save_pointer(NAME(m_framebuffer_unk1), 0x400/2);
save_pointer(NAME(m_framebuffer_unk2), 0x400/2); save_pointer(NAME(m_framebuffer_unk2), 0x400/2);
@ -170,7 +165,7 @@ WRITE16_MEMBER(kaneko_grap2_device::regs1_go_w)
void kaneko_grap2_device::set_color_555(pen_t color, int rshift, int gshift, int bshift, uint16_t data) void kaneko_grap2_device::set_color_555(pen_t color, int rshift, int gshift, int bshift, uint16_t data)
{ {
m_palette->set_pen_color(color, pal5bit(data >> rshift), pal5bit(data >> gshift), pal5bit(data >> bshift)); set_pen_color(color, pal5bit(data >> rshift), pal5bit(data >> gshift), pal5bit(data >> bshift));
} }
WRITE16_MEMBER(kaneko_grap2_device::framebuffer1_palette_w) WRITE16_MEMBER(kaneko_grap2_device::framebuffer1_palette_w)
@ -185,8 +180,3 @@ WRITE16_MEMBER(kaneko_grap2_device::framebuffer1_bgcol_w)
COMBINE_DATA(&m_framebuffer_palette[0x100]); COMBINE_DATA(&m_framebuffer_palette[0x100]);
set_color_555(0x100, 5, 10, 0, m_framebuffer_palette[0x100]); set_color_555(0x100, 5, 10, 0, m_framebuffer_palette[0x100]);
} }
uint32_t kaneko_grap2_device::pen_r(int pen)
{
return m_palette->pens()[pen];
}

View File

@ -7,10 +7,11 @@
#include "emupal.h" #include "emupal.h"
class kaneko_grap2_device : public device_t, public device_rom_interface, public device_palette_interface
class kaneko_grap2_device : public device_t, public device_rom_interface
{ {
public: public:
static constexpr unsigned PALETTE_SIZE = 256 + 1; // 0x00-0xff is internal palette, 0x100 is background colour
kaneko_grap2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); kaneko_grap2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
DECLARE_READ16_MEMBER(regs1_r); DECLARE_READ16_MEMBER(regs1_r);
@ -59,25 +60,19 @@ public:
DECLARE_READ16_MEMBER( unk2_r ) { return m_framebuffer_unk2[offset]; } DECLARE_READ16_MEMBER( unk2_r ) { return m_framebuffer_unk2[offset]; }
DECLARE_WRITE16_MEMBER( unk2_w ) { COMBINE_DATA(&m_framebuffer_unk2[offset]); } DECLARE_WRITE16_MEMBER( unk2_w ) { COMBINE_DATA(&m_framebuffer_unk2[offset]); }
uint32_t pen_r(int pen);
std::unique_ptr<uint16_t[]> m_framebuffer; std::unique_ptr<uint16_t[]> m_framebuffer;
std::unique_ptr<uint16_t[]> m_framebuffer_palette; std::unique_ptr<uint16_t[]> m_framebuffer_palette;
std::unique_ptr<uint16_t[]> m_framebuffer_unk1; std::unique_ptr<uint16_t[]> m_framebuffer_unk1;
std::unique_ptr<uint16_t[]> m_framebuffer_unk2; std::unique_ptr<uint16_t[]> m_framebuffer_unk2;
protected: protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void rom_bank_updated() override; virtual void rom_bank_updated() override;
private: // device_palette_interface overrides
required_device<palette_device> m_palette; virtual uint32_t palette_entries() const override { return PALETTE_SIZE; }
}; };