158 lines
6.7 KiB
C++
Executable File
158 lines
6.7 KiB
C++
Executable File
//-----------------------------------------------------------------------------
|
|
// Torque Game Engine
|
|
// Copyright (C) GarageGames.com, Inc.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#include "PlatformMacCarb/platformMacCarb.h"
|
|
#include "console/console.h"
|
|
#include "Core/stringTable.h"
|
|
#include <math.h>
|
|
|
|
#include <Gestalt.h>
|
|
|
|
/* at some future time...
|
|
#if (UNIVERSAL_INTERFACES_VERSION<0x0341) || (UNIVERSAL_INTERFACES_VERSION==0x0341 && UNIVERSAL_INTERFACES_SEED_VERSION<2) || (UNIVERSAL_INTERFACES_VERSION==0x0400) // since OSX base headers are earlier than 3.4.1
|
|
// missing the new cpu type until carbonlib 1.5...
|
|
#define gestaltCPUG47450 0x0110
|
|
#endif
|
|
*/
|
|
|
|
// possibly useful gestalts I haven't used yet:
|
|
|
|
// gestaltDisplayMgrVers = FOUR_CHAR_CODE('dplv') /* Display Manager version */
|
|
// gestaltDisplayMgrAttr = FOUR_CHAR_CODE('dply'), /* Display Manager attributes */
|
|
|
|
// gestaltOSAttr = FOUR_CHAR_CODE('os '), /* o/s attributes */
|
|
// gestaltSysZoneGrowable = 0, /* system heap is growable */
|
|
// gestaltLaunchCanReturn = 1, /* can return from launch */
|
|
// gestaltLaunchFullFileSpec = 2, /* can launch from full file spec */
|
|
// gestaltLaunchControl = 3, /* launch control support available */
|
|
// gestaltTempMemSupport = 4, /* temp memory support */
|
|
// gestaltRealTempMemory = 5, /* temp memory handles are real */
|
|
// gestaltTempMemTracked = 6, /* temporary memory handles are tracked */
|
|
// gestaltIPCSupport = 7, /* IPC support is present */
|
|
// gestaltSysDebuggerSupport = 8 /* system debugger support is present */
|
|
|
|
// gestaltPowerMgrAttr = FOUR_CHAR_CODE('powr'), /* power manager attributes */
|
|
// gestaltPMgrExists = 0,
|
|
// gestaltPMgrCPUIdle = 1,
|
|
// gestaltPMgrSCC = 2,
|
|
// gestaltPMgrSound = 3,
|
|
// gestaltPMgrDispatchExists = 4,
|
|
// gestaltPMgrSupportsAVPowerStateAtSleepWake = 5
|
|
|
|
// should add multiprocessing check
|
|
// should add threadmgr check -- and we'll need optional code to do something diff.
|
|
|
|
Platform::SystemInfo_struct Platform::SystemInfo;
|
|
|
|
#define BASE_MHZ_SPEED 200
|
|
|
|
void Processor::init()
|
|
{
|
|
OSErr err;
|
|
long raw, mhzSpeed = BASE_MHZ_SPEED;
|
|
|
|
Con::printf("System & Processor Information:");
|
|
|
|
err = Gestalt(gestaltSystemVersion, &raw);
|
|
|
|
Con::printf(" MacOS version: %x.%x.%x", (raw>>8), (raw&0xFF)>>4, (raw&0x0F));
|
|
|
|
err = Gestalt(gestaltCarbonVersion, &raw);
|
|
if (err) raw = 0;
|
|
if (raw==0)
|
|
Con::printf(" No CarbonLib support.");
|
|
else
|
|
Con::printf(" CarbonLib version: %x.%x.%x", (raw>>8), (raw&0xFF)>>4, (raw&0x0F));
|
|
|
|
err = Gestalt(gestaltPhysicalRAMSize, &raw);
|
|
raw /= (1024*1024); // MB
|
|
Con::printf(" Physical RAM: %dMB", raw);
|
|
err = Gestalt(gestaltLogicalRAMSize, &raw);
|
|
raw /= (1024*1024); // MB
|
|
Con::printf(" Logical RAM: %dMB", raw);
|
|
|
|
// this is known to have issues with some Processor Upgrade cards
|
|
err = Gestalt(gestaltProcClkSpeed, &raw);
|
|
if (err==noErr && raw)
|
|
{
|
|
mhzSpeed = (float)raw / 1000000.0f;
|
|
if (mhzSpeed < BASE_MHZ_SPEED)
|
|
{ // something drastically wrong.
|
|
mhzSpeed = BASE_MHZ_SPEED;
|
|
}
|
|
}
|
|
Platform::SystemInfo.processor.mhz = mhzSpeed;
|
|
|
|
Platform::SystemInfo.processor.type = CPU_PowerPC_Unknown;
|
|
err = Gestalt(gestaltNativeCPUtype, &raw);
|
|
switch(raw)
|
|
{
|
|
case gestaltCPU601:
|
|
Platform::SystemInfo.processor.type = CPU_PowerPC_601;
|
|
Platform::SystemInfo.processor.name = StringTable->insert("PowerPC 601");
|
|
break;
|
|
case gestaltCPU603e:
|
|
case gestaltCPU603ev:
|
|
Platform::SystemInfo.processor.type = CPU_PowerPC_603e;
|
|
Platform::SystemInfo.processor.name = StringTable->insert("PowerPC 603e");
|
|
break;
|
|
case gestaltCPU603:
|
|
Platform::SystemInfo.processor.type = CPU_PowerPC_603;
|
|
Platform::SystemInfo.processor.name = StringTable->insert("PowerPC 603");
|
|
break;
|
|
case gestaltCPU604e:
|
|
case gestaltCPU604ev:
|
|
Platform::SystemInfo.processor.type = CPU_PowerPC_604e;
|
|
Platform::SystemInfo.processor.name = StringTable->insert("PowerPC 604e");
|
|
break;
|
|
case gestaltCPU604:
|
|
Platform::SystemInfo.processor.type = CPU_PowerPC_604;
|
|
Platform::SystemInfo.processor.name = StringTable->insert("PowerPC 604");
|
|
break;
|
|
case gestaltCPU750: //G3
|
|
Platform::SystemInfo.processor.type = CPU_PowerPC_G3;
|
|
Platform::SystemInfo.processor.name = StringTable->insert("PowerPC G3");
|
|
break;
|
|
case gestaltCPUG4:
|
|
Platform::SystemInfo.processor.type = CPU_PowerPC_G4;
|
|
Platform::SystemInfo.processor.name = StringTable->insert("PowerPC G4");
|
|
break;
|
|
/* at some point -- I these are either speedbump or the TiBooks or the new TiMacs
|
|
// gestaltCPUVger = 0x0110, // Vger , Altivec
|
|
// gestaltCPUApollo = 0x0111 // Apollo , Altivec
|
|
case gestaltCPUVger:
|
|
case gestaltCPUVger:
|
|
Platform::SystemInfo.processor.type = CPU_PowerPC_G4_FUTURE;
|
|
Platform::SystemInfo.processor.name = StringTable->insert("PowerPC G4 FUTURE");
|
|
break;
|
|
*/
|
|
default:
|
|
if (raw>gestaltCPUG4)
|
|
{ // for now, ID it as a G4u
|
|
Platform::SystemInfo.processor.type = CPU_PowerPC_G4u;
|
|
Platform::SystemInfo.processor.name = StringTable->insert("Unknown/PowerPC G4u ++");
|
|
}
|
|
else
|
|
{
|
|
Platform::SystemInfo.processor.type = CPU_PowerPC_Unknown;
|
|
Platform::SystemInfo.processor.name = StringTable->insert("Unknown PowerPC");
|
|
}
|
|
break;
|
|
}
|
|
|
|
Platform::SystemInfo.processor.properties = CPU_PROP_PPCMIN;
|
|
err = Gestalt(gestaltPowerPCProcessorFeatures, &raw);
|
|
if ((1 << gestaltPowerPCHasVectorInstructions) & (raw))
|
|
Platform::SystemInfo.processor.properties |= CPU_PROP_ALTIVEC; // OR it in as they are flags...
|
|
|
|
Con::printf(" %s, %d Mhz", Platform::SystemInfo.processor.name, Platform::SystemInfo.processor.mhz);
|
|
if (Platform::SystemInfo.processor.properties & CPU_PROP_PPCMIN)
|
|
Con::printf(" FPU detected");
|
|
if (Platform::SystemInfo.processor.properties & CPU_PROP_ALTIVEC)
|
|
Con::printf(" AltiVec detected");
|
|
|
|
Con::printf(" ");
|
|
}
|