DCMOTO - Emulateur universel Thomson 8 bits : Forum - Programmation - Au sujet de mon projet de routine
Retour : Accueil » Programmation
Pages : 1 - 2
Auteur Message
jasz
Visiteur
Date : 10/02/2005 à 23h48
Pour ceux qui n'étaient pas la sur server87, j'ai comme projet de mettre en oeuvre une routine destinée à jouer une partition musicale. Je sais cela peut paraître fou de prime abord... mais pas tant que cela.

La technique se nomme soundtracking. Bien connue sur atari, amiga et bien plus tard sur pc.

Le principe est simple. A partir d'échantillons sonores (samples) et d'une partition, la routine va crée un morceau musical. Le thomson a longtemps bénéficié de négligence en ce domaine le vouant au silence.

Nous savons qu'il est doté d'un convertiseur A/D dont l'information est codée sur 6 bits.

Donc pourquoi ne pas tenter le pari ;)

Ancien codeur sur atari, j'ai adapté une routine soundtrack de ma composition sur thomson. Pour l'instant mes premiers travaux sont concluants. La routine mise au point fonctionne de la même manière que celle que j'ai sur atari.

Question tm, je n'ai pas encore vérifié.

Je me heurte à deux problèmes. Le premier est celui de la gestion mémoire. Pour passer d'une banque à l'autre c'est pas trés fun (donc pour le testing j'ai laché la table des volumes). Le second la gestion des interruptions (là zero).

Voilà. Sinon, sans la table des volumes (ou même avec) la routine peut fonctionner sur mo5. Mais là aussi, je ne connais pas grand chose au 6809 version mo pour avancer au delà.

J'ai donc besoin d'aide et peut-être de notre union verra le jour une sound demo
en haut - en bas
Daniel
Visiteur
Date : 11/02/2005 à 08h37
Sur TO8 :
- Changement de banque RAM en modifiant les 5 bits de poids faible de E7E5. Il y a aussi un mode de compatibilité TO7/70 et TO9 (voir plus bas)
- Les interruptions IRQ sont générées par le timer du 6846. Le mécanisme est décrit dans le Manuel Technique du TO8. Par contre la programmation du timer n'est pas expliquée. On la trouve dans la datasheet du 6846.

