|
|
1.1 root 1: /*
1.1.1.5 root 2: Hatari - screen.h
3:
4: This file is distributed under the GNU Public License, version 2 or at your
5: option any later version. Read the file gpl.txt for details.
1.1 root 6: */
7:
1.1.1.5 root 8: #ifndef HATARI_SCREEN_H
9: #define HATARI_SCREEN_H
1.1.1.3 root 10:
11: #include <SDL_video.h> /* for SDL_Surface */
12:
1.1 root 13:
1.1.1.10! root 14: /* Assumes 32 pixels left+right */
! 15: #define SCREENBYTES_LEFT 16 /* Bytes for left border in ST screen */
! 16: #define SCREENBYTES_MIDDLE 160 /* Middle (320 pixels) */
! 17: #define SCREENBYTES_RIGHT 16 /* right border */
! 18: #define SCREENBYTES_LINE (SCREENBYTES_LEFT+SCREENBYTES_MIDDLE+SCREENBYTES_RIGHT)
! 19: #define SCREENBYTES_MONOLINE 80 /* Byte per line in ST-high resolution */
! 20:
! 21: /* Overscan values */
! 22: #define OVERSCAN_LEFT (SCREENBYTES_LEFT*2) /* Number of pixels in each border */
! 23: #define OVERSCAN_RIGHT (SCREENBYTES_RIGHT*2)
! 24: #define OVERSCAN_TOP 29
! 25: #define OVERSCAN_BOTTOM 47
! 26:
! 27: /* Number of visible screen lines including top/bottom borders */
! 28: #define NUM_VISIBLE_LINES (OVERSCAN_TOP+200+OVERSCAN_BOTTOM)
! 29:
! 30:
1.1 root 31: /* Frame buffer, used to store details in screen conversion */
1.1.1.5 root 32: typedef struct
33: {
1.1.1.9 root 34: Uint16 HBLPalettes[(NUM_VISIBLE_LINES+1)*16]; /* 1x16 colour palette per screen line, +1 line as may write after line 200 */
35: Uint32 HBLPaletteMasks[NUM_VISIBLE_LINES+1]; /* Bit mask of palette colours changes, top bit set is resolution change */
36: Uint8 *pSTScreen; /* Copy of screen built up during frame (copy each line on HBL to simulate monitor raster) */
37: Uint8 *pSTScreenCopy; /* Previous frames copy of above */
38: int OverscanModeCopy; /* Previous screen overscan mode */
39: BOOL bFullUpdate; /* Set TRUE to cause full update on next draw */
1.1 root 40: } FRAMEBUFFER;
1.1.1.5 root 41:
1.1.1.6 root 42: /* Number of frame buffers (1 or 2) - should be 2 for supporting screen flipping */
43: #define NUM_FRAMEBUFFERS 2
1.1 root 44:
45:
46: /* ST Resolution defines */
1.1.1.5 root 47: enum
48: {
1.1 root 49: ST_LOW_RES,
50: ST_MEDIUM_RES,
51: ST_HIGH_RES,
52: ST_LOWMEDIUM_MIX_RES
53: };
54:
55: /* Update Palette defines */
1.1.1.5 root 56: enum
57: {
1.1 root 58: UPDATE_PALETTE_NONE,
59: UPDATE_PALETTE_UPDATE,
60: UPDATE_PALETTE_FULLUPDATE
61: };
62:
63: /* Palette mask values for 'HBLPaletteMask[]' */
64: #define PALETTEMASK_RESOLUTION 0x00040000
1.1.1.2 root 65: #define PALETTEMASK_PALETTE 0x0000ffff
66: #define PALETTEMASK_UPDATERES 0x20000000
67: #define PALETTEMASK_UPDATEPAL 0x40000000
1.1 root 68: #define PALETTEMASK_UPDATEFULL 0x80000000
69: #define PALETTEMASK_UPDATEMASK (PALETTEMASK_UPDATEFULL|PALETTEMASK_UPDATEPAL|PALETTEMASK_UPDATERES)
70:
71: /* Overscan values */
1.1.1.5 root 72: enum
73: {
1.1.1.2 root 74: OVERSCANMODE_NONE, /* 0x00 */
75: OVERSCANMODE_TOP, /* 0x01 */
76: OVERSCANMODE_BOTTOM /* 0x02 (Top+Bottom) 0x03 */
1.1 root 77: };
78:
1.1.1.2 root 79: /* Available fullscreen modes */
80: #define NUM_DISPLAYMODEOPTIONS 6
1.1.1.5 root 81: enum
82: {
1.1.1.7 root 83: DISPLAYMODE_LOWCOL_LOWRES, /* low color, low resolution (fastest) */
84: DISPLAYMODE_LOWCOL_HIGHRES, /* low color, zoomed resolution */
85: DISPLAYMODE_LOWCOL_DUMMY, /* unused */
86: DISPLAYMODE_HICOL_LOWRES, /* high color, low resolution */
87: DISPLAYMODE_HICOL_HIGHRES, /* high color, zoomed resolution (slowest) */
88: DISPLAYMODE_HICOL_DUMMY /* unused */
1.1.1.2 root 89: };
90:
91:
1.1.1.9 root 92: extern BOOL bGrabMouse;
1.1 root 93: extern BOOL bInFullScreen;
94: extern int STRes,PrevSTRes;
1.1.1.9 root 95: extern int STScreenStartHorizLine;
96: extern int STScreenLeftSkipBytes;
97: extern FRAMEBUFFER *pFrameBuffer;
98: extern Uint8 *pSTScreen;
1.1.1.3 root 99: extern SDL_Surface *sdlscrn;
1.1.1.9 root 100: extern Uint32 STRGBPalette[16];
101: extern Uint32 ST2RGB[4096];
1.1 root 102:
103: extern void Screen_Init(void);
104: extern void Screen_UnInit(void);
105: extern void Screen_Reset(void);
106: extern void Screen_SetFullUpdate(void);
107: extern void Screen_EnterFullScreen(void);
108: extern void Screen_ReturnFromFullScreen(void);
1.1.1.6 root 109: extern void Screen_DidResolutionChange(void);
1.1 root 110: extern void Screen_Draw(void);
1.1.1.3 root 111:
1.1.1.5 root 112: #endif /* ifndef HATARI_SCREEN_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.