mirror of
https://github.com/holub/mame
synced 2025-05-04 21:43:05 +03:00
1628 lines
66 KiB
C
1628 lines
66 KiB
C
/*********************************************************************
|
|
|
|
mc6847.c
|
|
|
|
Implementation of Motorola 6847 video hardware chip
|
|
|
|
Sources:
|
|
M6847 data sheet
|
|
M6847T1 info from Rainbow magazine (10/1986-12/1986)
|
|
|
|
|
|
AG AS INTEXT INV GM2 GM1 GM0
|
|
-- -- ------ --- --- --- ---
|
|
0 0 0 0 X X X Internal Alphanumerics
|
|
0 0 0 1 X X X Internal Alphanumerics Inverted
|
|
0 0 1 0 X X X External Alphanumerics
|
|
0 0 1 1 X X X External Alphanumerics Inverted
|
|
0 1 0 X X X X Semigraphics 4
|
|
0 1 1 X X X X Semigraphics 6
|
|
1 X X X 0 0 0 Graphics CG1 (64x64x4) (16 bpr)
|
|
1 X X X 0 0 1 Graphics RG1 (128x64x2) (16 bpr)
|
|
1 X X X 0 1 0 Graphics CG2 (128x64x4) (32 bpr)
|
|
1 X X X 0 1 1 Graphics RG2 (128x96x2) (16 bpr)
|
|
1 X X X 1 0 0 Graphics CG3 (128x96x4) (32 bpr)
|
|
1 X X X 1 0 1 Graphics RG3 (128x192x2) (16 bpr)
|
|
1 X X X 1 1 0 Graphics CG6 (128x192x4) (32 bpr)
|
|
1 X X X 1 1 1 Graphics RG6 (256x192x2) (32 bpr)
|
|
|
|
Note: The M6847 relies on an external source (typically a 6883 SAM chip)
|
|
to feed it bytes; so the BPR (bytes per row) figures are effectively
|
|
suggestions. Mismatching modes is responsible for the semigraphic modes
|
|
on the CoCo.
|
|
|
|
Timing:
|
|
(source Motorola M6847 Manual)
|
|
|
|
Horizontal Sync: Total Period: 227.5 clock cycles
|
|
@ CLK(0) + DHS_F - falling edge (high to low)
|
|
@ CLK(16.5) + DHS_R - rising edge (low to high)
|
|
@ CLK(42) - left border start
|
|
@ CLK(71.5) - body start
|
|
@ CLK(199.5) - right border start
|
|
@ CLK(227.5) + DHS_F - falling edge (high to low)
|
|
...
|
|
|
|
Field Sync: Total Period 262*227.5 clock cycles
|
|
@ CLK(0) + DFS_F - falling edge (high to low)
|
|
@ CLK(32*227.5) + DFS_R - rising edge (low to high)
|
|
@ CLK(262*227.5) + DFS_F - falling edge (high to low) (262.5 for the M6847Y)
|
|
|
|
DHS_F: 550ns
|
|
DHS_R: 740ns
|
|
DFS_F: 520ns
|
|
DFS_R: 500ns
|
|
|
|
The M6847T1 is a later variant of the M6847 chip that implements lower
|
|
case support and some other nifty features. This chip is in the CoCo 2B.
|
|
I have not been able to find a pinout diagram for this chip so I am
|
|
assuming that the extra text modes on the CoCo 2B are activated by the
|
|
GM2-0 pins. This needs to be confirmed.
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
#include "emu.h"
|
|
#include "video/mc6847.h"
|
|
|
|
|
|
//**************************************************************************
|
|
// CONSTANTS
|
|
//**************************************************************************
|
|
|
|
#define TOP_BORDER 25
|
|
#define USE_HORIZONTAL_CLIP false
|
|
|
|
#define TIMER_HSYNC_PERIOD (227.5)
|
|
#define TIMER_HSYNC_OFF_TIME (10.0)
|
|
#define TIMER_HSYNC_ON_TIME (TIMER_HSYNC_OFF_TIME + 16.5)
|
|
#define TIMER_FSYNC_OFF_TIME (TIMER_HSYNC_PERIOD * TOP_BORDER + TIMER_HSYNC_ON_TIME)
|
|
#define TIMER_FSYNC_ON_TIME (TIMER_HSYNC_PERIOD * (TOP_BORDER + 192) + TIMER_HSYNC_ON_TIME)
|
|
|
|
#define LOG_SCANLINE 0
|
|
#define LOG_HSYNC 0
|
|
#define LOG_FSYNC 0
|
|
|
|
|
|
const UINT32 mc6847_base_device::s_palette[mc6847_base_device::PALETTE_LENGTH] =
|
|
{
|
|
MAKE_RGB(0x07, 0xff, 0x00), /* GREEN */
|
|
MAKE_RGB(0xff, 0xff, 0x00), /* YELLOW */
|
|
MAKE_RGB(0x3b, 0x08, 0xff), /* BLUE */
|
|
MAKE_RGB(0xcc, 0x00, 0x3b), /* RED */
|
|
MAKE_RGB(0xff, 0xff, 0xff), /* BUFF */
|
|
MAKE_RGB(0x07, 0xe3, 0x99), /* CYAN */
|
|
MAKE_RGB(0xff, 0x1c, 0xff), /* MAGENTA */
|
|
MAKE_RGB(0xff, 0x81, 0x00), /* ORANGE */
|
|
|
|
MAKE_RGB(0x00, 0x00, 0x00), /* BLACK */
|
|
MAKE_RGB(0x07, 0xff, 0x00), /* GREEN */
|
|
MAKE_RGB(0x00, 0x00, 0x00), /* BLACK */
|
|
MAKE_RGB(0xff, 0xff, 0xff), /* BUFF */
|
|
|
|
MAKE_RGB(0x00, 0x7c, 0x00), /* ALPHANUMERIC DARK GREEN */
|
|
MAKE_RGB(0x07, 0xff, 0x00), /* ALPHANUMERIC BRIGHT GREEN */
|
|
MAKE_RGB(0x91, 0x00, 0x00), /* ALPHANUMERIC DARK ORANGE */
|
|
MAKE_RGB(0xff, 0x81, 0x00) /* ALPHANUMERIC BRIGHT ORANGE */
|
|
};
|
|
|
|
|
|
|
|
//**************************************************************************
|
|
// FRIEND DEVICE
|
|
//**************************************************************************
|
|
|
|
//-------------------------------------------------
|
|
// ctor
|
|
//-------------------------------------------------
|
|
|
|
mc6847_friend_device::mc6847_friend_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock,
|
|
const UINT8 *fontdata, bool is_mc6847t1, double tpfs, int field_sync_falling_edge_scanline)
|
|
: device_t(mconfig, type, name, tag, owner, clock),
|
|
m_character_map(fontdata, is_mc6847t1)
|
|
{
|
|
m_tpfs = tpfs;
|
|
|
|
// The MC6847 and the GIME apply field sync on different scanlines
|
|
m_field_sync_falling_edge_scanline = field_sync_falling_edge_scanline;
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// setup_timer - sets up a single timer relative
|
|
// to the clock
|
|
//-------------------------------------------------
|
|
|
|
ATTR_FORCE_INLINE emu_timer *mc6847_friend_device::setup_timer(device_timer_id id, double offset, double period)
|
|
{
|
|
emu_timer *timer = timer_alloc(id);
|
|
timer->adjust(
|
|
attotime::from_ticks(offset * 4, m_clock * 4),
|
|
0,
|
|
attotime::from_ticks(period * 4, m_clock * 4));
|
|
return timer;
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// device_start - device-specific startup
|
|
//-------------------------------------------------
|
|
|
|
void mc6847_friend_device::device_start(void)
|
|
{
|
|
/* create the timers */
|
|
m_frame_timer = setup_timer( TIMER_FRAME, 0, m_tpfs * TIMER_HSYNC_PERIOD);
|
|
m_hsync_on_timer = setup_timer( TIMER_HSYNC_ON, TIMER_HSYNC_ON_TIME, TIMER_HSYNC_PERIOD);
|
|
m_hsync_off_timer = setup_timer(TIMER_HSYNC_OFF, TIMER_HSYNC_OFF_TIME, TIMER_HSYNC_PERIOD);
|
|
m_fsync_timer = timer_alloc(TIMER_FSYNC);
|
|
|
|
m_top_border_scanlines = 0;
|
|
m_body_scanlines = 0;
|
|
m_wide = false;
|
|
set_geometry(25, 192, false);
|
|
|
|
/* save states */
|
|
save_item(NAME(m_physical_scanline));
|
|
save_item(NAME(m_logical_scanline));
|
|
save_item(NAME(m_logical_scanline_zone));
|
|
save_item(NAME(m_horizontal_sync));
|
|
save_item(NAME(m_field_sync));
|
|
|
|
/* artifacting */
|
|
m_artifacter.setup_config(this);
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// device_start - device-specific reset
|
|
//-------------------------------------------------
|
|
|
|
void mc6847_friend_device::device_reset(void)
|
|
{
|
|
device_t::device_reset();
|
|
m_video_changed = true;
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// device_post_load - device-specific post load
|
|
//-------------------------------------------------
|
|
|
|
void mc6847_friend_device::device_post_load(void)
|
|
{
|
|
device_t::device_post_load();
|
|
m_video_changed = true;
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// update_field_sync_timer
|
|
//-------------------------------------------------
|
|
|
|
void mc6847_friend_device::update_field_sync_timer(void)
|
|
{
|
|
/* are we expecting field sync? */
|
|
bool expected_field_sync = (m_physical_scanline < m_field_sync_falling_edge_scanline)
|
|
|| (m_logical_scanline_zone == SCANLINE_ZONE_VBLANK);
|
|
|
|
/* determine the duration */
|
|
attotime duration = (expected_field_sync != m_field_sync) ? attotime::from_ticks(160, m_clock) : attotime::never;
|
|
|
|
/* and reset the timer */
|
|
m_fsync_timer->adjust(duration, expected_field_sync ? 1 : 0);
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// device_timer
|
|
//-------------------------------------------------
|
|
|
|
void mc6847_friend_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
|
{
|
|
switch(id)
|
|
{
|
|
case TIMER_FRAME: new_frame(); break;
|
|
case TIMER_HSYNC_ON: change_horizontal_sync(true); break;
|
|
case TIMER_HSYNC_OFF: change_horizontal_sync(false); break;
|
|
case TIMER_FSYNC: change_field_sync(param != 0); break;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// new_frame
|
|
//-------------------------------------------------
|
|
|
|
ATTR_FORCE_INLINE void mc6847_friend_device::new_frame(void)
|
|
{
|
|
m_physical_scanline = 0;
|
|
m_logical_scanline = 0;
|
|
m_logical_scanline_zone = SCANLINE_ZONE_FRAME_END;
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// scanline_zone_string
|
|
//-------------------------------------------------
|
|
|
|
const char *mc6847_friend_device::scanline_zone_string(scanline_zone zone)
|
|
{
|
|
const char *result;
|
|
switch(zone)
|
|
{
|
|
case SCANLINE_ZONE_TOP_BORDER: result = "SCANLINE_ZONE_TOP_BORDER"; break;
|
|
case SCANLINE_ZONE_BODY: result = "SCANLINE_ZONE_BODY"; break;
|
|
case SCANLINE_ZONE_BOTTOM_BORDER: result = "SCANLINE_ZONE_BOTTOM_BORDER"; break;
|
|
case SCANLINE_ZONE_RETRACE: result = "SCANLINE_ZONE_RETRACE"; break;
|
|
case SCANLINE_ZONE_VBLANK: result = "SCANLINE_ZONE_VBLANK"; break;
|
|
case SCANLINE_ZONE_FRAME_END: result = "SCANLINE_ZONE_FRAME_END"; break;
|
|
default:
|
|
fatalerror("Should not get here\n");
|
|
break;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// change_horizontal_sync
|
|
//-------------------------------------------------
|
|
|
|
ATTR_FORCE_INLINE void mc6847_friend_device::change_horizontal_sync(bool line)
|
|
{
|
|
g_profiler.start(PROFILER_USER1);
|
|
if (line && !m_horizontal_sync)
|
|
{
|
|
if (LOG_SCANLINE)
|
|
logerror("%s: change_horizontal_sync(): Recording scanline\n", describe_context());
|
|
|
|
/* first store the scanline */
|
|
g_profiler.start(PROFILER_USER2);
|
|
switch((scanline_zone) m_logical_scanline_zone)
|
|
{
|
|
case SCANLINE_ZONE_TOP_BORDER:
|
|
case SCANLINE_ZONE_BOTTOM_BORDER:
|
|
record_border_scanline(m_physical_scanline);
|
|
break;
|
|
|
|
case SCANLINE_ZONE_BODY:
|
|
record_body_scanline(m_physical_scanline, m_logical_scanline);
|
|
break;
|
|
|
|
case SCANLINE_ZONE_RETRACE:
|
|
case SCANLINE_ZONE_VBLANK:
|
|
case SCANLINE_ZONE_FRAME_END:
|
|
/* do nothing */
|
|
break;
|
|
}
|
|
g_profiler.stop();
|
|
|
|
/* advance to next scanline */
|
|
next_scanline();
|
|
}
|
|
|
|
/* finally output horizontal sync */
|
|
if (line != m_horizontal_sync)
|
|
{
|
|
m_horizontal_sync = line;
|
|
|
|
/* log if apprpriate */
|
|
if (LOG_HSYNC)
|
|
logerror("%s: change_horizontal_sync(): line=%d\n", describe_context(), line ? 1 : 0);
|
|
|
|
/* invoke callback */
|
|
if (!m_res_out_hsync_func.isnull())
|
|
m_res_out_hsync_func(line);
|
|
|
|
/* call virtual function */
|
|
horizontal_sync_changed(m_horizontal_sync);
|
|
}
|
|
|
|
/* and update the field sync timer */
|
|
update_field_sync_timer();
|
|
g_profiler.stop();
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// change_field_sync
|
|
//-------------------------------------------------
|
|
|
|
ATTR_FORCE_INLINE void mc6847_friend_device::change_field_sync(bool line)
|
|
{
|
|
/* output field sync */
|
|
if (line != m_field_sync)
|
|
{
|
|
m_field_sync = line;
|
|
|
|
/* log if apprpriate */
|
|
if (LOG_FSYNC)
|
|
logerror("%s: change_field_sync(): line=%d\n", describe_context(), line ? 1 : 0);
|
|
|
|
/* invoke callback */
|
|
if (!m_res_out_fsync_func.isnull())
|
|
m_res_out_fsync_func(line);
|
|
|
|
/* call virtual function */
|
|
field_sync_changed(m_field_sync);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// next_scanline
|
|
//-------------------------------------------------
|
|
|
|
ATTR_FORCE_INLINE void mc6847_friend_device::next_scanline(void)
|
|
{
|
|
/* advance to next scanline */
|
|
m_physical_scanline++;
|
|
m_logical_scanline++;
|
|
|
|
/* check for movement into the next "zone" */
|
|
if (m_logical_scanline_zone == SCANLINE_ZONE_FRAME_END)
|
|
{
|
|
/* we're now in the top border */
|
|
m_logical_scanline = 0;
|
|
m_logical_scanline_zone = SCANLINE_ZONE_TOP_BORDER;
|
|
}
|
|
else if ((m_logical_scanline_zone < SCANLINE_ZONE_VBLANK) && (m_physical_scanline >= 25+192+26+6))
|
|
{
|
|
/* we're now into vblank */
|
|
m_logical_scanline = 0;
|
|
m_logical_scanline_zone = SCANLINE_ZONE_VBLANK;
|
|
}
|
|
else if ((m_logical_scanline_zone < SCANLINE_ZONE_RETRACE) && (m_physical_scanline >= 25+192+26))
|
|
{
|
|
/* we're now into retrace */
|
|
m_logical_scanline = 0;
|
|
m_logical_scanline_zone = SCANLINE_ZONE_RETRACE;
|
|
}
|
|
else if ((m_logical_scanline_zone == SCANLINE_ZONE_TOP_BORDER) && (m_logical_scanline >= m_top_border_scanlines))
|
|
{
|
|
/* we're now into the body */
|
|
m_logical_scanline = 0;
|
|
m_logical_scanline_zone = SCANLINE_ZONE_BODY;
|
|
}
|
|
else if ((m_logical_scanline_zone == SCANLINE_ZONE_BODY) && (m_logical_scanline >= m_body_scanlines))
|
|
{
|
|
/* we're now into the bottom border */
|
|
m_logical_scanline = 0;
|
|
m_logical_scanline_zone = SCANLINE_ZONE_BOTTOM_BORDER;
|
|
enter_bottom_border();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// horizontal_sync_changed
|
|
//-------------------------------------------------
|
|
|
|
void mc6847_friend_device::horizontal_sync_changed(bool line)
|
|
{
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// field_sync_changed
|
|
//-------------------------------------------------
|
|
|
|
void mc6847_friend_device::field_sync_changed(bool line)
|
|
{
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// enter_bottom_border
|
|
//-------------------------------------------------
|
|
|
|
void mc6847_friend_device::enter_bottom_border(void)
|
|
{
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// record_border_scanline
|
|
//-------------------------------------------------
|
|
|
|
void mc6847_friend_device::record_border_scanline(UINT16 physical_scanline)
|
|
{
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// video_flush
|
|
//-------------------------------------------------
|
|
|
|
void mc6847_friend_device::video_flush(void)
|
|
{
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// describe_context
|
|
//-------------------------------------------------
|
|
|
|
const char *mc6847_friend_device::describe_context(void)
|
|
{
|
|
static char buffer[128];
|
|
snprintf(buffer, ARRAY_LENGTH(buffer), "%s (scanline %s:%d)",
|
|
machine().describe_context(),
|
|
scanline_zone_string((scanline_zone) m_logical_scanline_zone),
|
|
m_logical_scanline);
|
|
return buffer;
|
|
}
|
|
|
|
|
|
|
|
//**************************************************************************
|
|
// BASE DEVICE
|
|
//**************************************************************************
|
|
|
|
//-------------------------------------------------
|
|
// ctor
|
|
//-------------------------------------------------
|
|
|
|
mc6847_base_device::mc6847_base_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const UINT8 *fontdata, double tpfs)
|
|
: mc6847_friend_device(mconfig, type, name, tag, owner, clock, fontdata, (type == MC6847T1_NTSC) || (type == MC6847T1_PAL), tpfs, 25+191)
|
|
{
|
|
m_palette = s_palette;
|
|
|
|
for (int i = 0; i < ARRAY_LENGTH(s_palette); i++)
|
|
{
|
|
m_bw_palette[i] = black_and_white(s_palette[i]);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// setup_fixed_mode - sets up a particular video
|
|
// mode bit with a decb callback
|
|
//-------------------------------------------------
|
|
|
|
void mc6847_base_device::setup_fixed_mode(struct devcb_read_line callback, UINT8 mode)
|
|
{
|
|
if (callback.type == DEVCB_TYPE_NULL)
|
|
{
|
|
// do nothing
|
|
}
|
|
else if (callback.type == DEVCB_TYPE_CONSTANT && (callback.index == 0 || callback.index == 1))
|
|
{
|
|
// this mode is fixed
|
|
m_fixed_mode |= (callback.index ? mode : 0x00);
|
|
m_fixed_mode_mask |= mode;
|
|
}
|
|
else
|
|
{
|
|
// for reasons of performance, we currently only support DEVCB_NULL,
|
|
// DEVCB_LINE_GND and DEVCB_LINE_VCC
|
|
emu_fatalerror("mc6847 does not support this callback type for mode bits\n");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// device_start - device-specific startup
|
|
//-------------------------------------------------
|
|
|
|
void mc6847_base_device::device_start()
|
|
{
|
|
const mc6847_interface *config = (const mc6847_interface *) static_config();
|
|
assert(config);
|
|
|
|
/* inherited function */
|
|
mc6847_friend_device::device_start();
|
|
|
|
/* setup */
|
|
memset(m_data, 0, sizeof(m_data));
|
|
|
|
/* resolve callbacks */
|
|
m_res_input_func.resolve(config->m_input_func, *this);
|
|
m_res_out_hsync_func.resolve(config->m_out_hsync_func, *this);
|
|
m_res_out_fsync_func.resolve(config->m_out_fsync_func, *this);
|
|
m_get_char_rom = config->m_get_char_rom;
|
|
|
|
/* set up fixed mode */
|
|
m_fixed_mode = 0x00;
|
|
m_fixed_mode_mask = 0x00;
|
|
setup_fixed_mode(config->m_in_gm2_func, MODE_GM2);
|
|
setup_fixed_mode(config->m_in_gm1_func, MODE_GM1);
|
|
setup_fixed_mode(config->m_in_gm0_func, MODE_GM0);
|
|
setup_fixed_mode(config->m_in_intext_func, MODE_INTEXT);
|
|
setup_fixed_mode(config->m_in_inv_func, MODE_INV);
|
|
setup_fixed_mode(config->m_in_as_func, MODE_AS);
|
|
setup_fixed_mode(config->m_in_ag_func, MODE_AG);
|
|
setup_fixed_mode(config->m_in_css_func, MODE_CSS);
|
|
|
|
/* state save */
|
|
save_item(NAME(m_dirty));
|
|
save_item(NAME(m_mode));
|
|
|
|
/* colors */
|
|
m_palette = config->m_black_and_white ? m_bw_palette : s_palette;
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// device_reset - device-specific reset
|
|
//-------------------------------------------------
|
|
|
|
void mc6847_base_device::device_reset()
|
|
{
|
|
mc6847_friend_device::device_reset();
|
|
m_mode = m_fixed_mode;
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// record_scanline_res
|
|
//-------------------------------------------------
|
|
|
|
template<int sample_count, int yres>
|
|
void mc6847_base_device::record_scanline_res(int scanline)
|
|
{
|
|
int i, column;
|
|
UINT8 data;
|
|
|
|
/* calculate offset */
|
|
offs_t offset = scanline / (192 / yres) * sample_count;
|
|
|
|
/* main loop */
|
|
for (column = 0; column < sample_count; column++)
|
|
{
|
|
/* input data */
|
|
data = m_res_input_func(offset++);
|
|
|
|
/* update values */
|
|
update_value(&m_data[scanline].m_mode[column], simplify_mode(data, m_mode));
|
|
update_value(&m_data[scanline].m_data[column], data);
|
|
}
|
|
|
|
/* several more inputs occur after hblank */
|
|
for (i = 0; i < sample_count * 5 / 16; i++)
|
|
{
|
|
data = m_res_input_func(offset++);
|
|
}
|
|
|
|
/* update sample count */
|
|
update_value(&m_data[scanline].m_sample_count, (UINT8) sample_count);
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// record_body_scanline
|
|
//-------------------------------------------------
|
|
|
|
void mc6847_base_device::record_body_scanline(UINT16 physical_scanline, UINT16 scanline)
|
|
{
|
|
// sanity checks
|
|
assert(scanline < 192);
|
|
|
|
if (m_mode & MODE_AG)
|
|
{
|
|
switch(m_mode & (MODE_GM2|MODE_GM1|MODE_GM0))
|
|
{
|
|
case 0:
|
|
case MODE_GM0:
|
|
record_scanline_res<16, 64>(scanline);
|
|
break;
|
|
|
|
case MODE_GM1:
|
|
record_scanline_res<32, 64>(scanline);
|
|
break;
|
|
|
|
case MODE_GM1|MODE_GM0:
|
|
record_scanline_res<16, 96>(scanline);
|
|
break;
|
|
|
|
case MODE_GM2:
|
|
record_scanline_res<32, 96>(scanline);
|
|
break;
|
|
|
|
case MODE_GM2|MODE_GM0:
|
|
record_scanline_res<16, 192>(scanline);
|
|
break;
|
|
|
|
case MODE_GM2|MODE_GM1:
|
|
case MODE_GM2|MODE_GM1|MODE_GM0:
|
|
record_scanline_res<32, 192>(scanline);
|
|
break;
|
|
|
|
default:
|
|
/* should not get here */
|
|
fatalerror("should not get here\n");
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
record_scanline_res<32, 16>(scanline);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// field_sync_changed
|
|
//-------------------------------------------------
|
|
|
|
void mc6847_base_device::field_sync_changed(bool line)
|
|
{
|
|
/* when field sync is on, the DA* enter the Hi-Z state */
|
|
if (line && !m_res_input_func.isnull())
|
|
m_res_input_func(~0);
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// border_value
|
|
//-------------------------------------------------
|
|
|
|
ATTR_FORCE_INLINE mc6847_base_device::pixel_t mc6847_base_device::border_value(UINT8 mode, const pixel_t *palette, bool is_mc6847t1)
|
|
{
|
|
pixel_t result;
|
|
switch(mc6847_friend_device::border_value(mode, is_mc6847t1))
|
|
{
|
|
case BORDER_COLOR_BLACK:
|
|
result = palette[8];
|
|
break;
|
|
case BORDER_COLOR_GREEN:
|
|
result = palette[0];
|
|
break;
|
|
case BORDER_COLOR_WHITE:
|
|
result = palette[4];
|
|
break;
|
|
case BORDER_COLOR_ORANGE:
|
|
result = palette[7];
|
|
break;
|
|
default:
|
|
fatalerror("Should not get here\n");
|
|
break;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// update
|
|
//-------------------------------------------------
|
|
|
|
UINT32 mc6847_base_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
|
{
|
|
int base_x = 32;
|
|
int base_y = 25;
|
|
int x, x2, y;
|
|
bool is_mc6847t1 = (type() == MC6847T1_NTSC) || (type() == MC6847T1_PAL);
|
|
int min_x = USE_HORIZONTAL_CLIP ? cliprect.min_x : 0;
|
|
int max_x = USE_HORIZONTAL_CLIP ? cliprect.max_x : (base_x * 2 + 256 - 1);
|
|
int min_y = cliprect.min_y;
|
|
int max_y = cliprect.max_y;
|
|
const pixel_t *palette = m_palette;
|
|
|
|
/* if the video didn't change, indicate as much */
|
|
if (!has_video_changed())
|
|
return UPDATE_HAS_NOT_CHANGED;
|
|
|
|
/* top border */
|
|
for (y = min_y; y < base_y; y++)
|
|
{
|
|
for (x = min_x; x <= max_x; x++)
|
|
{
|
|
*bitmap_addr(bitmap, y, x) = border_value(m_data[0].m_mode[0], palette, is_mc6847t1);
|
|
}
|
|
}
|
|
|
|
for (y = MAX(0, min_y - base_y); y <= MIN(192, max_y - base_y); y++)
|
|
{
|
|
/* left border */
|
|
for (x = min_x; x < base_x; x++)
|
|
{
|
|
*bitmap_addr(bitmap, y + base_y, x) = border_value(m_data[y].m_mode[0], palette, is_mc6847t1);
|
|
}
|
|
|
|
/* body */
|
|
x = 0;
|
|
int width = m_data[y].m_sample_count;
|
|
pixel_t *RESTRICT pixels = bitmap_addr(bitmap, base_y + y, base_x);
|
|
while(x < width)
|
|
{
|
|
/* determine how many bytes exist for which the mode is identical */
|
|
for (x2 = x + 1; (x2 < width) && (m_data[y].m_mode[x] == m_data[y].m_mode[x2]); x2++)
|
|
;
|
|
|
|
/* emit the samples */
|
|
pixels += emit_mc6847_samples<1>(
|
|
m_data[y].m_mode[x],
|
|
&m_data[y].m_data[x],
|
|
x2 - x,
|
|
pixels,
|
|
m_palette,
|
|
m_get_char_rom,
|
|
x,
|
|
y);
|
|
|
|
/* update x */
|
|
x = x2;
|
|
}
|
|
|
|
/* right border */
|
|
for (x = base_x + 256; x <= max_x; x++)
|
|
{
|
|
*bitmap_addr(bitmap, y + base_y, x) = border_value(m_data[y].m_mode[width - 1], palette, is_mc6847t1);
|
|
}
|
|
|
|
/* artifacting */
|
|
m_artifacter.process_artifacts<1>(bitmap_addr(bitmap, y + base_y, base_x), m_data[y].m_mode[0], palette);
|
|
}
|
|
|
|
/* bottom border */
|
|
for (y = base_y + 192; y <= max_y; y++)
|
|
{
|
|
for (x = min_x; x <= max_x; x++)
|
|
{
|
|
int width = m_data[191].m_sample_count;
|
|
*bitmap_addr(bitmap, y, x) = border_value(m_data[191].m_mode[width - 1], palette, is_mc6847t1);
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
//**************************************************************************
|
|
// CHARACTER MAP
|
|
//**************************************************************************
|
|
|
|
mc6847_friend_device::character_map::character_map(const UINT8 *text_fontdata, bool is_mc6847t1)
|
|
{
|
|
int mode, i;
|
|
|
|
// set up font data
|
|
for (i = 0; i < 64*12; i++)
|
|
{
|
|
m_text_fontdata_inverse[i] = text_fontdata[i] ^ 0xFF;
|
|
m_text_fontdata_lower_case[i] = text_fontdata[i + (i < 32*12 ? 64*12 : 0)] ^ (i < 32*12 ? 0xFF : 0x00);
|
|
m_text_fontdata_lower_case_inverse[i] = m_text_fontdata_lower_case[i] ^ 0xFF;
|
|
}
|
|
|
|
// loop through all modes
|
|
for (mode = 0; mode < sizeof(m_entries) / sizeof(m_entries[0]); mode++)
|
|
{
|
|
const UINT8 *fontdata;
|
|
UINT8 character_mask;
|
|
UINT8 color_shift_0 = 0;
|
|
UINT8 color_shift_1 = 0;
|
|
UINT8 color_mask_0 = 0x00;
|
|
UINT8 color_mask_1 = 0x00;
|
|
UINT16 color_base_0;
|
|
UINT16 color_base_1;
|
|
|
|
if ((mode & MODE_INTEXT) && !is_mc6847t1)
|
|
{
|
|
// semigraphics 6
|
|
fontdata = semigraphics6_fontdata8x12;
|
|
character_mask = 0x3F;
|
|
color_base_0 = 8;
|
|
color_base_1 = mode & MODE_CSS ? 4 : 0;
|
|
color_shift_1 = 6;
|
|
color_mask_1 = 0x03;
|
|
}
|
|
else if (mode & MODE_AS)
|
|
{
|
|
// semigraphics 4
|
|
fontdata = semigraphics4_fontdata8x12;
|
|
character_mask = 0x0F;
|
|
color_base_0 = 8;
|
|
color_base_1 = 0;
|
|
color_shift_1 = 4;
|
|
color_mask_1 = 0x07;
|
|
}
|
|
else
|
|
{
|
|
// text
|
|
bool is_lower_case = is_mc6847t1 && ((mode & MODE_INV) == 0) && (mode & MODE_GM0);
|
|
bool is_inverse1 = (mode & MODE_INV) ? true : false;
|
|
bool is_inverse2 = is_mc6847t1 && (mode & MODE_GM1);
|
|
bool is_inverse = (is_inverse1 && !is_inverse2) || (!is_inverse1 && is_inverse2);
|
|
fontdata = is_inverse
|
|
? (is_lower_case ? m_text_fontdata_lower_case_inverse : m_text_fontdata_inverse)
|
|
: (is_lower_case ? m_text_fontdata_lower_case : text_fontdata);
|
|
character_mask = 0x3F;
|
|
color_base_0 = (mode & MODE_CSS ? 14 : 12);
|
|
color_base_1 = (mode & MODE_CSS ? 15 : 13);
|
|
}
|
|
|
|
// populate the entry
|
|
memset(&m_entries[mode], 0, sizeof(m_entries[mode]));
|
|
m_entries[mode].m_fontdata = fontdata;
|
|
m_entries[mode].m_character_mask = character_mask;
|
|
m_entries[mode].m_color_shift_0 = color_shift_0;
|
|
m_entries[mode].m_color_shift_1 = color_shift_1;
|
|
m_entries[mode].m_color_mask_0 = color_mask_0;
|
|
m_entries[mode].m_color_mask_1 = color_mask_1;
|
|
m_entries[mode].m_color_base_0 = color_base_0;
|
|
m_entries[mode].m_color_base_1 = color_base_1;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// pal_round_fontdata8x12
|
|
//-------------------------------------------------
|
|
|
|
const UINT8 mc6847_friend_device::pal_round_fontdata8x12[] =
|
|
{
|
|
0x00, 0x00, 0x38, 0x44, 0x04, 0x34, 0x4C, 0x4C, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x10, 0x28, 0x44, 0x44, 0x7C, 0x44, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x78, 0x24, 0x24, 0x38, 0x24, 0x24, 0x78, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x40, 0x40, 0x40, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x78, 0x24, 0x24, 0x24, 0x24, 0x24, 0x78, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x7C, 0x40, 0x40, 0x70, 0x40, 0x40, 0x7C, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x7C, 0x40, 0x40, 0x70, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x40, 0x40, 0x4C, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x44, 0x44, 0x44, 0x7C, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x44, 0x48, 0x50, 0x60, 0x50, 0x48, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7C, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x44, 0x6C, 0x54, 0x54, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x44, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x78, 0x44, 0x44, 0x78, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x54, 0x48, 0x34, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x78, 0x44, 0x44, 0x78, 0x50, 0x48, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x40, 0x38, 0x04, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x7C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x44, 0x44, 0x44, 0x28, 0x28, 0x10, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x54, 0x6C, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x44, 0x44, 0x28, 0x10, 0x28, 0x44, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x44, 0x44, 0x28, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x7C, 0x04, 0x08, 0x10, 0x20, 0x40, 0x7C, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x20, 0x20, 0x20, 0x20, 0x20, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x08, 0x08, 0x08, 0x08, 0x08, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x10, 0x38, 0x54, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x10, 0x20, 0x7C, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x28, 0x28, 0x7C, 0x28, 0x7C, 0x28, 0x28, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x10, 0x3C, 0x50, 0x38, 0x14, 0x78, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x60, 0x64, 0x08, 0x10, 0x20, 0x4C, 0x0C, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x20, 0x50, 0x50, 0x20, 0x54, 0x48, 0x34, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x08, 0x10, 0x20, 0x20, 0x20, 0x10, 0x08, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x20, 0x10, 0x08, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x10, 0x54, 0x38, 0x38, 0x54, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x10, 0x10, 0x7C, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x40, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x4C, 0x54, 0x64, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x10, 0x30, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x04, 0x38, 0x40, 0x40, 0x7C, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x04, 0x08, 0x04, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x08, 0x18, 0x28, 0x48, 0x7C, 0x08, 0x08, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x7C, 0x40, 0x78, 0x04, 0x04, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x40, 0x40, 0x78, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x7C, 0x04, 0x08, 0x10, 0x20, 0x40, 0x40, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x44, 0x38, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x44, 0x3C, 0x04, 0x04, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x10, 0x20, 0x00, 0x00,
|
|
0x00, 0x00, 0x08, 0x10, 0x20, 0x40, 0x20, 0x10, 0x08, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x04, 0x08, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00,
|
|
|
|
/* Lower case */
|
|
0x00, 0x00, 0x18, 0x24, 0x20, 0x70, 0x20, 0x24, 0x78, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x38, 0x04, 0x3C, 0x44, 0x3C, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x40, 0x40, 0x58, 0x64, 0x44, 0x64, 0x58, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x40, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x04, 0x04, 0x34, 0x4C, 0x44, 0x4C, 0x34, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x7C, 0x40, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x08, 0x14, 0x10, 0x38, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x34, 0x4C, 0x44, 0x4C, 0x34, 0x04, 0x38, 0x00,
|
|
0x00, 0x00, 0x40, 0x40, 0x58, 0x64, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x10, 0x00, 0x30, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x04, 0x04, 0x44, 0x38, 0x00, 0x00,
|
|
0x00, 0x00, 0x40, 0x40, 0x48, 0x50, 0x60, 0x50, 0x48, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x78, 0x54, 0x54, 0x54, 0x54, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x58, 0x64, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x78, 0x44, 0x44, 0x44, 0x78, 0x40, 0x40, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x3C, 0x44, 0x44, 0x44, 0x3C, 0x04, 0x04, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x58, 0x64, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x3C, 0x40, 0x38, 0x04, 0x78, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x20, 0x20, 0x70, 0x20, 0x20, 0x24, 0x18, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x4C, 0x34, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x28, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x44, 0x54, 0x54, 0x28, 0x28, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x3C, 0x04, 0x38, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x7C, 0x08, 0x10, 0x20, 0x7C, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x08, 0x10, 0x10, 0x20, 0x10, 0x10, 0x08, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x20, 0x10, 0x10, 0x08, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x20, 0x54, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00
|
|
};
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// pal_square_fontdata8x12
|
|
//-------------------------------------------------
|
|
|
|
const UINT8 mc6847_friend_device::pal_square_fontdata8x12[] =
|
|
{
|
|
0x00, 0x00, 0x00, 0x1C, 0x22, 0x02, 0x1A, 0x2A, 0x2A, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x14, 0x22, 0x22, 0x3E, 0x22, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3C, 0x12, 0x12, 0x1C, 0x12, 0x12, 0x3C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x1C, 0x22, 0x20, 0x20, 0x20, 0x22, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3C, 0x12, 0x12, 0x12, 0x12, 0x12, 0x3C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3E, 0x20, 0x20, 0x3C, 0x20, 0x20, 0x3E, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3E, 0x20, 0x20, 0x3C, 0x20, 0x20, 0x20, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x1E, 0x20, 0x20, 0x26, 0x22, 0x22, 0x1E, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x3E, 0x22, 0x22, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x1C, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x22, 0x22, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x22, 0x24, 0x28, 0x30, 0x28, 0x24, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3E, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x22, 0x36, 0x2A, 0x2A, 0x22, 0x22, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x22, 0x32, 0x2A, 0x26, 0x22, 0x22, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3E, 0x22, 0x22, 0x22, 0x22, 0x22, 0x3E, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3C, 0x22, 0x22, 0x3C, 0x20, 0x20, 0x20, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x1C, 0x22, 0x22, 0x22, 0x2A, 0x24, 0x1A, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3C, 0x22, 0x22, 0x3C, 0x28, 0x24, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x1C, 0x22, 0x10, 0x08, 0x04, 0x22, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3E, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x14, 0x14, 0x08, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x2A, 0x2A, 0x36, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x22, 0x22, 0x14, 0x08, 0x14, 0x22, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x22, 0x22, 0x14, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3E, 0x02, 0x04, 0x08, 0x10, 0x20, 0x3E, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x38, 0x20, 0x20, 0x20, 0x20, 0x20, 0x38, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x02, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x0E, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0E, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x3E, 0x10, 0x08, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x14, 0x14, 0x36, 0x00, 0x36, 0x14, 0x14, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x1E, 0x20, 0x1C, 0x02, 0x3C, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x32, 0x32, 0x04, 0x08, 0x10, 0x26, 0x26, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x10, 0x28, 0x28, 0x10, 0x2A, 0x24, 0x1A, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x10, 0x20, 0x20, 0x20, 0x10, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x04, 0x02, 0x02, 0x02, 0x04, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x3E, 0x1C, 0x08, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x10, 0x20, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x02, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x18, 0x24, 0x24, 0x24, 0x24, 0x24, 0x18, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x18, 0x08, 0x08, 0x08, 0x08, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x1C, 0x22, 0x02, 0x1C, 0x20, 0x20, 0x3E, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x1C, 0x22, 0x02, 0x0C, 0x02, 0x22, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x04, 0x0C, 0x14, 0x3E, 0x04, 0x04, 0x04, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3E, 0x20, 0x3C, 0x02, 0x02, 0x22, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x1C, 0x20, 0x20, 0x3C, 0x22, 0x22, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3E, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x1C, 0x22, 0x22, 0x1C, 0x22, 0x22, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x1C, 0x22, 0x22, 0x1E, 0x02, 0x02, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x08, 0x10, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x18, 0x24, 0x04, 0x08, 0x08, 0x00, 0x08, 0x00, 0x00,
|
|
|
|
/* Lower case */
|
|
0x00, 0x00, 0x00, 0x0C, 0x12, 0x10, 0x38, 0x10, 0x12, 0x3C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x1E, 0x22, 0x1E, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x20, 0x20, 0x3C, 0x22, 0x22, 0x22, 0x3C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x20, 0x20, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x02, 0x02, 0x1E, 0x22, 0x22, 0x22, 0x1E, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x22, 0x3E, 0x20, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x0C, 0x12, 0x10, 0x38, 0x10, 0x10, 0x10, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x22, 0x22, 0x22, 0x1E, 0x02, 0x1C,
|
|
0x00, 0x00, 0x00, 0x20, 0x20, 0x3C, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x08, 0x08, 0x08, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x04, 0x00, 0x0C, 0x04, 0x04, 0x04, 0x04, 0x24, 0x18,
|
|
0x00, 0x00, 0x00, 0x20, 0x20, 0x24, 0x28, 0x38, 0x24, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x18, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x2A, 0x2A, 0x2A, 0x2A, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x32, 0x22, 0x22, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x22, 0x22, 0x22, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x22, 0x22, 0x22, 0x3C, 0x20, 0x20,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x22, 0x22, 0x22, 0x1E, 0x02, 0x03,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x20, 0x1C, 0x02, 0x3C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x10, 0x3C, 0x10, 0x10, 0x10, 0x12, 0x0C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x26, 0x1A, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x14, 0x14, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x2A, 0x2A, 0x1C, 0x14, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x14, 0x08, 0x14, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x1E, 0x02, 0x1C,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x04, 0x08, 0x10, 0x3E, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x10, 0x10, 0x20, 0x10, 0x10, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x00, 0x08, 0x08, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0x02, 0x04, 0x04, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x04, 0x3E, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00,
|
|
};
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// ntsc_round_fontdata8x12
|
|
//-------------------------------------------------
|
|
|
|
const UINT8 mc6847_friend_device::ntsc_round_fontdata8x12[] =
|
|
{
|
|
0x00, 0x00, 0x38, 0x44, 0x04, 0x34, 0x4C, 0x4C, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x10, 0x28, 0x44, 0x44, 0x7C, 0x44, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x78, 0x24, 0x24, 0x38, 0x24, 0x24, 0x78, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x40, 0x40, 0x40, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x78, 0x24, 0x24, 0x24, 0x24, 0x24, 0x78, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x7C, 0x40, 0x40, 0x70, 0x40, 0x40, 0x7C, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x7C, 0x40, 0x40, 0x70, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x40, 0x40, 0x4C, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x44, 0x44, 0x44, 0x7C, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x44, 0x48, 0x50, 0x60, 0x50, 0x48, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7C, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x44, 0x6C, 0x54, 0x54, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x44, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x78, 0x44, 0x44, 0x78, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x54, 0x48, 0x34, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x78, 0x44, 0x44, 0x78, 0x50, 0x48, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x40, 0x38, 0x04, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x7C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x44, 0x44, 0x44, 0x28, 0x28, 0x10, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x54, 0x6C, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x44, 0x44, 0x28, 0x10, 0x28, 0x44, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x44, 0x44, 0x28, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x7C, 0x04, 0x08, 0x10, 0x20, 0x40, 0x7C, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x20, 0x20, 0x20, 0x20, 0x20, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x08, 0x08, 0x08, 0x08, 0x08, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x10, 0x38, 0x54, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x10, 0x20, 0x7C, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x28, 0x28, 0x7C, 0x28, 0x7C, 0x28, 0x28, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x10, 0x3C, 0x50, 0x38, 0x14, 0x78, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x60, 0x64, 0x08, 0x10, 0x20, 0x4C, 0x0C, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x20, 0x50, 0x50, 0x20, 0x54, 0x48, 0x34, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x08, 0x10, 0x20, 0x20, 0x20, 0x10, 0x08, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x20, 0x10, 0x08, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x10, 0x54, 0x38, 0x38, 0x54, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x10, 0x10, 0x7C, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x40, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x4C, 0x54, 0x64, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x10, 0x30, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x04, 0x38, 0x40, 0x40, 0x7C, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x04, 0x08, 0x04, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x08, 0x18, 0x28, 0x48, 0x7C, 0x08, 0x08, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x7C, 0x40, 0x78, 0x04, 0x04, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x40, 0x40, 0x78, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x7C, 0x04, 0x08, 0x10, 0x20, 0x40, 0x40, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x44, 0x38, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x44, 0x3C, 0x04, 0x04, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x10, 0x20, 0x00, 0x00,
|
|
0x00, 0x00, 0x08, 0x10, 0x20, 0x40, 0x20, 0x10, 0x08, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x38, 0x44, 0x04, 0x08, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00,
|
|
|
|
/* Lower case */
|
|
0x00, 0x00, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x38, 0x04, 0x3C, 0x44, 0x3C, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x40, 0x40, 0x58, 0x64, 0x44, 0x64, 0x58, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x40, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x04, 0x04, 0x34, 0x4C, 0x44, 0x4C, 0x34, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x7C, 0x40, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x08, 0x14, 0x10, 0x38, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x34, 0x4C, 0x44, 0x4C, 0x34, 0x04, 0x38, 0x00,
|
|
0x00, 0x00, 0x40, 0x40, 0x58, 0x64, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x10, 0x00, 0x30, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x04, 0x04, 0x44, 0x38, 0x00, 0x00,
|
|
0x00, 0x00, 0x40, 0x40, 0x48, 0x50, 0x60, 0x50, 0x48, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x78, 0x54, 0x54, 0x54, 0x54, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x58, 0x64, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x78, 0x44, 0x44, 0x44, 0x78, 0x40, 0x40, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x3C, 0x44, 0x44, 0x44, 0x3C, 0x04, 0x04, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x58, 0x64, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x3C, 0x40, 0x38, 0x04, 0x78, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x20, 0x20, 0x70, 0x20, 0x20, 0x24, 0x18, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x4C, 0x34, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x28, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x44, 0x54, 0x54, 0x28, 0x28, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x3C, 0x04, 0x38, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x7C, 0x08, 0x10, 0x20, 0x7C, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x08, 0x10, 0x10, 0x20, 0x10, 0x10, 0x08, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x20, 0x10, 0x10, 0x08, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x20, 0x54, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00,
|
|
};
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// ntsc_square_fontdata8x12
|
|
//-------------------------------------------------
|
|
|
|
const UINT8 mc6847_friend_device::ntsc_square_fontdata8x12[] =
|
|
{
|
|
0x00, 0x00, 0x00, 0x1C, 0x22, 0x02, 0x1A, 0x2A, 0x2A, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x14, 0x22, 0x22, 0x3E, 0x22, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3C, 0x12, 0x12, 0x1C, 0x12, 0x12, 0x3C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x1C, 0x22, 0x20, 0x20, 0x20, 0x22, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3C, 0x12, 0x12, 0x12, 0x12, 0x12, 0x3C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3E, 0x20, 0x20, 0x38, 0x20, 0x20, 0x3E, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3E, 0x20, 0x20, 0x38, 0x20, 0x20, 0x20, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x1E, 0x20, 0x20, 0x26, 0x22, 0x22, 0x1E, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x3E, 0x22, 0x22, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x1C, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x22, 0x22, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x22, 0x24, 0x28, 0x30, 0x28, 0x24, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3E, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x22, 0x36, 0x2A, 0x2A, 0x22, 0x22, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x22, 0x32, 0x2A, 0x26, 0x22, 0x22, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3E, 0x22, 0x22, 0x22, 0x22, 0x22, 0x3E, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3C, 0x22, 0x22, 0x3C, 0x20, 0x20, 0x20, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x1C, 0x22, 0x22, 0x22, 0x2A, 0x24, 0x1A, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3C, 0x22, 0x22, 0x3C, 0x28, 0x24, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x1C, 0x22, 0x10, 0x08, 0x04, 0x22, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3E, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x14, 0x14, 0x08, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x2A, 0x2A, 0x36, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x22, 0x22, 0x14, 0x08, 0x14, 0x22, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x22, 0x22, 0x14, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3E, 0x02, 0x04, 0x08, 0x10, 0x20, 0x3E, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x38, 0x20, 0x20, 0x20, 0x20, 0x20, 0x38, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x02, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x0E, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0E, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x3E, 0x10, 0x08, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x14, 0x14, 0x36, 0x00, 0x36, 0x14, 0x14, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x1E, 0x20, 0x1C, 0x02, 0x3C, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x32, 0x32, 0x04, 0x08, 0x10, 0x26, 0x26, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x10, 0x28, 0x28, 0x10, 0x2A, 0x24, 0x1A, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x10, 0x20, 0x20, 0x20, 0x10, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x04, 0x02, 0x02, 0x02, 0x04, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x08, 0x1C, 0x3E, 0x1C, 0x08, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x10, 0x20, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x02, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x18, 0x24, 0x24, 0x24, 0x24, 0x24, 0x18, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x18, 0x08, 0x08, 0x08, 0x08, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x1C, 0x22, 0x02, 0x1C, 0x20, 0x20, 0x3E, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x1C, 0x22, 0x02, 0x04, 0x02, 0x22, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x04, 0x0C, 0x14, 0x3E, 0x04, 0x04, 0x04, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3E, 0x20, 0x3C, 0x02, 0x02, 0x22, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x1C, 0x20, 0x20, 0x3C, 0x22, 0x22, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x3E, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x1C, 0x22, 0x22, 0x1C, 0x22, 0x22, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x1C, 0x22, 0x22, 0x1E, 0x02, 0x02, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x08, 0x10, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x18, 0x24, 0x04, 0x08, 0x08, 0x00, 0x08, 0x00, 0x00,
|
|
|
|
/* Lower case */
|
|
0x00, 0x00, 0x00, 0x0C, 0x12, 0x10, 0x38, 0x10, 0x12, 0x3C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x02, 0x1E, 0x22, 0x1E, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x20, 0x20, 0x3C, 0x22, 0x22, 0x22, 0x3C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x20, 0x20, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x02, 0x02, 0x1E, 0x22, 0x22, 0x22, 0x1E, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x22, 0x3E, 0x20, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x0C, 0x12, 0x10, 0x38, 0x10, 0x10, 0x10, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x22, 0x22, 0x22, 0x1E, 0x02, 0x1C,
|
|
0x00, 0x00, 0x00, 0x20, 0x20, 0x3C, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x08, 0x08, 0x08, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x04, 0x00, 0x0C, 0x04, 0x04, 0x04, 0x04, 0x24, 0x18,
|
|
0x00, 0x00, 0x00, 0x20, 0x20, 0x24, 0x28, 0x38, 0x24, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x18, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x2A, 0x2A, 0x2A, 0x2A, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x32, 0x22, 0x22, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x22, 0x22, 0x22, 0x1C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x22, 0x22, 0x22, 0x3C, 0x20, 0x20,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x22, 0x22, 0x22, 0x1E, 0x02, 0x03,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x20, 0x1C, 0x02, 0x3C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x10, 0x3C, 0x10, 0x10, 0x10, 0x12, 0x0C, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x26, 0x1A, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x14, 0x14, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x2A, 0x2A, 0x1C, 0x14, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x14, 0x08, 0x14, 0x22, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x1E, 0x02, 0x1C,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x04, 0x08, 0x10, 0x3E, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x10, 0x10, 0x20, 0x10, 0x10, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x00, 0x08, 0x08, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0x02, 0x04, 0x04, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x08, 0x04, 0x3E, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00
|
|
};
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// semigraphics4_fontdata8x12
|
|
//-------------------------------------------------
|
|
|
|
const UINT8 mc6847_friend_device::semigraphics4_fontdata8x12[] =
|
|
{
|
|
/* Block Graphics (Semigraphics 4 Graphics ) */
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
|
|
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
|
|
0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
|
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
|
|
};
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// semigraphics6_fontdata8x12
|
|
//-------------------------------------------------
|
|
|
|
const UINT8 mc6847_friend_device::semigraphics6_fontdata8x12[] =
|
|
{
|
|
/* Semigraphics 6 */
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0,
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0,
|
|
0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
|
|
0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0,
|
|
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0,
|
|
0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00,
|
|
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0,
|
|
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00,
|
|
0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
|
|
0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
|
0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0,
|
|
0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0,
|
|
0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00,
|
|
0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0,
|
|
0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00,
|
|
0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
|
|
0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
|
0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0,
|
|
0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0,
|
|
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00,
|
|
0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0,
|
|
0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00,
|
|
0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
|
|
0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F,
|
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0,
|
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
|
|
};
|
|
|
|
|
|
|
|
//**************************************************************************
|
|
// ARTIFACTING
|
|
//**************************************************************************
|
|
|
|
INPUT_PORTS_START(mc6847_artifacting)
|
|
PORT_START(ARTIFACTING_TAG)
|
|
PORT_CONFNAME( 0x03, 0x01, "Artifacting" )
|
|
PORT_CONFSETTING( 0x00, DEF_STR( Off ) )
|
|
PORT_CONFSETTING( 0x01, DEF_STR( Standard ) )
|
|
PORT_CONFSETTING( 0x02, DEF_STR( Reverse ) )
|
|
INPUT_PORTS_END
|
|
|
|
ioport_constructor mc6847_base_device::device_input_ports() const
|
|
{
|
|
return INPUT_PORTS_NAME(mc6847_artifacting);
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// ctor
|
|
//-------------------------------------------------
|
|
|
|
mc6847_base_device::artifacter::artifacter()
|
|
{
|
|
m_config = NULL;
|
|
m_artifacting = 0;
|
|
m_saved_artifacting = 0;
|
|
m_saved_c0 = 0;
|
|
m_saved_c1 = 0;
|
|
memset(m_expanded_colors, 0, sizeof(m_expanded_colors));
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// artifacter::setup_config
|
|
//-------------------------------------------------
|
|
|
|
void mc6847_base_device::artifacter::setup_config(device_t *device)
|
|
{
|
|
char port_name[32];
|
|
snprintf(port_name, ARRAY_LENGTH(port_name), "%s:%s", device->tag(), ARTIFACTING_TAG);
|
|
m_config = device->ioport(port_name);
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// artifacter::update_colors
|
|
//-------------------------------------------------
|
|
|
|
void mc6847_base_device::artifacter::update_colors(pixel_t c0, pixel_t c1)
|
|
{
|
|
/* Boy this code sucks; this code was adapted from the old M6847
|
|
* artifacting implmentation. The only reason that it didn't look as
|
|
* horrible was because the code around it sucked as well. Now that I
|
|
* have cleaned everything up, the ugliness is much more prominent.
|
|
*
|
|
* Hopefully we will have a generic artifacting algorithm that plugs into
|
|
* the MESS/MAME core directly so we can chuck this hack */
|
|
static const double artifact_colors[14*3] =
|
|
{
|
|
0.157, 0.000, 0.157, /* [ 1] - dk purple (reverse 2) */
|
|
0.000, 0.157, 0.000, /* [ 2] - dk green (reverse 1) */
|
|
1.000, 0.824, 1.000, /* [ 3] - lt purple (reverse 4) */
|
|
0.824, 1.000, 0.824, /* [ 4] - lt green (reverse 3) */
|
|
0.706, 0.236, 0.118, /* [ 5] - dk blue (reverse 6) */
|
|
0.000, 0.197, 0.471, /* [ 6] - dk red (reverse 5) */
|
|
1.000, 0.550, 0.393, /* [ 7] - lt blue (reverse 8) */
|
|
0.275, 0.785, 1.000, /* [ 8] - lt red (reverse 7) */
|
|
0.000, 0.500, 1.000, /* [ 9] - red (reverse 10) */
|
|
1.000, 0.500, 0.000, /* [10] - blue (reverse 9) */
|
|
1.000, 0.942, 0.785, /* [11] - cyan (reverse 12) */
|
|
0.393, 0.942, 1.000, /* [12] - yellow (reverse 11) */
|
|
0.236, 0.000, 0.000, /* [13] - black-blue (reverse 14) */
|
|
0.000, 0.000, 0.236 /* [14] - black-red (reverse 13) */
|
|
};
|
|
|
|
static const UINT8 artifact_correction[128] =
|
|
{
|
|
0, 0, 0, 0, 0, 6, 0, 2,
|
|
5, 7, 5, 7, 1, 3, 1, 11,
|
|
8, 6, 8, 14, 8, 9, 8, 9,
|
|
4, 4, 4, 15, 12, 12, 12, 15,
|
|
|
|
5, 13, 5, 13, 13, 0, 13, 2,
|
|
10, 10, 10, 10, 10, 15, 10, 11,
|
|
3, 1, 3, 1, 15, 9, 15, 9,
|
|
11, 11, 11, 11, 15, 15, 15, 15,
|
|
|
|
14, 0, 14, 0, 14, 6, 14, 2,
|
|
0, 7, 0, 7, 1, 3, 1, 11,
|
|
9, 6, 9, 14, 9, 9, 9, 9,
|
|
15, 4, 15, 15, 12, 12, 12, 15,
|
|
|
|
2, 13, 2, 13, 2, 0, 2, 2,
|
|
10, 10, 10, 10, 10, 15, 10, 11,
|
|
12, 1, 12, 1, 12, 9, 12, 9,
|
|
15, 11, 15, 11, 15, 15, 15, 15
|
|
};
|
|
|
|
pixel_t colors[16];
|
|
int i;
|
|
|
|
/* do we need to update our artifact colors table? */
|
|
if ((m_artifacting != m_saved_artifacting) || (c0 != m_saved_c0) || (c1 != m_saved_c1))
|
|
{
|
|
m_saved_artifacting = m_artifacting;
|
|
m_saved_c0 = colors[0] = c0;
|
|
m_saved_c1 = colors[15] = c1;
|
|
|
|
/* mix the other colors */
|
|
for (i = 1; i <= 14; i++)
|
|
{
|
|
const double *factors = &artifact_colors[((i - 1) ^ (m_artifacting & 0x01)) * 3];
|
|
|
|
colors[i] = (mix_color(factors[0], c0 >> 16, c1 >> 16) << 16)
|
|
| (mix_color(factors[1], c0 >> 8, c1 >> 8) << 8)
|
|
| (mix_color(factors[2], c0 >> 0, c1 >> 0) << 0);
|
|
}
|
|
for (i = 0; i < 128; i++)
|
|
{
|
|
m_expanded_colors[i] = colors[artifact_correction[i]];
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// artifacter::update
|
|
//-------------------------------------------------
|
|
|
|
mc6847_base_device::pixel_t mc6847_base_device::artifacter::mix_color(double factor, UINT8 c0, UINT8 c1)
|
|
{
|
|
return (UINT32) (UINT8) ((c0 * (1.0 - factor)) + (c1 * (0.0 + factor)) + 0.5);
|
|
}
|
|
|
|
|
|
|
|
//**************************************************************************
|
|
// VARIATIONS
|
|
//**************************************************************************
|
|
|
|
const device_type MC6847_NTSC = &device_creator<mc6847_ntsc_device>;
|
|
const device_type MC6847_PAL = &device_creator<mc6847_pal_device>;
|
|
const device_type MC6847Y_NTSC = &device_creator<mc6847y_ntsc_device>;
|
|
const device_type MC6847Y_PAL = &device_creator<mc6847y_pal_device>;
|
|
const device_type MC6847T1_NTSC = &device_creator<mc6847t1_ntsc_device>;
|
|
const device_type MC6847T1_PAL = &device_creator<mc6847t1_pal_device>;
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// mc6847_ntsc_device
|
|
//-------------------------------------------------
|
|
|
|
mc6847_ntsc_device::mc6847_ntsc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
|
: mc6847_base_device(mconfig, MC6847_NTSC, "MC6847_NTSC", tag, owner, clock, ntsc_square_fontdata8x12, 227.0)
|
|
{
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// mc6847_pal_device
|
|
//-------------------------------------------------
|
|
|
|
mc6847_pal_device::mc6847_pal_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
|
: mc6847_base_device(mconfig, MC6847_PAL, "MC6847_PAL", tag, owner, clock, pal_square_fontdata8x12, 227.0)
|
|
{
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// mc6847y_ntsc_device
|
|
//-------------------------------------------------
|
|
|
|
mc6847y_ntsc_device::mc6847y_ntsc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
|
: mc6847_base_device(mconfig, MC6847Y_NTSC, "MC6847Y_NTSC", tag, owner, clock, ntsc_square_fontdata8x12, 227.5)
|
|
{
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// mc6847y_pal_device
|
|
//-------------------------------------------------
|
|
|
|
mc6847y_pal_device::mc6847y_pal_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
|
: mc6847_base_device(mconfig, MC6847Y_PAL, "MC6847Y_PAL", tag, owner, clock, pal_square_fontdata8x12, 227.5)
|
|
{
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// mc6847t1_ntsc_device
|
|
//-------------------------------------------------
|
|
|
|
mc6847t1_ntsc_device::mc6847t1_ntsc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
|
: mc6847_base_device(mconfig, MC6847T1_NTSC, "MC6847T1_NTSC", tag, owner, clock, ntsc_round_fontdata8x12, 227.0)
|
|
{
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------
|
|
// mc6847t1_pal_device
|
|
//-------------------------------------------------
|
|
|
|
mc6847t1_pal_device::mc6847t1_pal_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
|
: mc6847_base_device(mconfig, MC6847T1_PAL, "MC6847T1_PAL", tag, owner, clock, pal_round_fontdata8x12, 227.0)
|
|
{
|
|
}
|
|
|
|
|
|
|