# Configuration file for 3Dfx Interactive's Voodoo Graphics
#
# Below each [Voodoo2] section is a description of environment variables passed
#  to the Voodoo Graphics initialization code.  Environment variables are
#  specified in the format "ENV_NAME=ENV_VALUE", where ENV_NAME is the 
#  name of the environment variable, and ENV_VALUE is the value to be
#  associated with ENV_NAME.  An example [Voodoo2] section is as follows:
#
# [Voodoo2]
# SST_GAMMA=1.20
# SST_MEMFIFO=1
#
# Below each [DAC] section is a description of how to program a particular
#  dac.  The manufacturer's name is specified in the format "manufacturer=MVAL",
#  where MVAL is the name of the manufacturer.  The part number is specified
#  in the format "device=DVAL", where DVAL is the device number.  Video
#  resolutions and refresh rates are specified in the format
#  "sstVideo=WIDTH;HEIGHT;REFRESH_RATE;CMD_SEQUENCE", where WIDTH is the
#  video display width (in pixels), HEIGHT is the video display height (in
#  scanlines), REFRESH_RATE is the video refresh rate, and CMD_SEQUENCE
#  is a sequence of writes and reads to properly setup the dac for a
#  particular video resolution/refresh rate.  A command sequence, CMD_SEQUENCE,
#  is of the form CMD();CMD();CMD(), etc.  A "setVideo" declaration can have
#  up to 256 dac read/write commands in its CMD_SEQUENCE field.  The CMD
#  fields which compose a CMD_SEQUENCE are as follows:
#    dacRd(ADDR)               - Read an 8-bit value from dac address ADDR
#    dacRd(ADDR, DATA)         - Read an 8-bit value from dac address ADDR and
#                                compare the results with the expected DATA
#    dacWr(ADDR, DATA)         - Write the 8-bit value DATA to the dac at
#                                address ADDR
#    dacRdWr(ADDR, mask, DATA) - Read an 8-bit value from dac address ADDR,
#                                mask (i.e. bitwise AND) the returned value
#                                with MASK, bitwise OR with DATA, and store
#                                the result back to the dac at address ADDR
#  Memory clocks are specified in the format "setMemClk=FREQ;CMD_SEQUENCE",
#  where FREQ is the desired clock frequency and CMD_SEQUENCE is the sequence
#  of dac reads and writes to set the specified frequency.
#  A particular dac is detected/sensed by "detect=CMD_SEQUENCE", where
#  CMD_SEQUENCE is the command sequence of dac reads and writes required to
#  properly detect the existence of a particular dac.  An example [DAC]
#  section is as follows:
#
# [DAC]
# manufacturer=DAC_COMPANY
# device=DAC_DEVICE
# detect=dacWr(0x3,0x3);dacWr(0x2,0xff);dacRd(0x3);dacRd(0x2,0xfe)
# setVideo=640;480;60;dacWr(0x6,0xfe);dacWr(0x3,0x1);dacRdWr(0x0,0x1,0x2)
# setVideo=640;480;75;dacWr(0x6,0xca);dacWr(0x3,0xee)
# setMemClk=16;dacWr(0x6,0xfe);dacWr(0xbb,0xaa);dacRdWr(0xc,0x00,0x1)

[Voodoo2]

[DAC]
manufacturer=ICS
device=ICS5342

[DAC]
manufacturer=TI
device=TVP3409
detect=dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacWr(0x2,0x3);dacWr(0x0,0x2);dacRd(0x2,0x97);dacWr(0x0,0x3);dacRd(0x2,0x9);dacWr(0x0,0x1);dacRdWr(0x2,0xfe,0x0)

setMemClk=16;dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRdPush(0x2);dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacWrPop(0x2,0xf0,0x3);dacWr(0x0,0x2);dacRd(0x2,0x97);dacWr(0x0,0x3);dacRd(0x2,0x9);dacWr(0x0,0x6c);dacWr(0x2,0x7b);dacWr(0x0,0x6d);dacWr(0x2,0xcc);dacWr(0x0,0x6e);dacWr(0x2,0xa6);dacWr(0x0,0x6);dacRdWr(0x2,0xff,0x0b);dacWr(0x0,0x1);dacRdWr(0x2,0xfe,0x0)

setMemClk=50;dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRdPush(0x2);dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacWrPop(0x2,0xf0,0x3);dacWr(0x0,0x2);dacRd(0x2,0x97);dacWr(0x0,0x3);dacRd(0x2,0x9);dacWr(0x0,0x6c);dacWr(0x2,0x28);dacWr(0x0,0x6d);dacWr(0x2,0x81);dacWr(0x0,0x6e);dacWr(0x2,0x84);dacWr(0x0,0x6);dacRdWr(0x2,0xff,0x0b);dacWr(0x0,0x1);dacRdWr(0x2,0xfe,0x0)

setVideoMode=1;dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRdPush(0x2);dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacWrPop(0x2,0xf0,0x3);dacWr(0x0,0x2);dacRd(0x2,0x97);dacWr(0x0,0x3);dacRd(0x2,0x9);dacWr(0x0,0x1);dacRdWr(0x2,0x0f,0x31);dacWr(0x0,0x1);dacRdWr(0x2,0xfe,0x0)

