Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Implémenter un malloc() qui tire avantage des 256 ko sur SH4
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Implémenter un malloc() qui tire avantage des 256 ko sur SH4

Posté le 09/09/2018 10:44

Pour CasioPython, il y a assez peu de mémoire disponible (2 ko), il faudrait donc une implémentation de malloc() (et donc aussi de free, realloc, etc) qui puisse allouer dans ce bloc de 256 ko.

Cette implémentation devra allouer dans le bloc normal de 48 ko si ce n'est pas une SH3 (histoire que je puisse toujours tester sur mon émulateur), mais si on peut juste définir un pointeur de départ et une taille, ça devrait se faire avec un simple if et le syscall pour avoir la version de l'OS.

Du coup est ce qu'il y a une implémentation pour laquelle on peut définir le pointeur de départ et la taille allouable ?
Aussi, c'est quoi les adresses du bloc de 256 ko et de celui de 48 ko ?


Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 19/09/2018 12:53 | #


Y'a pas besoin de connaître mes sources : me faut juste un malloc qui utilise les 256k des SH4 (si ça détecte que c'est une SH4, à l'aide du syscall OSGetVersionAsInt) en plus des 48k normaux
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Hackcell Hors ligne Maître du Puzzle Points: 1524 Défis: 11 Message

Citer : Posté le 19/09/2018 13:01 | #


Si c'est juste ça
Je le ferai bien, mais là j'essaie de faire de la POO en C99, donc je suis un peu occupé...
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 03/01/2019 15:08 | #


Heu, le bloc de 256k il sert à quoi sur les SH3 ?

