Logicielsmoto.com

Nous sommes le 14 Déc 2019, 23:32

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 46 messages ]  Aller à la page 1, 2, 3, 4  Suivante
Auteur Message
MessagePosté: 26 Jan 2016, 17:20 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1115
Localisation: Brest
Alors voilà je voudrais faire un code le plus compact possible qui réalise un truc du style B = (carry set) ? $3B : $33. Cela revient à faire B = $33 + (carry ? 8 : 0). Je ne vois qu'un truc naif pour faire ca
Code:
LDB #$33
BCC *+4
ORB #8
...
Ca prend 9 cycles, ce qui me semble long.

J'ai bien pensé à ceci
Code:
LDB #%00110111
ADCB #0
ANDB #%00111011
ORB  #%00000001
ce qui fait 8 cycles. C'est mieux, mais c'est pas encore ca. Est-ce qu'il y a mieux ?

Si on avait un "SBCB B" qui vaut -1 si C=1 et 0 sinon, on pourrait imaginer
Code:
SBCB B
ANDB #%00001000
ORB  #%00110011
Mais cette instruction n'existe pas :( Le plus proche serait le couple "STB ,-S SBCB ,S+" qui est beaucoup plus lent.

_________________
Good morning, that's a nice Tnetennba


Dernière édition par Samuel Devulder le 31 Jan 2016, 01:44, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
MessagePosté: 26 Jan 2016, 21:01 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1054
Localisation: France (24)
Samuel Devulder a écrit:
Code:
LDB #$33
BCC *+4
ORB #8
...
Ca prend 9 cycles, ce qui me semble long.

D'après mes calculs, cela ne fait que 7 cycles. Dans le pire des cas.
Maintenant, si tu veux faire mieux que 7 cycles, et si tu as de la place à revendre :
Code:
       BCC    SKIP
       LDB    #$3B
       ...
       (suite du code)

SKIP   LDB    #$33
       ...
       (même suite du code que précédemment, dédoublée)

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 26 Jan 2016, 22:18 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1115
Localisation: Brest
oops oui 7 cycles.. oops :jap: .. je ne sais plus calculer. Au secours !

La formule que je cherche à calculer sert à sortir un bit du buzzer. Pour tout dire, je suis en train d'étudier le bout de code trouvé ici.

Je regarde si on peut l'adapter sur Thomson. Après tout la Forever approche ;)

La structure est simple (utilisation de 4 registres 16 bits pour les oscilloscopes indépendants, utilisation de cmp pour faire varier le rapport cyclique), mais on se rend compte de petite différences entre 6809 et Zx. Le Zx tournant à 4Mhz, ces instruction plus lentes sont au final plus rapides que 6809 pour la simple et bonne raison qu'émuler le fonctionnement sur 6809 requiert souvent des cycles de lecture/ecriture en mémoire là ou le ZX peut faire facilement des opération arithmétiques registres à registres.

Dans tous les cas la tentative de portage fait réfléchir, et ca, j'aime bien :)

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Player 4 voix
MessagePosté: 26 Jan 2016, 23:14 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1115
Localisation: Brest
Pour le moment la boucle principale que j'ai trouvée et qui joue 4 notes simples sur le buzzer est du style:
Code:
; joue un pattern
PLAYPTN
    PSHS D,X,Y,U
    STS  <SAV
    LDS  #$E7C0
    LDD  ,S
    TFR  D,X
    EORB #8
    TFR  D,U

    LDY  #duree     ; <-- auto-modifié par le pattern

LOOP
; oscillo 1
    LDD  #0         ; 3
    ADD  #freq1     ; 4 (auto modifié par le pattern)
    STD  <*-5       ; 5
    CMPA #rap1      ; 2 (rapport cyclique, auto modifié)
    BCC  L10        ; 3
    STX  ,S         ; 5 (buzzer 0)
    BRA  L11        ; 3
L1O STU  ,S         ; 5 (buzzer 1)
    BRA  L11        ; 3
