[Résolu] Savoir sous quel processeur tourne un applicatif ?
-
- Messages : 604
- Inscription : lun. 26/avr./2010 16:14
- Localisation : S 48° 52' 31'' / O 123° 23' 33''
[Résolu] Savoir sous quel processeur tourne un applicatif ?
Salut à tous !!!
Y a-t-il un moyen PB ou une astuce pour savoir sous quel processeur tourne la machine qui exécute un applicatif ???
Le but étant d'écrire un code (Lecture/Ecriture de tags ID3v2) qui soit multiOS et compatible intel/motorola.
Or, comme il doit y avoir des accès mémoire et fichiers, se pose le problème de la lecture/écriture des octets en big endian/little endian...
Est-ce que l'utilisation de la constante #PB_Compiler_OS suffirait ??
Comme, par exemple, je ne connais pas trop Linux, je suppose qu'il doit pouvoir peut-être tourner sous ces deux processeurs ??? Auquel cas, #PB_Compiler_OS ne serait pas satisfaisant...
Merci.
Y a-t-il un moyen PB ou une astuce pour savoir sous quel processeur tourne la machine qui exécute un applicatif ???
Le but étant d'écrire un code (Lecture/Ecriture de tags ID3v2) qui soit multiOS et compatible intel/motorola.
Or, comme il doit y avoir des accès mémoire et fichiers, se pose le problème de la lecture/écriture des octets en big endian/little endian...
Est-ce que l'utilisation de la constante #PB_Compiler_OS suffirait ??
Comme, par exemple, je ne connais pas trop Linux, je suppose qu'il doit pouvoir peut-être tourner sous ces deux processeurs ??? Auquel cas, #PB_Compiler_OS ne serait pas satisfaisant...
Merci.
Dernière modification par boddhi le mar. 20/juil./2010 22:34, modifié 2 fois.
Re: Comment savoir sous quel processeur tourne un applicatif
Bonjour,
J’ai fait plusieurs sources qui charge des fichiers genre CAB, ZIP et qui fonctionne en Multi-OS. Il faut juste bien choisir le types des variables et donc le nombre de bits a prendre.
Cordialement,
GallyHC
J’ai fait plusieurs sources qui charge des fichiers genre CAB, ZIP et qui fonctionne en Multi-OS. Il faut juste bien choisir le types des variables et donc le nombre de bits a prendre.
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
-
- Messages : 604
- Inscription : lun. 26/avr./2010 16:14
- Localisation : S 48° 52' 31'' / O 123° 23' 33''
Re: Comment savoir sous quel processeur tourne un applicatif
@GallyHC
J'ai rapidement examiné 2 de tes codes : Chargements CAB et PCX
Effectivement, je sais qu'en choisissant le type de variables dans une structure on peut contourner (seulement) une partie du problème...
Tes codes se seraient, en effet, compliqués si tu avais eu à gérer l'écriture en fonction du processeur...
Voilà
Je dois donc écrire une procédure qui inverse l'ordre des octets, quelque soit le type de variable > .b (ça, ça n'est pas le problème
), et ce, en fonction du processeur utilisé (ici, mon problème
)...
Je ne peux pas me permettre de traiter chaque valeur (.u, .i, ...) en .b pour être sûr qu'elle soit convenablement lue ou écrite...
D'où ma question...
J'ai rapidement examiné 2 de tes codes : Chargements CAB et PCX
Effectivement, je sais qu'en choisissant le type de variables dans une structure on peut contourner (seulement) une partie du problème...
Tes codes se seraient, en effet, compliqués si tu avais eu à gérer l'écriture en fonction du processeur...
Voilà
Code : Tout sélectionner
a.l=370934016
Debug PeekL(@a)
Debug "Intel retourne"
Debug Hex(PeekL(@a))
Debug "au lieu de"
Debug "$"+RSet(Hex(PeekB(@a)),2,"0")+RSet(Hex(PeekB(@a+1)),2,"0")+RSet(Hex(PeekB(@a+2)),2,"0")+RSet(Hex(PeekB(@a+3)),2,"0")



