]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Some Voodoo updates
authorToni Wilen <twilen@winuae.net>
Thu, 16 Jan 2025 19:01:18 +0000 (21:01 +0200)
committerToni Wilen <twilen@winuae.net>
Thu, 16 Jan 2025 19:01:18 +0000 (21:01 +0200)
pcem/vid_voodoo_banshee.cpp
pcem/vid_voodoo_fb.cpp
pcem/vid_voodoo_regs.h

index cda8bee4cdf9f0ee7edbefd3517478273781fba2..60411f9d8d16f6b9667b5ce4fb34070ac323c6ec 100644 (file)
@@ -147,6 +147,7 @@ enum
         cmdHoleCnt0   = 0x48
 };
 
+#define VGAINIT0_RAMDAC_8BIT (1 << 2)
 #define VGAINIT0_EXTENDED_SHIFT_OUT (1 << 12)
 
 #define VIDPROCCFG_VIDPROC_ENABLE (1 << 0)
@@ -376,7 +377,7 @@ static void banshee_render_16bpp_tiled(svga_t *svga)
         else
                 addr = banshee->desktop_addr + (banshee->desktop_y & 31) * 128 + ((banshee->desktop_y >> 5) * banshee->desktop_stride_tiled);
 
-        for (x = 0; x <= svga->hdisp; x += 64)
+        for (x = 0; x < svga->hdisp; x += 64)
         {
                 if (svga->hwcursor_on || svga->overlay_on)
                         svga->changedvram[addr >> 12] = 2;
@@ -630,6 +631,7 @@ static void banshee_ext_outl(uint16_t addr, uint32_t val, void *p)
                 break;
                 case Init_vgaInit0:
                 banshee->vgaInit0 = val;
+                svga_set_ramdac_type(svga, (val & VGAINIT0_RAMDAC_8BIT ? RAMDAC_8BIT : RAMDAC_6BIT));
                 break;
                 case Init_vgaInit1:
                 banshee->vgaInit1 = val;
@@ -1044,6 +1046,10 @@ static uint32_t banshee_cmd_read(banshee_t *banshee, uint32_t addr)
 //                pclog("Read cmdfifo_depth %08x\n", ret);
                 break;
 
+                case cmdBaseSize0:
+                ret = voodoo->cmdfifo_size;
+                break;
+
                 case 0x108:
                 break;
 
@@ -1753,6 +1759,7 @@ void banshee_hwcursor_draw(svga_t *svga, int displine)
 
                                 for (xx = 0; xx < 8; xx++)
                                 {
+                                    if (((x_off + xx + svga->x_add) >= 0) && ((x_off + xx + svga->x_add) <= 2047)) {
                                         if (!(plane0[x >> 3] & (1 << 7)))
                                                 ((uint32_t *)buffer32->line[displine])[x_off + xx] = (plane1[x >> 3] & (1 << 7)) ? col1 : col0;
                                         else if (plane1[x >> 3] & (1 << 7))
@@ -1760,6 +1767,7 @@ void banshee_hwcursor_draw(svga_t *svga, int displine)
 
                                         plane0[x >> 3] <<= 1;
                                         plane1[x >> 3] <<= 1;
+                                    }
                                 }
                         }
 
index be07311a3df54ade318dc6b2569afd338727b350..d6251f590fcf2e75f05f1f2b39448f3e399c58a1 100644 (file)
@@ -325,6 +325,15 @@ void voodoo_fb_writel(uint32_t addr, uint32_t val, void *p)
                 addr >>= 1;
                 break;
 
+                case LFB_FORMAT_XRGB8888:
+                colour_data[0].b = val & 0xff;
+                colour_data[0].g = (val >> 8) & 0xff;
+                colour_data[0].r = (val >> 16) & 0xff;
+                alpha_data[0] = 0xff;
+                write_mask = LFB_WRITE_COLOUR;
+                addr >>= 1;
+                break;
+
                 case LFB_FORMAT_DEPTH:
                 depth_data[0] = val;
                 depth_data[1] = val >> 16;
index e99241f6f4a829f119df4c9e2af00811f28f468c..eb8435d7cfc7819b486452e2f05690c2250320a0 100644 (file)
@@ -342,6 +342,7 @@ enum
         LFB_FORMAT_RGB565 = 0,
         LFB_FORMAT_RGB555 = 1,
         LFB_FORMAT_ARGB1555 = 2,
+        LFB_FORMAT_XRGB8888 = 4,
         LFB_FORMAT_ARGB8888 = 5,
         LFB_FORMAT_DEPTH = 15,
         LFB_FORMAT_MASK = 15