--- hatari/src/includes/screen.h 2019/04/01 07:13:05 1.1.1.10 +++ hatari/src/includes/screen.h 2019/04/01 07:14:44 1.1.1.12 @@ -11,21 +11,27 @@ #include /* for SDL_Surface */ -/* Assumes 32 pixels left+right */ -#define SCREENBYTES_LEFT 16 /* Bytes for left border in ST screen */ -#define SCREENBYTES_MIDDLE 160 /* Middle (320 pixels) */ -#define SCREENBYTES_RIGHT 16 /* right border */ +/* The 'screen' is a representation of the ST video memory */ +/* taking into account all the border tricks. Data are stored */ +/* in 'planar' format (1 word per plane) and are then converted */ +/* to an SDL buffer that will be displayed. */ +/* So, all video lines are converted to a unique line of */ +/* SCREENBYTES_LINE bytes in planar format. */ +/* SCREENBYTES_LINE should always be a multiple of 8. */ + +/* left/right borders must be multiple of 8 bytes */ +#define SCREENBYTES_LEFT (nBorderPixelsLeft/2) /* Bytes for left border */ +#define SCREENBYTES_MIDDLE 160 /* Middle (320 pixels) */ +#define SCREENBYTES_RIGHT (nBorderPixelsRight/2) /* Right border */ #define SCREENBYTES_LINE (SCREENBYTES_LEFT+SCREENBYTES_MIDDLE+SCREENBYTES_RIGHT) #define SCREENBYTES_MONOLINE 80 /* Byte per line in ST-high resolution */ /* Overscan values */ -#define OVERSCAN_LEFT (SCREENBYTES_LEFT*2) /* Number of pixels in each border */ -#define OVERSCAN_RIGHT (SCREENBYTES_RIGHT*2) -#define OVERSCAN_TOP 29 -#define OVERSCAN_BOTTOM 47 +#define OVERSCAN_TOP 29 +#define MAX_OVERSCAN_BOTTOM 47 /* number of bottom lines to display on screen */ /* Number of visible screen lines including top/bottom borders */ -#define NUM_VISIBLE_LINES (OVERSCAN_TOP+200+OVERSCAN_BOTTOM) +#define NUM_VISIBLE_LINES (OVERSCAN_TOP+200+MAX_OVERSCAN_BOTTOM) /* Frame buffer, used to store details in screen conversion */ @@ -36,21 +42,25 @@ typedef struct 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 */ + 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 -/* ST Resolution defines */ +/* ST/TT resolution defines */ enum { ST_LOW_RES, ST_MEDIUM_RES, ST_HIGH_RES, - ST_LOWMEDIUM_MIX_RES + TT_MEDIUM_RES = 4, + TT_HIGH_RES = 6, + TT_LOW_RES }; +#define ST_MEDIUM_RES_BIT 0x1 +#define ST_RES_MASK 0x3 /* Update Palette defines */ enum @@ -89,9 +99,10 @@ enum }; -extern BOOL bGrabMouse; -extern BOOL bInFullScreen; -extern int STRes,PrevSTRes; +extern bool bGrabMouse; +extern bool bInFullScreen; +extern int nScreenZoomX, nScreenZoomY; +extern int nBorderPixelsLeft, nBorderPixelsRight; extern int STScreenStartHorizLine; extern int STScreenLeftSkipBytes; extern FRAMEBUFFER *pFrameBuffer; @@ -106,7 +117,7 @@ extern void Screen_Reset(void); extern void Screen_SetFullUpdate(void); extern void Screen_EnterFullScreen(void); extern void Screen_ReturnFromFullScreen(void); -extern void Screen_DidResolutionChange(void); -extern void Screen_Draw(void); +extern void Screen_ModeChanged(void); +extern bool Screen_Draw(void); #endif /* ifndef HATARI_SCREEN_H */