Annotation of hatari/src/includes/video.h, revision 1.1.1.20

1.1       root        1: /*
1.1.1.4   root        2:   Hatari - video.h
                      3: 
1.1.1.16  root        4:   This file is distributed under the GNU General Public License, version 2
                      5:   or at your option any later version. Read the file gpl.txt for details.
1.1       root        6: */
                      7: 
1.1.1.4   root        8: #ifndef HATARI_VIDEO_H
                      9: #define HATARI_VIDEO_H
                     10: 
1.1.1.7   root       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: 
1.1.1.19  root       34: #define        VIDEO_50HZ              50
                     35: #define        VIDEO_60HZ              60
                     36: #define        VIDEO_71HZ              71
                     37: 
1.1.1.7   root       38: /* Scan lines per frame */
                     39: #define SCANLINES_PER_FRAME_50HZ 313    /* Number of scan lines per frame in 50 Hz */
                     40: #define SCANLINES_PER_FRAME_60HZ 263    /* Number of scan lines per frame in 60 Hz */
1.1.1.8   root       41: #define SCANLINES_PER_FRAME_71HZ 501    /* could also be 500 ? */
1.1.1.12  root       42: #define MAX_SCANLINES_PER_FRAME  SCANLINES_PER_FRAME_71HZ    /* Max. number of scan lines per frame */
1.1.1.7   root       43: 
                     44: /* Cycles per line */
                     45: #define CYCLES_PER_LINE_50HZ  512
                     46: #define CYCLES_PER_LINE_60HZ  508
1.1.1.8   root       47: #define CYCLES_PER_LINE_71HZ  224
1.1.1.7   root       48: 
                     49: /* Vertical border/display enable/disable:
                     50:  * Normal screen starts 63 lines in, top border is 29 lines */
1.1.1.10  root       51: #define VIDEO_START_HBL_50HZ   63      /* Usually the first line of the displayed screen in 50 Hz */
                     52: #define VIDEO_START_HBL_60HZ   34      /* The first line of the displayed screen in 60 Hz */
                     53: #define VIDEO_START_HBL_71HZ   34      /* FIXME: 34 is not verified */
                     54: #define FIRST_VISIBLE_HBL_50HZ  34     /* At this line we start rendering our screen in 50 Hz */
                     55: #define FIRST_VISIBLE_HBL_60HZ  (34-29)        /* At this line we start rendering our screen in 60 Hz (29 = 63-34) */
                     56: #define FIRST_VISIBLE_HBL_71HZ  34     /* FIXME: 34 is not verified */
1.1.1.7   root       57: 
1.1.1.10  root       58: #define VIDEO_HEIGHT_HBL_COLOR  200    /* This is usually the height of the screen */
                     59: #define VIDEO_HEIGHT_HBL_MONO   400
1.1.1.8   root       60: 
1.1.1.20! root       61: #define VIDEO_HEIGHT_BOTTOM_50HZ 45    /* number of extra pixel lines in a 50 Hz screen when removing bottom border */
        !            62:                                        /* (2 extra lines can be displayed by doing a 2nd 60/50 Hz switch at the end of the removed bottom border) */
        !            63: #define VIDEO_HEIGHT_BOTTOM_60HZ 26    /* number of extra pixel lines in a 60 Hz screen when removing bottom border */
1.1.1.7   root       64: 
1.1.1.10  root       65: #define VIDEO_END_HBL_50HZ     ( VIDEO_START_HBL_50HZ + VIDEO_HEIGHT_HBL_COLOR )       /* 263 */
                     66: #define VIDEO_END_HBL_60HZ     ( VIDEO_START_HBL_60HZ + VIDEO_HEIGHT_HBL_COLOR )       /* 234 */
1.1.1.19  root       67: #define VIDEO_END_HBL_71HZ     ( VIDEO_START_HBL_71HZ + VIDEO_HEIGHT_HBL_MONO )        /* 434 */
1.1.1.8   root       68: 
1.1.1.9   root       69: #define LINE_REMOVE_TOP_CYCLE_STF      504     /* switch to 60 Hz on line 33 should not occur after cycle 504 to remove top border */
                     70:                                                /* switch to 50 Hz should occur after cycle 504 on line 33 */
                     71: #define LINE_REMOVE_BOTTOM_CYCLE_STF   504     /* same value than top border, but on line 262 (50 Hz) or 233 (60 Hz) */
                     72: 
1.1.1.10  root       73: #define LINE_REMOVE_TOP_CYCLE_STE      500     /* on STE, switch can occur 4 cycles earlier than STF */
1.1.1.9   root       74: #define LINE_REMOVE_BOTTOM_CYCLE_STE   500
1.1.1.8   root       75: 
                     76: 
1.1.1.19  root       77: /* Values for VerticalOverscan */
                     78: #define        V_OVERSCAN_NONE                 0x00
                     79: #define        V_OVERSCAN_NO_TOP               0x01
                     80: #define        V_OVERSCAN_NO_BOTTOM_50         0x02
                     81: #define        V_OVERSCAN_NO_BOTTOM_60         0x04
                     82: #define        V_OVERSCAN_BOTTOM_SHORT_50      0x08
                     83: #define        V_OVERSCAN_NO_DE                0x10
                     84: 
                     85: 
1.1.1.8   root       86: #define LINE_START_CYCLE_50    56
                     87: #define LINE_START_CYCLE_60    52
1.1.1.12  root       88: #define LINE_START_CYCLE_71    0
1.1.1.10  root       89: #define LINE_END_CYCLE_50      376             /* LINE_START_CYCLE_50 + 320 */
                     90: #define LINE_END_CYCLE_60      372             /* LINE_START_CYCLE_60 + 320 */
1.1.1.12  root       91: #define LINE_END_CYCLE_71      160
                     92: #define LINE_END_CYCLE_NO_RIGHT        460             /* 372 + 44*2 */
1.1.1.13  root       93: #define LINE_END_CYCLE_50_2    (LINE_END_CYCLE_50+44*2)        /* 464, used in enchanted lands */
1.1.1.8   root       94: #define LINE_END_CYCLE_FULL    512                             /* used in enchanted lands */
1.1.1.19  root       95: #define LINE_LEFT_STAB_LOW     16      /* remove left + med res stab using hi/med/lo switches */
1.1.1.8   root       96: #define LINE_SCROLL_13_CYCLE_50        20      /* 13 pixels right "hardware" scrolling */
                     97: #define LINE_SCROLL_9_CYCLE_50 24      /*  9 pixels right "hardware" scrolling */
                     98: #define LINE_SCROLL_5_CYCLE_50 28      /*  5 pixels right "hardware" scrolling */
                     99: #define LINE_SCROLL_1_CYCLE_50 32      /*  1 pixels right "hardware" scrolling */
1.1.1.12  root      100: #define LINE_LEFT_MED_CYCLE_1  20      /* med res overscan, shifts display by 0 byte */
                    101: #define LINE_LEFT_MED_CYCLE_2  28      /* med res overscan, shifts display by 2 bytes */
                    102: #define        LINE_EMPTY_CYCLE_71_STF 28      /* on STF switch to hi/lo will create an empty line */
                    103: #define        LINE_EMPTY_CYCLE_71_STE (28+4)  /* on STE switch to hi/lo will create an empty line */
1.1.1.7   root      104: 
                    105: /* Bytes for opened left and right border: */
1.1.1.8   root      106: #define BORDERBYTES_NORMAL     160     /* size of a "normal" line */
                    107: #define BORDERBYTES_LEFT       26
1.1.1.13  root      108: #define BORDERBYTES_LEFT_2_STE 20
1.1.1.8   root      109: #define BORDERBYTES_RIGHT      44
                    110: #define BORDERBYTES_RIGHT_FULL 22
1.1.1.7   root      111: 
                    112: 
                    113: 
1.1.1.11  root      114: #define VBL_VIDEO_CYCLE_OFFSET_STF     64                      /* value of cycle counter when VBL signal is sent */
1.1.1.10  root      115: #define VBL_VIDEO_CYCLE_OFFSET_STE     (64+4)                  /* 4 cycles difference on STE */
                    116: 
1.1.1.11  root      117: #define HBL_VIDEO_CYCLE_OFFSET         0                       /* cycles after end of current line (ie on every 512 cycles in 50 Hz) */
1.1.1.16  root      118: #define TIMERB_VIDEO_CYCLE_OFFSET      24                      /* cycles after last displayed pixels : 376+24 in 50 Hz or 372+24 in 60 Hz */
1.1.1.10  root      119: 
1.1.1.20! root      120: /* This is when ff8205/07/09 are reloaded with the content of ff8201/03 : on line 310 cycle 56/60 in 50 Hz and on line 260 cycle 56/60 in 60 Hz */
1.1.1.19  root      121: /* (values were measured on real STF/STE) */
                    122: #define RESTART_VIDEO_COUNTER_LINE_50HZ                ( SCANLINES_PER_FRAME_50HZ-3 )
                    123: #define RESTART_VIDEO_COUNTER_LINE_60HZ                ( SCANLINES_PER_FRAME_60HZ-3 )
1.1.1.20! root      124: #define RESTART_VIDEO_COUNTER_CYCLE_STF                ( 56 )
        !           125: #define RESTART_VIDEO_COUNTER_CYCLE_STE                ( 56 + 4 )      /* 4 cycles later than STF */
1.1.1.8   root      126: 
1.1.1.10  root      127: /* anything above 4 uses automatic frameskip */
                    128: #define AUTO_FRAMESKIP_LIMIT   5
1.1.1.8   root      129: 
                    130: extern int STRes;
                    131: extern int TTRes;
1.1.1.10  root      132: extern int nFrameSkips;
                    133: extern bool bUseHighRes;
1.1.1.8   root      134: extern int nVBLs;
                    135: extern int nHBL;
                    136: extern int nStartHBL;
1.1.1.10  root      137: extern int nEndHBL;
1.1.1.19  root      138: extern int VerticalOverscan;
1.1.1.14  root      139: extern Uint16 HBLPalettes[HBL_PALETTE_LINES];
1.1.1.5   root      140: extern Uint16 *pHBLPalettes;
1.1.1.14  root      141: extern Uint32 HBLPaletteMasks[HBL_PALETTE_MASKS];
1.1.1.6   root      142: extern Uint32 *pHBLPaletteMasks;
1.1.1.5   root      143: extern Uint32 VideoBase;
1.1.1.3   root      144: extern int nScreenRefreshRate;
1.1       root      145: 
1.1.1.7   root      146: extern int nScanlinesPerFrame;
                    147: extern int nCyclesPerLine;
1.1.1.19  root      148: extern int TTSpecialVideoMode;
                    149: extern int LineTimerBPos;
1.1.1.12  root      150: extern int TimerBEventCountCycleStart;
                    151: 
1.1.1.15  root      152: #define HBL_JITTER_ARRAY_SIZE 5
1.1.1.11  root      153: extern int HblJitterIndex;
1.1.1.15  root      154: extern const int HblJitterArray[HBL_JITTER_ARRAY_SIZE];
                    155: extern const int HblJitterArrayPending[HBL_JITTER_ARRAY_SIZE];
                    156: #define VBL_JITTER_ARRAY_SIZE 5
1.1.1.11  root      157: extern int VblJitterIndex;
1.1.1.15  root      158: extern const int VblJitterArray[VBL_JITTER_ARRAY_SIZE];
                    159: extern const int VblJitterArrayPending[VBL_JITTER_ARRAY_SIZE];
1.1.1.11  root      160: 
1.1.1.7   root      161: 
1.1.1.12  root      162: /*--------------------------------------------------------------*/
                    163: /* Functions prototypes                                                */
                    164: /*--------------------------------------------------------------*/
                    165: 
                    166: extern void    Video_MemorySnapShot_Capture(bool bSave);
                    167: 
                    168: extern void    Video_Reset(void);
                    169: extern void    Video_Reset_Glue(void);
                    170: 
1.1.1.19  root      171: extern void    Video_InitTimings(void);
                    172: extern void    Video_SetTimings( MACHINETYPE MachineType , VIDEOTIMINGMODE Mode );
                    173: extern const char* Video_GetTimings_Name ( void );
                    174: 
1.1.1.12  root      175: extern void    Video_ConvertPosition( int FrameCycles , int *pHBL , int *pLineCycles );
                    176: extern void    Video_GetPosition( int *pFrameCycles , int *pHBL , int *pLineCycles );
                    177: extern void    Video_GetPosition_OnWriteAccess( int *pFrameCycles , int *pHBL , int *pLineCycles );
                    178: extern void    Video_GetPosition_OnReadAccess( int *pFrameCycles , int *pHBL , int *pLineCycles );
                    179: 
                    180: extern void    Video_Sync_WriteByte(void);
                    181: 
                    182: extern int     Video_TimerB_GetPos( int LineNumber );
                    183: 
                    184: extern void    Video_InterruptHandler_HBL(void);
                    185: extern void    Video_InterruptHandler_EndLine(void);
