mirror of
https://github.com/holub/mame
synced 2025-06-30 16:00:01 +03:00
apple2: fix Ivel Ultra's unique text drawing (MT#5814) [R. Belmont]
This commit is contained in:
parent
18863bae38
commit
b1ce31faeb
@ -377,7 +377,14 @@ UINT32 napple2_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
|
|||||||
if (m_video->m_mix)
|
if (m_video->m_mix)
|
||||||
{
|
{
|
||||||
m_video->hgr_update(screen, bitmap, cliprect, 0, 159);
|
m_video->hgr_update(screen, bitmap, cliprect, 0, 159);
|
||||||
m_video->text_update_orig(screen, bitmap, cliprect, 160, 191);
|
if (!strcmp(machine().system().name, "ivelultr"))
|
||||||
|
{
|
||||||
|
m_video->text_update_ultr(screen, bitmap, cliprect, 160, 191);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_video->text_update_orig(screen, bitmap, cliprect, 160, 191);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -389,7 +396,14 @@ UINT32 napple2_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
|
|||||||
if (m_video->m_mix)
|
if (m_video->m_mix)
|
||||||
{
|
{
|
||||||
m_video->lores_update(screen, bitmap, cliprect, 0, 159);
|
m_video->lores_update(screen, bitmap, cliprect, 0, 159);
|
||||||
m_video->text_update_orig(screen, bitmap, cliprect, 160, 191);
|
if (!strcmp(machine().system().name, "ivelultr"))
|
||||||
|
{
|
||||||
|
m_video->text_update_ultr(screen, bitmap, cliprect, 160, 191);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_video->text_update_orig(screen, bitmap, cliprect, 160, 191);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -399,7 +413,14 @@ UINT32 napple2_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_video->text_update_orig(screen, bitmap, cliprect, 0, 191);
|
if (!strcmp(machine().system().name, "ivelultr"))
|
||||||
|
{
|
||||||
|
m_video->text_update_ultr(screen, bitmap, cliprect, 0, 191);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_video->text_update_orig(screen, bitmap, cliprect, 0, 191);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -543,7 +543,7 @@ void apple2_state::apple2_video_start(const UINT8 *vram, const UINT8 *aux_vram,
|
|||||||
|| !strcmp(machine().system().name, "apple2p")
|
|| !strcmp(machine().system().name, "apple2p")
|
||||||
|| !strcmp(machine().system().name, "prav82")
|
|| !strcmp(machine().system().name, "prav82")
|
||||||
|| !strcmp(machine().system().name, "prav8m")
|
|| !strcmp(machine().system().name, "prav8m")
|
||||||
|| !strcmp(machine().system().name, "ace100")
|
|| !strcmp(machine().system().name, "ivelultr")
|
||||||
|| !strcmp(machine().system().name, "apple2jp"))
|
|| !strcmp(machine().system().name, "apple2jp"))
|
||||||
{
|
{
|
||||||
int len = memregion("gfx1")->bytes();
|
int len = memregion("gfx1")->bytes();
|
||||||
@ -845,6 +845,40 @@ void a2_video_device::plot_text_character_orig(bitmap_ind16 &bitmap, int xpos, i
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void a2_video_device::plot_text_character_ultr(bitmap_ind16 &bitmap, int xpos, int ypos, int xscale, UINT32 code,
|
||||||
|
const UINT8 *textgfx_data, UINT32 textgfx_datalen, int fg, int bg)
|
||||||
|
{
|
||||||
|
int x, y, i;
|
||||||
|
const UINT8 *chardata;
|
||||||
|
UINT16 color;
|
||||||
|
|
||||||
|
if ((code >= 0x40) && (code <= 0x7f))
|
||||||
|
{
|
||||||
|
if (m_flash)
|
||||||
|
{
|
||||||
|
i = fg;
|
||||||
|
fg = bg;
|
||||||
|
bg = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* look up the character data */
|
||||||
|
chardata = &textgfx_data[(code * 8)];
|
||||||
|
|
||||||
|
for (y = 0; y < 8; y++)
|
||||||
|
{
|
||||||
|
for (x = 1; x < 8; x++)
|
||||||
|
{
|
||||||
|
color = (chardata[y] & (1 << x)) ? fg : bg;
|
||||||
|
|
||||||
|
for (i = 0; i < xscale; i++)
|
||||||
|
{
|
||||||
|
bitmap.pix16(ypos + y, xpos + ((x-1) * xscale) + i) = color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void a2_video_device::lores_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int beginrow, int endrow)
|
void a2_video_device::lores_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int beginrow, int endrow)
|
||||||
{
|
{
|
||||||
int row, col, y, x;
|
int row, col, y, x;
|
||||||
@ -1160,6 +1194,37 @@ void a2_video_device::text_update_orig(screen_device &screen, bitmap_ind16 &bitm
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void a2_video_device::text_update_ultr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int beginrow, int endrow)
|
||||||
|
{
|
||||||
|
int row, col;
|
||||||
|
UINT32 start_address = m_page2 ? 0x800 : 0x400;
|
||||||
|
UINT32 address;
|
||||||
|
int fg = 0;
|
||||||
|
int bg = 0;
|
||||||
|
|
||||||
|
beginrow = MAX(beginrow, cliprect.min_y - (cliprect.min_y % 8));
|
||||||
|
endrow = MIN(endrow, cliprect.max_y - (cliprect.max_y % 8) + 7);
|
||||||
|
|
||||||
|
switch (m_sysconfig & 0x03)
|
||||||
|
{
|
||||||
|
case 0: fg = WHITE; break;
|
||||||
|
case 1: fg = WHITE; break;
|
||||||
|
case 2: fg = GREEN; break;
|
||||||
|
case 3: fg = ORANGE; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (row = beginrow; row <= endrow; row += 8)
|
||||||
|
{
|
||||||
|
for (col = 0; col < 40; col++)
|
||||||
|
{
|
||||||
|
/* calculate address */
|
||||||
|
address = start_address + ((((row/8) & 0x07) << 7) | (((row/8) & 0x18) * 5 + col));
|
||||||
|
plot_text_character_ultr(bitmap, col * 14, row, 2, m_ram_ptr[address],
|
||||||
|
m_char_ptr, m_char_size, fg, bg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void a2_video_device::hgr_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int beginrow, int endrow)
|
void a2_video_device::hgr_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int beginrow, int endrow)
|
||||||
{
|
{
|
||||||
const UINT8 *vram;
|
const UINT8 *vram;
|
||||||
|
@ -37,6 +37,7 @@ public:
|
|||||||
int m_sysconfig;
|
int m_sysconfig;
|
||||||
|
|
||||||
void text_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int beginrow, int endrow);
|
void text_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int beginrow, int endrow);
|
||||||
|
void text_update_ultr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int beginrow, int endrow);
|
||||||
void text_update_orig(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int beginrow, int endrow);
|
void text_update_orig(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int beginrow, int endrow);
|
||||||
void lores_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int beginrow, int endrow);
|
void lores_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int beginrow, int endrow);
|
||||||
void dlores_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int beginrow, int endrow);
|
void dlores_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int beginrow, int endrow);
|
||||||
@ -50,6 +51,7 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void plot_text_character(bitmap_ind16 &bitmap, int xpos, int ypos, int xscale, UINT32 code, const UINT8 *textgfx_data, UINT32 textgfx_datalen, int fg, int bg);
|
void plot_text_character(bitmap_ind16 &bitmap, int xpos, int ypos, int xscale, UINT32 code, const UINT8 *textgfx_data, UINT32 textgfx_datalen, int fg, int bg);
|
||||||
|
void plot_text_character_ultr(bitmap_ind16 &bitmap, int xpos, int ypos, int xscale, UINT32 code, const UINT8 *textgfx_data, UINT32 textgfx_datalen, int fg, int bg);
|
||||||
void plot_text_character_orig(bitmap_ind16 &bitmap, int xpos, int ypos, int xscale, UINT32 code, const UINT8 *textgfx_data, UINT32 textgfx_datalen, int fg, int bg);
|
void plot_text_character_orig(bitmap_ind16 &bitmap, int xpos, int ypos, int xscale, UINT32 code, const UINT8 *textgfx_data, UINT32 textgfx_datalen, int fg, int bg);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user