diff options
Diffstat (limited to 'src/mame/pc/pc_t1t.cpp')
| -rw-r--r-- | src/mame/pc/pc_t1t.cpp | 188 |
1 files changed, 92 insertions, 96 deletions
diff --git a/src/mame/pc/pc_t1t.cpp b/src/mame/pc/pc_t1t.cpp index 116382cb61f..9a484dff1d5 100644 --- a/src/mame/pc/pc_t1t.cpp +++ b/src/mame/pc/pc_t1t.cpp @@ -36,9 +36,9 @@ DEFINE_DEVICE_TYPE(PCVIDEO_PCJR, pcvideo_pcjr_device, "pcjr_graphics", " pc_t1t_device::pc_t1t_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock), device_video_interface(mconfig, *this), + device_palette_interface(mconfig, *this), m_chr_gen(*this, finder_base::DUMMY_TAG), m_mc6845(*this, "mc6845_t1000"), - m_palette(*this,"palette"), m_ram(*this, ":" RAM_TAG), m_vram(*this, "vram"), m_mode_control(0), @@ -74,6 +74,8 @@ void pc_t1t_device::device_start() { if (!m_ram->started()) throw device_missing_dependencies(); + + palette_init(); } void pcvideo_t1000_device::device_start() @@ -126,8 +128,6 @@ void pcvideo_t1000_device::device_add_mconfig(machine_config &config) screen.set_raw(XTAL(14'318'181),912,0,640,262,0,200); screen.set_screen_update(m_mc6845, FUNC(mc6845_device::screen_update)); - PALETTE(config, m_palette, FUNC(pcvideo_t1000_device::pcjr_palette), 32); - MC6845(config, m_mc6845, XTAL(14'318'181)/8); m_mc6845->set_screen(T1000_SCREEN_NAME); m_mc6845->set_show_border_area(false); @@ -146,8 +146,6 @@ void pcvideo_pcjr_device::device_add_mconfig(machine_config &config) screen.set_raw(XTAL(14'318'181), 912, 0, 640, 262, 0, 200); screen.set_screen_update(m_mc6845, FUNC(mc6845_device::screen_update)); - PALETTE(config, m_palette, FUNC(pcvideo_pcjr_device::pcjr_palette), 32); - MC6845(config, m_mc6845, XTAL(14'318'181)/16); m_mc6845->set_screen(T1000_SCREEN_NAME); m_mc6845->set_show_border_area(false); @@ -166,8 +164,8 @@ void pcvideo_pcjr_device::device_add_mconfig(machine_config &config) ***************************************************************************/ -/* Initialise the cga palette */ -void pc_t1t_device::pcjr_palette(palette_device &palette) const +// Initialise the CGA palette +void pc_t1t_device::palette_init() { static constexpr rgb_t tga_palette[16] = { @@ -179,20 +177,20 @@ void pc_t1t_device::pcjr_palette(palette_device &palette) const // colors for (int i = 0; i < 16; i++) - palette.set_pen_color(i, tga_palette[i]); + set_pen_color(i, tga_palette[i]); - /* b/w mode shades */ + // b/w mode shades for (int i = 0; i < 16; i++) - palette.set_pen_color(16+i, pal4bit(i), pal4bit(i), pal4bit(i)); + set_pen_color(16 + i, pal4bit(i), pal4bit(i), pal4bit(i)); } MC6845_UPDATE_ROW( pc_t1t_device::t1000_text_inten_update_row ) { - rgb_t const *const palette = m_palette->palette()->entry_list_raw(); + rgb_t const *const pal = palette()->entry_list_raw(); uint32_t *p = &bitmap.pix(y); - if ( y == 0 ) logerror("t1000_text_inten_update_row\n"); + if (y == 0) logerror("t1000_text_inten_update_row\n"); for (int i = 0; i < x_count; i++) { uint16_t offset = ( ( ma + i ) << 1 ) & 0x3fff; @@ -202,26 +200,24 @@ MC6845_UPDATE_ROW( pc_t1t_device::t1000_text_inten_update_row ) uint16_t fg = m_palette_base + ( attr & 0x0F ); uint16_t bg = m_palette_base + ( ( attr >> 4 ) & 0x07 ); - if ( i == cursor_x && ( m_pc_framecnt & 0x08 ) ) - { - data = 0xFF; - } - - *p++ = palette[BIT(data, 7) ? fg : bg]; - *p++ = palette[BIT(data, 6) ? fg : bg]; - *p++ = palette[BIT(data, 5) ? fg : bg]; - *p++ = palette[BIT(data, 4) ? fg : bg]; - *p++ = palette[BIT(data, 3) ? fg : bg]; - *p++ = palette[BIT(data, 2) ? fg : bg]; - *p++ = palette[BIT(data, 1) ? fg : bg]; - *p++ = palette[BIT(data, 0) ? fg : bg]; + if (i == cursor_x && (m_pc_framecnt & 0x08)) + data = 0xff; + + *p++ = pal[BIT(data, 7) ? fg : bg]; + *p++ = pal[BIT(data, 6) ? fg : bg]; + *p++ = pal[BIT(data, 5) ? fg : bg]; + *p++ = pal[BIT(data, 4) ? fg : bg]; + *p++ = pal[BIT(data, 3) ? fg : bg]; + *p++ = pal[BIT(data, 2) ? fg : bg]; + *p++ = pal[BIT(data, 1) ? fg : bg]; + *p++ = pal[BIT(data, 0) ? fg : bg]; } } MC6845_UPDATE_ROW( pc_t1t_device::t1000_text_blink_update_row ) { - rgb_t const *const palette = m_palette->palette()->entry_list_raw(); + rgb_t const *const pal = palette()->entry_list_raw(); uint32_t *p = &bitmap.pix(y); for (int i = 0; i < x_count; i++) @@ -248,20 +244,20 @@ MC6845_UPDATE_ROW( pc_t1t_device::t1000_text_blink_update_row ) } } - *p++ = palette[BIT(data, 7) ? fg : bg]; - *p++ = palette[BIT(data, 6) ? fg : bg]; - *p++ = palette[BIT(data, 5) ? fg : bg]; - *p++ = palette[BIT(data, 4) ? fg : bg]; - *p++ = palette[BIT(data, 3) ? fg : bg]; - *p++ = palette[BIT(data, 2) ? fg : bg]; - *p++ = palette[BIT(data, 1) ? fg : bg]; - *p++ = palette[BIT(data, 0) ? fg : bg]; + *p++ = pal[BIT(data, 7) ? fg : bg]; + *p++ = pal[BIT(data, 6) ? fg : bg]; + *p++ = pal[BIT(data, 5) ? fg : bg]; + *p++ = pal[BIT(data, 4) ? fg : bg]; + *p++ = pal[BIT(data, 3) ? fg : bg]; + *p++ = pal[BIT(data, 2) ? fg : bg]; + *p++ = pal[BIT(data, 1) ? fg : bg]; + *p++ = pal[BIT(data, 0) ? fg : bg]; } } MC6845_UPDATE_ROW( pcvideo_pcjr_device::pcjx_text_update_row ) { - rgb_t const *const palette = m_palette->palette()->entry_list_raw(); + rgb_t const *const pal = palette()->entry_list_raw(); uint32_t *p = &bitmap.pix(y); for (int i = 0; i < x_count; i++) @@ -288,20 +284,20 @@ MC6845_UPDATE_ROW( pcvideo_pcjr_device::pcjx_text_update_row ) else data = ((i == cursor_x) && (m_pc_framecnt & 8)) ? 0xff: 0; - *p++ = palette[BIT(data, 7) ? fg : bg]; - *p++ = palette[BIT(data, 6) ? fg : bg]; - *p++ = palette[BIT(data, 5) ? fg : bg]; - *p++ = palette[BIT(data, 4) ? fg : bg]; - *p++ = palette[BIT(data, 3) ? fg : bg]; - *p++ = palette[BIT(data, 2) ? fg : bg]; - *p++ = palette[BIT(data, 1) ? fg : bg]; - *p++ = palette[BIT(data, 0) ? fg : bg]; + *p++ = pal[BIT(data, 7) ? fg : bg]; + *p++ = pal[BIT(data, 6) ? fg : bg]; + *p++ = pal[BIT(data, 5) ? fg : bg]; + *p++ = pal[BIT(data, 4) ? fg : bg]; + *p++ = pal[BIT(data, 3) ? fg : bg]; + *p++ = pal[BIT(data, 2) ? fg : bg]; + *p++ = pal[BIT(data, 1) ? fg : bg]; + *p++ = pal[BIT(data, 0) ? fg : bg]; } } MC6845_UPDATE_ROW( pc_t1t_device::t1000_gfx_4bpp_update_row ) { - rgb_t const *const palette = m_palette->palette()->entry_list_raw(); + rgb_t const *const pal = palette()->entry_list_raw(); uint32_t *p = &bitmap.pix(y); uint8_t const *const vid = m_displayram + ( ra << 13 ); @@ -310,24 +306,24 @@ MC6845_UPDATE_ROW( pc_t1t_device::t1000_gfx_4bpp_update_row ) uint16_t offset = ( ( ma + i ) << 1 ) & 0x1fff; uint8_t data = vid[offset]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | (data >> 4)]]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | (data >> 4)]]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | (data & 0x0f)]]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | (data & 0x0f)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | (data >> 4)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | (data >> 4)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | (data & 0x0f)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | (data & 0x0f)]]; data = vid[offset + 1]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | (data >> 4)]]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | (data >> 4)]]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | (data & 0x0f)]]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | (data & 0x0f)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | (data >> 4)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | (data >> 4)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | (data & 0x0f)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | (data & 0x0f)]]; } } MC6845_UPDATE_ROW( pc_t1t_device::t1000_gfx_2bpp_update_row ) { - rgb_t const *const palette = m_palette->palette()->entry_list_raw(); + rgb_t const *const pal = palette()->entry_list_raw(); uint32_t *p = &bitmap.pix(y); uint8_t const *const vid = m_displayram + ( ra << 13 ); @@ -336,24 +332,24 @@ MC6845_UPDATE_ROW( pc_t1t_device::t1000_gfx_2bpp_update_row ) uint16_t offset = ( ( ma + i ) << 1 ) & 0x1fff; uint8_t data = vid[offset]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | ((data >> 6) & 0x03)]]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | ((data >> 4) & 0x03)]]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | ((data >> 2) & 0x03)]]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | ((data >> 0) & 0x03)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | ((data >> 6) & 0x03)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | ((data >> 4) & 0x03)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | ((data >> 2) & 0x03)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | ((data >> 0) & 0x03)]]; data = vid[offset + 1]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | ((data >> 6) & 0x03)]]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | ((data >> 4) & 0x03)]]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | ((data >> 2) & 0x03)]]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | ((data >> 0) & 0x03)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | ((data >> 6) & 0x03)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | ((data >> 4) & 0x03)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | ((data >> 2) & 0x03)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | ((data >> 0) & 0x03)]]; } } MC6845_UPDATE_ROW( pcvideo_pcjr_device::pcjr_gfx_2bpp_high_update_row ) { - rgb_t const *const palette = m_palette->palette()->entry_list_raw(); + rgb_t const *const pal = palette()->entry_list_raw(); uint32_t *p = &bitmap.pix(y); uint8_t const *const vid = m_displayram + ( ra << 13 ); @@ -363,21 +359,21 @@ MC6845_UPDATE_ROW( pcvideo_pcjr_device::pcjr_gfx_2bpp_high_update_row ) uint8_t data0 = vid[offset]; uint8_t data1 = vid[offset + 1]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | ((data0 >> 7) & 0x01) | ((data1 >> 6) & 0x02)]]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | ((data0 >> 6) & 0x01) | ((data1 >> 5) & 0x02)]]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | ((data0 >> 5) & 0x01) | ((data1 >> 4) & 0x02)]]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | ((data0 >> 4) & 0x01) | ((data1 >> 3) & 0x02)]]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | ((data0 >> 3) & 0x01) | ((data1 >> 2) & 0x02)]]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | ((data0 >> 2) & 0x01) | ((data1 >> 1) & 0x02)]]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | ((data0 >> 1) & 0x01) | ((data1 >> 0) & 0x02)]]; - *p++ = palette[m_palette_base + m_reg.data[0x10 | ((data0 >> 0) & 0x01) | ((data1 << 1) & 0x02)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | ((data0 >> 7) & 0x01) | ((data1 >> 6) & 0x02)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | ((data0 >> 6) & 0x01) | ((data1 >> 5) & 0x02)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | ((data0 >> 5) & 0x01) | ((data1 >> 4) & 0x02)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | ((data0 >> 4) & 0x01) | ((data1 >> 3) & 0x02)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | ((data0 >> 3) & 0x01) | ((data1 >> 2) & 0x02)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | ((data0 >> 2) & 0x01) | ((data1 >> 1) & 0x02)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | ((data0 >> 1) & 0x01) | ((data1 >> 0) & 0x02)]]; + *p++ = pal[m_palette_base + m_reg.data[0x10 | ((data0 >> 0) & 0x01) | ((data1 << 1) & 0x02)]]; } } MC6845_UPDATE_ROW( pc_t1t_device::t1000_gfx_2bpp_tga_update_row ) { - rgb_t const *const palette = m_palette->palette()->entry_list_raw(); + rgb_t const *const pal = palette()->entry_list_raw(); uint32_t *p = &bitmap.pix(y); uint8_t const *const vid = m_displayram + ( ra << 13 ); @@ -388,22 +384,22 @@ MC6845_UPDATE_ROW( pc_t1t_device::t1000_gfx_2bpp_tga_update_row ) uint8_t data = vid[offset]; uint8_t data2 = vid[offset + 1] << 1; - *p++ = palette[m_reg.data[0x10 | (((data2 & 0x100) | (data & 0x80)) >> 7)]]; - *p++ = palette[m_reg.data[0x10 | (((data2 & 0x080) | (data & 0x40)) >> 6)]]; - *p++ = palette[m_reg.data[0x10 | (((data2 & 0x040) | (data & 0x20)) >> 5)]]; - *p++ = palette[m_reg.data[0x10 | (((data2 & 0x020) | (data & 0x10)) >> 4)]]; + *p++ = pal[m_reg.data[0x10 | (((data2 & 0x100) | (data & 0x80)) >> 7)]]; + *p++ = pal[m_reg.data[0x10 | (((data2 & 0x080) | (data & 0x40)) >> 6)]]; + *p++ = pal[m_reg.data[0x10 | (((data2 & 0x040) | (data & 0x20)) >> 5)]]; + *p++ = pal[m_reg.data[0x10 | (((data2 & 0x020) | (data & 0x10)) >> 4)]]; - *p++ = palette[m_reg.data[0x10 | (((data2 & 0x010) | (data & 0x08)) >> 3)]]; - *p++ = palette[m_reg.data[0x10 | (((data2 & 0x008) | (data & 0x04)) >> 2)]]; - *p++ = palette[m_reg.data[0x10 | (((data2 & 0x004) | (data & 0x02)) >> 1)]]; - *p++ = palette[m_reg.data[0x10 | (((data2 & 0x002) | (data & 0x01)) >> 0)]]; + *p++ = pal[m_reg.data[0x10 | (((data2 & 0x010) | (data & 0x08)) >> 3)]]; + *p++ = pal[m_reg.data[0x10 | (((data2 & 0x008) | (data & 0x04)) >> 2)]]; + *p++ = pal[m_reg.data[0x10 | (((data2 & 0x004) | (data & 0x02)) >> 1)]]; + *p++ = pal[m_reg.data[0x10 | (((data2 & 0x002) | (data & 0x01)) >> 0)]]; } } MC6845_UPDATE_ROW( pc_t1t_device::t1000_gfx_1bpp_update_row ) { - rgb_t const *const palette = m_palette->palette()->entry_list_raw(); + rgb_t const *const pal = palette()->entry_list_raw(); uint32_t *p = &bitmap.pix(y); uint8_t const *const vid = m_displayram + ( ra << 13 ); uint8_t fg = m_palette_base + m_reg.data[0x11]; @@ -415,25 +411,25 @@ MC6845_UPDATE_ROW( pc_t1t_device::t1000_gfx_1bpp_update_row ) uint16_t offset = ( ( ma + i ) << 1 ) & 0x1fff; uint8_t data = vid[offset]; - *p++ = palette[BIT(data, 7) ? fg : bg]; - *p++ = palette[BIT(data, 6) ? fg : bg]; - *p++ = palette[BIT(data, 5) ? fg : bg]; - *p++ = palette[BIT(data, 4) ? fg : bg]; - *p++ = palette[BIT(data, 3) ? fg : bg]; - *p++ = palette[BIT(data, 2) ? fg : bg]; - *p++ = palette[BIT(data, 1) ? fg : bg]; - *p++ = palette[BIT(data, 0) ? fg : bg]; + *p++ = pal[BIT(data, 7) ? fg : bg]; + *p++ = pal[BIT(data, 6) ? fg : bg]; + *p++ = pal[BIT(data, 5) ? fg : bg]; + *p++ = pal[BIT(data, 4) ? fg : bg]; + *p++ = pal[BIT(data, 3) ? fg : bg]; + *p++ = pal[BIT(data, 2) ? fg : bg]; + *p++ = pal[BIT(data, 1) ? fg : bg]; + *p++ = pal[BIT(data, 0) ? fg : bg]; data = vid[offset + 1]; - *p++ = palette[BIT(data, 7) ? fg : bg]; - *p++ = palette[BIT(data, 6) ? fg : bg]; - *p++ = palette[BIT(data, 5) ? fg : bg]; - *p++ = palette[BIT(data, 4) ? fg : bg]; - *p++ = palette[BIT(data, 3) ? fg : bg]; - *p++ = palette[BIT(data, 2) ? fg : bg]; - *p++ = palette[BIT(data, 1) ? fg : bg]; - *p++ = palette[BIT(data, 0) ? fg : bg]; + *p++ = pal[BIT(data, 7) ? fg : bg]; + *p++ = pal[BIT(data, 6) ? fg : bg]; + *p++ = pal[BIT(data, 5) ? fg : bg]; + *p++ = pal[BIT(data, 4) ? fg : bg]; + *p++ = pal[BIT(data, 3) ? fg : bg]; + *p++ = pal[BIT(data, 2) ? fg : bg]; + *p++ = pal[BIT(data, 1) ? fg : bg]; + *p++ = pal[BIT(data, 0) ? fg : bg]; } } |
