summaryrefslogtreecommitdiffstats
path: root/private/ntos/fw/mips/jzvxl484.c
diff options
context:
space:
mode:
authorAdam <you@example.com>2020-05-17 05:51:50 +0200
committerAdam <you@example.com>2020-05-17 05:51:50 +0200
commite611b132f9b8abe35b362e5870b74bce94a1e58e (patch)
treea5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/ntos/fw/mips/jzvxl484.c
downloadNT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst
NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip
Diffstat (limited to 'private/ntos/fw/mips/jzvxl484.c')
-rw-r--r--private/ntos/fw/mips/jzvxl484.c724
1 files changed, 724 insertions, 0 deletions
diff --git a/private/ntos/fw/mips/jzvxl484.c b/private/ntos/fw/mips/jzvxl484.c
new file mode 100644
index 000000000..a39f520b6
--- /dev/null
+++ b/private/ntos/fw/mips/jzvxl484.c
@@ -0,0 +1,724 @@
+#if defined(JAZZ)
+
+/*++
+
+Copyright (c) 1989 Microsoft Corporation
+
+Module Name:
+
+ jzvxl484.c
+
+cAbstract:
+
+ This module implements the video prom code for the Jazz VXL BT484
+
+Author:
+
+ Lluis Abello (lluis) 28-May-1992
+
+Environment:
+
+ Kernel mode.
+
+
+Revision History:
+
+--*/
+
+#include "fwp.h"
+#include "jzvxl484.h"
+#include "jxvideo.h"
+#include "jaginit.h"
+
+#define KeFlushWriteBuffer()
+
+ARC_STATUS
+InitializeBt484(
+ IN PVIDEO_VIRTUAL_SPACE VirtualAdr
+ );
+
+VOID
+FillVideoMemory(
+ IN ULONG StartAddress,
+ IN ULONG Size,
+ IN ULONG Pattern
+ );
+
+ULONG
+CheckVideoMemoryAddressTest(
+ IN ULONG StartAddress,
+ IN ULONG Size
+ );
+
+VOID
+WriteVideoMemoryAddressTest(
+ IN ULONG StartAddress,
+ IN ULONG Size
+ );
+
+
+//
+// Define colors, HI = High Intensity
+//
+
+#define BT484_PALETTE_BLACK_R 0x00
+#define BT484_PALETTE_BLACK_G 0x00
+#define BT484_PALETTE_BLACK_B 0x00
+
+#define BT484_PALETTE_RED_R 0xB0
+#define BT484_PALETTE_RED_G 0x00
+#define BT484_PALETTE_RED_B 0x00
+
+#define BT484_PALETTE_GREEN_R 0x00
+#define BT484_PALETTE_GREEN_B 0xB0
+#define BT484_PALETTE_GREEN_G 0x00
+
+#define BT484_PALETTE_YELLOW_R 0xB0
+#define BT484_PALETTE_YELLOW_G 0xB0
+#define BT484_PALETTE_YELLOW_B 0x00
+
+#define BT484_PALETTE_BLUE_R 0x00
+#define BT484_PALETTE_BLUE_G 0x00
+#define BT484_PALETTE_BLUE_B 0xB0
+
+#define BT484_PALETTE_MAGENTA_R 0xB0
+#define BT484_PALETTE_MAGENTA_G 0x00
+#define BT484_PALETTE_MAGENTA_B 0xB0
+
+#define BT484_PALETTE_CYAN_R 0x00
+#define BT484_PALETTE_CYAN_G 0xB0
+#define BT484_PALETTE_CYAN_B 0xB0
+
+#define BT484_PALETTE_WHITE_R 0xB0
+#define BT484_PALETTE_WHITE_G 0xB0
+#define BT484_PALETTE_WHITE_B 0xB0
+
+#define BT484_PALETTE_HI_BLACK_R 0x00
+#define BT484_PALETTE_HI_BLACK_G 0x00
+#define BT484_PALETTE_HI_BLACK_B 0x00
+
+#define BT484_PALETTE_HI_RED_R 0xFF
+#define BT484_PALETTE_HI_RED_G 0x00
+#define BT484_PALETTE_HI_RED_B 0x00
+
+#define BT484_PALETTE_HI_GREEN_R 0x00
+#define BT484_PALETTE_HI_GREEN_G 0xFF
+#define BT484_PALETTE_HI_GREEN_B 0x00
+
+#define BT484_PALETTE_HI_YELLOW_R 0xFF
+#define BT484_PALETTE_HI_YELLOW_G 0xFF
+#define BT484_PALETTE_HI_YELLOW_B 0x00
+
+#define BT484_PALETTE_HI_BLUE_R 0x00
+#define BT484_PALETTE_HI_BLUE_G 0x00
+#define BT484_PALETTE_HI_BLUE_B 0xFF
+
+#define BT484_PALETTE_HI_MAGENTA_R 0xFF
+#define BT484_PALETTE_HI_MAGENTA_G 0x00
+#define BT484_PALETTE_HI_MAGENTA_B 0xFF
+
+#define BT484_PALETTE_HI_CYAN_R 0x00
+#define BT484_PALETTE_HI_CYAN_G 0xFF
+#define BT484_PALETTE_HI_CYAN_B 0xFF
+
+#define BT484_PALETTE_HI_WHITE_R 0xFF
+#define BT484_PALETTE_HI_WHITE_G 0xFF
+#define BT484_PALETTE_HI_WHITE_B 0xFF
+
+
+UCHAR ColorTable[16*3]={
+ BT484_PALETTE_BLACK_R,
+ BT484_PALETTE_BLACK_G,
+ BT484_PALETTE_BLACK_B,
+ BT484_PALETTE_RED_R,
+ BT484_PALETTE_RED_G,
+ BT484_PALETTE_RED_B,
+ BT484_PALETTE_GREEN_R,
+ BT484_PALETTE_GREEN_B,
+ BT484_PALETTE_GREEN_G,
+ BT484_PALETTE_YELLOW_R,
+ BT484_PALETTE_YELLOW_G,
+ BT484_PALETTE_YELLOW_B,
+ BT484_PALETTE_BLUE_R,
+ BT484_PALETTE_BLUE_G,
+ BT484_PALETTE_BLUE_B,
+ BT484_PALETTE_MAGENTA_R,
+ BT484_PALETTE_MAGENTA_G,
+ BT484_PALETTE_MAGENTA_B,
+ BT484_PALETTE_CYAN_R,
+ BT484_PALETTE_CYAN_G,
+ BT484_PALETTE_CYAN_B,
+ BT484_PALETTE_WHITE_R,
+ BT484_PALETTE_WHITE_G,
+ BT484_PALETTE_WHITE_B,
+ BT484_PALETTE_HI_BLACK_R,
+ BT484_PALETTE_HI_BLACK_G,
+ BT484_PALETTE_HI_BLACK_B,
+ BT484_PALETTE_HI_RED_R,
+ BT484_PALETTE_HI_RED_G,
+ BT484_PALETTE_HI_RED_B,
+ BT484_PALETTE_HI_GREEN_R,
+ BT484_PALETTE_HI_GREEN_G,
+ BT484_PALETTE_HI_GREEN_B,
+ BT484_PALETTE_HI_YELLOW_R,
+ BT484_PALETTE_HI_YELLOW_G,
+ BT484_PALETTE_HI_YELLOW_B,
+ BT484_PALETTE_HI_BLUE_R,
+ BT484_PALETTE_HI_BLUE_G,
+ BT484_PALETTE_HI_BLUE_B,
+ BT484_PALETTE_HI_MAGENTA_R,
+ BT484_PALETTE_HI_MAGENTA_G,
+ BT484_PALETTE_HI_MAGENTA_B,
+ BT484_PALETTE_HI_CYAN_R,
+ BT484_PALETTE_HI_CYAN_G,
+ BT484_PALETTE_HI_CYAN_B,
+ BT484_PALETTE_HI_WHITE_R,
+ BT484_PALETTE_HI_WHITE_G,
+ BT484_PALETTE_HI_WHITE_B
+ };
+
+//
+// Define colors, HI = High Intensity
+//
+
+#define FW_COLOR_BLACK 0x00
+#define FW_COLOR_RED 0x01
+#define FW_COLOR_GREEN 0x02
+#define FW_COLOR_YELLOW 0x03
+#define FW_COLOR_BLUE 0x04
+#define FW_COLOR_MAGENTA 0x05
+#define FW_COLOR_CYAN 0x06
+#define FW_COLOR_WHITE 0x07
+#define FW_COLOR_HI_BLACK 0x08
+#define FW_COLOR_HI_RED 0x09
+#define FW_COLOR_HI_GREEN 0x0A
+#define FW_COLOR_HI_YELLOW 0x0B
+#define FW_COLOR_HI_BLUE 0x0C
+#define FW_COLOR_HI_MAGENTA 0x0D
+#define FW_COLOR_HI_CYAN 0x0E
+#define FW_COLOR_HI_WHITE 0x0F
+
+
+ARC_STATUS
+InitializeVXL (
+ IN PVIDEO_VIRTUAL_SPACE VirtualAdr,
+ IN PMONITOR_CONFIGURATION_DATA Monitor
+ )
+
+/*++
+
+Routine Description:
+
+ This routine initializes the JazzVxl Graphics accelerator.
+
+Arguments:
+
+ Monitor - Monitor configuration data.
+ VirtualAdr - Pointer to a pair of virtual addresses for video&Control spaces.
+
+Return Value:
+
+ If the video was initialized, ESUCCESS is returned, otherwise an error
+ code is returned.
+
+--*/
+
+{
+ ULONG Index;
+ PJAGUAR_REGISTERS Jaguar = (PJAGUAR_REGISTERS)(VirtualAdr->ControlVirtualBase + VXL_JAGUAR_BASE_OFFSET);
+ PBT484_REGISTERS Bt484 = (PBT484_REGISTERS)(VirtualAdr->ControlVirtualBase + VXL_BT484_BASE_OFFSET);
+ PUCHAR Clock = (PUCHAR)(VirtualAdr->ControlVirtualBase + VXL_CLOCK_BASE_OFFSET);
+ UCHAR DataChar;
+ UCHAR CmdReg0;
+ ULONG VideoMemory = VirtualAdr->MemoryVirtualBase;
+ JAGUAR_REG_INIT JagInitData;
+ ULONG Status;
+
+
+
+ //
+ // Define clock value for the ICS part (pS)
+ //
+
+ ULONG ClockResList[32] = { 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4,42918,40984,38760,36724,33523,31017,
+ 29197,27548,24882,23491,22482,21468,20509,19920,
+ 18692,18054,16722,15015,14773,14053,13040, 4};
+
+ //
+ // Define a default jaguar init and monitor config for
+ // use when a BOGUS init value is sent.
+ //
+
+ JAGUAR_REG_INIT JagDefaultData = {
+ 0xc, // Clock Selector
+ 0, // Bt485 clock 2x multiply
+ 1, // BitBlt Control
+ 0, // TopOfScreen
+ 41, // Horizontal Blank
+ 4, // Horizontal Begin Sync
+ 29, // Horizontal End Sync
+ 201, // Horizontal Total
+ 45, // Vertical Blank
+ 11, // Vertical Begin Sync
+ 13, // Vertical End Sync
+ 525, // Vertical Total
+ 0x200, // XFER LENGTH
+ 4, // Vertival Interrupt Line
+ 640 // Screen X
+ };
+
+
+ MONITOR_CONFIGURATION_DATA DefaultMonitor = {
+ 0, // version :do not change
+ 0, // revision :do not change
+ 640, // HorizontalResolution
+ 25422, // HorizontalDisplayTime
+ 636, // HorizontalBackPorch
+ 1907, // HorizontalFrontPorch
+ 3813, // HorizontalSync
+ 480, // VerticalResolution
+ 33, // VerticalBackPorch
+ 10, // VerticalFrontPorch
+ 2, // VerticalSync
+ 0, // HorizontalScreenSize : do not change
+ 0 // VerticalScreenSize : do not change
+ };
+
+
+ LONG HorDisplayTime;
+ LONG HorResolutionDiv;
+ LONG ReqClockPeriod;
+ LONG CurrentClockError;
+ LONG MinErrorValue;
+ USHORT MinErrorIndex;
+ LONG ShiftClockPeriod;
+
+ USHORT BoardTypeBt485;
+
+
+ //
+ // Test the first bank of video memory
+ //
+
+ WriteVideoMemoryAddressTest(VideoMemory,
+ 0x200000
+ );
+
+ Status = CheckVideoMemoryAddressTest(VideoMemory,
+ 0x200000
+ );
+
+ if (Status != 0) {
+ return EINVAL;
+ }
+
+ //
+ // Determine if this is a Bt484 or Bt485 board. To do this write a 1 to command
+ // register bit 07 then write 01 to the address register 0. This will enable
+ // read/writes to command register 3 on a Bt485 but not on a Bt484. Clear
+ // Command register 3 then read it back. On a Bt485 the return value will be 0x00,
+ // on a Bt484 it will be 0x40.
+ //
+
+
+ //
+ // Get the value in command register 0, then set bit 07
+ //
+
+ DataChar = READ_REGISTER_UCHAR(&Bt484->Command0.Byte);
+ DataChar |= 0x80;
+ WRITE_REGISTER_UCHAR(&Bt484->Command0.Byte,DataChar);
+
+ //
+ // Write 0x01 to the address register
+ //
+
+ WRITE_REGISTER_UCHAR(&Bt484->PaletteCursorWrAddress.Byte,0x01);
+
+ //
+ // Clear command register 3
+ //
+
+ WRITE_REGISTER_UCHAR(&Bt484->Status.Byte,0x00);
+
+ //
+ // Read Command Register 3 back and compare
+ //
+
+ DataChar = READ_REGISTER_UCHAR(&Bt484->Status.Byte);
+
+ if (DataChar != 0x00) {
+
+ //
+ // This is a Bt484
+ //
+
+ BoardTypeBt485 = 0;
+ JagInitData.Bt485Multiply = 0;
+
+ } else {
+
+ //
+ // This is a Bt485
+ //
+
+ BoardTypeBt485 = 1;
+ JagInitData.Bt485Multiply = 0;
+ }
+
+ //
+ // Calculate the requested clock frequency then find the closest match in the
+ // ICS clock frequency table. The requested clock frequency in picoseconds =
+ //
+ // Horizontal display time * 1000
+ // ------------------------------
+ // horizontal resolution
+ //
+ //
+
+ HorDisplayTime = Monitor->HorizontalDisplayTime * 1000;
+ HorResolutionDiv = Monitor->HorizontalResolution;
+
+ ReqClockPeriod = HorDisplayTime / HorResolutionDiv;
+
+ //
+ // Check for a configuration needing a Bt485 and a board that is a 484. In
+ // This case we will have to resort to a default 640 x 480 config
+ //
+
+ if ((BoardTypeBt485 == 0) & (ReqClockPeriod < ClockResList[30])) {
+
+ //
+ // We were told to display a mode that we don't support, set
+ // the output to the default mode and also return the monitor
+ // info to a default mode which will later be stored into
+ // NVRAM so that the HAL will init ok and also the next ROM init
+ // will be correct.
+ //
+
+ JagInitData = JagDefaultData;
+
+ Monitor->HorizontalResolution = DefaultMonitor.HorizontalResolution;
+ Monitor->HorizontalDisplayTime = DefaultMonitor.HorizontalDisplayTime;
+ Monitor->HorizontalBackPorch = DefaultMonitor.HorizontalBackPorch;
+ Monitor->HorizontalFrontPorch = DefaultMonitor.HorizontalFrontPorch;
+ Monitor->HorizontalSync = DefaultMonitor.HorizontalSync;
+ Monitor->VerticalResolution = DefaultMonitor.VerticalResolution;
+ Monitor->VerticalBackPorch = DefaultMonitor.VerticalBackPorch;
+ Monitor->VerticalFrontPorch = DefaultMonitor.VerticalFrontPorch;
+ Monitor->VerticalSync = DefaultMonitor.VerticalSync;
+
+ } else {
+
+ //
+ // Check for a Bt485 frequency
+ //
+
+ if ((BoardTypeBt485 == 1) & (ReqClockPeriod < ClockResList[30])) {
+ ReqClockPeriod = ReqClockPeriod * 2;
+ JagInitData.Bt485Multiply = 1;
+ }
+
+
+
+ MinErrorIndex = 0;
+
+ //
+ // Gaurentee a maximum starting error
+ //
+
+ MinErrorValue = ReqClockPeriod + 1;
+
+ for (Index=0;Index<32;Index++) {
+
+ //
+ // Calculate the absolute value of clock error and find the
+ // closest match in the array of clock values
+ //
+
+ CurrentClockError = ReqClockPeriod - ClockResList[Index];
+ if (CurrentClockError < 0) {
+ CurrentClockError *= -1;
+ }
+
+ if (CurrentClockError < MinErrorValue) {
+ MinErrorValue = CurrentClockError;
+ MinErrorIndex = Index;
+ }
+ }
+
+ //
+ // We now have a closest match in the clock array, now calculate the
+ // values for the Bt484/Bt485 register values
+ //
+
+ JagInitData.ClockFreq = MinErrorIndex;
+ JagInitData.BitBltControl = 1;
+ JagInitData.TopOfScreen = 0;
+ JagInitData.XferLength = 0x200;
+ JagInitData.VerticalInterruptLine = 4;
+ JagInitData.HorizontalDisplay = Monitor->HorizontalResolution;
+
+
+ //
+ // All jaguar timing values are based on the brooktree shift clock value which
+ // is the clock frequency divided by 4. (period * 4) If this is a Bt485 using
+ // its internal 2x clock multiplier than is is period * 2; (freq * 2 / 4)
+ //
+
+
+ if (JagInitData.Bt485Multiply == 1) {
+ ShiftClockPeriod = ClockResList[MinErrorIndex] * 2;
+ } else {
+ ShiftClockPeriod = ClockResList[MinErrorIndex] * 4;
+ }
+
+
+ JagInitData.HorizontalBlank = ((Monitor->HorizontalBackPorch +
+ Monitor->HorizontalSync +
+ Monitor->HorizontalFrontPorch) * 1000)
+ / ShiftClockPeriod;
+
+ JagInitData.HorizontalBeginSync = (Monitor->HorizontalFrontPorch * 1000)
+ / ShiftClockPeriod;
+
+ JagInitData.HorizontalEndSync = ((Monitor->HorizontalSync +
+ Monitor->HorizontalFrontPorch) * 1000)
+ / ShiftClockPeriod;
+
+ JagInitData.HorizontalLine = JagInitData.HorizontalBlank +
+ (Monitor->HorizontalResolution / 4);
+
+
+ JagInitData.VerticalBlank = Monitor->VerticalBackPorch +
+ Monitor->VerticalSync +
+ Monitor->VerticalFrontPorch;
+
+
+ JagInitData.VerticalBeginSync = Monitor->VerticalFrontPorch;
+
+ JagInitData.VerticalEndSync = Monitor->VerticalFrontPorch +
+ Monitor->VerticalSync;
+
+ JagInitData.VerticalLine = Monitor->VerticalBackPorch +
+ Monitor->VerticalSync +
+ Monitor->VerticalFrontPorch +
+ Monitor->VerticalResolution;
+
+ }
+
+ //
+ // Start ICS Clock pll and stabilize.
+ //
+
+ WRITE_REGISTER_UCHAR(Clock,JagInitData.ClockFreq);
+
+ //
+ // Wait 10 uS for PLL clock to stabilize on the video board
+ //
+ for (Index=0;Index<10;Index++) {
+ READ_REGISTER_UCHAR(Clock);
+ }
+
+ //
+ // Initialize Bt484 Command Register 0 to:
+ //
+ // 8 Bit DAC Resolution
+ //
+
+ CmdReg0 = 0;
+ ((PBT484_COMMAND0)(&CmdReg0))->DacResolution = 1;
+ ((PBT484_COMMAND0)(&CmdReg0))->GreenSyncEnable = 1;
+ ((PBT484_COMMAND0)(&CmdReg0))->SetupEnable = 1;
+ WRITE_REGISTER_UCHAR(&Bt484->Command0.Byte,CmdReg0);
+
+ //
+ // Initialize Command Register 1 to:
+ //
+
+ DataChar = 0;
+
+ ((PBT484_COMMAND1)(&DataChar))->BitsPerPixel = VXL_EIGHT_BITS_PER_PIXEL;
+
+
+ WRITE_REGISTER_UCHAR(&Bt484->Command1.Byte,DataChar);
+
+ //
+ // Initialize Command Register 2 to:
+ //
+ // SCLK Enabled
+ // TestMode disabled
+ // PortselMask Non Masked
+ // PCLK 1
+ // NonInterlaced
+ //
+
+ DataChar = 0;
+ ((PBT484_COMMAND2)(&DataChar))->SclkDisable = 0;
+ ((PBT484_COMMAND2)(&DataChar))->TestEnable = 0;
+ ((PBT484_COMMAND2)(&DataChar))->PortselMask = 1;
+ ((PBT484_COMMAND2)(&DataChar))->PclkSelect = 1;
+ ((PBT484_COMMAND2)(&DataChar))->InterlacedDisplay = 0;
+ ((PBT484_COMMAND2)(&DataChar))->PaletteIndexing = CONTIGUOUS_PALETTE;
+ ((PBT484_COMMAND2)(&DataChar))->CursorMode = BT_CURSOR_WINDOWS;
+
+
+ WRITE_REGISTER_UCHAR(&Bt484->Command2.Byte,DataChar);
+
+ //
+ // if JagInitData.ClockFreq bit 8 is set then this is a Bt485 mode that requires
+ // the internal 2x clock multiplier to be enabled.
+ //
+
+ if (JagInitData.Bt485Multiply == 1) {
+
+ //
+ // To access cmd register 3, first set bit CR17 in command register 0
+ //
+
+ CmdReg0 |= 0x80;
+ WRITE_REGISTER_UCHAR(&Bt484->Command0.Byte,CmdReg0);
+
+ //
+ // Write a 0x01 to Address register
+ //
+
+ WRITE_REGISTER_UCHAR(&Bt484->PaletteCursorWrAddress.Byte,0x01);
+
+ //
+ // Write to cmd register 3 in the status register location. Cmd3 is initialized
+ // to turn on the 2x clock multiplier.
+ //
+
+ DataChar = 0;
+ ((PBT484_COMMAND3)(&DataChar))->ClockMultiplier = 1;
+
+ WRITE_REGISTER_UCHAR(&Bt484->Status.Byte,DataChar);
+
+ //
+ // Allow 10 uS for the 2x multiplier to stabilize
+ //
+
+ for (Index=0;Index<10;Index++) {
+ READ_REGISTER_UCHAR(Clock);
+ }
+ }
+
+
+
+
+ //
+ // Initialize Color Palette.
+ //
+ // Set address pointer to base of color palette.
+ // Initialize first 16 entries from color table.
+ // Zero remaining entries.
+ //
+
+ WRITE_REGISTER_UCHAR(&Bt484->PaletteCursorWrAddress.Byte,0);
+
+ for (Index=0;Index<16*3;Index++) {
+ WRITE_REGISTER_UCHAR(&Bt484->PaletteColor.Byte,ColorTable[Index]);
+ }
+
+ for (;Index<256*3;Index++) {
+ WRITE_REGISTER_UCHAR(&Bt484->PaletteColor.Byte,0);
+ }
+
+ //
+ // Initialize Cursor and Overscan color.
+ //
+ // Set address pointer base.
+ // Zero 4 entries.
+ //
+
+ WRITE_REGISTER_UCHAR(&Bt484->CursorColorWrAddress.Byte,0);
+
+ for (Index=0;Index<4*3;Index++) {
+ WRITE_REGISTER_UCHAR(&Bt484->CursorColor.Byte,0);
+ }
+
+ //
+ // Initialize cursor RAM
+ //
+ // Set address pointer to base of ram.
+ // Clear both planes
+ //
+
+ WRITE_REGISTER_UCHAR(&Bt484->PaletteCursorWrAddress.Byte,0);
+
+ for (Index=0;Index<256;Index++) {
+ WRITE_REGISTER_UCHAR(&Bt484->CursorRam.Byte,0);
+ }
+
+
+ //
+ // Initialize cursor position registers--cursor off.
+ //
+
+ WRITE_REGISTER_UCHAR(&Bt484->CursorXLow.Byte,0);
+ WRITE_REGISTER_UCHAR(&Bt484->CursorXHigh.Byte,0);
+ WRITE_REGISTER_UCHAR(&Bt484->CursorYLow.Byte,0);
+ WRITE_REGISTER_UCHAR(&Bt484->CursorYHigh.Byte,0);
+
+ //
+ // Initialize pixel mask.
+ //
+
+ WRITE_REGISTER_UCHAR(&Bt484->PixelMask.Byte,0xFF);
+
+ //
+ // Init Jaguar Registers
+ //
+
+ WRITE_REGISTER_USHORT(&Jaguar->TopOfScreen.Short,
+ JagInitData.TopOfScreen);
+
+ WRITE_REGISTER_USHORT(&Jaguar->HorizontalBlank.Short,
+ JagInitData.HorizontalBlank);
+
+ WRITE_REGISTER_USHORT(&Jaguar->HorizontalBeginSync.Short,
+ JagInitData.HorizontalBeginSync);
+
+ WRITE_REGISTER_USHORT(&Jaguar->HorizontalEndSync.Short,
+ JagInitData.HorizontalEndSync);
+
+ WRITE_REGISTER_USHORT(&Jaguar->HorizontalLine.Short,
+ JagInitData.HorizontalLine);
+
+ WRITE_REGISTER_USHORT(&Jaguar->VerticalBlank.Short,
+ JagInitData.VerticalBlank);
+
+ WRITE_REGISTER_USHORT(&Jaguar->VerticalBeginSync.Short,
+ JagInitData.VerticalBeginSync);
+
+ WRITE_REGISTER_USHORT(&Jaguar->VerticalEndSync.Short,
+ JagInitData.VerticalEndSync);
+
+ WRITE_REGISTER_USHORT(&Jaguar->VerticalLine.Short,
+ JagInitData.VerticalLine);
+
+ WRITE_REGISTER_USHORT(&Jaguar->XferLength.Short,
+ JagInitData.XferLength);
+
+ WRITE_REGISTER_USHORT(&Jaguar->VerticalInterruptLine.Short,
+ JagInitData.VerticalInterruptLine);
+
+ WRITE_REGISTER_USHORT(&Jaguar->HorizontalDisplay.Short,
+ JagInitData.HorizontalDisplay);
+
+ WRITE_REGISTER_UCHAR(&Jaguar->BitBltControl.Byte,
+ JagInitData.BitBltControl);
+
+ //
+ // Enable timing.
+ //
+
+ WRITE_REGISTER_UCHAR(&Jaguar->MonitorControl,MONITOR_TIMING_ENABLE);
+
+ return ESUCCESS;
+
+}
+
+#endif