Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Programming the CG2

11 views
Skip to first unread message

Mike Muuss

unread,
May 9, 1990, 7:19:13 PM5/9/90
to
Hi Lance! I did some hacking with a CG2; they are a pain, mainly in that
they don't put out bi-polar NTSC, which results in a grey-level shift
that is quite objectionable, and the internal sync generator is so awful
as to be unusable without a time-base corrector.

Here is a fragment of code (from BRL-CAD libfb/if_4d.c) that shows how
I run ours.

I understand that the CG3 is vastly improved over the CG2, but ours has
not yet been delivered.

Best,
-Mike


/*
* Take inventory of the hardware
*/
while( (inv = getinvent()) != (inventory_t *)0 ) {
if( inv->class != INV_GRAPHICS ) continue;
switch( inv->type ) {
case INV_GMDEV:
SGI(ifp)->mi_is_gt = 1;
break;
}
}
endinvent(); /* frees internal inventory memory */
if( (ifp->if_mode & MODE_8MASK) == MODE_8NOGT ) {
SGI(ifp)->mi_is_gt = 0;
}

/*Note:---->*/
if( (ifp->if_mode & MODE_5MASK) == MODE_5GENLOCK ) {
/* NTSC, see below */
ifp->if_width = ifp->if_max_width = XMAX170+1; /* 646 */
ifp->if_height = ifp->if_max_height = YMAX170+1; /* 485 */
}

if( width <= 0 )
width = ifp->if_width;
if( height <= 0 )
height = ifp->if_height;
if ( width > ifp->if_max_width )
width = ifp->if_max_width;
if ( height > ifp->if_max_height)
height = ifp->if_max_height;

ifp->if_width = width;
ifp->if_height = height;

blanktime(0);
foreground(); /* Direct focus here, don't detach */

if( (ifp->if_mode & MODE_5MASK) == MODE_5GENLOCK ) {
/*Note:---->*/
prefposition( 0, XMAX170, 0, YMAX170 );
SGI(ifp)->mi_curs_on = 0; /* cursoff() happens below */
} else if( (ifp->if_mode & MODE_3MASK) == MODE_3WINDOW ) {
if( sgi_nwindows == 0 ) {
prefposition( WIN_L, WIN_R, WIN_B, WIN_T );
} else {
prefsize( (long)width, (long)height );
}
SGI(ifp)->mi_curs_on = 1; /* Mex usually has it on */
} else {
/* MODE_3MASK == MODE_3FULLSCR */
prefposition( 0, XMAXSCREEN, 0, YMAXSCREEN );
SGI(ifp)->mi_curs_on = 0; /* cursoff() happens below */
}

/*
* This is where the window constraints specified above
* are bound to a new window. The return code is
* the "graphics id" that identifies this window.
* winset(gr_id) is used to select a window for drawing in.
*/
if( (ifp->if_fd = winopen( "Frame buffer" )) == -1 ) {
fb_log( "winopen() failed, no more windows available.\n" );
return(-1);
}
sgi_nwindows++; /* track # of simultaneous windows */

/* Establish operating mode (Hz, GENLOCK).
* The assumption is that the device is always in the
* "normal" mode to start with. The mode will only
* be saved and restored when 30Hz operation is specified;
* on GENLOCK operation, valid NTSC sync pulses must be present
* for downstream equipment; user should run "Set60" when done.
*/
if( (ifp->if_mode & MODE_4MASK) == MODE_4HZ30 ) {
SGI(ifp)->mi_der1 = getvideo(DE_R1);
setvideo( DE_R1, DER1_30HZ|DER1_UNBLANK); /* 4-wire RS-343 */
} else if( (ifp->if_mode & MODE_5MASK) == MODE_5GENLOCK ) {
/*Note:---->*/
SGI(ifp)->mi_der1 = getvideo(DE_R1);
if( (SGI(ifp)->mi_der1 & DER1_VMASK) == DER1_170 ) {
/*
* Current mode is DE3 board internal NTSC sync.
* Doing a setmonitor(NTSC) again will cause the
* sync generator to drop out for a moment.
* So, in this case, do nothing.
*/
} else if( getvideo(CG_MODE) != -1 ) {
/*
* Optional CG2 GENLOCK board is installed.
*
* Mode 2: Internal sync generator is used.
*
* Note that the stability of the sync generator
* on the GENLOCK board is *worse* than the sync
* generator on the regular DE3 board. The GENLOCK
* version "twitches" every second or so.
*
* Mode 3: Output is locked to incoming
* NTSC composite video picture
* for sync and chroma (on "REM IN" connector).
* Color subcarrier is phase and amplitude locked to
* incomming color burst.
* The blue LSB has no effect on video overlay.
*
* Note that the generated composite NTSC output
* (on "VID OUT" connector) is often a problem,
* since it has a DC offset of +0.3V to the base
* of the sync pulse, while other studio eqiupment
* often expects the blanking level to be at
* exactly 0.0V, with sync at -0.3V.
* In this case, the black levels are ruined.
* Also, the inboard encoder chip isn't very good.
* Therefore, it is necessary to use an outboard
* RS-170 to NTSC encoder to get useful results.
*/
if( (ifp->if_mode & MODE_6MASK) == MODE_6EXTSYNC ) {
/* external sync via GENLOCK board REM IN */
setvideo(CG_MODE, CG2_M_MODE3);
setvideo(DE_R1, DER1_G_170|DER1_UNBLANK );
} else {
/* internal sync */
#ifdef GENLOCK_SYNC
/* GENLOCK sync, found to be highly unstable */
setvideo(CG_MODE, CG2_M_MODE2);
setvideo(DE_R1, DER1_G_170|DER1_UNBLANK );
#else
/* Just use DE3 sync generator.
* For this case, GENLOCK board does nothing!
* Equiv to setmonitor(NTSC);
*/
setvideo(DE_R1, DER1_170|DER1_UNBLANK);
#endif
}
} else {
/*
* No genlock board is installed, produce RS-170
* video at NTSC rates with separate sync,
* and hope that they have an outboard NTSC
* encoder device. Equiv to setmonitor(NTSC);
*/
setvideo(DE_R1, DER1_170|DER1_UNBLANK);
}
}

0 new messages