[Thomson] Musique et vidéo avec SDSTREAM

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

tjjq44
Messages : 220
Inscription : 26 oct. 2016 13:40

Re: [Thomson] Musique et vidéo avec SDSTREAM

Message par tjjq44 »

Super! Plus de différence de tonalité :D

J'abuse un peu mais pourrais tu me faire une version de "sdstream_music.bin" avec 32 cycles entre deux échantillons afin de pouvoir envoyer des fichiers en 31250 Hz, ça prendrait moins de place sur ma carte SD sans trop de perte de qualité je pense ;)
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Musique et vidéo avec SDSTREAM

Message par Daniel »

Pas de problème, voici la version 31250Hz avec les sources et l'assembleur A09.exe
Si tu veux une autre fréquence, il suffit de modifier les temporisations dans la boucle principale et d'assembler avec sdstream_music.bat
Le programme binaire à insérer dans le fichier .sds est sdstream_music.bin
31250Hz.zip
(44.48 Kio) Téléchargé 139 fois
Daniel
L'obstacle augmente mon ardeur.
tjjq44
Messages : 220
Inscription : 26 oct. 2016 13:40

Re: [Thomson] Musique et vidéo avec SDSTREAM

Message par tjjq44 »

Merci, modifier de quelle manière? Je vois pas bien comment modifier cette boucle pour ajouter/supprimer des temporisations, j'y connais que dalle en assembleur... Quelle différence entre BSR, BRN et RTS? Dans ta boucle à 20 échantillons postée plus haut tu n'as pas de BSR, ça veut dire que 20 cycles entre chaque échantillon c'est le minimum? A quoi ressemble la version avec 23 cycles entre chaque échantillon par exemple?
; Boucle de lecture
; 32 cycles entre deux echantillons (31250/seconde)
; 40 cycles au changement de bloc
;------------------------------------------------------
PLAY
LDA <$FF (4) lecture echantillon
STA <$CD (4) joue echantillon
LDA <$FF (4) lecture echantillon
BMI FIN (3) branchement en fin de fichier
BSR TEMPO (12) temporisation
BRN PLAY (3) temporisation
BRN PLAY (3) temporisation
BRN PLAY (3) temporisation
STA <$CD (4) joue echantillon
BSR TEMPO (12) temporisation
BRN PLAY (3) temporisation
BRN PLAY (3) temporisation
BRN PLAY (3) temporisation
BRA PLAY (3) nouvelle boucle

;------------------------------------------------------
; Temporisation (12 cycles avec BSR et RTS)
;------------------------------------------------------
TEMPO
RTS
En tout cas ça marche très bien à 31250 Hz avec le nouveau fichier que tu viens de poster ;) J'ai refait mon fichier SDSTREAM posté plus haut avec cette nouvelle fréquence d'échantillonage, pas de différence notable à l'oreille (du moins sur ma TV cathodique).
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Musique et vidéo avec SDSTREAM

Message par Daniel »

J'ai réécrit la boucle principale un peu plus proprement pour faciliter la compréhension :

Code : Tout sélectionner

;------------------------------------------------------
; Boucle de lecture
; 32 cycles entre deux echantillons (31250/seconde)
; 40 cycles au changement de bloc
;------------------------------------------------------
PLAY
  LDA   <$FF           (4) lecture echantillon
  STA   <$CD           (4) joue echantillon
  LDA   <$FF           (4) lecture echantillon 
  BMI   FIN            (3) branchement en fin de fichier 
  BSR   TEMPO         (21) temporisation 
  STA   <$CD           (4) joue echantillon
  BSR   TEMPO         (21) temporisation 
  BRA   PLAY           (3) nouvelle boucle

;------------------------------------------------------
; Temporisation (21 cycles avec BSR et RTS)
;------------------------------------------------------
TEMPO
  BRN   TEMPO          (3) temporisation 
  BRN   TEMPO          (3) temporisation 
  BRN   TEMPO          (3) temporisation 
  RTS
L'instruction BSR TEMPO introduit une temporisation de 21 cycles dans la boucle.
La routine TEMPO est composée de trois instructions BRN qui ne font rien et consomment 3 cycles.
Au total 3*3=9 cycles, plus le BSR (7 cycles) plus le RTS (5 cycles), soit 21 cycles.

Pour changer la temporisation, il faut ajouter ou enlever des instructions BRN (3 cycles) et/ou des instructions NOP (2 cycles).

La version avec 23 cycles par échantillon nécessite une temporisation de 12 cycles :

Code : Tout sélectionner

