Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

198 lines
4.2 KiB

/******************************************************************************\
* *
* MONOVXD.C - _________________________________________. *
* *
* Copyright (c) C-Cube Microsystems 1996 *
* All Rights Reserved. *
* *
* Use of C-Cube Microsystems code is governed by terms and conditions *
* stated in the accompanying licensing statement. *
* *
\******************************************************************************/
#ifdef VTOOLSD
#include <vtoolsc.h>
#include "monovxd.h"
#else
#include "Headers.h"
#pragma hdrstop
#endif
#ifdef USE_MONOCHROMEMONITOR
#include "xtoa.c"
/******************************************************************************\
* *
* MONOCHROME MONITOR OUTPUT *
* *
\******************************************************************************/
#define MONO_LINES 25
#define MONO_COLUMNS 80
#define MONO_ROW ( MONO_COLUMNS * 2 )
#define MONO_ATTR_NORMAL 0x07
#define MONO_ATTR_HIGHLIGHT 0x08
#define MONO_ATTR_BLINK 0x80
static int wOffset;
static char bAttr;
static char* mono_addr = NULL;
NTHALAPI
BOOLEAN
HalTranslateBusAddress(
IN INTERFACE_TYPE InterfaceType,
IN ULONG BusNumber,
IN PHYSICAL_ADDRESS BusAddress,
IN OUT PULONG AddressSpace,
OUT PPHYSICAL_ADDRESS TranslatedAddress
);
void MonoOutInit()
{
int i;
#ifdef VTOOLSD
mono_addr = (char*)MapPhysToLinear( (PVOID)0xB0000, 4096, 0 );
#else
// Oh, man! Wind95 times are gone!
//mono_addr = (char*)0xB0000;
{
PHYSICAL_ADDRESS paIn, paOut;
ULONG ulMemory;
paIn.LowPart = 0xB0000;
paIn.HighPart = 0;
HalTranslateBusAddress( Isa, 0, paIn, &ulMemory, &paOut );
mono_addr = (char*)MmMapIoSpace( paOut, 4096, MmNonCached );
if( mono_addr == (char*)0xFFFFFFFF )
mono_addr = NULL;
}
#endif
if( mono_addr )
{
for ( i = 0 ; i < MONO_LINES * MONO_ROW; *(char*)(mono_addr + i++) = ' ' )
;
wOffset = 0;
bAttr = MONO_ATTR_NORMAL;
}
}
void MonoOutChar( char c )
{
int i;
if( mono_addr )
{
if ( c == '\n' )
{
// Fill the rest of the line with spaces
for ( i = 0 ; i < ( MONO_ROW - wOffset % MONO_ROW ) ;
*( char * )( mono_addr + wOffset + i++ ) = ' ' );
wOffset += MONO_ROW - wOffset % MONO_ROW;
}
else
{
*( char * )( mono_addr + wOffset++ ) = c;
*( char * )( mono_addr + wOffset++ ) = bAttr;
}
if ( wOffset >= MONO_LINES * MONO_ROW )
{
wOffset = 0;
bAttr ^= MONO_ATTR_HIGHLIGHT;
}
}
}
void MonoOutStr( char * szStr )
{
if ( ! szStr )
return;
while ( *szStr )
MonoOutChar( *szStr++ );
}
void MonoOutInt( int val )
{
char buff[ 12 ];
#if 1//def VTOOLSD
_itoa( val, buff, 10 );
#else
buff[0] = '?';
buff[1] = 0;
#endif
MonoOutStr( buff );
}
void MonoOutHex( int val )
{
char buff[ 12 ];
#if 1//def VTOOLSD
_itoa( val, buff, 16 );
#else
buff[0] = '?';
buff[1] = 0;
#endif
MonoOutStr( buff );
}
void MonoOutULong( DWORD val )
{
char buff[ 12 ];
#if 1//def VTOOLSD
_ltoa( val, buff, 10 );
#else
buff[0] = '?';
buff[1] = 0;
#endif
MonoOutStr( buff );
}
void MonoOutULongHex( DWORD val )
{
char buff[ 12 ];
#if 1//def VTOOLSD
_ltoa( val, buff, 16 );
#else
buff[0] = '?';
buff[1] = 0;
#endif
MonoOutStr( buff );
}
BOOL MonoOutSetBlink( BOOL bNewValue )
{
BOOL bOldValue = (bAttr & MONO_ATTR_BLINK)?TRUE:FALSE;
if ( bNewValue )
bAttr |= MONO_ATTR_BLINK;
else
bAttr &= ~MONO_ATTR_BLINK;
return bOldValue;
}
BOOL MonoOutSetUnderscore( BOOL bNewValue )
{
BOOL bOldValue = ((bAttr & MONO_ATTR_NORMAL) == 1)?TRUE:FALSE;
bAttr &= 0xf9; // only blink and highlight remain
if ( bNewValue )
bAttr |= 1;
else
bAttr |= 2;
return bOldValue;
}
#endif // #ifdef USE_MONOCHROMEMONITOR