Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Implémenter un malloc() qui tire avantage des 256 ko sur SH4
ZezombyeEn ligneRédacteurPoints: 1595 Défis: 12 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 ?


Pages : Précédente1, 2
ZezombyeEn ligneRédacteurPoints: 1595 Défis: 12 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
HackcellHors ligneMembrePoints: 978 Défis: 6 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é...
I usually spend meow time cosplaying as a diligent student...
So it can get pretty stressful.
That's exactly why PC is such a happy place for meow to be ⭐
ZezombyeEn ligneRédacteurPoints: 1595 Défis: 12 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
LephenixnoirEn ligneAdministrateurPoints: 14138 Défis: 136 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.
ZezombyeEn ligneRédacteurPoints: 1595 Défis: 12 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
LephenixnoirEn ligneAdministrateurPoints: 14138 Défis: 136 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.
ZezombyeEn ligneRédacteurPoints: 1595 Défis: 12 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
Sentaro21Hors ligneMembrePoints: 351 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.
LephenixnoirEn ligneAdministrateurPoints: 14138 Défis: 136 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?
Sentaro21Hors ligneMembrePoints: 351 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.
LephenixnoirEn ligneAdministrateurPoints: 14138 Défis: 136 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.
Sentaro21Hors ligneMembrePoints: 351 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.
LephenixnoirEn ligneAdministrateurPoints: 14138 Défis: 136 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.
ZezombyeEn ligneRédacteurPoints: 1595 Défis: 12 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
LephenixnoirEn ligneAdministrateurPoints: 14138 Défis: 136 Message

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


You should consider using Sentaro's method then.
Sentaro21Hors ligneMembrePoints: 351 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.
LephenixnoirEn ligneAdministrateurPoints: 14138 Défis: 136 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)!
Sentaro21Hors ligneMembrePoints: 351 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.
CritorEn ligneAdministrateurPoints: 1182 Défis: 0 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
Sentaro21Hors ligneMembrePoints: 351 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.
Pages : Précédente1, 2

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 56 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