From: Toni Wilen Date: Sat, 21 Nov 2020 12:40:32 +0000 (+0200) Subject: Hardware RTG board interlace and doublescan fix. X-Git-Tag: 4900~250 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=0f13d5c33b08a57155f404edbad77e20e8eb7c7b;p=francis%2Fwinuae.git Hardware RTG board interlace and doublescan fix. --- diff --git a/pcem/pcemglue.cpp b/pcem/pcemglue.cpp index 2af395ed..a8462bd9 100644 --- a/pcem/pcemglue.cpp +++ b/pcem/pcemglue.cpp @@ -519,10 +519,10 @@ void initpcemvideo(void *p, bool swapped) } if (!buffer32) { - buffer32 = (PCBITMAP *)calloc(sizeof(PCBITMAP) + sizeof(uint8_t *) * 2048, 1); - buffer32->dat = xcalloc(uae_u8, 2048 * 2048 * 4); + buffer32 = (PCBITMAP *)calloc(sizeof(PCBITMAP) + sizeof(uint8_t *) * 4096, 1); buffer32->w = 2048; - buffer32->h = 2048; + buffer32->h = 4096; + buffer32->dat = xcalloc(uae_u8, buffer32->w * buffer32->h * 4); for (int i = 0; i < buffer32->h; i++) { buffer32->line[i] = buffer32->dat + buffer32->w * 4 * i; } diff --git a/pcem/vid_cl5429.cpp b/pcem/vid_cl5429.cpp index ddf3a6c5..5215490d 100644 --- a/pcem/vid_cl5429.cpp +++ b/pcem/vid_cl5429.cpp @@ -403,7 +403,7 @@ static void gd5429_overlay_draw(svga_t *svga, int displine) gd5429_t *gd5429 = (gd5429_t*)svga->p; int shift = gd5429->type >= CL_TYPE_GD5446 ? 2 : 0; int h_acc = svga->overlay_latch.h_acc; - int r[8], g[8], b[8], ck[8]; + int r[8], g[8], b[8]; int x_read = 4, x_write = 4; int x; uint32_t *p; diff --git a/pcem/vid_s3.cpp b/pcem/vid_s3.cpp index bc4acd34..088b055b 100644 --- a/pcem/vid_s3.cpp +++ b/pcem/vid_s3.cpp @@ -1262,8 +1262,6 @@ void s3_recalctimings(svga_t *svga) svga->interlace = svga->crtc[0x42] & 0x20; //svga->clock = (cpuclock * (float)(1ull << 32)) / s3->getclock(clk_sel, s3->getclock_p); - svga->horizontal_linedbl = svga->dispend * 9 / 10 >= svga->hdisp; - switch (svga->crtc[0x67] >> 4) { case 3: case 5: case 7: @@ -1298,6 +1296,8 @@ void s3_recalctimings(svga_t *svga) break; } } + + svga->horizontal_linedbl = svga->dispend * 9 / 10 >= svga->hdisp; } void s3_updatemapping(s3_t *s3) diff --git a/pcem/vid_s3_virge.cpp b/pcem/vid_s3_virge.cpp index 288776e6..99c32666 100644 --- a/pcem/vid_s3_virge.cpp +++ b/pcem/vid_s3_virge.cpp @@ -605,8 +605,6 @@ static void s3_virge_recalctimings(svga_t *svga) } } - svga->horizontal_linedbl = svga->dispend * 9 / 10 >= svga->hdisp; - if ((svga->crtc[0x67] & 0xc) != 0xc) /*VGA mode*/ { svga->ma_latch |= (virge->ma_ext << 16); @@ -707,6 +705,7 @@ static void s3_virge_recalctimings(svga_t *svga) svga->clock = (cpuclock * (float)(1ull << 32)) / freq; } + svga->horizontal_linedbl = svga->dispend * 9 / 10 >= svga->hdisp; } static void s3_virge_updatemapping(virge_t *virge) diff --git a/pcem/vid_svga.cpp b/pcem/vid_svga.cpp index efd3d607..2daee661 100644 --- a/pcem/vid_svga.cpp +++ b/pcem/vid_svga.cpp @@ -537,7 +537,7 @@ int svga_poll(void *p) svga->hdisp_on=1; svga->ma &= svga->vram_display_mask; - if (svga->firstline == 2000) + if (svga->firstline == 4000) { svga->firstline = svga->displine; video_wait_for_buffer(); @@ -581,7 +581,7 @@ int svga_poll(void *p) svga->cgastat &= ~8; } svga->vslines++; - if (svga->displine > 1500) + if (svga->displine > 3500) svga->displine = 0; // pclog("Col is %08X %08X %08X %i %i %08X\n",((uint32_t *)buffer32->line[displine])[320],((uint32_t *)buffer32->line[displine])[321],((uint32_t *)buffer32->line[displine])[322], // displine, vc, ma); @@ -684,16 +684,18 @@ int svga_poll(void *p) wx = x; wy = svga->lastline - svga->firstline; + if (svga->interlace) + wy /= 2; if (!svga->override) svga_doblit(svga->firstline_draw, svga->lastline_draw + 1, wx, wy, svga); readflash = 0; - svga->firstline = 2000; + svga->firstline = 4000; svga->lastline = 0; - svga->firstline_draw = 2000; + svga->firstline_draw = 4000; svga->lastline_draw = 0; svga->oddeven ^= 1; diff --git a/pcem/vid_svga_render.cpp b/pcem/vid_svga_render.cpp index a50abb9a..55ed2f91 100644 --- a/pcem/vid_svga_render.cpp +++ b/pcem/vid_svga_render.cpp @@ -8,7 +8,7 @@ void svga_render_blank(svga_t *svga) { int x, xx; - if (svga->firstline_draw == 2000) + if (svga->firstline_draw == 4000) svga->firstline_draw = svga->displine; svga->lastline_draw = svga->displine; @@ -34,7 +34,7 @@ void svga_render_blank(svga_t *svga) void svga_render_text_40(svga_t *svga) { - if (svga->firstline_draw == 2000) + if (svga->firstline_draw == 4000) svga->firstline_draw = svga->displine; svga->lastline_draw = svga->displine; @@ -98,7 +98,7 @@ void svga_render_text_40(svga_t *svga) void svga_render_text_80(svga_t *svga) { - if (svga->firstline_draw == 2000) + if (svga->firstline_draw == 4000) svga->firstline_draw = svga->displine; svga->lastline_draw = svga->displine; @@ -162,7 +162,7 @@ void svga_render_text_80(svga_t *svga) void svga_render_text_80_ksc5601(svga_t *svga) { - if (svga->firstline_draw == 2000) + if (svga->firstline_draw == 4000) svga->firstline_draw = svga->displine; svga->lastline_draw = svga->displine; @@ -297,7 +297,7 @@ void svga_render_2bpp_lowres(svga_t *svga) int offset = ((8 - svga->scrollcache) << 1) + 16; uint32_t *p = &((uint32_t *)buffer32->line[svga->displine])[offset]; - if (svga->firstline_draw == 2000) + if (svga->firstline_draw == 4000) svga->firstline_draw = svga->displine; svga->lastline_draw = svga->displine; @@ -336,7 +336,7 @@ void svga_render_2bpp_highres(svga_t *svga) int offset = (8 - svga->scrollcache) + 24; uint32_t *p = &((uint32_t *)buffer32->line[svga->displine])[offset]; - if (svga->firstline_draw == 2000) + if (svga->firstline_draw == 4000) svga->firstline_draw = svga->displine; svga->lastline_draw = svga->displine; @@ -371,7 +371,7 @@ void svga_render_4bpp_lowres(svga_t *svga) int offset = ((8 - svga->scrollcache) << 1) + 16; uint32_t *p = &((uint32_t *)buffer32->line[svga->displine])[offset]; - if (svga->firstline_draw == 2000) + if (svga->firstline_draw == 4000) svga->firstline_draw = svga->displine; svga->lastline_draw = svga->displine; @@ -414,7 +414,7 @@ void svga_render_4bpp_highres(svga_t *svga) int offset = (8 - svga->scrollcache) + 24; uint32_t *p = &((uint32_t *)buffer32->line[svga->displine])[offset]; - if (svga->firstline_draw == 2000) + if (svga->firstline_draw == 4000) svga->firstline_draw = svga->displine; svga->lastline_draw = svga->displine; @@ -453,7 +453,7 @@ void svga_render_8bpp_lowres(svga_t *svga) int offset = (8 - (svga->scrollcache & 6)) + 24; uint32_t *p = &((uint32_t *)buffer32->line[svga->displine])[offset]; - if (svga->firstline_draw == 2000) + if (svga->firstline_draw == 4000) svga->firstline_draw = svga->displine; svga->lastline_draw = svga->displine; @@ -481,7 +481,7 @@ void svga_render_8bpp_highres(svga_t *svga) int offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24; uint32_t *p = &((uint32_t *)buffer32->line[svga->displine])[offset]; - if (svga->firstline_draw == 2000) + if (svga->firstline_draw == 4000) svga->firstline_draw = svga->displine; svga->lastline_draw = svga->displine; @@ -515,7 +515,7 @@ void svga_render_15bpp_lowres(svga_t *svga) int offset = (8 - (svga->scrollcache & 6)) + 24; uint32_t *p = &((uint32_t *)buffer32->line[svga->displine])[offset]; - if (svga->firstline_draw == 2000) + if (svga->firstline_draw == 4000) svga->firstline_draw = svga->displine; svga->lastline_draw = svga->displine; @@ -539,7 +539,7 @@ void svga_render_15bpp_highres(svga_t *svga) int offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24; uint32_t *p = &((uint32_t *)buffer32->line[svga->displine])[offset]; - if (svga->firstline_draw == 2000) + if (svga->firstline_draw == 4000) svga->firstline_draw = svga->displine; svga->lastline_draw = svga->displine; @@ -574,7 +574,7 @@ void svga_render_16bpp_lowres(svga_t *svga) int offset = (8 - (svga->scrollcache & 6)) + 24; uint32_t *p = &((uint32_t *)buffer32->line[svga->displine])[offset]; - if (svga->firstline_draw == 2000) + if (svga->firstline_draw == 4000) svga->firstline_draw = svga->displine; svga->lastline_draw = svga->displine; @@ -598,7 +598,7 @@ void svga_render_16bpp_highres(svga_t *svga) int offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24; uint32_t *p = &((uint32_t *)buffer32->line[svga->displine])[offset]; - if (svga->firstline_draw == 2000) + if (svga->firstline_draw == 4000) svga->firstline_draw = svga->displine; svga->lastline_draw = svga->displine; @@ -632,7 +632,7 @@ void svga_render_24bpp_lowres(svga_t *svga) if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) { - if (svga->firstline_draw == 2000) + if (svga->firstline_draw == 4000) svga->firstline_draw = svga->displine; svga->lastline_draw = svga->displine; @@ -665,7 +665,7 @@ void svga_render_24bpp_highres(svga_t *svga) int offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24; uint32_t *p = &((uint32_t *)buffer32->line[svga->displine])[offset]; - if (svga->firstline_draw == 2000) + if (svga->firstline_draw == 4000) svga->firstline_draw = svga->displine; svga->lastline_draw = svga->displine; @@ -716,7 +716,7 @@ void svga_render_32bpp_lowres(svga_t *svga) if (svga->changedvram[svga->ma >> 12] || svga->changedvram[(svga->ma >> 12) + 1] || svga->fullchange) { - if (svga->firstline_draw == 2000) + if (svga->firstline_draw == 4000) svga->firstline_draw = svga->displine; svga->lastline_draw = svga->displine; @@ -742,7 +742,7 @@ void svga_render_32bpp_highres(svga_t *svga) int offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24; uint32_t *p = &((uint32_t *)buffer32->line[svga->displine])[offset]; - if (svga->firstline_draw == 2000) + if (svga->firstline_draw == 4000) svga->firstline_draw = svga->displine; svga->lastline_draw = svga->displine; @@ -764,7 +764,7 @@ void svga_render_ABGR8888_highres(svga_t *svga) int offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24; uint32_t *p = &((uint32_t *)buffer32->line[svga->displine])[offset]; - if (svga->firstline_draw == 2000) + if (svga->firstline_draw == 4000) svga->firstline_draw = svga->displine; svga->lastline_draw = svga->displine; @@ -786,7 +786,7 @@ void svga_render_RGBA8888_highres(svga_t *svga) int offset = (8 - ((svga->scrollcache & 6) >> 1)) + 24; uint32_t *p = &((uint32_t *)buffer32->line[svga->displine])[offset]; - if (svga->firstline_draw == 2000) + if (svga->firstline_draw == 4000) svga->firstline_draw = svga->displine; svga->lastline_draw = svga->displine;