Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

364 lines
10 KiB

/*++ BUILD Version: 0001 // Increment this if a change has global effects
Copyright (c) 1991-1993 Microsoft Corporation
Module Name:
jazzvdeo.h
Abstract:
This header file defines the Jazz display controller registers.
It currently has support for both the G300 and G364 video cards.
Revision History:
--*/
//
// Define value of video id register for different video boards.
//
#define VIDEO_G300 0 // original g300 video board
#define VIDEO_G364 1 // id value for g364 video board.
#define VIDEO_BT_I860 2 // brooktree board with i860.
//
// Define video controller parameters.
//
#define DISPLAY_BITS_PER_PIXEL 8 // display bits per pixel
#define NUMBER_OF_COLORS 256 // number of colors
#define CURSOR_WIDTH 64 // width of hardware cursor
#define CURSOR_HEIGHT 64 // height of hardware cursor
#define CURSOR_BITS_PER_PIXEL 2 // hardware cursor bits per pixel
#define CURSOR_MAXIMUM \
((CURSOR_WIDTH * CURSOR_HEIGHT * \
CURSOR_BITS_PER_PIXEL) / (sizeof(USHORT) * 8)) // max hardware cursor pixels
//
// G300B Video Controller Definitions.
//
// Define video register format.
//
typedef struct _VIDEO_REGISTER {
ULONG Long;
ULONG Fill[1];
} VIDEO_REGISTER, *PVIDEO_REGISTER;
//
// Define video control registers structure.
//
typedef struct _G300_VIDEO_REGISTERS {
VIDEO_REGISTER ColorMapData[256];
VIDEO_REGISTER Fill1[33];
VIDEO_REGISTER HorizonalSync;
VIDEO_REGISTER BackPorch;
VIDEO_REGISTER Display;
VIDEO_REGISTER ShortDisplay;
VIDEO_REGISTER BroadPulse;
VIDEO_REGISTER VerticalSync;
VIDEO_REGISTER VerticalBlank;
VIDEO_REGISTER VerticalDisplay;
VIDEO_REGISTER LineTime;
VIDEO_REGISTER LineStart;
VIDEO_REGISTER DmaDisplay;
VIDEO_REGISTER TransferDelay;
VIDEO_REGISTER Fill2[19];
VIDEO_REGISTER PixelMask;
VIDEO_REGISTER Fill3[31];
VIDEO_REGISTER Parameters;
VIDEO_REGISTER Fill4[31];
VIDEO_REGISTER TopOfScreen;
VIDEO_REGISTER Fill5[31];
VIDEO_REGISTER Boot;
} G300_VIDEO_REGISTERS, *PG300_VIDEO_REGISTERS;
typedef struct _G364_VIDEO_REGISTERS {
VIDEO_REGISTER Boot;
VIDEO_REGISTER Fill0[0x1F];
VIDEO_REGISTER Fill1;
VIDEO_REGISTER HorizontalSync;
VIDEO_REGISTER BackPorch;
VIDEO_REGISTER Display;
VIDEO_REGISTER ShortDisplay;
VIDEO_REGISTER BroadPulse;
VIDEO_REGISTER VerticalSync;
VIDEO_REGISTER VerticalPreEqualize;
VIDEO_REGISTER VerticalPostEqualize;
VIDEO_REGISTER VerticalBlank;
VIDEO_REGISTER VerticalDisplay;
VIDEO_REGISTER LineTime;
VIDEO_REGISTER LineStart;
VIDEO_REGISTER DmaDisplay;
VIDEO_REGISTER TransferDelay;
VIDEO_REGISTER Fill2;
VIDEO_REGISTER Fill3[0x10];
VIDEO_REGISTER PixelMask;
VIDEO_REGISTER Fill4[0x1F];
VIDEO_REGISTER Parameters;
VIDEO_REGISTER Fill5[0x1F];
VIDEO_REGISTER TopOfScreen;
VIDEO_REGISTER Fill6[0x1F];
VIDEO_REGISTER Fill7;
VIDEO_REGISTER CursorPalette[3];
VIDEO_REGISTER Fill8[0x1C];
VIDEO_REGISTER Fill9[0x7];
VIDEO_REGISTER CursorPosition;
VIDEO_REGISTER Fill10[0x18];
VIDEO_REGISTER Fill11[0x20];
VIDEO_REGISTER ColorMapData[0x100];
VIDEO_REGISTER CursorMemory[0x200];
} G364_VIDEO_REGISTERS, *PG364_VIDEO_REGISTERS;
//
// Define video controller register values.
//
#define LINE_START_VALUE 0 // line start timing
#define G300_PIXEL_MASK_VALUE 0xFF // pixel mask value
#define G364_PIXEL_MASK_VALUE 0xFFFFFF // pixel mask value
#define PREEQUALIZE_VALUE 6 // vertical pre-equilize timing
#define POSTEQUALIZE_VALUE 6 // vertical post-equilize timing
//
// Define video parameter register structure.
//
typedef struct _G300_VIDEO_PARAMETERS {
ULONG EnableVideo : 1;
ULONG Interlace : 1;
ULONG SlaveMode : 1;
ULONG PlainWave : 1;
ULONG SeparateSync : 1;
ULONG VideoOnly : 1;
ULONG Fill1 : 1;
ULONG UcharMode : 1;
ULONG Mode2 : 1;
ULONG DelaySync : 3;
ULONG Black : 1;
ULONG Fill2 : 1;
ULONG DisableDma : 1;
ULONG DisableBlanking : 1;
ULONG BlankOutput : 1;
ULONG BitsPerPixel : 2;
ULONG AddressStep : 2;
ULONG CcirFormat : 1;
ULONG Fill3 : 1;
ULONG DisableDelay : 1;
ULONG Fill4 : 8;
} G300_VIDEO_PARAMETERS, *PG300_VIDEO_PARAMETERS;
typedef struct _G364_VIDEO_PARAMETERS {
ULONG EnableVideo : 1;
ULONG Interlace : 1;
ULONG CcirFormat : 1;
ULONG SlaveMode : 1;
ULONG PlainSync : 1;
ULONG SeparateSync : 1;
ULONG VideoOnly : 1;
ULONG BlankingPedestal : 1;
ULONG CBlankOutput : 1;
ULONG UndelayedCBlank : 1;
ULONG ForceBlanking : 1;
ULONG DisableBlanking : 1;
ULONG AddressStep : 2;
ULONG DisableDma : 1;
ULONG DelaySync : 3;
ULONG Interleaving : 1;
ULONG DelaySampling : 1;
ULONG BitsPerPixel : 3;
ULONG DisableCursor : 1;
ULONG Fill : 8;
} G364_VIDEO_PARAMETERS, *PG364_VIDEO_PARAMETERS;
//
// Define delay synchronization cycles value.
//
#define G300_DELAY_SYNC_CYCLES 1 // cycles to delay sync and blank
#define G364_DELAY_SYNC_CYCLES 0 // cycles to delay sync and blank
//
// Define bits per pixel codes.
//
#define ONE_BIT_PER_PIXEL 0 // 1-bit per pixel
#define TWO_BITS_PER_PIXEL 1 // 2-bits per pixel
#define FOUR_BITS_PER_PIXEL 2 // 4-bits per pixel
#define EIGHT_BITS_PER_PIXEL 3 // 8-bits per pixel
//
// For g364 only
//
#define FIFTEEN_BITS_PER_PIXEL 4 // 15-bits per pixel (RGB = 5,5,5)
#define SIXTEEN_BITS_PER_PIXEL 5 // 16-bits per pixel (RGB = 6,6,4)
//
// Colors for the Pointer
//
#define NUM_G300_POINTER_COLORS 0 // Colors for the pointer are the
// default display colors
#define NUM_G364_POINTER_COLORS 2 // The G364 supports two colors
// (apart from transparent) for the
// pointer
//
// Define address step value.
//
#define G300_ADDRESS_STEP_INCREMENT 1 // vram transfer address increment
#define G364_ADDRESS_STEP_INCREMENT 3 // vram transfer address increment
//
// Define video boot register structure.
//
typedef struct _G300_VIDEO_BOOT {
ULONG Multiplier : 5;
ULONG ClockSelect : 1;
ULONG Fill1 : 26;
} G300_VIDEO_BOOT, *PG300_VIDEO_BOOT;
typedef struct _G364_VIDEO_BOOT {
ULONG Multiplier : 5;
ULONG ClockSelect : 1;
ULONG MicroPort64Bits : 1;
ULONG Fill1 : 25;
} G364_VIDEO_BOOT, *PG364_VIDEO_BOOT;
//
// BT431 Cursor Controller Definitions.
//
// Define cursor register format.
//
typedef struct _CURSOR_REGISTER {
USHORT Short;
USHORT Fill[3];
} CURSOR_REGISTER, *PCURSOR_REGISTER;
//
// Define cursor control registers structure.
//
typedef struct _CURSOR_REGISTERS {
CURSOR_REGISTER AddressPointer0;
CURSOR_REGISTER AddressPointer1;
CURSOR_REGISTER CursorMemory;
CURSOR_REGISTER CursorControl;
} CURSOR_REGISTERS, *PCURSOR_REGISTERS;
//
// Define cursor address register values.
//
#define CURSOR_MEMORY_ADDRESS (0x0 * 0x101) // starting address of cursor memory
#define CURSOR_CONTROL_ADDRESS (0x0 * 0x101) // cursor command register address
#define CURSOR_X_LOW_ADDRESS (0x1 * 0x101) // cursor x low address
#define CURSOR_X_HIGH_ADDRESS (0x2 * 0x101) // cursor x high address
#define CURSOR_Y_LOW_ADDRESS (0x3 * 0x101) // cursor y low address
#define CURSOR_Y_HIGH_ADDRESS (0x4 * 0x101) // cursor y high address
#define WINDOW_X_LOW_ADDRESS (0x5 * 0x101) // window x low address
#define WINDOW_X_HIGH_ADDRESS (0x6 * 0x101) // window x high address
#define WINDOW_Y_LOW_ADDRESS (0x7 * 0x101) // window y low address
#define WINDOW_Y_HIGH_ADDRESS (0x8 * 0x101) // window y high address
#define WINDOW_WIDTH_LOW_ADDRESS (0x9 * 0x101) // window width low address
#define WINDOW_WIDTH_HIGH_ADDRESS (0xa * 0x101) // window width high address
#define WINDOW_HEIGHT_LOW_ADDRESS (0xb * 0x101) // window height low address
#define WINDOW_HEIGHT_HIGH_ADDRESS (0xc * 0x101) // window height high address
//
// Define cursor command register structure.
//
typedef struct _CURSOR_COMMAND {
USHORT CrossHairThickness1 : 2;
USHORT MultiplexControl1 : 2;
USHORT CursorFormat1 : 1;
USHORT CrossHairEnable1 : 1;
USHORT CursorEnable1 : 1;
USHORT Fill1 : 1;
USHORT CrossHairThickness2 : 2;
USHORT MultiplexControl2 : 2;
USHORT CursorFormat2 : 1;
USHORT CrossHairEnable2 : 1;
USHORT CursorEnable2 : 1;
USHORT Fill2 : 1;
} CURSOR_COMMAND, *PCURSOR_COMMAND;
//
// Define cross hair thickness values.
//
#define ONE_PIXEL_THICK 0x0 // one pixel in thickness
#define THREE_PIXELS_THICK 0x1 // three pixels in thickness
#define FIVE_PIXELS_THICK 0x2 // five pixels in thickness
#define SEVEN_PIXELS_THICK 0x3 // seven pixels in thickness
//
// Define multiplexer control values.
//
#define ONE_TO_ONE 0x0 // 1:1 multiplexing
#define FOUR_TO_ONE 0x1 // 4:1 multiplexing
#define FIVE_TO_ONE 0x2 // 5:1 multiplexing
//
// Define cursor origin values.
//
#define CURSOR_X_ORIGIN (((2 * HORIZONAL_SYNC_VALUE) + BACK_PORCH_VALUE) * 4 - 36)
#define CURSOR_Y_ORIGIN ((VERTICAL_BLANK_VALUE / 2) + 24)
//
// Define G300 configuration data structure.
//
typedef struct _JAZZ_G300_CONFIGURATION_DATA {
USHORT Version;
USHORT Revision;
USHORT Irql;
USHORT Vector;
ULONG ControlBase;
ULONG ControlSize;
ULONG CursorBase;
ULONG CursorSize;
ULONG FrameBase;
ULONG FrameSize;
} JAZZ_G300_CONFIGURATION_DATA, *PJAZZ_G300_CONFIGURATION_DATA;
typedef JAZZ_G300_CONFIGURATION_DATA JAZZ_G364_CONFIGURATION_DATA;
typedef PJAZZ_G300_CONFIGURATION_DATA PJAZZ_G364_CONFIGURATION_DATA;
//
// Define generic display configuration data structure found in ARC
// machine PROM
//
typedef struct _MONITOR_CONFIG_DATA {
USHORT Version;
USHORT Revision;
USHORT HorizontalResolution;
USHORT HorizontalDisplayTime;
USHORT HorizontalBackPorch;
USHORT HorizontalFrontPorch;
USHORT HorizontalSync;
USHORT VerticalResolution;
USHORT VerticalBackPorch;
USHORT VerticalFrontPorch;
USHORT VerticalSync;
USHORT HorizontalScreenSize;
USHORT VerticalScreenSize;
} MONITOR_CONFIG_DATA, *PMONITOR_CONFIG_DATA;