L11 SET  *          ; => 3+4+5+2+3+5+3=25 cycles

; oscillo 2
    LDD  #0         ; 3
    ADD  #freq2     ; 4 (auto modifié par le pattern)
    STD  <*-5       ; 5
    CMPA #rap2      ; 2 (rapport cyclique, auto modifié)
    BCC  L20        ; 3
    STX  ,S         ; 5 (buzzer 0)
    BRA  L21        ; 3
L2O STU  ,S         ; 5 (buzzer 1)
    BRA  L21        ; 3
L21 SET  *          ; => 3+4+5+2+3+5+3=25 cycles

; oscillo 3
    LDD  #0         ; 3
    ADD  #freq3     ; 4 (auto modifié par le pattern)
    STD  <*-5       ; 5
    CMPA #rap3      ; 2 (rapport cyclique, auto modifié)
    BCC  L30        ; 3
    STX  ,S         ; 5 (buzzer 0)
    BRA  L31        ; 3
L3O STU  ,S         ; 5 (buzzer 1)
    BRA  L31        ; 3
L31 SET  *          ; => 3+4+5+2+3+5+3=25 cycles

; oscillo 4
    LDD  #0         ; 3
    ADD  #freq4     ; 4 (auto modifié par le pattern)
    STD  <*-5       ; 5
    CMPA #rap4      ; 2 (rapport cyclique, auto modifié)
    BCC  L40        ; 3
    STX  ,S         ; 5 (buzzer 0)
    BRA  L41        ; 3
L4O STU  ,S         ; 5 (buzzer 1)
    BRA  L41        ; 3
L41 SET  *          ; => 3+4+5+2+3+5+3=25 cycles

    LEAY -1,Y       ; 4
    BNE  LOOP       ; 3 => un tour = 107µs (56µs sur Zx)
   
    LDS  #0
SAV EQU  *-2
    PULS D,X,Y,U,PC


La structure avec deux "BRA" dans un même chemin d'exécution peut paraitre sub-optimale. C'est vrai, mais c'est nécessaire pour avoir une exécution en temps constant entre les chemins où l'on sort le buzzer à 1 et ceux où on le sort à 0.

On est sensiblement 50% plus lent que le ZX. La note la plus elevée que l'on peut jouer avec cette routine est de période 214µs, soit 4.6khz ce qui correspond au Ré de l'octave 7. C'est pas mal et ca devrait permettre de jouer les notes jusqu'à l'octave 5 (la plus haute du piano?) de façon suffisamment précise (4 pour 1).

Ce player est intéressant ca il dépasse ce que j'avais fait jusqu'à présent:
  • 2x plus de voix
  • des instruments sont dispo via le rapport cyclique modifiable pour chaque voix
  • il n'utilise que le buzzer 1 bit

_________________
Good morning, that's a nice Tnetennba


Dernière édition par Samuel Devulder le 26 Jan 2016, 23:28, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
MessagePosté: 26 Jan 2016, 23:14 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1115
Localisation: Brest
J'ai aussi une version de la boucle qui utilise le CNA (PRC) et qui est plus courte et plus rapide
Code:
; joue un pattern
PLAYPTN
    PSHS D,X,Y,U
    STS  <SAV
   
    LDX  #0
    LEAY ,X
    LEAU ,X
    LEAS ,U
   
    LDA  #duree     ; <-- auto-modifié par le pattern

LOOP
; oscillo 1
    LEAX $nnnn,X    ; 8 (freq1)
    CMPX #rat1      ; 4 (rapport cyclique)
    ADCB #0         ; 2
; oscillo 2
    LEAY $nnnn,Y    ; 8 (freq2)
    CMPY #rat2      ; 5 (rapport cyclique)
    ADCB #0         ; 2
; oscillo 3
    LEAU $nnnn,U    ; 8 (freq3)
    CMPU #rat3      ; 5 (rapport cyclique)
    ADCB #0         ; 2
; oscillo 4
    LEAS $nnnn,S    ; 8 (freq4)
    CMPS #rat4      ; 5 (rapport cyclique)
    ADCB #0         ; 2
; sortie son
    LSLB            ; 2
    LSLB            ; 2
    LSLB            ; 2
    LSLB            ; 2
    STB  <CNA       ; 4
   
    DECA            ; 2
    BNE  LOOP       ; 3
; total = 15*4-1+12+5=>76µs

    LDS  #0000
SAV SET  *-2
    PULS D,X,Y,U,PC
Avec lui on peut monter jusqu'à 6.6khz. C'est pas mal (sol# du 7eme octave), mais il faut le CNA. Il ferait un bon player pour l'entrée Intro (1ko).

Par contre ces players utilisent tout le CPU. Impossible de faire des effets en parallèle. On pourrait toutefois les utiliser dans un diaporama.

Pour l'instant je préfère la 1ere version car elle n'utilise que le buzzer et on peut facilement modifier le player pour remplacer l'une des voix par un bruit (avec une optim à réaliser). On aurait donc un player permettant de jouer soit 4 voix, ou 3 voix+bruit. Ca serait vraiment très bien pour un thomson (sapiens ne fait que 3 voix il me semble)

Il ne reste plus qu'à tester pour voir si le son produit n'est pas trop mauvais.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 27 Jan 2016, 00:01 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1054
Localisation: France (24)
Samuel Devulder a écrit:
Par contre ces players utilisent tout le CPU. Impossible de faire des effets en parallèle. On pourrait toutefois les utiliser dans un diaporama.

Ça reste toujours possible de faire des effets en parallèle, mais il faut intercaler les codes. Ce qui est très contraignant.

Samuel Devulder a écrit:
Pour l'instant je préfère la 1ere version car elle n'utilise que le buzzer et on peut facilement modifier le player pour remplacer l'une des voix par un bruit (avec une optim à réaliser).

Et surtout qu'on peut l'utiliser sur tous les Thomson :cool:

Samuel Devulder a écrit:
On aurait donc un player permettant de jouer soit 4 voix, ou 3 voix+bruit. Ca serait vraiment très bien pour un thomson (sapiens ne fait que 3 voix il me semble)

Heu... ça n'est pas ce que tu faisais sur tes démos précédentes ?

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 27 Jan 2016, 00:30 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1115
Localisation: Brest
Oui le code marcherait sur tous les TO, et même sur les MO avec une adaptation mineure.

Précédemment il y avait 2 voix + bruit. Là ca serait au choix 3voix+bruit ou 4 voix. Avec 4 voix, les conversions de morceaux midi serait bien meilleure je pense.

J'ai les doigts qui me démangent de tester... mais il y a beaucoup à écrire avant de se rendre compte de ce que ca donne. Là il faut que j'aille me coucher. La suite plus tard... En attendant, voici ce que le player d'origine peut faire sur un ZX spectrum: https://soundcloud.com/irrlicht-project ... opic-test1

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 27 Jan 2016, 00:44 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1054
Localisation: France (24)
A demain sur la face B, alors ;)

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 30 Jan 2016, 14:50 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1115
Localisation: Brest
J'ai converti le player (code), et je suis déçu. Le résultat est très mauvais. On ne reconnait aucune note. Je ne vois pas ce qui cloche dans le code, et la seule explication que j'aie est le fait que jouer les 4 voix sur 1 bit de cette façon ne marche pas bien du tout avec le thomson.

J'ai fait un pattern simple "ptn" qui joue une note sur 2 voix, et celle un octave en dessus sur les autres voix. Le résultat est désastreux sous emul. La phase où les 2 premières voix donnent une valeur 1 quand les deux dernières voix donne 0 donne une altenance élevée de 0/1/0/1, ce qui fait un sifflement insupportable. Ok, la valeur moyenne est 1/2 comme attendu, mais le sifflement gâche tout :(
Fichier(s) joint(s):
Image1.png
Image1.png [ 9.02 Kio | Vu 6133 fois ]
C'est peut-être lié à l'échantillonage réalisé par l'émulateur, mais c'est moche quand même. Je n'arrive pas à comprendre pourquoi sur ZX ou VG5000 ils n'ont pas du tout ce phénomène. Peut-être que leur buzzer est plus lent et moyenne mieux les choses. Il faut dire que leur boucle se déroule en 56µs alors que chez nous il faut 111µs (le double). Or le double c'est ce qu'il faut pour faire passer une note d'un octavle inaudible à un truc affreux qui s'entend....

