--- uae/src/picasso96.c 2018/04/24 16:46:13 1.1.1.5 +++ uae/src/picasso96.c 2018/04/24 16:47:26 1.1.1.6 @@ -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; }