Derniers sujets
» Bus d'extension - accès à la RAM
Hier à 23:19 par laurentd75

» opération compliquée
Hier à 22:58 par laurentd75

» Annonces insolites
Hier à 11:57 par kenneth

» Novalight
Dim 17 Mar 2019 - 21:33 par Symoon

» Route en effet 3d
Dim 17 Mar 2019 - 18:37 par Dbug

» Des propositions graphiques pour Oricutron
Sam 16 Mar 2019 - 20:00 par laurentd75

» musique en c
Ven 15 Mar 2019 - 14:54 par laurentd75

»  Oric Atmos problème de sortie vidéo
Ven 15 Mar 2019 - 14:48 par kenneth

» 65c816 et dédicace à Fabrice F :)
Jeu 14 Mar 2019 - 11:20 par Jede

» cherche quelqu'un(e)(s) avec qui retravailler la rom basic 16 kos
Jeu 14 Mar 2019 - 10:45 par Jede

» Aux couleurs de l'Atmos
Jeu 14 Mar 2019 - 3:04 par Voyageur

» ORIC-1 sur LE BON COIN
Lun 11 Mar 2019 - 23:20 par kenneth

» Cumulus
Lun 11 Mar 2019 - 17:01 par Jede

» rs
Lun 11 Mar 2019 - 11:47 par kenneth

» ORIC SDCARD
Lun 11 Mar 2019 - 11:22 par kenneth

Qui est en ligne ?
Il y a en tout 4 utilisateurs en ligne :: 1 Enregistré, 0 Invisible et 3 Invités

laurentd75

Le record du nombre d'utilisateurs en ligne est de 29 le Mer 25 Fév 2015 - 14:01
Connexion

Récupérer mon mot de passe

Statistiques
Nous avons 175 membres enregistrés
L'utilisateur enregistré le plus récent est ZodiacFR

Nos membres ont posté un total de 6930 messages dans 594 sujets
Portail ORIC




Codage d'une carte déroulante en BASIC, C et Assembleur

Page 1 sur 3 1, 2, 3  Suivant

Aller en bas

Codage d'une carte déroulante en BASIC, C et Assembleur

Message par laurentd75 le Mer 2 Jan 2019 - 13:07

Suite à la discussion initiée ici, sur la réalisation d'une carte déroulante pour Nemausus:
http://forums.oric.org/t526p25-nemausus-rpg-du-ceo#7883

____

@Romu3: je pensais effectivement à "Pirates!" pour le mode d'affichage des combats Smile

@Maximus:
Ci-joint un exemple de programmation de carte déroulante en BASIC (le fichier .TAP est dans le sous-répertoire BUILD du ZIP)...

