mirror of
https://github.com/holub/mame
synced 2025-04-27 10:43:07 +03:00
hp9845: text video of 45C improved
This commit is contained in:
parent
a2dbc22eb7
commit
dc223d8103
@ -2150,21 +2150,32 @@ void hp9845c_state::video_render_buff(unsigned video_scanline , unsigned line_in
|
|||||||
bool cursor_line = line_in_row == 12;
|
bool cursor_line = line_in_row == 12;
|
||||||
bool ul_line = line_in_row == 14;
|
bool ul_line = line_in_row == 14;
|
||||||
unsigned video_frame = (unsigned)m_screen->frame_number();
|
unsigned video_frame = (unsigned)m_screen->frame_number();
|
||||||
bool cursor_blink = BIT(video_frame , 3);
|
bool cursor_blink = BIT(video_frame , 4);
|
||||||
bool char_blink = BIT(video_frame , 4);
|
bool char_blink = !BIT(video_frame , 4);
|
||||||
|
|
||||||
for (unsigned i = 0; i < 80; i++) {
|
for (unsigned i = 0; i < 80; i++) {
|
||||||
uint8_t charcode = m_video_buff[ buff_idx ].chars[ i ] & 0x7f;
|
uint8_t charcode = m_video_buff[ buff_idx ].chars[ i ] & 0x7f;
|
||||||
uint8_t attrs = m_video_buff[ buff_idx ].attrs[ i ];
|
uint8_t attrs = m_video_buff[ buff_idx ].attrs[ i ];
|
||||||
uint16_t chrgen_addr = ((uint16_t)(charcode ^ 0x7f) << 4) | line_in_row;
|
uint16_t chrgen_addr = ((uint16_t)(charcode ^ 0x7f) << 4) | line_in_row;
|
||||||
uint16_t pixels;
|
uint16_t pixels;
|
||||||
|
uint8_t color = (attrs >> 4) & 7;
|
||||||
|
|
||||||
if ((ul_line && BIT(attrs , 3)) ||
|
if (ul_line && BIT(attrs , 3)) {
|
||||||
(cursor_line && cursor_blink && BIT(attrs , 0))) {
|
// Color of underline: same as character
|
||||||
|
pixels = ~0;
|
||||||
|
} else if (cursor_line && cursor_blink && BIT(attrs , 0)) {
|
||||||
|
// Color of cursor: white
|
||||||
|
color = 7;
|
||||||
pixels = ~0;
|
pixels = ~0;
|
||||||
} else if (char_blink && BIT(attrs , 2)) {
|
} else if (char_blink && BIT(attrs , 2)) {
|
||||||
pixels = 0;
|
pixels = 0;
|
||||||
} else if (BIT(m_video_buff[ buff_idx ].chars[ i ] , 7)) {
|
} else if (BIT(m_video_buff[ buff_idx ].chars[ i ] , 7)) {
|
||||||
|
// 98770A has hw support to fill the 1st and the 9th column of character matrix
|
||||||
|
// with pixels in 2nd and 8th columns, respectively. This feature is used in
|
||||||
|
// 98780A to make horizontal lines of line-drawing characters appear continuous
|
||||||
|
// (see hp9845t_state::video_render_buff).
|
||||||
|
// Apparently, though, HP did not use this feature at all in real
|
||||||
|
// machines (i.e. horizontal lines are broken by gaps)
|
||||||
pixels = (uint16_t)(m_optional_chargen[ chrgen_addr ] & 0x7f) << 1;
|
pixels = (uint16_t)(m_optional_chargen[ chrgen_addr ] & 0x7f) << 1;
|
||||||
} else {
|
} else {
|
||||||
pixels = (uint16_t)(m_chargen[ chrgen_addr ] & 0x7f) << 1;
|
pixels = (uint16_t)(m_chargen[ chrgen_addr ] & 0x7f) << 1;
|
||||||
@ -2181,11 +2192,11 @@ void hp9845c_state::video_render_buff(unsigned video_scanline , unsigned line_in
|
|||||||
if (m_graphic_sel && x >= VIDEO_770_ALPHA_L_LIM && x < VIDEO_770_ALPHA_R_LIM) {
|
if (m_graphic_sel && x >= VIDEO_770_ALPHA_L_LIM && x < VIDEO_770_ALPHA_R_LIM) {
|
||||||
// alpha overlays graphics (non-dominating)
|
// alpha overlays graphics (non-dominating)
|
||||||
if (pixel) {
|
if (pixel) {
|
||||||
m_bitmap.pix32(video_scanline , x) = pen[ pen_alpha((attrs >> 4) & 7) ];
|
m_bitmap.pix32(video_scanline , x) = pen[ pen_alpha(color) ];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Graphics disabled or alpha-only zone
|
// Graphics disabled or alpha-only zone
|
||||||
m_bitmap.pix32(video_scanline , x) = pen[ pixel ? pen_alpha((attrs >> 4) & 7) : pen_alpha(0) ];
|
m_bitmap.pix32(video_scanline , x) = pen[ pixel ? pen_alpha(color) : pen_alpha(0) ];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user