--- uae/src/picasso96.c 2018/04/24 16:46:13 1.1.1.5 +++ uae/src/picasso96.c 2018/04/24 16:48:43 1.1.1.7 @@ -559,7 +559,7 @@ static void wgfx_do_flushline (void) wgfx_linestart = 0xFFFFFFFF; } -static __inline__ void wgfx_flushline (void) +STATIC_INLINE void wgfx_flushline (void) { if (wgfx_linestart == 0xFFFFFFFF || ! picasso_on) return; @@ -874,6 +874,25 @@ uae_u32 picasso_SetDAC (void) 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 (); +} + /* * SetGC: * a0: struct BoardInfo @@ -901,11 +920,8 @@ 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 (); - + set_gc_called = 1; /* @@@ when do we need to reset this? */ + init_picasso_screen (); return 1; } @@ -944,18 +960,12 @@ 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 1; } @@ -1343,30 +1353,30 @@ uae_u32 picasso_BlitRectNoMaskComplete ( } /* This utility function is used both by BlitTemplate() and BlitPattern() */ -static __inline__ void PixelWrite1(uae_u8 *mem, int bits, uae_u32 fgpen, uae_u32 mask) +STATIC_INLINE void PixelWrite1(uae_u8 *mem, int bits, uae_u32 fgpen, uae_u32 mask) { if (mask != 0xFF) fgpen = (fgpen & mask) | (do_get_mem_byte (mem + bits) & ~mask); do_put_mem_byte (mem + bits, fgpen); } -static __inline__ void PixelWrite2(uae_u8 *mem, int bits, uae_u32 fgpen) +STATIC_INLINE void PixelWrite2(uae_u8 *mem, int bits, uae_u32 fgpen) { do_put_mem_word (((uae_u16 *)mem) + bits, fgpen); } -static __inline__ void PixelWrite3(uae_u8 *mem, int bits, uae_u32 fgpen) +STATIC_INLINE void PixelWrite3(uae_u8 *mem, int bits, uae_u32 fgpen) { do_put_mem_byte (mem + bits*3, fgpen & 0x000000FF); *(uae_u16 *)(mem + bits*3+1) = (fgpen & 0x00FFFF00) >> 8; } -static __inline__ void PixelWrite4(uae_u8 *mem, int bits, uae_u32 fgpen) +STATIC_INLINE void PixelWrite4(uae_u8 *mem, int bits, uae_u32 fgpen) { do_put_mem_long (((uae_u32 *)mem) + bits, fgpen); } -static __inline__ void PixelWrite(uae_u8 *mem, int bits, uae_u32 fgpen, uae_u8 Bpp, uae_u32 mask) +STATIC_INLINE void PixelWrite(uae_u8 *mem, int bits, uae_u32 fgpen, uae_u8 Bpp, uae_u32 mask) { switch (Bpp) { case 1: