782 lines
16 KiB
C
782 lines
16 KiB
C
/*++
|
||
|
||
Copyright (c) 1994 Weitek Corporation
|
||
|
||
Module Name:
|
||
|
||
ibm525.c
|
||
|
||
Abstract:
|
||
|
||
This module contains code specific for the IBM 525RGB DAC on P9100
|
||
adapters.
|
||
|
||
Environment:
|
||
|
||
Kernel mode
|
||
|
||
Revision History may be found at the end of this file.
|
||
|
||
--*/
|
||
|
||
#include "p9.h"
|
||
#include "p9000.h"
|
||
#include "p9gbl.h"
|
||
#include "p91dac.h" // Include before ibm525.h
|
||
#include "ibm525.h"
|
||
#include "p91regs.h"
|
||
|
||
//
|
||
// DAC specific static data.
|
||
//
|
||
|
||
//
|
||
// Function Prototypes for the IBM525 DAC which are defined in IBM525.C.
|
||
//
|
||
//
|
||
// IBM525 function prototypes.
|
||
//
|
||
|
||
VOID
|
||
WriteIBM525(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension,
|
||
USHORT index,
|
||
UCHAR bvalue
|
||
);
|
||
|
||
VOID
|
||
IBM525SetPalette(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension,
|
||
ULONG *pPal,
|
||
ULONG StartIndex,
|
||
ULONG Count
|
||
);
|
||
|
||
VOID
|
||
IBM525SetPointerPos(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension,
|
||
ULONG ptlX,
|
||
ULONG ptlY
|
||
);
|
||
|
||
VOID
|
||
IBM525SetPointerShape(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension,
|
||
PUCHAR pHWCursorShape
|
||
);
|
||
|
||
VOID
|
||
IBM525PointerOn(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension
|
||
);
|
||
|
||
VOID
|
||
IBM525PointerOff(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension
|
||
);
|
||
|
||
VOID
|
||
IBM525ClearPalette(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension
|
||
);
|
||
|
||
BOOLEAN
|
||
IBM525SetMode(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension
|
||
);
|
||
|
||
VOID
|
||
IBM525RestoreMode(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension
|
||
);
|
||
|
||
VOID
|
||
IBM525SetClkDoubler(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension
|
||
);
|
||
|
||
VOID
|
||
IBM525ClrClkDoubler(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension
|
||
);
|
||
|
||
|
||
|
||
//
|
||
// Define the DAC support routines structure for the IBM525 DAC.
|
||
//
|
||
|
||
DAC Ibm525 = {
|
||
DAC_ID_IBM525,
|
||
NUM_DAC_REGS,
|
||
IBM525SetMode,
|
||
IBM525RestoreMode,
|
||
IBM525SetPalette,
|
||
IBM525ClearPalette,
|
||
IBM525PointerOn,
|
||
IBM525PointerOff,
|
||
IBM525SetPointerPos,
|
||
IBM525SetPointerShape,
|
||
CLK_MAX_FREQ_IBM525,
|
||
IBM525SetClkDoubler,
|
||
IBM525ClrClkDoubler,
|
||
DAC_ID_IBM525,
|
||
64,
|
||
FALSE,
|
||
TRUE,
|
||
TRUE
|
||
};
|
||
|
||
|
||
VOID
|
||
WriteIBM525(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension,
|
||
USHORT index,
|
||
UCHAR value
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Writes specified data to an indexed register inside the RGB525 Ramdac.
|
||
|
||
Arguments:
|
||
|
||
Index register and data.
|
||
|
||
Return Value:
|
||
|
||
None.
|
||
|
||
--*/
|
||
|
||
{
|
||
IBM525_WR_DAC(P9100_IBM525_INDEX_LOW, (UCHAR) (index & 0x00FF));
|
||
IBM525_WR_DAC(P9100_IBM525_INDEX_HIGH, (UCHAR) ((index & 0xFF00) >> 8));
|
||
IBM525_WR_DAC(P9100_IBM525_INDEX_DATA, (UCHAR) value);
|
||
(void) P9_RD_REG(P91_MEM_CONFIG); // Needed for timinig...
|
||
|
||
} // End of WriteIBM525()
|
||
|
||
|
||
UCHAR
|
||
ReadIBM525(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension,
|
||
USHORT index
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Reads data from an indexed register inside the RGB525 Ramdac.
|
||
|
||
Arguments:
|
||
|
||
Index register.
|
||
|
||
Return Value:
|
||
|
||
None.
|
||
|
||
--*/
|
||
|
||
{
|
||
UCHAR j;
|
||
|
||
IBM525_WR_DAC(P9100_IBM525_INDEX_LOW, (UCHAR) (index & 0x00FF));
|
||
IBM525_WR_DAC(P9100_IBM525_INDEX_HIGH, (UCHAR) ((index & 0xFF00) >> 8));
|
||
|
||
IBM525_RD_DAC(P9100_IBM525_INDEX_DATA, j);
|
||
|
||
return(j);
|
||
|
||
} // End of ReadIBM525()
|
||
|
||
|
||
|
||
|
||
VOID
|
||
IBM525SetPalette(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension,
|
||
ULONG *pPal,
|
||
ULONG StartIndex,
|
||
ULONG Count
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Sets the Device palette
|
||
|
||
Arguments:
|
||
|
||
HwDeviceExtension - Pointer to the miniport driver's device extension.
|
||
|
||
pPal - Pointer to the array of pallete entries.
|
||
|
||
StartIndex - Specifies the first pallete entry provided in pPal.
|
||
|
||
Count - Number of palette entries in pPal
|
||
|
||
Return Value:
|
||
|
||
None.
|
||
|
||
--*/
|
||
|
||
{
|
||
|
||
UCHAR *pBytePal;
|
||
int i;
|
||
|
||
#define STALL_TIME 11
|
||
|
||
VideoDebugPrint((3, "IBM525SetPalette: ----------\n"));
|
||
IBM525_WR_DAC(P9100_RAMWRITE, (UCHAR) StartIndex);
|
||
VideoPortStallExecution(STALL_TIME);
|
||
|
||
pBytePal = (PUCHAR) pPal;
|
||
|
||
//
|
||
// Load the palette with RGB values. The input palette has 4 bytes
|
||
// per entry, the last of which is ignored.
|
||
//
|
||
|
||
while (Count--)
|
||
{
|
||
IBM525_WR_DAC(P9100_PALETDATA, *pBytePal++);
|
||
VideoPortStallExecution(STALL_TIME);
|
||
IBM525_WR_DAC(P9100_PALETDATA, *pBytePal++);
|
||
VideoPortStallExecution(STALL_TIME);
|
||
IBM525_WR_DAC(P9100_PALETDATA, *pBytePal++);
|
||
VideoPortStallExecution(STALL_TIME);
|
||
pBytePal++;
|
||
|
||
}
|
||
}
|
||
|
||
|
||
VOID
|
||
IBM525SetPointerPos(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension,
|
||
ULONG ptlX,
|
||
ULONG ptlY
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Move Hardware Pointer.
|
||
|
||
Arguments:
|
||
|
||
HwDeviceExtension - Pointer to the miniport driver's device extension.
|
||
|
||
ptlX, ptlY - Requested X,Y position for the pointer.
|
||
|
||
Return Value:
|
||
|
||
TRUE
|
||
|
||
--*/
|
||
|
||
{
|
||
|
||
WR_CURS_POS_X_IBM525(ptlX);
|
||
WR_CURS_POS_Y_IBM525(ptlY);
|
||
|
||
return;
|
||
}
|
||
|
||
|
||
VOID
|
||
IBM525SetPointerShape(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension,
|
||
PUCHAR pHWCursorShape
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Sets the hardware cursor shape.
|
||
|
||
Arguments:
|
||
|
||
HwDeviceExtension - Pointer to the miniport driver's device extension.
|
||
pHWCursorShape - Pointer to the cursor bitmap.
|
||
|
||
Return Value:
|
||
|
||
None.
|
||
|
||
--*/
|
||
|
||
{
|
||
int i, j, iCursorIndex;
|
||
UCHAR ucPacked;
|
||
USHORT usExpanded;
|
||
|
||
VideoDebugPrint((3, "IBM525SetPointerShape: ----------\n"));
|
||
//
|
||
// Calculate # bytes for Pixel data. The IBMRGB525 DAC provides support
|
||
// for 32x32 and 64x64 cursors. Two bits for each pixel.
|
||
//
|
||
// 2 bit per pixel = 4 pixel per byte (8 / 2).
|
||
// 256 bytes for 32x32 cursor, and 1024 bytes for 64x64 cursor.
|
||
// Note that we can store up to four 32x32 cursors.
|
||
//
|
||
// Specify:
|
||
// 32x32 cursor; 2-color & highlighting cursor; delayed cursor update;
|
||
// read actual location; pixel order left to right and partion 00.
|
||
//
|
||
WriteIBM525(HwDeviceExtension, RGB525_CURSOR_CTL, 0x32);
|
||
|
||
//
|
||
// Set color 1 to Black, and color 2 to white...
|
||
//
|
||
WriteIBM525(HwDeviceExtension, RGB525_CURSOR_1_RED, 0x00); // Black
|
||
WriteIBM525(HwDeviceExtension, RGB525_CURSOR_1_GREEN, 0x00);
|
||
WriteIBM525(HwDeviceExtension, RGB525_CURSOR_1_BLUE, 0x00);
|
||
|
||
WriteIBM525(HwDeviceExtension, RGB525_CURSOR_2_RED, 0xFF); // White
|
||
WriteIBM525(HwDeviceExtension, RGB525_CURSOR_2_GREEN, 0xFF);
|
||
WriteIBM525(HwDeviceExtension, RGB525_CURSOR_2_BLUE, 0xFF);
|
||
|
||
//
|
||
// Set cursor hot-spot to upper/left of cursor...
|
||
//
|
||
WriteIBM525(HwDeviceExtension, RGB525_CURSOR_HOT_X, 0x00);
|
||
WriteIBM525(HwDeviceExtension, RGB525_CURSOR_HOT_Y, 0x00);
|
||
|
||
//
|
||
// WinNT provides a monochrome or color bitmap for a specific cursor.
|
||
// The mono bitmap has the same width as the cursor, but has twice the
|
||
// vertical extent, which contains two masks. The first mask is the
|
||
// AND mask, while the second mask is the XOR mask. Normally, the AND
|
||
// mask will be loaded into Plane1 while the XOR mask will be loaded
|
||
// into Plane0 as is for Ramdacs like the BT485. However, since the
|
||
// IBMRGB525 Ramdac only allows for a color cursor, we must combine
|
||
// both the AND and XOR mask into one, two bits per pixel bit mask.
|
||
//
|
||
iCursorIndex = RGB525_CURSOR_ARRAY; // Beginning cursor index
|
||
|
||
WAIT_FOR_RETRACE();
|
||
|
||
for (i = 0; i < ((CURSOR_WIDTH * CURSOR_HEIGHT) / 8); i++)
|
||
{
|
||
usExpanded = 0;
|
||
|
||
ucPacked = *pHWCursorShape; // Get AND mask byte
|
||
|
||
for (j = 0; j < 8; j++)
|
||
{
|
||
if (ucPacked & (0x1 << j))
|
||
usExpanded |= (0x2 << (j*2));
|
||
}
|
||
|
||
ucPacked = *(pHWCursorShape + 128); // Get XOR mask byte
|
||
|
||
for (j = 0; j < 8; j++)
|
||
{
|
||
if (ucPacked & (0x1 << j))
|
||
usExpanded |= (0x1 << (j*2));
|
||
}
|
||
|
||
++pHWCursorShape;
|
||
|
||
WriteIBM525(HwDeviceExtension,
|
||
(USHORT) iCursorIndex++,
|
||
(UCHAR) ((usExpanded & 0xFF00) >> 8));
|
||
|
||
WriteIBM525(HwDeviceExtension,
|
||
(USHORT) iCursorIndex++,
|
||
(UCHAR) (usExpanded & 0x00FF));
|
||
}
|
||
return;
|
||
|
||
} // End of IBM525SetPointerShape()
|
||
|
||
|
||
|
||
|
||
VOID
|
||
IBM525PointerOn(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Turn on the hardware cursor.
|
||
|
||
Arguments:
|
||
|
||
HwDeviceExtension - Pointer to the miniport driver's device extension.
|
||
|
||
Return Value:
|
||
|
||
None.
|
||
|
||
--*/
|
||
|
||
{
|
||
//
|
||
// Turn the cursor on only if it was disabled.
|
||
//
|
||
VideoDebugPrint((3, "IBM525PointerOn: ----------\n"));
|
||
if (!CURS_IS_ON_IBM525())
|
||
{
|
||
WAIT_FOR_RETRACE();
|
||
CURS_ON_IBM525();
|
||
}
|
||
|
||
return;
|
||
}
|
||
|
||
|
||
VOID
|
||
IBM525PointerOff(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Turn off the hardware cursor.
|
||
|
||
Arguments:
|
||
|
||
HwDeviceExtension - Pointer to the miniport driver's device extension.
|
||
|
||
Return Value:
|
||
|
||
None.
|
||
|
||
--*/
|
||
|
||
{
|
||
|
||
//
|
||
// Turn the cursor off only if it was enabled.
|
||
//
|
||
VideoDebugPrint((3, "IBM525PointerOff: ----------\n"));
|
||
if (CURS_IS_ON_IBM525())
|
||
{
|
||
WAIT_FOR_RETRACE();
|
||
CURS_OFF_IBM525();
|
||
}
|
||
|
||
return;
|
||
}
|
||
|
||
|
||
VOID
|
||
IBM525ClearPalette(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Clears the palette to all 0's
|
||
|
||
Arguments:
|
||
|
||
HwDeviceExtension - Pointer to the miniport driver's device extension.
|
||
|
||
Return Value:
|
||
|
||
None.
|
||
|
||
--*/
|
||
|
||
{
|
||
int i, Count;
|
||
|
||
VideoDebugPrint((3, "IBM525ClearPalette: ----------\n"));
|
||
//
|
||
// Calculate the number of palette entries. It is assumed that the
|
||
// caller has already determined that the current mode makes use
|
||
// of the palette,
|
||
//
|
||
Count = 256; // 256 x 8 x 3
|
||
|
||
//
|
||
// Fill the palette with RGB values of 0.
|
||
//
|
||
IBM525_WR_DAC(P9100_RAMWRITE, (UCHAR) 0);
|
||
VideoPortStallExecution(5);
|
||
|
||
while (Count--)
|
||
{
|
||
IBM525_WR_DAC(P9100_PALETDATA, 0);
|
||
VideoPortStallExecution(5);
|
||
IBM525_WR_DAC(P9100_PALETDATA, 0);
|
||
VideoPortStallExecution(5);
|
||
IBM525_WR_DAC(P9100_PALETDATA, 0);
|
||
VideoPortStallExecution(5);
|
||
}
|
||
|
||
return;
|
||
}
|
||
|
||
|
||
BOOLEAN
|
||
IBM525SetMode(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension
|
||
)
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Initializes the DAC for the current mode.
|
||
|
||
Arguments:
|
||
|
||
HwDeviceExtension - Pointer to the miniport driver's device extension.
|
||
|
||
Return Value:
|
||
|
||
None.
|
||
|
||
--*/
|
||
{
|
||
VideoDebugPrint((2, "IBM525SetMode: - Entry\n"));
|
||
|
||
//
|
||
// Set the pixel read mask.
|
||
//
|
||
|
||
P9_WR_BYTE_REG(P9100_PIXELMASK, 0xff);
|
||
|
||
//
|
||
// Select the fast DAC slew rate for the sharpest pixels
|
||
//
|
||
|
||
WriteIBM525(HwDeviceExtension, RGB525_DAC_OPER, 0x02);
|
||
|
||
//
|
||
// Enable the 64-bit VRAM pixel port
|
||
//
|
||
|
||
WriteIBM525(HwDeviceExtension, RGB525_MISC_CTL1, 0x01);
|
||
|
||
//
|
||
// The Dac.bRamdacUsePLL flag determines whether or not
|
||
// we use the RAMDAC's internal PLL.
|
||
//
|
||
|
||
VideoDebugPrint((3, "IBM525SetMode: bRamdacUsePLL = %d\n",
|
||
HwDeviceExtension->Dac.bRamdacUsePLL));
|
||
if (!HwDeviceExtension->Dac.bRamdacUsePLL)
|
||
{
|
||
//
|
||
// Use the external clock instead of the RAMDAC PLL
|
||
// Useful for debugging if you can't get the RAMDAC
|
||
// PLL on your board to lock for whatever reason.
|
||
//
|
||
WriteIBM525(HwDeviceExtension, RGB525_MISC_CTL2, 0x85);
|
||
}
|
||
else
|
||
{
|
||
//
|
||
// Internal PLL output used for pixel clock 8-bit DACs
|
||
// VRAM pixel port inputs.
|
||
//
|
||
WriteIBM525(HwDeviceExtension, RGB525_MISC_CTL2, 0x45);
|
||
}
|
||
|
||
VideoDebugPrint((3, "IBM525SetMode: bRamdacDivides = %d\n",
|
||
HwDeviceExtension->Dac.bRamdacDivides));
|
||
|
||
switch(HwDeviceExtension->usBitsPixel)
|
||
{
|
||
case 32:
|
||
//
|
||
// Select 32bpp (bypass palette)
|
||
//
|
||
//
|
||
// If Dac.bRamdacDivides == TRUE then we set up the RAMDAC
|
||
// so that we can use the ddotclk output instead of SCLK if
|
||
// necessary, by setting up the ddotclk divisor.
|
||
// Otherwise we have the RAMDAC send out the pixel clock.
|
||
//
|
||
if (HwDeviceExtension->Dac.bRamdacDivides)
|
||
WriteIBM525(HwDeviceExtension, RGB525_MISC_CLOCK_CTL, 0x23);
|
||
else
|
||
WriteIBM525(HwDeviceExtension, RGB525_MISC_CLOCK_CTL, 0x21);
|
||
|
||
WriteIBM525(HwDeviceExtension, RGB525_PIXEL_FORMAT, 0x06);
|
||
WriteIBM525(HwDeviceExtension, RGB525_32BPP_CTL, 0x03);
|
||
break;
|
||
|
||
case 24:
|
||
//
|
||
// 24BPP packed
|
||
//
|
||
//
|
||
// This first line doesn't matter too much because SCLK
|
||
// will be sent out both the SCLK and DDOTCLK outputs in
|
||
// 24bpp mode
|
||
//
|
||
WriteIBM525(HwDeviceExtension, RGB525_MISC_CLOCK_CTL, 0x27);
|
||
WriteIBM525(HwDeviceExtension, RGB525_PIXEL_FORMAT, 0x05);
|
||
WriteIBM525(HwDeviceExtension, RGB525_24BPP_CTL, 0x01);
|
||
break;
|
||
|
||
case 16:
|
||
//
|
||
// Note: 16-bpp is really 15-bpp (555)
|
||
// Select 15bpp (bypass palette)
|
||
//
|
||
if (HwDeviceExtension->Dac.bRamdacDivides)
|
||
WriteIBM525(HwDeviceExtension, RGB525_MISC_CLOCK_CTL, 0x25);
|
||
else
|
||
WriteIBM525(HwDeviceExtension, RGB525_MISC_CLOCK_CTL, 0x21);
|
||
WriteIBM525(HwDeviceExtension, RGB525_PIXEL_FORMAT, 0x04);
|
||
WriteIBM525(HwDeviceExtension, RGB525_16BPP_CTL, 0xc4);
|
||
break;
|
||
|
||
case 15:
|
||
//
|
||
// This is really 16-bpp (565).
|
||
// Select 16bpp (bypass palette)
|
||
//
|
||
if (HwDeviceExtension->Dac.bRamdacDivides)
|
||
WriteIBM525(HwDeviceExtension, RGB525_MISC_CLOCK_CTL, 0x25);
|
||
else
|
||
WriteIBM525(HwDeviceExtension, RGB525_MISC_CLOCK_CTL, 0x21);
|
||
WriteIBM525(HwDeviceExtension, RGB525_PIXEL_FORMAT, 0x04);
|
||
WriteIBM525(HwDeviceExtension, RGB525_16BPP_CTL, 0xc6);
|
||
break;
|
||
|
||
case 8:
|
||
//
|
||
// Select 8bpp
|
||
//
|
||
if (HwDeviceExtension->Dac.bRamdacDivides)
|
||
WriteIBM525(HwDeviceExtension, RGB525_MISC_CLOCK_CTL, 0x27);
|
||
else
|
||
WriteIBM525(HwDeviceExtension, RGB525_MISC_CLOCK_CTL, 0x21);
|
||
WriteIBM525(HwDeviceExtension, RGB525_PIXEL_FORMAT, 0x03);
|
||
WriteIBM525(HwDeviceExtension, RGB525_8BPP_CTL, 0x00);
|
||
break;
|
||
};
|
||
|
||
VideoDebugPrint((2, "IBM525SetMode: - Exit\n"));
|
||
|
||
return(TRUE);
|
||
}
|
||
|
||
|
||
|
||
VOID
|
||
IBM525RestoreMode(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension
|
||
)
|
||
|
||
/*++
|
||
|
||
routine description:
|
||
|
||
Restore the DAC to its pristine state. For the P9100, the disable
|
||
video function will reset the DAC via a call to INT10 for VGA mode
|
||
3. Since the Video BIOS cannot switch to protected mode, and therefore
|
||
cannot enter P9100 native mode, it cannot completely initialize the
|
||
IBMRGB525 DAC, so we will do the initialization here.
|
||
|
||
arguments:
|
||
|
||
hwdeviceextension - pointer to the miniport driver's device extension.
|
||
|
||
return value:
|
||
|
||
--*/
|
||
|
||
{
|
||
VideoDebugPrint((3, "IBM525RestoreMode: ----------\n"));
|
||
|
||
//
|
||
// Check if there is an override value for the PLL Reference Divider.
|
||
//
|
||
if (HwDeviceExtension->VideoData.ul525RefClkCnt != 0xFFFFFFFF)
|
||
{
|
||
//
|
||
// Program REFCLK to the specified override...
|
||
//
|
||
WriteIBM525(HwDeviceExtension,
|
||
RGB525_FIXED_PLL_REF_DIV,
|
||
(UCHAR) HwDeviceExtension->VideoData.ul525RefClkCnt);
|
||
|
||
}
|
||
else
|
||
{
|
||
//
|
||
// Program REFCLK to a fixed 50MHz.
|
||
//
|
||
WriteIBM525(HwDeviceExtension, RGB525_FIXED_PLL_REF_DIV,
|
||
IBM525_PLLD_50MHZ);
|
||
}
|
||
|
||
//
|
||
// REFCLK Input, External
|
||
//
|
||
WriteIBM525(HwDeviceExtension, RGB525_PLL_CTL1, 0x00);
|
||
|
||
//
|
||
// Set F0 to 25.25 Mhz
|
||
//
|
||
WriteIBM525(HwDeviceExtension, RGB525_F0, 0x24);
|
||
|
||
//
|
||
// Set F1 to 28.25 Mhz
|
||
//
|
||
WriteIBM525(HwDeviceExtension, RGB525_F1, 0x30);
|
||
|
||
//
|
||
// PLL Enable
|
||
//
|
||
WriteIBM525(HwDeviceExtension, RGB525_MISC_CLOCK_CTL, 0x01);
|
||
|
||
//
|
||
// Cursor OFF
|
||
//
|
||
WriteIBM525(HwDeviceExtension, RGB525_CURSOR_CTL, 0x00);
|
||
|
||
WriteIBM525(HwDeviceExtension, RGB525_VRAM_MASK_LOW, 0x03);
|
||
WriteIBM525(HwDeviceExtension, RGB525_MISC_CTL1, 0x40);
|
||
WriteIBM525(HwDeviceExtension, RGB525_PIXEL_FORMAT, 0x03);
|
||
WriteIBM525(HwDeviceExtension, RGB525_MISC_CTL2, 0x41);
|
||
WriteIBM525(HwDeviceExtension, RGB525_MISC_CTL2, 0x00);
|
||
WriteIBM525(HwDeviceExtension, RGB525_MISC_CTL1, 0x00);
|
||
WriteIBM525(HwDeviceExtension, RGB525_VRAM_MASK_LOW, 0x00);
|
||
return;
|
||
|
||
}
|
||
|
||
|
||
VOID
|
||
IBM525SetClkDoubler(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension
|
||
)
|
||
{
|
||
return; // Nothing to do... just return.
|
||
}
|
||
|
||
|
||
VOID
|
||
IBM525ClrClkDoubler(
|
||
PHW_DEVICE_EXTENSION HwDeviceExtension
|
||
)
|
||
{
|
||
return; // Nothing to do... just return.
|
||
}
|