Revision 972
Added by markw over 5 years ago
firmware_eclairexl/video_modes.c | ||
---|---|---|
#include <stdio.h>
|
||
#include <string.h>
|
||
#include <stdlib.h>
|
||
#include <byteswap.h>
|
||
|
||
typedef enum {MODE_NTSC_5994=0,MODE_NTSC_60=1,MODE_PAL_50=2,MODE_PAL_ORIG=3,MODE_NTSC_ORIG=4} video_pll_mode;
|
||
|
||
char const * mode_description[] =
|
||
{
|
||
"1440x576 50Hz interlace",
|
||
"720x576 50Hz",
|
||
"1280x720 50Hz",
|
||
"1920x1080 50Hz interlace",
|
||
"1440x480 59.94Hz interlace",
|
||
"720x480 59.94Hz",
|
||
"1280x720 60Hz",
|
||
"1920x1080 60Hz interlace"
|
||
};
|
||
|
||
typedef unsigned short uint16_t;
|
||
|
||
uint16_t crtc_registers[] =
|
||
{
|
||
/*pal576i*/
|
||
126, /*h_syncLen*/
|
||
138, /*h_preActiveLen*/
|
||
1440, /*h_activeLen*/
|
||
24, /*h_postActiveLen*/
|
||
3, /*v_syncLen*/
|
||
19, /*v_preActiveLen*/
|
||
288, /*v_activeLen*/
|
||
2, /*v_postActiveLen*/
|
||
1, /*v_interlace*/
|
||
864, /*v_interlaceDelayLen*/
|
||
21, /*mode */
|
||
3, /*clock select - 27MHz or 74.25MHz - TODO*/
|
||
|
||
/*pal576p*/
|
||
64, /*h_syncLen*/
|
||
68, /*h_preActiveLen*/
|
||
720, /*h_activeLen*/
|
||
12, /*h_postActiveLen*/
|
||
5, /*v_syncLen*/
|
||
39, /*v_preActiveLen*/
|
||
576, /*v_activeLen*/
|
||
5, /*v_postActiveLen*/
|
||
0, /*v_interlace*/
|
||
0, /*v_interlaceDelayLen*/
|
||
17, /*mode */
|
||
3, /*clock select - 27MHz or 74.25MHz - TODO*/
|
||
|
||
/*pal720p*/
|
||
40, /*h_syncLen*/
|
||
220, /*h_preActiveLen*/
|
||
1280, /*h_activeLen*/
|
||
440, /*h_postActiveLen*/
|
||
5, /*v_syncLen*/
|
||
20, /*v_preActiveLen*/
|
||
720, /*v_activeLen*/
|
||
5, /*v_postActiveLen*/
|
||
0, /*v_interlace*/
|
||
0, /*v_interlaceDelayLen*/
|
||
19, /*mode */
|
||
2, /*clock select - 27MHz or 74.25MHz - TODO*/
|
||
|
||
|
||
/* pal 1080i */
|
||
44, /*h_syncLen*/
|
||
148, /*h_preActiveLen*/
|
||
1920, /*h_activeLen*/
|
||
528, /*h_postActiveLen*/
|
||
5, /*v_syncLen*/
|
||
15, /*v_preActiveLen*/
|
||
540, /*v_activeLen*/
|
||
2, /*v_postActiveLen*/
|
||
1, /*v_interlace*/
|
||
1320, /*v_interlaceDelayLen*/
|
||
20, /*mode*/
|
||
2, /*clock select - 27MHz or 74.25MHz - TODO*/
|
||
|
||
/*ntsc480i*/
|
||
124, /*h_syncLen*/
|
||
114, /*h_preActiveLen*/
|
||
1440, /*h_activeLen*/
|
||
38, /*h_postActiveLen*/
|
||
3, /*v_syncLen*/
|
||
15, /*v_preActiveLen*/
|
||
240, /*v_activeLen*/
|
||
4, /*v_postActiveLen*/
|
||
1, /*v_interlace*/
|
||
858, /*v_interlaceDelayLen*/
|
||
6, /*mode */
|
||
3, /*clock select - 27MHz or 74.25MHz - TODO*/
|
||
|
||
|
||
/*ntsc480p*/
|
||
62, /*h_syncLen*/
|
||
60, /*h_preActiveLen*/
|
||
720, /*h_activeLen*/
|
||
16, /*h_postActiveLen*/
|
||
6, /*v_syncLen*/
|
||
30, /*v_preActiveLen*/
|
||
480, /*v_activeLen*/
|
||
9, /*v_postActiveLen*/
|
||
0, /*v_interlace*/
|
||
0, /*v_interlaceDelayLen*/
|
||
2, /*mode */
|
||
3, /*clock select - 27MHz or 74.25MHz - TODO*/
|
||
|
||
|
||
/* ntsc720p*/
|
||
40, /*h_syncLen*/
|
||
220, /*h_preActiveLen*/
|
||
1280, /*h_activeLen*/
|
||
110, /*h_postActiveLen*/
|
||
5, /*v_syncLen*/
|
||
20, /*v_preActiveLen*/
|
||
720, /*v_activeLen*/
|
||
5, /*v_postActiveLen*/
|
||
0, /*v_interlace*/
|
||
0, /*v_interlaceDelayLen*/
|
||
4, /*mode */
|
||
2, /*clock select - 27MHz or 74.25MHz - TODO*/
|
||
|
||
|
||
/* ntsc 1080i */
|
||
44, /*h_syncLen*/
|
||
148, /*h_preActiveLen*/
|
||
1920, /*h_activeLen*/
|
||
88, /*h_postActiveLen*/
|
||
5, /*v_syncLen*/
|
||
15, /*v_preActiveLen*/
|
||
540, /*v_activeLen*/
|
||
2, /*v_postActiveLen*/
|
||
1, /*v_interlace*/
|
||
1100, /*v_interlaceDelayLen*/
|
||
5, /*mode */
|
||
2 /*clock select - 27MHz or 74.25MHz - TODO*/
|
||
|
||
};
|
||
|
||
uint16_t scaler_registers[] =
|
||
{
|
||
400,400,328,164,328,1, /*pal576i*/
|
||
1024,1024,1,
|
||
400,400,328,164,164,2, /*pal576p*/
|
||
1024,512,2,
|
||
400,225,700,291,291,2, /*pal720p*/
|
||
576,426,2,
|
||
400,300,786,218,436,1, /*pal1080i*/
|
||
768,568,1,
|
||
400,400,328,164,328,1, /*ntsc480i*/
|
||
1024,1024,1,
|
||
400,400,328,164,164,2, /*ntsc480p*/
|
||
1024,512,2,
|
||
400,225,834,291,291,2, /*ntsc720p*/
|
||
576,358,2,
|
||
400,300,936,218,436,1, /*ntsc1080i*/
|
||
768,478,1
|
||
};
|
||
|
||
video_pll_mode const mode_freqs[] =
|
||
{
|
||
MODE_PAL_50,
|
||
MODE_PAL_50,
|
||
MODE_PAL_50,
|
||
MODE_PAL_50,
|
||
MODE_NTSC_5994,
|
||
MODE_NTSC_5994,
|
||
MODE_NTSC_60,
|
||
MODE_NTSC_60
|
||
};
|
||
|
||
/* mode layout
|
||
* 0 :name
|
||
64 :crtc
|
||
128:scaler
|
||
192:freq
|
||
*/
|
||
int main(void)
|
||
{
|
||
int nummodes = 8;
|
||
char * buffer = malloc(nummodes*256);
|
||
memset(buffer,0,nummodes*256);
|
||
|
||
for (int i=0;i!=nummodes*12;++i)
|
||
crtc_registers[i] = __bswap_16 (crtc_registers[i]);
|
||
|
||
for (int i=0;i!=nummodes*9;++i)
|
||
scaler_registers[i] = __bswap_16 (scaler_registers[i]);
|
||
|
||
for (int i=0;i!=nummodes;++i)
|
||
{
|
||
char * base = buffer+i*256;
|
||
strcpy(base,mode_description[i]);
|
||
memcpy(base+64,crtc_registers+(12*i),12*2);
|
||
memcpy(base+128,scaler_registers+(9*i),9*2);
|
||
memcpy(base+192,&mode_freqs[i],1);
|
||
}
|
||
|
||
FILE * f = fopen("video_modes.rom","w");
|
||
fwrite(buffer,1,nummodes*256,f);
|
||
fclose(f);
|
||
|
||
return 0;
|
||
}
|
||
|
||
|
Also available in: Unified diff
Create standard video mode rom