mirror of
https://github.com/holub/mame
synced 2025-06-17 09:49:31 +03:00
Fix colours in Crude Buster (verified against real hardware)
This commit is contained in:
parent
09a0e206ec
commit
e6f83e9e74
@ -137,8 +137,8 @@ static ADDRESS_MAP_START( twocrude_map, AS_PROGRAM, 16, cbuster_state )
|
|||||||
AM_RANGE(0x0b4000, 0x0b4001) AM_WRITENOP
|
AM_RANGE(0x0b4000, 0x0b4001) AM_WRITENOP
|
||||||
AM_RANGE(0x0b5000, 0x0b500f) AM_DEVWRITE("tilegen1", deco16ic_device, pf_control_w)
|
AM_RANGE(0x0b5000, 0x0b500f) AM_DEVWRITE("tilegen1", deco16ic_device, pf_control_w)
|
||||||
AM_RANGE(0x0b6000, 0x0b600f) AM_DEVWRITE("tilegen2", deco16ic_device, pf_control_w)
|
AM_RANGE(0x0b6000, 0x0b600f) AM_DEVWRITE("tilegen2", deco16ic_device, pf_control_w)
|
||||||
AM_RANGE(0x0b8000, 0x0b8fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
AM_RANGE(0x0b8000, 0x0b8fff) AM_RAM_WRITE(cbuster_palette_w) AM_SHARE("palette")
|
||||||
AM_RANGE(0x0b9000, 0x0b9fff) AM_RAM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext")
|
AM_RANGE(0x0b9000, 0x0b9fff) AM_RAM_WRITE(cbuster_palette_ext_w) AM_SHARE("palette_ext")
|
||||||
AM_RANGE(0x0bc000, 0x0bc00f) AM_READWRITE(twocrude_control_r, twocrude_control_w)
|
AM_RANGE(0x0bc000, 0x0bc00f) AM_READWRITE(twocrude_control_r, twocrude_control_w)
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
@ -21,6 +21,8 @@ public:
|
|||||||
m_pf3_rowscroll(*this, "pf3_rowscroll"),
|
m_pf3_rowscroll(*this, "pf3_rowscroll"),
|
||||||
m_pf4_rowscroll(*this, "pf4_rowscroll"),
|
m_pf4_rowscroll(*this, "pf4_rowscroll"),
|
||||||
m_spriteram16(*this, "spriteram16"),
|
m_spriteram16(*this, "spriteram16"),
|
||||||
|
m_paletteram(*this, "palette"),
|
||||||
|
m_paletteram_ext(*this, "palette_ext"),
|
||||||
m_sprgen(*this, "spritegen"),
|
m_sprgen(*this, "spritegen"),
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
m_audiocpu(*this, "audiocpu"),
|
m_audiocpu(*this, "audiocpu"),
|
||||||
@ -37,6 +39,8 @@ public:
|
|||||||
required_shared_ptr<uint16_t> m_pf3_rowscroll;
|
required_shared_ptr<uint16_t> m_pf3_rowscroll;
|
||||||
required_shared_ptr<uint16_t> m_pf4_rowscroll;
|
required_shared_ptr<uint16_t> m_pf4_rowscroll;
|
||||||
required_shared_ptr<uint16_t> m_spriteram16;
|
required_shared_ptr<uint16_t> m_spriteram16;
|
||||||
|
required_shared_ptr<uint16_t> m_paletteram;
|
||||||
|
required_shared_ptr<uint16_t> m_paletteram_ext;
|
||||||
optional_device<decospr_device> m_sprgen;
|
optional_device<decospr_device> m_sprgen;
|
||||||
|
|
||||||
uint16_t m_spriteram16_buffer[0x400];
|
uint16_t m_spriteram16_buffer[0x400];
|
||||||
@ -61,4 +65,7 @@ public:
|
|||||||
virtual void video_start() override;
|
virtual void video_start() override;
|
||||||
uint32_t screen_update_twocrude(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
uint32_t screen_update_twocrude(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||||
DECO16IC_BANK_CB_MEMBER(bank_callback);
|
DECO16IC_BANK_CB_MEMBER(bank_callback);
|
||||||
|
DECLARE_WRITE16_MEMBER(cbuster_palette_w);
|
||||||
|
DECLARE_WRITE16_MEMBER(cbuster_palette_ext_w);
|
||||||
|
void update_palette(int offset);
|
||||||
};
|
};
|
||||||
|
@ -22,6 +22,47 @@ void cbuster_state::video_start()
|
|||||||
m_sprgen->alloc_sprite_bitmap();
|
m_sprgen->alloc_sprite_bitmap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Crude Buster palette is a little strange compared to other Data East games
|
||||||
|
of this period. Although the digital palette is 8 bits per channel, the
|
||||||
|
analog 'white' level is set at 0x8e. In hardware this is done at the
|
||||||
|
final resistors before the JAMMA connector. It also suggests that if the
|
||||||
|
game were to use any values above 0x8e (it doesn't) then the final output
|
||||||
|
voltage would be out of spec.
|
||||||
|
|
||||||
|
I suspect this setup is actually software compensating for a hardware
|
||||||
|
design problem.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void cbuster_state::update_palette(int offset)
|
||||||
|
{
|
||||||
|
int r = m_paletteram[offset]&0xff;
|
||||||
|
int g = m_paletteram[offset]>>8;
|
||||||
|
int b = m_paletteram_ext[offset]&0xff;
|
||||||
|
|
||||||
|
if (r>0x8e) r=0x8e;
|
||||||
|
if (g>0x8e) g=0x8e;
|
||||||
|
if (b>0x8e) b=0x8e;
|
||||||
|
|
||||||
|
r = (r * 255) / 0x8e;
|
||||||
|
g = (g * 255) / 0x8e;
|
||||||
|
b = (b * 255) / 0x8e;
|
||||||
|
|
||||||
|
m_palette->set_pen_color(offset,rgb_t(r,g,b));
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE16_MEMBER(cbuster_state::cbuster_palette_w)
|
||||||
|
{
|
||||||
|
COMBINE_DATA(&m_paletteram[offset]);
|
||||||
|
update_palette(offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE16_MEMBER(cbuster_state::cbuster_palette_ext_w)
|
||||||
|
{
|
||||||
|
COMBINE_DATA(&m_paletteram_ext[offset]);
|
||||||
|
update_palette(offset);
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t cbuster_state::screen_update_twocrude(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
uint32_t cbuster_state::screen_update_twocrude(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||||
{
|
{
|
||||||
address_space &space = machine().dummy_space();
|
address_space &space = machine().dummy_space();
|
||||||
|
Loading…
Reference in New Issue
Block a user