cxCpu 3.0 release 1.0.12 (MPL) : Release Notes

Introduction |  New Features |  Changes in this release |  Known issues |  Credits |  Release History | 

Introduction
Welcome to CarbonSoft cxCpu version 3.0 (formerly cxCpu2000) MPL Release.

Important information

The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License.

The Original Code is the CarbonSoft Processor Detection Toolkit release 3.0.12

The Initial Developer of the Original Code is Kev French (kev@carbonsoft.com).

Portions created by Kev French are Copyright © 1995-2001 Kev French, CarbonSoft. All Rights Reserved.

Should you require a non-mpl release of cxCpu then you should download the closed source release from www.carbonsoft.com which is distributed under a CarbonSoft license. You should note however that the CarbonSoft license specifically prohibits source redistribution.

CarbonSoft cxCpu provides a simple method of identifying the host processor and its features without you, the developer, having to worry about different vendors' implementations of the CPUID instruction. Written in Object Pascal (with a smattering of inline assemby) cxCpu is suitable for use on all Microsoft Windows® platforms from Windows® 95/NT 4.0 upwards.

CarbonSoft cxCpu provides a comprehensive Api wrapped by a simple function library that allows you to include cxCpu functionality in your applications very easily. Built on the Api is a non-visual component for Borland Delphi and C++ Builder and soon a dynamic link library and COM object for use in other environments.

For more information on CarbonSoft cxCpu visit www.carbonsoft.com/cxcpu/.


New Features
A new speed normalisation method has been introduced in an attempt to avoid the problem of keeping the array of normalised speeds up to date as new processors are released. The new API function, 'GetNormalisedCPUSpeedEx', only relies on a lookup array to normalise the last portion of the raw speed. For example, a raw speed of 570Mhz would be represented as (5x100) + 70, the routine would attempt to normalise 70, getting 66 and then recombine it with the other portion giving a normalised speed of 566Mhz. This new routine is used by the rest of the toolkit in preference to the old one. Should you wish to revert to the previous method then disable the {$DEFINE NEWNORMALISE} directive in the 'cxCpu2kApi.pas' file.


The Api interface, 'cxCpu2kIntf.pas', has been extended to allow you to call the CPUID function directly. The new function that enables this is called 'cxExecuteCPUID' and takes four parameters:
AProcessor (Byte)
Represents the processor to be used to execute the instruction. NOT CURRENTLY SUPPORTED - See USE_DEFAULT in cxCpu2kConst.pas

AExecutionLevel (Cardinal)
Required CPUID execution level - See CPUID execution levels in cxCpu2kConst.pas

AIterations
Number of times the CPUID instruction should be executed before returning

var AResult (TCPUIDResult)
Structure for the results of the CPUID instruction - See definition in cxCpu2kConst.pas
The function will return TRUE if successful, if the function fails it will return FALSE. You can check the status of the function by querying the CPUID_LastError variable.

Two new functions have been introduced to support the extended family and model identifiers introduced with the Pentium 4 processor. These functions, cxGetProcessorExFamily and cxGetProcessorExModel, take a single parameter:
AProcessor (Byte)
Represents the processor to be used to execute the instruction. NOT CURRENTLY SUPPORTED - See USE_DEFAULT in cxCpu2kConst.pas
The functions will verify the existence of the extended fields and return them if supported. If the processor does not support extended family and model information then the functions will return 0. The Vcl component has also been extended to show the result of these functions in DetectedInfo.cpuFamilyEx and DetectedInfo.cpuModelEx respectively.


Support for new feature set flags has been introduced. The new flags supported are:
CLFLUSH - Indicates support for the CLFLUSH instruction
DTS - Debug Trace Store
ACPI - Advanced Configuration and Power Management Interface
SIMD2 - Streaming SIMD Extensions 2
SS - Support for Self-Snoop
TM - Thermal Monitor Support

A workaround has been introduced to fix the problem of incorrect level 2 cache values being returned on AMD Duron rev.A0 processors.

A native C++ Builder demo is now included in the distribution package.


