CPU Speed + RAM Größe mit Pascal messen?

Dieses Thema im Forum "Programmieren" wurde erstellt von Bond, 16. Februar 2003.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Bond

    Bond Halbes Megabyte

    Registriert seit:
    17. November 2000
    Beiträge:
    875
    Hi!
    Folgendes Problem:

    Ich suche eine Funktion, die mir die Prozessorgeschwindigkeit angiebt (also z. B. 1200 MHz), wenn sie außerdem noch den CPU-Typ (PIII, AMD....) rauskriegt wäre das auch nicht schlecht aber nicht zwingend nötig.

    Außerdem suche ich noch eine Methode um die Größe des installierten RAMs zu ermitteln (z. B. 128 MB)....

    Das ganze muss mit Pascal und/oder Assembler funktionieren!!!

    Danke für sachkundigen Rat
    -Bond-
     
  2. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    Hi...

    sind ja echt viele Probleme auf einmal. Zu (1): eax & edx müssten in TP 7 gehen >>> mov EAX,[2*EBX+4*EDX]. Zu (2): Keine Ahnung über Free-Pascal. :-(

    MfG & CU
    [Diese Nachricht wurde von SourceLE am 25.02.2003 | 23:01 geändert.]
     
  3. Sumo

    Sumo Kbyte

    Registriert seit:
    30. August 2000
    Beiträge:
    178
    Arrrgh! Ein "Sie müssen registriert sein um diese Funktion zu nutzen" Fehler.
    Also nochmal:

    Um 32Bit Register zu nutzen zu können ein 66h vor jeden Befehl schreiben, der 32 Bit braucht.
    40h -> inc ax
    6640h -> inc eax

    in Pascal:
    asm;
    db 66h
    inc ax //daraus wird inc eax
    db 66h
    mov ax,bx //wird zu mov eax,ebx
    end;

    Bin dann noch durch Zufall auf eine Unit gestossen, die dir vielleicht mit der RAM Größe weiterhelfen kann.
    http://www.uni-karlsruhe.de/~lc15/INFO/PASCAL/systemunit.html

    Hab sie aber nicht getestet.
     
  4. Bond

    Bond Halbes Megabyte

    Registriert seit:
    17. November 2000
    Beiträge:
    875
    Uiiii... na dann wünsch ich mal gute Besserung. Kannst ja die Zeit schonmal sinnvoll nutzen und darüber nachgrübeln, anstatt nachts noch 9live zu sehen *g* ...
     
  5. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    Hi...

    hänge grade mit ner "scheiss" Grippe und 39+ im Bette. Sobald ich wieder wach bin nehm ich mir das unter die Lupe.

    CU & Schnarch
     
  6. Bond

    Bond Halbes Megabyte

    Registriert seit:
    17. November 2000
    Beiträge:
    875
    Vielen Dank erstmal für die vielen Antworten!

    Also, ich habe jetzt mal alles mögliche Ausprobiert und bin dabei auf zwei Probleme gestoßen:

    1) Pascal kann ja nur 16 Bit. Ich habe deshalb Probleme die Register "eax" und "edx" in Pascal (auch nicht mittels integriertem Assembler) anzusprechen. Gibt es eine Chance das trotzdem zu schaffen?

    2) Ich habs auch mal mit Free-Pascal versucht (www.freepascal.org), welches ja 32Bit läuft und das eigentlich unterstützen sollte. Erstens hat dieses noch diverse anddere lästige (Grafikmodus)Bugs, aber ein anderes Problem hatte ich damit- ich konnte folgende Prozedur nicht starten:

    PROCEDURE clearpuffer;
    BEGIN
    MEMW[$40:$1a] := MEMW[$40:$80];
    MEMW[$40:$1c] := MEMW[$40:$80];
    END;

    Unter TP 7.0 hat die immer astrein gefunzt, nun scheint Free-Pascal die Befehle MEMW und so nicht zu kennen. Habe aber leider noch keine Möglichkeit gefunden, mit anderen Befehlen das gleiche zu erreichen. Jemand eine Idee???
     
  7. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    CODE\'
    ASSUME cs:_TEXT

    GetCPU PROC
    pushf ;save flags for exit
    pushf ;push flags again
    pop bx ;get flags in bx
    and bx, 0FFFH ;clear bits 12-15
    push bx
    popf ;pop flags again
    pushf ;now push them back onto stack
    pop ax ;get flags in ax
    and ax, 0F000H ;mask off unwanted bits
    cmp ax, 0F000H ;are flags 12-15 set?
    jz cpu_86 ;branch if so

    or bx, 0F000H ;attempt to set flags again
    push bx ;push to stack
    popf
    pushf ;push flags to stack
    pop ax ;get flags in ax
    and ax, 0F000H ;check flags 12-15
    jz cpu_286 ;branch if 286 processor

    mov edx, esp ;get stack pointer
    and sp, NOT 3 ;align stack to avoid AC fault
    pushfd
    pop eax ;get 32-bit flags
    mov ecx, eax
    xor eax, 40000H ;set AC bit in flags
    push eax
    popfd ;get flags again
    pushfd ;push flags to stack
    pop eax ;get the result
    mov esp, edx ;restore stack
    xor eax, ecx ;set if AC bit changed
    jz cpu_386 ;branch if 386 cpu

    mov ax, 486H ;set 80486 processor type
    jmp short get_cpu_exit ;branch to exit

    cpu_386:
    mov ax, 386H ;set 80386 processor
    jmp short get_cpu_exit ;branch to exit

    cpu_286:
    mov ax, 286H ;set 80286 processor type
    jmp short get_cpu_exit ;branch to exit

    cpu_86:
    mov ax, 86H ;set processor type to 8086

    get_cpu_exit:
    popf ;restore original flags
    ret
    GetCPU ENDP

    _TEXT ENDS

    Ab Pentium ist das aber anders...

    MfG & CU
     
  8. SourceLE

    SourceLE Kbyte

    Registriert seit:
    4. November 2002
    Beiträge:
    488
    Hi...

    mit blossen Pascal sind Deine Karten schlecht. Du kannst aber Assemblercode einbinden. Unter Pascal für DOS kannst du nur CPU\'s bis 486 auslesen und beim Ram nur die 640k bzw. Extendet Speicher. Mit einem Trick kannst Du aber einige BIOS-Werte auslesen. Jedoch müssen diese im Shadow stehen.

    Wenn Du aber Pascal für Win benutzt sieht das schon besser aus.

    MfG & CU
     
  9. Sumo

    Sumo Kbyte

    Registriert seit:
    30. August 2000
    Beiträge:
    178
    Ach so. Jetzt hab ich erst verstanden was du suchst.
    Such mal bei Intel.com nach Application Note Nr. 485
    oder bei
    amd.com nach Application Note #20734.
    Den Befehl kennen aber erst die neueren Prozessoren. Musst halt das machen was da steht. Wahrscheinlich musst du in Pascal sogar mit Opcodes arbeiten um den Befehl nutzen zu können.
     
  10. Sumo

    Sumo Kbyte

    Registriert seit:
    30. August 2000
    Beiträge:
    178
    Hab mal was wegen der Prozessorgeschwindigkeit gelesen.
    http://www.c-plusplus.de/ubb/cgi-bin/ultimatebb.cgi?ubb=get_topic&f=17&t=000716

    Zum RAM fällt mir jetzt nichts ein.
     
  11. ossilotta

    ossilotta Ehren-Moderator

    Registriert seit:
    1. Juli 2001
    Beiträge:
    8.646
    eventuell auch hier:
    http://www.pcwelt.de/downloads/system/systemdiagnose/8090/

    mfg ossilotta
     
Status des Themas:
Es sind keine weiteren Antworten möglich.

Diese Seite empfehlen