|
|
1.1 root 1: /*
2: Hatari
3: */
4:
5: /* BMP header */
6: /*typedef struct {
7: BITMAPFILEHEADER FileHeader;
8: BITMAPINFOHEADER InfoHeader;
9: RGBQUAD Colours[256];
10: } BMP;*/
11:
12: /* Frame buffer, used to store details in screen conversion */
13: typedef struct {
14: unsigned short int HBLPalettes[(NUM_VISIBLE_LINES+1)*16]; /* 1x16 colour palette per screen line, +1 line as may write after line 200 */
15: unsigned long HBLPaletteMasks[NUM_VISIBLE_LINES+1]; /* Bit mask of palette colours changes, top bit set is resolution change */
16: unsigned char *pSTScreen; /* Copy of screen built up during frame(copy each line on HBL to simulate monitor raster) */
17: unsigned char *pSTScreenCopy; /* Previous frames copy of above */
18: int OverscanModeCopy; /* Previous screen overscan mode */
19: BOOL bFullUpdate; /* Set TRUE to cause full update on next draw */
20: } FRAMEBUFFER;
21: #define NUM_FRAMEBUFFERS 2
22:
23: /* Details for each display screen - both Window and FullScreen */
24: typedef struct {
25: int STScreenLeftSkipBytes,STScreenWidthBytes; /* Bytes to skip on left and number of bytes of screen to draw */
26: int STScreenStartHorizLine,STScreenEndHorizLine; /* Start/End points in ST screen(28 is top of normal screen) */
27: int PCStartHorizLine,PCStartXOffset; /* Source ST lines/bytes to skip, Destination screen lines/bytes to skip */
28: } SCREENDRAW_OVERSCAN;
29:
30: typedef struct {
31: void *pDrawFunction; /* Draw function */
32: /*int DirectDrawMode;*/ /* Mode required for DirectDraw. eg MODE_320x200x256 */
33: int Width,Height,BitDepth,VertPixelsPerLine;
34: SCREENDRAW_OVERSCAN Overscan[4]; /* Details for starting offset for each overscan mode(none,top,bottom,both) */
35: } SCREENDRAW;
36:
37: typedef struct {
38: SCREENDRAW *pLowRes, *pAltLowRes;
39: SCREENDRAW *pMediumRes, *pAltMediumRes;
40: SCREENDRAW *pHighRes, *pAltHighRes;
41: SCREENDRAW *pLowMediumMixRes, *pAltLowMediumMixRes;
42: } SCREENDRAW_DISPLAYOPTIONS;
43:
44: /* ST Resolution defines */
45: enum {
46: ST_LOW_RES,
47: ST_MEDIUM_RES,
48: ST_HIGH_RES,
49: ST_LOWMEDIUM_MIX_RES
50: };
51:
52: /* Update Palette defines */
53: enum {
54: UPDATE_PALETTE_NONE,
55: UPDATE_PALETTE_UPDATE,
56: UPDATE_PALETTE_FULLUPDATE
57: };
58:
59: /* Palette mask values for 'HBLPaletteMask[]' */
60: #define PALETTEMASK_RESOLUTION 0x00040000
61: #define PALETTEMASK_PALETTE 0x0000ffff
62: #define PALETTEMASK_UPDATERES 0x20000000
63: #define PALETTEMASK_UPDATEPAL 0x40000000
64: #define PALETTEMASK_UPDATEFULL 0x80000000
65: #define PALETTEMASK_UPDATEMASK (PALETTEMASK_UPDATEFULL|PALETTEMASK_UPDATEPAL|PALETTEMASK_UPDATERES)
66:
67: /* Overscan values */
68: enum {
69: OVERSCANMODE_NONE, // 0x00
70: OVERSCANMODE_TOP, // 0x01
71: OVERSCANMODE_BOTTOM // 0x02 (Top+Bottom) 0x03
72: };
73:
74: /* For palette we don't go from colour '0' as the whole background would change, so go from this value */
75: #define BASECOLOUR 0x0A
76: #define BASECOLOUR_LONG 0x0A0A0A0A
77:
78: /*extern BMP ScreenBMP;*/
79: extern SCREENDRAW ScreenDrawWindow[4];
80: extern SCREENDRAW ScreenDrawFullScreen[4];
81: extern FRAMEBUFFER *pFrameBuffer;
82: extern unsigned char *pScreenBitmap;
83: extern unsigned char *pSTScreen,*pSTScreenCopy;
84: extern unsigned char *pPCScreenDest;
85: extern int STScreenStartHorizLine,STScreenEndHorizLine;
86: extern int PCScreenBytesPerLine,STScreenWidthBytes,STScreenLeftSkipBytes;
87: extern BOOL bInFullScreen;
88: extern BOOL bFullScreenHold;
89: extern BOOL bScreenContentsChanged;
90: extern int STRes,PrevSTRes;
91: extern volatile int VBLCounter;
92: extern volatile int OldVBLCounter;
93: extern int STScreenLineOffset[NUM_VISIBLE_LINES];
94: extern unsigned long STRGBPalette[16];
95: extern unsigned long ST2RGB[2048];
96:
97: extern void Screen_Init(void);
98: extern void Screen_UnInit(void);
99: extern void Screen_Reset(void);
100: extern void Screen_SetScreenLineOffsets(void);
101: //extern void Screen_SetBMPHeaders(BMP *pBMP,int Width,int Height,int BitCount);
102: extern void Screen_SetFullUpdate(void);
103: extern void Screen_SetupRGBTable(BOOL bFullScreen);
104: extern void Screen_EnterFullScreen(void);
105: extern void Screen_ReturnFromFullScreen(void);
106: extern void Screen_Clear_Window(void);
107: extern void Screen_SetDrawModes(void);
108: extern void Screen_AllocateScreenBitmap(int Width,int Height,int BitCount);
109: extern void Screen_Blit(BOOL bSwapScreen);
110: extern FRAMEBUFFER *Screen_GetOtherFrameBuffer(void);
111: extern void Screen_DrawFrame(BOOL bForceFlip);
112: extern void Screen_Draw(void);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.