Sur MO5 :
- Pas de banques mémoire, donc c'est encore plus simple
- Le micro-processeur MC6809E est le même que sur toutes les autres machines Thomson. (une des versions du TO7 avait peut-être l'horloge interne ? corrigez moi si je me trompe).

Sur MO6, il n'y a pas de 6846, c'est impossible de modifier la fréquence des IRQs.
Le changement de banque est comme sur TO8, sauf qu'il n'y a que 3 bits et l'adresse est A7E5

Sur TO7/70 et TO9 la banque RAM est définie par les 5 bits de poids fort de E7C9.

Tous ces mécanismes sont expliqués en détail dans les manuels techniques des machines respectives. Ils sont indispensables pour programmer efficacement.

Daniel
en haut - en bas
Yoann
Visiteur
Date : 11/02/2005 à 08h57
Salut a tous,

Je crois que j'avais donne les procedures exactes pour faire les changements de banque en assembleur sous TO, merci pour la partie MO ;)

Je comprend Jasz sur le fait que le travail par banque n'est pas des plus facile. Si un tableau se trouve dans une banque, et qu'un autre se trouve dans une autre banque, et que l'on a besoin de valeur des 2 tableaux pour compiler une 3ieme valeur, il va falloir en effet faire des changement intempestifs de banque. Peut etre que le mieux est de couper ces tableaux en 2. Un truc dans le genre qui suit :

Banque 0
Premiere moitiee du tableau A
Premiere moitiee du tableau B

Banque 1
Deuxieme moitiee du tableau A
Deuxieme moitiee du tableau B

Ne connaissant pas la technique que Jasz utilise, je ne sais pas si ce schema est possible. Ou alors, il faudrait diviser la taille du tableau par 2 de facon a loger les 2 tableaux dans une seule banque. Je suppose qu'a ce niveau, la qualite s'en trouverait divisee par deux (ou quatre), mais pour un debut pour quelqu'un qui commence sur 6809 avec un programme de sound-tracking, ce n'est surement pas un probleme, et ca laisse du champ pour s'ameliorer
en haut - en bas
Fool-DupleX
Visiteur
Date : 11/02/2005 à 09h19
Je suis curieux de voir le resultat. Qu'entends-tu par adapter au juste, et en quoi les premiers pas sont-ils concluants ?

En ce qui concerne les interruptions, je pense que la meilleure idee est de les masquer, point final. En effet, non seulement le convertisseur A/D n'est accompagne d'aucun buffer ni de canal DMA, mais en plus, les routines d'interruption (et leurs vecteurs) sont codees dans la ROM de la machine et bouffent deja pas mal de cpu pour l'usage interne du moniteur (ne serait-ce que de determiner si le curseur doit clignoter, brancher sur une eventuelle interruption utilisateur et j'en passe). Impossible donc de court-circuiter ces routines natives sans reprogrammer la rom, ce qui n'est pas le but.

A noter que le logiciel "Synthetia" contient des routines sympathiques de mixage - Le programme combine des formes d'onde FM, qui ont l'avantage de ne pas prendre trop de place en memoire par rapport a de vrais samples.

Fool
en haut - en bas
Daniel
Visiteur
Date : 11/02/2005 à 09h22
Complément pour les IRQs du TO8 :

A ce jour, je n'ai encore jamais essayé de modifier la fréquence des IRQs, mais tout indique que c'est possible. Le programme de choix de la palette du TO8 modifie les compteurs du timer 6846 en cours de comptage, pour déclencher l'IRQ à un moment bien précis. Mais ce n'est pas à proprement parler un changement de fréquence.

Je n'ai jamais vu d'autre programme bricoler le timer. Pourtant il y a plusieurs modes de fonctionnement possibles et les temporisations sont modifiables, un peu comme sur PC. J'avoue aussi ne pas l'avoir programmé dans dcmoto. Je me contente d'un compteur de fréquence fixe, les seules opérations possibles sont d'en lire ou d'en modifier la valeur.

Daniel
en haut - en bas
Yoann
Visiteur
Date : 11/02/2005 à 09h27
Pour repondre a fool-duplex (et non full-duplex ), je pense que les essais de jasz sont au niveau de la generation d'octets. Si j'ai bien compris, ca routine a reussie a generer une sequence d'octet identique a celle que son app genererais sur Atari ... donc la routine semble fonctionner dans le bon sens.

Ceci dit, je serais tres curieux de voir ce que cela pourrait produire sur un Thomson.
en haut - en bas
jasz
Visiteur
Date : 11/02/2005 à 22h15
Je vais répondre à toutes les questions (si je peux ;))

La routine est décrite dans ses premières ligne sur server87, donc inutile d'y revenir. Le test réalisé porte sur un sample de 80 octects et un accord de 3 notes sur 2 cycles pour remplir les deux buffers.

Les échantillons obtenus sont identique à ceux de mon programme atari (car la routine est la même). Seul défaud je ne sais pas gèrer l'espace mémoire des thomsons. Alors avec une table des volumes de 16 ko, si ma routine se trouve sur la bank 1. Comment faire.

Ma routine pour répondre à fool est concluante sur le plan expérimental seulement. Reste à lui faire sortir un son. Là, pour moi c'est plus rude.

J'ai donc besoin de votre aide.
en haut - en bas
jasz
Visiteur
Date : 12/02/2005 à 08h49
J'ajoute
La table des volumes peut être codée sur 6 bits (64x64) soit 4 ko (au lieu de 16 ->64x255) à condition que tous les samples soient convertis au format 6 bits
Ce qui prends moins de place et rends possible la chose même sur un simple to7 (à condition d'avoir une partition assez courte et des samples de 1 à 2 ko max.)

Maintenant la routine a été testée sur deux cycles sans synchronisation vbl. Simplement par exec. Donc question tm, il faudrait que je voie comment ça ce passe dans des conditions réelles.

Je rappelle que la fréquence de replay est de 10,723 khz ce qui génère un digit de 216 octets à chaque vbl. Donc cela risque d'être gourmand en temps si l'on ajoute la routine de replay. Raison pour laquelle, je limite également les commandes.

D'autre commandes sont en court d'étude comme 1 (fine porta up),2 (fine porta up),3 (porta slide),9 (spl offset)
en haut - en bas
jasz
Visiteur
Date : 17/02/2005 à 21h22
J'aurai besoin qu'on m'explique comment faire pour tester le clavier.
Style breaker la routine en appuyant sur la touche x ou la barre... Je ne m'en souviens plus.

Au passage le site defusr.free.fr ne repond plus. Préhisto a changé de site?
en haut - en bas
eric
Visiteur
Date : 18/02/2005 à 03h34
routine de test rapide du clavier du moniteur ???
en haut - en bas
Yoann
Visiteur
Date : 18/02/2005 à 03h50
PrehisTO n'est plus de ce monde (monde de l'internet bien evidement) donc son site est ferme.

Je te trouve la routine exacte pour le test clavier ce week-end.
en haut - en bas
Fool-DupleX
Visiteur
Date : 18/02/2005 à 09h56
Eric, telecharge le livre qui se trouve ici, il repondra a pas mal de tes questions pour les a cotes dont on se souvient jamais, genre cette routine.

ftp://forler.ch/pub/doc/basasm

(c'est peut-etre pas tout a fait la bonne url mais tu trouveras en tournant autour, il y a un pdf par chapitre)

Fool
en haut - en bas
jasz
Visiteur
Date : 18/02/2005 à 23h57
Le lien a planté ie
en haut - en bas
Yoann
Visiteur
Date : 19/02/2005 à 01h51
Pour TO, voici ce que j'utilise.

CLAV JSR $E809
BHS CLAV0
LEAS 2,S
JMP THEEND
CLAV0 RTS


Tu appeles cette routine par un JSR CLAV

Si une touche est appuyee, ca redecalle la pile S (pour virer la valeur sauvee par le JSR) et ca fait un JMP vers ta partie de fin. Sinon, ca fait un retour juste apres le JSR CLAV
en haut - en bas
jasz
Visiteur
Date : 19/02/2005 à 19h23
Merci yoann.

Mais tu n'aurais pas une routine plus rapide avec simplement un test du registre (je pense que c'est le E7C1).
en haut - en bas
Fool-DupleX
Visiteur
Date : 20/02/2005 à 11h49
Si tu veux faire du rapide, il ne faut meme pas envisager d'utiliser le moniteur, ce qui parait assez evident. Mais le probleme est que le clavier sur TO8 est gere par un micro-controleur, donc il va falloir te retaper un petit peu de prog, un simple test de port ne suffira pas je suppose (je connais mieux les machines d'ancienne generation).

Pour le lien qui a plante, heu, c'est un simple site FTP, et qui n'a pas bouge depuis 8 ans en plus alors... (et je viens de verifier il est bien up)

Fool
en haut - en bas
Fool-DupleX
Visiteur
Date : 20/02/2005 à 11h55
Dis donc t'aurais pas coche l'option "enable folder view for ftp sites" dans IE des fois? ca a tendance a foirer grave ce truc.

Fool
en haut - en bas
jasz
Visiteur
Date : 20/02/2005 à 20h56
Non ça ne marche toujours pas
en haut - en bas
Fool-DupleX
Visiteur
Date : 21/02/2005 à 10h01
J'en suis navre... mais le probleme ne vient pas du serveur.

Essaye FTP sous DOS pour debusquer le probleme...

Fool
en haut - en bas
jasz
Visiteur
Date : 21/02/2005 à 20h21
Bizarre, c'est le seul ftp qui plante ie.

Non, je laisse tomber. Je trouverais bien une solution.
en haut - en bas
Pages : 1 - 2