ASM sur Thomson

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

dinoprodest
Messages : 312
Inscription : 01 févr. 2020 20:31
Localisation : Rome - Italy

Re: ASM sur Thomson

Message par dinoprodest »

J'ai essayé de convertir un fichier audio 8 bits en 6 bits, je l'ai chargé en mémoire, puis en asm je l'ai copié à l'emplacement a7cd. Ça marche mais c'est très fort. Avez-vous des suggestions?
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: ASM sur Thomson

Message par Daniel »

Baisser le niveau de sortie du son.
Avec l'émulateur dcmoto, il y a un réglage possible dans les options, et un réglage possible dans Windows.
Avec le vrai PC128 il suffit de changer le réglage de volume du moniteur.

Par contre je déconseille de réduire la valeur des échantillons (sauf s'il y a trop de saturation).
En effet, avec un échantillon sur 6 bits seulement, si on réduit l'amplitude le bruit de fond devient très vite perceptible et gênant. L'idéal est d'être toujours en limite de saturation pour avoir le meilleur rapport signal/bruit.
Daniel
L'obstacle augmente mon ardeur.
dinoprodest
Messages : 312
Inscription : 01 févr. 2020 20:31
Localisation : Rome - Italy

Re: ASM sur Thomson

Message par dinoprodest »

proposez-vous donc de jouer des échantillons 8 bits au lieu de 6?
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: ASM sur Thomson

Message par Daniel »

Je ne comprends pas la question.
Le CNA des ordinateurs Thomson est limité à 6 bits. Un échantillon ne peut pas être sur 8 bits. Il n'y a pas de choix possible.

cna.png
cna.png (40.07 Kio) Consulté 4162 fois
Daniel
L'obstacle augmente mon ardeur.
dinoprodest
Messages : 312
Inscription : 01 févr. 2020 20:31
Localisation : Rome - Italy

Re: ASM sur Thomson

Message par dinoprodest »

ok .... récapitulons .... J'ai normalisé un échantillon de 8 bits à 6 bits. Mais quand je joue c'est très déformé.
dinoprodest
Messages : 312
Inscription : 01 févr. 2020 20:31
Localisation : Rome - Italy

Re: ASM sur Thomson

Message par dinoprodest »

pour normaliser d'abord le calcul, la valeur minimale, la valeur maximale et l'amplitude maximale, puis utiliser cette formule:
b=((float)(b-min)/ampl*63);
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: ASM sur Thomson

Message par Daniel »

Pour convertir un échantillon 8 bits en 6 bits, il ne faut surtout pas tronquer les deux bits de poids fort, ce sont les plus importants. Si on les enlève la musique ne ressemble plus à rien.

L'échantillon 8 bits a une valeur de 0 à 255. Il faut le ramener à une valeur sur 6 bits (de 0 à 63) en le divisant par 4. Théoriquement, il vaut mieux arrondir le résultat de la division à l'entier le plus proche, mais pour simplifier on peut se contenter de décaler chaque octet vers la droite de deux bits. Les deux bits de poids faible sont perdus.

Cette division avec arrondi provoque naturellement une légère distorsion. Pour améliorer le résultat il existe des techniques de diffusion d'erreur (dithering). Elles seraient trop longues à exposer ici mais on trouve leur description dans la littérature. La plupart des logiciels de traitement audio proposent de telles méthodes pour atténuer les effets de la réduction du nombre de bits. Aucune n'est parfaite, on ne peut pas masquer totalement la perte de qualité.
Daniel
L'obstacle augmente mon ardeur.
Asic512
Messages : 128
Inscription : 30 juin 2019 21:13

Re: ASM sur Thomson

Message par Asic512 »

Bonjour,

J'aimerais m'essayer à la reproduction de musique sur TO8. D'après ce que je comprends, il faut modifier les 6 bits de poids faible de $E7CD (qui envoie une impulsion de 0 à 63).
Je pourrais charger en mémoire une liste d'octets que je recopierais successivement dans $E7CD (disons en assembleur).

À partir d'une source "réelle", par exemple une piste d'un CD, comment créer une suite d'octets qui sera ensuite audible sur le thomson ? J'aimerais surtout comprendre le principe de la conversion : je me ferai un programme python pour tester ma compréhension. Faut-il (et comment ?) jouer sur la durée quelque part dans le code ?

Autre question : comment créer une suite d'octets qui me donneront un "LA" ?

Je précise que je ne m'intéresse ici ni à des questions de compression ou de qualité, ni à la lecture à la volée (streaming) sur carte SD. Quelques secondes de musique suffiront à mon bonheur.

Merci d'avance votre aide, de vos partage de liens/codes ou de vos conseils de lecture !
Asic512
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: ASM sur Thomson

Message par Daniel »

Pour faire au plus simple, il faut utiliser un logiciel d'édition audio sur PC. On transforme le morceau à jouer pour avoir des échantillons monophoniques sur 8 bits non signés à la fréquence choisie pour la restitution, disons entre 10000 et 40000 échantillons par seconde. On sauve ce morceau au format "PCM raw data". Dans le fichier obtenu, on décale chaque octet de deux bits vers la droite (division par 4) pour avoir des échantillons sur 6 bits (entre 0 et 63).
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: ASM sur Thomson

Message par __sam__ »

Asic ce que tu cherches à savoir c'est la "théorie" du son échantillonné. L'idée est d'envoyer un échantillon (et pas un pulse) à espace régulier au convertisseur numérique/analogique. Pour un son donné, disons un La 440Hz, la théorie (Shannon) nous dit que pour bien reproduire ce son il faut l'échantillonner à 2 fois sa fréquence, donc 880Hz. En pratique avec seulement 2 échantillons pour reproduire un signal il y a beaucoup de distorsion. Il vaut mieux entre 8 ou 10. Cela signifie qu'il te faut envoyer autour de 4400 octets par seconde pour faire on LA bien joli.

Si tu veux t'amuser, le mieux est de faire comme on l'a tous fait à l'époque avec le programme basic/asm fourni dans le numéro 165 d'hébdogiciel:
Image
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
Asic512
Messages : 128
Inscription : 30 juin 2019 21:13

Re: ASM sur Thomson

Message par Asic512 »

Bonsoir,

Merci de vos réponses ! J'ai donc fait un échantillonnage de deux secondes de musique à 8kHz et 6 bits ce qui m'a donné un fichier de 16 ko que j'ai chargé en mémoire. J'ai écrit une petite routine en assembleur pour produire chaque échantillon en environ 125 cycles (quelques cycles de copie + plein de cycles de temporisation) et ça marche ! Le son n'est pas très très bon mais je n'ai pour l'instant testé que sur émulateur (+PlayOnMac). J'essaierai sur un vrai TO8. J'essaierai aussi d'affiner mon calcul de cycles ou d'augmenter l'échantillonnage.
Asic512
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: ASM sur Thomson

Message par __sam__ »

8khz, c'est pas mal. Le son devrait être plutôt propre. Si tu le trouves mauvais, c'est que quelque chose cloche. Qu'est ce que tu trouves pas bon dans ce son? Il est distordu ? Tu n'entends rien ? Tu entends pas mal de souffle et de bruit sous-jacent ? Dis nous en plus.

Au fait, as-tu bien fait du 6 bits non-signé ?? Parce que passer un truc signé sur une truc non signé va introduire un max de parasites.

Ou alors peut-être que l'amplitude audio est trop basse et que le rapport signal/bruit est en défaveur du signal. Essaye de faire en sorte que le signal a le max d'amplitude dans l'intervalle 0->63.

A l'inverse si tu boost trop le son, la conversion vers 6 bits va introduire des saturations, et le son sera déformé. Tout est affaire de compromis. Si besoin est j'ai une routine d'ajustement de gain automatique qui marche bien pour produire un son thomson très propre même à 5khz (voir les vidéos SDDrive, mais je ne suis pas sur que ce soit mon dernier algo la dedans... Néanmoins le son est bon.)
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
Asic512
Messages : 128
Inscription : 30 juin 2019 21:13

Re: ASM sur Thomson

Message par Asic512 »

Merci de ton intérêt !

J'ai affiné mon calcul de cycles et j'ai essayé sur un vrai TO8 : le son n'est pas "clair" (il y a beaucoup de souffle ou de grésillement) même si on reconnait le morceau. Rien de comparable à ce que je peux entendre par exemple dans "Bad Apple" sur le même TO8.

Il faut que je vérifie à nouveau mais il me semble que le même échantillon passait bien sur mon Mac.

Je ne peux pas exclure que mon code soit quelque peu erroné. En voici un extrait : je veux copier 16000 octets stockés à partir de $A000 successivement dans $E7CD. L'échantillonnage est de 8192hz soit 122 cycles par échantillon. Pour obtenir des cycles supplémentaires, j'ai copié quelques lignes dans les codes de Daniel ("SDDRIVE_MUSIC")

Code : Tout sélectionner

	LDY    #16000 		;nb octets restant à copier
	LDX #$A000		;adresse départ
	
LOOP
	LDA ,X+ 		;  (4+2) 
	STA $E7CD		; (5)
	LEAY -1,Y		;  (4+1) decrementation du compteur Y
	LBSR  TEMP14   		; temporisation 14 cycles
	LBSR  TEMP14   		; temporisation 14 cycles
	LBSR  TEMP14   		; temporisation 14 cycles
	LBSR  TEMP14   		; temporisation 14 cycles
	LBSR  TEMP14   		; temporisation 14 cycles
	LBSR  TEMP14   		; temporisation 14 cycles
	LBSR  TEMP14   		; temporisation 14 cycles
	LBRN  $FFFF		;temporisation    5 cycles            (5) 
	BNE     LOOP      	; ( 3)    TOTAL:  6+5+5+7*14+5+3= 122 cycles pour un echantillon 

 
*------------------------------------------------------ 
* Temporisation de 14 cycles
* LBSR(9)+RTS(5)
*------------------------------------------------------
TEMP14
  RTS                 retour                     (5) 
Y avait-il d'autres choses à faire que j'ai oubliées ? Une initialisation au départ ? Une erreur de calcul ?
Asic512
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: ASM sur Thomson

Message par __sam__ »

Comment initialises-tu le registre CNA ? Moi en version "simple" (je me préoccupe pas de restaurer l'état à la sortie), je fais (DP=$E7 pour TO et $A7 pour MO):

Code : Tout sélectionner

  LDA   <$C0          ; PIA systeme
  ANDA  #$FB          ; clear mute bit
  STA   <$C0          ; modification PIA
  LDA   <$CF          ; lecture registre de ctrl B
  ANDA  #$FB          ; raz bit 2
  STA   <$CF          ; selection DDRB
  LDB   #$3F          ; set bits 0-5
  STB   <$CD          ; bits CNA en sortie
  ORA   #$04          ; set b2
  STA   <$CF          ; selection PB
Autre chose: as tu bien bloqué les interruptions au début de ton programme (ORCC #$50), sinon elles vont te perturber le timing et brouiller l'écoute :lol:
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
Asic512
Messages : 128
Inscription : 30 juin 2019 21:13

Re: ASM sur Thomson

Message par Asic512 »

Ça marche enfin ! Le son est clair et j'ai eu l'écho de la flûte :lol: !

En fait, je n'avais pas compris l'initialisation qu'il fallait faire au début (malgré le parcours de différents guides :oops:).

Merci encore !
Asic512
Répondre