Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

hardware erkennung mit qb ?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
BombE



Anmeldungsdatum: 18.01.2006
Beiträge: 31

BeitragVerfasst am: 17.03.2006, 00:24    Titel: hardware erkennung mit qb ? Antworten mit Zitat

hallo

ich suche ein programm zur hardware erkennung unter dos also welche cpu wiviel ram und so geht sowas mit qb ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Manuel



Anmeldungsdatum: 23.10.2004
Beiträge: 1271
Wohnort: Bayern

BeitragVerfasst am: 17.03.2006, 13:31    Titel: Antworten mit Zitat

Du hast dich wohl noch nicht so recht auf www.qbasic.de umgesehen, oder? zwinkern

Es gibt eine sog. MonsterFAQ, in der allgemeine Fragen in QB schon gestellt wurden. Deine Frage wurde auch schonmal gestellt. Den Direktlink zu deiner Antwort ist: http://www.antonis.de/faq/qbmonfaq-Dateien/51117108.html
_________________
DL Walk (Denkspiel) | DL Malek (Denkspiel) | DL Warrior (ASCII-Adventure) | DL Sokodos (Sokoban-Klon)
---
www.astorek.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger
JPT



Anmeldungsdatum: 27.02.2006
Beiträge: 35

BeitragVerfasst am: 17.03.2006, 22:25    Titel: Antworten mit Zitat

Wenn ich nicht irre, hat Volta ein Programm zum auslesen der CPUID auf seiner Homepage...
_________________
MfG JPT
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Thomas Antoni



Anmeldungsdatum: 12.10.2004
Beiträge: 220
Wohnort: Erlangen

BeitragVerfasst am: 19.03.2006, 19:34    Titel: Dazu habe ich mir Folgendes für die MonsterFAQ vorgemerkt... Antworten mit Zitat

Dazu habe ich mir Folgendes für die MonsterFAQ vorgemerkt. Unter meinemWindows 95 funktioniert's. Ob auch bei neueren Windows-versionen, weiß ich nicht.

Frage deutsch
~~~~~~~~~~~~~~
Wie erkennt man, welche CPU, wieviel RAM und welches Betriebssystem der PC hat?


Question English
~~~~~~~~~~~~~~
How can I detect the computer's CPU type, the amount of RAM and the OS?


Antwort 1
~~~~~~~~~~
[ von Tobias Doerffel ("todo"; mailtodo@web.de ), per Mail, 29.4.02 ]

Das Betriebsystem kann man einfach mit dem Befehl VER, den man mit SHELL aufruft, ermitteln:
Code:

SHELL "Ver > Ver.Txt"


Danach steht das Betriebssystem und dessen Version in der Datei Ver.Txt. Ansonsten wäre es auch noch möglich den Betriebssystem-String im Bootsektor auszulesen:
Code:

TYPE RegType
Ax AS INTEGER
Bx AS INTEGER
Cx AS INTEGER
Dx AS INTEGER
Bp AS INTEGER
Si AS INTEGER
Di AS INTEGER
Flags AS INTEGER
Ds AS INTEGER
Es AS INTEGER
END TYPE
CLS
DIM Regs AS RegType
Buffer$ = SPACE$(512)
Regs.Ax = &H201
Regs.Cx = 1
Regs.Dx = &H180
Regs.Es = SSEG(Buffer$) ' Change this to VARSEG(Buffer$) if you use QB 4.5
Regs.Bx = SADD(Buffer$) ' Change this to VARPTR(Buffer$) if you use QB 4.5
CALL InterruptX(&H13, Regs, Regs)
PRINT "OS: "; MID$(Buffer$, 4, 8)

Es werden dann Dinge wie "MSDOS5.0" oder "MSWIN4.1" angezeigt.


Antwort 2
~~~~~~~~~~
[ von BufferUnderrun, 1999 ]

CPU und System:

Die CPU zu identifizieren ist eine nicht ganz unkomplizierte Sache. Aber Du hast Glück. Diese Frage haben sich schon andere vor Dir gestellt und Programme dazu geschrieben. Die beiden Programme findest Du im Internet. CPU.BAS : Erkennt im Gegensatz zu Win'95 auch z.B. Cyrix-Prozessoren und diskriminiert sie nicht als 486er. CPU-INFO ist nur ca. 1/4 so groß, kennt aber auch nicht so viele wie CUP.BAS