Pfff.. dommage, vraiment. Je me mettais vraiment à réver de faire pleins de trucs avec ce player.

_________________
Good morning, that's a nice Tnetennba


Dernière édition par Samuel Devulder le 31 Jan 2016, 18:50, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
MessagePosté: 30 Jan 2016, 17:35 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1054
Localisation: France (24)
Les vidéos que tu fais tourner sur MO5 utilisent bien ce type de génération sonore, non ? Dans ce cas, je vois mal pourquoi il y aurait un obstacle pour jouer plusieurs pistes.
Si tu travaillais avec le bus 6 bits, il suffirait d'abord d'ajouter les valeurs de chaque piste - dont le volume serait donc divisé par 4 - avant injection, et non pas d'alterner l'injection des valeurs.

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 30 Jan 2016, 20:56 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1115
Localisation: Brest
Oui, utiliser le CNA serait une solution, mais ce ne serait plus de la musique 1bit et ca ne tournerait pas sur tous les thomson. Au départ je voulais respecter le player ZX qui est assez souple, mais l'alternance 0/1 sur le buzzer c'est peut-être pas une bonne idée sur thomson.

J'ai creusé le truc, et contrairement au player Zx, celui sur 6809 est 2x plus lent. Résultat, sur 6809 l'alternance 0/1 se fait à 18khz, et on l'entend très bien. En fait on la voit aussi très bien dans la capture écran ci-dessus (zone centrale floue). Sur Zx, le même accord est restitué à 36khz, largement au dessus de la fréquence de coupure d'une carte son PC (22khz quand le son est échantillonné à 44khz). Du coup le même accord que celui de la capture précédente donne ceci:
Image
On voit bien les marches d'escalier attendues.

Pour les retrouver sur thomson il faudrait faire un player 4 voix en ~50 cycles cpu. Je n'y suis pas arrivé, mais si je réduit le nombre de voix par deux, notre player passe de 111cycles à 55cycles, et le son est nettement mieux. On voit aussi apparaitre les marche d'escalier sous audacity. Par contre 2voix c'est encore moins que mon player précédent.

Pour vraiment être sur s'il faut accélérer le player d'un facteur 2, je devrais tester sur vraie machine. Si ca se trouve la bande passante du HP de la TV ne monte pas aussi haut que les 22khz d'une carte son et il coupe à 8khz.. auquel cas, le player 1 bit à 18khz sera correctement moyenné.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 31 Jan 2016, 01:11 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1115
Localisation: Brest
Bon j'ai fait une version utilisant le CNA. Ca marche mieux, mais ce faisant je me suis rendu compte que je convertissais mal les fréquences. Et là miracle, la version BUZZER marche beaucoup, beaucoup mieux. Je ne sais pas bien ce que j'ai changé car les fréquences erronéees ne l'étaient pas de beaucoup. Le code du player est resté le même, seuls les data sont différentes. Mystère...

Par rapport au player d'origine je n'ai pas codé les effets de slide ni de note-cut. Du coup le renu est moins joli que la musique d'origine, mais ca montre que le principe fonctionne bien finalement.

Code CNA ([EDIT]buggé): http://pastebin.com/Lq5wTJzk
Code BUZZER ([EDIT]buggé): http://pastebin.com/C2JqUXta

Allez, demain je vais faire en sort que les effets spéciaux soient traduits. Mon idée est de ne plus rendre les pattern de durée fixe, mais d'utiliser le 1er octet pour compter le nombre de 256 tours de boucle. Avec ca le notecut peut être codé simplement. L'octet suivant contiendra un bitmask indiquant s'il faut du bruit ou pas pour cette ligne. Les bits restants peuvent servir à faire des effets synchro avec la musique (couleur tour ecran ou animation de sprites par exemple).

Dommage que je n'ai pas compris ce qui a décoincé la situation.


Fichiers joints:
quattropic.zip [18.62 Kio]
Téléchargé 181 fois

_________________
Good morning, that's a nice Tnetennba


Dernière édition par Samuel Devulder le 31 Jan 2016, 18:51, édité 3 fois.
Haut
 Profil  
Répondre en citant le message  
MessagePosté: 31 Jan 2016, 16:51 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1115
Localisation: Brest
Ok, c'est confirmé: JE SUIS UN ANE!

Un truc me turlupinait depuis hier: le morceau tourne trop vite. Sur Zx il faut 1min avant qu'il ne reboucle, et ma version ci-dessus reboucle en moins de 3 secondes.

En fait, je ne lis que la 1ère ligne du pattern et oublies les suivantes. Au lieu qu'un pattern dure 20secs, il durait une ligne soit 13ms... Tu m'étonnes que la musique ne ressemble plus à rien après un tel tronçonnage (imagines ne jouer que les 3 première notes de chaque page d'un livret!)

J'ai donc rattrapé cet énorme BUG, et introduit la traduction du "note-cut" (ca revient à couper le 4eme canal avant la fin de ligne. J'ai rusé en introduisant une notion de durée aux lignes du pattern), et à présent le son est EXCELLENT, tant au niveau CNA que dans la version BUZZER. Pfew et moi qui pensait abandonner parce que le son n'était pas bon, alors qu'en fait ca n'allait pas à cause de gros bugs tout cons.

Il manque juste la traduction de l'effet "slide". Mais comme je ne comprends pas la différence dans le code ZX avec les sons normaux, je les ai traités comme des vrais son normaux. Ca crée sans doute une légère différence avec le morceau d'origine, mais on va dire que c'est pas grave. Le résultat est là: la musique 4voix sur le buzzer thomson est possible quand on ne s'y prends pas comme un manche.

Le ZIP ci-joint contient un SAP avec le résultat. On peut comparer le son CNA avec le son BUZZER. Perso je trouve la version BUZZER est bien mieux (dans le CNA le son du "bruit" est trop fort). Il contient aussi le code source ainsi que le script perl me permettant de convertir les morceaux.


Fichiers joints:
quattropic.zip [22.24 Kio]
Téléchargé 202 fois

_________________
Good morning, that's a nice Tnetennba
Haut
 Profil  
Répondre en citant le message  
MessagePosté: 31 Jan 2016, 20:13 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1054
Localisation: France (24)
Samuel Devulder a écrit:
Ok, c'est confirmé: JE SUIS UN ANE!
Certainement pas :nanana:

Samuel Devulder a écrit:
Le résultat est là: la musique 4voix sur le buzzer thomson est possible quand on ne s'y prends pas comme un manche.
A ce que je sache, tu es le premier de toute l'histoire du Thomson à avoir réussi à faire du 4 voix avec le buzzer :bien:

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 31 Jan 2016, 21:01 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1115
Localisation: Brest
Si je ne suis pas à âne, c'est que je deviens vieux alors :P En tout cas ce player est sympa car on peut jouer sur le rapport cyclique et donc modifier le timbre des instruments (comme le PLAY du basic). Le générateur de bruit est en outre sensible au rapport cyclique et à la fréquence. Un truc pareil devrait pouvoir émuler pleins de percussions différentes. Il faudra passer un peu de temps à maitriser la gestion de tous ces paramètres.

Prochaine étape pour moi: faire un convertisseur midi vers ce format "pattern" et expérimenter les paramètres pour reproduire des instruments divers et variés.

Reste en suite à utiliser ce player dans un truc sympa. Si possible pour la Forever.. mais ca me semble trop proche.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 46 messages ]  Aller à la page 1, 2, 3, 4  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 5 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