|
|
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.