... Seul problème: la rapidité: inutilisable, à moins de configurer Oricutron en mode "overclock" à 64 MHz !! (dans Oricutron: bouton droit de la souris pour afficher le menu, puis "Overclock options", sélectionner 64 MHz...

La raison en est que la manipulation de tableaux en BASIC est (très) lente, notamment les calculs d'index d'éléments, et que pour afficher la zone visible de la carte on doit accéder à chaque élément de la zone d'affichage un par un...

Une alternative plus rapide (mais moins facile à comprendre d'un point de vue programmation) serait d'utiliser un tableau de chaînes de caractères à une seule dimension: chaque ligne de la carte serait une chaîne de caractères, et on n'afficherait qu'une partie de la chaîne, avec la fonction MID$() en BASIC...

Autre alternative: gérer une zone mémoire comme un tableau, mais pas sûr que ce soit plus rapide que l'option "chaîne de caractères".

Bref, sans doute que des programmeurs Oric plus expérimentés (Allo DBug ?? Smile) auraient des astuces pour rendre ce code plus efficace, mais je doute qu'on puisse faire qq chose de vraiment très performant en BASIC, je pense qu'il faudrait plutôt coder ça en C ou en assembleur pour avoir une vitesse d'affichage convenable...
Fichiers joints
TextMovingMap.zip Démo carte déroulante en BASICVous n'avez pas la permission de télécharger les fichiers joints.(9 Ko) Téléchargé 7 fois


Dernière édition par laurentd75 le Lun 7 Jan 2019 - 20:18, édité 1 fois
laurentd75
laurentd75

Messages : 430
Date d'inscription : 09/08/2014
Age : 48
Localisation : Paris

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par drpsy le Mer 2 Jan 2019 - 15:45

Salut,
Je me suis permis de regarder le code de ton programme. Et tu utilises le % pour créer des entiers.
La notion d'entier est illusoire en BASIC. Le BASIC traite les opérations sur les entiers au moyen des opérations sur les décimaux. Au mieux on obtient le même temps d'exécution, au pire, le BASIC fait des conversions de type en plus. La copie d'écran ci-dessous illustre mon propos. Le code sans % est plus rapide.



_________________
>++++++++++[<++++++++>-]<.>++++++[<++++>-]<+.----.+++++++++++++..-------------.[-]
drpsy
drpsy

Messages : 200
Date d'inscription : 20/07/2014
Age : 47
Localisation : Lagny sur Marne

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par laurentd75 le Mer 2 Jan 2019 - 15:55

Salut DrPsy et merci de ton retour.

Je sais effectivement qu'il est déconseillé d'utiliser des entiers en BASIC, car en fait l'interpréteur de l'Oric les gère mal et ne les autorise même pas dans les boucles (en plus il interprète tous les nombres littéraux comme des nombres réels, donc ça fait une conversion de plus pour les types entiers).

Ceci étant, mon souci était de trouver un type de données assez compact en BASIC, tout en essayant de conserver un algorithme générique et clair à base de tableaux à 2 dimensions... D'où le choix par défaut du type entier, faute de type "byte" ou "char" en BASIC... L'entier ne prend que 2 octets, à comparer à 4 octets (de mémoire) pour un nombre décimal...

Comme je l'ai expliqué, l'alternative est plutôt d'utiliser des tableaux de chaînes à une dimension et de jouer avec "MID$()" pour les initialisations et l'affichage, mais ça rend le code moins clair... Je ferai sans doute l'exercice quand j'aurai un peu de temps  Smile


PS - rassure-toi quand même, il est bien sûr tout à fait "permis" de regarder et de critiquer mon code, c'est bien pour ça que j'ai posté le source ! Very Happy
laurentd75
laurentd75

Messages : 430
Date d'inscription : 09/08/2014
Age : 48
Localisation : Paris

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par maximus le Mer 2 Jan 2019 - 23:14

merci de vos encouragements, endormi le truc,endormi, genre hibernation, ça finit tj par un réveil Very Happy Wink
maximus
maximus

Messages : 1253
Date d'inscription : 02/12/2012
Age : 58
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par Ladywasky le Mer 2 Jan 2019 - 23:37

drpsy a écrit:Salut,
Je me suis permis de regarder le code de ton programme. Et tu utilises le % pour créer des entiers.
La notion d'entier est illusoire en BASIC. Le BASIC traite les opérations sur les entiers au moyen des opérations sur les décimaux. Au mieux on obtient le même temps d'exécution, au pire, le BASIC fait des conversions de type en plus. La copie d'écran ci-dessous illustre mon propos. Le code sans % est plus rapide.


Sans compter qu'un signe % c'est un octet, et si on en met plein partout ça fini par faire des kilo-octets perdus précieux tout ça. Cependant, un entier en Basic prend deux octets en mémoire alors qu'une variable réelle en mange 5. Bref, pour une boucle, ça vaut quand même le coup.
Ladywasky
Ladywasky

Messages : 158
Date d'inscription : 25/08/2018

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par laurentd75 le Jeu 3 Jan 2019 - 16:44

Bonjour Ladywasky,
Tu as tout à fait raison, un nb décimal en BASIC c'est 5 octets et non pas 4 comme je l'avais écrit!
Pour les entiers, DrPsy avait raison, j'aurais pu au moins limiter leur utilisation au seul tableau d'entiers, pour le reste utiliser des nb décimaux aurait été + efficace, car le BASIC de l'Oric "parse" systématiquement tous les nombres comme des nombres décimaux, même si la variable associée est entière, et dans ce dernier cas, il doit faire une conversion ensuite pour convertir la valeur décimale sur 5 octets en valeur entière sur 2 octets...

Quoi qu'il en soit, comme je l'ai expliqué, ce qui prendle + de temps ici c'est l'affichage élément par élément du tableau avec en plus conversion entier -> chaîne...

laurentd75
laurentd75

Messages : 430
Date d'inscription : 09/08/2014
Age : 48
Localisation : Paris

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par laurentd75 le Jeu 3 Jan 2019 - 16:49

Par ailleurs, j'ai fait l'exercice (pas encore tout à fait terminé, il subsiste qq bugs...) d'optimisation de ma petite démo de carte déroulante pour utiliser des tableaux de chaînes de caractères plutôt que des tableaux d'entiers (gain de place pour le tableau: environ 50% vu qu'un caractère occupe 1 octet au lieu de 2 pour un entier...).
C'est aussi NETTEMENT plus rapide, 10 fois plus rapide je dirais au feeling, et on peut presque "jouer" en mode normal 1 MHz même si ça reste tout de même très lent..

Je joins la nouvelle version de la démo, attention comme indiqué c'est pas encore finalisé, il reste qq méchants bugs:
- dans les déplacements aux abords des coins de la carte
- dans la détection des obstacles (il y a un décalage d'une colonne et d'une ligne dans la détection de l'obstacle, je n'ai pas encore saisi pourquoi)

Donc voilà, c'est juste pour vous montrer le gain de rapidité Smile

... Mais à mon sens c'est encore insuffisant pour être 'jouable", il reste cependant sans doute des optimisations à faire, notamment les optimisations triviales classiques:
- virer les commentaires (ou les déplacer en dehors des boucles principales)
- mettre le maximum d'instructions par ligne
- raccourcir les noms de variables à leurs 2 seuls caractères significatifs
- interdire les interruptions durant l'initialisation et l'affichage de la carte (en théorie, 20% de gain de vitesse selon "L'Oric A Nu"...)

PS - autre bug, à l'initialisation on peut se retrouver au milieu d'un lac... c'était valable pour la 1e version aussi...
Fichiers joints
TextMovingMap2.zip Vous n'avez pas la permission de télécharger les fichiers joints.(9 Ko) Téléchargé 7 fois
laurentd75
laurentd75

Messages : 430
Date d'inscription : 09/08/2014
Age : 48
Localisation : Paris

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par goyo le Jeu 3 Jan 2019 - 18:04

laurentd75 a écrit:Par ailleurs, j'ai fait l'exercice (pas encore tout à fait terminé, il subsiste qq bugs...) d'optimisation de ma petite démo de carte déroulante pour utiliser des tableaux de chaînes de caractères plutôt que des tableaux d'entiers (gain de place pour le tableau: environ 50% vu qu'un caractère occupe 1 octet au lieu de 2 pour un entier...).
C'est aussi NETTEMENT plus rapide, 10 fois plus rapide je dirais au feeling, et on peut presque "jouer" en mode normal 1 MHz même si ça reste tout de même très lent..

Je joins la nouvelle version de la démo, attention comme indiqué c'est pas encore finalisé, il reste qq méchants bugs:
- dans les déplacements aux abords des coins de la carte
- dans la détection des obstacles (il y a un décalage d'une colonne et d'une ligne dans la détection de l'obstacle, je n'ai pas encore saisi pourquoi)

Donc voilà, c'est juste pour vous montrer le gain de rapidité Smile

... Mais à mon sens c'est encore insuffisant pour être 'jouable", il reste cependant sans doute des optimisations à faire, notamment les optimisations triviales classiques:
- virer les commentaires (ou les déplacer en dehors des boucles principales)
- mettre le maximum d'instructions par ligne
- raccourcir les noms de variables à leurs 2 seuls caractères significatifs
- interdire les interruptions durant l'initialisation et l'affichage de la carte (en théorie, 20% de gain de vitesse selon "L'Oric A Nu"...)

PS - autre bug, à l'initialisation on peut se retrouver au milieu d'un lac... c'était valable pour la 1e version aussi...

Incroyable le gain de vitesse!

j'ai fait une version similaire en c, ce n'est pas très rapide mais jouable à 1mhz. Ca peut être optimisé.
Fichiers joints
map.zip Vous n'avez pas la permission de télécharger les fichiers joints.(3 Ko) Téléchargé 4 fois
goyo
goyo

Messages : 141
Date d'inscription : 02/05/2014
Age : 47
Localisation : Massy

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par laurentd75 le Jeu 3 Jan 2019 - 19:24

Salut goyo,

Tu m'as devancé, effectivement la prochaine étape était de montrer le même exercice, mais en C, pour jauger du gain de vitesse Smile

J'avoue avoir été surpris de voir que ce n'était pas plus rapide que le code BASIC, jusqu'à ce que je découvre ton code pour afficher la map
Code:

for (y=0;y<17;y++)
  {
     for (x=0;x<30;x++)
     {
        p=map[((y+vy)*35)+(x+vx)];
        poke(0xbb86+((y+7)*40)+x,p);
     }
  }
Il me semble que tu peux facilement te passer de la multiplication par 40, en calculant l'adresse de départ pour la 1e ligne, et en faisant juste des additions ensuite, ça ferait déjà gagner pas mal de temps...


Sinon, je vois que je ne suis pas le seul à faire du code buggé, car sur ta carte, ça se passe moyennement bien si on se déplace vers la gauche ou vers le haut !! Very Happy Razz

Bref, on a tous les 2 qq corrections à faire !! Laughing Laughing
laurentd75
laurentd75

Messages : 430
Date d'inscription : 09/08/2014
Age : 48
Localisation : Paris

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par laurentd75 le Jeu 3 Jan 2019 - 19:35

Sinon, pour le code BASIC (valable aussi pour le code C), une autre optimisation envisageable:

A chaque déplacement, comme il n'y a en fait qu'une "nouvelle" ligne ou colonne à afficher, et que tout le reste est déjà affiché et doit simplement être décalé dans une direction, il est potentiellement plus rapide de décaler la partie qui doit rester visible à l'écran, et de ne se servir du tableau que pour l'affichage de la nouvelle ligne ou colonne.

En BASIC, on peut utiliser la fonction SCRN(x,y) pour récupérer le code ASCII du caractère affiché à la position (x,y) de l'écran, mais il est (beaucoup) plus rapide d'utiliser PEEK() en précalculant l'adresse écran de chaque ligne, et en faisant une boucle pour récupérer les valeurs colonne par colonne.... Et les recopier ensuite avec POKE(), lui aussi beaucoup plus rapide que d'utiliser l'instruction PLOT...

A essayer, pour ma part je pars en week-end demain, donc ce sera pour la semaine prochaine ! Smile
laurentd75
laurentd75

Messages : 430
Date d'inscription : 09/08/2014
Age : 48
Localisation : Paris

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par maximus le Jeu 3 Jan 2019 - 19:43

Shocked Shocked Shocked Shocked Shocked Shocked Shocked
maximus
maximus

Messages : 1253
Date d'inscription : 02/12/2012
Age : 58
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par laurentd75 le Jeu 3 Jan 2019 - 20:33

Désolé Maximus, avec cette histoire de carte déroulante je crois que j'ai un peu "pourri" le sujet Nemausus. d'origine..

Je ne sais pas s'il est possible de déplacer des posts d'un sujet à l'autre, sinon si tu veux on peut tout effacer et traiter ça dans un sujet à part, car là on a vraiment (moi le premier bien sûr) "pollué" le sujet d'origine !!!  Crying or Very sad  Crying or Very sad


Dernière édition par laurentd75 le Jeu 3 Jan 2019 - 22:29, édité 1 fois
laurentd75
laurentd75

Messages : 430
Date d'inscription : 09/08/2014
Age : 48
Localisation : Paris

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par romu3 le Jeu 3 Jan 2019 - 20:47

Cela serait dommage de perdre tout ceci car cela pourrait interesser d'autres personnnes donc un truc genre affichage map en basic et en C dans un autre thread pourquoi pas.
romu3
romu3

Messages : 76
Date d'inscription : 09/10/2018

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par maximus le Jeu 3 Jan 2019 - 21:00

Ha mais non je suis ébahi de votre savoir, bravo, bravo !! Razz Wink
maximus
maximus

Messages : 1253
Date d'inscription : 02/12/2012
Age : 58
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par drpsy le Ven 4 Jan 2019 - 2:00

Salut,
pour le C, vu le challenge, l'OSDK génère tellement de code redondant que ce n'est pas vraiment optimal...
ma philosophie : si j'ai besoin d'une routine rapide pour un truc, je la fais en assembleur. Et si j'ai besoin de programmer rapidement, je le fais en C.
J'ai bien aimé le rendu visuel de Laurentd75. Je suis en train de tout réécrire en ASM. ça nous servira pour un prochain jeu. quand on aura le temps...
Maximus, si tu as besoin d'aide, ... ben... il y en a ici apparemment ! pour coder et jouer !! on peut faire les routines ASM et tu peux les appeler depuis le BASIC ;-)

_________________
>++++++++++[<++++++++>-]<.>++++++[<++++>-]<+.----.+++++++++++++..-------------.[-]
drpsy
drpsy

Messages : 200
Date d'inscription : 20/07/2014
Age : 47
Localisation : Lagny sur Marne

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par laurentd75 le Ven 4 Jan 2019 - 9:14

Merci DrPsy, pour le compilateur, il génère malgré tout du code bien plus rapide que le BASIC, c'est déjà ça et ça suffit pour tout ce qui est non intensif ou non critique, je pense que la bonne combinaison est un mix de C et d'ASM Smile

Merci Maximus aussi, tant que tu es content, on est contents !! Smile

Et pour Romu3, effectivement ça peut intéresser des gens ce genre d'algo, je voulais juste déplacer les posts vers un autre sujet pour éviter de polluer celui-ci, mais bon, le mal est fait, et Caius Maximus m'a pardonné dans sa magnanimité légendaire ! Very Happy

Et dernière chose pour Ladywasky, en fait sur la "taille" des nombres décimaux on s'est trompés tous les 2, ce n'est pas 4, ni 5, mais 6 octets que ça prend en mémoire: 4 pour la mantisse, 1 pour l'exposant et son signe, et enfin 1 dernier pour le signe de la mantisse ! (cf. "L'Oric A Nu", entre autres, j'ai vérifié par acquît de conscience...)
laurentd75
laurentd75

Messages : 430
Date d'inscription : 09/08/2014
Age : 48
Localisation : Paris

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par maximus le Ven 4 Jan 2019 - 10:03

vous êtes formidables Wink
maximus
maximus

Messages : 1253
Date d'inscription : 02/12/2012
Age : 58
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par drpsy le Ven 4 Jan 2019 - 23:55

Voilà ! pas besoin de mettre l'émulateur à 64 MHz !!
Le tout tient dans moins de 20ko, routines et matrice 128x128 comprises.
On doit pouvoir optimiser : il n'y a que 8 codes de caractères utilisés ici, soit 3 bits.
Arrondissons à 4 bits, ce qui laisse la possibilité d'afficher 16 caractères différents.
Et on doit alors pouvoir diviser par 2 l'occupation mémoire : 2 "cases" par octet.

Mais déjà comme ça, cela laisse en mode texte pas loin de 25k pour le jeu !
Fichiers joints
TextMovingMap.zip Vous n'avez pas la permission de télécharger les fichiers joints.(26 Ko) Téléchargé 7 fois

_________________
>++++++++++[<++++++++>-]<.>++++++[<++++>-]<+.----.+++++++++++++..-------------.[-]
drpsy
drpsy

Messages : 200
Date d'inscription : 20/07/2014
Age : 47
Localisation : Lagny sur Marne

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par drpsy le Sam 5 Jan 2019 - 18:38

Voici une nouvelle version avec un mode Editeur. Qu'en pensez-vous ?

- déplacement avec IJKL
- E : passage en mode Editeur. Le curseur change de couleur
- O et P : on fait défiler les patterns possibles de la MAP
- DXCV : (Haut/Gauche/Bas/Droite) pose un motif du pattern choisi dans la case adjacente au curseur dans la direction indiquée
- Toujours ESC pour Sortir

par contre, je n'ai pas encore trouvé le moyen simple de récupérer un .s avec la MAP résultante, histoire de la réutiliser dans un programme dans l'OSDK...
Peut-être en utilisant LPRINT ?
si quelqu'un a une idée...
Fichiers joints
TextMovingMap.zip Vous n'avez pas la permission de télécharger les fichiers joints.(27 Ko) Téléchargé 8 fois

_________________
>++++++++++[<++++++++>-]<.>++++++[<++++>-]<+.----.+++++++++++++..-------------.[-]
drpsy
drpsy

Messages : 200
Date d'inscription : 20/07/2014
Age : 47
Localisation : Lagny sur Marne

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par maximus le Sam 5 Jan 2019 - 19:24

fichtre ça va vite Shocked

par contre j'ai pas réussi à éditer

je t'ai envoyé un mp cher drpsy
maximus
maximus

Messages : 1253
Date d'inscription : 02/12/2012
Age : 58
Localisation : Nimes

http://cinema.forumactif.org/

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par drpsy le Sam 5 Jan 2019 - 19:35

Pour Editer :
d'abord taper E. l'étoile devient magenta et il n'y a plus de motif.
On choisit le motif en les faisant défiler avec les touches O et P.
on "pose" un motif à l'aide des touches D X C ou V (resp. Haut, Gauche, Bas, Droite). Si le motif est " ", ça efface.
Un rappuis sur la touche E revient au mode exploration.

_________________
>++++++++++[<++++++++>-]<.>++++++[<++++>-]<+.----.+++++++++++++..-------------.[-]
drpsy
drpsy

Messages : 200
Date d'inscription : 20/07/2014
Age : 47
Localisation : Lagny sur Marne

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par TotoShampoin le Sam 5 Jan 2019 - 19:46


Une petite démo de cet éditeur ^^

_________________
Bonjour c:
TotoShampoin
TotoShampoin

Messages : 59
Date d'inscription : 16/08/2017
Age : 18
Localisation : Lagny Sur Marne

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par Symoon le Dim 6 Jan 2019 - 10:48

Waouh, je suis admiratif de la vitesse à laquelle vous programmez.
Symoon
Symoon

Messages : 594
Date d'inscription : 26/04/2014

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par Symoon le Dim 6 Jan 2019 - 21:40

Ces derniers temps, je reflexionne un peu sur de la compression de données.
Pour la carte qui occupe 16Ko (128*128), une façon de gagner de l'espace mémoire serait de faire une bitmap: 1 bit par octet. Un "0" signifierait "vide", et un "1" signifierait "élément à placer".
La bitmap occuperait 2Ko, mais permettrait ensuite de ne stocker en mémoire que les éléments, comme dans un tableau, les uns à la suite des autres. Tout le "vide" serait compressé.

A l'affichage, il faudrait donc d'abord lire la bitmap jusqu'à la zone à afficher avec un compteur indiquant combien de "1" on a passé. Puis commencer à peupler l'écran selon les 0 et les 1, en allant lire la valeur des bits à 1 dans le tableau des éléments, en partant de la valeur indiquée par le compteur.
Ca complexifiera pas mal l'édition par contre, car en insérant des éléments, il faut mettre à jour la bitmap et insérer l'élément dans le tableau dont la taille devient dynamique.

Mais bon, cela peut faire passer de 16Ko à 2Ko + le nombre d'éléments de la carte ( + le code pour gérer tout ça). A moins d'avoir une carte totalement remplie, on gagnerait pas mal de place je pense. Actuellement, la carte est remplie à quoi, 15, 20 % ? Ca ferait au final 5 ou 6 Ko en RAM au lieu de 16.
Juste une idée.
Symoon
Symoon

Messages : 594
Date d'inscription : 26/04/2014

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par kenneth le Dim 6 Jan 2019 - 22:07

On pourrait  aussi comprimer d une autre maniere. Sachant que la carte fait 128 octets de coté on pourrait attribuer les valeurs supérieures a 127 au nombre de cases vides qui séparent deux motifs sur la carte. Si il n y a pas d espace on se contente de mettre les octets de motifs cote a cote. Si il y a carrement des lignes a sauter on utilisera les codes de 0 a 31. Wink
kenneth
kenneth
Modérateur

Messages : 597
Date d'inscription : 13/01/2013
Age : 51
Localisation : 972

Revenir en haut Aller en bas

Re: Codage d'une carte déroulante en BASIC, C et Assembleur

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 1 sur 3 1, 2, 3  Suivant

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum