From 3758124cb84dab8d982b4107390f309fefdbf0f9 Mon Sep 17 00:00:00 2001 From: kub Date: Mon, 4 Oct 2021 18:03:49 +0200 Subject: [PATCH] sms vdp, support 224/240 line mode --- pico/mode4.c | 19 +++++++++++++------ pico/sms.c | 2 ++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/pico/mode4.c b/pico/mode4.c index 6711febe..7f457c10 100644 --- a/pico/mode4.c +++ b/pico/mode4.c @@ -232,12 +232,14 @@ static void DrawDisplayM4(int scanline) // Find the line in the name table line = pv->reg[9] + scanline; // vscroll + scanline - if (line >= 224) - line -= 224; + line &= 0xff; // Find name table: nametab = PicoMem.vram; - nametab += (pv->reg[2] & 0x0e) << (10-1); + if ((Pico.video.reg[0] & 6) == 6 && (Pico.video.reg[1] & 0x18)) + nametab += ((pv->reg[2] & 0x0c) << (10-1)) + (0x700 >> 1); + else + nametab += (pv->reg[2] & 0x0e) << (10-1); nametab += (line>>3) << (6-1); dx = pv->reg[8]; // hscroll @@ -276,7 +278,7 @@ static void DrawDisplayM4(int scanline) static void FinalizeLineRGB555M4(int line); void PicoFrameStartMode4(void) { - int lines = 192, coffs; + int lines = 192, columns = 256, coffs; skip_next_line = 0; screen_offset = 24; Pico.est.rendstatus = PDRAW_32_COLS; @@ -291,13 +293,18 @@ void PicoFrameStartMode4(void) lines = 224; } } - line_offset = PicoIn.opt & (POPT_DIS_32C_BORDER|POPT_EN_SOFTSCALE) ? 0 : 32; + if (PicoIn.opt & POPT_EN_SOFTSCALE) { + line_offset = 0; + columns = 320; + } else + line_offset = PicoIn.opt & POPT_DIS_32C_BORDER ? 0 : 32; + coffs = line_offset; if (FinalizeLineM4 == FinalizeLineRGB555M4) line_offset = 0 /* done in FinalizeLine */; if (Pico.est.rendstatus != rendstatus_old || lines != rendlines) { - emu_video_mode_change(screen_offset, lines, coffs, 256); + emu_video_mode_change(screen_offset, lines, coffs, columns); rendstatus_old = Pico.est.rendstatus; rendlines = lines; } diff --git a/pico/sms.c b/pico/sms.c index 6fff9e7a..5e4b8766 100644 --- a/pico/sms.c +++ b/pico/sms.c @@ -380,6 +380,8 @@ void PicoFrameMS(void) z80_nmi(); Pico.ms.nmi_state = nmi; + if ((Pico.video.reg[0] & 6) == 6 && (Pico.video.reg[1] & 0x18)) + lines_vis = (Pico.video.reg[1] & 0x08) ? 240 : 224; PicoFrameStartMode4(); hint = pv->reg[0x0a]; -- 2.39.2