added colordepth and CRTC FIFO limit programming. You can now switch colorspaces on the fly, but colors probably mess-up because of still lacking colorpalette programming.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13745 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -155,22 +155,22 @@ status_t SET_DISPLAY_MODE(display_mode *mode_to_set)
|
|||||||
case B_CMAP8:
|
case B_CMAP8:
|
||||||
colour_depth1 = 8;
|
colour_depth1 = 8;
|
||||||
// head1_mode(BPP8, 1.0);
|
// head1_mode(BPP8, 1.0);
|
||||||
// head1_depth(BPP8);
|
head1_depth(BPP8);
|
||||||
break;
|
break;
|
||||||
case B_RGB15_LITTLE:
|
case B_RGB15_LITTLE:
|
||||||
colour_depth1 = 16;
|
colour_depth1 = 16;
|
||||||
// head1_mode(BPP15, 1.0);
|
// head1_mode(BPP15, 1.0);
|
||||||
// head1_depth(BPP15);
|
head1_depth(BPP15);
|
||||||
break;
|
break;
|
||||||
case B_RGB16_LITTLE:
|
case B_RGB16_LITTLE:
|
||||||
colour_depth1 = 16;
|
colour_depth1 = 16;
|
||||||
// head1_mode(BPP16, 1.0);
|
// head1_mode(BPP16, 1.0);
|
||||||
// head1_depth(BPP16);
|
head1_depth(BPP16);
|
||||||
break;
|
break;
|
||||||
case B_RGB32_LITTLE:
|
case B_RGB32_LITTLE:
|
||||||
colour_depth1 = 32;
|
colour_depth1 = 32;
|
||||||
// head1_mode(BPP32, 1.0);
|
// head1_mode(BPP32, 1.0);
|
||||||
// head1_depth(BPP32);
|
head1_depth(BPP32);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/*set the colour depth for CRTC2 and DAC2 */
|
/*set the colour depth for CRTC2 and DAC2 */
|
||||||
@@ -286,7 +286,7 @@ status = B_OK;
|
|||||||
|
|
||||||
/* set the colour depth for CRTC1 and the DAC */
|
/* set the colour depth for CRTC1 and the DAC */
|
||||||
/* first set the colordepth */
|
/* first set the colordepth */
|
||||||
// head1_depth(colour_mode);
|
head1_depth(colour_mode);
|
||||||
/* then(!) program the PAL (<8bit colordepth does not support 8bit PAL) */
|
/* then(!) program the PAL (<8bit colordepth does not support 8bit PAL) */
|
||||||
// head1_mode(colour_mode,1.0);
|
// head1_mode(colour_mode,1.0);
|
||||||
|
|
||||||
|
|||||||
@@ -80,6 +80,7 @@ status_t eng_crtc_validate_timing(
|
|||||||
/*set a mode line - inputs are in pixels*/
|
/*set a mode line - inputs are in pixels*/
|
||||||
status_t eng_crtc_set_timing(display_mode target)
|
status_t eng_crtc_set_timing(display_mode target)
|
||||||
{
|
{
|
||||||
|
uint16 fifolimit = 0;
|
||||||
uint8 temp;
|
uint8 temp;
|
||||||
|
|
||||||
uint32 htotal; /*total horizontal total VCLKs*/
|
uint32 htotal; /*total horizontal total VCLKs*/
|
||||||
@@ -269,6 +270,29 @@ status_t eng_crtc_set_timing(display_mode target)
|
|||||||
ENG_REG8(RG8_MISCW) = temp;
|
ENG_REG8(RG8_MISCW) = temp;
|
||||||
|
|
||||||
LOG(2,(", MISC reg readback: $%02x\n", ENG_REG8(RG8_MISCR)));
|
LOG(2,(", MISC reg readback: $%02x\n", ENG_REG8(RG8_MISCR)));
|
||||||
|
|
||||||
|
/* setup CRTC FIFO depth, method 'extrapolated' from VBE BIOS behaviour */
|
||||||
|
switch (target.space)
|
||||||
|
{
|
||||||
|
case B_CMAP8:
|
||||||
|
fifolimit = 0x0001;
|
||||||
|
break;
|
||||||
|
case B_RGB15_LITTLE:
|
||||||
|
case B_RGB16_LITTLE:
|
||||||
|
fifolimit = 0x0002;
|
||||||
|
break;
|
||||||
|
case B_RGB24_LITTLE:
|
||||||
|
fifolimit = 0x0003;
|
||||||
|
break;
|
||||||
|
case B_RGB32_LITTLE:
|
||||||
|
fifolimit = 0x0004;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
fifolimit *= target.timing.h_display;
|
||||||
|
fifolimit >>= 4;
|
||||||
|
fifolimit += 4;
|
||||||
|
SEQW(FETCHCNTLO, (fifolimit & 0x00fe));
|
||||||
|
SEQW(FETCHCNTHI, (((SEQR(FETCHCNTHI)) & 0xfc) | ((fifolimit & 0x0300) >> 8)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* always disable interlaced operation */
|
/* always disable interlaced operation */
|
||||||
@@ -396,43 +420,35 @@ status_t eng_crtc_set_timing(display_mode target)
|
|||||||
|
|
||||||
status_t eng_crtc_depth(int mode)
|
status_t eng_crtc_depth(int mode)
|
||||||
{
|
{
|
||||||
uint8 viddelay = 0;
|
uint8 genctrl = 0;
|
||||||
uint32 genctrl = 0;
|
|
||||||
|
|
||||||
/* set VCLK scaling */
|
/* set VCLK scaling */
|
||||||
switch(mode)
|
switch(mode)
|
||||||
{
|
{
|
||||||
case BPP8:
|
case BPP8:
|
||||||
viddelay = 0x01;
|
/* bits unknown (yet): 'direct mode' */
|
||||||
/* genctrl b4 & b5 reset: 'direct mode' */
|
genctrl = 0x22; //%0010 0010
|
||||||
genctrl = 0x00101100;
|
|
||||||
break;
|
break;
|
||||||
case BPP15:
|
case BPP15:
|
||||||
viddelay = 0x02;
|
/* bits unknown (yet): 'indirect mode' (via colorpalette?) */
|
||||||
/* genctrl b4 & b5 set: 'indirect mode' (via colorpalette) */
|
genctrl = 0xb6; //%1011 0110
|
||||||
genctrl = 0x00100130;
|
|
||||||
break;
|
break;
|
||||||
case BPP16:
|
case BPP16:
|
||||||
viddelay = 0x02;
|
/* bits unknown (yet): 'indirect mode' (via colorpalette?) */
|
||||||
/* genctrl b4 & b5 set: 'indirect mode' (via colorpalette) */
|
genctrl = 0xb6; //%1011 0110
|
||||||
genctrl = 0x00101130;
|
|
||||||
break;
|
break;
|
||||||
case BPP24:
|
case BPP24:
|
||||||
viddelay = 0x03;
|
/* bits unknown (yet): 'indirect mode' (via colorpalette?) */
|
||||||
/* genctrl b4 & b5 set: 'indirect mode' (via colorpalette) */
|
//fixme: unknown what to set yet..
|
||||||
genctrl = 0x00100130;
|
genctrl = 0x00;
|
||||||
break;
|
break;
|
||||||
case BPP32:
|
case BPP32:
|
||||||
viddelay = 0x03;
|
/* bits unknown (yet): 'indirect mode' (via colorpalette?) */
|
||||||
/* genctrl b4 & b5 set: 'indirect mode' (via colorpalette) */
|
genctrl = 0xae; //%1010 1110
|
||||||
genctrl = 0x00101130;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* enable access to primary head */
|
/* setup bytes per pixel, and direct/indirect mode */
|
||||||
set_crtc_owner(0);
|
SEQW(COLDEPTH, genctrl);
|
||||||
|
|
||||||
CRTCW(PIXEL, ((CRTCR(PIXEL) & 0xfc) | viddelay));
|
|
||||||
DACW(GENCTRL, genctrl);
|
|
||||||
|
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user