265 lines
8.0 KiB
C
265 lines
8.0 KiB
C
/*
|
|
* ==========================================================================
|
|
* Name: nt_fulsc.h
|
|
* Author: Jerry Sexton
|
|
* Derived From:
|
|
* Created On: 5th February 1992
|
|
* Purpose: This header file contains definitions etc. for
|
|
* full-screen graphics modules.
|
|
*
|
|
* (c)Copyright Insignia Solutions Ltd., 1992. All rights reserved.
|
|
* ==========================================================================
|
|
*/
|
|
|
|
#if defined(NEC_98)
|
|
#include "necioctl.h"
|
|
#endif // NEC_98
|
|
|
|
/*
|
|
* ==========================================================================
|
|
* Macros
|
|
* ==========================================================================
|
|
*/
|
|
#define ErrorExit() DisplayErrorTerm(EHS_FUNC_FAILED,GetLastError(),__FILE__,__LINE__);
|
|
|
|
|
|
#define CURRENT_OFFSET(r) ((DWORD) (r) - (DWORD) videoState)
|
|
#define GET_OFFSET(offset) ((BYTE *) videoState + videoState->offset)
|
|
|
|
#define MID_VAL(x, y) (x + (y - x) / 2)
|
|
|
|
#define NUM_SEQ_REGS 5
|
|
#define NUM_CRTC_REGS 25
|
|
#define NUM_GC_REGS 9
|
|
#define NUM_AC_REGS 21
|
|
#define NUM_DAC_REGS 256
|
|
|
|
#if defined(NEC_98)
|
|
#define STATELENGTH sizeof(VIDEO_HARDWARE_STATE_HEADER_NEC_98)
|
|
#else // NEC_98
|
|
#define STATELENGTH sizeof(VIDEO_HARDWARE_STATE_HEADER)
|
|
#endif // NEC_98
|
|
#define LATCHLENGTH 4
|
|
#define RGBLENGTH 3
|
|
#define PLANELENGTH 0x10000
|
|
|
|
#define BASICSEQUENCEROFFSET STATELENGTH
|
|
#define BASICCRTCONTOFFSET BASICSEQUENCEROFFSET + NUM_SEQ_REGS
|
|
#define BASICGRAPHCONTOFFSET BASICCRTCONTOFFSET + NUM_CRTC_REGS
|
|
#define BASICATTRIBCONTOFFSET BASICGRAPHCONTOFFSET + NUM_GC_REGS
|
|
#define BASICDACOFFSET BASICATTRIBCONTOFFSET + NUM_AC_REGS
|
|
#define BASICLATCHESOFFSET BASICDACOFFSET + NUM_DAC_REGS * RGBLENGTH
|
|
#define PLANE1OFFSET BASICLATCHESOFFSET + LATCHLENGTH
|
|
#define PLANE2OFFSET PLANE1OFFSET + PLANELENGTH
|
|
#define PLANE3OFFSET PLANE2OFFSET + PLANELENGTH
|
|
#define PLANE4OFFSET PLANE3OFFSET + PLANELENGTH
|
|
|
|
#define VIDEO_PAGE_SIZE (80 * 25 * 2) // Cols * rows * (char + attrib)
|
|
|
|
#define BIT_PLANE_SIZE 65536
|
|
|
|
#define VGA_WIDTH 80
|
|
|
|
#define VGA_HEIGHT_0 22
|
|
#define VGA_HEIGHT_1 25
|
|
#define VGA_HEIGHT_2 28
|
|
#define VGA_HEIGHT_3 43
|
|
#define VGA_HEIGHT_4 50
|
|
|
|
#define MAX_TITLE_LEN 256
|
|
|
|
#define MAX_CONSOLE_HEIGHT 50
|
|
#define MAX_CONSOLE_WIDTH 80
|
|
#define MAX_CONSOLE_SIZE (MAX_CONSOLE_HEIGHT * MAX_CONSOLE_WIDTH)
|
|
|
|
#define DEF_FONT_WIDTH 8
|
|
#define DEF_FONT_HEIGHT 8
|
|
|
|
#define GET FALSE
|
|
#define SET TRUE
|
|
|
|
#define DISPLAY_TYPE 0x40
|
|
|
|
#define AC_MODE_CONTROL_REG 16
|
|
|
|
#ifndef PROD
|
|
/* Debug stuff. */
|
|
#define FullScreenTrace0(s) \
|
|
if (FullScreenDebug) always_trace0(s)
|
|
#define FullScreenTrace1(s ,p0) \
|
|
if (FullScreenDebug) always_trace1(s, p0)
|
|
#define FullScreenTrace2(s, p0, p1) \
|
|
if (FullScreenDebug) always_trace2(s, p0, p1)
|
|
#define FullScreenTrace3(s, p0, p1, p2) \
|
|
if (FullScreenDebug) always_trace3(s, p0, p1, p2)
|
|
#define FullScreenTrace4(s, p0, p1, p2, p3) \
|
|
if (FullScreenDebug) always_trace4(s, p0, p1, p2, p3)
|
|
#define FullScreenTrace5(s, p0, p1, p2, p3, p4) \
|
|
if (FullScreenDebug) always_trace5(s, p0, p1, p2, p3, p4)
|
|
#define FullScreenTrace6(s, p0, p1, p2, p3, p4, p5) \
|
|
if (FullScreenDebug) always_trace6(s, p0, p1, p2, p3, p4, p5)
|
|
#define FullScreenTrace7(s, p0, p1, p2, p3, p4, p5, p6) \
|
|
if (FullScreenDebug) always_trace7(s, p0, p1, p2, p3, p4, p5, p6)
|
|
#define FullScreenTrace8(s, p0, p1, p2, p3, p4, p5, p6, p7) \
|
|
if (FullScreenDebug) always_trace7(s, p0, p1, p2, p3, p4, p5, p6, p7)
|
|
#else /* !PROD */
|
|
#define FullScreenTrace0(s)
|
|
#define FullScreenTrace1(s ,p0)
|
|
#define FullScreenTrace2(s, p0, p1)
|
|
#define FullScreenTrace3(s, p0, p1, p2)
|
|
#define FullScreenTrace4(s, p0, p1, p2, p3)
|
|
#define FullScreenTrace5(s, p0, p1, p2, p3, p4)
|
|
#define FullScreenTrace6(s, p0, p1, p2, p3, p4, p5)
|
|
#define FullScreenTrace7(s, p0, p1, p2, p3, p4, p5, p6)
|
|
#define FullScreenTrace8(s, p0, p1, p2, p3, p4, p5, p6, p7)
|
|
#endif /* !PROD */
|
|
|
|
/*
|
|
* ==========================================================================
|
|
* Typedefs
|
|
* ==========================================================================
|
|
*/
|
|
|
|
/* Structure for saving video block name in. */
|
|
typedef struct
|
|
{
|
|
WCHAR *Name;
|
|
ULONG NameLen;
|
|
} WCHAR_STRING;
|
|
|
|
/* Valid hardware state table entry. */
|
|
typedef struct
|
|
{
|
|
USHORT LinesOnScreen;
|
|
COORD Resolution;
|
|
COORD FontSize;
|
|
} HARDWARE_STATE;
|
|
|
|
/*
|
|
* ==========================================================================
|
|
* Global Data
|
|
* ==========================================================================
|
|
*/
|
|
IMPORT HANDLE MainThread;
|
|
IMPORT DWORD stateLength;
|
|
#ifdef X86GFX
|
|
IMPORT HANDLE hStartHardwareEvent;
|
|
IMPORT HANDLE hEndHardwareEvent;
|
|
IMPORT HANDLE hErrorHardwareEvent;
|
|
#if defined(NEC_98)
|
|
IMPORT PVIDEO_HARDWARE_STATE_HEADER_NEC98 videoState;
|
|
#else // NEC_98
|
|
IMPORT PVIDEO_HARDWARE_STATE_HEADER videoState;
|
|
#endif // NEC_98
|
|
#endif
|
|
IMPORT PVOID textState; //Tim Nov 92.
|
|
IMPORT WCHAR_STRING videoSection;
|
|
IMPORT WCHAR_STRING textSection;
|
|
IMPORT BOOL NoTicks;
|
|
IMPORT HANDLE StartTToG;
|
|
IMPORT HANDLE EndTToG;
|
|
IMPORT BOOL BiosModeChange;
|
|
#ifndef PROD
|
|
IMPORT UTINY FullScreenDebug;
|
|
#endif /* PROD */
|
|
|
|
extern DWORD savedScreenState;
|
|
extern BOOL ConsoleInitialised;
|
|
extern BOOL ConsoleNoUpdates;
|
|
#ifdef X86GFX
|
|
extern DWORD mouse_buffer_width;
|
|
extern DWORD mouse_buffer_height;
|
|
#endif /* X86GFX */
|
|
extern BOOL blocked_in_gfx_mode;
|
|
|
|
|
|
/*
|
|
* ==========================================================================
|
|
* Imported Functions
|
|
* ==========================================================================
|
|
*/
|
|
IMPORT VOID nt_init_event_thread(VOID);
|
|
IMPORT VOID ConsoleInit(VOID);
|
|
IMPORT VOID GfxReset(VOID);
|
|
IMPORT VOID ResetConsoleState(VOID);
|
|
IMPORT VOID InitTToG(VOID);
|
|
IMPORT VOID SwitchToFullScreen(BOOL);
|
|
IMPORT VOID CheckForFullscreenSwitch(VOID);
|
|
IMPORT UTINY getNtScreenState(VOID);
|
|
IMPORT BOOL hostModeChange(VOID);
|
|
IMPORT VOID DoFullScreenResume(VOID);
|
|
IMPORT VOID GfxCloseDown(VOID);
|
|
|
|
IMPORT VOID TextSectionName(WCHAR **, ULONG *);
|
|
IMPORT VOID VideoSectionName(WCHAR **, ULONG *);
|
|
IMPORT PVOID *CreateVideoSection(ULONG);
|
|
IMPORT PVOID *CreateTextSection(ULONG);
|
|
IMPORT VOID CommitSection(PVOID *, ULONG *);
|
|
IMPORT VOID CloseSection(PVOID);
|
|
IMPORT VOID LoseRegenMemory(VOID);
|
|
IMPORT VOID RegainRegenMemory(VOID);
|
|
|
|
IMPORT VOID DoHandShake(VOID);
|
|
IMPORT HANDLE GetDetectEvent(VOID);
|
|
|
|
IMPORT VOID ResetConsoleState IPT0();
|
|
IMPORT int getModeType(VOID);
|
|
|
|
#ifdef X86GFX
|
|
#define CPI_FILENAME_LENGTH 9
|
|
#define CPI_FILENAME "\\ega.cpi"
|
|
#define CPI_SIGNATURE_LENGTH 8
|
|
#define CPI_SIGNATURE_NT "\xFF""FONT.NT"
|
|
#define CPI_SIGNATURE_DOS "\xFF""FONT "
|
|
|
|
#pragma pack(1)
|
|
typedef struct _CPIFILEHEADER {
|
|
|
|
CHAR Signature[8]; // "\xFF""FONT.NT" for nt ega.cpi
|
|
// "\xFF""FONT " for dos ega.cpi
|
|
BYTE Reserved[8];
|
|
WORD NumberOfPointers;
|
|
BYTE TypeOfPointer;
|
|
DWORD OffsetToCodePageHeader;
|
|
} CPIFILEHEADER, * PCPIFILEHEADER;
|
|
|
|
typedef struct _CPICODEPAGEHEADER{
|
|
WORD NumberOfCodePages;
|
|
} CPICODEPAGEHEADER, *PCPICODEPAGEHEADER;
|
|
|
|
typedef struct _CPICODEPAGEENTRY {
|
|
WORD HeaderSize;
|
|
DWORD OffsetToNextCodePageEntry;
|
|
WORD DeviceType;
|
|
CHAR DevieSubTypeID[8];
|
|
WORD CodePageID;
|
|
BYTE Reserved[6];
|
|
DWORD OffsetToFontHeader; // absolute for DOS CPI
|
|
// relative for NT CPI
|
|
} CPICODEPAGEENTRY, *PCPICODEPAGEENTRY;
|
|
|
|
typedef struct _CPIFONTHEADER {
|
|
WORD Reserved;
|
|
WORD NumberOfFonts;
|
|
WORD LengthOfFontData;
|
|
} CPIFONTHEADER, *PCPIFONTHEADER;
|
|
|
|
typedef struct _CPIFONTDATA{
|
|
BYTE FontHeight;
|
|
BYTE FontWidth;
|
|
WORD AspectRatio;
|
|
WORD NumberOfCharacters;
|
|
} CPIFONTDATA, *PCPIFONTDATA;
|
|
#pragma pack()
|
|
|
|
IMPORT BOOL LoadCPIFont(UINT, WORD, WORD);
|
|
#endif
|
|
|
|
|
|
#ifdef X86GFX
|
|
VOID locateNativeBIOSfonts(VOID);
|
|
VOID GetROMsMapped(VOID);
|
|
VOID LoseRegenMemory(VOID);
|
|
VOID RegainRegenMemory(VOID);
|
|
#endif
|