mda_poll: make drawcursor a bool; localise the scope of various variables; de-same-line-braceify for readability

This commit is contained in:
starfrost013
2025-06-16 23:38:05 +01:00
parent 0109f0b811
commit 3c29c00a94

View File

@@ -150,23 +150,24 @@ mda_poll(void *priv)
{ {
mda_t *mda = (mda_t *) priv; mda_t *mda = (mda_t *) priv;
uint16_t cursoraddr = (mda->crtc[MDA_CRTC_CURSOR_ADDR_LOW] | (mda->crtc[MDA_CRTC_CURSOR_ADDR_HIGH] << 8)) & 0x3fff; uint16_t cursoraddr = (mda->crtc[MDA_CRTC_CURSOR_ADDR_LOW] | (mda->crtc[MDA_CRTC_CURSOR_ADDR_HIGH] << 8)) & 0x3fff;
int drawcursor; bool drawcursor;
int x; int32_t oldvc;
int column;
int oldvc;
uint8_t chr; uint8_t chr;
uint8_t attr; uint8_t attr;
int scanline_old; int32_t scanline_old;
int blink; int32_t blink;
VIDEO_MONITOR_PROLOGUE() VIDEO_MONITOR_PROLOGUE()
if (!mda->linepos) {
if (!mda->linepos)
{
timer_advance_u64(&mda->timer, mda->dispofftime); timer_advance_u64(&mda->timer, mda->dispofftime);
mda->status |= 1; mda->status |= 1;
mda->linepos = 1; mda->linepos = 1;
scanline_old = mda->scanline; scanline_old = mda->scanline;
if ((mda->crtc[MDA_CRTC_INTERLACE] & 3) == 3) if ((mda->crtc[MDA_CRTC_INTERLACE] & 3) == 3)
mda->scanline = (mda->scanline << 1) & 7; mda->scanline = (mda->scanline << 1) & 7;
if (mda->dispon) if (mda->dispon)
{ {
if (mda->displine < mda->firstline) if (mda->displine < mda->firstline)
@@ -176,7 +177,7 @@ mda_poll(void *priv)
} }
mda->lastline = mda->displine; mda->lastline = mda->displine;
for (x = 0; x < mda->crtc[MDA_CRTC_HDISP]; x++) for (uint32_t x = 0; x < mda->crtc[MDA_CRTC_HDISP]; x++)
{ {
chr = mda->vram[(mda->memaddr << 1) & 0xfff]; chr = mda->vram[(mda->memaddr << 1) & 0xfff];
attr = mda->vram[((mda->memaddr << 1) + 1) & 0xfff]; attr = mda->vram[((mda->memaddr << 1) + 1) & 0xfff];
@@ -217,20 +218,23 @@ mda_poll(void *priv)
color_fg = 0; color_fg = 0;
} }
if (mda->scanline == 12 && ((attr & 7) == 1)) if (mda->scanline == 12
&& ((attr & 7) == 1))
{ // underline { // underline
for (column = 0; column < 9; column++) for (uint32_t column = 0; column < 9; column++)
{ {
if (mda->monitor_type == MDA_MONITOR_TYPE_RGBI if (mda->monitor_type == MDA_MONITOR_TYPE_RGBI
&& !(mda->mode & MDA_MODE_BW)) && !(mda->mode & MDA_MODE_BW))
{ {
buffer32->line[mda->displine][(x * 9) + column] = CGAPAL_CGA_START + color_fg; buffer32->line[mda->displine][(x * 9) + column] = CGAPAL_CGA_START + color_fg;
1 } }
else else
buffer32->line[mda->displine][(x * 9) + column] = mda_attr_to_color_table[attr][blink][1]; buffer32->line[mda->displine][(x * 9) + column] = mda_attr_to_color_table[attr][blink][1];
} }
} else { // character }
for (column = 0; column < 8; column++) else
{ // character
for (uint32_t column = 0; column < 8; column++)
{ {
//bg=0, fg=1 //bg=0, fg=1
bool is_fg = (fontdatm[chr + mda->fontbase][mda->scanline] & (1 << (column ^ 7))) ? 1 : 0; bool is_fg = (fontdatm[chr + mda->fontbase][mda->scanline] & (1 << (column ^ 7))) ? 1 : 0;
@@ -249,6 +253,7 @@ mda_poll(void *priv)
buffer32->line[mda->displine][(x * 9) + column] = font_char; buffer32->line[mda->displine][(x * 9) + column] = font_char;
} }
// these characters (C0-DF) have their background extended to their 9th column
if ((chr & ~0x1f) == 0xc0) if ((chr & ~0x1f) == 0xc0)
{ {
bool is_fg = fontdatm[chr + mda->fontbase][mda->scanline] & 1; bool is_fg = fontdatm[chr + mda->fontbase][mda->scanline] & 1;
@@ -283,7 +288,7 @@ mda_poll(void *priv)
if (drawcursor) if (drawcursor)
{ {
for (column = 0; column < 9; column++) for (uint32_t column = 0; column < 9; column++)
{ {
if (mda->monitor_type == MDA_MONITOR_TYPE_RGBI if (mda->monitor_type == MDA_MONITOR_TYPE_RGBI
&& !(mda->mode & MDA_MODE_BW)) && !(mda->mode & MDA_MODE_BW))
@@ -310,30 +315,39 @@ mda_poll(void *priv)
if (mda->dispon) if (mda->dispon)
mda->status &= ~1; mda->status &= ~1;
mda->linepos = 0; mda->linepos = 0;
if (mda->vsynctime) {
if (mda->vsynctime)
{
mda->vsynctime--; mda->vsynctime--;
if (!mda->vsynctime) { if (!mda->vsynctime)
{
mda->status &= ~8; mda->status &= ~8;
} }
} }
if (mda->scanline == (mda->crtc[MDA_CRTC_CURSOR_END] & 31) if (mda->scanline == (mda->crtc[MDA_CRTC_CURSOR_END] & 31)
|| ((mda->crtc[MDA_CRTC_INTERLACE] & 3) == 3 || ((mda->crtc[MDA_CRTC_INTERLACE] & 3) == 3
&& mda->scanline == ((mda->crtc[MDA_CRTC_CURSOR_END] & 31) >> 1))) { && mda->scanline == ((mda->crtc[MDA_CRTC_CURSOR_END] & 31) >> 1)))
{
mda->cursorvisible = 0; mda->cursorvisible = 0;
} }
if (mda->vadj) {
if (mda->vadj)
{
mda->scanline++; mda->scanline++;
mda->scanline &= 31; mda->scanline &= 31;
mda->memaddr = mda->memaddr_backup; mda->memaddr = mda->memaddr_backup;
mda->vadj--; mda->vadj--;
if (!mda->vadj) { if (!mda->vadj)
{
mda->dispon = 1; mda->dispon = 1;
mda->memaddr = mda->memaddr_backup = (mda->crtc[MDA_CRTC_START_ADDR_LOW] | (mda->crtc[MDA_CRTC_START_ADDR_HIGH] << 8)) & 0x3fff; mda->memaddr = mda->memaddr_backup = (mda->crtc[MDA_CRTC_START_ADDR_LOW] | (mda->crtc[MDA_CRTC_START_ADDR_HIGH] << 8)) & 0x3fff;
mda->scanline = 0; mda->scanline = 0;
} }
} else if (mda->scanline == mda->crtc[MDA_CRTC_MAX_SCANLINE_ADDR] }
else if (mda->scanline == mda->crtc[MDA_CRTC_MAX_SCANLINE_ADDR]
|| ((mda->crtc[MDA_CRTC_INTERLACE] & 3) == 3 || ((mda->crtc[MDA_CRTC_INTERLACE] & 3) == 3
&& mda->scanline == (mda->crtc[MDA_CRTC_MAX_SCANLINE_ADDR] >> 1))) { && mda->scanline == (mda->crtc[MDA_CRTC_MAX_SCANLINE_ADDR] >> 1)))
{
mda->memaddr_backup = mda->memaddr; mda->memaddr_backup = mda->memaddr;
mda->scanline = 0; mda->scanline = 0;
oldvc = mda->vc; oldvc = mda->vc;
@@ -359,7 +373,7 @@ mda_poll(void *priv)
mda->displine = 0; mda->displine = 0;
mda->vsynctime = 16; mda->vsynctime = 16;
if (mda->crtc[MDA_CRTC_VSYNC]) { if (mda->crtc[MDA_CRTC_VSYNC]) {
x = mda->crtc[MDA_CRTC_HDISP] * 9; uint32_t x = mda->crtc[MDA_CRTC_HDISP] * 9;
mda->lastline++; mda->lastline++;
if ((x != xsize) || ((mda->lastline - mda->firstline) != ysize) || video_force_resize_get()) { if ((x != xsize) || ((mda->lastline - mda->firstline) != ysize) || video_force_resize_get()) {
xsize = x; xsize = x;