[Basic] Utiliser l'espace graphique comme espace de stockage
Posté le 14/06/2020 19:05
Testé sur 35+e II.
Ce texte est un peu brouillon, je le retoucherai si besoin. Destiné aux programmeurs en mode texte (càd moi
).
Il se trouve que l'écran graphique de nos calculatrices peut-être utilisée comme espace de stockage !
Avec les fonctions simples
PxlOn,
PxlOff,
PxlChg, 'PxlTest(' nous avons accès à 127x63 cellules (soit 8001 bits ou presque 1000 octets !) de mémoire avec virtuellement aucun coût !
PxlOn 1,1 //rend la cellule 1;1 "vraie"
PxlOff 63,127 //rend la cellule 127;63 "fausse"
PxlChg 50,50 //inverse l'état de la cellule 50;50
Locate 1,1,PxlTest(1,1) //lit l'état de la cellule 1;1
Rien de très révolutionnaire, mais je pense qu'il est important d'en garder une trace quelque part (je n'avais jamais vu cette technique sur le forum).
Les Pictures peuvent être utilisées pour obtenir des espaces de mémoire variables ne pesant que 2048 octets (toujours pour 8001 bits utiles), ce qui en fait un système de stockage très efficace et plutôt rapide.
Notez que pour utiliser ce système en mode texte, il faut modifier l'écran graphique avant d'appeler
PxlTest( pour éviter une erreur fatale.
PxlTest( fonctionne très bien en mode texte et travaille sur le buffer graphique sans raffraîchir l'écran. (C'est à dire qu'il le fait de façon transparente !)
Voici un autre code d'exemple affichant les valeurs des 127 cellules de la ligne supérieure à l'aide d'une boucle :
PxlChg 1,1 //On utilise deux PxlChg pour "activer" l'espace graphique
PxlChg 1,1
For 1→A To 127
Locate 1,1,PxlTest(1,A)
Locate 1,2,A
Next
Ce sera tout, je ne suis pas rédacteur j'ai juste balancé des données et je m'en excuse
Citer : Posté le 14/06/2020 19:39 | #
Je ne suis pas très convaincu, pour les raisons suivantes :
Stocker 1bit coûte autant que stocker 8001bits, c'est à dire 2048octets.
Le meilleur ratio n'est toujours pas mirobolant et la fonction de décodage sera plutôt volumineuse puisqu'elle s'appuie sur de "gros opcodes". Ça devient un peu plus intéressant si ça fonctionne avec des Pictures 1024.
Je n'ai pas de données chiffrées à avancer mais je ne crois pas me tromper en affirmant que les fonctions PxlXXX sont lentes.
Pour stocker uniquement des bits, un système de stockage basé sur un dictionnaire de Str comme on a déjà pu en discuter sur le forum à l'époque avec Alex_1186 me semble plus performant.
Merci en tout cas d'avoir documenté cette technique.
La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Citer : Posté le 14/06/2020 19:49 | #
Il y a des avantages mineurs comme le fait qu'on peut manipuler de grandes quantités en utilisant des fonctions graphiques intelligentes. Un Horizontal ou un coup de DrawStat peut modifier beaucoup de pixels en très peu de temps, possiblement plus vite que les Str. Mais le nombre limité de fonctions permettant d'effacer des pixels mitige ce point...
Citer : Posté le 15/06/2020 09:49 | #
Avant de répondre, je veux préciser que l'intérêt principal de mon point de vue est le stockage en brut d'un grand nombre de données encodées sur peu d'octets, et non pas de vitesse pure. L'utilisation des Pictures est aussi parfaitement facultatif, l'écran graphique est conservé entre les exécutions. C'est pourquoi j'ai parlé de mémoire gratuite
Stocker 1bit coûte autant que stocker 8001bits, c'est à dire 2048octets.
Je pense bien que cette solution ne serait pas utilisée pour stocker une ou deux valeurs.
Je n'ai pas de données chiffrées à avancer mais je ne crois pas me tromper en affirmant que les fonctions PxlXXX sont lentes.
Elles sont lentes en effet, je pense que stocker les données sous cette forme a un intérêt comme stockage "froid" (exemple : stocker un niveau d'un de mes jeux (147 cellules avec 4 états différents et une position de départ) coûterait 301 bits. 8001//301 = 26, ce qui est pas mal pour 2048/1024 octets.
Pour stocker uniquement des bits, un système de stockage basé sur un dictionnaire de Str comme on a déjà pu en discuter sur le forum à l'époque avec Alex_1186 me semble plus performant.
Tu aurais un lien que je puisse comparer ? Je suppose que c'est basé sur StrSrc( mais j'aimerai voir pour comparer l'efficacité mémoire. Je ne doute pas une seconde que les Str soient plus rapides sinon
Merci en tout cas d'avoir documenté cette technique.
Merci à toi