IBM 5550: Add cursor blinking

Added cursor blinking controlled by CRTC (HD46505).
This commit is contained in:
Akamaki
2026-02-20 23:36:08 +09:00
parent 617be3b135
commit c03a4e91c9
2 changed files with 18 additions and 4 deletions

View File

@@ -862,7 +862,7 @@ epoch_render_text(epoch_t *epoch)
}
/* Drawing text cursor */
drawcursor = ((epoch->memaddr == epoch->cursoraddr) && epoch->cursorvisible && epoch->cursoron);
if (drawcursor && epoch->scanline >= epoch->crtc[LC_CURSOR_ROW_START] && epoch->scanline <= epoch->crtc[LC_CURSOR_ROW_END]) {
if (drawcursor) {
// int cursorwidth = (epoch->crtc[LC_COMPATIBILITY] & 0x20 ? 26 : 13);
int cursorwidth = epoch->char_width;
int cursorcolor = 2; /* Choose color 2 if mode 8 */
@@ -1140,11 +1140,25 @@ epoch_poll(void *priv)
// if (epoch->attrc[LV_CURSOR_CONTROL] & 0x01) /* cursor blinking */
// {
// epoch->cursoron = (epoch->blink | 1) & epoch->blinkconf;
epoch->cursoron = 1;
// epoch->cursoron = 1;
// } else {
// epoch->cursoron = 0;
// }
if (!(epoch->blink & (0x10 - 1))) /* force redrawing for cursor and blink attribute */
switch (epoch->crtc[LC_CURSOR_ROW_START] & 0x60) {
case 0x20:
epoch->cursoron = 0;
break;
case 0x60:
epoch->cursoron = epoch->blink & 0x10;
break;
case 0x40:
epoch->cursoron = epoch->blink & 0x08;
break;
default:
epoch->cursoron = 1;
break;
}
if (!(epoch->blink & (0x08 - 2))) /* force redrawing for cursor and blink attribute */
epoch->fullchange = changeframecount;
}
epoch->blink++;

View File

@@ -2055,7 +2055,7 @@ da2_render_text(da2_t *da2)
}
/* Drawing text cursor */
drawcursor = ((da2->memaddr == da2->cursoraddr) && da2->cursorvisible && da2->cursoron);
if (drawcursor && da2->scanline >= da2->crtc[LC_CURSOR_ROW_START] && da2->scanline <= da2->crtc[LC_CURSOR_ROW_END]) {
if (drawcursor) {
int cursorwidth = (da2->crtc[LC_COMPATIBILITY] & 0x20 ? 26 : 13);
int cursorcolor = (colormode) ? IRGBtoBGRI(da2->attrc[LV_CURSOR_COLOR]) : 2; /* Choose color 2 if mode 8 */
fg = (colormode) ? getPS55ForeColor(attr, da2) : ((attr & 0x08) ? 3 : 2);