Changes in this release
The toolkit has been renamed as 'cxCpu 3.0' to reflect its status as the third major release of the cxCpu toolkit and to avoid the inherent dating problems with the '2000' label.

This release supports the name detection feature of the Pentium 4 processor, similar to the marketing name detection features of AMD processors. Intel documentation is relatively vague concerning the details but it appears to follow the method adopted by other vendors.

Bugs fixed since Preview 1 (Thanks to Byran Mayland):
+ Fixed GetCacheDetectExSupport to work correctly with Athlon processors
+ Fixed GetLevel2UnifiedCacheEx which returned incorrect results on Athlon processors

Known Issues
The Pentium II and III with 512Kb of level 2 cache share identical identification information with the 512Kb versions of the corresponding Xeon processors. To account for this a new constant has been introduced in cxCpu2kIntel.pas, XEON_LIMIT. Changing this constant will determine how the processor identifies the Cpu. The default behaviour is to assume that anything less than 1024Kb cache is a standard Pentium II/III while anything with 1024Kb or greater cache is a Xeon model. Note that this issue does not affect PIII/PIII Xeon model 8 or 9 processors which use the Brand identifier to distinguish between them.

Multiple processor configurations are unsupported by the cxCpu toolkit at this time. Results reported may be from either processor or a combination of both.


Credits
The development of cxCpu has not been a solo effort, I'd particularly like to thank the following users for helping out with test results, bug reports, and code submissions.
(Names are listed in no particular order)
Steve Childs
Rainer Hald
Øyvind Selbeck
Nick Asseloos
Mark Mazelin
Peirrick Lucas
Kerry Frater
Justin Colson
Jens Christian Rodi Hanson
Jaco Vis
Fred Hovey
Don Hass
Dave 'Duke of URL' Weiner
Dave Crutchley
Bryan Maryland
Brian L Clevenger
Andres Henden

I'd like to extend my thanks to all users who took the time to test both the 0.x and public releases. Your support and words of encouragement have been essential to this project.


Release History
Release 1.0 (This release)
  • Improved speed normalisation routine
  • Added CPUID pass-through function
  • Support for extended Model and Family fields
  • Support for name detection feature on Pentium 4 models
  • Improved support for Athlon/Duron processors
  • Support for new feature flags (CLFLUSH, DTS, ACPI, SSE2, SS, TM)
  • Added workaround for Duron rev.A0 cache detection bug
  • Added native C++ Builder demo

  • Preview 1
  • First public release
  • New API Interface unit
  • Improved Intel Pentium III Xeon support
  • Via Cyrix III support
  • Improved Athlon support
  • Improved IDT WinChip support
  • Demo application
  • Toolkit help files

  • Preview 0.8
  • Added API interface layer
  • Added support for C++ Builder 3-5
  • Dropped Delphi 2 support
  • Simplified Vcl implementation
  • Added documentation

  • Preview 0.7 (Not released)
  • Exploratory internal release to evaluate multiple processor support.

  • Release 0.6
  • Added support for processor brand identifier
  • Added support for Intel Pentium III model 8 processors
  • Fixed Range Check error issue
  • Fixed incorrect cache detection issues
  • Removed incorrectly indicated support for C++ Builder

  • Release 0.5
  • Added support for cache size detection
  • Added support for Intel Celeron processors
  • Added support for Intel Mobile Celeron and Mobile Pentium II processors
  • Added support for Intel Xeon processors
  • Fixed minor issues with serial number detection

  • Release 0.4
  • Added support for C++ Builder 4
  • Added support for Athlon & 133Mhz-bus PIII processors (600Mhz+)

  • Release 0.3
  • Added support for extended feature set
  • Added support for processor marketing name
  • Added API support for extended MMX, 3DNow!, and extended 3DNow!

  • Release 0.2
  • Fixed minor issues with VersionInfo properties
  • Added automatic benchmarking features
  • Added support for Pentium III serial number detection. (Thanks to Pierrick Lucas)

  • Release 0.1
  • First release. Functionally equivalent to cxCpu2 Beta 3 (Build 47)

  •  
    Kev French, CarbonSoft.