Je ne peux pas me permettre de traiter chaque valeur (.u, .i, ...) en .b pour être sûr qu'elle soit convenablement lue ou écrite...
D'où ma question...
Re: Comment savoir sous quel processeur tourne un applicatif
Je ne vois pas le problème...
370934016 donne bien $161C0100 en hexa et on inverse les poids fort et les poids faible. Donc $00011c16.
Cordialement,
GallyHC
370934016 donne bien $161C0100 en hexa et on inverse les poids fort et les poids faible. Donc $00011c16.
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
-
- Messages : 604
- Inscription : lun. 26/avr./2010 16:14
- Localisation : S 48° 52' 31'' / O 123° 23' 33''
Re: Comment savoir sous quel processeur tourne un applicatif
Intel retourne $161C0100 mais Motorola retournera $00011C16 soit 72726.370934016 donne bien $161C0100 en hexa et on inverse les poids fort et les poids faible. Donc $00011c16.
Il faut donc que je sache quand inverser la chaine hexa...
Exemple
Code : Tout sélectionner
Structure ID3
TagID3.s{3}
VersionMaj.b
VersionMin.b
Flag.b
Taille.i
EndStructure
Fichier.s="C:\test.mp3"
If OpenFile(0,Fichier)
WriteByte(0,$49)
WriteByte(0,$44)
WriteByte(0,$33)
WriteByte(0,$04)
WriteByte(0,$00)
WriteByte(0,$80)
WriteByte(0,$00)
WriteByte(0,$01)
WriteByte(0,$1C)
WriteByte(0,$16)
CloseFile(0)
EndIf
Debug "L'entête du fichier correspond à cela :"
Debug "$49 44 33 04 00 80 00 01 1C 16"
Debug "où $00 01 1C 16 équivaut à "+Str($00011C16)
Debug ""
Define.ID3 *TagID3
If ReadFile(0,Fichier)
*TagID3=AllocateMemory(10)
ReadData(0,*TagID3,10)
Debug "Sous Intel on obtiendra $"+Hex(*TagID3\Taille)+" soit "+Str(*TagID3\Taille)
Debug "alors que sous Motorola on aura bien $00011C16 soit 72726"
CloseFile(0)
EndIf
DeleteFile(Fichier)
Re: Comment savoir sous quel processeur tourne un applicatif
Salut boddhi
Sous window il faut utilisé l'api GetSystemInfo. Fait une recherche sur le fofo U.S pour voir?
Michel
Sous window il faut utilisé l'api GetSystemInfo. Fait une recherche sur le fofo U.S pour voir?
Michel
Re: Comment savoir sous quel processeur tourne un applicatif
Re
Comme aujourd'hui c'est mon jour de bonté, j'ai cherché pour toi.
Comme aujourd'hui c'est mon jour de bonté, j'ai cherché pour toi.

Code : Tout sélectionner
Structure SysInfo
StructureUnion
dwOemId.l
wProcessorArchitecture.w
wReserved.w
EndStructureUnion
dwPageSize.l
lpMinimumApplicationAddress.l
lpMaximumApplicationAddress.l
dwActiveProcessorMask.l
dwNumberOfProcessors.l
dwProcessorType.l
dwAllocationGranularity.l
wProcessorLevel.w
wProcessorRevision.w
EndStructure
GetSystemInfo_(@si.SysInfo)
Debug si\wProcessorArchitecture
Debug "---"
Debug si\dwPageSize
Debug si\dwActiveProcessorMask
Debug si\dwNumberOfProcessors
Debug si\dwProcessorType
Debug si\wProcessorLevel
-
- Messages : 604
- Inscription : lun. 26/avr./2010 16:14
- Localisation : S 48° 52' 31'' / O 123° 23' 33''
Re: Comment savoir sous quel processeur tourne un applicatif
@MLD
Merci pour ta bonté et tes recherches
Si j'ai bien compris, on utiliserait GetSystemInfo_(@si.SysInfo) pour savoir si l'ordinateur est basé sur un Intel ou non. Ok.
Je sais, je vais encore jouer les chieurs
, mais...
C'est une API windows et si elle convient parfaitement pour Windows, imbriquée dans un CompilerIf #PB_Compiler_OS, elle ne résout que partiellement mon objectif qui est, à partir d'un code MultiOS, de déterminer sous quel processeur une machine tourne...
Comme je ne connais ni Linux ni MacOs, je n'ai aucune idée de la manière dont je dois procéder si ce n'est exclure l'usage de ce code à ces OS. Ce qui n'est pas du tout mon but...
Je garde quand même ton bout de code en archive, il servira bien un jour ou l'autre
Merci pour ta bonté et tes recherches

Si j'ai bien compris, on utiliserait GetSystemInfo_(@si.SysInfo) pour savoir si l'ordinateur est basé sur un Intel ou non. Ok.
Je sais, je vais encore jouer les chieurs

C'est une API windows et si elle convient parfaitement pour Windows, imbriquée dans un CompilerIf #PB_Compiler_OS, elle ne résout que partiellement mon objectif qui est, à partir d'un code MultiOS, de déterminer sous quel processeur une machine tourne...
Comme je ne connais ni Linux ni MacOs, je n'ai aucune idée de la manière dont je dois procéder si ce n'est exclure l'usage de ce code à ces OS. Ce qui n'est pas du tout mon but...
Je garde quand même ton bout de code en archive, il servira bien un jour ou l'autre

