Logicielsmoto.com

Nous sommes le 19 Mar 2024, 12:41

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 598 messages ]  Aller à la page Précédente  1, 2, 3, 4, 5, 6, 7, 8 ... 40  Suivante
Auteur Message
MessagePosté: 23 Mar 2021, 11:00 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 477
holalaaa, on dirait une console de jeu :jap:

Avec les fondus et tout ...

Comment ta géré les fondus d'éléments séparés sans toucher aux couleurs des autres sprites ?
ta plusieurs fois la même couleur alors ?

_________________
Image


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 23 Mar 2021, 11:38 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 432
Localisation: Var
Pour appliquer les raster, j'ai utilisé l'IRQ mis en place pour le son et qui doit se déclencher une fois par frame.
L'IRQ est synchronisée sur la ligne en haut du dégradé du ciel.
(En fait il y a deux IRQ : un avec juste le son utilisée au début de l'intro, l'autre avec son + raster)

Quand on n'est pas dans l'IRQ, on déclenche le code des objets, l'affichage des sprites ...
Un des objets (RasterFade) se charge de calculer les valeurs de couleur pour les lignes de raster.
Il prend en entrée une couleur et effectue un fondu (frame par frame) vers une palette de destination.

L'IRQ avant de jouer le son, effectue le refresh des 72 lignes de raster.
Le fond de l'écran (ciel+eau) est une seule couleur (15), la dessus pas de problème, c'est facile.
Quand deux lignes de ciel sont identiques, on en profite pour changer une autre couleur.

Quand l'IRQ se déclenche on a déjà "rendu" à l'écran les deux personnages, il ne reste donc que le bas de l'emblème. On peut donc réutiliser tous les index couleurs dont on a plus besoin.

On commence par les 4 couleurs de vert de l'ile, puis plus bas les 4 couleurs de terre ...
en utilisant les couleurs qui se "libèrent" au fur et à mesure que l'emblème n'a plus a être dessiné.

C'est la partie "fun" car il faut identifier à la main quelles couleurs ne sont plus utilisées et faire le décompte ligne à ligne pour paramétrer tout ça dans un tableau de données.
Comme j'étais "large" :p j'ai entrelacé les lignes du dégradé du ciel.

Un dernier truc : en plus du fondu, RasterFade fait un palette cycle sur une couleur de l'eau, c'est discret mais c'est bien présent.

Je t'invite à regarder le code pour plus de détail (release v0.0.3)
Il n'est pas super optimisé, mais il est a peu près organisé ;-)


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 23 Mar 2021, 13:08 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 477
Ta fais un noeud dans mon cerveau là :W
( Faudrait déjà que j'arrive juste à changer une couleur différente d'une ligne sur 1 balayage d'écran en ASM avant d'aller plus loin lol )
super, c'est vraiment top...

Pour rester dans le sujet Sonic voila mon petit cover pour vous distraire un peu
https://www.wide-dot.com/projets/oastudio/covers/sonic.mp4

_________________
Image


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 23 Mar 2021, 13:47 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 432
Localisation: Var
J'adore ! :sol:

Jolie page d'accueil aussi pour ton site wide-dot.com
Ouverture pour bientôt ?


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 23 Mar 2021, 13:58 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 477
Merci,
Bah pour le site je voulais faire un truc en rapport avec le retro game par rapport aux jeux homebrew, nouveaux jeux sur des vielles machines, voir même des projets futurs, puis à la base c'est pour mes projets en cours concernant tout ce monde là !

Mais pas le temps de faire ça tout seul en faite ! j'ai "10000" projets perso que ça soit en retro game ou musique et réparation d'ordi, j'ai même "restauré" un fauteuil boule 'SPHERE' pour me faire un siège de jeu ;) ...

Bref trop de truc tout seul, ça avance mais doucement... voilà pour la parenthèse !

_________________
Image


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 23 Mar 2021, 15:57 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 464
Je suis cette aventure depuis le début et ce n'est pas bluffé que je suis par les résultats, c'est littéralement atomisé ! Je savais que Thomson nous avait caché les pouvoirs magiques du TO8, mais là ... C'est terriblement réconfortant de se dire que oui, les petits camarades qui rigolaient de ma machine, avaient bien tort finalement. :love:

Félicitations !


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 23 Mar 2021, 17:35 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 432
Localisation: Var
Merci pour vos messages ... moi qui pensais que vous alliez finir par vous lasser de cette intro ;-)


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 23 Mar 2021, 18:09 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 477
lol rien qu'a moi j'ai du faire la moitié de tes vus sur le youtube mdr

_________________
Image


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 25 Mar 2021, 12:26 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 432
Localisation: Var
L'anomalie de l'émulation du timer étant corrigé dans la dernière version "développement" de dcmoto : http://dcmoto.free.fr/emulateur/dcmoto_20210324.zip
Les raster s'affichent correctement sous l'émulateur maintenant ! Merci Daniel.

J'ai avancé hier soir sur l'intégration de la Mégarom T.2. Je pense avoir les idées claires sur le sujet pour pouvoir entamer le dev.
Mon builder génèrera maintenant automatiquement une image disquette et une image rom pour la T.2

Voici le diagramme qui en ressort:
Fichier(s) joint(s):
TO8 game engine-Memory Map.jpg
TO8 game engine-Memory Map.jpg [ 246.56 Kio | Vu 6852 fois ]


On aura le choix dans le cas d'une T.2 de venir charger en RAM des données exomizées présentes sur la ROM (même principe que la disquette), ou d'exécuter certaines routines directement depuis la ROM (paramétrable au niveau de chaque objet).
Le changement principal vient de l'inversion de la zone de "montage" des pages cartouches et data, ce qui implique maintenant de charger des demi pages pour pouvoir faire l'inversion des deux plans de 8ko, car les données seront écrites dans les pages en zone data et exécutées dans la zone cartouche.

Voilà pour les news ... au boulot maintenant et à dans qq jours ... ou semaines !

Ah dernière info : je vais passer de c6809 à LWASM, qui me permettra d'avoir plus de possibilités (macros, étiquettes localisées, IFDEF, BINCLUDE, INCLUDE sans avoir besoin de concat les fichiers, ... et surtout un linker)
Quelqu'un l'utilise ?


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 03 Avr 2021, 15:08 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
Fool-DupleX a écrit:
Je suis cette aventure depuis le début et ce n'est pas bluffé que je suis par les résultats, c'est littéralement atomisé ! Je savais que Thomson nous avait caché les pouvoirs magiques du TO8, mais là ... C'est terriblement réconfortant de se dire que oui, les petits camarades qui rigolaient de ma machine, avaient bien tort finalement. :love:

Félicitations !


C'est sûr!!

C'est juste dommage que les Thomson, même TO8, n'aient pas de synthétiseurs musicaux, même si, en jouant sur les IRQ (TO only, pas les MO qui ne sont conservé que toutes les 1/10s), on peut jouer de la musique de fond au max avec une interrup toutes les 1/2000 s (Sam Devulder a fait de super truc avec ça, idem pour Prehisto)

Côté processeur, apparemment, le 6809 à 1MHz semble valoir les 3.5 MHz de l'Amstrad ou du MSX... Un truc sympa à fare est de monter l'émulateur DC Moto à 3.5 MHZ et même 2 MHz et de tester Enduro Racer, Crazy Cars ou Grand prix 500cc avec ça, et à 2 MHz on dépasse la vitesse des C64, et même quasiment des ZX Spectrum (à 3.5 MHz) qui lui, ne fonctionne quasiment que comme le mode tracé du TO.

A 4 MHz, les jeux sus cité sont au moins aussi rapide que pour un ST. J'ai dans l'idée de faire une vidéo montrant la vitesse de ces jeux sur Thomson s'ils étaient à 4 MHz. J'ai testé enduro racer et c'est vraiment trop rapide. Je regrette quand même de ne pas être à 2 MHz parce que je crains que pour l'adaptation de Bubble Bobble, quand on a 10 billes en + des sprites, ça soit vraiment ralenti. A moins que je ne trouve une astuce, du genre afficher les sprite 1er cycle/2 (soit toutes les 1/6s) et les bulles 2ème cycle/2... Jsé pas...


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 06 Avr 2021, 08:12 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 464
Sur MO5, l'interruption système est à 50 Hz, pas à 1/10 de s. La seule différence avec les TO est que sa fréquence est fixe, c'est tout. Ca ne gêne en rien pour faire de la musique en tâche de fond, par exemple avec le synthétiseur vocal MEA8000 bien connu.

Pour le reste, il me semble que ce n'est pas très réaliste de vouloir faire tourner le 6809 à 4 MHz pour prouver qu'il est plus puissant qu'un Z80. Oui, le 6809 utilise 2 à 3 fois moins de cycles externes pour exécuter ses instructions, mais c'est dû au fait qu'il quadruple l'horloge externe avec une quadrature de phase. Il tourne donc déjà en réalité à 4 MHz en interne quand il reçoit une horloge à 1 MHz. D'autre part, l'horloge système sur les Thomson est à 16 MHz et toute la machine est synchrone, y compris les RAM et le sérialisateur vidéo. Donc si tu voulais faire ça en vrai, il faudrait revoir toute la conception de la machine et remettre en cause son principe synchrone de fonctionnement même. Par ailleurs, une horloge système à 64 MHz n'a aucun sens avec les composants de l'époque. Les RAMs avaient une latence de 120 ns, par exemple. Sans compter la consommation excessive et la dissipation thermique.

Il y a eu des versions améliorées du 6809 à 1.5 et 2 MHz, mais ce serait impossible de les faire tourner à ces vitesses dans un Thomson. Même en supposant un nouveau gate-array pour produire les sous-horloges adaptées à partir de l'horloge système standard de 16 MHz, ça coincera avec les I/Os et la RAM à cause de cette histoire de synchronicité justement (notamment par le fait qu'il ne reste plus de place pour le rafraichissement des RAM : sur Thomson, les cycles idle en externe du processeur, i.e. la phase de décodage, sont mis à profit pour caser le rafraichissement entre les cycles de fetch).

A contrario, avec le 6309, on gagne environ 15% en performance par rapport au 6809 à vitesse d'horloge identique, mais c'est simplement dû au fait qu'il utilise 15% moins de cycles en moyenne pour décoder et exécuter les instructions.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 06 Avr 2021, 12:47 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1800
Localisation: Brest
Oui et puis pour aller plus vite, il faut voir à optimiser les jeux car bien peu le sont vraiment. J'avais regarder le code de SLAP-FLIGHT à l'occasion de la video de Neotenien, et rien que sur la routine d'affichage il y a moyen de gagner pas mal de cycles. Je m'étais dit que je ferais un fil à l'occasion par ici sur son optimisation un jour, mais bon.. "un jour" on sait ce que ca veut dire en pratique... :W

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 06 Avr 2021, 13:05 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 432
Localisation: Var
J'ai passé des heures et des heures à jouer sur SLAP-FLIGHT ... il y a bien longtemps ! Un peu stressant pour la manette ;-)
Je serai curieux de voir le code. Tu as décompilé tout le code ?


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 06 Avr 2021, 14:17 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 432
Localisation: Var
J'en profite pour donner un peu de nouvelles: je suis en plein travail sur le Builder.

Le remplacement de c6809 par LWASM permet de simplifier énormément le build car je peux :
- utiliser directement des INCLUDE et BINCLUDE avec des noms de fichiers, sans avoir besoin de recopier les fichiers les uns dans les autres.
- exporter un fichier contenant les equates et les étiquettes à la suite d'une compilation (permet lors de la compilation d'un autre source d'inclure ce fichier)
- le .lst n'est pas tronqué, donc on voit tt les instructions et commentaires du code
- certains pragma sont bien utiles, comme autobranchlength qui choisi automatiquement un short ou long branch (bxx/lbxx).
- index0tonone permet quand on n'indique pas directement un adressage indexé à "0,x" mais que celui ci est "calculé" (par ex: avec un equate) de bénéficier de l'optim qui remplace le "0,x" par ",x"

Je sais que c6809 a été concu pour la compatibilité syntaxique des programmes existants et il remplit totalement ce rôle, donc je ne dirai pas que LWASM est meilleur, simplement que ça correspond plus à mon besoin.

En prévision de l'immense taille de 2Mo qu'apporte la T.2, il a fallu revoir un peu l'organisation des index qui étaient tous stockés dans la page 1.
Maintenant les index d'image et d'animations sont stockés dans des pages ROM ou RAM, avec une limite d'une page de 16Ko par Objet pour l'index imageset et une autre pour les animations ... on est large maitenenant.
L'impact sur le code est minime, on ne conserve en page 1 qu'un index de page par objet (1 octet) pour l'animation, et un autre pour l'imageset.

J'ai ajouté une gestion de données "communes" entre les niveaux de jeu.
Exemple : les images du personnage principal prennent beaucoup de place, on ne va pas les recharger en RAM à chaque changement de niveau.
On a donc maintenant dans la déclaration d'un niveau de jeu (GameMode) une notion de GameMode "commun".
On peut cumuler plusieurs communs.
Au runtime, lorsqu'on charge les données d'un GameMode, le code de chargement comparera les index de page a charger avec les index du niveau courant.
Comme les communs apparaissent en premier, si les index sont identiques, on passe aux demi pages suivantes.
Le chargement des données se fait maitenenant par demi page de RAM au lieu de fichiers indépendants.
On va gagner en temps de chargement.

J'ai prévu d'ajouter un paramètre d'entrelacement pour la disquette, car aujourd'hui tout est séquentiel ... pas terrible.

Avec la T.2 on pourra choisir les données chargées en RAM et celles qui restent en ROM. Les données chargées en RAM seront exomizée en ROM pour gagner de la place.

La complexité du builder vient du fait que j'utilise un algo de "sac à dos" pour remplir au mieux la RAM, je vais le décliner pour le remplissage de la ROM.
ça implique que les ressources n'ont pas d'adresses définies comme on le faisait "à l'époque". Le positionnement en ROM et en RAM est dynamique en fonction de la taille des objets (code, images, ...) et index et change à chaque compilation, en fonction des éléments modifiés.

Pas d'obstacle insurmontable pour le moment ... ça roule mais la route est longue.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 06 Avr 2021, 15:36 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 464
Pour info, sur c6809, il y a INCLUD, INCBIN et INCDAT pour inclure toutes sortes de fichiers externes, y compris binaires. Et il y a aussi des macros.

Sinon, je suis impressionné par le travail que tu arrives à abattre en si peu de temps. :good:


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 598 messages ]  Aller à la page Précédente  1, 2, 3, 4, 5, 6, 7, 8 ... 40  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 6 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com