setVideoMode=0;dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRdPush(0x2);dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacWrPop(0x2,0xf0,0x3);dacWr(0x0,0x2);dacRd(0x2,0x97);dacWr(0x0,0x3);dacRd(0x2,0x9);dacWr(0x0,0x1);dacRdWr(0x2,0x0f,0x51);dacWr(0x0,0x1);dacRdWr(0x2,0xfe,0x0)

setVideo=640;480;60;0;dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRdPush(0x2);dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacWrPop(0x2,0xf0,0x3);dacWr(0x0,0x2);dacRd(0x2,0x97);dacWr(0x0,0x3);dacRd(0x2,0x9);dacWr(0x0,0x4c);dacWr(0x2,0x7d);dacWr(0x0,0x4d);dacWr(0x2,0x87);dacWr(0x0,0x4e);dacWr(0x2,0x84);dacWr(0x0,0x6);dacRdWr(0x2,0xff,0xb0);dacWr(0x0,0x6);dacWr(0x0,0x1);dacRdWr(0x2,0xfe,0x0)

setVideo=800;600;60;0;dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRdPush(0x2);dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacWrPop(0x2,0xf0,0x3);dacWr(0x0,0x2);dacRd(0x2,0x97);dacWr(0x0,0x3);dacRd(0x2,0x9);dacWr(0x0,0x4c);dacWr(0x2,0x79);dacWr(0x0,0x4d);dacWr(0x2,0x49);dacWr(0x0,0x4e);dacWr(0x2,0xa8);dacWr(0x0,0x6);dacRdWr(0x2,0xff,0xb0);dacWr(0x0,0x6);dacWr(0x0,0x1);dacRdWr(0x2,0xfe,0x0)


[DAC]
manufacturer=ATT
device=ATT20C409
detect=dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacWr(0x2,0x3);dacWr(0x0,0x2);dacRd(0x2,0x84);dacWr(0x0,0x3);dacRd(0x2,0x9);dacWr(0x0,0x1);dacRdWr(0x2,0xfe,0x0)

setMemClk=16;dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRdPush(0x2);dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacWrPop(0x2,0xf0,0x3);dacWr(0x0,0x2);dacRd(0x2,0x84);dacWr(0x0,0x3);dacRd(0x2,0x9);dacWr(0x0,0x6c);dacWr(0x2,0x7b);dacWr(0x0,0x6d);dacWr(0x2,0xcc);dacWr(0x0,0x6e);dacWr(0x2,0xa6);dacWr(0x0,0x6);dacRdWr(0x2,0xff,0x0b);dacWr(0x0,0x1);dacRdWr(0x2,0xfe,0x0)

setMemClk=50;dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRdPush(0x2);dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacWrPop(0x2,0xf0,0x3);dacWr(0x0,0x2);dacRd(0x2,0x84);dacWr(0x0,0x3);dacRd(0x2,0x9);dacWr(0x0,0x6c);dacWr(0x2,0x28);dacWr(0x0,0x6d);dacWr(0x2,0x81);dacWr(0x0,0x6e);dacWr(0x2,0x84);dacWr(0x0,0x6);dacRdWr(0x2,0xff,0x0b);dacWr(0x0,0x1);dacRdWr(0x2,0xfe,0x0)

setVideoMode=1;dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRdPush(0x2);dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacWrPop(0x2,0xf0,0x3);dacWr(0x0,0x2);dacRd(0x2,0x84);dacWr(0x0,0x3);dacRd(0x2,0x9);dacWr(0x0,0x1);dacRdWr(0x2,0x0f,0x31);dacWr(0x0,0x1);dacRdWr(0x2,0xfe,0x0)

setVideoMode=0;dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRdPush(0x2);dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacWrPop(0x2,0xf0,0x3);dacWr(0x0,0x2);dacRd(0x2,0x84);dacWr(0x0,0x3);dacRd(0x2,0x9);dacWr(0x0,0x1);dacRdWr(0x2,0x0f,0x51);dacWr(0x0,0x1);dacRdWr(0x2,0xfe,0x0)

setVideo=640;480;60;0;dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRdPush(0x2);dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacWrPop(0x2,0xf0,0x3);dacWr(0x0,0x2);dacRd(0x2,0x84);dacWr(0x0,0x3);dacRd(0x2,0x9);dacWr(0x0,0x4c);dacWr(0x2,0x7d);dacWr(0x0,0x4d);dacWr(0x2,0x87);dacWr(0x0,0x4e);dacWr(0x2,0x84);dacWr(0x0,0x6);dacRdWr(0x2,0xff,0xb0);dacWr(0x0,0x6);dacWr(0x0,0x1);dacRdWr(0x2,0xfe,0x0)

setVideo=800;600;60;0;dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRdPush(0x2);dacWr(0x0,0x0);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacRd(0x2);dacWrPop(0x2,0xf0,0x3);dacWr(0x0,0x2);dacRd(0x2,0x84);dacWr(0x0,0x3);dacRd(0x2,0x9);dacWr(0x0,0x4c);dacWr(0x2,0x79);dacWr(0x0,0x4d);dacWr(0x2,0x49);dacWr(0x0,0x4e);dacWr(0x2,0xa8);dacWr(0x0,0x6);dacRdWr(0x2,0xff,0xb0);dacWr(0x0,0x6);dacWr(0x0,0x1);dacRdWr(0x2,0xfe,0x0)
