Need help with a custom vfo for 2@1920x1200_60 -
ducks - 03-17-2019
Hi All,
After many year I'm back with an SGI. Back in the day I used to have a number of systems ranging from desktops to servers. As the story goes I sold them all. I few weeks back I came across a Tezro. Installed a fresh copy of 6.5.30 and hooked it up to two LCD's (EIZO ev2455). The panels are native 1920x1200.
I am able to run 2@1920x1080_60_ds, but both 2@1920x1200_60p and 2@1920x1200_60_ds are giving me issues. 2@1920x1200_60p gives me an invalid signal and 2@1920x1200_60_ds doesn't give any signal which makes sense as the pixel clock of 184.66Mhz is outside the DVI spec due to large blanking space.
2@1920x1200_60p is actually really close to what monitor should be able to accept:
60hz Horizontal
72.78Khz Vertical
153.71Mhz Pixel clock
Retrieved the EDID with my macbook from the monitor:
Code:
Mode = 1920 × 1200 @ 59.950Hz
Pixel Clock............. 154.00 MHz Non-Interlaced
Horizontal Vertical
Active.................. 1920 pixels 1200 lines
Front Porch............. 48 pixels 3 lines
Sync Width.............. 32 pixels 6 lines
Back Porch.............. 80 pixels 26 lines
Blanking................ 160 pixels 35 lines
Total................... 2080 pixels 1235 lines
Scan Rate............... 74.038 kHz 59.950 Hz
The biggest difference is the front and back porch being larger resulting in a higher horizontal scan rate compared to 2@1920x1200_60p.
The mode line should look like:
Code:
Modeline "1920x1200" 154 1920 1968 2000 2080 1200 1203 1209 1235 -hsync
Reading through the old Nekochan archive I found that creating DCD vfo's is some sort of black magic and only a few have been able to do it but unfortunately no instructions.
Is there anyone here who can help me create the vfo or create one for me?
RE: Need help with a custom vfo for 2@1920x1200_60 -
ducks - 03-22-2019
Good news! Took me some time, but I finally got it working. Started with the VPro_DCD.def file which is basically a vfs template, but it is wrong and I highly doubt it ever worked. It did give me some good leads.
The DCD works by rendering two fields at half the speed of the refresh rate. So for example at 60Hz you get two 30Hz images which are then outputted again at double the rate. They way DCD know which images goes to what output is by using a different sync for the two images. If you get it wrong you get a flickering screen with both fields showing on the same output.
The way I reverse engineered it was by making a vfoinfo dump of the 2@1280x1028_60.vfo and try to recreate the format. Once it was 99% identical it worked. The key is to bump the "Vertical Sync" by two in the first field and subtract the "Vertical Sync" by one in the second field. Then you need to correct the "VerticalBackPorch" to match the total amount of vertical lines.
Below is the vfs for 2@1920x1200_60 with reduced blanking.
Code:
#define NAME "2@1920x1200_60_rb"
#define FRM_PER_SEC 60
#define ACT_LINES_PER_FRM 1200
#define ACT_PIX_PER_LINE 1920
#define VERT_FP 1
#define VERT_SYNC 3
#define VERT_BP 38
#define HORZ_FP 48
#define HORZ_SYNC 32
#define HORZ_BP 160
OptionHardware = "DUAL_CHANNEL";
General {
FormatName = NAME;
FieldsPerFrame = 2;
FramesPerSecond = FRM_PER_SEC / 2;
ActiveLinesPerFrame = ACT_LINES_PER_FRM;
ActivePixelsPerLine = ACT_PIX_PER_LINE;
TotalLinesPerFrame = 2*(VERT_FP + VERT_SYNC + VERT_BP + ACT_LINES_PER_FRM);
TotalPixelsPerLine = HORZ_FP + HORZ_SYNC + HORZ_BP + ACT_PIX_PER_LINE;
}
Active Line {
exported int VerticalFrontPorch;
exported int VerticalSync;
exported int VerticalBackPorch;
VerticalFrontPorch = VERT_FP;
VerticalSync = VERT_SYNC;
VerticalBackPorch = VERT_BP;
HorizontalFrontPorch = pixels( HORZ_FP ) ;
HorizontalSync = pixels( HORZ_SYNC ) ;
HorizontalBackPorch = pixels( HORZ_BP ) ;
}
Field {
Vertical Sync =
{
{
Length = 1.0H;
Low = 0.0 usec;
}
repeat VerticalSync + 2
{
Length = 1.0H;
}
}
Vertical Back Porch =
{
{
Length = 1.0H;
High = HorizontalSync;
}
repeat VerticalBackPorch - 4
{
Length = 1.0H;
Low = 0.0 usec;
High = HorizontalSync;
}
}
Active = {
repeat ActiveLinesPerFrame {
Length = 1.0H;
Low = 0.0 usec;
High = HorizontalSync;
}
}
Vertical Front Porch =
{
repeat VerticalFrontPorch {
Length = 1.0H;
Low = 0.0 usec;
High = HorizontalSync;
}
}
}
Field {
Vertical Sync =
{
{
Length = 1.0H;
Low = 0.0 usec;
}
repeat VerticalSync - 1
{
Length = 1.0H;
}
}
Vertical Back Porch =
{
{
Length = 1.0H;
High = HorizontalSync;
}
repeat VerticalBackPorch - 1 {
Length = 1.0H;
Low = 0.0 usec;
High = HorizontalSync;
}
}
Active = {
repeat ActiveLinesPerFrame {
Length = 1.0H;
Low = 0.0 usec;
High = HorizontalSync;
}
}
Vertical Front Porch =
{
repeat VerticalFrontPorch {
Length = 1.0H;
Low = 0.0 usec;
High = HorizontalSync;
}
}
}
/* set some genlock parameters */
GENScanFormat = 0; /* cant genlock to this */
RE: Need help with a custom vfo for 2@1920x1200_60 -
gijoe77 - 03-22-2019
very awesome! do you mind linking the .vfo file that you have working?
RE: Need help with a custom vfo for 2@1920x1200_60 -
Axatax - 03-22-2019
You have to compile the .vfs for your specific card.
EDIT: If you have the same HW then you can ignore that ^.
RE: Need help with a custom vfo for 2@1920x1200_60 -
ducks - 03-24-2019
Attached the .vfo. Compiled on a Tezro with a VPro v12 with DCD but should work on any VPro with DCD.
RE: Need help with a custom vfo for 2@1920x1200_60 -
gijoe77 - 03-27-2019
awesome thanks!