Annotation of previous/src/includes/video.h, revision 1.1

1.1     ! root        1: /*
        !             2:   Hatari - video.h
        !             3: 
        !             4:   This file is distributed under the GNU Public License, version 2 or at
        !             5:   your option any later version. Read the file gpl.txt for details.
        !             6: */
        !             7: 
        !             8: #ifndef HATARI_VIDEO_H
        !             9: #define HATARI_VIDEO_H
        !            10: 
        !            11: /*
        !            12:   All the following processor timings are based on a bog standard 8MHz 68000 as
        !            13:   found in all standard STs:
        !            14: 
        !            15:   Clock cycles per line (50Hz)      : 512
        !            16:   NOPs per scan line (50Hz)         : 128
        !            17:   Scan lines per VBL (50Hz)         : 313 (64 at top,200 screen,49 bottom)
        !            18: 
        !            19:   Clock cycles per line (60Hz)      : 508
        !            20:   NOPs per scan line (60Hz)         : 127
        !            21:   Scan lines per VBL (60Hz)         : 263
        !            22: 
        !            23:   Clock cycles per VBL (50Hz)       : 160256
        !            24:   NOPs per VBL (50Hz)               : 40064
        !            25: 
        !            26:   Pixels per clock cycle (low res)  : 1
        !            27:   Pixels per clock cycle (med res)  : 2
        !            28:   Pixels per clock cycle (high res) : 4
        !            29:   Pixels per NOP (low res)          : 4
        !            30:   Pixels per NOP (med res)          : 8
        !            31:   Pixels per NOP (high res)         : 16
        !            32: */
        !            33: 
        !            34: /* Scan lines per frame */
        !            35: #define SCANLINES_PER_FRAME_50HZ 313    /* Number of scan lines per frame in 50 Hz */
        !            36: #define SCANLINES_PER_FRAME_60HZ 263    /* Number of scan lines per frame in 60 Hz */
        !            37: #define SCANLINES_PER_FRAME_71HZ 501    /* could also be 500 ? */
        !            38: #define MAX_SCANLINES_PER_FRAME  SCANLINES_PER_FRAME_71HZ    /* Max. number of scan lines per frame */
        !            39: 
        !            40: /* Cycles per line */
        !            41: #define CYCLES_PER_LINE_50HZ  512
        !            42: #define CYCLES_PER_LINE_60HZ  508
        !            43: #define CYCLES_PER_LINE_71HZ  224
        !            44: 
        !            45: /* Vertical border/display enable/disable:
        !            46:  * Normal screen starts 63 lines in, top border is 29 lines */
        !            47: #define VIDEO_START_HBL_50HZ   63      /* Usually the first line of the displayed screen in 50 Hz */
        !            48: #define VIDEO_START_HBL_60HZ   34      /* The first line of the displayed screen in 60 Hz */
        !            49: #define VIDEO_START_HBL_71HZ   34      /* FIXME: 34 is not verified */
        !            50: #define FIRST_VISIBLE_HBL_50HZ  34     /* At this line we start rendering our screen in 50 Hz */
        !            51: #define FIRST_VISIBLE_HBL_60HZ  (34-29)        /* At this line we start rendering our screen in 60 Hz (29 = 63-34) */
        !            52: #define FIRST_VISIBLE_HBL_71HZ  34     /* FIXME: 34 is not verified */
        !            53: 
        !            54: #define VIDEO_HEIGHT_HBL_COLOR  200    /* This is usually the height of the screen */
        !            55: #define VIDEO_HEIGHT_HBL_MONO   400
        !            56: 
        !            57: #define VIDEO_HEIGHT_BOTTOM_50HZ 47    /* number of lines in a 50 Hz bottom border */
        !            58: #define VIDEO_HEIGHT_BOTTOM_60HZ 29    /* number of lines in a 60 Hz bottom border */
        !            59: 
        !            60: #define VIDEO_END_HBL_50HZ     ( VIDEO_START_HBL_50HZ + VIDEO_HEIGHT_HBL_COLOR )       /* 263 */
        !            61: #define VIDEO_END_HBL_60HZ     ( VIDEO_START_HBL_60HZ + VIDEO_HEIGHT_HBL_COLOR )       /* 234 */
        !            62: 
        !            63: #define LINE_REMOVE_TOP_CYCLE_STF      504     /* switch to 60 Hz on line 33 should not occur after cycle 504 to remove top border */
        !            64:                                                /* switch to 50 Hz should occur after cycle 504 on line 33 */
        !            65: #define LINE_REMOVE_BOTTOM_CYCLE_STF   504     /* same value than top border, but on line 262 (50 Hz) or 233 (60 Hz) */
        !            66: 
        !            67: #define LINE_REMOVE_TOP_CYCLE_STE      500     /* on STE, switch can occur 4 cycles earlier than STF */
        !            68: #define LINE_REMOVE_BOTTOM_CYCLE_STE   500
        !            69: 
        !            70: 
        !            71: #define LINE_START_CYCLE_50    56
        !            72: #define LINE_START_CYCLE_60    52
        !            73: #define LINE_START_CYCLE_71    0
        !            74: #define LINE_END_CYCLE_50      376             /* LINE_START_CYCLE_50 + 320 */
        !            75: #define LINE_END_CYCLE_60      372             /* LINE_START_CYCLE_60 + 320 */
        !            76: #define LINE_END_CYCLE_71      160
        !            77: #define LINE_END_CYCLE_NO_RIGHT        460             /* 372 + 44*2 */
        !            78: #define LINE_END_CYCLE_50_2    (LINE_END_CYCLE_50+44*2)        /* 464, used in enchanted lands */
        !            79: #define LINE_END_CYCLE_FULL    512                             /* used in enchanted lands */
        !            80: #define LINE_SCROLL_13_CYCLE_50        20      /* 13 pixels right "hardware" scrolling */
        !            81: #define LINE_SCROLL_9_CYCLE_50 24      /*  9 pixels right "hardware" scrolling */
        !            82: #define LINE_SCROLL_5_CYCLE_50 28      /*  5 pixels right "hardware" scrolling */
        !            83: #define LINE_SCROLL_1_CYCLE_50 32      /*  1 pixels right "hardware" scrolling */
        !            84: #define LINE_LEFT_MED_CYCLE_1  20      /* med res overscan, shifts display by 0 byte */
        !            85: #define LINE_LEFT_MED_CYCLE_2  28      /* med res overscan, shifts display by 2 bytes */
        !            86: #define        LINE_EMPTY_CYCLE_71_STF 28      /* on STF switch to hi/lo will create an empty line */
        !            87: #define        LINE_EMPTY_CYCLE_71_STE (28+4)  /* on STE switch to hi/lo will create an empty line */
        !            88: 
        !            89: /* Bytes for opened left and right border: */
        !            90: #define BORDERBYTES_NORMAL     160     /* size of a "normal" line */
        !            91: #define BORDERBYTES_LEFT       26
        !            92: #define BORDERBYTES_LEFT_2_STE 20
        !            93: #define BORDERBYTES_RIGHT      44
        !            94: #define BORDERBYTES_RIGHT_FULL 22
        !            95: 
        !            96: /* Legacy defines: */
        !            97: #define CYCLES_PER_FRAME    (nScanlinesPerFrame*nCyclesPerLine)  /* Cycles per VBL @ 50fps = 160256 */
        !            98: 
        !            99: 
        !           100: #define VBL_VIDEO_CYCLE_OFFSET_STF     64                      /* value of cycle counter when VBL signal is sent */
        !           101: #define VBL_VIDEO_CYCLE_OFFSET_STE     (64+4)                  /* 4 cycles difference on STE */
        !           102: 
        !           103: #define HBL_VIDEO_CYCLE_OFFSET         0                       /* cycles after end of current line (ie on every 512 cycles in 50 Hz) */
        !           104: #define TIMERB_VIDEO_CYCLE_OFFSET      28                      /* cycles after last displayed pixels : 376+28 in 50 Hz or 372+28 in 60 Hz */
        !           105: 
        !           106: /* This is when ff8205/07/09 are reloaded with the content of ff8201/03 (on line 310 in 50 Hz) */
        !           107: #define RESTART_VIDEO_COUNTER_CYCLE_STF        ( (SCANLINES_PER_FRAME_50HZ-3) * CYCLES_PER_LINE_50HZ + 48 )
        !           108: #define RESTART_VIDEO_COUNTER_CYCLE_STE        ( (SCANLINES_PER_FRAME_50HZ-3) * CYCLES_PER_LINE_50HZ + 48 + 4 )        /* 4 cycles later than STF */
        !           109: 
        !           110: /* anything above 4 uses automatic frameskip */
        !           111: #define AUTO_FRAMESKIP_LIMIT   5
        !           112: 
        !           113: extern int STRes;
        !           114: extern int TTRes;
        !           115: extern int nFrameSkips;
        !           116: extern bool bUseSTShifter;
        !           117: extern bool bUseHighRes;
        !           118: extern int nVBLs;
        !           119: extern int nHBL;
        !           120: extern int nStartHBL;
        !           121: extern int nEndHBL;
        !           122: extern int OverscanMode;
        !           123: extern Uint16 HBLPalettes[];
        !           124: extern Uint16 *pHBLPalettes;
        !           125: extern Uint32 HBLPaletteMasks[];
        !           126: extern Uint32 *pHBLPaletteMasks;
        !           127: extern Uint32 VideoBase;
        !           128: extern int nScreenRefreshRate;
        !           129: 
        !           130: extern int nScanlinesPerFrame;
        !           131: extern int nCyclesPerLine;
        !           132: 
        !           133: extern int LineTimerBCycle;
        !           134: extern int TimerBEventCountCycleStart;
        !           135: 
        !           136: extern int LastCycleHblException;
        !           137: 
        !           138: extern int HblJitterIndex;
        !           139: extern int HblJitterArray[];
        !           140: extern int HblJitterArrayPending[];
        !           141: extern int VblJitterIndex;
        !           142: extern int VblJitterArray[];
        !           143: extern int VblJitterArrayPending[];
        !           144: 
        !           145: 
        !           146: /*--------------------------------------------------------------*/
        !           147: /* Functions prototypes                                                */
        !           148: /*--------------------------------------------------------------*/
        !           149: 
        !           150: extern void    Video_MemorySnapShot_Capture(bool bSave);
        !           151: 
        !           152: extern void    Video_Reset(void);
        !           153: extern void    Video_Reset_Glue(void);
        !           154: 
        !           155: extern void    Video_ConvertPosition( int FrameCycles , int *pHBL , int *pLineCycles );
        !           156: extern void    Video_GetPosition( int *pFrameCycles , int *pHBL , int *pLineCycles );
        !           157: extern void    Video_GetPosition_OnWriteAccess( int *pFrameCycles , int *pHBL , int *pLineCycles );
        !           158: extern void    Video_GetPosition_OnReadAccess( int *pFrameCycles , int *pHBL , int *pLineCycles );
        !           159: 
        !           160: extern void    Video_Sync_WriteByte(void);
        !           161: 
        !           162: extern int     Video_TimerB_GetPos( int LineNumber );
        !           163: 
        !           164: extern void    Video_InterruptHandler_HBL(void);
        !           165: extern void    Video_InterruptHandler_EndLine(void);
        !           166: 
        !           167: extern void    Video_SetScreenRasters(void);
        !           168: extern void    Video_GetTTRes(int *width, int *height, int *bpp);
        !           169: extern bool    Video_RenderTTScreen(void);
        !           170: 
        !           171: extern void    Video_AddInterruptTimerB ( int Pos );
        !           172: 
        !           173: extern void    Video_StartInterrupts ( int PendingCyclesOver );
        !           174: extern void    Video_InterruptHandler_VBL(void);
        !           175: 
        !           176: extern void Video_ScreenBaseSTE_WriteByte(void);
        !           177: extern void Video_ScreenCounter_ReadByte(void);
        !           178: extern void Video_ScreenCounter_WriteByte(void);
        !           179: extern void Video_Sync_ReadByte(void);
        !           180: extern void Video_BaseLow_ReadByte(void);
        !           181: extern void Video_LineWidth_ReadByte(void);
        !           182: extern void Video_ShifterMode_ReadByte(void);
        !           183: extern void Video_HorScroll_Read(void);
        !           184: extern void Video_LineWidth_WriteByte(void);
        !           185: extern void Video_Color0_WriteWord(void);
        !           186: extern void Video_Color1_WriteWord(void);
        !           187: extern void Video_Color2_WriteWord(void);
        !           188: extern void Video_Color3_WriteWord(void);
        !           189: extern void Video_Color4_WriteWord(void);
        !           190: extern void Video_Color5_WriteWord(void);
        !           191: extern void Video_Color6_WriteWord(void);
        !           192: extern void Video_Color7_WriteWord(void);
        !           193: extern void Video_Color8_WriteWord(void);
        !           194: extern void Video_Color9_WriteWord(void);
        !           195: extern void Video_Color10_WriteWord(void);
        !           196: extern void Video_Color11_WriteWord(void);
        !           197: extern void Video_Color12_WriteWord(void);
        !           198: extern void Video_Color13_WriteWord(void);
        !           199: extern void Video_Color14_WriteWord(void);
        !           200: extern void Video_Color15_WriteWord(void);
        !           201: extern void Video_ShifterMode_WriteByte(void);
        !           202: extern void Video_HorScroll_Write_8264(void);
        !           203: extern void Video_HorScroll_Write_8265(void);
        !           204: extern void Video_HorScroll_Write(void);
        !           205: extern void Video_TTShiftMode_WriteWord(void);
        !           206: extern void Video_TTColorRegs_WriteWord(void);
        !           207: extern void Video_TTColorSTRegs_WriteWord(void);
        !           208: 
        !           209: #endif  /* HATARI_VIDEO_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.