mirror of
https://github.com/holub/mame
synced 2025-04-19 07:00:31 +03:00
gime: Fixed lines-per-row and improved border color for legacy modes (#13038)
This commit is contained in:
parent
9f705b3e1c
commit
cb6bc8c8f1
@ -1286,7 +1286,7 @@ void gime_device::update_border(uint16_t physical_scanline)
|
|||||||
// graphics, green or white
|
// graphics, green or white
|
||||||
border = (~m_ff22_value & MODE_CSS) ? 0x12 : 0x3F;
|
border = (~m_ff22_value & MODE_CSS) ? 0x12 : 0x3F;
|
||||||
}
|
}
|
||||||
else if (m_ff22_value & MODE_GM2)
|
else if ((m_ff22_value & MODE_GM2) && !(m_ff22_value & MODE_GM1))
|
||||||
{
|
{
|
||||||
// text, green or orange
|
// text, green or orange
|
||||||
border = (~m_ff22_value & MODE_CSS) ? 0x12 : 0x26;
|
border = (~m_ff22_value & MODE_CSS) ? 0x12 : 0x26;
|
||||||
@ -1329,42 +1329,26 @@ inline uint16_t gime_device::get_lines_per_row()
|
|||||||
uint16_t lines_per_row;
|
uint16_t lines_per_row;
|
||||||
if (m_legacy_video)
|
if (m_legacy_video)
|
||||||
{
|
{
|
||||||
switch(m_ff22_value & MODE_AG)
|
if (m_ff22_value & MODE_AG)
|
||||||
{
|
{
|
||||||
case 0:
|
static int gime_legacy_lines_per_row_graphic[8] =
|
||||||
|
{
|
||||||
|
3, 3, 3, 2, 2, 1, 1, 1
|
||||||
|
};
|
||||||
|
|
||||||
|
int i = m_sam_state & (SAM_STATE_V0|SAM_STATE_V1|SAM_STATE_V2);
|
||||||
|
lines_per_row = gime_legacy_lines_per_row_graphic[i];
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
// http://cocogamedev.mxf.yuku.com/topic/4299238#.VyC6ozArI-U
|
// http://cocogamedev.mxf.yuku.com/topic/4299238#.VyC6ozArI-U
|
||||||
static int ff9c_lines_per_row[16] =
|
static int ff9c_lines_per_row_alpha[16] =
|
||||||
{
|
{
|
||||||
11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, 1, 12
|
11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, 1, 12
|
||||||
};
|
};
|
||||||
|
|
||||||
int i = m_gime_registers[0x0C] & 0x0F;
|
int i = m_gime_registers[0x0C] & 0x0F;
|
||||||
//lines_per_row = 12;
|
lines_per_row = ff9c_lines_per_row_alpha[i];
|
||||||
lines_per_row = ff9c_lines_per_row[i];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case MODE_AG:
|
|
||||||
switch (m_sam_state & (SAM_STATE_V0|SAM_STATE_V1|SAM_STATE_V2))
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
lines_per_row = 12;
|
|
||||||
break;
|
|
||||||
case SAM_STATE_V1:
|
|
||||||
lines_per_row = 3;
|
|
||||||
break;
|
|
||||||
case SAM_STATE_V2:
|
|
||||||
case SAM_STATE_V1|SAM_STATE_V0:
|
|
||||||
lines_per_row = 2;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
lines_per_row = 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
fatalerror("Should not get here\n");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1523,7 +1507,11 @@ void gime_device::record_full_body_scanline(uint16_t physical_scanline, uint16_t
|
|||||||
case MODE_AG|MODE_GM0:
|
case MODE_AG|MODE_GM0:
|
||||||
case MODE_AG|MODE_GM1|MODE_GM0:
|
case MODE_AG|MODE_GM1|MODE_GM0:
|
||||||
case MODE_AG|MODE_GM2|MODE_GM0:
|
case MODE_AG|MODE_GM2|MODE_GM0:
|
||||||
|
if (m_sam_state & SAM_STATE_V0)
|
||||||
pitch = record_scanline_res<16, &gime_device::get_data_mc6847, true>(physical_scanline);
|
pitch = record_scanline_res<16, &gime_device::get_data_mc6847, true>(physical_scanline);
|
||||||
|
else
|
||||||
|
pitch = record_scanline_res<32, &gime_device::get_data_mc6847, true>(physical_scanline);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0:
|
case 0:
|
||||||
@ -1687,9 +1675,10 @@ uint32_t gime_device::emit_dummy_samples(const scanline_record *scanline, int sa
|
|||||||
// emit_mc6847_samples
|
// emit_mc6847_samples
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
template<int xscale>
|
||||||
inline uint32_t gime_device::emit_mc6847_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette)
|
inline uint32_t gime_device::emit_mc6847_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette)
|
||||||
{
|
{
|
||||||
return super::emit_mc6847_samples<2>(
|
return super::emit_mc6847_samples<xscale>(
|
||||||
scanline->m_mode[sample_start],
|
scanline->m_mode[sample_start],
|
||||||
&scanline->m_data[sample_start],
|
&scanline->m_data[sample_start],
|
||||||
sample_count,
|
sample_count,
|
||||||
@ -1883,11 +1872,14 @@ bool gime_device::update_screen(bitmap_rgb32 &bitmap, const rectangle &cliprect,
|
|||||||
case MODE_AG|MODE_GM0:
|
case MODE_AG|MODE_GM0:
|
||||||
case MODE_AG|MODE_GM1|MODE_GM0:
|
case MODE_AG|MODE_GM1|MODE_GM0:
|
||||||
case MODE_AG|MODE_GM2|MODE_GM0:
|
case MODE_AG|MODE_GM2|MODE_GM0:
|
||||||
render_scanline<16, &gime_device::emit_mc6847_samples>(scanline, pixels, min_x, max_x, &resolver);
|
if (m_sam_state & SAM_STATE_V0)
|
||||||
|
render_scanline<16, &gime_device::emit_mc6847_samples<2>>(scanline, pixels, min_x, max_x, &resolver);
|
||||||
|
else
|
||||||
|
render_scanline<32, &gime_device::emit_mc6847_samples<1>>(scanline, pixels, min_x, max_x, &resolver);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
render_scanline<32, &gime_device::emit_mc6847_samples>(scanline, pixels, min_x, max_x, &resolver);
|
render_scanline<32, &gime_device::emit_mc6847_samples<2>>(scanline, pixels, min_x, max_x, &resolver);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -239,6 +239,7 @@ protected:
|
|||||||
// rendering sampled graphics
|
// rendering sampled graphics
|
||||||
typedef uint32_t (gime_device::*emit_samples_proc)(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette);
|
typedef uint32_t (gime_device::*emit_samples_proc)(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette);
|
||||||
uint32_t emit_dummy_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette);
|
uint32_t emit_dummy_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette);
|
||||||
|
template<int xscale>
|
||||||
uint32_t emit_mc6847_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette);
|
uint32_t emit_mc6847_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette);
|
||||||
template<int xscale>
|
template<int xscale>
|
||||||
uint32_t emit_gime_text_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette);
|
uint32_t emit_gime_text_samples(const scanline_record *scanline, int sample_start, int sample_count, pixel_t *pixels, const pixel_t *palette);
|
||||||
|
Loading…
Reference in New Issue
Block a user