--- uae/src/picasso96.c 2018/04/24 16:42:09 1.1.1.2 +++ uae/src/picasso96.c 2018/04/24 16:47:26 1.1.1.6 @@ -26,6 +26,8 @@ * * TODO: * - add panning capability + * - we want to add a manual switch to override SetSwitch for hardware banging + * programs started from a Picasso workbench. */ #include "sysconfig.h" @@ -44,6 +46,13 @@ #ifdef PICASSO96 +/*#define P96TRACING_ENABLED */ +#ifdef P96TRACING_ENABLED +#define P96TRACE(x) do { write_log x; } while(0) +#else +#define P96TRACE(x) +#endif + static uae_u32 gfxmem_lget (uaecptr) REGPARAM; static uae_u32 gfxmem_wget (uaecptr) REGPARAM; static uae_u32 gfxmem_bget (uaecptr) REGPARAM; @@ -57,7 +66,7 @@ static void write_gfx_long (uaecptr addr static void write_gfx_word (uaecptr addr, uae_u16 value); static void write_gfx_byte (uaecptr addr, uae_u8 value); -static uae_u8 all_ones_bitmap, all_zeros_bitmap; /* yuk */ +static uae_u8 all_ones_bitmap, all_zeros_bitmap; struct picasso96_state_struct picasso96_state; struct picasso_vidbuf_description picasso_vidinfo; @@ -70,7 +79,7 @@ struct ScreenResolution planar = { 320, struct ScreenResolution chunky = { 640, 480 }; struct ScreenResolution hicolour = { 640, 480 }; struct ScreenResolution truecolour = { 640, 480 }; -struct ScreenResolution alphacolour = { 460, 480 }; +struct ScreenResolution alphacolour = { 640, 480 }; uae_u16 picasso96_pixel_format = RGBFF_CHUNKY; @@ -117,7 +126,7 @@ static void DumpLibResolutionStructure ( { int i; uaecptr amigamodeinfoptr; - struct LibResolution *uaememptr = (struct LibResolution *)get_mem_bank(amigalibresptr).xlateaddr(amigalibresptr); + struct LibResolution *uaememptr = (struct LibResolution *)get_mem_bank (amigalibresptr).xlateaddr(amigalibresptr); return; @@ -141,7 +150,7 @@ static void DumpLibResolutionStructure ( } } -static char binary_byte[8]; +static char binary_byte[9]; static char *BuildBinaryString (uae_u8 value) { @@ -149,6 +158,7 @@ static char *BuildBinaryString (uae_u8 v for (i = 0; i < 8; i++) { binary_byte[i] = (value & (1 << (7 - i))) ? '#' : '.'; } + binary_byte[8] = '\0'; return binary_byte; } @@ -227,7 +237,7 @@ static int CopyRenderInfoStructureA2U (u { uaecptr memp = get_long (amigamemptr + PSSO_RenderInfo_Memory); - if (valid_address (memp, 1 /* FIXME */)) { + if (valid_address (memp, PSSO_RenderInfo_sizeof)) { ri->Memory = get_real_address (memp); ri->BytesPerRow = get_word (amigamemptr + PSSO_RenderInfo_BytesPerRow); ri->RGBFormat = get_long (amigamemptr + PSSO_RenderInfo_RGBFormat); @@ -240,7 +250,7 @@ static int CopyRenderInfoStructureA2U (u static int CopyPatternStructureA2U (uaecptr amigamemptr, struct Pattern *pattern) { uaecptr memp = get_long (amigamemptr + PSSO_Pattern_Memory); - if (valid_address (memp, 1 /* FIXME */)) { + if (valid_address (memp, PSSO_Pattern_sizeof)) { pattern->Memory = get_real_address (memp); pattern->XOffset = get_word (amigamemptr + PSSO_Pattern_XOffset); pattern->YOffset = get_word (amigamemptr + PSSO_Pattern_YOffset); @@ -313,9 +323,9 @@ static void CopyLibResolutionStructureU2 char *uaememptr = 0; int i; - uaememptr = gfxmem_xlate(amigamemptr); /* I know that amigamemptr is inside my gfxmem chunk, so I can just do the xlate() */ - memset(uaememptr, 0, PSSO_LibResolution_sizeof); /* zero out our LibResolution structure */ - strcpy(uaememptr + PSSO_LibResolution_P96ID, libres->P96ID); + uaememptr = gfxmem_xlate (amigamemptr); /* I know that amigamemptr is inside my gfxmem chunk, so I can just do the xlate() */ + memset (uaememptr, 0, PSSO_LibResolution_sizeof); /* zero out our LibResolution structure */ + strcpy (uaememptr + PSSO_LibResolution_P96ID, libres->P96ID); put_long (amigamemptr + PSSO_LibResolution_DisplayID, libres->DisplayID); put_word (amigamemptr + PSSO_LibResolution_Width, libres->Width); put_word (amigamemptr + PSSO_LibResolution_Height, libres->Height); @@ -560,9 +570,9 @@ static int renderinfo_is_current_screen { if (! picasso_on) return 0; - if (ri->Memory != gfxmemory + (picasso96_state.Address - gfxmem_start)) { + if (ri->Memory != gfxmemory + (picasso96_state.Address - gfxmem_start)) return 0; - } + return 1; } @@ -629,16 +639,16 @@ static void FillBoardInfo (uaecptr amiga { char *uaememptr; switch (dm->depth) { - case 1: + case 1: res->Modes[CHUNKY] = amigamemptr; break; - case 2: + case 2: res->Modes[HICOLOR] = amigamemptr; break; - case 3: + case 3: res->Modes[TRUECOLOR] = amigamemptr; break; - default: + default: res->Modes[TRUEALPHA] = amigamemptr; break; } @@ -667,6 +677,30 @@ static void FillBoardInfo (uaecptr amiga put_long (amigamemptr + PSSO_ModeInfo_PixelClock, dm->res.width * dm->res.height * dm->refresh); } +static uae_u32 AssignModeID (int i, int count) +{ + if (DisplayModes[i].res.width == 320 && DisplayModes[i].res.height == 200) + return 0x50001000; + else if (DisplayModes[i].res.width == 320 && DisplayModes[i].res.height == 240) + return 0x50011000; + else if (DisplayModes[i].res.width == 640 && DisplayModes[i].res.height == 400) + return 0x50021000; + else if (DisplayModes[i].res.width == 640 && DisplayModes[i].res.height == 480) + return 0x50031000; + else if (DisplayModes[i].res.width == 800 && DisplayModes[i].res.height == 600) + return 0x50041000; + else if (DisplayModes[i].res.width == 1024 && DisplayModes[i].res.height == 768) + return 0x50051000; + else if (DisplayModes[i].res.width == 1152 && DisplayModes[i].res.height == 864) + return 0x50061000; + else if (DisplayModes[i].res.width == 1280 && DisplayModes[i].res.height == 1024) + return 0x50071000; + else if (DisplayModes[i].res.width == 1600 && DisplayModes[i].res.height == 1280) + return 0x50081000; + + return 0x50091000 + count * 0x10000; +} + /**************************************** * InitCard() * @@ -707,7 +741,7 @@ uae_u32 picasso_InitCard (void) for (i = 0; i < mode_count;) { int j = i; /* Add a LibResolution structure to the ResolutionsList MinList in our BoardInfo */ - res.DisplayID = 0x50001000 + LibResolutionStructureCount * 0x10000; + res.DisplayID = AssignModeID (i, LibResolutionStructureCount); res.BoardInfo = AmigaBoardInfo; res.Width = DisplayModes[i].res.width; res.Height = DisplayModes[i].res.height; @@ -719,7 +753,7 @@ uae_u32 picasso_InitCard (void) res.P96ID[4] = '0'; res.P96ID[5] = ':'; strcpy (res.Name, "uaegfx:"); - strncat (res.Name, DisplayModes[i].name, strchr(DisplayModes[i].name, ',') - DisplayModes[i].name); + strncat (res.Name, DisplayModes[i].name, strchr (DisplayModes[i].name, ',') - DisplayModes[i].name); res.Modes[PLANAR] = 0; res.Modes[CHUNKY] = 0; res.Modes[HICOLOR] = 0; @@ -820,7 +854,7 @@ uae_u32 picasso_SetColorArray (void) DX_SetPalette (start, count); } /*write_log ("SetColorArray(%d,%d)\n", start, count); */ - return m68k_dreg (regs, 0); + return 1; } /* @@ -837,7 +871,26 @@ uae_u32 picasso_SetDAC (void) * Lets us keep track of what pixel format the Amiga is thinking about in our frame-buffer */ write_log ("SetDAC()\n"); - return m68k_dreg (regs, 0); + return 1; +} + +static int set_gc_called = 0; +static int set_panning_called = 0; + +static void init_picasso_screen (void) +{ + if (! set_gc_called) + return; + + if (set_panning_called) + picasso96_state.Extent = picasso96_state.Address + (picasso96_state.BytesPerRow * picasso96_state.Height); + + gfx_set_picasso_modeinfo (picasso96_state.Width, picasso96_state.Height, + picasso96_state.GC_Depth, picasso96_state.RGBFormat); + DX_SetPalette (0, 256); + + wgfx_linestart = 0xFFFFFFFF; + picasso_refresh (); } /* @@ -867,12 +920,9 @@ uae_u32 picasso_SetGC (void) write_log ("SetGC(%d,%d,%d)\n", picasso96_state.Width, picasso96_state.Height, picasso96_state.GC_Depth); - gfx_set_picasso_modeinfo (picasso96_state.Width, picasso96_state.Height, - picasso96_state.GC_Depth, picasso96_state.RGBFormat); - wgfx_linestart = 0xFFFFFFFF; - picasso_refresh (); - - return m68k_dreg (regs, 0); + set_gc_called = 1; /* @@@ when do we need to reset this? */ + init_picasso_screen (); + return 1; } /* @@ -910,20 +960,14 @@ uae_u32 picasso_SetPanning (void) picasso96_state.BytesPerPixel = GetBytesPerPixel (picasso96_state.RGBFormat); picasso96_state.BytesPerRow = Width * picasso96_state.BytesPerPixel; - /* I assume SetGC() has been called, so I can calculate the Extent */ - picasso96_state.Extent = picasso96_state.Address + (picasso96_state.BytesPerRow * picasso96_state.Height); - + set_panning_called = 1; write_log ("SetPanning(%d, %d, %d) Start 0x%x, BPR %d\n", Width, picasso96_state.XOffset, picasso96_state.YOffset, start_of_screen, picasso96_state.BytesPerRow); - gfx_set_picasso_modeinfo (picasso96_state.Width, picasso96_state.Height, - picasso96_state.GC_Depth, picasso96_state.RGBFormat); - DX_SetPalette (0, 256); - wgfx_linestart = 0xFFFFFFFF; - picasso_refresh (); + init_picasso_screen (); - return m68k_dreg (regs, 0); + return 1; } static void do_xor8 (uae_u8 *ptr, long len, uae_u32 val) @@ -975,17 +1019,17 @@ static void do_xor8 (uae_u8 *ptr, long l uae_u32 picasso_InvertRect (void) { uaecptr renderinfo = m68k_areg (regs, 1); - long X = (uae_u16)m68k_dreg (regs, 0); - long Y = (uae_u16)m68k_dreg (regs, 1); - long Width = (uae_u16)m68k_dreg (regs, 2); - long Height = (uae_u16)m68k_dreg (regs, 3); + unsigned long X = (uae_u16)m68k_dreg (regs, 0); + unsigned long Y = (uae_u16)m68k_dreg (regs, 1); + unsigned long Width = (uae_u16)m68k_dreg (regs, 2); + unsigned long Height = (uae_u16)m68k_dreg (regs, 3); uae_u32 mask = m68k_dreg (regs, 4); int Bpp = GetBytesPerPixel (m68k_dreg (regs, 7)); uae_u32 xorval; - int lines; + unsigned int lines; struct RenderInfo ri; uae_u8 *uae_mem, *rectstart; - long width_in_bytes; + unsigned long width_in_bytes; wgfx_flushline (); @@ -1113,13 +1157,17 @@ uae_u32 picasso_FillRect (void) Pen &= Mask; Mask = ~Mask; - oldstart = start = ri.Memory + Y*ri.BytesPerRow + X*Bpp; - for (lines = 0; lines < Height; lines++, start += ri.BytesPerRow) { - uae_u8 *p = start; - for (cols = 0; cols < Width; cols++) { - uae_u32 tmpval = do_get_mem_byte (p) & Mask; - do_put_mem_byte (p, Pen | tmpval); - p++; + oldstart = ri.Memory + Y*ri.BytesPerRow + X*Bpp; + { + uae_u8 *start = oldstart; + uae_u8 *end = start + Height * ri.BytesPerRow; + for (; start != end; start += ri.BytesPerRow) { + uae_u8 *p = start; + unsigned long cols; + for (cols = 0; cols < Width; cols++) { + uae_u32 tmpval = do_get_mem_byte (p + cols) & Mask; + do_put_mem_byte (p + cols, Pen | tmpval); + } } } if (renderinfo_is_current_screen (&ri)) @@ -1133,11 +1181,11 @@ uae_u32 picasso_FillRect (void) * NOTE: If dstri is NULL, then we're only dealing with one RenderInfo area, and called from picasso_BlitRect() */ static void BlitRect (struct RenderInfo *ri, struct RenderInfo *dstri, - uae_u16 srcx, uae_u16 srcy, uae_u16 dstx, uae_u16 dsty, - uae_u16 width, uae_u16 height, uae_u8 mask) + unsigned long srcx, unsigned long srcy, unsigned long dstx, unsigned long dsty, + unsigned long width, unsigned long height, uae_u8 mask) { uae_u8 *src, *dst, *tmp, *tmp2, *tmp3; - int lines; + unsigned long lines; uae_u8 Bpp = GetBytesPerPixel(ri->RGBFormat); uae_u8 *blitsrc; unsigned long total_width = width * Bpp; @@ -1167,15 +1215,15 @@ static void BlitRect (struct RenderInfo if (mask == 0xFF || Bpp > 1) { /* handle normal case efficiently */ if (ri->Memory == dstri->Memory && dsty == srcy) { - int i; + unsigned long i; for (i = 0; i < height; i++, src += ri->BytesPerRow, dst += dstri->BytesPerRow) memmove (dst, src, total_width); } else if (dsty < srcy) { - int i; + unsigned long i; for (i = 0; i < height; i++, src += ri->BytesPerRow, dst += dstri->BytesPerRow) memcpy (dst, src, total_width); } else { - int i; + unsigned long i; src += (height-1) * ri->BytesPerRow; dst += (height-1) * dstri->BytesPerRow; for (i = 0; i < height; i++, src -= ri->BytesPerRow, dst -= dstri->BytesPerRow) @@ -1198,7 +1246,7 @@ static void BlitRect (struct RenderInfo /* copy the temporary buffer to the destination */ for (lines = 0; lines < height; lines++, dst += dstri->BytesPerRow, tmp += linewidth) { - int cols; + unsigned long cols; for (cols = 0; cols < width; cols++) { dst[cols] &= ~mask; dst[cols] |= tmp[cols] & mask; @@ -1229,12 +1277,12 @@ BlitRect: uae_u32 picasso_BlitRect (void) { uaecptr renderinfo = m68k_areg (regs, 1); - uae_u16 srcx = (uae_u16)m68k_dreg (regs, 0); - uae_u16 srcy = (uae_u16)m68k_dreg (regs, 1); - uae_u16 dstx = (uae_u16)m68k_dreg (regs, 2); - uae_u16 dsty = (uae_u16)m68k_dreg (regs, 3); - uae_u16 width = (uae_u16)m68k_dreg (regs, 4); - uae_u16 height = (uae_u16)m68k_dreg (regs, 5); + unsigned long srcx = (uae_u16)m68k_dreg (regs, 0); + unsigned long srcy = (uae_u16)m68k_dreg (regs, 1); + unsigned long dstx = (uae_u16)m68k_dreg (regs, 2); + unsigned long dsty = (uae_u16)m68k_dreg (regs, 3); + unsigned long width = (uae_u16)m68k_dreg (regs, 4); + unsigned long height = (uae_u16)m68k_dreg (regs, 5); uae_u8 Mask = (uae_u8)m68k_dreg (regs, 6); struct RenderInfo ri; @@ -1272,12 +1320,12 @@ uae_u32 picasso_BlitRectNoMaskComplete ( { uaecptr srcri = m68k_areg (regs, 1); uaecptr dstri = m68k_areg (regs, 2); - uae_u16 srcx = m68k_dreg (regs, 0); - uae_u16 srcy = m68k_dreg (regs, 1); - uae_u16 dstx = m68k_dreg (regs, 2); - uae_u16 dsty = m68k_dreg (regs, 3); - uae_u16 width = m68k_dreg (regs, 4); - uae_u16 height = m68k_dreg (regs, 5); + unsigned long srcx = (uae_u16)m68k_dreg (regs, 0); + unsigned long srcy = (uae_u16)m68k_dreg (regs, 1); + unsigned long dstx = (uae_u16)m68k_dreg (regs, 2); + unsigned long dsty = (uae_u16)m68k_dreg (regs, 3); + unsigned long width = (uae_u16)m68k_dreg (regs, 4); + unsigned long height = (uae_u16)m68k_dreg (regs, 5); uae_u8 OpCode = m68k_dreg (regs, 6); uae_u32 RGBFmt = m68k_dreg (regs, 7); struct RenderInfo src_ri, dst_ri; @@ -1375,18 +1423,18 @@ uae_u32 picasso_BlitPattern (void) { uaecptr rinf = m68k_areg (regs, 1); uaecptr pinf = m68k_areg (regs, 2); - long X = (uae_u16)m68k_dreg (regs, 0); - long Y = (uae_u16)m68k_dreg (regs, 1); - long W = (uae_u16)m68k_dreg (regs, 2); - long H = (uae_u16)m68k_dreg (regs, 3); + unsigned long X = (uae_u16)m68k_dreg (regs, 0); + unsigned long Y = (uae_u16)m68k_dreg (regs, 1); + unsigned long W = (uae_u16)m68k_dreg (regs, 2); + unsigned long H = (uae_u16)m68k_dreg (regs, 3); uae_u8 Mask = (uae_u8)m68k_dreg (regs, 4); uae_u32 RGBFmt = m68k_dreg (regs, 7); - uae_u8 Bpp = GetBytesPerPixel(RGBFmt); + uae_u8 Bpp = GetBytesPerPixel (RGBFmt); int inversion = 0; struct RenderInfo ri; struct Pattern pattern; - uae_u16 rows; + unsigned long rows; uae_u32 fgpen; uae_u8 *uae_mem, *frame_buffer_UAM; int xshift; @@ -1423,10 +1471,10 @@ uae_u32 picasso_BlitPattern (void) xshift = pattern.XOffset & 15; for (rows = 0; rows < H; rows++, uae_mem += ri.BytesPerRow) { - int prow = (rows + pattern.YOffset) & ysize_mask; + unsigned long prow = (rows + pattern.YOffset) & ysize_mask; unsigned int d = do_get_mem_word (((uae_u16 *)pattern.Memory) + prow); uae_u8 *uae_mem2 = uae_mem; - long cols; + unsigned long cols; if (xshift != 0) d = (d << xshift) | (d >> (16 - xshift)); @@ -1525,14 +1573,14 @@ uae_u32 picasso_BlitTemplate (void) uae_u8 inversion = 0; uaecptr rinf = m68k_areg (regs, 1); uaecptr tmpl = m68k_areg (regs, 2); - uae_u16 X = m68k_dreg (regs, 0); - uae_u16 Y = m68k_dreg (regs, 1); - uae_u16 W = m68k_dreg (regs, 2); - uae_u16 H = m68k_dreg (regs, 3); - uae_u16 Mask = m68k_dreg (regs, 4); + unsigned long X = (uae_u16)m68k_dreg (regs, 0); + unsigned long Y = (uae_u16)m68k_dreg (regs, 1); + unsigned long W = (uae_u16)m68k_dreg (regs, 2); + unsigned long H = (uae_u16)m68k_dreg (regs, 3); + uae_u16 Mask = (uae_u16)m68k_dreg (regs, 4); struct Template tmp; struct RenderInfo ri; - long rows; + unsigned long rows; int bitoffset; uae_u32 fgpen; uae_u8 *uae_mem, Bpp, *frame_buffer_UAM; @@ -1572,7 +1620,7 @@ uae_u32 picasso_BlitTemplate (void) tmpl_base = tmp.Memory + tmp.XOffset/8; for (rows = 0; rows < H; rows++, uae_mem += ri.BytesPerRow, tmpl_base += tmp.BytesPerRow) { - long cols; + unsigned long cols; uae_u8 *tmpl_mem = tmpl_base; uae_u8 *uae_mem2 = uae_mem; unsigned int data = *tmpl_mem; @@ -1701,19 +1749,22 @@ uae_u32 picasso_WaitVerticalSync (void) } /* NOTE: Watch for those planeptrs of 0x00000000 and 0xFFFFFFFF for all zero / all one bitmaps !!!! */ -static void PlanarToChunky(struct RenderInfo *ri, struct BitMap *bm, long srcx, long srcy, - long dstx, long dsty, long width, long height, uae_u8 mask) +static void PlanarToChunky(struct RenderInfo *ri, struct BitMap *bm, + unsigned long srcx, unsigned long srcy, + unsigned long dstx, unsigned long dsty, + unsigned long width, unsigned long height, + uae_u8 mask) { int j; uae_u8 *PLANAR[8], *image = ri->Memory + dstx * GetBytesPerPixel (ri->RGBFormat) + dsty*ri->BytesPerRow; int Depth = bm->Depth; - uae_u16 rows, bitoffset = srcx & 7; + unsigned long rows, bitoffset = srcx & 7; long eol_offset; /* if (mask != 0xFF) write_log ("P2C - pixel-width = %d, bit-offset = %d\n", width, bitoffset); */ - + /* Set up our bm->Planes[] pointers to the right horizontal offset */ for (j = 0; j < Depth; j++) { uae_u8 *p = bm->Planes[j]; @@ -1723,9 +1774,9 @@ static void PlanarToChunky(struct Render if ((mask & (1 << j)) == 0) PLANAR[j] = &all_zeros_bitmap; } - eol_offset = (long)bm->BytesPerRow - ((width + 7) >> 3); + eol_offset = (long)bm->BytesPerRow - (long)((width + 7) >> 3); for (rows = 0; rows < height; rows++, image += ri->BytesPerRow) { - long cols; + unsigned long cols; for (cols = 0; cols < width; cols += 8) { int k; @@ -1789,12 +1840,12 @@ uae_u32 picasso_BlitPlanar2Chunky (void) { uaecptr bm = m68k_areg (regs, 1); uaecptr ri = m68k_areg (regs, 2); - uae_u16 srcx = m68k_dreg (regs, 0) & 0xFFFF; - uae_u16 srcy = m68k_dreg (regs, 1) & 0xFFFF; - uae_u16 dstx = m68k_dreg (regs, 2) & 0xFFFF; - uae_u16 dsty = m68k_dreg (regs, 3) & 0xFFFF; - uae_u16 width = m68k_dreg (regs, 4) & 0xFFFF; - uae_u16 height = m68k_dreg (regs, 5) & 0xFFFF; + unsigned long srcx = (uae_u16)m68k_dreg (regs, 0); + unsigned long srcy = (uae_u16)m68k_dreg (regs, 1); + unsigned long dstx = (uae_u16)m68k_dreg (regs, 2); + unsigned long dsty = (uae_u16)m68k_dreg (regs, 3); + unsigned long width = (uae_u16)m68k_dreg (regs, 4); + unsigned long height = (uae_u16)m68k_dreg (regs, 5); uae_u8 minterm = m68k_dreg (regs, 6) & 0xFF; uae_u8 mask = m68k_dreg (regs, 7) & 0xFF; struct RenderInfo local_ri; @@ -1804,7 +1855,7 @@ uae_u32 picasso_BlitPlanar2Chunky (void) if (minterm != 0x0C) { write_log ("ERROR - BlitPlanar2Chunky() has minterm 0x%x, which I don't handle. Using fall-back routine.\n", - minterm); + minterm); return 0; } if (! CopyRenderInfoStructureA2U (ri, &local_ri) @@ -1820,13 +1871,14 @@ uae_u32 picasso_BlitPlanar2Chunky (void) local_ri.BytesPerRow, 0, 0, dstx, dsty, width, height, 0); - return m68k_dreg (regs, 0); + return 1; } /* NOTE: Watch for those planeptrs of 0x00000000 and 0xFFFFFFFF for all zero / all one bitmaps !!!! */ static void PlanarToDirect(struct RenderInfo *ri, struct BitMap *bm, - long srcx, long srcy, long dstx, long dsty, - long width, long height, uae_u8 mask, + unsigned long srcx, unsigned long srcy, + unsigned long dstx, unsigned long dsty, + unsigned long width, unsigned long height, uae_u8 mask, struct ColorIndexMapping *cim) { int j; @@ -1834,7 +1886,7 @@ static void PlanarToDirect(struct Render uae_u8 *PLANAR[8]; uae_u8 *image = ri->Memory + dstx * bpp + dsty * ri->BytesPerRow; int Depth = bm->Depth; - long rows; + unsigned long rows; long eol_offset; /* Set up our bm->Planes[] pointers to the right horizontal offset */ @@ -1847,9 +1899,9 @@ static void PlanarToDirect(struct Render PLANAR[j] = &all_zeros_bitmap; } - eol_offset = (long)bm->BytesPerRow - ((width + (srcx & 7)) >> 3); + eol_offset = (long)bm->BytesPerRow - (long)((width + (srcx & 7)) >> 3); for (rows = 0; rows < height; rows++, image += ri->BytesPerRow) { - long cols; + unsigned long cols; uae_u8 *image2 = image; unsigned int bitoffs = 7 - (srcx & 7); int i; @@ -1931,12 +1983,12 @@ uae_u32 picasso_BlitPlanar2Direct (void) uaecptr bm = m68k_areg (regs, 1); uaecptr ri = m68k_areg (regs, 2); uaecptr cim = m68k_areg (regs, 3); - uae_u16 srcx = m68k_dreg (regs, 0); - uae_u16 srcy = m68k_dreg (regs, 1); - uae_u16 dstx = m68k_dreg (regs, 2); - uae_u16 dsty = m68k_dreg (regs, 3); - uae_u16 width = m68k_dreg (regs, 4); - uae_u16 height = m68k_dreg (regs, 5); + unsigned long srcx = (uae_u16)m68k_dreg (regs, 0); + unsigned long srcy = (uae_u16)m68k_dreg (regs, 1); + unsigned long dstx = (uae_u16)m68k_dreg (regs, 2); + unsigned long dsty = (uae_u16)m68k_dreg (regs, 3); + unsigned long width = (uae_u16)m68k_dreg (regs, 4); + unsigned long height = (uae_u16)m68k_dreg (regs, 5); uae_u8 minterm = m68k_dreg (regs, 6); uae_u8 Mask = m68k_dreg (regs, 7); struct RenderInfo local_ri;