--- hatari/src/includes/screen.h 2019/04/01 07:09:16 1.1.1.1 +++ hatari/src/includes/screen.h 2019/04/01 07:11:28 1.1.1.6 @@ -1,16 +1,19 @@ /* - Hatari + Hatari - screen.h + + This file is distributed under the GNU Public License, version 2 or at your + option any later version. Read the file gpl.txt for details. */ -/* BMP header */ -/*typedef struct { - BITMAPFILEHEADER FileHeader; - BITMAPINFOHEADER InfoHeader; - RGBQUAD Colours[256]; -} BMP;*/ +#ifndef HATARI_SCREEN_H +#define HATARI_SCREEN_H + +#include /* for SDL_Surface */ + /* Frame buffer, used to store details in screen conversion */ -typedef struct { +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) */ @@ -18,23 +21,28 @@ typedef struct { int OverscanModeCopy; /* Previous screen overscan mode */ BOOL bFullUpdate; /* Set TRUE to cause full update on next draw */ } FRAMEBUFFER; + +/* 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 { +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 { +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 { +typedef struct +{ SCREENDRAW *pLowRes, *pAltLowRes; SCREENDRAW *pMediumRes, *pAltMediumRes; SCREENDRAW *pHighRes, *pAltHighRes; @@ -42,7 +50,8 @@ typedef struct { } SCREENDRAW_DISPLAYOPTIONS; /* ST Resolution defines */ -enum { +enum +{ ST_LOW_RES, ST_MEDIUM_RES, ST_HIGH_RES, @@ -50,7 +59,8 @@ enum { }; /* Update Palette defines */ -enum { +enum +{ UPDATE_PALETTE_NONE, UPDATE_PALETTE_UPDATE, UPDATE_PALETTE_FULLUPDATE @@ -58,28 +68,40 @@ enum { /* Palette mask values for 'HBLPaletteMask[]' */ #define PALETTEMASK_RESOLUTION 0x00040000 -#define PALETTEMASK_PALETTE 0x0000ffff -#define PALETTEMASK_UPDATERES 0x20000000 -#define PALETTEMASK_UPDATEPAL 0x40000000 +#define PALETTEMASK_PALETTE 0x0000ffff +#define PALETTEMASK_UPDATERES 0x20000000 +#define PALETTEMASK_UPDATEPAL 0x40000000 #define PALETTEMASK_UPDATEFULL 0x80000000 #define PALETTEMASK_UPDATEMASK (PALETTEMASK_UPDATEFULL|PALETTEMASK_UPDATEPAL|PALETTEMASK_UPDATERES) /* Overscan values */ -enum { - OVERSCANMODE_NONE, // 0x00 - OVERSCANMODE_TOP, // 0x01 - OVERSCANMODE_BOTTOM // 0x02 (Top+Bottom) 0x03 +enum +{ + OVERSCANMODE_NONE, /* 0x00 */ + OVERSCANMODE_TOP, /* 0x01 */ + OVERSCANMODE_BOTTOM /* 0x02 (Top+Bottom) 0x03 */ }; +/* Available fullscreen modes */ +#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) */ +}; + + /* 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 BMP ScreenBMP;*/ 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; @@ -88,25 +110,26 @@ extern BOOL bInFullScreen; extern BOOL bFullScreenHold; extern BOOL bScreenContentsChanged; extern int STRes,PrevSTRes; -extern volatile int VBLCounter; -extern volatile int OldVBLCounter; extern int STScreenLineOffset[NUM_VISIBLE_LINES]; extern unsigned long STRGBPalette[16]; extern unsigned long ST2RGB[2048]; +extern SDL_Surface *sdlscrn; +extern BOOL bGrabMouse; extern void Screen_Init(void); extern void Screen_UnInit(void); extern void Screen_Reset(void); extern void Screen_SetScreenLineOffsets(void); -//extern void Screen_SetBMPHeaders(BMP *pBMP,int Width,int Height,int BitCount); extern void Screen_SetFullUpdate(void); -extern void Screen_SetupRGBTable(BOOL bFullScreen); +extern void Screen_SetupRGBTable(void); extern void Screen_EnterFullScreen(void); extern void Screen_ReturnFromFullScreen(void); -extern void Screen_Clear_Window(void); +extern void Screen_ClearScreen(void); extern void Screen_SetDrawModes(void); -extern void Screen_AllocateScreenBitmap(int Width,int Height,int BitCount); +extern void Screen_DidResolutionChange(void); +extern void Screen_Handle8BitPalettes(void); extern void Screen_Blit(BOOL bSwapScreen); -extern FRAMEBUFFER *Screen_GetOtherFrameBuffer(void); extern void Screen_DrawFrame(BOOL bForceFlip); extern void Screen_Draw(void); + +#endif /* ifndef HATARI_SCREEN_H */