Parce que là j'ai foiré ma comparaison et il assume toujours que c'est une SH4 (alors que l'émulateur est bien en SH3, avec un OS de 01.03.0000), mais CasioPython a aucun problème à allouer 256k sur la zone de 0x88040000 (avec le script de critor) :


Il semble y avoir vraiment plus de mémoire, avec la mémoire normale (j'alloue que 32k) il peut pas calculer fact(500) mais là il peut. Par contre quand il calcule fact(1000), il peut pas, et quand je retourne à l'éditeur ça crashe, donc doit y avoir un bug quelque part.
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 03/01/2019 15:19 | #


Le bloc en question n'existe pas sur les anciennes révisions matérielles. Son apparition a toujours été liée à celle des SH4 dans la documentation que j'ai vue, mais même si certains modèles SH3 l'avaient, tu ne pourrais pas trop faire de généralités.

L'émulateur, comme d'habitude, est une exception parmi les exceptions comme en tout ce qui traite de bas niveau. Il n'existe probablement aucune calculatrice physique qui se comporte exactement comme l'émulateur. Tu peux y mettre toute la bonne volonté du monde, le comportement de l'émulateur ne peut pas être pris comme référence pour tester les SH3. Utilise une calculatrice physique - si tu n'en as pas, je peux le faire de temps en temps.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 03/01/2019 19:30 | #


Ben justement sur ma calto physique SH3 ça a l'air de marcher, mais il y a un peu moins de mémoire dispo pour une quelconque raison :o

Sur SH4 j'arrive à calculer jusqu'à fact(674) alors que sur ma SH3 (graph 95 SD) j'arrive à calculer jusqu'à fact(646).

Voilà l'addin si tu veux tester : https://puu.sh/Cr8ur.g1a
La mémoire disponible se calcule avec gc.mem_free()+gc.mem_alloc() et le script de factoriel est le suivant :
def f(n):
  if n==0:
    return 1
  else:
    return n*f(n-1)

Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 03/01/2019 19:43 | #


Eh bien, on dirait que cette zone existe bien sur ma SH3 également.

Le GC indique 258048 octets de mémoire libre, et j'arrive à calculer jusqu'à f(676), encore que j'ai utilisé la fonction suivante (peut-être qu'on gagne quelques octets) :

def f(n):
  return 1 if n==0 else n*f(n-1)

Sauf que le problème reste : on ne sait pas comment détecter les calculatrices qui ont la zone en question...

Ajouté le 03/01/2019 à 19:45 :
J'ai oublié de signaler que j'ai rencontré trois fois un bug où le curseur est une ligne plus bas que le texte que j'écris. Très bizarre.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 03/01/2019 23:12 | #


Ben justement : est ce qu'il y a une calculette SH3 qui ne dispose pas de cette zone ? L'émulateur l'a alors qu'il est assez ancien.
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Sentaro21 En ligne Membre Points: 877 Défis: 0 Message

Citer : Posté le 04/01/2019 06:40 | #


I test a simple existence of the real memory in C.Basic.
How is this method?
void * HiddenRAM(void){    // Check HiddenRAM
    volatile unsigned int *NorRAM=(volatile unsigned int*)0xA8000000;    // Nomarl RAM TOP (no cache area)
    volatile unsigned int *HidRAM=(volatile unsigned int*)0x88040000;    // Hidden RAM TOP (cache area)
    int a,b;
    int K55=0x55555555;
    int KAA=0xAAAAAAAA;
    char * HidAddress=NULL;

    IsHiddenRAM=0;
    a= *NorRAM;
    b= *HidRAM;
    *NorRAM=K55;
    *HidRAM=KAA;
    if ( *NorRAM != *HidRAM ) {
            HidAddress=(char*)HidRAM;    // Hidden RAM Exist
            IsHiddenRAM=1;
    }
    *NorRAM=a;
    *HidRAM=b;
    return HidAddress;
}



Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 04/01/2019 09:05 | #


Are you absolutely sure that the address space at 0x88040000 wraps around to the start of the RAM when the hidden area does not exist?
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Sentaro21 En ligne Membre Points: 877 Défis: 0 Message

Citer : Posté le 04/01/2019 10:32 | #


I can't confirm it, but I think that no problem if C.Basic works well on the real calculator.

fx-9860G(Graph 85) and Slim are sure to don't have the hidden area,
but I don't know it how about early SH3 model of fx-9750GII(Grpah 35+).
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 04/01/2019 10:53 | #


Sentaro21 a écrit :
I can't confirm it, but I think that no problem if C.Basic works well on the real calculator.

The thing is, currently in CasioPython if space does not wrap around then the main memory will be overwritten by the add-in. This is quite dangerous!

fx-9860G(Graph 85) and Slim are sure to don't have the hidden area,
but I don't know it how about early SH3 model of fx-9750GII(Grpah 35+).

I consider it fair if we say that CasioPython is not compatible with these old models. But it's better if we have a detection method that prints an error instead of wrecking the memory.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Sentaro21 En ligne Membre Points: 877 Défis: 0 Message

Citer : Posté le 04/01/2019 12:15 | #


That means,
Is it a problem of the CasioPython?

I think the hidden memory judgment to be all right by how to use in C.Basic.
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 04/01/2019 17:38 | #


Is it a problem of the CasioPython?

Currently CasioPython always assumes the hidden area exists.

Sentaro21 a écrit :
I think the hidden memory judgment to be all right by how to use in C.Basic.

Your technique looks reliable. Did you try it on a calculator without the hidden area?

I think your solution is great. I will probably use it in a program of mine, if you allow it.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 04/01/2019 18:40 | #


No, it always assume it exists only on the test version I linked, the actual version assumes it doesn't exist if the calculator is SH3
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 04/01/2019 20:45 | #


You should consider using Sentaro's method then.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Sentaro21 En ligne Membre Points: 877 Défis: 0 Message

Citer : Posté le 05/01/2019 06:04 | #


@Lephenixnoir
Thanks!
I test it in fx-9860G(SH3) and Slim(SH3).
I cannot give a test with fx-9750GII(SH3),
however i think that it is all right.


@Zezombye
CasioPython is so great!!
I'm happy that languages to be usable with fx increase.

Please feel free to use the hidden memory judgment method in C.Basic.

Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 05/01/2019 12:01 | #


Sentaro21 a écrit :
I test it in fx-9860G(SH3) and Slim(SH3).
I cannot give a test with fx-9750GII(SH3),

Ooh, I did not understand this. Thanks for contributing this very useful method (even more so if most SH3 have the hidden area)!
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Sentaro21 En ligne Membre Points: 877 Défis: 0 Message

Citer : Posté le 05/01/2019 14:11 | #


Thanks
Do you know when Graph35+ of first SH3 model released?
Could it be that Graph35+ have 512KB RAM same as the Graph75 at first?
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Critor En ligne Administrateur Points: 2571 Défis: 18 Message

Citer : Posté le 05/01/2019 14:12 | #


If it even works on fx-9860G/Graph 85, I think we can simply assume all SH3 Casio calculators have those 256K too then.

Great news, thanks !


Ajouté le 05/01/2019 à 14:16 :
Sentaro21 a écrit :
Thanks
Do you know when Graph35+ of first SH3 model released?


If I'm not mistaken :
- the Graph 85 / fx-9860G was released for back to school 2005
- the SH3 Graph 35+USB ( > fx-9750GII ) and Graph 75/95 ( = fx-9860GII ) were released for back to school 2009
- the SH3 Graph 25+Pro ( = fx-7400GII ) was released for back to school 2010
Sentaro21 En ligne Membre Points: 877 Défis: 0 Message

Citer : Posté le 05/01/2019 14:35 | #


Thanks Critor.
It is mostly decided that all Graph35+ has 512KB RAM from release time.

If it even works on fx-9860G/Graph 85, I think we can simply assume all SH3 Casio calculators have those 256K too then.

It works well on fx-9860G/Slim, but the hidden RAM (+256KB) does not detect it.
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 112 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd