Derniers sujets
» L'ile oubliée
Aujourd'hui à 22:02 par Dom50

» Des propositions graphiques pour Oricutron
Aujourd'hui à 18:37 par TotoShampoin

» Bus d'extension - accès à la RAM
Aujourd'hui à 18:20 par laurentd75

» Annonces insolites
Hier à 20:15 par kenneth

» opération compliquée
Lun 18 Mar 2019 - 22:58 par laurentd75

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

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

» 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

Qui est en ligne ?
Il y a en tout 1 utilisateur en ligne :: 0 Enregistré, 0 Invisible et 1 Invité

Aucun

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 6906 messages dans 594 sujets
Portail ORIC




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

Page 2 sur 3 Précédent  1, 2, 3  Suivant

Aller en bas

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

Message par Symoon le Dim 6 Jan 2019 - 22:20

Oui, c'est peut-être plus simple dans la mesure où on sait qu'on n'affichera pas les 256 valeurs d'octet possibles sur la carte !
Symoon
Symoon

Messages : 593
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 drpsy le Dim 6 Jan 2019 - 23:22

geek du remue-méninges en perspective !
Vos idées sont géniales !
Concernant le mode édition : c'est tout de même un mode spécial qui ne s'appliquera pas dans un jeu, à moins d'en faire un module spécifique.
On peut donc tout à fait imaginer être en full étendu pour l'édition et compresser ensuite pour le jeu en tant que tel.
Tout dépendra du jeu...
S'il y a plusieurs éléments mobiles (monstres, PNJ, etc) de toute façon, il ne font pas partie de la MAP. Ils doivent être gérés en dehors.
On peut a mon avis s'appuyer sur le fait que la carte en tant que telle est bel et bien statique.

Je ne saurais dire laquelle de vos deux propositions je préfère. Celle de Keneth est sans doute plus facile à coder... à voir.
Dans les deux cas, pour préserver la performance, il me semble nécessaire de gérer à côté un index des adresses de début de ligne, comme c'est déjà le cas dans ma version : 256 octets. Ce qui est finalement peu. Cela suppose aussi qu'on a bien une valeur d'index pour toutes les lignes même si elle sont vides.

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

Messages : 195
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 Symoon le Dim 6 Jan 2019 - 23:52

A bien réfléchir, ton idée à 4 bits a le gros avantage de fixer la taille d'occupation mémoire, quelle que soit la carte. Car si le but est de remplir à fond la RAM restante avec le programme, tout en permettant d'éditer des cartes, alors le côté dynamique (et donc place occupée variable selon la carte dessinées) ne permet pas d'occuper l'espace gagné par du code, car une carte plus "fournie" risquera de l'écraser.

4 bits ça peut faire:
0 à 14: 15 éléments (les plus fréquents)
16: élément spécial codé sur 8 bits, donc les 4 bits suivants font référence à 16 autres éléments.
Soit au total 15 éléments "fréquents" (vide, marais, montagnes, arbres...) et 16 éléments "spéciaux" (château, grotte, village, maison, armée...)
Soit 8Ko + qqes octets fixés pour les éléments spéciaux (qu'on peut fixer à un max de 30 ou 40 sur la carte par exemple), et ainsi conserver une taille fixe en RAM quelle que soit la densité des éléments sur la carte.
Symoon
Symoon

Messages : 593
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 drpsy le Lun 7 Jan 2019 - 7:54

Il y a un intérêt a avoir des lignes de taille fixe : ça permet d'utiliser directement l'adressage indexé sans avoir à scanner toute la ligne. Dès qu'on introduit des éléments variables, il faut scanner toute une ligne au minimum.
Si certains octets désignent une case complète et pas deux cases, ça ne marche plus...
Au passage, je note que tu as donné 9 exemples de pattern. sur 4 bits, il en reste encore 7 ! Il faudrait voir réellement de combien de patterns différents on a besoin.

Vu où tout cela nous entraîne, ne faut-il pas changer de TOPIC ?

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

Messages : 195
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 Lun 7 Jan 2019 - 14:28

drpsy a écrit:
Vu où tout cela nous entraîne, ne faut-il pas changer de TOPIC ?

+1, nos discussions sont sans doute très intéressantes, mais comme je l'avais déjà suggéré en m'excusant auprès de Maximus pour avoir moi le premier clairement détourné le fil d'origine avec cette digression sur la programmation de cartes déroulantes, il serait effectivement temps je pense de tout déplacer vers un topic à part, ou au minimum de continuer cette discussion sur un fil à part...

Ceci dans l'intérêt de tout le monde et pour la clarté des sujets du forum... Smile

PS - à part ça, félicitations DrPsy et TotoShampoin pour la version ASM de la carte déroulante, la rapidité est vraiment impressionnante Shocked (en partie aussi grâce au précalcul des adresses des lignes du tableau..). J'ai refait vite fait une version en C qui est + rapide que celle de goyo, et qui semble + rapide que la version BASIC (heureusement !), mais le gain en perf reste décevant par rapport à ce que j'espérais (même si ma version n'est pas non plus hyper optimisée).
laurentd75
laurentd75

Messages : 429
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 Lun 7 Jan 2019 - 14:34

laurentd75 a écrit: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

voici ci-joint une version avec une inline asm() pour l'affichage d'une ligne entière à la place du for(x...) ,ça accélère pas mal l'affichage.
Fichiers joints
map.zip Vous n'avez pas la permission de télécharger les fichiers joints.(3 Ko) Téléchargé 6 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 drpsy le Lun 7 Jan 2019 - 15:25

et sinon, Laurent tout simplement sortir les deux multiplications sur le y de ta boucle en x augmenterait sensiblement les perfs

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

Messages : 195
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 Lun 7 Jan 2019 - 16:12

Salut Dr psy,

La version en C n'est pas de moi mais de Goyo, qui vient donc de proposer une version améliorée sans ces 2 multiplications semble-t-il (je lui avais moi-même fait la même remarque Smile ).

J'ai de mon côté fait une adaptation C de mon programme original en Basic mais je ne l'ai pas encore  publiée car il reste qq bugs (un petit décalage qq part dans les bornes supérieures...)

Dans ma version il n'y a aucune multiplication dans les boucles d'affichage (hormis la multiplication intrinsèque à l'accès aux éléments d'un tableau à 2 dimensions  en C...)
Vu que l'accès à chaque élément semble fortement impacter l'affichage, j'optimiserai mon code en accédant uniquement à l'élément correspondant à la première case à afficher (coin supérieur gauche) dont je mettrai l'adresse dans un pointeur pour ensuite calculer l'adresse des éléments suivants dans les boucles uniquement par addition... Ca devrait booster pas mal déjà...
laurentd75
laurentd75

Messages : 429
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 Lun 7 Jan 2019 - 16:27

oui c'est ça !
ne voyez aucune critique dans mes remarques, c'est pour faire avancer la barque ! ;-)

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

Messages : 195
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 goyo le Lun 7 Jan 2019 - 16:30

Symoon a écrit:Waouh, je suis admiratif de la vitesse à laquelle vous programmez.

Moi de même , ! quelle efficacité  !?!
On a l'impression qu'ils programment en langage machine comme on pourrait jouer aux lego Smile
à quand les cours d'assembleur pour Oric en tutoriaux sur Youtube ? ;-)
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 maximus le Lun 7 Jan 2019 - 17:23

Idem ils me terrifient, sont ils vraiment humains ou des androïdes ? Razz Very Happy

Prêt a déplacer cette discussion, choisissez le titre du sujet: carte déroulante ? scrolling ?
maximus
maximus

Messages : 1239
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 Lun 7 Jan 2019 - 18:09

Merci Maximus Smile

Proposition de titre: Codage d'une carte déroulante en BASIC, C et Assembleur

Pour la catégorie du forum, pas facile vu qu'il y a 3 catégories différentes de programmation: "Assembleur, "BASIC", et "Programmation en C"...

=> Du coup peut-être le déplacer simplement à la racine de "Forum public" ?


laurentd75
laurentd75

Messages : 429
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 Lun 7 Jan 2019 - 19:43

Ah merci Laurent !
Petite surprise dans la version jointe ;-)
Fichiers joints
TextMovingMap.zip Vous n'avez pas la permission de télécharger les fichiers joints.(27 Ko) Téléchargé 5 fois

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

Messages : 195
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 Lun 7 Jan 2019 - 21:25

Excellente DrPsy ta petite suprise (je n'en dis pas plus pour ne pas gâcher la découverte aux autres...) !!! Very Happy Very Happy

Et en plus, ça ne ralentit en rien les déplacements, j'ai même l'impression que tu as encore gagné en rapidité ??!!

PS - un ENORME MERCI également à Maximus pour avoir fait le boulot de créer le nouveau topic et déplacer tous les posts, merci beaucoup !!!  Smile  Smile
laurentd75
laurentd75

Messages : 429
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 Mar 8 Jan 2019 - 2:14

Quant à vos propositions de compression des données (DrPsy et Symoon):
Les 2 options sont évidemment très intéressantes.
Si la proposition de Symoon de séparer en "bitmap" sur 1 bit + "object map", avec compression "RLE" du bitmap est évidemment très séduisante et élégante en permettant de gagner énormément de place, elle est malheureusement trop complexe je pense pour permettre un affichage rapide du fait d'une décompression un peu complexe et qui interdirait (ou complexifierait énormément) la mise en oeuvre des déplacements avec gestion d' "obstacles"...
La proposition de DrPsy (codage de 2 positions sur 1 octet, sur 4 bits chacune) me paraît un bon compromis car relativement simple à mettre en oeuvre (simple masquage + décalages de bits pour séparer les 2 valeurs d'un objet, opérations très rapides, et qui permettraient sans doute de gagner encore en rapidité à l'affichage par rapport au codage d'une position par octet). Et la gestion des déplacements avec "détection d'obstacles" ne me semble pas a priori très complexe non plus avec cette méthode. Je vais sans doute m'y essayer dans ma version en "C", dès que j'aurai corrigé mes bugs actuels ! Smile
laurentd75
laurentd75

Messages : 429
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 Mar 8 Jan 2019 - 6:33

Détection d'obstacle ou affichage, c'est la même chose : il faut tester la parité d'une coordonnée.
Pour le gain (en ASM) : solution actuelle --> 15 à 17 cycles à remplacer par masquage + 4 décalages + sauvegarde en page 0 --> 16 cycles à vue de nez...

Dans la solution de Symoon, je ne pense qu'il était question de recompresser la bitmap. C'est la solution de Kenneth qui ressemble plus à une compression RLE.

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

Messages : 195
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 Mar 8 Jan 2019 - 7:10

je viens de me livrer à un petit exercice : supprimer les tests de touches (car on est lié au délai de répétition des touches) et faire défiler la MAP en incrémentant simplement la position du curseur.
On atteint quelque chose comme 72 FPS !!
Donc on a de la marge pour faire des opérations assez complexes et conserver une belle fluidité.

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

Messages : 195
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 Symoon le Mar 8 Jan 2019 - 7:24

En fait la bitmap revient à ajouter un 9e bit à chaque octet, et n'est utile qu'en cas de répétition en masse d'une seule valeur d'octet; c'est pour ça je pense que Laurent parle de RLE (entre guillemets Wink ). Mais elle diffère du RLE:
- désavantage elle ne "compresse" qu'une seule valeur
- avantage elle compresse cette valeur même si elle est isolée entre d'autres valeurs (non répétée au sens RLE)
- avantage (sans intérêt ici) elle permet de conserver les 256 valeurs possibles pour un octet (pas besoin d'un octet spécial qui signifie "répétition").
C'est plus un dictionnaire à une seule entrée, quoi Wink On ne commence à gagner de la place que si la valeur compressée est présente à plus de 12,5% dans la carte.

Le temps additionnel serait de convertir le bit en octet avant de poursuivre le programme. Ce sera évidemment plus lent, mais je ne pense pas que ce soit rebutant niveau vitesse en assembleur.
On peut profiter de l'affichage déjà à l'écran (les données y sont décompressées !) pour la gestion des obstacles et le scrolling. On scrolle ce qui est affiché et on n'aurait qu'un ligne (horizontale ou verticale) à décompresser et ajouter à l'écran.

Comme toujours de toute façon, le choix devra être équilibré selon le besoin; ici entre la RAM disponible et la vitesse. Pour un jeu d'aventure, la vitesse d'affichage actuelle du programme de DrPsy permet encore beaucoup de marge Wink

Edit: nos messages se sont croisés; DrPsy !
Symoon
Symoon

Messages : 593
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 laurentd75 le Mar 8 Jan 2019 - 12:32

Bon,

J'ai enfin pu debugger mon code C hier, et produire 2 versions:

  • "v1.0": version non optimisée, avec accès à chaque élément du tableau pour l'affichage (impliquant donc au mieux 100 multiplications, et au pire 10.000 multiplications, si le compilateur C n'optimise pas pour une taille d'élément de 1 octet...)

  • "v1.1": version optimisée: on accède juste à un seul élément du tableau représentant le "coin supérieur gauche" de la zone à afficher, on récupère l'adresse de cet élément et on accède aux éléments suivants par simple addition de pointeur


Les résultats (approximatifs, obtenus en chronométrant le "temps de trajet" d'un bout à l'autre du tableau) en termes de gains de vitesse:


  • v1.0 C par rapport à ma v1.1 BASIC (utilisant tableau de chaînes): x2

  • v1.1 C par rapport à v1.0 C: x4 !!! le gain est beaucoup plus important que je ne le pressentais !! (et donc 8x + rapide qu'en Basic !)

  • v1.1 C par rapport à version C de Goyo: x2 (ma version v1.0 C était 2x + lente, mais avec ma v1.1 j'ai repris l'avantage ! Smile)

  • v1.1 C par rapport à version ASM de DrPsy: 3x plus lent... ce qui reste malgré tout une bonne perf pour du code C par rapport à de l'ASM qui peut souvent être 10x + rapide au moins...


Ci-joint les sources et les .TAP de mes v1.0 et v1.1 en C.

PS - je n'ai pas encore optimisé la phase d'initialisation, qui peut l'être en utilisant la même méthode pour éviter les accès individuels aux éléments du tableau.


EDIT: je viens juste de repérer (et de corriger dans la v1.1.1 ci-jointe) un petit bug sans conséquence à l'initialisation (inversion de MAP_YSIZE avec MAP_XSIZE, sans conséquence car les valeurs sont identiques...):
Code:

for(i=0; i < MAP_YSIZE; i++) {
        map[i][0] = WALL;
        map[i][MAP_YSIZE-1] = WALL;
    }

Dans l'instruction
Code:
map[i][MAP_YSIZE-1] = WALL;
il faudra que je remplace MAP_YSIZE par MAP_XSIZE...
Fichiers joints
CTextMovingMap-v1.0.zip Vous n'avez pas la permission de télécharger les fichiers joints.(9 Ko) Téléchargé 0 fois
CTextMovingMap-v1.1.1.zip Vous n'avez pas la permission de télécharger les fichiers joints.(10 Ko) Téléchargé 3 fois
laurentd75
laurentd75

Messages : 429
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 Mar 8 Jan 2019 - 14:57

drpsy a écrit:je viens de me livrer à un petit exercice : supprimer les tests de touches (car on est lié au délai de répétition des touches) et faire défiler la MAP en incrémentant simplement la position du curseur.
On atteint quelque chose comme 72 FPS !!
Salut DrPsy, je m'étais fait la même réflexion, j'avais noté que je devais chercher dans les bouquins l'adresse mémoire (en page 2 j'imagine) qui gère le délai de répétition du clavier... Je vais voir si ç peut aussi améliorer la vitesse de défilement pour mon code...

Effectivement, 72 fps, c'est bien, mais "heureusement" j'allais dire, car quand on y réfléchit il s'agit juste d'afficher 450 caractères, donc heureusement qu'on arrive à le faire assez vite en assembleur !! Very Happy Very Happy

Mais en tous cas, encore bravo pour votre code en ASM avec TotoShampoin, vraiment efficace, et j'adore les animations !! Smile
laurentd75
laurentd75

Messages : 429
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 10 Jan 2019 - 1:02

Nouvelle version 1.2 en C de la carte déroulante, démontrant le gain en rapidité significatif lors de l'initialisation:
en limitant au maximum les accès aux éléments individuels du tableau représentant la carte, et en utilisant à la place des manipulations de pointeurs en effectuant uniquement des additions (alors que l'accès à un élément individuel d'un tableau implique des multiplications), on économise beaucoup de cycles... au prix toutefois d'une lisibilité moindre du code, d'où l'intérêt d'user et d'abuser des commentaires, qui n'impactent évidemment aucunement la performance puisqu'ils sont ignorés à la compilation...
Fichiers joints
CTextMovingMap-v1.2.zip Vous n'avez pas la permission de télécharger les fichiers joints.(10 Ko) Téléchargé 1 fois
laurentd75
laurentd75

Messages : 429
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 Dim 13 Jan 2019 - 16:46

Hello,

Bon, je m'acharne sur le sujet, je ne lâche pas le morceau et vous présente une nouvelle version qui optimise le stockage de la map, en codant 2 cellules sur 1 seul octet: les bits de poids fort (4 à 7) d'un octet codent le contenu d'une cellule de numéro pair (16 valeurs possibles, de 0 à 15), et les bits de poids faible du même octet (bits de 0 à 3) codent pour la cellule de numéro impair adjacente (là aussi, 16 valeurs possibles). Un tableau de correspondance est utilisé pour faire l'équivalence entre valeurs des cellules et caractères correspondants.

J'ai essayé de pas mal optimiser (en remplaçant notamment les divisons par 2 par des décalages à droite (je n'ai pas vérifié si le compilateur faisait de lui-même cette optimisation), et en utilisant au maximum des expressions constantes (qui sont calculées à la compilation), mais le résultat est décevant par rapport à mes attentes:

Je pensais que le temps additionnel de "décodage" des valeurs (décalages de bits et masquages nécessaires, et simple addition pour l'équivalence du caractère à afficher) allait être compensé par le nombre d'accès réduit à la map (2 fois moins d'accès), mais ce n'est pas le cas, c'est environ 40% plus lent à l'exécution pour les déplacements (17s pour parcourir la map d'un bout à l'autre, contre 12s pour la version "normale").

Le seul intérêt est donc le gain de 50% sur la taille de la map en mémoire, qui est évidemment très appréciable (et le but recherché à la base...) : pour une map de 100x100, on passe en gros de 10 Ko à 5 Ko...

Je publie le code pour ceux que ça intéresse, pour info j'inaugure à cette occasion mon nouveau compte GitHub qui sera entièrement dédié aux programmes pour Oric:
https://github.com/retroric

Le code est publié ici (il y a 2 branches, la branche "master" qui contient le code "classique", et la branche "2_cells_per_byte" qui contient le code pour la version avec la map "compressée"): https://github.com/retroric/CTextMovingMap

Je joins un ZIP de la version du code avec la map compressée ci-dessous.
Fichiers joints
CTextMovingMap_b2v1.0.zip Vous n'avez pas la permission de télécharger les fichiers joints.(12 Ko) Téléchargé 2 fois
laurentd75
laurentd75

Messages : 429
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 Symoon le Dim 13 Jan 2019 - 17:01

Je trouve ça largement suffisant pour un jeu type aventure (même si, évidemment, on est loin des possibilités offertes par l'assembleur avec les extras comme les animations).

Est-ce que tu décodes l'intégralité de la carte à afficher à chaque coup ? Ou juste la ligne supplémentaire à afficher à chaque déplacement ?
Symoon
Symoon

Messages : 593
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 drpsy le Dim 13 Jan 2019 - 20:17

merci Laurent ! c'était bien mon objectif aussi. Mais pas assez de temps disponible pour y réfléchir... ce que je risque de faire, gros fainéant que je suis, c'est de reprendre ton code et le réécrire en assembleur !

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

Messages : 195
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 Dim 13 Jan 2019 - 21:28

Symoon a écrit:
Est-ce que tu décodes l'intégralité de la carte à afficher à chaque coup ? Ou juste la ligne supplémentaire à afficher à chaque déplacement ?
Salut Simon,

Non, je ne suis pas allé jusque là, car j'avoue que j'ai déjà bien galéré en fait pour arriver à ce résultat, je me faisais des noeuds au cerveau sur les bornes pour les boucles...

Ca pourrait être un exercice intéressant, mais ça compliquerait énormément le code je pense, car en gros il faut distinguer 4 cas (x-1, x+1, y-1, y+1) et dans chaque cas il faut un décalage différent + un traitement différent pour afficher la colonne ou ligne manquante...

... Autre chos,e on pourrait optimiser aussi fortement les cas où le personnage est dans un des "coins" de la carte, car dans ce cas, il n'y a rien du tout à réafficher, puisque la carte ne scrolle pas...

Bref, si j'ai un peu de temps j'y réfléchirai, mais pas sûr qu'on gagne énormément en rapidité, et par contre on "gagnerait" énormément en complexité, et on "gagnerait " aussi pas mal en taille du code, et comme dit le vieil adage, "plus il y a de code, plus il a de bugs potentiels" :-)
laurentd75
laurentd75

Messages : 429
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 Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 2 sur 3 Précédent  1, 2, 3  Suivant

Revenir en haut

- Sujets similaires

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