The memory remains !

 






        Les gens qui ont un peu programmé en Basic sur CPC, le savent bien. Gérer la mémoire avec Memory, Symbol After pose parfois de gros soucis. Je suis en ce moment confronté à un qui est bien casse pied ! En fait, j'ai presque fini mon programme qui fait l'introduction de mon jeu. Et oui, dans un jeu d'aventures, l'introduction c'est très important ! Et donc à la fin du programme, je lance un autre programme en utilisant simplement l'instruction run.

          Et là, c'est le draaaaame ! Memory full, improper statement, et bien sur les symboles redéfinis qui restent tels quels ! Bon, à dire vrai dans le cadre de mon jeu, ça ne serait pas un vrai problème puisque je reste en mode 0 et que mon texte sera affiché avec la nouvelle routine typo de RetroPoke.

          Mais me retrouver avec seulement 8 Kio de mémoire disponible alors que je n'ai plus rien comme listing, même après avoir fait clear, fermé tout les fichiers etc. C'est fort de café tout de même ! Le Himem est beaucoup trop bas, et l'instruction fre(" ") me renvoie un résultat famélique de 8 kio ! Bref, il faut faire du ménage ! Mais comment ?

           Je me suis basé au départ sur ce qui était écrit dans cette documentation, qui avait l'air prometteur : CPCRULEZ > AMSTRAD CPC > > CODING > AMSLIVE > AMSLIVE n�15 - CPC (S)OS (3/3) : GESTION DE LA MÉMOIRE
Mais ça n'a finalement pas fonctionné, mais j'ai tout de même appris à utiliser l'instruction CALL &BB4E pour reseter les symboles graphiques. Sans être parfaite pour la gestion de la RAM, ça reste tout de même une solution quand le symbol after 256 ne marche pas !

                       Me voila donc avec une introduction qui ne me permet pas d'enchainer vers le programme du jeu !! 
    

          

        Et encore, je suis sur le basic du 6128, avec le Basic du 464, le problème sera encore pire ! Du coup, je creuse encore sur une autre doc : Amstrad CPC Firmware Manual - Memory Usage (cantrell.org.uk). C'est un site que je vous recommande car il documente plein de choses qu'on ne trouve pas partout, comme par exemple les vecteurs mathématiques et trigonométriques. 

        En lisant ce doc, j'ai vu que l'on pouvait "gruger" le himem du Basic très facilement. Mais pour la mémoire disponible, c'est une autre histoire ! J'ai déduit que l'on pouvait par une série de poke reproduisant les valeurs initiales après le démarrage, faire croire au Basic que toute la mémoire était à nouveau disponible. Mais ce fut une mauvaise idée, le Basic semblait fonctionner mais à la première instruction, c'était le freeze !

        Je me dis alors que j'ai du être trop parcimonieux, et donc je réalise au démarrage, un dump de la mémoire allant de AC00 à B113. Et là, j'obtiens enfin un résultat un peu plus convaincant ! Le himem est encore inférieur à ce qu'il devrait être : 38523 au lieu de 42619 mais ça reste un progrès et la mémoire libre obtenue via l'instruction fre(" ") donne aussi 38 kio.

        Le résultat n'est donc pas parfait, mais il a l'air stable. Ainsi, je peux lancer un programme après l'intro. Pour l'instant ce programme sort sur le basic. Si je relance l'intro, celle-ci fonctionne à nouveau et quand je reviens à cette étape, la quantité de RAM reste inchangée.

        C'est encourageant, il faudra que je fasse le dump équivalent pour un Amstrad 464 et que je fasse encore plus de tests sur ces 2 versions du Basic. Bref, encore du pain sur la planche !

Commentaires

Posts les plus consultés de ce blog

Démarrage officiel du projet Felgon : Courage et vérité

Petite progression