Um das Betriebssystem rauszubekommen kann man primitiverweise folgendes verwenden:
Code:

tmp$ = ENVIRON$("TEMP") 'temporäres Verzeichnis rausfinden . . .
IF tmp$ = "" THEN tmp$ = ENVORON$("TMP")
                        'falls auch mit "TMP" tmp$ leer bleiben
                        'sollte einfach 'alle möglichen GROß/klein-
                        'Schreibungen von Temp und Tmp versuchen -
                        'am besten mit Hilfe mehrerer DATA-Anweisungen.

SHELL "ver >" + tmp$ + "~osver.tmp"
                        'Schreibe Version in die Datei "~osver.tmp"
                        ' <- kann auch 'beliebig anders heißen
OPEN "I", #1, "~osver.tmp"
DO WHILE NOT EOF(1)     'Lese Datei. Der andere Kram steht da, weil man ja nie wissen
LINE INPUT #1, osver$   'kann, welche Textmengen ver in zukünftigen OS-Versionen
IF osver$ <> "" THEN EXIT DO  'ausgeben wird . . . (wir wollen ja kompatibel sein)
LOOP
CLOSE #1
KILL tmp$ + "~osver.tmp"
PRINT "Sie verwenden folgendes Betriebssystem: ";osver$


Für RAM hab ich noch nix - sollte aber nicht so schwer sein.


Antwort 3
~~~~~~~~~
[von Michel Frey , ( comet.frey@bluewin.ch ), per Mail, 26.4.02 ]
Code:

shell "ver >"+tmpfile$
open tmpfile$ for input as #1


oder so ähnlich bekommt man die Betriebssystem-Version raus


Antwort 4
~~~~~~~~~
[von TT-Soft von ( www.East-Power-Soft.de , webmaster@east-power-soft.de ), 18.1.02 ]

Zum Thema Betriebssystem gibt's ne ziemlich einfache Möglichkeit. Einfach den DOS-Befehl VER in eine Datei umlenken und auslesen:
Code:

SHELL"VER >TEMP.TMP"
OPEN "TEMP.TMP" FOR INPUT AS#1
   INPUT #1,Version$
CLOSE#1
KILL "TEMP.TMP"

PRINT Version$


Antwort 5
~~~~~~~~~
[ von Frank Neumann ("Triton"; http://www.silizium-net.de , isn-interactive@web.de ), per Mail, 9.9 01 ]


Das Betriebsystem kann man durch den DOS Befehl "VER" erkennen, den man so anwendet:
Code:

SHELL "ver"


Da das eigene Programm dann aber immer noch nicht weiß, wie das OS heißt (es wurde ja nur auf den Bildschirm geschrieben), lassen wir es lieber in eine Datei namens "os.txt" schreiben, wobei wir mit Hilfe des Symbols ">" die "Ausgabeumleitung" verwenden :
Code:

SHELL "ver > os.txt"


Den freien DOS Speicher im unteren 640 KB-Bereich, den DOS und QBasic nutzen, kann man mit dem DOS Befehl "MEM" erfragen. Am besten nimmt man noch den Parameter /f hinzu, da dann nur die notwendigsten Infos angezeigt werden:
Code:

SHELL "mem/f > freemem.txt"


Den Prozessor (Hersteller, Modell, Takt) kann man nicht so einfach ermitteln, wohl aber dessen Geschwindigkeit. Dazu lässt man in einer Schleife Berechnungen durchführen und schaut dann, wie lange es gedauert hat. So kann man dann CPUs miteinander vergleichen.


Antwort 6
~~~~~~~~~
Mit dem folgenden Programm kann man die Windows-Version ermitteln:

Code:

If WindowsActive%=4.00 Then PRINT "Windows 95"
If WindowsActive%=4.10 Then PRINT "Windows 98"

FUNCTION WindowsActive%
DIM Asm AS STRING * 13
MID$(Asm, 1, 5) = CHR$(184) + MKI$(5632) + CHR$(205) + CHR$(47)
MID$(Asm, 6, 5) = CHR$(104) + MKI$(VARSEG(AX)) + CHR$(31) + CHR$(163)
MID$(Asm, 11, 3) = MKI$(VARPTR(AX)) + CHR$(203)
DEF SEG = VARSEG(Asm): CALL ABSOLUTE(VARPTR(Asm)): DEF SEG
IF (AX AND &HFF <> 0) AND (AX AND &HFF <> &H80) AND (AX <> &H1600) THEN
WindowsActive% = ((AX AND &HFF) * 100) + AX \ 256
END IF
END FUNCTION



Answer 7
~~~~~~~~~~~~
[ from the QB-Forum-FAQ at www.network54.com/Forum/ , May 18, 2003]



*** Question
How to detect the CPU type?


*** Answer
My following program detects CPU and other stuff. This Might be useful for some. It detects the Vendor, and my attempt of getting Family, Model info for CPU's. (I think i have most of them from 486 to Pentium 3 (i don't know any for P4) It also detects dome of the features (MMX, SSE etc.)

Code:

DECLARE SUB Flags ()
DECLARE FUNCTION CPUType$ ()
DECLARE FUNCTION BDC& (a$)
DECLARE FUNCTION DBC$ (a&)
DECLARE FUNCTION VendorID$ ()
'
TYPE exRegs
  EAX AS LONG
  EBX AS LONG
  ECX AS LONG
  edx AS LONG
END TYPE
'
DECLARE SUB cpuid (EAX AS LONG, status AS exRegs)
CLS
DIM SHARED status AS exRegs, count&
'
COLOR 9: PRINT "CPU Maker: ", : COLOR 7: PRINT VendorID
FOR EAX& = 1 TO count&: cpuid EAX&, status: NEXT EAX&
PRINT
COLOR 9: PRINT "CPU: ", : COLOR 7: PRINT CPUType$
PRINT
Flags
'
'
FUNCTION BDC& (a$)
IF VAL(a$) < 4 THEN LET a$ = a$ + SPACE$(4 - VAL(a$))
f& = (VAL(MID$(a$, 1, 1)) * 1) + (VAL(MID$(a$, 2, 1)) * 2) + (VAL(MID$(a$, 3, 1)) * 4) + (VAL(MID$(a$, 4, 1)) * 8)
BDC& = f&
END FUNCTION
'
'
SUB cpuid (EAX AS LONG, status AS exRegs)
STATIC loaded%, asm$
IF NOT loaded% THEN
loaded% = -1
asm$ = CHR$(&H55) 'PUSH BP
asm$ = asm$ + CHR$(&H89) + CHR$(&HE5) 'MOV BP,SP
asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(8) 'MOV BX,[BP+08]
asm$ = asm$ + CHR$(&H66) + CHR$(&H8B) + CHR$(7) 'MOV EAX,[BX]
asm$ = asm$ + CHR$(&HF) + CHR$(&HA2) 'CPUID
asm$ = asm$ + CHR$(&H8B) + CHR$(&H7E) + CHR$(6) 'MOV DI,[BP+6]
asm$ = asm$ + CHR$(&H66) + CHR$(&H89) + CHR$(5) 'MOV [DI],EAX
asm$ = asm$ + CHR$(&H66) + CHR$(&H89) + CHR$(&H5D) + CHR$(4) 'MOV [DI+04],EBX
asm$ = asm$ + CHR$(&H66) + CHR$(&H89) + CHR$(&H4D) + CHR$(8) 'MOV [DI+08],ECX
asm$ = asm$ + CHR$(&H66) + CHR$(&H89) + CHR$(&H55) + CHR$(&HC) 'MOV [DI+0C],EDX
asm$ = asm$ + CHR$(&H5D) 'POP BP
asm$ = asm$ + CHR$(&HCA) + CHR$(4) + CHR$(0) 'RETF 0004
END IF
'
DEF SEG
CALL ABSOLUTE(EAX, status, SADD(asm$))
END SUB
'
FUNCTION CPUType$
y& = (status.EAX)
p$ = MID$(DBC$(y&), 9, 4)
q$ = MID$(DBC$(y&), 5, 4)
IFS& = BDC&(p$)
mo& = BDC&(q$)
z$ = MID$(DBC$(y&), 1, 4)
stepp& = BDC&(z$)
'
SELECT CASE IFS&
CASE 3
SELECT CASE mo&
CASE 0
names$ = "Intel 386Dx"
CASE 2
names$ = "Intel 386Sx"
END SELECT
CASE 4
SELECT CASE mo&
CASE 0
names$ = "Intel 486Dx / Cyrix 486Dx2 / AMD 486Dx4"
CASE 1
names$ = "Intel 486Dx"
CASE 2
names$ = "Intel 486Sx"
CASE 3, 7
names$ = "Intel 486Dx2"
CASE 5
names$ = "Intel 486Sx2"
CASE 8, 9
names$ = "Intel 486Dx4"
CASE 9
names$ = "Intel 486Dx4 / Cyrix 5x86"
CASE 14, 15
names$ = "AMD 5x86"
END SELECT
CASE 5
SELECT CASE mo&
CASE 2
SELECT CASE stepp&
CASE 5
names$ = "Pentium (75-200)"
END SELECT
'

CASE 0, 1, 2, 7
names$ = "Intel Pentium"
CASE 4
names$ = "Intel Pentium MMX"
CASE 8
names$ = "Intel Pentium MMX Mobile"
CASE 2
names$ = "Intel Pentium / Cyrix 6x86"
CASE 0, 1, 2, 3
names$ = "Intel Pentium / AMD K5"
CASE 6, 7
names$ = "AMD K6"
CASE 8
names$ = "AMD K6-2"
CASE 9
names$ = "AMD K6-III"
'
END SELECT
CASE 6
SELECT CASE mo&
CASE 1
SELECT CASE stepp&
CASE 7
names$ = "Pentium Pro"
END SELECT
'
CASE 0
names$ = "Cyrix 6x86MX / Cyrix M2"
CASE 1, 2
names$ = "AMD K7 Athlon"
CASE 0, 1
names$ = "AMD Athlon, Pentium Pro"
'
CASE 3
names$ = "Intel Pentium II"
CASE 5
names$ = "Intel Pentium II ZEON / Celeron"
CASE 6
names$ = "Intel Pentium II Mobile / Celeron A / AMD Athlon XP\MP"
CASE 7
names$ = "Intel Pentium III"
CASE 8
names$ = "Intel Pentium III E"
'
END SELECT
END SELECT
CPUType$ = names$
END FUNCTION
'
'
FUNCTION DBC$ (a&)
temp1& = a&
T$ = ""
FOR i = 31 TO 0 STEP -1
IF temp1& MOD 2 = 1 THEN
T$ = T$ + "1": temp1& = INT(temp1& / 2)
ELSE
T$ = T$ + "0": temp1& = INT(temp1& / 2)
END IF
NEXT
DBC$ = T$
END FUNCTION
'
'
SUB Flags
'detect flags
flag$ = DBC$(status.edx)
COLOR 9: PRINT "CPU Flags:", : COLOR 7
IF MID$(flag$, 1, 1) = "1" THEN PRINT "Floating Point": PRINT ,
IF MID$(flag$, 2, 1) = "1" THEN PRINT "Virtual Mode Extentions": PRINT ,
IF MID$(flag$, 3, 1) = "1" THEN PRINT "Debugging Extentions": PRINT ,
IF MID$(flag$, 4, 1) = "1" THEN PRINT "Page Size extentions": PRINT ,
IF MID$(flag$, 5, 1) = "1" THEN PRINT "Time Stamp Counter": PRINT ,
IF MID$(flag$, 6, 1) = "1" THEN PRINT "Model-Specific Registers": PRINT ,
IF MID$(flag$, 7, 1) = "1" THEN PRINT "Physical Address Extentions": PRINT ,
IF MID$(flag$, 8, 1) = "1" THEN PRINT "Machine Check Exception": PRINT ,
IF MID$(flag$, 9, 1) = "1" THEN PRINT "CMPXCHG8 Instruction": PRINT ,
IF MID$(flag$, 10, 1) = "1" THEN PRINT "On Chip APIC": PRINT ,
IF MID$(flag$, 12, 1) = "1" THEN PRINT "Fast System Calls": PRINT ,
IF MID$(flag$, 13, 1) = "1" THEN PRINT "Memory Type Range Registers": PRINT ,
IF MID$(flag$, 14, 1) = "1" THEN PRINT "Page Global Enable": PRINT ,
IF MID$(flag$, 15, 1) = "1" THEN PRINT "Machine Check Architecture": PRINT ,
IF MID$(flag$, 16, 1) = "1" THEN PRINT "Conditional Move instruction": PRINT ,
IF MID$(flag$, 17, 1) = "1" THEN PRINT "Page Attribute Table": PRINT ,
IF MID$(flag$, 18, 1) = "1" THEN PRINT "36-bit Page size Extentions": PRINT ,
IF MID$(flag$, 19, 1) = "1" THEN PRINT "Processor Serial Number": PRINT ,
IF MID$(flag$, 20, 1) = "1" THEN PRINT "CLFLUSH Instruction": PRINT ,
IF MID$(flag$, 22, 1) = "1" THEN PRINT "Debug Trace Store": PRINT ,
IF MID$(flag$, 22, 1) = "1" THEN PRINT "ACPI Supported": PRINT ,
IF MID$(flag$, 24, 1) = "1" THEN PRINT "MMX Instruction Set": PRINT ,
IF MID$(flag$, 25, 1) = "1" THEN PRINT "Fast Float Save & Restore": PRINT ,
IF MID$(flag$, 26, 1) = "1" THEN PRINT "SSE",
IF MID$(flag$, 27, 1) = "1" THEN PRINT "SSE2",
IF MID$(flag$, 28, 1) = "1" THEN PRINT "Self Snoop (ss)",
IF MID$(flag$, 29, 1) = "1" THEN PRINT "(Jackson Technology)",
IF MID$(flag$, 30, 1) = "1" THEN PRINT "Thermal Montitor Supported",
IF MID$(flag$, 31, 1) = "1" THEN PRINT "IA-64 Processor Capable",
END SUB
'
'
FUNCTION VendorID$
cpuid 0, status
count& = status.EAX
Indent$ = "": Manu$ = ""
a$ = HEX$(status.EBX)
Indent$ = Indent$ + CHR$(VAL("&H" + MID$(a$, 7, 2))) + CHR$(VAL("&H" + MID$(a$, 5, 2)))
Indent$ = Indent$ + CHR$(VAL("&H" + MID$(a$, 3, 2))) + CHR$(VAL("&H" + MID$(a$, 1, 2)))
a$ = HEX$(status.edx)
Indent$ = Indent$ + CHR$(VAL("&H" + MID$(a$, 7, 2))) + CHR$(VAL("&H" + MID$(a$, 5, 2)))
Indent$ = Indent$ + CHR$(VAL("&H" + MID$(a$, 3, 2))) + CHR$(VAL("&H" + MID$(a$, 1, 2)))
a$ = HEX$(status.ECX)
Indent$ = Indent$ + CHR$(VAL("&H" + MID$(a$, 7, 2))) + CHR$(VAL("&H" + MID$(a$, 5, 2)))
Indent$ = Indent$ + CHR$(VAL("&H" + MID$(a$, 3, 2))) + CHR$(VAL("&H" + MID$(a$, 1, 2)))
IF Indent$ = "CyrixInstead" THEN LET Manu$ = "Cyrix"
IF Indent$ = "GenuineIntel" THEN LET Manu$ = "Intel"
IF Indent$ = "AuthenticAMD" THEN LET Manu$ = "AMD"
IF Indent$ = "CentaurHauls" THEN LET Manu$ = "Centaur"
IF Indent$ = "RISERISERISE" THEN LET Manu$ = "Rise"
IF Indent$ = "UMC UMC UMC " THEN LET Manu$ = "UMC"
IF Indent$ = "NexGenDriven" THEN LET Manu$ = "NexGen"
IF Indent$ = "GenuineTMx86" THEN LET Manu$ = "Transmeta"
'
VendorID = Manu$
END FUNCTION


*** Comment
This one is better than the last. It incorperates cpu speed detection using assembly, and it (should) disables the CPU serial number on Pentium 3's and newer.
It will NOT detect the CPU speed on anything less than a Pentium.

Code:

DECLARE SUB GetSpeed ()
DECLARE SUB GetFlags ()
DECLARE FUNCTION VendorIDs$ ()
DECLARE FUNCTION CPUTypes$ ()
DECLARE SUB DisableSerial ()
DECLARE FUNCTION CPUType$ ()
DECLARE FUNCTION VendorID$ ()
DECLARE SUB GetCPUID (eax AS LONG, status AS ANY)
DECLARE SUB GetRDTSC (LowDWord&, HighDWord&)
TYPE RegType32
eax AS LONG
ebx AS LONG
ecx AS LONG
edx AS LONG
END TYPE
DIM SHARED regs AS RegType32
'
CLS
'
GetCPUID 1, regs
'
IF regs.eax AND &H40000 THEN DisableSerial: PRINT "Serial Number Disabled"
PRINT "CPU Vendor: ", VendorID$
PRINT "CPU: ", CPUType
GetFlags
GetSpeed
'
'
FUNCTION CPUType$
GetCPUID 1, regs
'
Stepping& = regs.eax AND &HF
Model& = (regs.eax AND &HF0) / &H10
Family& = (regs.eax AND &HF00) / &H100
'
SELECT CASE Family&
CASE 3
SELECT CASE Model&
CASE 0
names$ = "Intel 386Dx"
CASE 2
names$ = "Intel 386Sx"
END SELECT
CASE 4
SELECT CASE Model&
CASE 0
IF Vendor$ = "Intel" THEN names$ = "Intel 486Dx / Cyrix 486Dx2 / AMD 486Dx4"
IF Vendor$ = "Cyrix" THEN names$ = "Cyrix 486Dx2"
IF Vendor$ = "AMD" THEN names$ = "AMD 486Dx4"
CASE 1
names$ = "Intel 486Dx"
CASE 2
names$ = "Intel 486Sx"
CASE 3, 7
names$ = "Intel 486Dx2"
CASE 5
names$ = "Intel 486Sx2"
CASE 8, 9
names$ = "Intel 486Dx4"
CASE 9
IF Vendor$ = "Intel" THEN names$ = "Intel 486Dx4" ELSE name$ = "Cyrix 5x86"
CASE 14, 15
names$ = "AMD 5x86"
END SELECT
CASE 5
SELECT CASE Model&
CASE 2
SELECT CASE Stepping&
CASE 5
names$ = "Pentium (75-200)"
END SELECT
'
CASE 0, 1, 2, 7
names$ = "Intel Pentium"
CASE 4
names$ = "Intel Pentium MMX"
CASE 8
names$ = "Intel Pentium MMX Mobile"
CASE 2
names$ = "Intel Pentium / Cyrix 6x86"
CASE 0, 1, 2, 3
names$ = "Intel Pentium / AMD K5"
CASE 6, 7
names$ = "AMD K6"
CASE 8
names$ = "AMD K6-2"
CASE 9
names$ = "AMD K6-III"
END SELECT
'
CASE 6
SELECT CASE Model&
CASE 1
SELECT CASE Stepping&
CASE 7
names$ = "Pentium Pro"
END SELECT
CASE 0
names$ = "Cyrix 6x86MX / Cyrix M2"
CASE 1, 2
names$ = "AMD K7 Athlon"
CASE 0, 1
names$ = "AMD Athlon, Pentium Pro"
CASE 4
names$ = "AMD Athlon"
CASE 3
names$ = "Intel Pentium II"
CASE 5
names$ = "Intel Pentium II ZEON / Celeron"
CASE 6
names$ = "Celeron A / AMD Athlon XP"
CASE 7
names$ = "Intel Pentium III"
CASE 8
names$ = "Intel Pentium III E"
END SELECT
CASE 15
SELECT CASE Model&
CASE 0
SELECT CASE Stepping&
CASE 10
names$ = "Intel Pentium 4 - Northwood"
CASE 7
names$ = "Intel Pentium 4 - Willamette"
END SELECT
END SELECT
END SELECT
CPUType$ = names$
END FUNCTION
'
'
SUB DisableSerial
'This function is used to disable the CPU's serial number in
'Pentium 3+4 cpu's, so the Family, Model, etc can be obtained
ASM$ = CHR$(&H66) + CHR$(&HB9) + CHR$(&H19) + CHR$(&H1) + CHR$(&H0) + CHR$(&H0)
ASM$ = ASM$ + CHR$(&HF) + CHR$(&H32)
ASM$ = ASM$ + CHR$(&H66) + CHR$(&H25) + CHR$(&HFF) + CHR$(&HFF) + CHR$(&HDF) + CHR$(&HFF)
ASM$ = ASM$ + CHR$(&HF) + CHR$(&H30)
CALL ABSOLUTE(SADD(ASM$))
' MOV ECX, 119
' RDMSR
' AND EAX, FFDFFFFF
' WRMSR
END SUB
'
'
SUB GetCPUID (eax AS LONG, status AS RegType32)
STATIC loaded%, ASM$
IF NOT loaded% THEN
  loaded% = -1
  ASM$ = CHR$(&H55) 'PUSH BP
  ASM$ = ASM$ + CHR$(&H89) + CHR$(&HE5) 'MOV BP,SP
  ASM$ = ASM$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(8) 'MOV BX,[BP+08]
  ASM$ = ASM$ + CHR$(&H66) + CHR$(&H8B) + CHR$(7) 'MOV EAX,[BX]
  ASM$ = ASM$ + CHR$(&HF) + CHR$(&HA2) 'CPUID
  ASM$ = ASM$ + CHR$(&H8B) + CHR$(&H7E) + CHR$(6) 'MOV DI,[BP+6]
  ASM$ = ASM$ + CHR$(&H66) + CHR$(&H89) + CHR$(5) 'MOV [DI],EAX
  ASM$ = ASM$ + CHR$(&H66) + CHR$(&H89) + CHR$(&H5D) + CHR$(4) 'MOV [DI+04],EBX
  ASM$ = ASM$ + CHR$(&H66) + CHR$(&H89) + CHR$(&H4D) + CHR$(8) 'MOV [DI+08],ECX
  ASM$ = ASM$ + CHR$(&H66) + CHR$(&H89) + CHR$(&H55) + CHR$(&HC) 'MOV [DI+0C],EDX
  ASM$ = ASM$ + CHR$(&H5D) 'POP BP
  ASM$ = ASM$ + CHR$(&HCA) + CHR$(4) + CHR$(0) 'RETF 0004
END IF
DEF SEG
CALL ABSOLUTE(eax, status, SADD(ASM$))
END SUB
'
'
SUB GetFlags
GetCPUID 1, regs
Flags = regs.edx
PRINT "CPU Flags:", : COLOR 7
IF Flags AND 1 THEN PRINT "Floating Point": PRINT ,
IF Flags AND 2 THEN PRINT "Virtual Mode Extentions": PRINT ,
IF Flags AND 4 THEN PRINT "Debugging Extentions": PRINT ,
IF Flags AND 8 THEN PRINT "Page Size extentions": PRINT ,
IF Flags AND &H10 THEN PRINT "Time Stamp Counter": PRINT ,
IF Flags AND &H20 THEN PRINT "Model-Specific Registers": PRINT ,
IF Flags AND &H40 THEN PRINT "Physical Address Extentions": PRINT ,
IF Flags AND &H80 THEN PRINT "Machine Check Exception": PRINT ,
IF Flags AND &H100 THEN PRINT "CMPXCHG8 Instruction": PRINT ,
IF Flags AND &H200 THEN PRINT "On Chip APIC": PRINT ,
IF Flags AND &H800 THEN PRINT "Fast System Calls": PRINT ,
IF Flags AND &H1000 THEN PRINT "Memory Type Range Registers": PRINT ,
IF Flags AND &H2000 THEN PRINT "Page Global Enable": PRINT ,
IF Flags AND &H4000 THEN PRINT "Machine Check Architecture": PRINT ,
IF Flags AND &H8000 THEN PRINT "Conditional Move instruction": PRINT ,
IF Flags AND &H10000 THEN PRINT "Page Attribute Table": PRINT ,
IF Flags AND &H20000 THEN PRINT "36-bit Page size Extentions": PRINT ,
IF Flags AND &H40000 THEN PRINT "Processor Serial Number": PRINT ,
IF Flags AND &H80000 THEN PRINT "CLFLUSH Instruction": PRINT ,
IF Flags AND &H200000 THEN PRINT "Debug Trace Store": PRINT ,
IF Flags AND &H400000 THEN PRINT "ACPI Supported": PRINT ,
IF Flags AND &H800000 THEN PRINT "MMX Instruction Set": PRINT ,
IF Flags AND &H1000000 THEN PRINT "Fast Float Save & Restore": PRINT ,
IF Flags AND &H2000000 THEN PRINT "SSE",
IF Flags AND &H4000000 THEN PRINT "SSE2",
IF Flags AND &H8000000 THEN PRINT "Self Snoop (ss)",
IF Flags AND &H10000000 THEN PRINT "(Jackson Technology)",
IF Flags AND &H20000000 THEN PRINT "Thermal Montitor Supported",
IF Flags AND &H40000000 THEN PRINT "IA-64 Processor Capable",
END SUB
'
'
SUB GetRDTSC (LowDWord&, HighDWord&)
ASM$ = CHR$(&HF) + CHR$(&H31)
ASM$ = ASM$ + CHR$(&H66) + CHR$(&HBB) + MKL$(VARPTR(LowDWord&))
ASM$ = ASM$ + CHR$(&H67) + CHR$(&H66) + CHR$(&H89) + CHR$(&H3)
ASM$ = ASM$ + CHR$(&H66) + CHR$(&HBB) + MKL$(VARPTR(HighDWord&))
ASM$ = ASM$ + CHR$(&H67) + CHR$(&H66) + CHR$(&H89) + CHR$(&H13)
ASM$ = ASM$ + CHR$(&HCB)
CALL ABSOLUTE(SADD(ASM$))
'
' RDTSC
' MOV EBX, offset LowDWord&
' MOV [EBX], EAX
' MOV EBX, offset HightDWord&
' MOV [EBX], EDX
' RETF
END SUB
'
'
SUB GetSpeed
GetRDTSC St1&, St2&
IF St2& > 0 AND St1& > 0 THEN S# = St1& + (St2& * 4294967296#)
IF St2& < 0 AND St1& > 0 THEN S# = St1& + ((4294967296# + St2&) * 4294967296#)
IF St2& > 0 AND St1& < 0 THEN S# = (4294967296# + St1&) + (St2& * 4294967296#)
IF St2& < 0 AND St1& < 0 THEN S# = (4294967296# + St1&) + ((4294967296# + St2&) * 4294967296#)
'
T# = TIMER
DO: LOOP WHILE TIMER < T# + 5
GetRDTSC St1&, St2&
'
IF St2& > 0 AND St1& > 0 THEN E# = St1& + (St2& * 4294967296#)
IF St2& < 0 AND St1& > 0 THEN E# = St1& + ((4294967296# + St2&) * 4294967296#)
IF St2& > 0 AND St1& < 0 THEN E# = (4294967296# + St1&) + (St2& * 4294967296#)
IF St2& < 0 AND St1& < 0 THEN E# = (4294967296# + St1&) + ((4294967296# + St2&) * 4294967296#)
'
LOCATE CSRLIN, 1: PRINT "CPU Speed:", INT(((E# - S#) / 5) / 1000000); "Mhz"
END SUB
'
'
FUNCTION VendorID$
GetCPUID 0, regs
'
Indent$ = "": Manu$ = ""
Indent$ = MKL$(regs.ebx) + MKL$(regs.edx) + MKL$(regs.ecx)
'
IF Indent$ = "CyrixInstead" THEN LET Manu$ = "Cyrix"
IF Indent$ = "GenuineIntel" THEN LET Manu$ = "Intel"
IF Indent$ = "AuthenticAMD" THEN LET Manu$ = "AMD"
IF Indent$ = "CentaurHauls" THEN LET Manu$ = "Centaur"
IF Indent$ = "RISERISERISE" THEN LET Manu$ = "Rise"
IF Indent$ = "UMC UMC UMC " THEN LET Manu$ = "UMC"
IF Indent$ = "NexGenDriven" THEN LET Manu$ = "NexGen"
IF Indent$ = "GenuineTMx86" THEN LET Manu$ = "Transmeta"
'
VendorID = Manu$
END FUNCTION

_________________
+++ Die beliebte QBasic CD-ROM von QBasic.de - 670 MB QBasic-Stuff mit komfortabler HTML-Oberfläche. Für nur 5 EUR bestellbar auf www.antonis.de/qbcdueb.htm +++
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Devilkevin
aka Kerstin


Anmeldungsdatum: 11.11.2004
Beiträge: 2532
Wohnort: nähe Mannheim

BeitragVerfasst am: 19.03.2006, 19:49    Titel: Antworten mit Zitat

Hallo Thomas, ich habe es schoneinmal gesagt: lies bitte die Posts von anderen bevor du deinen Beitrag abschickst. Die Lösung wurde schon von Manuel gepostet und die Lösung für das Betriebssystem steht in deiner Antwort bestimmt ca. 10 mal.
_________________
www.piratenpartei.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 20.03.2006, 18:51    Titel: Antworten mit Zitat

Da bin ich ähnlciher Meinung, such bei den
Code:
SHELL"VER >TEMP.TMP"

Lösungen die beste raus und schmeiss die anderen raus.

(-> Übersichtlickeit)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz