[Thomson TO8] Projet Adaptation de Bubble Bobble

Cette catégorie traite de développements récents pour nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

[Thomson TO8] Projet Adaptation de Bubble Bobble

Message par Neotenien »

Bonjour

En janvier 2020, j'avais vu une vidéo montrant toutes les plate forme sur lequel ce super jeu d'arcade avait été adapté.



Parmi les ordi 8 bits, on trouve bien sur le C64, CPC (la version commerciale n'st pas terrible (je change mon commentaire) comparée à la version C64 ou BBC Micro (pas de musique de fond, sprites tout petits), mais la version homebrew est plutôt pas mal!) et ZX Spectrum, mais aussi sur MSX1/2, BBC Micro, et l'Apple II. On trouve aussi les version Atari ST et Amiga (quasiment similaire). Côté console la version NES (berk) Master System (pas mal si ce n'est pour la transparence)... et donc aucune version pour Thomson!

Alors j'ai prévu d'essayer de m'y mettre, en mode BM16 couleur en testant différentes vitesse d'affichages de Sprite bm16 (avec une transparence) en Basic (très lent), Pascal Base compilé (10 fois la vitesse du Basic) et en Assembleur (environ 20 à 30 fois plus rapide qu'en Pascal compilé). Donc c'est un projet un peu fou, je ne sais pas si j'y arriverai, mais j'ai vu la version Amstrad Homebrew et BBC Micro qui me paraissant tenir la route (surtout que l'architecture du BBC est proche du TO8 avec un processeur équivalent). Donc j'envisage de réer une version à mi chemin entre la version CPC et Atari ST (yaura aussi les scrolling d'écran, l'intro aussi qui sera proche de celle de BBC Micro), mais ça va être un long projet... Le jeu a 100 niveaux et près d'une dizaine d'ennemis différent avec de nombreux sprites pour chacun (entre 6 et 10 sans compter les bonus etc...).

(vidéo un peu longue pour le peu de visu, désolé, j'en ferai une autre mieux quand j'aurai avancé)

Sauf qu'il n'y a pas vraiment de RSC pour 6809, la plupart des autres bécanes sont en 6502 ou Z80... tout est à faire, mais j'ai créé un utilitaire JavaScript pour dessiner des sprites et retranscrivant le code suivant 4 types. Un autre utilitaire JS pour créer les tableau est aussi en court.

Bref actuellement, j'ai réussi à créer des routines JavaScript pour dessiner des Sprite bm16 avec transparence (sur la couleur 15), ou Tiles (dans la même routine) et à positionner ces sprites. J'ai fait des tests et pour déplacer 12 sprites Bubble sur la largeur de l'écran (bm16, soit 79-1 = 78 déplacements) ça prend moins de 8 s en étant avec un timer de 1/10! Le seul hic est que vu la gestion du bm16 sut TO8/MO6, il ne peuvent se déplacer que de 2 en 2 pxl en horizontal (à moins d'utiliser la routine "plot" assembleur, mais la vitesse du jeu s'en ressentira, au moins divisé par 2 dans ce cas).

J'ai utilisé le Basic, puis Pascal Base et actuellement, l'Assembler v3.0 de Prehisto. Sam Devulder m'aide aussi en me donnat des conseil sur l'Assembleur (notamment pour le Scrolling avec le 6809). J'y intégrerai de l'audio musicale en utilisant Synthetia et un autre logiciel. Pour le moment, j'en suis à voir comment faire fonctionner le gate array page des TO8 pour la visu des écrans. Le tout testé avec DC Moto de Daniel Coulomb
Dernière modification par Neotenien le 25 oct. 2020 18:04, modifié 2 fois.
Patrick
Messages : 2019
Inscription : 16 mai 2009 09:30
Localisation : Clermont-Ferrand

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par Patrick »

Joli projet. Je suis curieux de voir les premiers résultats.
Patrick
gotcha
Messages : 2758
Inscription : 30 mars 2017 11:39
Localisation : Isère
Contact :

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par gotcha »

Neotenien a écrit : 23 oct. 2020 20:46 CPC (la version commerciale est pitoyable, mais la version homebrew est plutôt pas mal!)
'Pitoyable' est peut-être un peu excessif non ? Tu parles peut-être en comparaison avec le portage d'autres machines ou de ce qu'aurait pu être fait pour respecter à la lettre le gameplay d'origine. Mais si on prend le jeu sans le comparer, je le trouve très sympa et j'y ai passé des heures dessus à l’époque avec l'impression d'un très bon jeu.

C'est pareil pour Ghost n Goblins. Les puristes qui veulent un portage exact et parfait du jeu d'arcade vont dire que la version CPC d'origine est nulle. Et pourtant, cette version originale est je trouve excellente et mythique. Et ça ne m’empêche pas de prendre du plaisir aussi à jouer à la version plus récentes (Xiphos) qui est plus respectueuse du gameplay arcade d'origine.
Amstrad CPC et Goupil power :mrgreen:
Bénévole à l'association pour un conservatoire de l’informatique et de la télématique (https://www.aconit.org)
Markerror
Messages : 2121
Inscription : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par Markerror »

La version CPC commerciale de Bubble Bobble est tout à fait correcte. Elle aurait évidemment pu être mieux (en particulier les graphismes), mais l'animation tenait la route et à l'époque, je m'était bien amusé avec.

Le remake CPC de CngSoft est lui très proche de l'arcade. Techniquement, le jeu aurait pu être plus beau, mais tradition espagnole oblige, César a absolument voulu que tout tienne dans 64ko. Sur une version 128ko, on aurait pas de sprites clignotants (merci le double buffering).
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par Neotenien »

Re bonjour

J'ai commencé le projet mi juillet 2020. Je le fais par intermittence

Pour les besoins de ce jeu en bm16c (bitmap 16c), j'ai créé (avec l'aide de Samuel) une routine affichant des sprites de n'importe quelle largeur (multiple de 4 pxl) à n'importe quelle hauteur (limitée quand même à la vitesse du micropros, donc on peut dire que la manipulation de 2 sprites style "street fighter" (32x64) serait la limite à ne pas dépasser, ainsi qu'un outil JavaScript permettant de définir des sprites pour Thomson (avec 4 codages automatiques suivant les besoins) en 16 couleurs (mode bm16) mais qui pourra être aussi pour d'autres ordi 8-16 bits par la suite. Cet outil javascript servira aussi à créer des "tableaux" ou "univers" (style "Super Mario" par exemple).

Ce code d'affichage de sprite en assembleur qui prend tout au plus 50 cycles par paire de pixel (dû au mode bm16) gère aussi la transparence (fixé sur la couleur 15 du Sprite, c'est un bon compromis dans ce mode vidéo) ainsi que les tiles (non transparent, calcul beaucoup plus rapide), le tout en moins de 150 octets en LM.

Vous avez un exemple de ce que ça donne ici, pour les Thomson TO8/TO9 utilisant la technique du double buffer (comme le rapelle Samuel Devulder)

Les étapes suivantes vont être la génération de tableau avec scrolling pur chaque nouveau tableau, les déplacements de bubbles dans ce tableau, ceux des monstres, ... ya encore pas mal de taf.

Cependant, je compte insérer une musique de fond. Le logiciel musique 3V semble pouvoir faire de la musique 3 Voix via ?? (bizarrement, ça ne fonctionne pourtant qu'en Basic 128 ou 512 ce qui laisse penser que ça utiliserait l'interface musique, ie le CNA 6 bits). Finalement j'ai trouvé la doc technique de la manière dont le "play" du basic fonctionne, ça utilise juste une liaison série composée de bits envoyées sur le câble péritel!! Réduit à sa plus simple expression, aucune puce dédiée... Donc pas de synthétiseur en vue pas terrible... Je vais devoir utiliser le CNA alors.
Dernière modification par Neotenien le 30 oct. 2020 16:34, modifié 1 fois.
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par Daniel »

Neotenien a écrit : 30 oct. 2020 15:11 le synthétiseur des Thomson dont on ne sait pas grand chose (on ne sait même pas de quelle puce il s'agit!).
Si, on le sait bien, c'est un MEA8000. Tout est expliqué dans le livre "Paroles et Micro" de cedic/Nathan.

Neotenien a écrit : 30 oct. 2020 15:11 Le logiciel musique 3V semble pouvoir faire de la musique 3 Voix via ce synthétiseur
Non, Music3V utilise le CNA 6 bits du contrôleur musique et jeux.

Neotenien a écrit : 30 oct. 2020 15:11 Le jeu "Sapiens" semble utiliser le synthétiseur puisqu'il fonctionne sur MO5 et TO7/70 également.
Non, Sapiens utilise le buzzer interne.


D'une manière générale, nous savons beaucoup de choses sur les ordinateurs Thomson depuis que nous les étudions.
Ils ont de moins en moins de secrets.

Pour la production de musique via le CNA 6 bits il y a des dizaines de démonstrations audio, ou vidéo+audio. Mais l'utilisation de l'interface musique et jeux pour produire du son est tellement simple qu'il n'y a pas besoin de documentation : on envoie les échantillons 6 bits à la bonne fréquence, c'est tout. Et pour fixer la fréquence on compte les cycles.
Daniel
L'obstacle augmente mon ardeur.
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par Neotenien »

Salut Daniel
Daniel a écrit : 30 oct. 2020 15:39
Neotenien a écrit : 30 oct. 2020 15:11 le synthétiseur des Thomson dont on ne sait pas grand chose (on ne sait même pas de quelle puce il s'agit!).
Si, on le sait bien, c'est un MEA8000. Tout est expliqué dans le livre "Paroles et Micro" de cedic/Nathan.
Il se trouve que j'ai le logiciel "acheté" "paroles et micro" qui s'appelle "synthétiseur de parole" et quand je l'ai eu il y a longtemps (et c'était pas donné ce genre de produits à l'époque à cause du boitier d'extension qui contient le MEA8000 dont tu parles, mais ma question était de savoir s'il y avait un synthétiseur musical (style Yamaha) comme il existe sur le C64, et d'autres ordi 8 bits, dans l'ordinateur lui-même. Parce que le but est quand même de balancer des commandes de notes de musique pour le jeu en arrière. J'ai vu dans les docs technique présente sur DC MOTO... Les entrée "play" et "note" du système thomson semble consommer pas mal de cycles d'horloges et d'octets (dans la ROM) et ça n'utilise apparemment, qu'une sérialisation de bits vers un fil du péritel (est ce le "buzz) dont tu parle après ?
Daniel a écrit : 30 oct. 2020 15:39
Neotenien a écrit : 30 oct. 2020 15:11 Le logiciel musique 3V semble pouvoir faire de la musique 3 Voix via ce synthétiseur
Non, Music3V utilise le CNA 6 bits du contrôleur musique et jeux.
Ok je me disais aussi!! Parce que j'ai essayer de reproduire ça avec des "play" avec des L très courts et des T très rapide et ça ne marche pas, c'est sérialisé!

Existe-t-il une doc permettant de lancer correctement Music3V ? Je l'ai essayé avec DC MOTO, que pour MO6, et une fois dans le tableau initial avec la superbe musique, je n'arrive pas à le lancer ! (Celle de DC Moto n'indique que l'utilisation une fois entrée). A ce propos, j'ai une disquette "piratée" ? de Music3V pour TO8, faut que je pense à te l'envoyer!

Mon but est de pouvoir jouer une musique de fond sur Bubble Bobble... Je croyais que les 1ers Thomson avaient un synthétiseur audio style Yamaha comme ont les Amstrad et autres C64, MSX et même Oric Atmos!!... mais en fait, c'est pas le cas... Evidemment s'il existait une extension (comme le MEA8000) de parole et micro pour un synthétiseur "musical" (comme un yamaha) qu'on peut programmer ça serait top, mais c'est pas le cas... Vu le prix des TO8, ils auraient pu en intégrer un quand même dans la carte mère non ?

Du coup, je retourne à mon idée initiale avec le CNA/CAN sur 6 bits. Je sais que c'est "facile" à programmer, enfin du moins, pour ce qui est de l'envoie des signaux audio, mais après, c'est toute la partie musique et synchro avec le jeu qui va être coton (je compte bloquer le timer à chaque note, qui est courte et doit faire dans les 1/4 ou 1/5 s).
Daniel a écrit : 30 oct. 2020 15:39
Neotenien a écrit : 30 oct. 2020 15:11 Le jeu "Sapiens" semble utiliser le synthétiseur puisqu'il fonctionne sur MO5 et TO7/70 également.
Non, Sapiens utilise le buzzer interne.
Tout comme l’instruction "play" dont j'ai vu le détail sur les codes sources sur DCMOTO (http://dcmoto.free.fr/documentation/mon ... ik_src.txt)... On peut l'utiliser quand c'est sérialisé (c'est à dire sans multitâche et uniquement pour en jouer) mais sinon. étonnant quand même que le son se Sapiens soit si bien foutu reproduit sur le "buzz". Ils ont du y passer des heures et des heures à tout coder en ASM comme indiqué ici http://dcmoto.free.fr/documentation/laf ... index.html (p103 pour la programmation du "buzz").
Daniel a écrit : 30 oct. 2020 15:39 Pour la production de musique via le CNA 6 bits il y a des dizaines de démonstrations audio, ou vidéo+audio. Mais l'utilisation de l'interface musique et jeux pour produire du son est tellement simple qu'il n'y a pas besoin de documentation : on envoie les échantillons 6 bits à la bonne fréquence, c'est tout. Et pour fixer la fréquence on compte les cycles.
Oui mais ça se gâte quand on veut synchroniser le son et la musique justement (pour la musique de fond pas pour les bruitages).. Bah de toute façon je vais faire des essais et on verra... Mais il n'est pas question que je calcule cycle d'horloge par cycle d'horloge... Peut-être que désactiver le timer pendant 1/10s pour jouer la musique en fond... La musique de Bubble Bobble est composée de pause entre chaque note et chaque note est courte (de l'ordre de la demi seconde voire moins)... ça peut se jouer.

Parmi les démos, Thomson elles sont rares celle qui font cette synchro musique animation, à part l'équaliseur 10 bandes de "space project".
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par __sam__ »

Sapiens, Karaté, 5ème axe, tous ces jeux utilisent le buzzer.

En travaillant assez vite on peut reproduire n'importe quelle forme d'onde avec le buzzer. C'est du son PWM (voir la wiki pour les détails). Ca marche bien, mais consomme beaucoup de resource. Daniel a fait des expérience de streaming PWM sur MO5 avec une carte SD quelque part dans ce fil. Ca marche bine, sauf qu'il reste quand même une porteuse clairement audible si on ne travaille pas assez vite genre 11 ou 22kbits/secondes (il y a un fil quelque part ici avec des expérimentation que j'avais faites via un analyseur de spectre.)

Heureusement, les son utilisant le CNA n'a pas besoin de fonctionner à une fréquence aussi élevée que le PWM. Si c'est bien fait il n'y a pas de porteuse, et cela libère un peu le CPU. Pas aussi élevé mais élevé quand même. Une qualité "grande onde" est du genre 4khz, cad qu'il faut envoyer un nouvel échantillon audio 4000 fois par seconde, mais la qualité ne sera pas super bonne. Si on veut une qualité CD il faut envoyer 44 000 échantillons/secondes. Le 6809 peut le faire, mais il ne fait alors plus que cela. Une qualité acceptable est probablement autour de 8khz (8000 fois par secondes.)

Un truc important: l'espacement entre les échantillons doit être régulier, sinon on entends des distorsions. Pour faire cela soit on compte exactement les cycles machines dans le code pour insérer le code d'envoi de nouvel échantillon au bon moment, soit on utilise l'interruption timer.

Ce dernier marche bien: le timer est précis et régulier comme il faut mais le sur-cout en cycles des interruptions IRQ en ROM est énorme (plusieurs centaines de cycles perdues en rom à chaque appel avant même d'être entrée dans la routine utilisateur.) Je l'ai utilisé dans les demos PimiTV, TopOpop de la Forever14, et mesuré que ca coutait 50 ) 60% de temps CPU, ce qui ne laisse plus trop de temps pour les animations.

Exit le timer donc. L'approche utilisée par Préhisto dans Mission:liftoff est donc le comptage cycle ce qui fait perdre le moins de cycles possibles, mais c'est beaucoup plus laborieux: il a compté les cycles dans tous les chemins d'execution du moteur du jeu et ajouté du code pour envoyer les échantillons audio au bons endroits.

Dans tous les cas ajouter du son est complexe et couteux sur thomson. C'est pour cela qu'on a rarement des jeux avec un musique en continu sur cette machine.

Ah bonne nouvelle, je pense avoir un player que j'ai écrit vers 2012 qui joue bobble-bublle avec le timer en tache de fond d'une routine qui dessine à l'écran (c'était pour préparer HNY2013). Ca pourrait t'intéresser de regarder le code ASM. Il faut que je me replonge dans l'archéologie. Ayé trouvé:
bubble.zip
Pour tester: LOADM "Bubble",,R
(12.37 Kio) Téléchargé 161 fois
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par Neotenien »

Merci Samuel! Wow je trouve ça incroyable que le son soit en continue (?? pas un seul arrêt ?) alors que l'animation soit aussi fluide!

En fait je crois que ma démarche initiale est inverse (du moins pour le moment), puisque je pensais mettre l'animation du jeu dans la routine timer (justement pour contrôler la vitesse de déplacement des sprites) et mettre la musique de fond en processus principal.

Je viens de voir vite fait le code. En fait tu as mis en routine timer la séquence musicale et l'animation en principal (l'inverse de ce que je compte faire) bon... Et que tu as donc écrit un système de notes avec sanS doute des échantillon de type double harmonique ? (principale et 3ème ou 4ème je pense) c'est très proche du "Play" des thomson mais en plus agréable! Il manque une pause à un moment dans la partition et je crois qu'il y a une note qui n'est pas la bonne aussi . Ca me convient tout à fait!! Puis-je le réutiliser ? Mais je changerai un peut la tonalité des notes (même si la fréquence/"note" est la bonne).

Et ça me rassure sur la suite du jeu parce que j'étais pas sûr que les 1MHz du Thomson auraient suffit. D'autant que dans Bubble Bobble ça peut dépasser les 10 sprites quand on a 6 ou 8 monstres avec les bubulles en + qui restent en suspension (le nombre max de bulles "libres" va de 4 (BBC Micro) à 10 (C64, MSX2 et Amstrad homebrew))... Ca fera donc en tout une quinzaine de sprites à gérer grand max, ca rentre dans les 1/10 s..

Et pour ce qui est de l'audio, la fréquence du LA du diapason étant à 400 Hzh, avec un échantillonnage double (800Hz) d'après la loi de Dirac, admettons 1000, 4 kHz pour l'échantillonnage on en sera au moins à l'octave 6 (si on démarre le LA de plus basse octave à 50 HZ) ça suffira LARGEMENT! On ne parle pas de sons complexes comme de voix ici.

Pendant le mois de Novembre, je vais essayer de terminer l'interface JavaScript pour créer des tableaux ou univers de jeux 8 bits (en plus de la créations de Sprites)
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par __sam__ »

Dans cette version là, la fréquence du timer est variable (pour changer la hauteur de la note), mais j'ai d'autres players multivoix et marchant sur interruption à pas fixe. Dans la version à fréquence fixe, l'interruption peut gérer un compteur et tous les 1/5, 1/10 ou 1/20 de secondes lever un drapeau. Le moteur de jeu peut alors utiliser ce drapeau pour se synchroniser.

Le player utilise des sons carrés (crénaux) monophonique avec le buzzer comme la routine play, d'où la ressemblance avec les sons du BASIC.

La mélodie est une conversion du fichier midi de l'archive dans un "codage" personnel de la musique monophonique très compact (les demos comme TopOPOP ou Rock-Fort doivent tenir dans moins de 1ko). C'est le même player que là: http://dcmoto.free.fr/programmes/hny2013/index.html qui joue de longues minutes de musique, avec de l'animation et tout dans 20ko de ram (qui contient l'image de fond compressée).

Oui tu peux l'utiliser, mais depuis j'ai fait mieux en utilisant toujours des sons carrés (ils sont simples à fabriquer), mais en multivoix via le CNA et en parallèle du basic. Lance la diskette ZZ.sap avec un "B" : Le son est joué par une routine toute petite de moins de 768 octets en ram non commutable ce qui fait que cela n'interfère pas avec le basic qui passe son temps à commuter la RAM $A000 à la recherche de variables ou instructions.
bubble.zip
Lancer ZZ.sap avec l'autoboot "B". Son + Basic en même temps.
(35.87 Kio) Téléchargé 154 fois
Et pour ce qui est de l'audio, la fréquence du LA du diapason étant à 400 Hz, avec un échantillonnage double (800Hz) d'après la loi de Dirac, admettons 1000, 4 kHz pour l'échantillonnage on en sera au moins à l'octave 6 (si on démarre le LA de plus basse octave à 50 HZ) ça suffira LARGEMENT! On ne parle pas de sons complexes comme de voix ici.
Shannon tu veux dire ? (Dirac c'est la physique atomique/quantique). Attention, S'il suffit de 880hz pour jouer correctement un LA440, cette fréquence ne convient pas pour le RE juste à coté. C'est pour ca que la fréquence du timer est ajustée à chaque note.

Mais oui sur le papier tu as raison que en théorie les sons "créneaux" étant un truc de l'ordre de la dizaine de khz, le 6809 devrait avoir assez de temps pour les générer, cf le player ci-dessus qui programme le timer à 2000hz environ pour en dériver des sous-horloges permettant de jouer du DO-4 au DO-6. Mais attention, la sous horloge du SI-5 est la même que celle du DO6 car 2000hz est trop petit pour les notes trop hautes. Le player est imprécis dans les hauteurs et le son est distordu (c'est un phénomène classique des players par CPU). Pour être plus précis il faut monter en fréquence avec par exemple 8000hz qui permettrait de séparer la sous-horloge du SI-5 de celle du DO-6, mais là on vole quasiment tout le CPU pour faire du son. Aussi j'ai choisi 2khz, qui est un "bon" compromis en terme de temps laissé au basic.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par Neotenien »

Salut Samuel

Si j'ai bien compris, dans ta version 1 de Bubble, tu utilises juste la variation de la durée (TSB E7C6) pour faire varier la fréquence des notes ? Et en fait tu ne changes rien d'autre et fais un XOR sur E7C1 (b4 je crois ? qui sert sur le "fil" audio du péritel ? En fait c'est pas idiot du tout ça bouffe très peu de rsc (quelques octets) et évite des calculs complexes

En fait, avec ton premier programme sur Bubble on a bien la fréquence (la hauteir) de la note de la musique originale de Bubble, ce que le Play du basic ne permet pas (octave pas assez haute, ça ne monte qu'à 5)

Moi je voulais faire la démarche inverse à savoir que la routine timer sert pour le jeu lui même et la musique de fond en prog principal. Et donc penses tu que ça ne marchera pas dans ce sens ?

Je suppose que le CNA apporte le multiVoix par rapport au "Buzz". Moi ce que je voudrais est de pouvoir utiliser pas seulement un simple signal sinusoidal mais des sons + complexes. Apparemment, le logiciel Polyphonia (ainsi que Music 3V et synthétia ?) doivent utiliser au moins 16 échantillons pour avoir des harmoniques.

Tu utilises combien d'"octets" pour ton échantillon de base ? 8 ? 16 ?

Le CNA ne fait pas qu'un signal carré mais permet du multiplexage de fréquence justement (multivoix). Est ce que tu as fait un "OR" pour tes 2 voix ? M'enfin je reste convaincu que les Thomson aurait pu intégrer un synthétiseur musical style Yamaha ou je ne sais quoi... TOUS les autres 8 bits (à part peut être l'Apple 2) en avait un! Au prix où était les TO8... Comparé aux Amstrad par exemple! Et jsuis désolé mais sans musique, un jeu d'arcade c'est pas pareil... Le jeu Yeti est un super (et rare) exemple sur Thomson tournant avec une musique de fond et il n'y a aucun ralentissement. Le seul autre que je connaisse est Démonia.

J'ai regardé ton code ASS pour le Bubble1, j'avoue que je suis un peu perdu, il faut du temps pour comprendre, mais c'est quoi le "VAR" qui apparait quelque fois ? Je n'ai pas ça dans la doc d'Assembleur 2.0.

Oui Shannon et pas Dirac (mais il me semble qu'il y a un truc entre Dirac et le traitement numérique,... ça a un rapport avec un pic sur une fonction... Je ne m'en souviens plus).

Qu'appelles-tu "sous horloge" ? Est-il possible de gérer la musique de fond ET le jeu via le timer ? Ah oui tu parlais de compteur, est ce que par exemple ça peut servir pour gérer la vitesse d'animation du jeu ? Disons que si on est sur une base de 1/50s et que l'on déplace Bobble sur 1/12s et chaque monstre sur 1/6s (vitesse évolutive) on peut utiliser une variable qui se décrémente et qu'on utilise dans le programme principale si c'est = 0 ? Parce que sinon je ne vois pas comment réguler la vitesse de l'animation (qui peut être très rapide si'l y a peu de sprites!!).
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par __sam__ »

Neotenien a écrit : 31 oct. 2020 12:50 Si j'ai bien compris, dans ta version 1 de Bubble, tu utilises juste la variation de la durée (TSB E7C6) pour faire varier la fréquence des notes ? Et en fait tu ne changes rien d'autre et fais un XOR sur E7C1 (b4 je crois ? qui sert sur le "fil" audio du péritel ? En fait c'est pas idiot du tout ça bouffe très peu de rsc (quelques octets) et évite des calculs complexes
Oui. D'une façon générale il faut éviter les calculs trop complexes dans les interruptions. Ce player est le premier que j'ai conçu. Il est simple et peu puissant (une voix, créneaux). Les suivants sont de plus en plus complexes jusqu'à être capable de jouer des modules amiga avec plusieurs voix et des sons échantillonnés (mais ca ne marche plus en interruption: les calculs sont trop couteux).
Moi je voulais faire la démarche inverse à savoir que la routine timer sert pour le jeu lui même et la musique de fond en prog principal. Et donc penses tu que ça ne marchera pas dans ce sens ?
si ca peut marcher, c'est juste que moi j'ai toujours cherché à jouer la musique en "tache de fond" comme sur les autres machines. Le temps CPU doit être prioritairement donné aux effets dans les démos normalement.
Tu utilises combien d'"octets" pour ton échantillon de base ? 8 ? 16 ?
Dans le dernier player plus haut j'utilise des créneaux. La largeur du créneau le plus grave est de 8 interruptions à 2khz (250 hz).
Le CNA ne fait pas qu'un signal carré mais permet du multiplexage de fréquence justement (multivoix). Est ce que tu as fait un "OR" pour tes 2 voix ?
Non pas de multiplexage ni de fréquence. Dans le CNA tu additionnes les échantillons.

A noter: le buzzer peu faire du multivoix via multiplexage justement. Il va envoyer (multiplexer) au buzzer rapidement l'état du canal 1 puis du 2 , puis du 3 etc. C'est la technique mise en oeuvre dans le player Quattropic de UTZ qui a été discuté sur plusieurs fils par ici: viewtopic.php?f=25&t=6895&hilit=quatroppic, viewtopic.php?t=6552
M'enfin je reste convaincu que les Thomson aurait pu intégrer un synthétiseur musical style Yamaha ou je ne sais quoi... TOUS les autres 8 bits (à part peut être l'Apple 2) en avait un! Au prix où était les TO8... Comparé aux Amstrad par exemple! Et jsuis désolé mais sans musique, un jeu d'arcade c'est pas pareil... Le jeu Yeti est un super (et rare) exemple sur Thomson tournant avec une musique de fond et il n'y a aucun ralentissement. Le seul autre que je connaisse est Démonia.
Et oui l'absence de synthétiseur autonome est un grand manque pour les jeux. Les son de yet et même démonia ne sont pas continue. Si tu enregistre sous audacity, tu va voir que les sons sont très courts et émis à intervalle réguliers (enfin +/- régulier dans le cas de Démonia, car quand il y a beaucoup de sprite le tempo ralenti sévèrement).
J'ai regardé ton code ASS pour le Bubble1, j'avoue que je suis un peu perdu, il faut du temps pour comprendre, mais c'est quoi le "VAR" qui apparait quelque fois ? Je n'ai pas ça dans la doc d'Assembleur 2.0.
C'est du macro-assembleur. Ca permet de créer ces propres directives. Là je l'utilise pour déclarer une variable d'une certaine taille dans du code auto-modifiable. (le code auto-modifiable n'est pas beau et est dangereux, mais pour gagner de précieux cycles on ne fait pas mieux.)
Qu'appelles-tu "sous horloge" ?
Quand tu fais du multivoix, chaque canal a sa propre fréquence correspondant à la hauteur de la note à y jouer. Cette sous-horloge dérivée logiciellement de la fréquence F de l'interruption avec un compteur, permettant de produire les sous-fréquences F/n (et même F * p/n en étant un peu tolérant sur le bords).
Est-il possible de gérer la musique de fond ET le jeu via le timer ? Ah oui tu parlais de compteur, est ce que par exemple ça peut servir pour gérer la vitesse d'animation du jeu ? Disons que si on est sur une base de 1/50s et que l'on déplace Bobble sur 1/12s et chaque monstre sur 1/6s (vitesse évolutive) on peut utiliser une variable qui se décrémente et qu'on utilise dans le programme principale si c'est = 0 ?
Oui voilà: depuis l'interruption à la fréquence F, tu peux en utilisant un compteur générer les fréquences F/n. Bon tes exemples avec 1/50 1/12 1/6 on un défaut c'est qu'il n'y a pas de gros diviseur en commun. Ca marche mieux avec des fréquences qui sont des multiples les unes des autres.
Parce que sinon je ne vois pas comment réguler la vitesse de l'animation (qui peut être très rapide si'l y a peu de sprites!!).
Mettons que ton programme principal fasse tourner le jeu. Mettons que le son est une interruptions 2000 fois par seconde. Tu peux, durant l'interruption décompter un compteur de 199 à 0, et qu'une fois arrivé à 0 il reparte à 199 en passant à 0, une variable en mémoire (flag):

Code : Tout sélectionner

flag fcb 1
cnt fcb 200
...
interruption_2000hz:
  dec cnt ; decompte
  bne suite ; fini ? non ==> suite
  lda #200  ; oui => reinit compteur
  sta cnt
  clr flag   ; modification du drapeau
suite:
 ..
 jmp KBIN
Ton programme principal peut se synchroniser sur le passage de ce flag à 0 pour redessiner ses affaires toutes les 200/2000 = 1/10 sec:

Code : Tout sélectionner

boucle_principale:
  tst flag ; attente passage à 0
  bne boucle_principale
  inc flag ; on écrit 1 dans le flag pour attendre le prochain passage à 0, dans 1/10sec 
  .. affichage des sprites ..
  .. etc .. 
Si le programme doit faire des choses à 1/25, 1/10, etc, il te faut autant de flags pour gérer la synchronisation, mais le principe est le même: tu as l'interruption très fréquente qui te dérive le passage à 0 de flags à une fréquence particulière, ce sont les sous-horloges sur lesquelles le programme principal peut se synchroniser pour faire chacune de ses opérations pile au bon moment, et cela sans avoir à utiliser pleins d'interruptions timer distinctes.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par Neotenien »

Ok je crois avoir tout compris

Cependant, quelqu'un m'avait dit que Music3V utilisait l'interface musique (le CNA 6 bit) et les voix, ce qui implique du multiplexage de fréquence!! On additionne pas les échantillons en amplitude, on en fait un multiplexage, ie, on fait un "OR'" sur les valeurs de chaque voix à un instant T

En fait, je crois que le seul apport de l'interface musique (CNA) est pour le volume sonore rien d'autres ? (et ici, on peut créer de vrais onde avec la valeur "15" qui et pour l'ordonnée à 0 de la sinusoide.

Je comprend l'utilité des octave en fait!! Surtout en informatique! Puisqu'on double la fréquence à chaque octave;, on n'a qu'à juste mettre les 12 demi-ton en temps que "timer" musical qu'on décrémente, en utilisant l'octave la plus basse et avec un décalage à droite de la valeur on multiple la fréquence par 2, c'est hyper bien vu!

Quand tu parles de fréquence à 2 kHz, tu parles bien de celle de l'audio (correspondant à l'octave 6 en gros) ? Ca signifie 4000 interruptions à la seconde ? Ca veut dire qu'on met 250 dans la valeur TimerVal (E7C6) ? Ca me parait faible, il faut peu de code à mettre dedans parce que 2000 cycles (250x8) c'est peu. Ca correspond en gros à 600 instructions 6809. Franchement, s'il y avait eu un synthétiseur à la place...

Et quand tu parles de créneau je suppose qu'il s'agit de 8 "échantillons" comme je l'évoque ? Le logiciel "Polyphona" que tu m'as suggéré est capable de créer différent instruments, avec signaux triangulaire, de type guitare, carré (clarinette comme le son de base des Thomson). Ca doit pouvoir se faire avec 8 échantillons de 6 bits chacun, mais bon la doc n'est pas complète là dessus... Je ferai des tests avec le CNA.

Enfin cette technique par timer n'est valable que pour les TO mais pas pour les MO parce que d'après ce que j'ai lu, il n'y a pas de registre ValTimer pour les MO5/MO6. Pourtant le jeu "yéti" tourne sur MO5 avec une musique de fond, idem pour démonia. Je pense que ça joue une note de type "play" et courte (une croche ?) à chaque fin d'une animation... De toute façon, vu que le timer est à 12500 (1/10) sur les MO.

Ok je considère avoir compris la technique, je ferai mes propres tests (avec ce que je connais sur l'audio ça devrait aller).

Il reste le problème du multiplexage entre la musique de fond et les bruitages éventuel...
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par __sam__ »

Neotenien a écrit : 31 oct. 2020 18:09 Cependant, quelqu'un m'avait dit que Music3V utilisait l'interface musique (le CNA 6 bit) et les voix, ce qui implique du multiplexage de fréquence!! On additionne pas les échantillons en amplitude, on en fait un multiplexage, ie, on fait un "OR'" sur les valeurs de chaque voix à un instant T
Non non, il fait de l'addition d'échantillon je crois. Tout ca n'a aucun rapport avec le multiplexage temporel qui revient, faute de pouvoir additionner les échantillons (synthèse FM), de les mélanger dans le temps (multiplexage temporel). Le player de UTZ ainsi que beaucoup de players sur spectrum utilisent cela. Le multiplexage fréquentiel est lui autre chose utilisé pour la radio/tv par exemple. On y parle des canaux de fréquence. Ca n'a rien à voir avec de la musique ou des sons. C'est de l'ingénierie pure pour utiliser au mieux la bande passante physique.

Dans tous les cas le OR n'a rien à voir avec le multiplexage, c'est juste une autre façon de sommer les échantillons sans s'occuper du débordement (c'est plus rapide). On pourrait aussi utiliser le max entre plusieurs échantillons si on voulait, ca donnerait un mixage différent. Mais tout ca: +, OR, MAX c'est juste une façon différente de réaliser l' "addition" d'amplitude.
Quand tu parles de fréquence à 2 kHz, tu parles bien de celle de l'audio (correspondant à l'octave 6 en gros) ? Ca signifie 4000 interruptions à la seconde ? Ca veut dire qu'on met 250 dans la valeur TimerVal (E7C6) ? Ca me parait faible, il faut peu de code à mettre dedans parce que 2000 cycles (250x8) c'est peu. Ca correspond en gros à 600 instructions 6809. Franchement, s'il y avait eu un synthétiseur à la place...
Non, 2khz c'est l'interruption 2000 fois par seconde. Sachant qu'un créneau revient à changer l'état du bit 2 fois, ca veut dire qu'on peut faire un créneau max total de 1ms, soit un beep à 1000hz. J'aime pas trop les numéros d'octave car il y a un décalages entre les anglos-saxons/germaniques et nous. Ainsi le LA440 est de l'octave 3 chez les uns (La_3), et 4 chez les autres (A4).

J'ai fait des expériences de son multitâche à 4khz (diskette des guignols de l'info trouvable >>ici<<), ca ralenti trop la machine. 2khz c'est plus jouable.
Et quand tu parles de créneau je suppose qu'il s'agit de 8 "échantillons" comme je l'évoque ? Le logiciel "Polyphona" que tu m'as suggéré est capable de créer différent instruments, avec signaux triangulaire, de type guitare, carré (clarinette comme le son de base des Thomson). Ca doit pouvoir se faire avec 8 échantillons de 6 bits chacun, mais bon la doc n'est pas complète là dessus... Je ferai des tests avec le CNA.
Les 8 échantillons dans la fréquence max jouable, on a 8 emplacements dans le temps où pouvoir placer le front montant/descendant du créneau. Cela ne permet que de jouer 8 notes de la dernière octave accessible. C'est moins que les 12 théoriques, mais ca contient les notes les plus "simples en fraction de 8" avec lui:

Code : Tout sélectionner

* RE     set    9*DO/8
* MI     set    10*DO/8
* FA     set    4*DO/3
* SOL    set    12*DO/8
* LA     set    5*DO/3
* SI     set    15*DO/8
A l'octave en dessous on a 16 emplacement où changer le (placer le front), ce qui permet de produire 12 note distinctes.. pas forcément très juste, mais mieux. En pratique il faut avoir une résolution assez fine pour ne pas avoir trop de distorsion. Donc plus il y a d'interruption où l'on peut choisir de flipper le bit, et meilleur sera la fidélité à la hauteur de la note. (je ne suis pas forcément très clair, c'est pas un truc simple à expliquer, même si évident quand on code un player.)
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: [Thomson TO8] Projet Adaptation de Bubble Bobble

Message par Neotenien »

L'audio est bien du multiplexage de fréquence!! Je t'assure!! J'ai fait suffisamment de cours là dessus en analyse numérique je pense... C'est une partie la plus difficile des maths! Surtout quand on aborde les séries et transformée de Fourrier. Mais la partie échantillonage est plus simple à comprendre.

Essaie de voir un cours sur les signaux audio avec les différentes harmoniques... Si tu as, par exemple, l'harmonique principale à 100 HZ, la 2nde (si elle existe) sera à 200 Hz, la 3ème à 300 etc... Et le son d'un instrument dépend de la présence ou non de ces harmoniques. Les sons de flûtes, de guitare, d'hautbois etc, sont déterminés par ces harmonique dans leur signal acoustique... Voir le logiciel "Synthétia" avec la doc qui donne un bout d'explication là dessus. Quand tu envoies un signal "carré" sur le buz, en vérité, ça crée une sinusoïde à la sortie de la fréquence /2 par rapport à ta fréquence de changement d'état (c'est la différence entre baud et bit/s) mais ça tu le sais déjà.

Quand tu as 2 sons qui se mélangent (mettons un a 100 Hhz et l'autre à 300 Hz), les 2 signaux "fusionnent" et on utilise donc le OR sur les échantillons numériques. ON NE LES ADDITIONNE PAS! l'amplitude d'un signal audio n'augmente pas avec la multiplicité des signaux!! 2 signaux de 45 dB ne vont pas faire 90 dB mais reste à 45 dB au total. Même si ces 2 fréquences sont différentes.

Un signal carré en terme de transformée de Fourrier ferait qu'il y a une infinité de fréquences sur le spectre "fréquentiel"

Par contre, je suis étonné que tu me dises que ta fréquence corresponde à celle du timer. 1000 Hz en audio ça correspond à une octave de 5 et c'est en dessous de la fréquence utilisée dans ta première version de ton algo musical de bubble bobble (qui est à 6, c'est au dessus de la capacité de "play" du Basic). et correspond à une fréquence audio d'environ 2000 (si le LA de O4 est à 440Hz, celui du O5 est à 880 et celui de l'O6 à 1760).

La FM signifie bien le Modulation de fréquence, ça signifie que c'est par le changement de fréquence qu'on détermine le vit à l'état haut ou bas. En appliquant une détection du signal au mois x4 comparé à la fréquence de base (pour pouvoir capter si on reste au même état "+" entre 2 états successif ou pas)
Dernière modification par Neotenien le 31 oct. 2020 22:45, modifié 1 fois.
Répondre