Re: Comment savoir sous quel processeur tourne un applicatif
Je comprend. Mais dans ce cas il faut faire un soft qui démarre avant le système d'exploitation. Une seule solution le langage machine ou assembleur , pour aller chercher l'information dans le bios. (si je ne me trompe pas ?)boddhi a écrit :@MLD
Merci pour ta bonté et tes recherches
Si j'ai bien compris, on utiliserait GetSystemInfo_(@si.SysInfo) pour savoir si l'ordinateur est basé sur un Intel ou non. Ok.
Je sais, je vais encore jouer les chieurs, mais...
C'est une API windows et si elle convient parfaitement pour Windows, imbriquée dans un CompilerIf #PB_Compiler_OS, elle ne résout que partiellement mon objectif qui est, à partir d'un code MultiOS, de déterminer sous quel processeur une machine tourne...
Comme je ne connais ni Linux ni MacOs, je n'ai aucune idée de la manière dont je dois procéder si ce n'est exclure l'usage de ce code à ces OS. Ce qui n'est pas du tout mon but...
Je garde quand même ton bout de code en archive, il servira bien un jour ou l'autre
Michel
Re: Comment savoir sous quel processeur tourne un applicatif
Salut Michel
Non, tu ne te trompes pas Michel, j'allais proposer exactement la même chose. Mais je crois qu'en C se sera beaucoup mieux (avec GetSystemInfo_(@si.SysInfo) appelée avant le test des types, plus rapide je crois..)...il faut faire un soft qui démarre avant le système d'exploitation. Une seule solution le langage machine ou assembleur , pour aller chercher l'information dans le bios. (si je ne me trompe pas ?)
- TazNormand
- Messages : 1297
- Inscription : ven. 27/oct./2006 12:19
- Localisation : Calvados (14)
Re: Comment savoir sous quel processeur tourne un applicatif
@Mekkisoft/PbPrint : GetSystemInfo_ étant également une API windows, ça ne va pas l'aider non plus pour les proco Motorola/IBM PowerPC ou autre sous Linux. Arrêtes de polluer les topics avec tes réponses à 2 eurocents (et encore je suis généreux) !!! la cinquantaine et un comportement d'ado ! tss, et dire que tu veux nous donner des leçons
@Fred/Dobro/LSI : bannissez-moi ce parasite avant qu'il ne prolifère

@Fred/Dobro/LSI : bannissez-moi ce parasite avant qu'il ne prolifère

Re: Comment savoir sous quel processeur tourne un applicatif
Il y a peu etre un truc que je ne comprend plus. Mais une valeur numerique si on fait une convertion simple en hexa ce sera toujours le même resultat, ou alors l'hexa change et donc 1,2,3,4,5,6,7,8,9,A,B,C,D,E,F n'est plus la base 16...
Donc en faisant une conversion simple et en inversant apres sa donne quoi?
370934016 en hexa pure ce sera toujours $161C0100 et non pas $00011c16 (vu que $00011c16 = 72726), ou y a un truc que je ne comprends pas ?
Cordialement,
GallyHC
Donc en faisant une conversion simple et en inversant apres sa donne quoi?
370934016 en hexa pure ce sera toujours $161C0100 et non pas $00011c16 (vu que $00011c16 = 72726), ou y a un truc que je ne comprends pas ?
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
-
- Messages : 604
- Inscription : lun. 26/avr./2010 16:14
- Localisation : S 48° 52' 31'' / O 123° 23' 33''
Re: Comment savoir sous quel processeur tourne un applicatif
Et dire que la solution était là sous mes yeux... J'ai honte
Il suffit de :
Vous confirmez ??? (Si quelqu'un tourne sous Motorola...)

Il suffit de :
Code : Tout sélectionner
Valeur1.w=1
Valeur2.b=PeekB(@Valeur1)
Debug "Valeur 1 : $"+Hex(Valeur1)
Debug "Valeur 2 : $"+Hex(Valeur2)
If Valeur1=Valeur2
Debug "On suppose qu'on tourne sous Intel"
Else
Debug "On suppose qu'on tourne sous Motorola"
EndIf
Debug ""
; Ce qui donne, condensé
Valeur1=1
If PeekB(@Valeur1)=Valeur1
Debug "On suppose qu'on tourne sous Intel"
Else
Debug "On suppose qu'on tourne sous Motorola"
EndIf
-
- Messages : 604
- Inscription : lun. 26/avr./2010 16:14
- Localisation : S 48° 52' 31'' / O 123° 23' 33''
Re: Comment savoir sous quel processeur tourne un applicatif
Le problème est qu'un Intel n'agence pas les octets en mémoire de la même manière qu'un Motorola.GallyHC a écrit :370934016 en hexa pure ce sera toujours $161C0100 et non pas $00011c16 (vu que $00011c16 = 72726), ou y a un truc que je ne comprends pas ?
Pourquoi faire simple quand on peut faire compliqué ? (j'ignore en tout cas les raisons historique, architecturale, etc de cette conception)
Un test simple pour comprendre :
Code : Tout sélectionner
Valeur.w=1
Calldebugger
Tu auras comme résultat :
Sous Intel : $01 00
Sous Motorola : $00 01
Si tu continues avec :
Code : Tout sélectionner
AutreValeur.w=PeekB(@Valeur)<<8+PeekB(@Valeur+1)
Debug AutreValeur
Ce qui n'est pas la même chose...
