2053 lines
80 KiB
Plaintext
2053 lines
80 KiB
Plaintext
RAMDACs
|
|
|
|
AcuMos:
|
|
ADAC1 15/16/24 bit.
|
|
|
|
Analog Devices:
|
|
ADV471 6bit DAC 15 overlay registers
|
|
ADV475 6bit DAC 15 overlay registers
|
|
ADV476 6bit DAC
|
|
ADV477 8bit DAC 15 overlay registers
|
|
ADV478 6/8bit DAC 15 overlay registers
|
|
|
|
ADV7129 True-Color 192bit pixel bus
|
|
ADV7160 True color 96bit pixel bus. 10bit DACs. HW cursor. PLL
|
|
ADV7162
|
|
|
|
ATI:
|
|
ATI68830 15/16/24bit Up to 80 MHz !
|
|
ATI68860 15/16/24bit "Spectra" DAC for Mach64
|
|
ATI68875 15/16/24bit Up to 135 MHz ! Used in ATI Graphics Ultra +
|
|
and Pro. Similar to TI34075
|
|
ATI68880 Very similar to 68860
|
|
|
|
AT&T:
|
|
ATT20c40x ??
|
|
ATT20c490 15/16/24 bit. 6/8 bit DAC.
|
|
ATT20c491 15/16/24 bit. 6/8 bit DAC w/gamma correction
|
|
ATT20c492 15/16/18 bit 6bit DACs. w/gamma correction
|
|
ATT20c493 15/16/18 bit 6bit DACs
|
|
ATT20c497 24bit ?
|
|
ATT20c498 24bit 16bit pixel databus !
|
|
ATT21c498 24bit 16bit pixel databus ! What's the diff?
|
|
ATT22c498 24bit 16bit pixel databus !
|
|
|
|
|
|
Avance Logic:
|
|
ALG1101 16-bit. Appears to be different from the other HiColor
|
|
DACs.
|
|
ALG1201 24bit
|
|
ALG1301 24bit
|
|
|
|
Avasem:
|
|
AV3676 6bit DAC
|
|
|
|
Brooktree:
|
|
Bt458 8bit DAC upto 135MHz. Not VGA compatible
|
|
Bt476 6bit DAC.
|
|
Bt477 6/8bit DAC
|
|
Bt478 6/8bit DAC.
|
|
Bt481 15/16bit
|
|
Bt482 15/16bit
|
|
Bt484 15/16/24bit 6/8bit DAC. Has hardware cursor.
|
|
Bt485 15/16/24bit 6/8bit DAC. Has hardware cursor.
|
|
|
|
Chrontel
|
|
CH8391
|
|
CH8398 15/16/24bit and Clock chip
|
|
|
|
Cirrus Logic
|
|
CL-GD5200 15/16/24 bit Same as Acumos ADAC1
|
|
|
|
Diamond:
|
|
SS2410 15/24 bit. OEM version of MUSIC MU9c1880
|
|
|
|
IBM:
|
|
RGB514 24bit. 144pin. HW cursor, 64bit pixel bus. Clock generator.
|
|
packed 24bit pixels
|
|
RGB524 24bit. 144pin. HW cursor, 64bit pixel bus. Dual clock generator
|
|
packed 24bit pixels
|
|
RGB525 24bit. 208pin. HW cursor, 64bit pixel bus. Clock generator
|
|
packed 24bit pixels
|
|
RGB526 24bit. 144pin. HW cursor, 64bit pixel bus. Dual clock generator
|
|
packed 24bit pixels
|
|
RGB528 24bit. 208pin. HW cursor, 128bit pixel bus. Dual clock generator
|
|
supports 24bit packed pixels
|
|
RGB530 24bit. 208pin. HW cursor. 96bit pixel bus. Clock generator,
|
|
10bit DACs and LUTs, window attribute table
|
|
RGB561 24bit. 304pin. HW cursor. 200bit pixel bus. Clock generator.
|
|
10bit DACs and LUTs
|
|
RGB624 24bit. 144pin. HW cursor, 64bit pixel bus, Dual clock generator
|
|
packed 24bit pixels, YUV to RGB conversion
|
|
|
|
|
|
ICS:
|
|
ICS5300 24bit Combined RAMDAC & Clock chip
|
|
ICS5301
|
|
ICS5342 24bit Combined RAMDAC & Clock chip
|
|
|
|
IC Works:
|
|
W30c498 Similar to AT&T 20c498
|
|
W30c516 44pin "ZoomDAC"
|
|
|
|
Inmos:
|
|
IMSG171
|
|
IMSG173
|
|
IMSG174
|
|
IMSG176 6bit DAC
|
|
IMSG178
|
|
|
|
MUSIC:
|
|
MU9C1710 6 bit DAC
|
|
MU9C4870 15/16 bit Similar to Sierra "Mark 3".
|
|
MU9C1880 15/16/24bit Same as SS24
|
|
MU9C4910 15/16/24bit
|
|
MU9C9910 15/16/24bit As 4910, but with dual clock generator onchip
|
|
MU9C9750 6bit DAC with onchip clock generator w/powerdown
|
|
MU9C9760 6bit DAC with onchip clock generator
|
|
MU9C4160 15/16/24bit 16bit wide pixelbus
|
|
MU9C9160 15/16/24bit As 4160, but with onchip clock generator
|
|
|
|
OAK:
|
|
OTI66 6bit DAC
|
|
OTI66HC 15/16bit Similar to Sierra "Mark 3"
|
|
|
|
S3:
|
|
86c716 (SDAC) Combined RAMDAC & Clockchip. Same as ICS 5300
|
|
86c708 (GenDAC) Combined RAMDAC & Clockchip. Same as ICS 5342
|
|
|
|
Samsung:
|
|
KDA476 6bit DAC Standard '476
|
|
|
|
|
|
SGS-Thompson:
|
|
STG1700 24bit 16bit pixel path.
|
|
STG1702 24bit 44pin As 1700 + Supports "2 24bit pixels/3 VCLKs"
|
|
STG1703 24bit 68pin As 1702 + onchip Clock Generator
|
|
|
|
Sierra Semiconductors:
|
|
Sierra "Mark1": Only works if the VGA controller can send a byte on
|
|
both the rising AND falling edge of the dot clock.
|
|
SC11481 15-bit. 6-bit DAC. Overlay.
|
|
SC11486 15-bit. 6-bit DAC.
|
|
SC11488 15 bit. 6/8 bit DAC. Overlay.
|
|
|
|
Sierra "Mark2":
|
|
SC11482 15-bit. 6-bit DAC. Overlay.
|
|
SC11483 15-bit. 6-bit DAC.
|
|
SC11484 15-bit. 6/8 bit DAC. Overlay.
|
|
|
|
Sierra "Mark3":
|
|
SC11485 15/16 bit. 6-bit DAC. Overlay.
|
|
SC11487 15/16 bit. 6-bit DAC.
|
|
SC11489 15/16 bit. 6/8 bit DAC. Overlay.
|
|
|
|
SC15020 24bit 16bit pixel path
|
|
SC15021 24bit 16bit pixel path
|
|
SC15025 24 bit.
|
|
SC15026 24 bit.
|
|
|
|
|
|
TI:
|
|
TLC34058 8bit upto 135MHz. Not VGA compatible
|
|
TLC34075 24bit upto 135MHz
|
|
TVP3010 24bit As 302x, but 32bit pixel path
|
|
TVP3020 24bit 64bit pixel path
|
|
TVP3025 24bit As 3020 + Programmable Clock
|
|
|
|
Trident:
|
|
TKD8001 24bit
|
|
|
|
UMC:
|
|
UM70c171 Standard 6bit DAC
|
|
UM70c178 15/16 bit Similar to Sierra "Mark 3"
|
|
UM70c188 24bit
|
|
|
|
Winbond:
|
|
W82c476 6bit DAC Standard '476
|
|
W82c478 6/8bit DAC Standard '478
|
|
W82c490 15/16/24bit Very close to the AT&T20c492
|
|
|
|
|
|
15-bit modes have 5 bits of each basic color:
|
|
bit 0- 4 blue.
|
|
5- 9 green.
|
|
10-14 red.
|
|
The pixel is stored in two bytes in Intel style (little endian).
|
|
|
|
16-bit modes have 5 bits of red and blue, and 6 bits of green:
|
|
bits 0- 4 blue.
|
|
5-10 green.
|
|
11-15 red.
|
|
The pixel is stored in two bytes in Intel style (little endian).
|
|
|
|
24-bit modes have 8 bits of each basic color:
|
|
bits 0- 7 blue.
|
|
8-15 green
|
|
16=23 red.
|
|
The pixel is stored in three bytes in Intel style (little endian).
|
|
|
|
|
|
|
|
The DACs are addressed on port 3C6h-3C9h. Advanced DACs have 1 or 2 extra
|
|
address lines (RS2 and RS3). These may be controlled from high address bits
|
|
(A10-A15) (Compaq or Weitek cards) or from registers (S3, ATI....).
|
|
In the following the DAC registers are named REGxx as follows:
|
|
|
|
I/O: RS2: RS3:
|
|
REG00 3C8h 0 0
|
|
REG01 3C9h 0 0
|
|
REG02 3C6h 0 0
|
|
REG03 3C7h 0 0
|
|
REG04 3C8h 1 0
|
|
REG05 3C9h 1 0
|
|
REG06 3C6h 1 0
|
|
REG07 3C7h 1 0
|
|
REG08 3C8h 0 1
|
|
REG09 3C9h 0 1
|
|
REG0A 3C6h 0 1
|
|
REG0B 3C7h 0 1
|
|
REG0C 3C8h 1 1
|
|
REG0D 3C9h 1 1
|
|
REG0E 3C6h 1 1
|
|
REG0F 3C7h 1 1
|
|
|
|
|
|
|
|
Many of these DACs can access REG06 using only the 4 standard DAC addresses
|
|
(3C6h-3C9h) by reading 3C6h 4 or 5 times, then REG06 can be accessed at 3C6h.
|
|
|
|
Type:
|
|
|
|
"1r/w" Read 3C6h 4 times, then the next read or write of 3C6h will access
|
|
the command register.
|
|
|
|
|
|
Forcing HiColor DACs into command mode:
|
|
Note: This works on the Sierra, ATT, Winbond DACs and clones, not on the
|
|
Brooktree or TI DACs, also the MUSIC DACs will require an extra read of 3C6h.
|
|
|
|
procedure dactocomm; {switches DAC to command register}
|
|
var x:word;
|
|
begin
|
|
x:=inp($3C8); {clear old state}
|
|
x:=inp($3C6);
|
|
x:=inp($3C6);
|
|
x:=inp($3C6); {Read $3C6 4 times.}
|
|
x:=inp($3C6);
|
|
end;
|
|
|
|
Now reads and writes to $3C6 will access the command register. Depending on
|
|
the DAC type you may have multiple read/writes, one write/multiple reads or
|
|
one read/write of the command register before it switches back to the PEL
|
|
register. Any access to $3C7-$3C9 will switch back to the PEL mask register.
|
|
|
|
|
|
Forcing HiColor DACs into normal mode:
|
|
|
|
procedure dactopel; {switches DAC back to normal mode}
|
|
var x:word;
|
|
begin
|
|
x:=inp($3C8);
|
|
end;
|
|
|
|
|
|
|
|
|
|
HiColor DACs: (Sierra SC1148x, MUSIC MU9C4870, OAK OTI66HC, UMC UM70C178)
|
|
|
|
REG04 (R/W): Overlay RAM Write Address (SC11481/2/4/5/8/9 only)
|
|
bit 0-3 Write index for the Overlay registers.
|
|
|
|
REG05 (R/W): Overlay RAM (SC11481/2/4/5/8/9 only)
|
|
bit 0-5 Data port for the overlay registers. Works like the PEL data register
|
|
(3C9h) except that the overlay registers are accessed and the Overlay
|
|
Address registers are used for indexes.
|
|
Note: on the SC11484/8/9 the Color Look-up Table and the overlay registers are
|
|
24bits wide (rather than 18bits) if the 8/6 pin is high.
|
|
|
|
REG06 (R/W): Command Register
|
|
bit 0 (SC11487) (R) Set if bits 5-7 is 1 or 3, clear otherwise
|
|
3-4 (SC11487) Accesses bits 3-4 of the PEL Mask registers (REG02)
|
|
5 (not SC11481/6/8)
|
|
If set two pixel clocks are used to latch the two bytes
|
|
needed for each pixel. Low byte is latched first.
|
|
If clear the low byte is latched on the rising edge of the
|
|
pixel clock and the high byte is latched on the falling edge.
|
|
Only some VGA chips (ET4000 and C&T655x0) can handle this.
|
|
6 (SC11485/7/9, OTI66HC, UM70C178) Set in 16bit (64k) modes (Only valid
|
|
if bit 7 set). On the SC11482/3/4 this bit is read/writable, but
|
|
has no function. On the SC11481/6/8 this bit does not exist.
|
|
7 Set in HiColor (32k/64k) modes, clear in palette modes.
|
|
Note: This register can also be accessed at 3C6h by reading 3C6h four times,
|
|
then all accesses to 3C6h will go the this register until one of the
|
|
registers 3C7h, 3C8h or 3C9h is accessed.
|
|
|
|
REG07 (R/W): Overlay RAM Read Address (SC11481/2/4/5/8/9 only)
|
|
bit 0-3 Read index for the Overlay registers.
|
|
|
|
|
|
|
|
Analog Devices ADV7160,ADV7162 True-Color Video RAM-DAC:
|
|
The ADV716x DACs are not really VGA compatible, but with proper initialisation
|
|
palette writing and the PEL register can be simulated.
|
|
REG00 W(R/W): Address Register
|
|
bit 0-10 Controls the index read or written at REG01 or REG02.
|
|
Regardless of the bus width this register is accessed by two 8bit
|
|
reads or writes at this address, low byte first.
|
|
|
|
REG01
|
|
|
|
|
|
REG02 Control Registers
|
|
REG02 index 3 (R): ID Register
|
|
bit 0-7 76h for the ADV7160, 79h for the ADV7162
|
|
|
|
REG02 index 4 (R/W): Pixel Mask Register
|
|
bit 0-7 The pixel inputs (R, G and B) are anded with this value. Set to FFh
|
|
for normal operation.
|
|
|
|
REG02 index 5 (R/W): Command Register 1
|
|
bit 0 Calibration Control. If set the LOADIN/LOADOUT synchronization
|
|
circuit is calibrated on every vertical sync (REG03 bit 5 must be 0)
|
|
1 Test Mode Control. Enable test mode if set
|
|
2 Should be set to 0
|
|
3 Hi-Byte Control. If set the high byte of the Address Register
|
|
(REG00) is accessible, if clear it is not (ADV7150 compatible).
|
|
4-5 PS Function Control. Controls how the PS0/1 inputs are used.
|
|
0: Palette Select Mode. The PS0/1 inputs selects between 4 devices
|
|
by comparing with REG03 bits 6-7 on a pixel by pixel base,
|
|
1: (ADV7160) Bypass Mode. PS1 switches between Palette Mode and
|
|
Bypass Mode on a pixel by pixel basis. Bits 6-7 controls the Bypass
|
|
Mode. Bypass mode should not be selected in Command Register 2
|
|
(REG02 index 6) and by this field at the same time, 2: Overlay Mode.
|
|
PS0/1 select one of the three overlay colors (PS0/1 = 0 for pixel
|
|
data), 3: Ignore PS Inputs. The PS0/1 inputs are completely ignored.
|
|
6-7 Bypass Color Mode Control. Controls the bypass mode switching.
|
|
0: 15bit bypass, 1: 16bit bypass, 2: 24bit bypass
|
|
|
|
REG02 index 6 (R/W): Command Register 2
|
|
bit 0-1 Should be set to 0
|
|
2 /SYNC Recognition on Green. If set the /SYNC input is encoded on the
|
|
IOG output.
|
|
3 Pedestal Enable Control. Set for a 7.5 IRE blanking pedestal, clear
|
|
for a 0 IRE pedestal.
|
|
4-7 True-Color/Bypass/Pseudo-Color Mode Control. 0: 8bit Pseudo Color
|
|
on R0-7, 4: 8bit Pseudo Color on G0-7, 8: 8bit Pseudo Color on B0-7,
|
|
9: 16bit Bypass Mode on G0-7 + R0-7, 10: 15bit Bypass Mode on G0-7
|
|
+ R0-6, 11: 16bit True Color Mode on G0-7 + R0-7, 12: 15bit True
|
|
Color Mode on B3-7 + G3-7 + R3-7, 13: 15bit True Color Mode on G0-7
|
|
+ R0-6, 14: 24bit True Color Mode, 15: 16bit Bypass Mode
|
|
|
|
REG02 index 7 (R/W): Command Register 3
|
|
bit 0-1 PROGCKOUT Frequency Control. Determines the PROGCKOUT output clock
|
|
frequency relative to the pixel clock (CLOCK). 0: CLOCK/4,
|
|
1: CLOCK/8, 2: CLOCK/16, 3: CLOCK/32
|
|
2-4 /BLANK Pipeline Delay Control. Controls the delay of the /BLANK
|
|
signal (in addition to the overall device pipeline delay Tpd).
|
|
Adds N * LOADOUT to the /BLANK delay.
|
|
5 Should be set to 0
|
|
6-7 Pixel Multiplex Control. 0: 1:1 MUXING - LOADOUT = CLOCK, 1: 2:1
|
|
MUXING - LOADOUT = CLOCK/2, 2: 8:1 MUXING - LOADOUT = CLOCK/8
|
|
(Pseudo Color Mode only), 3: 4:1 MUXING - LOADOUT = CLOCK/4,
|
|
|
|
REG02 index 8 (R/W): Command Register 4
|
|
bit 0 HDTV Sync Control. If set the /TRISYNC input is encoded enabling a
|
|
Tri-Level Sync output.
|
|
1 /SYNC Recognition Control on Red. If set the /SYNC input is encoded
|
|
on the IOR output.
|
|
2 /SYNC Recognition Control on Blue. If set the /SYNC input is encoded
|
|
on the IOB output.
|
|
3-4 Gain Control. Selects the Video Standard used.
|
|
Value: DAC Gain: Video Standard Black to White current:
|
|
0 3996 RS343A, Sync & Pedestal 660mV 17.62mA
|
|
1 4224 RS343A, Sync, No Pedestal 699mV 18.63mA
|
|
2 4311 RS343A, No Sync, No Pedestal 714mV 19.05mA
|
|
3 5592 RS170, Sync & Pedestal 925mV 24.67mA
|
|
5 Signature Clock Control. Enables the Signature Analyser if set
|
|
6 Signature Reset. To reset the Signature Analyser write 0, then 1
|
|
to this field.
|
|
7 Signature Acquire. Enables Signature Acquisition if set
|
|
|
|
REG02 index 9 (R/W): PLL Command Register
|
|
bit 0 PLL Control. Enables the PLL if set
|
|
1 RSEL Bit Control. When set the PLL Reference Divider is in units of
|
|
2, if clear in units of 1. See REG02 index 0Ch for details.
|
|
2 VSEL Bit Control. When set the PLL Feedback Divider is in units of
|
|
2, if clear in units of 1. See REG02 index 0Fh for details.
|
|
3 Should be set to 0
|
|
4-5 Output Divide Control. Selects the Post divider for the VCO
|
|
0: VCO/1, 1: VCO/2, 2: VCO/4, 3: VCO/8
|
|
6-7 PLL S Control. The lower two bits of the PLL Feedback value.
|
|
See REG02 index 0Fh for details.
|
|
|
|
REG02 index 0Ah (R): Status Register
|
|
bit 0 Set if either of the IOR,IOG or IOB outputs exceeds the internal
|
|
voltage of the /SENSE comparator circuit
|
|
|
|
REG02 index 0Bh (R): Revision Register
|
|
bit 0-? Silicon Revision Code.
|
|
|
|
REG02 index 0Ch (R/W): PLL R Register
|
|
bit 0-6 Controls the PLL Reference Divider value together with the RSEL bit
|
|
(index 9 bit 1). If this field is set to 0 the PLL stops.
|
|
The effective value is: (1+RSEL)*(This_Field+2).
|
|
This allows all values from 3-129 and all even values from 130-258.
|
|
|
|
REG02 index 0Dh (R/W): Command Register 5
|
|
bit 0-5 Should be set to 0
|
|
6 Set to enable the internal PLL, clear to disable it
|
|
7 Should be set to 0
|
|
|
|
REG02 index 0Fh (R/W): PLL V Register
|
|
bit 0-6 Controls the PLL Feedback Divider value together with the VSEL bit
|
|
(index 9 bit 2). If this field is set to 0 the PLL stops.
|
|
The effective value is: (1+VSEL)*(4*(This_Field+2)+ S)
|
|
where S is the value from REG02 index 0Ch bits 6-7.
|
|
This allows all values from 12-519 and all even values from 520-1038
|
|
|
|
REG02 index 10h (R): Signature Red Register
|
|
REG02 index 11h (R): Signature Blue Register
|
|
REG02 index 12h (R): Signature Green Register
|
|
REG02 index 13h (R): Signature Misc Register
|
|
|
|
REG02 index 200h W(R/W): Cursor X Register
|
|
bit 0-15 The X coordinate of the cursor as a 2's complement (-4096 to 4095).
|
|
Note: Low byte in index 200h, High byte in index 201h
|
|
Note: When accessing the cursor X/Y registers (index 200h to 203h) the index
|
|
register autoincrements with each access. These registers must be
|
|
updated in the order 200h,201h,202h and then 203h
|
|
|
|
REG02 index 202h W(R/W): Cursor Y Register
|
|
bit 0-15 The Y coordinate of the cursor as a 2's complement (-4096 to 4095).
|
|
Note: Low byte in index 202h, High byte in index 203h
|
|
Note: When accessing the cursor X/Y registers (index 200h to 203h) the index
|
|
register autoincrements with each access. These registers must be
|
|
updated in the order 200h,201h,202h and then 203h
|
|
|
|
REG02 index 204h (R/W): Cursor Control Register
|
|
bit 0-1 Cursor Mode Control. 1: X11 cursor, 2: XGA cursor
|
|
Pattern: X11 cursor: XGA cursor:
|
|
0 Transparent Color 1
|
|
1 Transparent Color 2
|
|
2 Color 1 Transparent
|
|
3 Color 2 Bit-Wise Complement (XOR cursor)
|
|
2 Cursor Enable. Enables the cursor if set
|
|
3 Interlace Control. Set for interlaced modes.
|
|
4-7 Should be set to 0
|
|
|
|
REG02 index 303h (R/W): Color 2
|
|
|
|
|
|
REG02 index 304h (R/W): Color 1
|
|
|
|
REG02 index 400h-7FFh (R/W): Cursor Image
|
|
bit 0-7 The 64x64 cursor image is stored in these 1024 bytes with 4 2bit
|
|
"pixels" per index. Index 400h holds the 4 leftmost pixels of the
|
|
first (topmost) line, index 40Fh the 4 rightmost and index 7FFh the
|
|
4 rightmost pixels of the last line.
|
|
|
|
REG02 index 0-2, 0Eh, 14h and 15h are labeled as "Test Registers"
|
|
|
|
REG03 (R/W): Mode Register
|
|
bit 0 Reset Control. To reset the pixel port sampling sequence to start
|
|
with port A, write 1, then 0 and finally 1 to this bit.
|
|
1 RAM-DAC Resolution Control. If set the LUT and DACs are 10bits, if
|
|
clear LUT and DACs are 8bits (lower 2 inputs to the 10bit DACs are
|
|
forced to 0).
|
|
2 MPU Data Bus Width. If set the MPU interface is 10 bits wide
|
|
3-4 Operational Mode Control. 0 for normal operation
|
|
5 Calibrate LOADIN. To calibrate the LOADIN/LOADOUT synchronization
|
|
circuit write 0, then 1 to this bit. Should be 0 for normal
|
|
operation.
|
|
6-7 Palette Select Match Bits Control. If Command Register 1 (REG02
|
|
index 5) bits 4-5 is 0 the PS0-1 bits are compared with these two
|
|
bits on a pixel per pixel base allowing realtime switching between
|
|
up to 4 devices
|
|
|
|
|
|
|
|
|
|
ATI 68860/68880 Truecolor DACs:
|
|
REG08 (R/W):
|
|
bit 0-? Always 2 ??
|
|
|
|
REG0A (R/W):
|
|
bit 0-? Always 1Dh ??
|
|
|
|
REG0B (R/W): (GMR ?)
|
|
bit 0-7 Mode. 82h: 4bpp, 83h: 8bpp, A0h: 15bpp, A1h: 16bpp, C0h: 24bpp,
|
|
E3h: 32bpp (80h for VGA modes ?)
|
|
|
|
REG0C (R/W): Device Setup Register A
|
|
bit 0 Controls 6/8bit DAC. 0: 8bit DAC/LUT, 1: 6bit DAC/LUT
|
|
2-3 Depends on Video memory (= VRAM width ?) . 1: Less than 1Mb, 2: 1Mb,
|
|
3: > 1Mb
|
|
5-6 Always set ?
|
|
7 If set can remove "snow" in some cases (A860_Delay_L ?) ??
|
|
|
|
|
|
|
|
|
|
AT&T 20c49x,Winbond W82c490 Truecolor DACs:
|
|
|
|
REG06 (R/W): Command Register
|
|
bit 0 (W82c490, some ATTs) Power Down Enable. If set the DACs and video
|
|
multiplexers are powered down. The CPU interface is still working.
|
|
1 (490,491) In mode 0 this bit when set selects 8bit DACs, when clear
|
|
6bit DACs.
|
|
2-4 Exists, but appears to have no function ?
|
|
5-7 Mode: 0-3: Palette, 4: 15bit (32k) the two bytes are latched on
|
|
opposite edges of the dotclock (similar to SC11486), 5: 15bit (32k),
|
|
6: 16bit (64k), 7: 24bit (16m)
|
|
Note: This register can also be accessed by reading REG02 4 times, then the
|
|
next read or write of REG02 will access this register. Any access of
|
|
REG00, REG01 or REG03 will terminate the access to this register. The
|
|
register can only be read or written once before the DAC is returned to
|
|
normal mode (DAC type 4-1r1w).
|
|
|
|
|
|
|
|
|
|
AT&T 20c498,21c498,22c498 Truecolor DACs (Also IC Works?):
|
|
REG06 (R/W): Command Register
|
|
bit 0,2 (22c498) Clockmode for Mode 2 (2 8bit pixels/VCLK). 0: Clock < 22.5
|
|
MHz, 1: Clock < 45 MHz, 2: Clock >= 45 MHz
|
|
1 In palette modes this bit when set selects 8bit DACs, when clear 6bit
|
|
DACs.
|
|
4-7 Mode: 0: 8bit 1VCLK/pixel, 1: 15bit 1VCLK/pixel, 2: 8bit (2 pixels/
|
|
VCLK), 3: 16bit 1VCLK/pixel, 5: 24/32bit 2VCLKs/pixel, 6: 16bit
|
|
2VCLKs/pixel
|
|
Note: This register can also be accessed at REG02 by reading REG02 four times,
|
|
The fifth read will access of 3C6h will access this register. Only one
|
|
read or write will be allowed (DAC type 4-1r1w2i), the 6th read returns
|
|
84h and the 7th returns 98h (don't know about the 20c498).
|
|
|
|
|
|
|
|
|
|
Avance Logic ALG1201 Truecolor DAC:
|
|
REG06 (R/W): "Hidden Command register"
|
|
bit 5-7 Mode. 5: 15bit, 6: 16bit, 7: 24bit
|
|
Note: This register can also be accessed by reading REG02 4 times, then the
|
|
next read or write of REG02 will access this register. Any access of
|
|
REG00, REG01 or REG03 will terminate the access to this register. The
|
|
register can only be read or written once before the DAC is returned to
|
|
normal mode (DAC type 4-1r1w).
|
|
|
|
|
|
|
|
|
|
BrookTree Bt477:
|
|
REG06 (R/W):
|
|
bit 0 DAC powerdown. If set the DAC powers down
|
|
1 DAC Width. If set the DAC and palette registers are 8bit wide, if
|
|
clear only 6bit wide (as std VGA).
|
|
5 IRE control ?? seems to affect the output intensity ?
|
|
|
|
|
|
|
|
|
|
BrookTree Bt481/482:
|
|
|
|
REG00 index 0 (R/W): Ind Pixel Mask
|
|
|
|
REG00 index 1 (R/W): Overlay Mask
|
|
|
|
REG00 index 2 (R/W): Command Register B
|
|
bit 0 Set to power down the DAC (Sleep mode).
|
|
1 DAC Width. If set the DAC and palette registers are 8bit wide, if
|
|
clear only 6bit wide (as std VGA).
|
|
2 Sync on Red if set
|
|
3 Sync on Green if set
|
|
4 Sync on Blue if set
|
|
5 Set for 7.5 IRE, clear for 0.0 IRE pedestal (affects DAC range).
|
|
6 Enables the Overlay registers if set
|
|
|
|
REG00 index 3 (R/W): Cursor Register (482)
|
|
bit 0-1 Cursor type. 0: disabled, 1: 3-color, 2: Windows, 3: X11 style
|
|
2 Cursor Op disabled if set?
|
|
3 If clear reads/writes to REG04,REG05,REG07 will access the cursor
|
|
palette, if set the cursor pattern data will be accessed instead.
|
|
4 Set in interlaced modes
|
|
5 Selects External cursor if set
|
|
|
|
REG00 index 4 W(R/W): Cursor X (482)
|
|
bit 0-11 Cursor X position
|
|
|
|
REG00 index 6 W(R/W): Cursor Y (482)
|
|
bit 0-11 Cursor Y position
|
|
Note: the indexed DAC registers are accessed by setting bit 0 of REG06. Then
|
|
REG00 is the index register and REG02 is the data register.
|
|
|
|
REG04 (R/W): Cursor Write Address (482)
|
|
bit 0-1? Selects the palette register which will be written at REG05
|
|
0: Overscan, 1: Cursor Background, 2: Cursor Foreground
|
|
|
|
REG05 (R/W): Cursor RAM Data (482)
|
|
bit 0-7 Cursor palette data
|
|
Note: If REG00 index 3 bit 3 is clear this works like the palette address&data
|
|
registers at REG00,REG01®03 except that a separate palette is
|
|
accessed. Each read/write of this register will increment first through
|
|
the red,green,blue sequence and then the Address register (REG04/REG07).
|
|
If REG00 index 3 bit 3 is set REG04/REG07 are the lower 8 bits of the
|
|
index into the 1024 byte palette pattern RAM, which will increment for
|
|
each access to this register.
|
|
|
|
REG06 (R/W): Command Register A
|
|
bit 0 If set the Bt481/2 indexed DAC registers can be accessed by setting
|
|
REG00 to the index and reading or writing the data at REG02.
|
|
4-7 Mode. 0: Palette, 8: 15bit (Dual edge), 9: 24bit (Dual edge),
|
|
Ah: 15bit (32K), Ch: 16bit (Dual edge), Eh: 16bit (64K),
|
|
Fh: 24bit (16m). The Dual edge modes transfers data on both the
|
|
rising and falling edges of the pixel clock.
|
|
Note: This register can also be accessed at REG02 by reading REG02 four
|
|
times. Then the command register can be read or written at REG02.
|
|
This access will be terminated by any access to REG00, REG01 or REG03
|
|
or after a write to the command register (DAC type 4-Nr1w).
|
|
|
|
REG07 (R/W): Cursor Read Address (482)
|
|
bit 0-1? Selects the palette register which will be read at REG05
|
|
|
|
|
|
|
|
|
|
BrookTree Bt484, Bt485, AT&T 20c504/5 Truecolor DACs:
|
|
The 485 and 505 has the extra register at REG0A and supports 64x64 cursor
|
|
The 484 & 504 appears to be limited to 110MHz, the 485/505 to 135MHz
|
|
|
|
REG04 (R/W): Cursor/Overscan Write Address
|
|
bit 0-7 The PEL data register (0..255) to be written to REG05.
|
|
Note: After writing the 3 bytes at REG05 this register will increment, pointing
|
|
to the next data register.
|
|
|
|
REG05 (R/W): Cursor/Overscan Data
|
|
bit 0-5 Color value
|
|
Note: Each read or write of this register will cycle through first the
|
|
registers for Red, Blue and Green, then increment the appropriate
|
|
address register.
|
|
Note: the registers REG04,REG05,REG07 works like the normal REG00,REG01,REG03
|
|
registers, except that a separate set of palette registers (16 overlay
|
|
registers ?) are being accessed.
|
|
Index 00h Overscan color
|
|
01h Cursor Color 1 (Background)
|
|
02h Cursor Color 2 (Foreground)
|
|
03h Cursor Color 3
|
|
Note: if the DAC is in 6bit mode (REG06 bit 1 is 0) the 2 upper bits of the
|
|
cursor colors are ignored.
|
|
|
|
REG06 (R/W): Command Reg 0
|
|
bit 0 Power Down. If set the DACs and RAM power is turned off, but the RAM
|
|
still retains data, if clear the RAMDAC is operating normally
|
|
1 Set if DAC and palette registers are 8bit DACs, clear if 6bit.
|
|
2 Sync on Red if set
|
|
3 Sync on Green if set
|
|
4 Sync on Blue if set
|
|
5 Set for 7.5 IRE pedestal, clear for 0.0 IRE.
|
|
6 Disables internal clocking if set
|
|
7 (485,505) Enable CR3. If clear the Status register is present at
|
|
REG0A, if set 3C8h determines which register is present at REG0A:
|
|
00h Status Register
|
|
01h Command Register 3
|
|
|
|
REG07 (R/W): Cursor/Overscan Read Address
|
|
bit 0-7 The PEL data register (0..255) to be read from REG05.
|
|
Note: After reading the 3 bytes at REG05 this register will increment,
|
|
pointing to the next data register.
|
|
|
|
REG08 (R/W): Command Reg 1
|
|
bit 0 In 15/16bit 1:1 mode selects the pixel port (A-B or C-D) to take
|
|
pixel data from. Clear for A-B, set for C-D. See bit 1.
|
|
1 PORTSEL. In 15bit 1:1 mode (bit 2 set & bit 3 clear), this bit if
|
|
set causes pin P7D (most significant bit of the C-D port) to select
|
|
whether the 15bit pixel data is taken from port A-B or port C-D,
|
|
thus allowing real-time switching between video sources.
|
|
2 SPARSE. Set if 16bit data is 1:1, clear if it is muxed 2:1
|
|
3 Set in 5/6/5 mode, clear in all other modes
|
|
4 If set decodes True-color pixel data (5/5/5, 5/6/5 or 8/8/8 mode),
|
|
directly, if clear each component (R-G-B) of the pixel data is used
|
|
is used as a separate index to the palette RAM for the specific RGB
|
|
component, allowing non-linear scales (gamma correction) for each
|
|
color-component. REG09 bit 2 controls the indexing.
|
|
5-6 Bits per pixel. 0: 24, 1: 15/16, 2: 8, 3: 4
|
|
|
|
REG09 (R/W): Command Reg 2
|
|
bit 0-1 Cursor mode. 0: Disabled, 1: 3-Color, 2: Windows, 3: X11 Style
|
|
2 Sparse or Contigous Indexing. In Look-up True-color modes (REG08 bit
|
|
4 clear) selects whether each color component is shifted right or
|
|
left before being used as an index to the palette. If set the pixel
|
|
data is treated as the least significant bits of the index
|
|
(Contigous index), if clear as the most significanty bits (Sparse
|
|
index).
|
|
3 Set in interlaced modes (used for the cursor).
|
|
4 Selects input clock. 0: PCLK0, 1: PCLK1
|
|
5 If clear the dac takes data from the VGA port and each byte is a one
|
|
byte palette index regardless of the state in Command Register 1, if
|
|
set pixel data is taken from pixel ports A-D and data format is
|
|
controlled by Command Register 1
|
|
6 Test Path enabled if set.
|
|
7 SCLK (Video shift clock) disabled if set.
|
|
|
|
REG0A (R): Status Reg
|
|
bit 4-7 Product ID ?
|
|
4: AT&T20c504, 0Dh: AT&T20c505, 8-Bh: Bt484/5
|
|
Note: The two registers at REG0A are selected by bit 7 of REG06.
|
|
|
|
REG0A (R/W): Command Reg 3 (485,505 only)
|
|
Bit 0-1 Bits 8-9 of the Palette Write Address (3C8h)
|
|
2 Set if using 64x64 cursor, clear if 32x32 cursor.
|
|
3 If set the Clock Doubler is enabled and the input clock is doubled.
|
|
Note: The two registers at REG0A are selected by bit 7 of REG06.
|
|
This register does not exist on the Bt484
|
|
|
|
REG0B (R/W): Cursor Ram Data
|
|
bit 0-7 Data port for the Hardware Cursor Map.
|
|
There are either 2 128byte (32x32bit) or 2 512 byte (64x64bit) maps
|
|
depending on REG0A bit 2. The first is the cursor image and the
|
|
second is the cursor shape.
|
|
To update the cursor map, write the start address to REG00and start
|
|
writing to this register. The index will increment for each byte.
|
|
|
|
REG0C W(R/W): Hardware Cursor X-position
|
|
bit 0-11 The X-position of the rightmost pixel of the hardware cursor
|
|
|
|
REG0E W(R/W): Hardware Cursor Y-position
|
|
bit 0-11 The Y-position of the lower scanline of the hardware cursor
|
|
|
|
|
|
|
|
|
|
Chrontel CH8391 and CH8398:
|
|
REG04 (R/W): Clock RAM Write Address
|
|
bit 0-? Selects the register that is writable at REG05. The first write
|
|
accesses the low byte of the register and the second the high byte.
|
|
Note: Reading this register 4 times will cause the next access of this
|
|
register to go to the "Hidden Clock" register.
|
|
|
|
REG04 (R/W): Clock Select Register
|
|
bit 0-3 Selects the Video Clock.
|
|
4-6 Selects the Memory Clock
|
|
7 Frequency hold. If set the video and memory clock selects in bits
|
|
0-6 are ORed with the actual inputs from the clock select pins
|
|
Note: This register is accessed6 by reading REG04 4 timers first.
|
|
|
|
REG05 (R/W): Clock RAM Data Register
|
|
Note: each indexed register addressed here is 16bit wide and thus must be
|
|
read/written as two bytes, low byte first.
|
|
|
|
REG05 index 00h-0Fh W(R/W): Video Clock Select 0-15
|
|
bit 0-7 N. Numerator. Effective value (n) is N+8. The following N values
|
|
may give unstable output: 0-7, 10-15, 19-23, 28-31, 37-39, 46-47
|
|
and 55.
|
|
8-13 M. Denominator. Effective value (m) is M+2. It is recommended to
|
|
use N<11 for best clock performance
|
|
14-15 K. Clock Divider. Effective divider (k) is: 0: 1, 1: 2, 2: 4, 3: 8
|
|
The resulting clock is: ref*n/(m*k) where ref is the reference clock, usually
|
|
14.31818MHz and n,m and k are the effective (as opposed to coded) factors
|
|
Note: The CH8398 apparently has Video Clock 0 hardcoded as 25.175MHz and
|
|
Video Clock 1 hardcoded as 28.322. The CH8391 does not.
|
|
|
|
REG05 index 10h-17h W(R/W): Memory Clock Select 0-7
|
|
Probably same coding as the Video Clocks.
|
|
|
|
REG06 (R/W): Control Register (CH8391)
|
|
bit 0 Power Down if set
|
|
1 If set the DAC and palette registers are 8bit wide (256 colors of
|
|
16Mcolors), if clear 6bit (256 colors of 256K colors)
|
|
5-7 Color mode. 0: Palette, 5: 15bit, 6: 16bit, 7: 24bit
|
|
Note: This register can also be accessed by reading 3C6h 4 times in a row.
|
|
The 4th read will return the chip ID (B3h for the CH8391) and the 5th
|
|
read or write will access this register ("1r/w" type Cmd register).
|
|
|
|
REG06 (R/W): Control Register (CH8398)
|
|
bit 0 Power Down if set
|
|
2 Always set ??
|
|
4-7 Color mode. 0: Palette, 1: 15bit, 3: 16bit, 5: 24bit, 6: 16bit,
|
|
7: 24bit, 11: 24bit, 12: 15bit
|
|
Note: This register can also be accessed by reading 3C6h 4 times in a row.
|
|
The 4th read will return the chip ID (C0h for the CH8398) and the 5th
|
|
read or write will access this register ("1r/w" type Cmd register).
|
|
|
|
REG07 (R/W): Clock RAM Read Address
|
|
bit 0-? Selects the register that is readable at REG05. The first read
|
|
accesses the low byte of the register and the second the high byte.
|
|
|
|
|
|
|
|
|
|
Cirrus Logic 542x/3x internal DAC.
|
|
- How close is this to the Cirrus Logic CL-GD5200 & Acumos ADAC1 ?
|
|
REG02 (R/W): Hidden DAC Register
|
|
bit 0-3 Extended Mode Select. If bit 6 and 7 are both set this field
|
|
selects the DAC mode:
|
|
0: 5-5-5 15bit Sierra HiColor
|
|
1: 5-6-5 16bit "XGA" HiColor
|
|
5: (5422+) 8-8-8 24bit TrueColor. This mode also exists on the
|
|
5420 rev1, but is not documented.
|
|
6/7: (5428+) DAC Power-down
|
|
8: (5428+) 8bit Greyscale.
|
|
9: (5428+) 3-3-2 8bit RGB
|
|
4 32K Color Control. If set bit 15 (MSB) of a 15bit pixel selects
|
|
whether the pixel is HiColor(bit 15 = 0) or palette data(bit 15 = 1,
|
|
bit 0-7 is the palette index). This bit only has effect in 5-5-5
|
|
15bit modes.
|
|
5 Clocking Mode. If set Clocking Mode 2 will be selected and data will
|
|
only be latched on the rising edge of DCLK, if clear Clocking Mode 1
|
|
will be selected and data will be latched on both the rising edge
|
|
(low byte) and falling edge (high byte) of DCLK. This bit only has
|
|
effect in 15/16 bit modes as all other modes will use Clocking Mode
|
|
2. Clocking Mode 1 should only be used for externally supplied DCLK
|
|
and pixel data.
|
|
6 Enable ALL Extended Modes. If bit 7 is set and this bit is clear the
|
|
DAC is in 5-5-5 15bit Sierra HiColor mode, if both bit 7 and this
|
|
bit are set bits 0-3 determines the DAC mode.
|
|
7 Enable 5-5-5 Mode. If set the DAC is in an advanced mode, depending
|
|
on the other bits in this register, if clear the DAC is in VGA
|
|
compatible palette mode.
|
|
Note: This register is accessed by reading REG02 four times to unlock this
|
|
register, then the next read or write of REG02 will access this register.
|
|
After reading or writing this register the register is locked and this
|
|
register can only be accessed be redoing the 4 reads of REG02 etc. Any
|
|
access to REG00,REG01,REG03 will also lock this register. The 5428 is the
|
|
exception where reads of this register will NOT lock it.
|
|
Note: When REG02 is 0FFh the access to this register described above does
|
|
x not always work.
|
|
Note: This register does not exist on the 5401/5402 and the 5420 rev A.
|
|
|
|
|
|
|
|
|
|
IBM RGB514, RGB524, RGB525, RGB528 Truecolor DAC w/PLL:
|
|
REG04 W(R/W): Index
|
|
bit 0-? Selects the indexed register that will be accessed by the next read
|
|
or write of REG06. If REG07 bit 0 is set this index is
|
|
autoincremented by each access of REG06.
|
|
|
|
REG06 index 00h (R): Rev
|
|
bit 0-7 Revision. F0h for the RGB524, ? for the RGB514, RGB525,RGB528
|
|
|
|
REG06 index 01h (R): Id
|
|
bit 0-7 Chip ID. 2 for the RGB524, ? for the RGB514,RGB525,RGB528
|
|
|
|
REG06 index 02h (R/W): Misc Clock
|
|
bit 0 Set for internal (PLL) clock ??
|
|
1 Set for double clock
|
|
|
|
REG06 index 03h (R/W): Sync
|
|
REG06 index 04h (R/W): Hsync Pos
|
|
bit 0-3 Hsync Position ?
|
|
|
|
REG06 index 05h (R/W): Power Management
|
|
REG06 index 06h (R/W): DAC Options
|
|
bit 1 Fast slew if set ?
|
|
3 Sync on Green if set
|
|
|
|
REG06 index 07h (R/W): Palette Control
|
|
REG06 index 08h (R/W): System Clock (Not RGB525?)
|
|
REG06 index 0Ah (R/W): Pixel Format
|
|
bit 0-2 Pixel format. 3: 8bpp, 4: 15/16bpp, 6: 32bpp
|
|
|
|
REG06 index 0Bh (R/W): 8bpp
|
|
REG06 index 0Ch (R/W): 16bpp
|
|
bit 1 Set for 16bpp (5:6:5), clear for 15bpp (5:5:5)
|
|
|
|
REG06 index 0Dh (R/W): 24bpp
|
|
REG06 index 0Eh (R/W): 32bpp
|
|
REG06 index 10h (R/W): PLL Control 1
|
|
bit 0 Set to use 8 internal clocks with separate numerators, clear to
|
|
use 16 internal clocks with a common numerator (index 14h).
|
|
1-2 Set to 1 ??
|
|
|
|
REG06 index 11h (R/W): PLL Control 2
|
|
bit 0-3 Selects the PLL clock used (0-7 if index 10h bit 0 set, 0-15 if it
|
|
is clear).
|
|
|
|
REG06 index 14h (R/W): PLL Ref Div Fix
|
|
bit 0-4 N. Numerator. Guess 0 not valid. Used for f0-f15 if index 10h bit 0
|
|
is clear.
|
|
|
|
REG06 index 15h W(R/W): Sysclk Ref/VCO Div (Not RGB525)
|
|
bit 0-4 N. Numerator. Guess 0 not valid
|
|
|
|
REG06 index 16h (R/W): Sysclk VCO Div (Not RGB525)
|
|
bit 0-5 M. Multiplier. 65-128, Stored as 0-63.
|
|
6-7 DF. Divider. 0: /8, 1: /4, 2: /2, 1: /1. (Div=1,2,4,8).
|
|
Note: Memory Clock. The effective clock is: Ref*(M+65)/(N*Div), where Ref is
|
|
the reference clock, typ 14.31828MHz and N the numerator from index 15h
|
|
|
|
REG06 index 20h-2Fh (R/W): PLL Clock 0-15 (f0-f15)
|
|
bit 0-5 M. Multiplier. 65-128, Stored as 0-63.
|
|
6-7 DF. Divider. 0: /8, 1: /4, 2: /2, 1: /1. (Div=1,2,4,8).
|
|
Note: Only active if index 10h bit 0 is clear. The effective clock is:
|
|
Ref*(M+65)/(N*Div), where Ref is the reference clock, typ 14.31828MHz
|
|
and N is the Numerator from index 14h.
|
|
|
|
REG06 index 20h-2Eh W(R/W): PLL Clock 0-7 (m0/n0..)
|
|
bit 0-5 M. Multiplier. 65-128, Stored as 0-63.
|
|
6-7 DF. Divider. 0: /8, 1: /4, 2: /2, 1: /1. (Div=1,2,4,8).
|
|
8-12 N. Numerator. Guess 0 not valid
|
|
Note: Only active if index 10h bit 0 is set. The effective clock is:
|
|
Ref*(M+65)/(N*Div), where Ref is the reference clock, typ 14.31828MHz
|
|
|
|
REG06 index 30h (R/W): "Cursor Control"
|
|
bit 0-1 Cursor type. 0: Disabled, 2: Windows?, 3: X11 cursor
|
|
2 Set for 64x64 cursor, clear for 32x32 cursor
|
|
3
|
|
5 Set for ??
|
|
|
|
REG06 index 31h W(R/W): "Cursor X position"
|
|
bit 0-? The horizontal position of the hardware cursor
|
|
|
|
REG06 index 33h W(R/W): "Cursor Y position"
|
|
bit 0-? The vertical position of the hardware cursor
|
|
|
|
REG06 index 35h (R/W): Cursor Hot-Spot X
|
|
|
|
REG06 index 36h (R/W): Cursor Hot-Spot Y
|
|
|
|
REG06 index 40h (R/W): Cursor Color1 Red
|
|
bit 0-7 Red component of the Cursor Color1.
|
|
|
|
REG06 index 41h (R/W): Cursor Color1 Green
|
|
bit 0-7 Green component of the Cursor Color1.
|
|
|
|
REG06 index 42h (R/W): Cursor Color1 Blue
|
|
bit 0-7 Blue component of the Cursor Color1.
|
|
|
|
REG06 index 43h (R/W): Cursor Color2 Red
|
|
bit 0-7 Red component of the Cursor Color2.
|
|
|
|
REG06 index 44h (R/W): Cursor Color2 Green
|
|
bit 0-7 Green component of the Cursor Color2.
|
|
|
|
REG06 index 45h (R/W): Cursor Color2 Blue
|
|
bit 0-7 Blue component of the Cursor Color2.
|
|
|
|
REG06 index 46h (R/W): Cursor Color3 Red
|
|
bit 0-7 Red component of the Cursor Color3.
|
|
|
|
REG06 index 47h (R/W): Cursor Color3 Green
|
|
bit 0-7 Green component of the Cursor Color3.
|
|
|
|
REG06 index 48h (R/W): Cursor Color3 Blue
|
|
bit 0-7 Blue component of the Cursor Color3.
|
|
|
|
REG06 index 60h (R/W): Border Color Red
|
|
bit 0-7 Red component of the Border Color.
|
|
|
|
REG06 index 61h (R/W): Border Color Green
|
|
bit 0-7 Green component of the Border Color.
|
|
|
|
REG06 index 62h (R/W): Border Color Blue
|
|
bit 0-7 Blue component of the Border Color.
|
|
|
|
REG06 index 70h (R/W): Miscellaneous 1
|
|
bit 6
|
|
|
|
REG06 index 71h (R/W): Miscellaneous 2
|
|
bit 0
|
|
2 If set DACs & LUTs are 8bit wide, if clear only 6bits wide
|
|
|
|
REG06 index 72h (R/W): Miscellaneous 3
|
|
REG06 index 73h (R/W): Miscellaneous 4 (Not RGB525)
|
|
REG06 index 82h (R/W): DAC Sense
|
|
REG06 index 84h (R/W): Misc Red
|
|
REG06 index 86h (R/W): Misc Green
|
|
REG06 index 88h (R/W): Misc Blue
|
|
REG06 index 8Eh (R/W): PLL VCO Div In
|
|
REG06 index 8Fh (R/W): PLL Ref Div In
|
|
REG06 index 90h (R/W): VRAM Mask 0
|
|
REG06 index 91h (R/W): VRAM Mask 1
|
|
REG06 index 92h (R/W): VRAM Mask 2
|
|
REG06 index 93h (R/W): VRAM Mask 3
|
|
|
|
REG06 index 100h-4FFh (R/W): "Cursor Data"
|
|
Note: The cursor map is either a 64x64x2 (1024 bytes) or 32x32x2 (256bytes).
|
|
The map data is stored with upper lines first, left pixels first. Each
|
|
byte holds 4 pixels, with lowest pixel in bits 0-1 and highest on 6-7.
|
|
High bit: Low bit: Resulting Screen data:
|
|
0 0
|
|
0 1
|
|
1 0 Screen data
|
|
1 1
|
|
|
|
REG07 (R/W): Index Control
|
|
bit 0 If set the index at REG04 is autoincremented by each access of REG06
|
|
|
|
|
|
|
|
|
|
ICS 5301:
|
|
REG06 (R/W): "Hidden DAC register"
|
|
bit 0-1 Power down if set ??
|
|
2-4 Always 0
|
|
5-7 Mode. 1,4,5: 15bit, 3,6: 16bit, 2,7: 24bit
|
|
Note: This register can be accessed by reading REG02 4 times, then the next
|
|
read or write of REG02 will access this register. Any access of REG00,
|
|
REG01 or REG03 will terminate the access to this register. The register
|
|
can only be read or written once before the DAC is returned to normal
|
|
mode (DAC type 4-1r1w).
|
|
|
|
|
|
|
|
|
|
IC Works W30c498, W30c516 Truecolor DACs:
|
|
REG06 (R/W): Command Register
|
|
bit 0,2 (?) Clockmode for Mode 2 (2 8bit pixels/VCLK). 0: Clock < 22.5
|
|
MHz, 1: Clock < 45 MHz, 2: Clock >= 45 MHz
|
|
1 In palette modes this bit when set selects 8bit DACs, when clear 6bit
|
|
DACs.
|
|
4-7 Mode: 0: 8bit 1VCLK/pixel, 1: 15bit 1VCLK/pixel, 2: 8bit (2 pixels/
|
|
VCLK), 3: 16bit 1VCLK/pixel, 5: 32bit 2VCLKs/pixel, 6: 16bit
|
|
2VCLKs/pixel, 10: 15bit 2VCLKs/pixel
|
|
Note: This register can also be accessed at REG02 by reading REG02 four times
|
|
The fifth read will access of 3C6h will access this register. Only one
|
|
read or write will be allowed (DAC type 4-1r1w3i), the 6th read returns
|
|
84h, the 7th returns 98h and the 8th read returns 4Fh (at least for the
|
|
w30c516).
|
|
|
|
|
|
|
|
|
|
MUSIC MU9c1880 and Diamond SS24 Truecolor DACs:
|
|
REG06 (R/W): Command Register
|
|
bit 0,6 Red Byte Position Shift. In 24bit mode delays the fetching of the
|
|
first pixel of each scanline by 1 or 2 bytes to synchronize with the
|
|
start of the first pixel.
|
|
0: no delay, 1: delay 1 byte, 2: delay 2 bytes
|
|
1-3,5 Selects the Hi- or Truecolor mode. 8: 15bit (5-5-5) HiColor,
|
|
0Bh: 16bit (5-6-5) HiColor, 7: 24bit Truecolor (Red byte first).
|
|
4 Pixel Mode Switch. In 15bit mode when this bit is set, the most
|
|
significant bit of each 16bit pixel whether that pixel should be
|
|
displayed as HiColor (bit 15=0) or Pseudo Color (bit 15=1).
|
|
If this bit clear all pixels are displayed as HiColor
|
|
This bit should be clear in 16bit mode and set in 24bit mode.
|
|
7 If clear the DAC is in Pseudo Color mode, all other bits in this
|
|
register are ignored, if set it is in a Hi- or Truecolor mode (15,16
|
|
or 24 bits/pixel).
|
|
Note: This register can also be accessed at REG02 by reading REG02 four times,
|
|
The fifth read will return 8Eh (the ID for the MU9c1880/SS24) and then
|
|
the next read or write of 3C6h will access this register. Only one read
|
|
or write will be allowed (DAC type 5i-1r1w).
|
|
|
|
|
|
|
|
|
|
MUSIC MU9c4870 High Color(?) DAC
|
|
MUSIC MU9c4910 True Color DAC.
|
|
MUSIC MU9c9910 True Color DAC & Clock Generator.
|
|
REG04 (R/W): PLL Write Index Register (9910 only)
|
|
bit 0-3 Selects the index register which will be accessed by the next write
|
|
to REG05.
|
|
|
|
REG05 (R/W): PLL Data Register (9910 only)
|
|
The PLL registers accessed at this register are indexed via REG04 (writes) and
|
|
REG07 (reads). All (?) are two byte registers which are accessed via two reads
|
|
or writes (low byte first) each of the indexes have an internal flip-flop to
|
|
track low/high byte. Each read of REG05 will increment the read index (with
|
|
the flip-flop incremented first). Writes increment the write index (REG04)
|
|
similarly.
|
|
|
|
REG05 index 00h - 07h W(R/W): f0-f7 PLL Parameters
|
|
bit 0-6 M. Numerator.
|
|
8-11 N1. Quotient. Prescales REF for the PLL.
|
|
12-13 N2. Clock divider. Divides the output clock by: 0: /1, 1: /2,
|
|
2: /4, 3: /8
|
|
Resultant clock is: REF*(M+1)/((N1+1)*(2^N2)), where REF is the reference
|
|
clock, typically 14.31818MHz.
|
|
|
|
REG06 (R/W): Command Register
|
|
bit 0 Powers down the DAC if set
|
|
5-7 Mode. 5: 15bit, 6: 16bit, 7: 24bit
|
|
Note: This register can be accessed by reading REG02 3 times, then the fourth
|
|
read will return the device ID and then the next read or write of REG02
|
|
will access this register. Any access of REG00, REG01 or REG03 or writes
|
|
to REG02 will terminate the access to this register, however reading of
|
|
REG02 will not (DAC type 4i-1wNr).
|
|
The MU9c9910 has ID 44h, the MU9c4910 has ID 82h, the MU9c4870 ??
|
|
|
|
REG07 (R/W): PLL Read Index Register (9910 only)
|
|
bit 0-3 Selects the index register which will be accessed by the next read
|
|
to REG05.
|
|
|
|
|
|
|
|
|
|
MUSIC MU9c9750 Low Power SYNDAC:
|
|
REG04 (R/W): PLL Write Address Register
|
|
bit 0-3 Selects the index register which will be accessed by the next write
|
|
to REG05.
|
|
|
|
REG05 (R/W): PLL Parameters
|
|
The PLL registers accessed at this register are indexed via REG04 (writes) and
|
|
REG07 (reads). As all but index 0Eh are two byte registers which are accessed
|
|
via two reads or writes (low byte first) each of the indexes have an internal
|
|
flip-flop to track low/high byte. Each read of REG05 will increment the read
|
|
index (with the flip-flop incremented first). Writes increment the write
|
|
index (REG04) similarly.
|
|
|
|
REG05 index 00h - 07h W(R/W): CLK0 f0-f7 PLL Parameters
|
|
bit 0-6 M. Numerator.
|
|
8-11 N1. Quotient. Prescales REF for the PLL.
|
|
12-13 N2. Clock divider. Divides the output clock by: 0: /1, 1: /2,
|
|
2: /4, 3: /8
|
|
14-15 PLL Mode Select. 0: Normal PLL mode - the output frequency is
|
|
calculated as: f=REF*(M+1)/((N1+1)*(2^N2)), 1: High-resolution
|
|
Low-frequency mode - same as PLL mode, but the output clock is
|
|
divided by 1024, 2: OFF - The output is set HIGH, 3: Low-resolution
|
|
Low-frequency mode - Output clock is: f=REF/((M+1)*(2^N2))
|
|
REF is the reference clock, typically 14.31818MHz. For best results the
|
|
following constraints should be observed: REF should be in the 5MHz - 32Mhz
|
|
range. REF/(N1+1) should be in the 2MHz - 16MHz range (for REF=14.31818MHz
|
|
N1 should be in the range 1-6) and REF*(M+1)/(N1+1) should be in the 40MHz
|
|
to 80MHz range.
|
|
|
|
REG05 index 08h W(R/W): CLK0 fL0 PLL Parameters
|
|
Defines the CLK0 output when in LCD mode. Same format as index 0-7
|
|
|
|
REG05 index 09h W(R/W): CLK0 fD0 PLL Parameters
|
|
Defines the CLK0 output when in Dormant mode. Same format as index 0-7
|
|
|
|
REG05 index 0Ah W(R/W): CLK1 fA PLL Parameters
|
|
Defines the CLK1 output when in CRT mode and bit 4 of the PLL Control Register
|
|
(index 0Eh) is clear. Same format as index 0-7
|
|
|
|
REG05 index 0Bh W(R/W): CLK1 fB PLL Parameters
|
|
Defines the CLK1 output when in CRT mode and bit 4 of the PLL Control Register
|
|
(index 0Eh) is set. Same format as index 0-7
|
|
|
|
REG05 index 0Ch W(R/W): CLK1 fL1 PLL Parameters
|
|
Defines the CLK1 output when in LCD mode. Same format as index 0-7
|
|
|
|
REG05 index 0Dh W(R/W): CLK1 fD1 PLL Parameters
|
|
Defines the CLK1 output when in Dormant mode. Same format as index 0-7
|
|
|
|
REG05 index 0Eh (R/W): PLL Control Register
|
|
bit 0-2 CLK0 Select. Selects the CLK0 output in CRT mode (f0 - f7).
|
|
4 CLK1 Select. Selects the CLK1 output in CRT mode. 0: fA, 1: fB
|
|
5 CLK0 External Select Enable. If clear the CLK0 definition (f0-f7)
|
|
is selected by the CS0-CS2 inputs, if set it is selected by bits
|
|
0-2 of this register
|
|
6 CLK0 Master Powerdown. If set the CLK0 PLL is powered down and the
|
|
output is set HIGH.
|
|
7 CLK1 Master Powerdown. If set the CLK1 PLL is powered down and the
|
|
output is set HIGH.
|
|
|
|
REG06 (R/W): Command Register
|
|
bit 0 LCD mode enable. If set the DAC goes into LCD mode where video flow
|
|
through the DACs is stopped and the palette RAM is only accessed
|
|
to service uP read/writes. The clocks CLK0,CLK1 are forced to the
|
|
state defined in fL0/fL1 regardless of the state of the PLL Control
|
|
register. The internal state of registers and palette RAM is
|
|
maintained. See note
|
|
6 Dormant Mode enable. If set the DAC goes into Dormant mode where
|
|
the video flow though the DACs and the uP interface is stopped.
|
|
The clocks CLK0,CLK1 are forced to the state defined in fD0/fD1
|
|
regardless of the state of the PLL Control register. The internal
|
|
state of registers and palette RAM is maintained. See note
|
|
Note: The CRT, LCD and Dormant modes are selected by a combination of the
|
|
bits in this register and the PD0,PD1 input pins (x is don't care):
|
|
PD1: PD0: Bit 6: Bit 0: Mode: DAC: RAM Access: CLK0: CLK1:
|
|
1 0 0 0 CRT On Video&uP f0-f7 fA,fB
|
|
x 1 0 0 LCD Off uP fL0 fL1
|
|
1 0 0 1 LCD Off uP fL0 fL1
|
|
0 0 x x Dormant Off None fD0 fD1
|
|
x x 1 x Dormant Off None fD0 fD1
|
|
Setting PD1=1 and PD0=0 allows full control from this register
|
|
|
|
REG07 (R/W): PLL Read Address Register
|
|
bit 0-3 Selects the index register which will be accessed by the next read
|
|
to REG05.
|
|
|
|
|
|
|
|
|
|
Oak OTI-66HC HiColor DAC:
|
|
REG06 (R/W): "Hidden" Command Register
|
|
bit 0 If set the DAC powers down
|
|
5-7 DAC mode. 5: 15bit, 6: 16bit
|
|
Note: This register can be accessed by reading REG02 4 times, then the next
|
|
read or write of REG02 will access this register. Any access of REG00,
|
|
REG01 or REG03 or writes to REG02 will terminate the access to this
|
|
register, however reading of REG02 will not (DAC type 4-1wNr).
|
|
|
|
|
|
|
|
|
|
S3 86c708 (GenDac aka ICS5342) and 86c716 (SDAC aka ICS5300).
|
|
|
|
REG02 (R): "Hidden DAC" register (86c716)
|
|
Bit 4-7 7 for the 86c716.
|
|
Note: This is a special register overlaying the PEL register activated by an
|
|
internal counter. Each access to 3C7h-3C9h resets the counter and each
|
|
access to 3C6h increments it. When the counter reaches 4 this register
|
|
is returned. The fifth read returns another register
|
|
|
|
REG04 (R/W): PLL Write Register
|
|
bit 0-7 Controls the indexed register written at REG05. Each indexed
|
|
register holds two bytes at the same index. Autoincremented after
|
|
every two writes of REG05.
|
|
|
|
REG05 index 00h W(R/W): f0 PLL M & N1/M2 divider
|
|
bit 0-6 M. Quotient. Stored as 1-127, actual value 3-129
|
|
8-12 N1. Frequency divider. Stored as 1-31, actual value 3-33
|
|
13-15 N2. Divides the frequency. 0: /1, 1: /2, 2: /4, 3: /8
|
|
Note: Defines the frequency generate when clock 0 is selected
|
|
Note: See index 02h for details
|
|
Possibly hardwired to 25.175MHz
|
|
|
|
REG05 index 01h W(R/W): f1 PLL M & N1/M2 divider
|
|
bit 0-6 M. Quotient. Stored as 1-127, actual value 3-129
|
|
8-12 N1. Frequency divider. Stored as 1-31, actual value 3-33
|
|
13-15 N2. Divides the frequency. 0: /1, 1: /2, 2: /4, 3: /8
|
|
Note: Defines the frequency generate when clock 1 is selected
|
|
Note: See index 02h for details
|
|
Possibly hardwired to 28.322MHz
|
|
|
|
REG05 index 02h W(R/W): f2 PLL M & N1/M2 divider
|
|
bit 0-6 M. Quotient. Stored as 1-127, actual value 3-129
|
|
8-12 N1. Frequency divider. Stored as 1-31, actual value 3-33
|
|
13-15 N2. Divides the frequency. 0: /1, 1: /2, 2: /4, 3: /8
|
|
Note: Defines the frequency generate when clock 2 is selected
|
|
Note: Frequency is (M/N1)/(1 << N2) *base frequency.M and N1 are the actual
|
|
values, not the stored ones. Typically the base frequency is 14.318 MHz.
|
|
|
|
REG05 index 03h W(R/W): f3 PLL M & N1/M2 divider
|
|
bit 0-6 M. Quotient. Stored as 1-127, actual value 3-129
|
|
8-12 N1. Frequency divider. Stored as 1-31, actual value 3-33
|
|
13-15 N2. Divides the frequency. 0: /1, 1: /2, 2: /4, 3: /8
|
|
Note: Defines the frequency generate when clock 3 is selected
|
|
Note: See index 02h for details
|
|
|
|
REG05 index 0Ah W(R/W): Memory Clock
|
|
bit 0-6 M. Quotient. Stored as 1-127, actual value 3-129
|
|
8-12 N1. Frequency divider. Stored as 1-31, actual value 3-33
|
|
13-15 N2. Divides the frequency. 0: /1, 1: /2, 2: /4, 3: /8
|
|
Note: Defines the frequency generate for the memory clock
|
|
Note: See index 02h for details
|
|
|
|
REG05 index 0Eh W(R/W): PLL Control
|
|
|
|
|
|
REG06 (R/W): Enhanced Command Register
|
|
bit 4-7 Mode: 0: Palette (1 pixel/VCLK), 1: Palette (2 pixels/VCLK), 2: 15bit
|
|
(2 VCLKs/pixel), 3: 15bit (1 VCLK/pixel), 4: 24bit (3 VCLKs/pixel)
|
|
- GenDAC only?, 5: 16bit (1 VCLK/pixel), 6: 16bit (2 VCLKs/pixel),
|
|
7: 32bit (2 VCLKs/pixel), 0Eh: 24bit (3 VCLKs/pixel)
|
|
|
|
REG07 (R/W): PLL Read Register
|
|
bit 0-7 Controls the indexed register read from REG05. Each indexed
|
|
register holds two bytes at the same index. Autoincremented after
|
|
every two reads of REG05.
|
|
|
|
|
|
|
|
|
|
|
|
SGS-Thompson STG1700/2/3 Truecolor DACs:
|
|
All the STG DACs have 16bit pixel data path, but the 1700 can not use the
|
|
packed 24bit mode where 2 pixels are transferred in 3 pixel clocks.
|
|
The 1703 has built-in clock generator.
|
|
|
|
REG04 (R/W): Index Low
|
|
bit 0-7 Index for the register accessible via REG05. The high byte (always
|
|
0) is in REG07.
|
|
|
|
REG05 (R/W): Indexed Register
|
|
There are a series of indexed registers in the STG DACs. If REG06 bit 4 is set
|
|
they are accessed by the two index bytes to REG02 and then reading or writing
|
|
the indexed registers at REG02 (index will autoincrement). If REG06 bit 4 is
|
|
clear the index is written to REG04 & REG07 and the indexed register are read
|
|
or written at REG05.
|
|
|
|
REG05 index 00h (R): Company ID
|
|
bit 0-7 44h for SGS-Thompson, 97h for ??
|
|
|
|
REG05 index 01h (R): Device ID
|
|
bit 0-7 00h for STG1700, 02h for STG1702, 03h for STG1703
|
|
|
|
REG05 index 02h (R/W?):
|
|
bit 0-7 A1h ??
|
|
|
|
REG05 index 03h (R/W?): Primary Pixel Mode
|
|
bit 0-7 Mode (this register only active if REG06 bit 3 set):
|
|
2: 15bit 1VCLK per pixel
|
|
3: 16bit 1VCLK per pixel
|
|
4: 24bit 2VCLKs per pixel (2x 16bit -> 1x 24bit)
|
|
5: 8bit 1/2 VCLKs per pixel (ie. 16bit -> 2x 8bit)
|
|
9: (not 1700) 24bit 3/2 VCLKs per pixel (3x 16bit -> 2x 24bit)
|
|
|
|
REG05 index 04h (R/W?): Secondary Pixel Mode
|
|
bit 0-7 same as index 3 ??
|
|
|
|
REG05 index 05h (R/W?): PLL Control
|
|
bit 0-7 02h - for double clocking (16bit) ???
|
|
|
|
REG05 index 06h (R/W?):
|
|
bit 0-7 00h ??
|
|
|
|
REG05 index 07h (R/W?):
|
|
bit 0-7 88h ??
|
|
|
|
REG05 index 20h W(R/W):
|
|
bit 0-7 B. Quotient
|
|
8-12 N1. Frequency divider.
|
|
13-15 Divider (D). 0: /1, 1: /2, 2: /4, 3: /8
|
|
The effective clock is: Ref*D*(B+2)/(N1+2). Ref is the reference clock,
|
|
typically 14.31818MHz
|
|
|
|
REG06 (R/W): Pixel Command Register
|
|
bit 0 Power down the DAC if set
|
|
1 Set to get 8bit DACs in 256color mode, clear to get normal 6bit DACs
|
|
2 Controls intensity ??
|
|
3 If set the DAC is controlled by the indexed registers below.
|
|
4 When set puts the dac into indexed mode, now write the index (2
|
|
bytes) to this register, then each access to this register will read
|
|
or write the particular indexed register and increment the index.
|
|
This is the same index as in REG04/REG07.
|
|
5-7 Selects the Hi/True color mode: 0: Standard (16/256color),
|
|
5: 15bit(32K), 6: 16bit(64K), 7: 24bit(16m)
|
|
Note: This register can be accessed by reading REG02 4 times, then the next
|
|
read or write of REG02 will access this register. Any access of REG00,
|
|
REG01 or REG03 will terminate the access to this register, The register
|
|
can only be read or written once per unlock sequence (DAC type 4-1w1r).
|
|
|
|
REG07 (R/W): Index High
|
|
bit 0-? High byte of the index in REG04. 0 for all current registers.
|
|
|
|
|
|
|
|
Sierra SC15021,25/6 Truecolor DACs:
|
|
The SC15021 supports 16bit pixel data path.
|
|
|
|
REG04 (R/W): Overlay Write Address
|
|
|
|
REG05 (R/W): Overlay Data
|
|
|
|
REG06 (R/W): Command Register
|
|
bit 1-2 EXT mode select ?
|
|
3 Gamma Correction enabled if set?
|
|
4 If set 3C7h is the index port and 3C8h the data port for an extra
|
|
register, also this register is then accessible directly at 3C6h.
|
|
0,5-7 Mode:
|
|
00h Palette modes
|
|
04h 32bit RGBx (red first) "double clocked" - pixel data on both
|
|
rising and falling edge of the dotclock
|
|
05h 32bit BGRx (blue first) "double clocked"
|
|
06h 24bit RGB/32bit RGBx (red first)
|
|
07h 24bit BGR/32bit BGRx (blue first)
|
|
08h 15bit (32K colors) "double clocked"
|
|
09h 15bit (32K colors) "EXT" "double clocked"
|
|
0Ah 15bit (32K colors)
|
|
0Bh 15bit (32K colors) "EXT"
|
|
0Ch 16bit (64K colors) "double clocked"
|
|
0Eh 16bit (64K colors)
|
|
Note: This register can be accessed by reading REG02 4 times, then the next
|
|
read or write of REG02 will access this register. Any access of REG00,
|
|
REG01 or REG03 or writes to REG02 will terminate the access to this
|
|
register, however reading of REG02 will not (DAC type 4-1wNr).
|
|
|
|
REG06 index 8 (R/W): Auxiliary Control
|
|
bit 0 DAC and palette register width in palette modes.
|
|
Set for 8bit and clear for 6 bit
|
|
1 PED 75 IRE.
|
|
2 Power Down.
|
|
|
|
REG06 index 9 (R): ID1
|
|
bit 0-7 53h ('S')
|
|
|
|
REG06 index 0Ah (R): ID2
|
|
bit 0-7 Version code. 0/36h/3Ah
|
|
|
|
REG06 index 0Bh (R): ID3
|
|
bit 0-7 B1h for the SC15025/26, ACh for the SC15021
|
|
|
|
REG06 index 0Ch (R): ID4
|
|
bit 0-7 41h
|
|
|
|
REG06 index 0Dh (R/W): Pixel Mask Low
|
|
bit 0-7 ANDed with the pixel data, Low byte. Should normally be FFh.
|
|
|
|
REG06 index 0Eh (R/W): Pixel Mask Middle
|
|
bit 0-7 ANDed with the pixel data, Middle byte. Should normally be FFh.
|
|
|
|
REG06 index 0Fh (R/W): Pixel Mask High
|
|
bit 0-7 ANDed with the pixel data, High byte. Should normally be FFh.
|
|
|
|
REG06 index 10h (R/W): Pixel Repack
|
|
bit 0 (15025/6) Set for 4x 8bit -> 1x 24bit, clear for 1x 8bit -> 8bit,
|
|
2x 8bit -> 1x 16bit or 3x 8biot -> 1x 24bit
|
|
0-3 (15021) Packaging: 2: 8bit -> 2x4bit, 4: 16bit -> 2x8bit,
|
|
5: 3x16bit -> 2x24bit (2/3 clock), 6: 2x16bit -> 24bit (1/2
|
|
clock), 8: 16bit -> 16bit (alternate?), 0: all others
|
|
|
|
REG06 index 11h (R/W): Cursor (15021)
|
|
bit 0-2 Cursor Delay. 0: None, 4: +1, 5: +2, 6: -1, 7: -2
|
|
3-4 Cursor type. 0: disabled, 1: 3 colors, 2: 2 color MS-Windows style,
|
|
3: 2 color X11 style
|
|
7 Cursor Polarity
|
|
|
|
REG06 index 12h (R/W): Secondary Control (15021)
|
|
bit 0-1 Mix control: 1: 8 -> 16 MixA or 8 -> 15 MixB, 2: 8 -> 16 MixB or
|
|
8 -> 15 MixA, 0 for all others.
|
|
|
|
REG07 (R/W): Overlay Read Address
|
|
|
|
|
|
|
|
|
|
|
|
Trident TKD8001 24bit DAC (also 9200CXr,9400CXi,9420DGi internal DAC):
|
|
|
|
REG06 (R/W): Command Register
|
|
0 (not 9200) Power down DAC if set ?
|
|
1 (not 9400) In mode 0 this bit when set selects 8bit DACs, when clear
|
|
6bit DACs. Should be set in 24bit mode, clear in 15/16 bit modes ?
|
|
5-7 Mode: 0: Palette (16/256), 5: 15bit (32k), 7: 16bit (64k),
|
|
6: 24bit (16m colors) bit 2 should be set in this mode
|
|
Note: This register can also be accessed at REG02 by reading REG02 four
|
|
times. Then the command register can be read or written at REG02.
|
|
This access will be terminated by any access to REG00, REG01 or REG03
|
|
or after a write to the command register (DAC type 4-Nr1w).
|
|
|
|
|
|
|
|
|
|
Trident 9440AGi internal 24bit DAC:
|
|
|
|
REG06 (R/W): Command Register
|
|
2 If set in the 15/16/24 bit modes pixels with the most significant
|
|
bit set appears to be displayed as if in palette mode ?
|
|
4-7 Mode: 1: 15bit (32k), 3: 16bit (64k), 0Dh: 24bit (16m colors)
|
|
All other values appears to default to palette mode
|
|
Note: This register can also be accessed at REG02 by reading REG02 four
|
|
times. Then the command register can be read or written at REG02.
|
|
This access will be terminated by any access to REG00, REG01 or REG03
|
|
or after a write to the command register (DAC type 4-Nr1w).
|
|
|
|
|
|
|
|
|
|
TI TLC34058, Brooktree Bt458 DACs
|
|
These DACs are intended for high bandwidth systems and are not VGA compatible.
|
|
They use 4 or 5 separate pixel ports in parallel for higher bandwidth
|
|
|
|
REG04 (R/W) Index Register.
|
|
bit 0-7 Index for accesses through 3C6h, 3C7h and 3C9h. For 3C7h and 3C9h
|
|
there is also an internal counter for the (Red, Green and Blue)
|
|
cycle. This counter is reset when this register is written.
|
|
Each access to 3C7h or 3C9h will increment first the RGB counter and
|
|
then this register.
|
|
|
|
REG05 (R/W) Palette Data
|
|
bit 0-7 Palette data port. 3C8h selects the entry in the palette RAM. Each
|
|
read or write of this register increments index, first through the
|
|
Red, Green & Blue and then increments register 3C8h
|
|
|
|
REG06 (R/W) Control Data.
|
|
bit 0-7 Data port for the Control registers. 3C8h is the index. Unlike 3C7h
|
|
and 3C9h the index in 3C8h is not increased by reads and writes of
|
|
this register
|
|
|
|
REG06 index 4 (R/W): Read Mask Register
|
|
bit 0-7 The pixel data is ANDed with this byte before being passed to the
|
|
palette RAM. This is similar to 3C6h in standard VGA systems.
|
|
|
|
REG06 index 5 (R/W): Blink Mask Register
|
|
bit 0-7 In the blink off period the pixel data is ANDed with the inverse of
|
|
this register, Ie. the '0' bits in this register will protect the
|
|
corresponding bits of the pixel data from blinking, while '1' bits
|
|
will force the corresponding pixel data bits low during the blink
|
|
off period.
|
|
|
|
REG06 index 6 (R/W): Command Register
|
|
bit 0 OL0 Display Enable. If clear the overlay pin 0 (OL0) is forced to 0
|
|
1 OL1 Display Enable. If clear the overlay pin 1 (OL1) is forced to 0
|
|
2 OL0 Blink Enable. If set (and bit 0 set) the overlay pin 0 toggles
|
|
between 0 and the actual value at the blink rate
|
|
3 OL1 Blink Enable. If set (and bit 1 set) the overlay pin 1 toggles
|
|
between 0 and the actual value at the blink rate
|
|
4-5 Blink Rate Select. Selects the blink rate in vertical periods:
|
|
0: 16on/48off, 1: 16on/16off, 2: 32on/32off, 3: 64on/64off
|
|
6 RAM Enable. If the overlay select pins (OL0-1) are 0 this bit
|
|
selects the output. Set for palette RAM data, clear for overlay
|
|
register 0.
|
|
7 Multiplex Select. Set for 5:1 multiplexing, clear for 4:1
|
|
multiplexing - pixel port E is ignored and should be tied low
|
|
|
|
REG06 index 7 (R/W): Test Register
|
|
bit 0-3 Selects the data to be returned in bit 4-7 when reading this
|
|
register. Selects upper or lower 4 bits of one of the 3 DAC inputs:
|
|
1: return 4MSB of Red 9: return 4LSB of Red
|
|
2: return 4MSB of Green 10: return 4LSB of Green
|
|
4: return 4MSB of Blue 12: return 4LSB of Blue
|
|
4-7 (R) Data selected by bits 0-3
|
|
|
|
REG07 (R/W) Overlay Data
|
|
bit 0-7 Overlay data port. 3C8h selects the entry in the overlay RAM (0-3).
|
|
Each read or write of this register increments index, first through
|
|
the Red, Green & Blue and then increments register 3C8h
|
|
|
|
|
|
|
|
|
|
TI TLC34075, ATI68875 True color DACs
|
|
This DAC has an 8bit VGA port and a 32bit pixelport (P). The 32bit pixelport
|
|
P can be multiplexed for greater bandwidth. 6 or 8 bit DACs can be controlled
|
|
via the 8/6 pin (low=6bit, high=8bit).
|
|
|
|
REG08 (R/W): General Control Register
|
|
bit 0 If set HSYNCOUT is active high, active low if clear
|
|
1 If set VSYNCOUT is active high, active low if clear
|
|
2 Enables split shift register transfer (VRAM) if set
|
|
3 Enables special nibble mode if set
|
|
4 Pedestal Enable Control. Set for a 7.5 IRE pedestal, clear for a 0
|
|
IRE pedestal
|
|
5 Sync Enable Control. If set enables sync on green.
|
|
7 MUXOUT. If set the MUXOUT output pin is high, low if clear
|
|
Note: bits 2 and 3 can not both be set.
|
|
|
|
REG09 (R/W): Input Clock Selection Register
|
|
bit 0-3 Selects the clock source (DOTCLK):
|
|
0: CLK0, 1: CLK1, 2: CLK2, 3: CLK3 (TTL), 4: /CLK3 (TTL)
|
|
8: CLK3 and /CLK3 are selected as an ECL clock source
|
|
|
|
REG0A (R/W): Output Clock Selection Register
|
|
bit 0-2 Selects SCLK from DOTCLK.
|
|
0: SCLK=DOTCLK, 1: SCLK=DOTCLK/2, 2: SCLK=DOTCLK/4
|
|
3: SCLK=DOTCLK/8, 4: SCLK=DOTCLK/16, 5: SCLK=DOTCLK/32
|
|
6,7: SCLK held at logic low
|
|
3-5 Selects VCLK from DOTCLK.
|
|
0: VCLK=DOTCLK, 1: VCLK=DOTCLK/2, 2: VCLK=DOTCLK/4
|
|
3: VCLK=DOTCLK/8, 4: VCLK=DOTCLK/16, 5: VCLK=DOTCLK/32
|
|
6,7: VCLK held at logic high
|
|
|
|
REG0B (R/W): MUX Control Register
|
|
bit 0-5 Selects bits/pixel, pixel port and multiplexing:
|
|
0Dh 24bpp from P. Red=P8-15, Green=P16-23, Blue=P24-31
|
|
10h 1bpp. 4 pixels/DOTCLK from P0-3
|
|
11h 1bpp. 8 pixels/DOTCLK from P0-7
|
|
12h 1bpp. 16 pixels/DOTCLK from P0-15
|
|
13h 1bpp. 32 pixels/DOTCLK from P0-31
|
|
14h 2bpp. 2 pixels/DOTCLK from P0-3
|
|
15h 2bpp. 4 pixels/DOTCLK from P0-7
|
|
16h 2bpp. 8 pixels/DOTCLK from P0-15
|
|
17h 2bpp. 16 pixels/DOTCLK from P0-31
|
|
18h 4bpp. 1 pixel/DOTCLK from P0-3
|
|
19h 4bpp. 2 pixels/DOTCLK from P0-7
|
|
1Ah 4bpp. 4 pixels/DOTCLK from P0-15
|
|
1Bh 4bpp. 8 pixels/DOTCLK from P0-31
|
|
1Ch 8bpp. 1 pixels/DOTCLK from P0-7
|
|
1Dh 8bpp. 2 pixels/DOTCLK from P0-15
|
|
1Eh 8bpp. 4 pixels/DOTCLK from P0-31
|
|
1Fh 4bpp. 4 pixels/DOTCLK from P0-31 (Special Nibble mode)
|
|
If the NFLAG input is low the 4 pixels are from P0-3, P8-11,
|
|
P16-19, P24-27 if high from P4-7, P12-15, P20-23, P28-31
|
|
2Dh 8bpp from VGA port
|
|
|
|
REG0C (R/W): Palette Page Register
|
|
bit 0-7 For 1,2 and 4 bits/pixel modes the upper bits of this register are
|
|
used to select 1 of 128, 64 and 16 pages respectively in the
|
|
palette RAM. The pixel data selects the entry within the page.
|
|
|
|
REG0E (R/W): Test Register
|
|
bit 0-2 (W) Test mode. Selects the current test mode. Reading this register
|
|
will step to the next test (see Next below).
|
|
Val: Next: Description:
|
|
0 1 Read Color Palette Red value
|
|
1 2 Read Color Palette Green value
|
|
2 0 Read Color Palette Blue value
|
|
3 0 Read Identification code.
|
|
Returns 75h for 34075
|
|
4 5 Read Ones Accumulation Red value
|
|
5 6 Read Ones Accumulation Green value
|
|
6 4 Read Ones Accumulation Blue value
|
|
7 7 Analog Test. Result specified below.
|
|
3 (R) Analog Test result. Set if the voltage selected by bit 6 (Green)
|
|
or bit 7 (Red) is larger than the one selected by bit 4 (145mV
|
|
reference) or bit 5 (Blue), clear if not.
|
|
4 Select 145mV reference if set. Only applies to Analog test (bit 0-2
|
|
= 7)
|
|
5 Select Blue DAC if set. Only applies to Analog test (bit 0-2 = 7)
|
|
6 Select Green DAC if set. Only applies to Analog test (bit 0-2 = 7)
|
|
7 Select Red DAC if set. Only applies to Analog test (bit 0-2 = 7)
|
|
|
|
REG0F (W): Reset State
|
|
Note: Writing to this register will cause a hardware reset of the DAC.
|
|
|
|
|
|
|
|
|
|
TI Viewpoint TVP3010,TVP3020,TVP3025,TVP3026 DACs
|
|
Note: The TVP3010, TVP3020 and TVP3025 use 3 address lines to select 8 direct
|
|
registers (REG00-REG07) while the TVP3026 uses 4 lines to select 16
|
|
direct registers (REG00-REG0F). The indexed registers (called REG06
|
|
index XXh) are also handled differently
|
|
|
|
REG06 (R/W): Index Register
|
|
bit 0-7 Index port to the indexed registers. First set this register, then
|
|
read or write REG07
|
|
Note: On the TVP3026 the index is written to REG00 and data is read or written
|
|
to/from REG0A
|
|
|
|
REG06 index 00h W(R/W): Cursor X Position
|
|
bit 0-11 Horizontal position of the cursor
|
|
|
|
REG06 index 02h W(R/W): Cursor Y Position
|
|
bit 0-11 Vertical position of the cursor
|
|
|
|
REG06 index 04h (R/W): Sprite Origin X
|
|
|
|
REG06 index 05h (R/W): Sprite Origin Y
|
|
|
|
REG06 index 06h (R/W): Cursor Control
|
|
bit 4 X Window Mode if set
|
|
6 Sprite Enable if set
|
|
7 (3025) Planar Access. Set for Bt485 mode, clear for 3020 mode
|
|
|
|
REG06 index 08h W(R/W): Cursor RAM Address
|
|
bit 0-15 Index into the cursor RAM on the DAC. Data is read or written at
|
|
index 0Ah. Each access to index 0Ah will autoincrement this register
|
|
|
|
REG06 index 0Ah (R/W): Cursor RAM Data
|
|
bit 0-7 Cursor data. Reading or writing this register will access the
|
|
location in Cursor RAM specified in index 8 and will increment that
|
|
index to allow consecutive reads or writes.
|
|
The cursor is stored as a 64x64x2 bitmap with 4 2bit pixels per byte
|
|
The two bits are interpreted as:
|
|
High (odd) Low (even) ix 6 bit 4=1 ix 6 bit 4=0
|
|
bit bit X11 mode "normal"
|
|
0 0 Transparent Color 0
|
|
0 1 Transparent Color 1
|
|
1 0 Color 0 Transparent
|
|
1 1 Color 1 Inverse screen (XOR)
|
|
Color 0 is the color in index 23h-25h, Color 1 is the color in index
|
|
26h-28h
|
|
|
|
REG06 index 0Eh (R/W): True Color Control (3025)
|
|
bit 0 8bit mode?. 0: 16/32bit, 1: 4/8bit
|
|
1 Non-VGA mode. Set for non-VGA mode, clear for VGA mode
|
|
2 BTmode. Set for Bt485 mode, clear for TI3020 mode
|
|
|
|
REG06 index 0Fh (R/W): VGA Switch Control (3025)
|
|
|
|
REG06 index 10h W(R/W): Window Start X
|
|
|
|
REG06 index 12h W(R/A): Window Stop X
|
|
|
|
REG06 index 14h W(R/W): Window Start Y
|
|
|
|
REG06 index 16h W(R/W): Window Stop Y
|
|
|
|
REG06 index 18h (R/W): MUX Control 1
|
|
bit 0-2 (3020) Direct Color mode.
|
|
3: Selects 6-6-4 16bit mode (6red-6green-4blue).
|
|
4: Selects 5-5-5 15bit mode (5red-5green-5blue).
|
|
5: Selects 5-6-5 16bit mode (5red-6green-5blue).
|
|
6: Selects 8-8-8 24bit mode (8red-8green-8blue).
|
|
0-3 (3025) Direct Color mode
|
|
0Ch: Selects 5-5-5 mode (5red-5green-5blue).
|
|
0Dh: Selects 5-6-5 mode (5red-6green-5blue).
|
|
0Eh: Selects 8-8-8 mode (8red-8green-8blue).
|
|
6 (3025) D/T mode. 0: Selects "D" mode, 1: selects "T" mode.
|
|
7 Pseudo Color, set for palette modes
|
|
|
|
REG06 index 19h (R/W): MUX Control 2
|
|
|
|
|
|
REG06 index 1Ah (R/W): Input Clock Select
|
|
bit 0 (3020) If set selects ICLK1, if clear ICLK0
|
|
0-2 (3025) Selects the input clock.
|
|
0: ICLK0, 1: ICLK2, 2: ICLK2, 3: ICLK2_I ?, 4: ICLK2_E ?
|
|
5: PLL as input clock.
|
|
4 If set doubles the selected input clock.
|
|
|
|
REG06 index 1Bh (R/W): Output Clock Select
|
|
bit 0-1 Multiplex. 0: (R1), 1: 1:2 Mux (1x64 -> 2x 24/32bit) R2, 2: 1:4 Mux
|
|
(1x64 -> 4x 15/16bit) R4, 3: 1:8 Mux (1x64 -> 8x 8bit) R8
|
|
3-4 Clock range. 0: <=60MHz (V1), 1: >60MHz & <=120MHz (V2), 2: >120MHz
|
|
(V4), 3: V8
|
|
6 S ?
|
|
7 (3025) NS ?
|
|
Note: Set to 3Eh in VGA passthrough mode
|
|
|
|
REG06 index 1Ch (R/W): Palette Page
|
|
|
|
REG06 index 1Dh (R/W): General Control
|
|
bit 0 Vertical Sync Polarity. 0: Negative, 1: Positive
|
|
1 Horizontal Sync Polarity. 0: Negative, 1: Positive
|
|
5 Sync on Green if set
|
|
|
|
REG06 index 1Eh (R/W): Misc Control (3025)
|
|
bit 0 Powerdown
|
|
1 Dotclock disable
|
|
2 Internal 6/8 Control. If set selection of 6 or 8 bits DAC mode in
|
|
palette modes is done by bit 3, if clear from the 6/8 input pin.
|
|
3 8Bpp. If set selects 8bit DAC and palette registers in palette
|
|
modes, if clear selects 6bit DAC & registers.
|
|
This bit only active if bit 2 is set.
|
|
5 VCLK Polarity.
|
|
6 LCLK Latch. 0: VCLK
|
|
7 Loop PLL RCLK.
|
|
|
|
REG06 index 20h (R/W): Overscan Color Red
|
|
|
|
REG06 index 21h (R/W): Overscan Color Green
|
|
|
|
REG06 index 22h (R/W): Overscan Color Blue
|
|
|
|
REG06 index 23h (R/W): Cursor Color 0 Red
|
|
bit 0-7 The red component of the cursor background color.
|
|
|
|
REG06 index 24h (R/W): Cursor Color 0 Green
|
|
bit 0-7 The green component of the cursor background color.
|
|
|
|
REG06 index 25h (R/W): Cursor Color 0 Blue
|
|
bit 0-7 The blue component of the cursor background color.
|
|
|
|
REG06 index 26h (R/W): Cursor Color 1 Red
|
|
bit 0-7 The red component of the cursor foreground color.
|
|
|
|
REG06 index 27h (R/W): Cursor Color 1 Green
|
|
bit 0-7 The green component of the cursor foreground color.
|
|
|
|
REG06 index 28h (R/W): Cursor Color 1 Blue
|
|
bit 0-7 The blue component of the cursor foreground color.
|
|
|
|
REG06 index 29h (R/W): Auxillary Control
|
|
bit 0 Window Complement if set
|
|
3 (3020) Self Clock mode if set
|
|
|
|
REG06 index 2Ah (R/W): General IO Control
|
|
bit 0-4
|
|
|
|
REG06 index 2Bh (R/W): General IO Data
|
|
|
|
REG06 index 2Ch (R/W): PLL Control (3025)
|
|
bit 0-1 Write 0 to reset the internal counter for the PLL data registers
|
|
Each write to index 2Dh/2Eh/2Fh will increment this field.
|
|
|
|
REG06 index 2Dh (R/W): Pixel Clock PLL Data (3025)
|
|
bit 0-? N. Divider (3-28). Stored as 1-26. Could probably be larger ??
|
|
8-14 M. Divident (3-129). Stored as 1-127
|
|
16-17 P. Clock multiplier. 0: *8, 1: *3, 2: *2, 3: *1
|
|
19 PLL Enable. Enables the PLL clock if set
|
|
Note: This register consists of 3 bytes at the same index. Writing 00h to
|
|
index 2Ch resets the internal counter so that the next access to this
|
|
index accesses the first byte. Each access autoincrements the internal
|
|
counter. The clock is calculated as: Ref * P * (M+2)/(N+2)
|
|
|
|
REG06 index 2Eh (R/W): MCLK PLL Data (3025)
|
|
bit 0-? N. Divider (3-28). Stored as 1-26. Could probably be larger ??
|
|
8-14 M. Divident (3-129). Stored as 1-127
|
|
16-17 P. Clock multiplier. 0: *8, 1: *3, 2: *2, 3: *1
|
|
19 PLL Enable. Enables the PLL clock if set
|
|
23 Set when writing new PLL data ?
|
|
|
|
REG06 index 2Fh (R/W): Loop Clock PLL Data (3025)
|
|
bit 0-? N. Divider (3-28). Stored as 1-26. Could probably be larger ??
|
|
8-14 M. Divident (3-129). Stored as 1-127
|
|
16-17 P. Clock multiplier. 0: *8, 1: *3, 2: *2, 3: *1
|
|
19 PLL Enable. Enables the PLL clock if set
|
|
|
|
REG06 index 30h W(R/W): Color Key OLVGA
|
|
|
|
REG06 index 32h W(R/W): Color Key Red
|
|
|
|
REG06 index 34h W(R/W): Color Key Green
|
|
|
|
REG06 index 36h W(R/W): Color Key Blue
|
|
|
|
REG06 index 38h (R/W): Color Key Control
|
|
|
|
REG06 index 39h (R/W): MCLK/DCLK Control (3025)
|
|
|
|
REG06 index 3Ah (R/W): Sense Test
|
|
|
|
REG06 index 3Bh (R/W): Test Data
|
|
|
|
REG06 index 3Ch W(R/W): CRC
|
|
|
|
REG06 index 3Eh (R/W): CRC Control
|
|
|
|
REG06 index 3Fh (R): ID
|
|
bit 0-7 Chip ID. 20h for TVP3020, 25h for TVP3025, 26h for TVP3026
|
|
Guess: 10h for TVP3010
|
|
|
|
REG06 index D5h (R/W): Mode 85 Control (3025)
|
|
|
|
REG0A (R/W): Data Register (3025)
|
|
|
|
|
|
UMC UM70c178 Hi-Color DACs:
|
|
|
|
REG06 (R/W): Command Register
|
|
bit 0-4 (R) Always 0
|
|
5-7 Mode: 5: 15bit, 7: 16bit.
|
|
Note: This register can also be accessed at REG02 by reading REG02 four
|
|
times. Then the command register can be read or written at REG02.
|
|
This access will be terminated by any access to REG00, REG01 or REG03
|
|
or after write of the command register. (DAC type 4-Nr1w).
|
|
|
|
|
|
|
|
|
|
UMC UM70c188 TrueColor DACs:
|
|
|
|
REG06 (R/W): Command Register
|
|
bit 0-3 (R) Always 0
|
|
4 Set in 24bit mode, clear in all other modes
|
|
5-7 Mode: 5: 15bit, 7: 16bit. Don't care for 24bit
|
|
Note: This register can also be accessed at REG02 by reading REG02 four
|
|
times. Then the command register can be read or written at REG02.
|
|
This access will be terminated by any access to REG00, REG01 or REG03
|
|
or after a read or write of the command register. (DAC type 4-1r1w).
|
|
|
|
|
|
|
|
|
|
|
|
Forcing HiColor DACs into command mode:
|
|
Note: This works on the Sierra, ATT, Winbond DACs and clones, not on the
|
|
Brooktree or TI DACs, also the MUSIC DACs will require an extra read of 3C6h.
|
|
|
|
procedure dactocomm; {switches DAC to command register}
|
|
var x:word;
|
|
begin
|
|
x:=inp($3C8); {clear old state}
|
|
x:=inp($3C6);
|
|
x:=inp($3C6);
|
|
x:=inp($3C6); {Read $3C6 4 times.}
|
|
x:=inp($3C6);
|
|
end;
|
|
|
|
Now reads and writes to $3C6 will access the command register. Depending on
|
|
the DAC type you may have multiple read/writes, one write/multiple reads or
|
|
one read/write of the command register before it switches back to the PEL
|
|
register. Any access to $3C7-$3C9 will switch back to the PEL mask register.
|
|
|
|
|
|
Forcing HiColor DACs into normal mode:
|
|
|
|
procedure dactopel; {switches DAC back to normal mode}
|
|
var x:word;
|
|
begin
|
|
x:=inp($3C8);
|
|
end;
|
|
|
|
|
|
|
|
function testdac:string;
|
|
var
|
|
x,y,z,v,oldcommreg,oldpelreg:word;
|
|
|
|
type
|
|
pel=record
|
|
index,red,green,blue:byte;
|
|
end;
|
|
|
|
procedure readpelreg(index:word;var p:pel);
|
|
begin
|
|
p.index:=index;
|
|
disable;
|
|
outp($3C7,index);
|
|
p.red :=inp($3C9);
|
|
p.blue :=inp($3C9);
|
|
p.green:=inp($3C9);
|
|
enable;
|
|
end;
|
|
|
|
procedure writepelreg(var p:pel);
|
|
begin
|
|
disable;
|
|
outp($3C8,p.index);
|
|
outp($3C9,p.red);
|
|
outp($3C9,p.blue);
|
|
outp($3C9,p.green);
|
|
enable;
|
|
end;
|
|
|
|
function setcomm(cmd:word):word;
|
|
begin
|
|
dac2comm;
|
|
outp($3c6,cmd);
|
|
dac2comm;
|
|
setcomm:=inp($3c6);
|
|
end;
|
|
|
|
procedure waitforretrace;
|
|
begin
|
|
repeat until (inp(CRTC+6) and 8)=0;
|
|
repeat until (inp(CRTC+6) and 8)>0; {Wait until we're in retrace}
|
|
end;
|
|
|
|
function dacis8bit:boolean;
|
|
var
|
|
pel2,x,v:word;
|
|
pel1:pel;
|
|
begin
|
|
pel2:=inp($3C8);
|
|
readpelreg(255,pel1);
|
|
v:=pel1.red;
|
|
pel1.red:=255;
|
|
writepelreg(pel1);
|
|
readpelreg(255,pel1);
|
|
x:=pel1.red;
|
|
pel1.red:=v;
|
|
writepelreg(pel1);
|
|
outp($3C8,pel2);
|
|
dacis8bit:=(x=255);
|
|
end;
|
|
|
|
function testdacbit(bit:word):boolean;
|
|
begin
|
|
dac2pel;
|
|
outp($3C6,oldpel and (bit xor $FF));
|
|
dac2comm;
|
|
disable;
|
|
outp($3C6,oldcomm or bit);
|
|
v:=inp($3C6);
|
|
outp($3C6,v and (bit xor $FF));
|
|
enable;
|
|
testdacbit:=(v and bit)<>0;
|
|
end;
|
|
|
|
begin
|
|
|
|
setDAC(_dac8,'Normal');
|
|
dac2comm;
|
|
oldcomm:=inp($3C6);
|
|
dactopel;
|
|
oldpel:=inp($3c6);
|
|
|
|
dac2comm;
|
|
outp($3c6,0);
|
|
dac8:=dacis8bit;
|
|
dac2pel;
|
|
|
|
notcomm:=oldcomm xor 255;
|
|
outp($3c6,notcomm);
|
|
dac2comm;
|
|
v:=inp($3c6);
|
|
if v<>notcomm then
|
|
if (setcomm($E0) and $e0)<>$e0 then
|
|
begin {Bits 5-7 of command register NOT writable.}
|
|
dac2pel;
|
|
x:=inp($3C6);
|
|
repeat
|
|
y:=x; {wait for the same value twice}
|
|
x:=inp($3C6);
|
|
until (x=y);
|
|
z:=x;
|
|
dac2comm;
|
|
if daccomm<>$8E then
|
|
begin {If command register=$8e, we've got an SS24}
|
|
y:=8;
|
|
repeat
|
|
x:=inp($3C6);
|
|
dec(y);
|
|
until (x=$8E) or (y=0);
|
|
end
|
|
else x:=daccomm;
|
|
if x=$8e then setDAC(_dacss24,'SS24')
|
|
else setDAC(_dac15,'Sierra SC11486');
|
|
dac2pel;
|
|
end
|
|
else begin
|
|
if (setcomm($60) and $E0)=0 then
|
|
begin
|
|
if (setcomm(2) and 2)>0 then setDAC(_dacatt,'ATT 20c490')
|
|
else setDAC(_dacatt,'ATT 20c490');
|
|
end
|
|
else begin
|
|
x:=setcomm(oldcomm);
|
|
if inp($3c6)=notcomm then
|
|
begin
|
|
if setcomm($FF)<>$ff then setDAC(_dacadac1,'Acumos ADAC1')
|
|
else begin
|
|
dac8now:=dacis8bit;
|
|
dac2comm;
|
|
outp($3C6,(oldcomm or 2) and $FE);
|
|
dac8now:=dacis8bit;
|
|
if dac8now then
|
|
if dacis8bit then setDAC(_dacatt,'ATT 20c491')
|
|
else setDAC(_dacCL24,'Cirrus 24bit DAC')
|
|
else setDAC(_dacatt,'ATT 20c492');
|
|
end;
|
|
end
|
|
else begin
|
|
if trigdac=notcomm then setDAC(_dacCL24,'Cirrus 24bit DAC')
|
|
else begin
|
|
dac2pel;
|
|
outp($3c6,$FF);
|
|
case trigdac of
|
|
$44:setDAC(_dacmus,'MUSIC ??');
|
|
$82:setDAC(_dacmus,'MUSIC MU9C4910');
|
|
$8e:setDAC(_dacss24,'Diamond SS2410');
|
|
else
|
|
if testdacbit($10) then setDAC(_dacsc24,'Sierra 16m')
|
|
else if testdacbit(4) then setDAC(_dacUnk9,'Unknown DAC #9')
|
|
else setDAC(_dac16,'Sierra 32k/64k');
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
dac2comm;
|
|
outp($3c6,oldcomm);
|
|
end;
|
|
dac2pel;
|
|
outp($3c6,oldpel);
|
|
|
|
if (dactype=_dac8) and (DAC_RS2<>0) and (DAC_RS3<>0) then
|
|
begin
|
|
oldpel :=inp($3C6);
|
|
oldcomm:=inp($3C6+DAC_RS2);
|
|
outp($3C6+DAC_RS2,oldpel xor $FF);
|
|
if (inp($3C6)=oldpel) and (inp($3C6+DAC_RS2)=(oldpel xor $FF)) then
|
|
SetDAC(_dacBt484,'Brooktree Bt484');
|
|
|
|
outp($3C6+DAC_RS2,oldcomm);
|
|
outp($3C6,oldpel);
|
|
end;
|
|
|
|
|
|
|
|
if dactype=_dac8 then
|
|
begin
|
|
WaitforRetrace;
|
|
outp($3C8,222);
|
|
outp($3C9,$43);
|
|
outp($3C9,$45);
|
|
outp($3C9,$47); {Write 'CEGEDSUN' + mode to DAC index 222}
|
|
outp($3C8,222);
|
|
outp($3C9,$45);
|
|
outp($3C9,$44);
|
|
outp($3C9,$53);
|
|
outp($3C8,222);
|
|
outp($3C9,$55);
|
|
outp($3C9,$4E);
|
|
outp($3C9,13); {Should be in CEG mode now}
|
|
outp($3C6,255);
|
|
x:=(inp($3c6) shr 4) and 7;
|
|
if x<7 then
|
|
begin
|
|
setDAC(_dacCEG,'Edsun CEG rev. '+chr(x+48));
|
|
WaitforRetrace;
|
|
outp($3C8,223);
|
|
outp($3C9,0); {Back in normal dac mode}
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
This ID's all known DAC types, except:
|
|
- Sierra "mark2" and "Mark3" are all ID'd as Mark 3.
|
|
|
|
- Avance Logic ALG1101 DAC can not be ID'd.
|
|
|
|
- TI 34075, ATI 68830, 68860 and 68875 can not be ID'd
|
|
|
|
- The Edsun CEG test has not been verified.
|