--- hatari/src/includes/screen.h 2019/04/01 07:10:53 1.1.1.5 +++ hatari/src/includes/screen.h 2019/04/01 07:12:37 1.1.1.9 @@ -14,40 +14,17 @@ /* Frame buffer, used to store details in screen conversion */ typedef struct { - unsigned short int HBLPalettes[(NUM_VISIBLE_LINES+1)*16]; /* 1x16 colour palette per screen line, +1 line as may write after line 200 */ - unsigned long HBLPaletteMasks[NUM_VISIBLE_LINES+1]; /* Bit mask of palette colours changes, top bit set is resolution change */ - unsigned char *pSTScreen; /* Copy of screen built up during frame(copy each line on HBL to simulate monitor raster) */ - unsigned char *pSTScreenCopy; /* Previous frames copy of above */ - int OverscanModeCopy; /* Previous screen overscan mode */ - BOOL bFullUpdate; /* Set TRUE to cause full update on next draw */ + Uint16 HBLPalettes[(NUM_VISIBLE_LINES+1)*16]; /* 1x16 colour palette per screen line, +1 line as may write after line 200 */ + Uint32 HBLPaletteMasks[NUM_VISIBLE_LINES+1]; /* Bit mask of palette colours changes, top bit set is resolution change */ + Uint8 *pSTScreen; /* Copy of screen built up during frame (copy each line on HBL to simulate monitor raster) */ + Uint8 *pSTScreenCopy; /* Previous frames copy of above */ + int OverscanModeCopy; /* Previous screen overscan mode */ + BOOL bFullUpdate; /* Set TRUE to cause full update on next draw */ } FRAMEBUFFER; -/* WinSTon used NUM_FRAMEBUFFERS=2, but =1 seems to be working better in Hatari... */ -#define NUM_FRAMEBUFFERS 1 +/* Number of frame buffers (1 or 2) - should be 2 for supporting screen flipping */ +#define NUM_FRAMEBUFFERS 2 -/* Details for each display screen - both Window and FullScreen */ -typedef struct -{ - int STScreenLeftSkipBytes,STScreenWidthBytes; /* Bytes to skip on left and number of bytes of screen to draw */ - int STScreenStartHorizLine,STScreenEndHorizLine; /* Start/End points in ST screen(28 is top of normal screen) */ - int PCStartHorizLine,PCStartXOffset; /* Source ST lines/bytes to skip, Destination screen lines/bytes to skip */ -} SCREENDRAW_OVERSCAN; - -typedef struct -{ - void *pDrawFunction; /* Draw function */ - /*int DirectDrawMode;*/ /* Mode required for DirectDraw. eg MODE_320x200x256 */ - int Width,Height,BitDepth,VertPixelsPerLine; - SCREENDRAW_OVERSCAN Overscan[4]; /* Details for starting offset for each overscan mode(none,top,bottom,both) */ -} SCREENDRAW; - -typedef struct -{ - SCREENDRAW *pLowRes, *pAltLowRes; - SCREENDRAW *pMediumRes, *pAltMediumRes; - SCREENDRAW *pHighRes, *pAltHighRes; - SCREENDRAW *pLowMediumMixRes, *pAltLowMediumMixRes; -} SCREENDRAW_DISPLAYOPTIONS; /* ST Resolution defines */ enum @@ -86,50 +63,33 @@ enum #define NUM_DISPLAYMODEOPTIONS 6 enum { - DISPLAYMODE_16COL_LOWRES, /* (fastest) */ - DISPLAYMODE_16COL_HIGHRES, - DISPLAYMODE_16COL_FULL, - DISPLAYMODE_HICOL_LOWRES, - DISPLAYMODE_HICOL_HIGHRES, - DISPLAYMODE_HICOL_FULL /* (slowest) */ + DISPLAYMODE_LOWCOL_LOWRES, /* low color, low resolution (fastest) */ + DISPLAYMODE_LOWCOL_HIGHRES, /* low color, zoomed resolution */ + DISPLAYMODE_LOWCOL_DUMMY, /* unused */ + DISPLAYMODE_HICOL_LOWRES, /* high color, low resolution */ + DISPLAYMODE_HICOL_HIGHRES, /* high color, zoomed resolution (slowest) */ + DISPLAYMODE_HICOL_DUMMY /* unused */ }; -/* For palette we don't go from colour '0' as the whole background would change, so go from this value */ -#define BASECOLOUR 0x0A -#define BASECOLOUR_LONG 0x0A0A0A0A - -extern SCREENDRAW ScreenDrawWindow[4]; -extern SCREENDRAW ScreenDrawFullScreen[4]; -extern FRAMEBUFFER *pFrameBuffer; -extern unsigned char *pScreenBitmap; -extern unsigned char *pSTScreen,*pSTScreenCopy; -extern unsigned char *pPCScreenDest; -extern int STScreenStartHorizLine,STScreenEndHorizLine; -extern int PCScreenBytesPerLine,STScreenWidthBytes,STScreenLeftSkipBytes; +extern BOOL bGrabMouse; extern BOOL bInFullScreen; -extern BOOL bFullScreenHold; -extern BOOL bScreenContentsChanged; extern int STRes,PrevSTRes; -extern int STScreenLineOffset[NUM_VISIBLE_LINES]; -extern unsigned long STRGBPalette[16]; -extern unsigned long ST2RGB[2048]; +extern int STScreenStartHorizLine; +extern int STScreenLeftSkipBytes; +extern FRAMEBUFFER *pFrameBuffer; +extern Uint8 *pSTScreen; extern SDL_Surface *sdlscrn; -extern BOOL bGrabMouse; +extern Uint32 STRGBPalette[16]; +extern Uint32 ST2RGB[4096]; extern void Screen_Init(void); extern void Screen_UnInit(void); extern void Screen_Reset(void); -extern void Screen_SetScreenLineOffsets(void); extern void Screen_SetFullUpdate(void); -extern void Screen_SetupRGBTable(void); extern void Screen_EnterFullScreen(void); extern void Screen_ReturnFromFullScreen(void); -extern void Screen_ClearScreen(void); -extern void Screen_SetDrawModes(void); -extern void Screen_Handle8BitPalettes(void); -extern void Screen_Blit(BOOL bSwapScreen); -extern void Screen_DrawFrame(BOOL bForceFlip); +extern void Screen_DidResolutionChange(void); extern void Screen_Draw(void); #endif /* ifndef HATARI_SCREEN_H */