]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Hardware RTG board interlace and doublescan fix.
authorToni Wilen <twilen@winuae.net>
Sat, 21 Nov 2020 12:40:32 +0000 (14:40 +0200)
committerToni Wilen <twilen@winuae.net>
Sat, 21 Nov 2020 12:40:32 +0000 (14:40 +0200)
pcem/pcemglue.cpp
pcem/vid_cl5429.cpp
pcem/vid_s3.cpp
pcem/vid_s3_virge.cpp
pcem/vid_svga.cpp
pcem/vid_svga_render.cpp

index 2af395ed4af87b0bce443b3c6bf64ebc8f909a97..a8462bd947baa79d1ec41539d99567f4de5cce92 100644 (file)
@@ -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;
                }
index ddf3a6c5009de217365750075f2bf88f0967a640..5215490d28492bdb50ecb407347185a47c396e57 100644 (file)
@@ -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;
index bc4acd34dcc761f0d8359306a4869df3724abeae..088b055baa78760d92781a7c468966f69693a4f0 100644 (file)
@@ -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)
index 288776e6170289c63f9d902d1fb5d1d59006205c..99c3266693e914b3785eb1b1ca8bfa7f4fe5c445 100644 (file)
@@ -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)
index efd3d6074b6caff4abb52974e7534542d8b41cd1..2daee6611b50e01d1b2f170a861ff1e29a21da0a 100644 (file)
@@ -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;
index a50abb9a3f1eea7cee3a0ddc30cebcb4cbe6d2c7..55ed2f9151ed075337efe41897b23fa8d8d301a8 100644 (file)
@@ -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;