1.1.1.4   root      186: 
1.1.1.12  root      187: extern void    Video_SetScreenRasters(void);
                    188: extern void    Video_GetTTRes(int *width, int *height, int *bpp);
1.1.1.13  root      189: extern bool    Video_RenderTTScreen(void);
1.1.1.12  root      190: 
1.1.1.19  root      191: extern void    Video_AddInterruptTimerB ( int LineVideo , int CycleVideo , int Pos );
1.1.1.12  root      192: 
                    193: extern void    Video_StartInterrupts ( int PendingCyclesOver );
                    194: extern void    Video_InterruptHandler_VBL(void);
                    195: 
1.1.1.19  root      196: extern void Video_ScreenBase_WriteByte(void);
1.1.1.8   root      197: extern void Video_ScreenCounter_ReadByte(void);
1.1.1.12  root      198: extern void Video_ScreenCounter_WriteByte(void);
1.1.1.5   root      199: extern void Video_Sync_ReadByte(void);
                    200: extern void Video_BaseLow_ReadByte(void);
                    201: extern void Video_LineWidth_ReadByte(void);
1.1.1.19  root      202: extern void Video_Res_ReadByte(void);
1.1.1.7   root      203: extern void Video_HorScroll_Read(void);
                    204: extern void Video_LineWidth_WriteByte(void);
1.1.1.5   root      205: extern void Video_Color0_WriteWord(void);
                    206: extern void Video_Color1_WriteWord(void);
                    207: extern void Video_Color2_WriteWord(void);
                    208: extern void Video_Color3_WriteWord(void);
                    209: extern void Video_Color4_WriteWord(void);
                    210: extern void Video_Color5_WriteWord(void);
                    211: extern void Video_Color6_WriteWord(void);
                    212: extern void Video_Color7_WriteWord(void);
                    213: extern void Video_Color8_WriteWord(void);
                    214: extern void Video_Color9_WriteWord(void);
                    215: extern void Video_Color10_WriteWord(void);
                    216: extern void Video_Color11_WriteWord(void);
                    217: extern void Video_Color12_WriteWord(void);
                    218: extern void Video_Color13_WriteWord(void);
                    219: extern void Video_Color14_WriteWord(void);
                    220: extern void Video_Color15_WriteWord(void);
1.1.1.17  root      221: extern void Video_Color0_ReadWord(void);
                    222: extern void Video_Color1_ReadWord(void);
                    223: extern void Video_Color2_ReadWord(void);
                    224: extern void Video_Color3_ReadWord(void);
                    225: extern void Video_Color4_ReadWord(void);
                    226: extern void Video_Color5_ReadWord(void);
                    227: extern void Video_Color6_ReadWord(void);
                    228: extern void Video_Color7_ReadWord(void);
                    229: extern void Video_Color8_ReadWord(void);
                    230: extern void Video_Color9_ReadWord(void);
                    231: extern void Video_Color10_ReadWord(void);
                    232: extern void Video_Color11_ReadWord(void);
                    233: extern void Video_Color12_ReadWord(void);
                    234: extern void Video_Color13_ReadWord(void);
                    235: extern void Video_Color14_ReadWord(void);
                    236: extern void Video_Color15_ReadWord(void);
1.1.1.19  root      237: extern void Video_Res_WriteByte(void);
                    238: extern void Video_HorScroll_Read_8264(void);
                    239: extern void Video_HorScroll_Read_8265(void);
1.1.1.10  root      240: extern void Video_HorScroll_Write_8264(void);
                    241: extern void Video_HorScroll_Write_8265(void);
1.1.1.7   root      242: extern void Video_HorScroll_Write(void);
1.1.1.8   root      243: extern void Video_TTShiftMode_WriteWord(void);
1.1.1.19  root      244: extern void Video_TTColorRegs_Write(void);
                    245: extern void Video_TTColorRegs_STRegWrite(void);
1.1.1.5   root      246: 
1.1.1.18  root      247: extern void Video_Info(FILE *fp, Uint32 dummy);
1.1.1.17  root      248: 
1.1.1.4   root      249: #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.