966 lines
31 KiB
C
966 lines
31 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1991 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
conftest.c
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
This program tests the ARC configuration functions.
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
David M. Robinson (davidro) 4-Sept-1991
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#include "fwp.h"
|
|||
|
#include "jzsetup.h"
|
|||
|
#include "oli2msft.h"
|
|||
|
#include "inc.h"
|
|||
|
|
|||
|
#define MAXIMUM_DEVICE_SPECIFIC_DATA 32
|
|||
|
|
|||
|
PCHAR Banner1 = " JAZZ Configuration Test Program Version 0.15\r\n";
|
|||
|
PCHAR Banner2 = " Copyright (c) 1991, 1992 Microsoft Corporation\r\n";
|
|||
|
|
|||
|
ULONG
|
|||
|
CtReadProcessorId(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
JzShowTime (
|
|||
|
BOOLEAN First
|
|||
|
)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
CtPrintData(
|
|||
|
PCONFIGURATION_COMPONENT Component
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
ARC_STATUS Status;
|
|||
|
MONITOR_CONFIGURATION_DATA MonitorData; // TEMPTEMP
|
|||
|
EISA_ADAPTER_DETAILS EisaDetails;
|
|||
|
JAZZ_G300_CONFIGURATION_DATA VideoData; // TEMPTEMP
|
|||
|
PCM_VIDEO_DEVICE_DATA VideoDeviceData;
|
|||
|
PCM_MONITOR_DEVICE_DATA MonitorDeviceData;
|
|||
|
PCM_SONIC_DEVICE_DATA SonicDeviceData;
|
|||
|
PCM_SCSI_DEVICE_DATA ScsiDeviceData;
|
|||
|
PCM_FLOPPY_DEVICE_DATA FloppyDeviceData;
|
|||
|
PCM_SERIAL_DEVICE_DATA SerialDeviceData;
|
|||
|
ULONG LineSize;
|
|||
|
UCHAR Buffer[sizeof(CM_PARTIAL_RESOURCE_LIST) +
|
|||
|
(sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) * 5) +
|
|||
|
MAXIMUM_DEVICE_SPECIFIC_DATA];
|
|||
|
PCM_PARTIAL_RESOURCE_LIST Descriptor = (PCM_PARTIAL_RESOURCE_LIST)&Buffer;
|
|||
|
ULONG Count;
|
|||
|
PCM_PARTIAL_RESOURCE_DESCRIPTOR Partial;
|
|||
|
ULONG Prid;
|
|||
|
BOOLEAN OldData;
|
|||
|
ULONG Version;
|
|||
|
ULONG Index;
|
|||
|
|
|||
|
JzPrint("\n\r");
|
|||
|
|
|||
|
if (Component == NULL) {
|
|||
|
JzPrint(" NULL component");
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
if (Component->IdentifierLength != 0) {
|
|||
|
JzPrint(" Identifier = ");
|
|||
|
JzPrint(Component->Identifier);
|
|||
|
}
|
|||
|
JzPrint("\n\r");
|
|||
|
|
|||
|
OldData = FALSE;
|
|||
|
switch (Component->Class) {
|
|||
|
|
|||
|
case SystemClass:
|
|||
|
JzPrint(" Class = System\r\n");
|
|||
|
JzPrint(" Type = ");
|
|||
|
if (Component->Type == ArcSystem) {
|
|||
|
JzPrint("Arc");
|
|||
|
} else {
|
|||
|
JzPrint("Unknown");
|
|||
|
}
|
|||
|
JzPrint("\r\n");
|
|||
|
break;
|
|||
|
case ProcessorClass:
|
|||
|
JzPrint(" Class = Processor\r\n");
|
|||
|
JzPrint(" Type = ");
|
|||
|
|
|||
|
switch (Component->Type) {
|
|||
|
case CentralProcessor:
|
|||
|
JzPrint("CPU");
|
|||
|
break;
|
|||
|
|
|||
|
case FloatingPointProcessor:
|
|||
|
JzPrint("FPU");
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
JzPrint("Unknown");
|
|||
|
break;
|
|||
|
}
|
|||
|
JzPrint("\r\n");
|
|||
|
JzPrint(" Number = %d\r\n", Component->Key);
|
|||
|
|
|||
|
JzPrint(" Processor = ");
|
|||
|
Prid = CtReadProcessorId();
|
|||
|
if ((Prid >> 8) != 4) {
|
|||
|
JzPrint("Unknown\r\n");
|
|||
|
} else {
|
|||
|
JzPrint("R4000\r\n");
|
|||
|
JzPrint(" Revision = %d.%d\r\n", (Prid >> 4) & 0xF, Prid & 0xF);
|
|||
|
}
|
|||
|
|
|||
|
break;
|
|||
|
|
|||
|
case CacheClass:
|
|||
|
JzPrint(" Class = Cache\r\n");
|
|||
|
JzPrint(" Type = ");
|
|||
|
|
|||
|
switch (Component->Type) {
|
|||
|
case PrimaryIcache:
|
|||
|
JzPrint("Primary Instruction");
|
|||
|
break;
|
|||
|
|
|||
|
case PrimaryDcache:
|
|||
|
JzPrint("Primary Data");
|
|||
|
break;
|
|||
|
|
|||
|
case SecondaryIcache:
|
|||
|
JzPrint("Secondary Instruction");
|
|||
|
break;
|
|||
|
|
|||
|
case SecondaryDcache:
|
|||
|
JzPrint("Secondary Data");
|
|||
|
break;
|
|||
|
|
|||
|
case SecondaryCache:
|
|||
|
JzPrint("Secondary");
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
JzPrint("Unknown");
|
|||
|
break;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
LineSize = 1 << ((Component->Key & 0xFF0000) >> 16);
|
|||
|
JzPrint("\r\n");
|
|||
|
JzPrint(" Block = %d\r\n", ((Component->Key & 0xFF000000) >> 24) * LineSize);
|
|||
|
JzPrint(" Line = %d\r\n", LineSize);
|
|||
|
JzPrint(" Size = %d\r\n", (1 << (Component->Key & 0xFFFF) << PAGE_SHIFT));
|
|||
|
break;
|
|||
|
|
|||
|
case AdapterClass:
|
|||
|
JzPrint(" Class = Adapter\r\n");
|
|||
|
JzPrint(" Type = ");
|
|||
|
|
|||
|
switch (Component->Type) {
|
|||
|
case EisaAdapter:
|
|||
|
JzPrint("EISA");
|
|||
|
OldData = TRUE;
|
|||
|
break;
|
|||
|
|
|||
|
case TcAdapter:
|
|||
|
JzPrint("Turbochannel");
|
|||
|
break;
|
|||
|
|
|||
|
case ScsiAdapter:
|
|||
|
JzPrint("SCSI");
|
|||
|
break;
|
|||
|
|
|||
|
case DtiAdapter:
|
|||
|
JzPrint("Desktop Interface");
|
|||
|
break;
|
|||
|
|
|||
|
case MultiFunctionAdapter:
|
|||
|
JzPrint("Multifunction");
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
JzPrint("Unknown");
|
|||
|
break;
|
|||
|
|
|||
|
}
|
|||
|
JzPrint("\r\n");
|
|||
|
break;
|
|||
|
|
|||
|
case ControllerClass:
|
|||
|
JzPrint(" Class = Controller\r\n");
|
|||
|
JzPrint(" Type = ");
|
|||
|
|
|||
|
switch (Component->Type) {
|
|||
|
|
|||
|
case DiskController:
|
|||
|
JzPrint("Disk");
|
|||
|
break;
|
|||
|
|
|||
|
case TapeController:
|
|||
|
JzPrint("Tape");
|
|||
|
break;
|
|||
|
|
|||
|
case CdromController:
|
|||
|
JzPrint("CDROM");
|
|||
|
break;
|
|||
|
|
|||
|
case WormController:
|
|||
|
JzPrint("WORM");
|
|||
|
break;
|
|||
|
|
|||
|
case SerialController:
|
|||
|
JzPrint("Serial");
|
|||
|
break;
|
|||
|
|
|||
|
case NetworkController:
|
|||
|
JzPrint("Network");
|
|||
|
break;
|
|||
|
|
|||
|
case DisplayController:
|
|||
|
OldData = TRUE;
|
|||
|
JzPrint("Display");
|
|||
|
break;
|
|||
|
|
|||
|
case ParallelController:
|
|||
|
JzPrint("Parallel");
|
|||
|
break;
|
|||
|
|
|||
|
case PointerController:
|
|||
|
JzPrint("Pointer");
|
|||
|
break;
|
|||
|
|
|||
|
case KeyboardController:
|
|||
|
JzPrint("Keyboard");
|
|||
|
break;
|
|||
|
|
|||
|
case AudioController:
|
|||
|
JzPrint("Audio");
|
|||
|
break;
|
|||
|
|
|||
|
case OtherController:
|
|||
|
JzPrint("Other");
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
JzPrint("Unknown");
|
|||
|
break;
|
|||
|
|
|||
|
}
|
|||
|
JzPrint("\r\n");
|
|||
|
break;
|
|||
|
|
|||
|
case PeripheralClass:
|
|||
|
JzPrint(" Class = Peripheral\r\n");
|
|||
|
JzPrint(" Type = ");
|
|||
|
|
|||
|
switch (Component->Type) {
|
|||
|
|
|||
|
case DiskPeripheral:
|
|||
|
JzPrint("Disk");
|
|||
|
break;
|
|||
|
|
|||
|
case FloppyDiskPeripheral:
|
|||
|
JzPrint("Floppy disk");
|
|||
|
break;
|
|||
|
|
|||
|
case TapePeripheral:
|
|||
|
JzPrint("Tape");
|
|||
|
break;
|
|||
|
|
|||
|
case ModemPeripheral:
|
|||
|
JzPrint("Modem");
|
|||
|
break;
|
|||
|
|
|||
|
case PrinterPeripheral:
|
|||
|
JzPrint("Printer");
|
|||
|
break;
|
|||
|
|
|||
|
case KeyboardPeripheral:
|
|||
|
JzPrint("Keyboard");
|
|||
|
break;
|
|||
|
|
|||
|
case PointerPeripheral:
|
|||
|
JzPrint("Pointer");
|
|||
|
break;
|
|||
|
|
|||
|
case MonitorPeripheral:
|
|||
|
OldData = TRUE;
|
|||
|
JzPrint("Monitor");
|
|||
|
break;
|
|||
|
|
|||
|
case TerminalPeripheral:
|
|||
|
JzPrint("Terminal");
|
|||
|
break;
|
|||
|
|
|||
|
case OtherPeripheral:
|
|||
|
JzPrint("Other");
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
JzPrint("Unknown");
|
|||
|
break;
|
|||
|
|
|||
|
}
|
|||
|
JzPrint("\r\n");
|
|||
|
break;
|
|||
|
|
|||
|
|
|||
|
default:
|
|||
|
JzPrint(" Unknown class,");
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
JzPrint(" Key = %08lx\r\n", Component->Key);
|
|||
|
// JzPrint(" Affinity = %08lx\r\n", Component->AffinityMask);
|
|||
|
JzPrint(" Flags:\r\n");
|
|||
|
|
|||
|
if (Component->Flags.Failed) {
|
|||
|
JzPrint(" Failed\r\n");
|
|||
|
}
|
|||
|
|
|||
|
if (Component->Flags.ReadOnly) {
|
|||
|
JzPrint(" ReadOnly\r\n");
|
|||
|
}
|
|||
|
|
|||
|
if (Component->Flags.Removable) {
|
|||
|
JzPrint(" Removable\r\n");
|
|||
|
}
|
|||
|
|
|||
|
if (Component->Flags.ConsoleIn) {
|
|||
|
JzPrint(" ConsoleIn\r\n");
|
|||
|
}
|
|||
|
|
|||
|
if (Component->Flags.ConsoleOut) {
|
|||
|
JzPrint(" ConsoleOut\r\n");
|
|||
|
}
|
|||
|
|
|||
|
if (Component->Flags.Input) {
|
|||
|
JzPrint(" Input\r\n");
|
|||
|
}
|
|||
|
|
|||
|
if (Component->Flags.Output) {
|
|||
|
JzPrint(" Output\r\n");
|
|||
|
}
|
|||
|
|
|||
|
JzPrint("\r\n");
|
|||
|
|
|||
|
if (!OldData &&
|
|||
|
(Component->ConfigurationDataLength != 0) &&
|
|||
|
(Component->ConfigurationDataLength < sizeof(Buffer))) {
|
|||
|
|
|||
|
Status = ArcGetConfigurationData( Descriptor, Component );
|
|||
|
if ((Status != ESUCCESS) || (Descriptor->Count > 10)) {
|
|||
|
JzPrint(" Error reading configuration data");
|
|||
|
} else {
|
|||
|
JzPrint(" Version %d.%d\r\n", Descriptor->Version, Descriptor->Revision);
|
|||
|
Version = Descriptor->Version * 100 + Descriptor->Revision;
|
|||
|
for (Count = 0 ; Count < Descriptor->Count ; Count++ ) {
|
|||
|
Partial = &Descriptor->PartialDescriptors[Count];
|
|||
|
switch (Partial->Type) {
|
|||
|
case CmResourceTypePort:
|
|||
|
JzPrint(" Port Config -- %08lx - %08lx\r\n",
|
|||
|
Partial->u.Port.Start.LowPart,
|
|||
|
Partial->u.Port.Start.LowPart +
|
|||
|
Partial->u.Port.Length - 1);
|
|||
|
break;
|
|||
|
case CmResourceTypeInterrupt:
|
|||
|
JzPrint(" Interrupt Config -- ");
|
|||
|
if (Partial->Flags & CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE) {
|
|||
|
JzPrint(" Level triggered,");
|
|||
|
} else {
|
|||
|
JzPrint(" Edge triggered,");
|
|||
|
}
|
|||
|
JzPrint(" Irql = ");
|
|||
|
switch (Partial->u.Interrupt.Level) {
|
|||
|
case DEVICE_LEVEL:
|
|||
|
JzPrint("DEVICE_LEVEL");
|
|||
|
break;
|
|||
|
case PASSIVE_LEVEL:
|
|||
|
JzPrint("PASSIVE_LEVEL");
|
|||
|
break;
|
|||
|
case APC_LEVEL:
|
|||
|
JzPrint("APC_LEVEL");
|
|||
|
break;
|
|||
|
case DISPATCH_LEVEL:
|
|||
|
JzPrint("DISPATCH_LEVEL");
|
|||
|
break;
|
|||
|
case IPI_LEVEL:
|
|||
|
JzPrint("IPI_LEVEL");
|
|||
|
break;
|
|||
|
case HIGH_LEVEL:
|
|||
|
JzPrint("HIGH_LEVEL");
|
|||
|
break;
|
|||
|
default:
|
|||
|
JzPrint("Unknown level");
|
|||
|
}
|
|||
|
JzPrint(", Vector = %08lx\r\n", Partial->u.Interrupt.Vector);
|
|||
|
break;
|
|||
|
case CmResourceTypeMemory:
|
|||
|
JzPrint(" Memory Config -- %08lx - %08lx\r\n",
|
|||
|
Partial->u.Memory.Start.LowPart,
|
|||
|
Partial->u.Memory.Start.LowPart +
|
|||
|
Partial->u.Memory.Length - 1);
|
|||
|
break;
|
|||
|
case CmResourceTypeDma:
|
|||
|
JzPrint(" DMA Config -- Channel = %d\r\n",
|
|||
|
Partial->u.Dma.Channel);
|
|||
|
break;
|
|||
|
case CmResourceTypeDeviceSpecific:
|
|||
|
switch (Component->Class) {
|
|||
|
|
|||
|
case AdapterClass:
|
|||
|
switch (Component->Type) {
|
|||
|
case ScsiAdapter:
|
|||
|
ScsiDeviceData = (PCM_SCSI_DEVICE_DATA)&Descriptor->PartialDescriptors[Count+1];
|
|||
|
JzPrint(" Scsi Host Identifier = %d\r\n",
|
|||
|
ScsiDeviceData->HostIdentifier);
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
case ControllerClass:
|
|||
|
switch (Component->Type) {
|
|||
|
case DisplayController:
|
|||
|
VideoDeviceData = (PCM_VIDEO_DEVICE_DATA)&Descriptor->PartialDescriptors[Count+1];
|
|||
|
JzPrint(" Video Clock = %d\r\n",
|
|||
|
VideoDeviceData->VideoClock);
|
|||
|
break;
|
|||
|
case NetworkController:
|
|||
|
SonicDeviceData = (PCM_SONIC_DEVICE_DATA)&Descriptor->PartialDescriptors[Count+1];
|
|||
|
JzPrint(" Sonic Data Configuration Register = %04x\r\n",
|
|||
|
SonicDeviceData->DataConfigurationRegister);
|
|||
|
if (Version >= 101) {
|
|||
|
JzPrint(" Sonic Ethernet Address = ");
|
|||
|
for (Index = 0; Index < 6 ; Index++) {
|
|||
|
JzPrint("%02lx", SonicDeviceData->EthernetAddress[Index]);
|
|||
|
}
|
|||
|
JzPrint("\r\n");
|
|||
|
JzPrint(" Sonic Ethernet Checksum = ");
|
|||
|
for (Index = 6; Index < 8 ; Index++) {
|
|||
|
JzPrint("%02lx", SonicDeviceData->EthernetAddress[Index]);
|
|||
|
}
|
|||
|
JzPrint("\r\n");
|
|||
|
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case SerialController:
|
|||
|
SerialDeviceData = (PCM_SERIAL_DEVICE_DATA)&Descriptor->PartialDescriptors[Count+1];
|
|||
|
JzPrint(" Serial Baud Clock = %d\r\n",
|
|||
|
SerialDeviceData->BaudClock);
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case PeripheralClass:
|
|||
|
|
|||
|
switch (Component->Type) {
|
|||
|
|
|||
|
case FloppyDiskPeripheral:
|
|||
|
FloppyDeviceData = (PCM_FLOPPY_DEVICE_DATA)&Descriptor->PartialDescriptors[Count+1];
|
|||
|
JzPrint(" Floppy data:\n\r");
|
|||
|
JzPrint(" Size = %s\n\r", FloppyDeviceData->Size);
|
|||
|
JzPrint(" MaxDensity = %d Kb\n\r", FloppyDeviceData->MaxDensity);
|
|||
|
break;
|
|||
|
|
|||
|
case MonitorPeripheral:
|
|||
|
MonitorDeviceData = (PCM_MONITOR_DEVICE_DATA)&Descriptor->PartialDescriptors[Count+1];
|
|||
|
JzPrint(" Monitor data:\n\r");
|
|||
|
JzPrint(" HorizontalResolution = %d\n\r", MonitorDeviceData->HorizontalResolution);
|
|||
|
JzPrint(" HorizontalDisplayTime = %d\n\r", MonitorDeviceData->HorizontalDisplayTime);
|
|||
|
JzPrint(" HorizontalBackPorch = %d\n\r", MonitorDeviceData->HorizontalBackPorch);
|
|||
|
JzPrint(" HorizontalFrontPorch = %d\n\r", MonitorDeviceData->HorizontalFrontPorch);
|
|||
|
JzPrint(" HorizontalSync = %d\n\r", MonitorDeviceData->HorizontalSync);
|
|||
|
JzPrint(" VerticalResolution = %d\n\r", MonitorDeviceData->VerticalResolution);
|
|||
|
JzPrint(" VerticalBackPorch = %d\n\r", MonitorDeviceData->VerticalBackPorch);
|
|||
|
JzPrint(" VerticalFrontPorch = %d\n\r", MonitorDeviceData->VerticalFrontPorch);
|
|||
|
JzPrint(" VerticalSync = %d\n\r", MonitorDeviceData->VerticalSync);
|
|||
|
JzPrint(" HorizontalScreenSize = %d\n\r", MonitorDeviceData->HorizontalScreenSize);
|
|||
|
JzPrint(" VerticalScreenSize = %d\n\r", MonitorDeviceData->VerticalScreenSize);
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
JzPrint(" Unknown data\r\n");
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
} else {
|
|||
|
if (OldData) {
|
|||
|
if (Component->Type == DisplayController) {
|
|||
|
Status = ArcGetConfigurationData( &VideoData, Component);
|
|||
|
if (Status != ESUCCESS) {
|
|||
|
JzPrint(" Error reading video configuration data");
|
|||
|
} else {
|
|||
|
JzPrint(" Video controller data:\n\r");
|
|||
|
JzPrint(" Irql = %d\n\r", VideoData.Irql);
|
|||
|
JzPrint(" Vector = %d\n\r", VideoData.Vector);
|
|||
|
JzPrint(" ControlBase = %08xl\n\r", VideoData.ControlBase);
|
|||
|
JzPrint(" ControlSize = %d\n\r", VideoData.ControlSize);
|
|||
|
JzPrint(" CursorBase = %08xl\n\r", VideoData.CursorBase);
|
|||
|
JzPrint(" CursorSize = %d\n\r", VideoData.CursorSize);
|
|||
|
JzPrint(" FrameBase = %08xl\n\r", VideoData.FrameBase);
|
|||
|
JzPrint(" FrameSize = %d\n\r", VideoData.FrameSize);
|
|||
|
}
|
|||
|
} else if (Component->Type == MonitorPeripheral) {
|
|||
|
Status = ArcGetConfigurationData( &MonitorData, Component);
|
|||
|
if (Status != ESUCCESS) {
|
|||
|
JzPrint(" Error reading monitor configuration data");
|
|||
|
} else {
|
|||
|
JzPrint(" Monitor data:\n\r");
|
|||
|
JzPrint(" HorizontalResolution = %d\n\r", MonitorData.HorizontalResolution);
|
|||
|
JzPrint(" HorizontalDisplayTime = %d\n\r", MonitorData.HorizontalDisplayTime);
|
|||
|
JzPrint(" HorizontalBackPorch = %d\n\r", MonitorData.HorizontalBackPorch);
|
|||
|
JzPrint(" HorizontalFrontPorch = %d\n\r", MonitorData.HorizontalFrontPorch);
|
|||
|
JzPrint(" HorizontalSync = %d\n\r", MonitorData.HorizontalSync);
|
|||
|
JzPrint(" VerticalResolution = %d\n\r", MonitorData.VerticalResolution);
|
|||
|
JzPrint(" VerticalBackPorch = %d\n\r", MonitorData.VerticalBackPorch);
|
|||
|
JzPrint(" VerticalFrontPorch = %d\n\r", MonitorData.VerticalFrontPorch);
|
|||
|
JzPrint(" VerticalSync = %d\n\r", MonitorData.VerticalSync);
|
|||
|
JzPrint(" HorizontalScreenSize = %d\n\r", MonitorData.HorizontalScreenSize);
|
|||
|
JzPrint(" VerticalScreenSize = %d\n\r", MonitorData.VerticalScreenSize);
|
|||
|
}
|
|||
|
} else if (Component->Type == EisaAdapter) {
|
|||
|
Status = ArcGetConfigurationData( &EisaDetails, Component);
|
|||
|
if (Status != ESUCCESS) {
|
|||
|
JzPrint(" Error reading Eisa bus data");
|
|||
|
} else {
|
|||
|
JzPrint(" Eisa Details:\n\r");
|
|||
|
JzPrint(" Number of slots = %d\n\r", EisaDetails.NumberOfSlots);
|
|||
|
JzPrint(" Io start address = %08lx\n\r", EisaDetails.IoStart);
|
|||
|
JzPrint(" Io size = %lx\n\r", EisaDetails.IoSize);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
VOID
|
|||
|
main(
|
|||
|
int argc,
|
|||
|
char *argv[],
|
|||
|
char *envp[]
|
|||
|
)
|
|||
|
{
|
|||
|
ULONG Index;
|
|||
|
UCHAR Character;
|
|||
|
ULONG Count;
|
|||
|
LONG DefaultChoice = 0;
|
|||
|
ARC_STATUS Status;
|
|||
|
CHAR PathName[80];
|
|||
|
PCONFIGURATION_COMPONENT Component;
|
|||
|
PCONFIGURATION_COMPONENT NewComponent;
|
|||
|
PSYSTEM_ID SystemId;
|
|||
|
BOOLEAN Update;
|
|||
|
PMEMORY_DESCRIPTOR MemoryDescriptor;
|
|||
|
GETSTRING_ACTION Action;
|
|||
|
PCHAR Choices[] = {
|
|||
|
"Walk through the configuration tree",
|
|||
|
"Enter a pathname and display the configuration data",
|
|||
|
"Display memory configuration",
|
|||
|
"Test Unicode",
|
|||
|
"Other ARC Tests",
|
|||
|
"Exit"
|
|||
|
};
|
|||
|
#define NUMBER_OF_CHOICES (sizeof(Choices) / sizeof(ULONG))
|
|||
|
ULONG Fid;
|
|||
|
ULONG CrLf;
|
|||
|
ULONG Space;
|
|||
|
ULONG i, j;
|
|||
|
BOOLEAN Unicode;
|
|||
|
PARC_DISPLAY_STATUS DisplayStatus;
|
|||
|
ULONG x, y;
|
|||
|
|
|||
|
while (TRUE) {
|
|||
|
|
|||
|
JzSetScreenAttributes( TRUE, FALSE, FALSE);
|
|||
|
JzPrint("%c2J", ASCII_CSI);
|
|||
|
JzSetPosition( 0, 0);
|
|||
|
JzPrint(Banner1);
|
|||
|
JzPrint(Banner2);
|
|||
|
|
|||
|
for (Index = 0; Index < NUMBER_OF_CHOICES ; Index++ ) {
|
|||
|
JzSetPosition( Index + 3, 5);
|
|||
|
if (Index == DefaultChoice) {
|
|||
|
JzSetScreenAttributes( TRUE, FALSE, TRUE);
|
|||
|
JzPrint(Choices[Index]);
|
|||
|
JzSetScreenAttributes( TRUE, FALSE, FALSE);
|
|||
|
} else {
|
|||
|
JzPrint(Choices[Index]);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
JzSetPosition(NUMBER_OF_CHOICES + 4, 0);
|
|||
|
SystemId = ArcGetSystemId();
|
|||
|
JzPrint(" System = ");
|
|||
|
JzPrint(&SystemId->VendorId[0]);
|
|||
|
JzPrint("\r\n");
|
|||
|
JzPrint(" Serial = %8lx\r\n", SystemId->ProductId);
|
|||
|
|
|||
|
Character = 0;
|
|||
|
do {
|
|||
|
if (ArcGetReadStatus(ARC_CONSOLE_INPUT) == ESUCCESS) {
|
|||
|
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
|
|||
|
switch (Character) {
|
|||
|
|
|||
|
case ASCII_ESC:
|
|||
|
return;
|
|||
|
|
|||
|
case ASCII_CSI:
|
|||
|
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
|
|||
|
JzSetPosition( DefaultChoice + 3, 5);
|
|||
|
JzPrint(Choices[DefaultChoice]);
|
|||
|
switch (Character) {
|
|||
|
case 'A':
|
|||
|
case 'D':
|
|||
|
DefaultChoice--;
|
|||
|
if (DefaultChoice < 0) {
|
|||
|
DefaultChoice = NUMBER_OF_CHOICES-1;
|
|||
|
}
|
|||
|
break;
|
|||
|
case 'B':
|
|||
|
case 'C':
|
|||
|
DefaultChoice++;
|
|||
|
if (DefaultChoice == NUMBER_OF_CHOICES) {
|
|||
|
DefaultChoice = 0;
|
|||
|
}
|
|||
|
break;
|
|||
|
case 'H':
|
|||
|
DefaultChoice = 0;
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
JzSetPosition( DefaultChoice + 3, 5);
|
|||
|
JzSetScreenAttributes( TRUE, FALSE, TRUE);
|
|||
|
JzPrint(Choices[DefaultChoice]);
|
|||
|
JzSetScreenAttributes( TRUE, FALSE, FALSE);
|
|||
|
continue;
|
|||
|
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
} while ((Character != '\n') && (Character != '\r'));
|
|||
|
|
|||
|
switch (DefaultChoice) {
|
|||
|
|
|||
|
case 0:
|
|||
|
|
|||
|
Component = ArcGetChild(NULL);
|
|||
|
NewComponent = Component;
|
|||
|
Character = 0;
|
|||
|
do {
|
|||
|
|
|||
|
JzSetPosition( 3, 5);
|
|||
|
JzPrint("\x9BJ");
|
|||
|
JzPrint("Use arrow keys to walk the tree, ESC to return");
|
|||
|
JzPrint("\n\r\n\r");
|
|||
|
|
|||
|
CtPrintData(Component);
|
|||
|
Update = FALSE;
|
|||
|
do {
|
|||
|
if (ArcGetReadStatus(ARC_CONSOLE_INPUT) == ESUCCESS) {
|
|||
|
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
|
|||
|
switch (Character) {
|
|||
|
|
|||
|
case ASCII_CSI:
|
|||
|
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
|
|||
|
switch (Character) {
|
|||
|
case 'A':
|
|||
|
NewComponent = ArcGetParent(Component);
|
|||
|
Update = TRUE;
|
|||
|
break;
|
|||
|
|
|||
|
case 'B':
|
|||
|
NewComponent = ArcGetChild(Component);
|
|||
|
Update = TRUE;
|
|||
|
break;
|
|||
|
|
|||
|
case 'C':
|
|||
|
NewComponent = ArcGetPeer(Component);
|
|||
|
Update = TRUE;
|
|||
|
break;
|
|||
|
|
|||
|
case 'D':
|
|||
|
NewComponent = ArcGetParent(Component);
|
|||
|
NewComponent = ArcGetChild(NewComponent);
|
|||
|
while ((NewComponent != NULL) &&
|
|||
|
(ArcGetPeer(NewComponent) != Component)) {
|
|||
|
NewComponent = ArcGetPeer(NewComponent);
|
|||
|
}
|
|||
|
Update = TRUE;
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
break;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
if (NewComponent != NULL) {
|
|||
|
Component = NewComponent;
|
|||
|
}
|
|||
|
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
} while (!Update && (Character != ASCII_ESC));
|
|||
|
} while ((Character != ASCII_ESC));
|
|||
|
break;
|
|||
|
|
|||
|
case 1:
|
|||
|
|
|||
|
JzSetPosition( 3, 5);
|
|||
|
JzPrint("\x9BJ");
|
|||
|
JzPrint("Enter component pathname: ");
|
|||
|
do {
|
|||
|
Action = FwGetString( PathName,
|
|||
|
sizeof(PathName),
|
|||
|
NULL,
|
|||
|
3,
|
|||
|
sizeof(" Enter component pathname: "));
|
|||
|
|
|||
|
if (Action == GetStringEscape) {
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
} while ( Action != GetStringSuccess );
|
|||
|
if (Action == GetStringEscape) {
|
|||
|
continue;
|
|||
|
}
|
|||
|
JzPrint("\n\r");
|
|||
|
|
|||
|
Component = ArcGetComponent(PathName);
|
|||
|
|
|||
|
CtPrintData(Component);
|
|||
|
|
|||
|
JzPrint(" Press any key to continue...");
|
|||
|
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
|
|||
|
continue;
|
|||
|
|
|||
|
case 2:
|
|||
|
|
|||
|
MemoryDescriptor = ArcGetMemoryDescriptor(NULL);
|
|||
|
while (MemoryDescriptor != NULL) {
|
|||
|
|
|||
|
JzSetPosition( 3, 5);
|
|||
|
JzPrint("\x9BJ");
|
|||
|
|
|||
|
JzPrint("Memory type = ");
|
|||
|
switch (MemoryDescriptor->MemoryType) {
|
|||
|
case MemoryExceptionBlock:
|
|||
|
JzPrint("ExceptionBlock");
|
|||
|
break;
|
|||
|
case MemorySystemBlock:
|
|||
|
JzPrint("SystemBlock");
|
|||
|
break;
|
|||
|
case MemoryFree:
|
|||
|
JzPrint("Free");
|
|||
|
break;
|
|||
|
case MemoryBad:
|
|||
|
JzPrint("Bad");
|
|||
|
break;
|
|||
|
case MemoryLoadedProgram:
|
|||
|
JzPrint("LoadedProgram");
|
|||
|
break;
|
|||
|
case MemoryFirmwareTemporary:
|
|||
|
JzPrint("FirmwareTemporary");
|
|||
|
break;
|
|||
|
case MemoryFirmwarePermanent:
|
|||
|
JzPrint("FirmwarePermanent");
|
|||
|
break;
|
|||
|
default:
|
|||
|
JzPrint("Unknown");
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
JzSetPosition( 4, 5);
|
|||
|
JzPrint("Base Page = %08lx", MemoryDescriptor->BasePage);
|
|||
|
JzSetPosition( 5, 5);
|
|||
|
JzPrint("Page Count = %d", MemoryDescriptor->PageCount);
|
|||
|
JzSetPosition( 6,5);
|
|||
|
|
|||
|
|
|||
|
JzPrint(" Press any key to continue, ESC to return");
|
|||
|
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
|
|||
|
if (Character == ASCII_ESC) {
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
MemoryDescriptor = ArcGetMemoryDescriptor(MemoryDescriptor);
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case 3:
|
|||
|
|
|||
|
JzPrint("\r\n\r\n");
|
|||
|
CrLf = (ASCII_CR << 16) + ASCII_LF;
|
|||
|
Space = ' ';
|
|||
|
|
|||
|
ArcClose(ARC_CONSOLE_OUTPUT);
|
|||
|
ArcOpen("multi()video()monitor()console(1)",ArcOpenWriteOnly,&Fid);
|
|||
|
for (j = 0; j < 16 ; j++ ) {
|
|||
|
for (i = 0 ; i < 9 ; i++ ) {
|
|||
|
Index = 0x2500 + (i << 4) + j;
|
|||
|
ArcWrite(ARC_CONSOLE_OUTPUT, &Space, 2, &Count);
|
|||
|
ArcWrite(ARC_CONSOLE_OUTPUT, &Index, 2, &Count);
|
|||
|
}
|
|||
|
ArcWrite(ARC_CONSOLE_OUTPUT, &CrLf, 4, &Count);
|
|||
|
}
|
|||
|
ArcClose(ARC_CONSOLE_OUTPUT);
|
|||
|
ArcOpen("multi()video()monitor()console()",ArcOpenWriteOnly,&Fid);
|
|||
|
|
|||
|
JzPrint("\r\nPress any key to continue");
|
|||
|
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
|
|||
|
|
|||
|
|
|||
|
ArcClose(ARC_CONSOLE_INPUT);
|
|||
|
ArcOpen("multi()key()keyboard()console(1)",ArcOpenReadOnly,&Fid);
|
|||
|
ArcOpen("multi()video()monitor()console(1)",ArcOpenWriteOnly,&Fid);
|
|||
|
|
|||
|
do {
|
|||
|
JzPrint("\r\nPress any key, ESC to stop: ");
|
|||
|
ArcRead(ARC_CONSOLE_INPUT, &Index, 2, &Count);
|
|||
|
ArcWrite(Fid, &Index, 2, &Count);
|
|||
|
} while ( Index != ASCII_ESC );
|
|||
|
|
|||
|
JzPrint(" \r\n Searching for valid Unicode ranges...");
|
|||
|
|
|||
|
Unicode = FALSE;
|
|||
|
for (Index = 0; Index < 0xffff ; Index++ ) {
|
|||
|
if (ArcTestUnicodeCharacter(Fid, (WCHAR)Index) == ESUCCESS) {
|
|||
|
if (!Unicode) {
|
|||
|
JzPrint("\r\n Start = %04lx, ", Index);
|
|||
|
Unicode = TRUE;
|
|||
|
}
|
|||
|
} else {
|
|||
|
if (Unicode) {
|
|||
|
JzPrint("End = %04lx, ", Index);
|
|||
|
Unicode = FALSE;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
ArcClose(Fid);
|
|||
|
ArcClose(ARC_CONSOLE_INPUT);
|
|||
|
ArcOpen("multi()key()keyboard()console()",ArcOpenWriteOnly,&Fid);
|
|||
|
|
|||
|
JzPrint("\r\nPress any key to continue");
|
|||
|
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
|
|||
|
|
|||
|
break;
|
|||
|
|
|||
|
case 4:
|
|||
|
|
|||
|
DisplayStatus = ArcGetDisplayStatus(ARC_CONSOLE_OUTPUT);
|
|||
|
|
|||
|
x = (DisplayStatus->CursorMaxXPosition / 2) - 24;
|
|||
|
y = (DisplayStatus->CursorMaxYPosition / 2) - 7;
|
|||
|
|
|||
|
JzSetPosition(y++,x);
|
|||
|
|
|||
|
JzPrint("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ");
|
|||
|
|
|||
|
for (Index = 0; Index < 10 ; Index++ ) {
|
|||
|
JzSetPosition(y++,x);
|
|||
|
JzPrint("<EFBFBD> <20>");
|
|||
|
}
|
|||
|
JzSetPosition(y++,x);
|
|||
|
JzPrint("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ");
|
|||
|
|
|||
|
x = (DisplayStatus->CursorMaxXPosition / 2) - 23;
|
|||
|
y = (DisplayStatus->CursorMaxYPosition / 2) - 6;
|
|||
|
|
|||
|
JzSetPosition(y++,x);
|
|||
|
JzSetScreenColor(ArcColorCyan,ArcColorBlack);
|
|||
|
|
|||
|
JzPrint("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ");
|
|||
|
|
|||
|
for (Index = 0; Index < 6 ; Index++ ) {
|
|||
|
JzSetPosition(y++,x);
|
|||
|
JzPrint("<EFBFBD> <20>");
|
|||
|
}
|
|||
|
JzSetPosition(y++,x);
|
|||
|
JzPrint("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ");
|
|||
|
JzSetPosition(y++,x);
|
|||
|
JzPrint("<EFBFBD> <20>");
|
|||
|
JzSetPosition(y++,x);
|
|||
|
JzPrint("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ");
|
|||
|
|
|||
|
x = (DisplayStatus->CursorMaxXPosition / 2) - 22;
|
|||
|
y = (DisplayStatus->CursorMaxYPosition / 2) - 5;
|
|||
|
JzSetPosition(y++,x);
|
|||
|
|
|||
|
DisplayStatus = ArcGetDisplayStatus(ARC_CONSOLE_OUTPUT);
|
|||
|
|
|||
|
JzPrint("X Cursor = %d", DisplayStatus->CursorXPosition);
|
|||
|
JzSetPosition(y++,x);
|
|||
|
JzPrint("Y Cursor = %d", DisplayStatus->CursorYPosition);
|
|||
|
JzSetPosition(y++,x);
|
|||
|
JzPrint("Max X Cursor = %d", DisplayStatus->CursorMaxXPosition);
|
|||
|
JzSetPosition(y++,x);
|
|||
|
JzPrint("Max Y Cursor = %d", DisplayStatus->CursorMaxYPosition);
|
|||
|
|
|||
|
|
|||
|
JzSetPosition(y++,x);
|
|||
|
JzPrint("Press any key to continue...");
|
|||
|
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
|
|||
|
|
|||
|
for (Index = 0; Index < argc ; Index++ ) {
|
|||
|
JzPrint("\r\n Argument #%d = ", Index);
|
|||
|
JzPrint(argv[Index]);
|
|||
|
}
|
|||
|
|
|||
|
if (argc == 0) {
|
|||
|
JzPrint("\r\n No arguments");
|
|||
|
}
|
|||
|
|
|||
|
JzPrint("\r\n Press any key to continue...");
|
|||
|
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
|
|||
|
|
|||
|
break;
|
|||
|
|
|||
|
case 5:
|
|||
|
return;
|
|||
|
|
|||
|
default:
|
|||
|
continue;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|