summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author tim lindner <tlindner@macmess.org>2024-12-01 12:05:29 -0800
committer GitHub <noreply@github.com>2024-12-01 15:05:29 -0500
commitcb6bc8c8f1d3de8138b122be33ab387004b0358b (patch)
tree95df2a033a31f919b3059ed6bcb77b674e59ffe0
parent9f705b3e1c712bedf353e431b60d9deeb88756b6 (diff)
gime: Fixed lines-per-row and improved border color for legacy modes (#13038)
-rw-r--r--src/mame/trs/gime.cpp66
-rw-r--r--src/mame/trs/gime.h1
2 files changed, 30 insertions, 37 deletions
diff --git a/src/mame/trs/gime.cpp b/src/mame/trs/gime.cpp
index e98ee1a1e08..a9b99298da6 100644
--- a/src/mame/trs/gime.cpp
+++ b/src/mame/trs/gime.cpp
@@ -1286,7 +1286,7 @@ void gime_device::update_border(uint16_t physical_scanline)
// graphics, green or white
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
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;
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] =
{
- // http://cocogamedev.mxf.yuku.com/topic/4299238#.VyC6ozArI-U
- static int ff9c_lines_per_row[16] =
- {
- 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, 1, 12
- };
-
- int i = m_gime_registers[0x0C] & 0x0F;
- //lines_per_row = 12;
- lines_per_row = ff9c_lines_per_row[i];
- break;
- }
+ 3, 3, 3, 2, 2, 1, 1, 1
+ };
- 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;
+ 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
+ static int ff9c_lines_per_row_alpha[16] =
+ {
+ 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, 3, 2, 1, 12
+ };
- default:
- fatalerror("Should not get here\n");
+ int i = m_gime_registers[0x0C] & 0x0F;
+ lines_per_row = ff9c_lines_per_row_alpha[i];
}
}
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_GM1|MODE_GM0:
case MODE_AG|MODE_GM2|MODE_GM0:
- pitch = record_scanline_res<16, &gime_device::get_data_mc6847, true>(physical_scanline);
+ if (m_sam_state & SAM_STATE_V0)
+ 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;
case 0:
@@ -1687,9 +1675,10 @@ uint32_t gime_device::emit_dummy_samples(const scanline_record *scanline, int sa
// 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)
{
- return super::emit_mc6847_samples<2>(
+ return super::emit_mc6847_samples<xscale>(
scanline->m_mode[sample_start],
&scanline->m_data[sample_start],
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_GM1|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;
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;
}
}
diff --git a/src/mame/trs/gime.h b/src/mame/trs/gime.h
index 76286aa6252..66c50162dcf 100644
--- a/src/mame/trs/gime.h
+++ b/src/mame/trs/gime.h
@@ -239,6 +239,7 @@ protected:
// 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);
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);
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);