diff --git a/src/mess/drivers/fm7.c b/src/mess/drivers/fm7.c index 410f96b17fb..787e38d4f9b 100644 --- a/src/mess/drivers/fm7.c +++ b/src/mess/drivers/fm7.c @@ -2083,10 +2083,8 @@ static MACHINE_CONFIG_START( fm7, fm7_state ) MCFG_SCREEN_SIZE(640, 200) MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1) MCFG_SCREEN_UPDATE_DRIVER(fm7_state, screen_update_fm7) - MCFG_SCREEN_PALETTE("palette") - MCFG_PALETTE_ADD("palette", 8) - MCFG_PALETTE_INIT_OWNER(fm7_state, fm7) + MCFG_PALETTE_ADD_3BIT_BRG("palette") MCFG_CASSETTE_ADD("cassette") MCFG_CASSETTE_FORMATS(fm7_cassette_formats) @@ -2141,10 +2139,8 @@ static MACHINE_CONFIG_START( fm8, fm7_state ) MCFG_SCREEN_SIZE(640, 200) MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1) MCFG_SCREEN_UPDATE_DRIVER(fm7_state, screen_update_fm7) - MCFG_SCREEN_PALETTE("palette") - MCFG_PALETTE_ADD("palette", 8) - MCFG_PALETTE_INIT_OWNER(fm7_state, fm7) + MCFG_PALETTE_ADD_3BIT_BRG("palette") MCFG_CASSETTE_ADD("cassette") MCFG_CASSETTE_FORMATS(fm7_cassette_formats) @@ -2216,10 +2212,9 @@ static MACHINE_CONFIG_START( fm77av, fm7_state ) MCFG_SCREEN_SIZE(640, 200) MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1) MCFG_SCREEN_UPDATE_DRIVER(fm7_state, screen_update_fm7) - MCFG_SCREEN_PALETTE("palette") - MCFG_PALETTE_ADD("palette", 8 + 4096) - MCFG_PALETTE_INIT_OWNER(fm7_state, fm7) + MCFG_PALETTE_ADD_3BIT_BRG("palette") + MCFG_PALETTE_ADD("av_palette", 4096) MCFG_CASSETTE_ADD("cassette") MCFG_CASSETTE_FORMATS(fm7_cassette_formats) @@ -2295,10 +2290,8 @@ static MACHINE_CONFIG_START( fm11, fm7_state ) MCFG_SCREEN_SIZE(640, 200) MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1) MCFG_SCREEN_UPDATE_DRIVER(fm7_state, screen_update_fm7) - MCFG_SCREEN_PALETTE("palette") - MCFG_PALETTE_ADD("palette", 8) - MCFG_PALETTE_INIT_OWNER(fm7_state, fm7) + MCFG_PALETTE_ADD_3BIT_BRG("palette") MCFG_CASSETTE_ADD("cassette") MCFG_CASSETTE_FORMATS(fm7_cassette_formats) @@ -2348,10 +2341,8 @@ static MACHINE_CONFIG_START( fm16beta, fm7_state ) MCFG_SCREEN_SIZE(640, 200) MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1) MCFG_SCREEN_UPDATE_DRIVER(fm7_state, screen_update_fm7) - MCFG_SCREEN_PALETTE("palette") - MCFG_PALETTE_ADD("palette", 8) - MCFG_PALETTE_INIT_OWNER(fm7_state, fm7) + MCFG_PALETTE_ADD_3BIT_BRG("palette") MCFG_CASSETTE_ADD("cassette") MCFG_CASSETTE_FORMATS(fm7_cassette_formats) diff --git a/src/mess/includes/fm7.h b/src/mess/includes/fm7.h index 6c24829cba5..797d19657f0 100644 --- a/src/mess/includes/fm7.h +++ b/src/mess/includes/fm7.h @@ -73,9 +73,6 @@ struct fm7_video_t UINT16 vram_offset2; UINT8 fm7_pal[8]; UINT16 fm77av_pal_selected; - UINT8 fm77av_pal_r[4096]; - UINT8 fm77av_pal_g[4096]; - UINT8 fm77av_pal_b[4096]; UINT8 subrom; // currently active sub CPU ROM (AV only) UINT8 cgrom; // currently active CGROM (AV only) UINT8 modestatus; @@ -148,6 +145,7 @@ public: m_joy2(*this, "joy2"), m_dsw(*this, "DSW"), m_palette(*this, "palette"), + m_av_palette(*this, "av_palette"), m_avbank1(*this, "av_bank1"), m_avbank2(*this, "av_bank2"), m_avbank3(*this, "av_bank3"), @@ -293,12 +291,11 @@ public: DECLARE_DRIVER_INIT(fm7); virtual void machine_reset(); virtual void video_start(); - DECLARE_PALETTE_INIT(fm7); DECLARE_MACHINE_START(fm7); DECLARE_MACHINE_START(fm77av); DECLARE_MACHINE_START(fm11); DECLARE_MACHINE_START(fm16); - UINT32 screen_update_fm7(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + UINT32 screen_update_fm7(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); TIMER_CALLBACK_MEMBER(fm7_beeper_off); TIMER_CALLBACK_MEMBER(fm77av_encoder_ack); TIMER_CALLBACK_MEMBER(fm7_timer_irq); @@ -367,6 +364,7 @@ public: required_ioport m_joy2; required_ioport m_dsw; required_device m_palette; + optional_device m_av_palette; optional_device m_avbank1; optional_device m_avbank2; diff --git a/src/mess/video/fm7.c b/src/mess/video/fm7.c index 0ea2c397f99..298e98c9262 100644 --- a/src/mess/video/fm7.c +++ b/src/mess/video/fm7.c @@ -916,16 +916,7 @@ READ8_MEMBER(fm7_state::fm7_palette_r) WRITE8_MEMBER(fm7_state::fm7_palette_w) { - UINT8 r = 0,g = 0,b = 0; - - if(data & 0x04) - g = 0xff; - if(data & 0x02) - r = 0xff; - if(data & 0x01) - b = 0xff; - - m_palette->set_pen_color(offset,rgb_t(r,g,b)); + m_palette->set_pen_color(offset, rgb_t(pal1bit(data >> 1), pal1bit(data >> 2), pal1bit(data >> 0))); m_video.fm7_pal[offset] = data & 0x07; } @@ -955,25 +946,13 @@ WRITE8_MEMBER(fm7_state::fm77av_analog_palette_w) m_video.fm77av_pal_selected = val; break; case 2: - m_video.fm77av_pal_b[m_video.fm77av_pal_selected] = (data & 0x0f) << 4; - m_palette->set_pen_color(m_video.fm77av_pal_selected+8, - rgb_t(m_video.fm77av_pal_r[m_video.fm77av_pal_selected], - m_video.fm77av_pal_g[m_video.fm77av_pal_selected], - m_video.fm77av_pal_b[m_video.fm77av_pal_selected])); + m_av_palette->set_pen_blue_level(m_video.fm77av_pal_selected, data << 4); break; case 3: - m_video.fm77av_pal_r[m_video.fm77av_pal_selected] = (data & 0x0f) << 4; - m_palette->set_pen_color(m_video.fm77av_pal_selected+8, - rgb_t(m_video.fm77av_pal_r[m_video.fm77av_pal_selected], - m_video.fm77av_pal_g[m_video.fm77av_pal_selected], - m_video.fm77av_pal_b[m_video.fm77av_pal_selected])); + m_av_palette->set_pen_red_level(m_video.fm77av_pal_selected, data << 4); break; case 4: - m_video.fm77av_pal_g[m_video.fm77av_pal_selected] = (data & 0x0f) << 4; - m_palette->set_pen_color(m_video.fm77av_pal_selected+8, - rgb_t(m_video.fm77av_pal_r[m_video.fm77av_pal_selected], - m_video.fm77av_pal_g[m_video.fm77av_pal_selected], - m_video.fm77av_pal_b[m_video.fm77av_pal_selected])); + m_av_palette->set_pen_green_level(m_video.fm77av_pal_selected, data << 4); break; } } @@ -1437,7 +1416,7 @@ void fm7_state::video_start() m_video.vsync_flag = 0; } -UINT32 fm7_state::screen_update_fm7(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +UINT32 fm7_state::screen_update_fm7(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { UINT8 code_r = 0,code_g = 0,code_b = 0; UINT8 code_r2 = 0,code_g2 = 0,code_b2 = 0; @@ -1485,8 +1464,7 @@ UINT32 fm7_state::screen_update_fm7(screen_device &screen, bitmap_ind16 &bitmap, col = (((code_b >> b) & 0x01) ? 8 : 0) | (((code_b2 >> b) & 0x01) ? 4 : 0) | (((code_b3 >> b) & 0x01) ? 2 : 0) | (((code_b4 >> b) & 0x01) ? 1 : 0); col |= (((code_g >> b) & 0x01) ? 128 : 0) | (((code_g2 >> b) & 0x01) ? 64 : 0) | (((code_g3 >> b) & 0x01) ? 32 : 0) | (((code_g4 >> b) & 0x01) ? 16 : 0); col |= (((code_r >> b) & 0x01) ? 2048 : 0) | (((code_r2 >> b) & 0x01) ? 1024 : 0) | (((code_r3 >> b) & 0x01) ? 512 : 0) | (((code_r4 >> b) & 0x01) ? 256 : 0); - col += 8; // use analog palette - bitmap.pix16(y, x*8+(7-b)) = col; + bitmap.pix32(y, x*8+(7-b)) = m_av_palette->pen_color(col); } } } @@ -1506,30 +1484,10 @@ UINT32 fm7_state::screen_update_fm7(screen_device &screen, bitmap_ind16 &bitmap, for (b = 0; b < 8; b++) { col = (((code_r >> b) & 0x01) ? 4 : 0) + (((code_g >> b) & 0x01) ? 2 : 0) + (((code_b >> b) & 0x01) ? 1 : 0); - bitmap.pix16(y, x*8+(7-b)) = col; + bitmap.pix32(y, x*8+(7-b)) = m_palette->pen_color(col); } } } } return 0; } - -static const rgb_t fm7_initial_palette[8] = { - rgb_t(0x00, 0x00, 0x00), // 0 - rgb_t(0x00, 0x00, 0xff), // 1 - rgb_t(0xff, 0x00, 0x00), // 2 - rgb_t(0xff, 0x00, 0xff), // 3 - rgb_t(0x00, 0xff, 0x00), // 4 - rgb_t(0x00, 0xff, 0xff), // 5 - rgb_t(0xff, 0xff, 0x00), // 6 - rgb_t(0xff, 0xff, 0xff), // 7 -}; - -PALETTE_INIT_MEMBER(fm7_state, fm7) -{ - int x; - - palette.set_pen_colors(0, fm7_initial_palette, ARRAY_LENGTH(fm7_initial_palette)); - for(x=0;x<8;x++) - m_video.fm7_pal[x] = x; -}