;------------------------------------------------------
; Temporisation (12 cycles avec BSR et RTS)
;------------------------------------------------------
TEMPO
  RTS
Pour faire, par exemple, une version avec 25 cycles par échantillons (40000 échantillons par seconde) il faut ajouter 2 cycles par échantillon :

Code : Tout sélectionner

;------------------------------------------------------
; Temporisation (14 cycles avec BSR et RTS)
;------------------------------------------------------
TEMPO
  NOP                  (2) temporisation 
  RTS
Daniel
L'obstacle augmente mon ardeur.
tjjq44
Messages : 220
Inscription : 26 oct. 2016 13:40

Re: [Thomson] Musique et vidéo avec SDSTREAM

Message par tjjq44 »

Ok je comprends mieux le principe, c'est pas intuitif au premier abord l'assembleur faut dire aussi lol.
tjjq44
Messages : 220
Inscription : 26 oct. 2016 13:40

Re: [Thomson] Musique et vidéo avec SDSTREAM

Message par tjjq44 »

Encore une question (pour changer), peut-on mettre un "border" noir ou gris au lieu de blanc autour de l'image et si oui comment stp?
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Musique et vidéo avec SDSTREAM

Message par Daniel »

L'instruction SCREEN au début du programme de lancement sélectionne la couleur de l'écran.

Code : Tout sélectionner

========================================
MUSIC.BAS
Programme de lancement d'une
demonstration de musique.
========================================
1 CLEAR10,&H8FFF:A=&H9F00
2 CLS:LOCATE0,0,0:SCREEN0,7,7
3 READX$:IFX$="**"THENEXEC&H9F00:END
4 POKEA,VAL("&H"+X$):A=A+1:GOTO3
5 DATA34,19,1F,B8,8B,86,1F,8B,1A,50,96
6 DATAFF,81,FE,26,FA,CE,90,00,8E,02,00
7 DATA3D,96,FF,A7,C0,30,1F,26,F7,35,19
8 DATA7E,90,00,**
Syntaxe : SCREEN x,y,z
x = couleur d'écriture
y = couleur d'arrière-plan
z = couleur de bordure

0 = noir, 1 = rouge, 2 = vert, 3 = jaune, 4 = bleu, 5 = magenta, 6 = cyan, 7 = blanc
Les couleurs 8 à 15 sont les mêmes en plus clair, sauf 15 qui est orange.
Daniel
L'obstacle augmente mon ardeur.
tjjq44
Messages : 220
Inscription : 26 oct. 2016 13:40

Re: [Thomson] Musique et vidéo avec SDSTREAM

Message par tjjq44 »

Archi simple en fait... je n'aurais pas pensé à regarder dans le lanceur basic !
Avatar de l’utilisateur
Silou78
Messages : 382
Inscription : 11 févr. 2017 14:54
Localisation : Yvelines (78)

Re: [Thomson] Musique et vidéo avec SDSTREAM

Message par Silou78 »

Pour rebondir sur mon premier message, page précédente, concernant la possibilité d'utiliser un nouveau type d'encodage basé sur un réseau de neurones. Et bien ça y est, NVidia explore cette possibilité :
https://www.dpreview.com/news/575625769 ... ompression
Sylvain
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Musique et vidéo avec SDSTREAM

Message par Daniel »

L'une des limites de la vidéo sur Thomson est le temps nécessaire à la décompression de l'image. Il faut utiliser un algorithme simple pour ne pas ralentir l'affichage. Je ne crois pas que l'on puisse utiliser des méthodes très sophistiquées. Les méthodes plus complexes sont adaptées aux processeurs rapides, quand le temps de calcul est négligeable par rapport au temps de transmission et d'affichage.

L'autre limite est la vitesse d'affichage, en particulier lors d'un changement de plan nécessitant un ré-affichage complet de l'écran. Aucune méthode de compression ne peut l'accélérer.

Par rapport aux démonstrations déjà réalisées (et pas encore toutes diffusées) il y a peut-être une petite marge de progrès, mais pas de révolution à attendre. La révolution, c'est le passage d'une transmission série (SDDRIVE) à une transmission parallèle sur 8 bits (SDSTREAM).
Daniel
L'obstacle augmente mon ardeur.
Bentoc
Messages : 178
Inscription : 14 sept. 2019 13:35
Localisation : Var - France

Re: [Thomson] Musique et vidéo avec SDSTREAM

Message par Bentoc »

Bonjour,

Si j'ai bien compris le fonctionnement pour accéder aux données sur le SDSTREAM, dans le cas ou l'on serait dans un programme en asm "perso".
il faut d'abord faire des lectures en $E7FF (sur TO8) espacées d'un certain temps (lequel ?) pour sélectionner un fichier.
Ensuite deux lectures "rapides" en $E7FF permettent de charger le fichier.
=> pas d'autres actions d'init à faire ?

Une fois que le fichier est chargé, la lecture des données se fait toujours sur $E7FF et les données bouclent.

Est-il possible de changer de fichier à la volée (sans reboot) ?
Y a t'il d'autres "commandes" accessibles pour échanger avec SDSTREAM ?
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Musique et vidéo avec SDSTREAM

Message par __sam__ »

Bentoc a écrit : 25 mars 2021 11:39 Une fois que le fichier est chargé, la lecture des données se fait toujours sur $E7FF et les données bouclent.
C'est ce que j'observe.
Est-il possible de changer de fichier à la volée (sans reboot) ?
Y a t'il d'autres "commandes" accessibles pour échanger avec SDSTREAM ?
Je ne crois pas, mais une solution que j'ai en tête est de pouvoir naviguer à n'importe quelle position du fichier en utilisant le rebouclage.

Soit un fichier de longueur L, si je suis à la position P, et que je veux aller à la position Q, on peut faire l'algo suivante
  • Si Q=P, on fait rien (évidemment :wink: )
  • Si Q>P, lire "rapidement" (Q-P) octets (on avance dans le flux)
  • si Q<P, lire "rapidement" (L+Q-P) octets (on avance jusqu'à la fin de fichier (L-P) ce qui fait reboucler, et on lit les Q octets restants.
Bon comme lire des mega-octets c'est pas facile avec des compteurs 16bits, il vaut mieux travailler sur des secteurs (blocs 512 octets d'un coup), ce qui permet d'indexer des fichiers jusqu'à 32Mo sur 16 bits (c'est gros).

La lecture d'un octet prends 4 cycles "LDA <$FF", en lire 512 prends donc 2048 cycles (2ms), soit une vitesse de l'ordre de 250ko/sec. Donc si le fichier fait disons 2Mo, il faut au pire 8 secondes pour passer d'un endroit du fichier à l'autre. En pratique je pense que si les données dans le fichier sont organisées pour être le plus proche possible et dans le sens du stream, les temps peuvent être plus courts.

Note: j'ai pas encore essayé un "CLR <$FF" qui fait deux accès à la carte (le CLR est buggé sur 6809: il fait un accès en lecture avant l'accès en écriture) et donc "potentiellement" force SDStream à fournir (et donc lire) 2 octets dans les 6 cycles de l'instruction, soit 25% plus rapidement qu'avec deux "LDA <$FF" (8 cycles au total).
Dernière modification par __sam__ le 25 mars 2021 13:08, modifié 2 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
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Musique et vidéo avec SDSTREAM

Message par Daniel »

Oui, malheureusement ça reste séquentiel et seulement en lecture. Il n'y a aucune écriture, donc aucune commande possible.
J'avais un autre projet (ARDDRIVE) pour faire à la fois de la lecture et de l'écriture, mais je n'ai pas réussi à le finaliser.

Toutefois, avec SDTREAM, il doit être possible d'ajouter un signal vers l'Arduino pour le faire revenir au début du fichier, ou pour faire une avance rapide. Ce n'est pas forcément simple mais s'il y a une demande je peux étudier le sujet.
Daniel
L'obstacle augmente mon ardeur.
Bentoc
Messages : 178
Inscription : 14 sept. 2019 13:35
Localisation : Var - France

Re: [Thomson] Musique et vidéo avec SDSTREAM

Message par Bentoc »

C'est déjà pas mal d'avoir réussi a passer des commandes de sélection et de chargement d'un fichier avec seulement des accès en lecture.
Pour le moment j'ai pas de besoin particulier coté stream (ça viendra peut-être avec le temps), mais je voulais juste comprendre le fonctionnement.
Merci à vous deux !
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson] Musique et vidéo avec SDSTREAM

Message par Daniel »

Pour la sélection du fichier c'est aussi purement séquentiel. L'Arduino sélectionne les fichiers un par un en bouclant sur le répertoire principal. Le programme Thomson lit le nom du fichier sélectionné. Ensuite il lit un caractère isolé pour demander la sélection du fichier suivant, ou il lit deux caractères en moins de 10 millisecondes pour confirmer la sélection du fichier en cours. C'est un peu comme un simple clic ou un double clic.
Daniel
L'obstacle augmente mon ardeur.
Répondre