Category: Modèle

Catégorie regroupant les différents modèles d’Oric

  • Oric1 à la conquête des jeux (Eyrolles)

    Bien sûr, votre ORIC sait compter à une vitesse vertigineuse, calculer sans .erreur des courbes mathématiques complexes, il sait comment extraire des racines carrées en un clin d’œil, et bien d’autres choses encore. Mais cela, tous les ordinateurs, du plus gros au plus petit, savent le faire.

    «ORIC-1 à la conquête des jeux» se propose de vous entraîner dans un tout autre univers de programmes, celui des jeux, des dessins en couleur, des sonorités synthétiques informatiques. Vous y rencontrerez une gentille petite chenille, six caméléons et quelques gloutons. Vous voyagerez dans l’espace intersidéral. Vous verrez la tour de Hanoï, un grand mur de briques. Vous vous mesurerez au Master-Mind.

    Nul doute qu’après tout cela, vous désiriez mieux connaître votre ORIC-1 et, pourquoi pas, programmer vos jeux. Pour vous aider et vous guider dans ce labyrinthe aux 65536 adresses, «ORIC-1 à la conquête des jeux» vous révèle le contenu de la mémoire de l’ORIC-1, comment redéfinir les caractères, tous les trucs des modes HIRES et TEXT, et même, mais oui, comment fabriquer des lignes de programme Basic avec un autre programme… Bon amusement !

    Bon amusement !

    https://archive.org/details/eyrolles-oric-1-a-la-conquete-des-jeux

    Téléchargement ouvert à tous

  • Atmos à la conquête des jeux (Eyrolles)

    Après «ORIC-1 à la conquête des jeux», voici maintenant « ATMOS à la conquête des jeux», qui reprend l’ouvrage précédent en y ajoutant toutes les améliorations de l’ATMOS. « ATMOS à la conquête des jeux» se propose de vous entraîner dans son univers de programmes, celui des jeux, des dessins en couleur, des sonorités synthétiques informatiques. Vous y rencontrerez une gentille petite chenille, six caméléons et quelques gloutons. Vous voyagerez dans l’espace intersidéral. Vous verrez la tour de Hanoï, un grand mur de briques. Vous vous mesurerez au Master-Mind. Nul doute qu’après tout cela, vous désiriez mieux connaître votre ATMOS et, pourquoi pas, programmer vos jeux. Pour vous aider et vous guider dans ce labyrinthe aux 65536 adresses, « ATMOS à la conquête des Jeux» vous révèle le contenu de la mémoire de ATMOS, comment redéfinir les caractères, tous les trucs des modes HIRES et TEXT, et même, mais oui, comment fabriquer des lignes de programme Basic avec un autre programme…

    Bon amusement !

    https://archive.org/details/atmos-a-la-conquete-des-jeux

    Téléchargement ouvert à tous

  • 60 Solutions pour votre Oric1 + Atmos (ETSF)

    Cet ouvrage est un recueil d’idées, d’astuces tant logicielles que matérielles. Tout possesseur d’Oric 1 ou d’Atmos y trouvera de quoi améliorer le fonctionnement ou les performances de sa machine, de quoi perfectionner sa programmation. Grâce à la présentation en sections claires et concises qu’a adopté l’auteur, c’est un livre de consultation aisée et rapide qui vous permettra d’aller plus loin avec votre Oric.

    Principaux chapitres :

    • Architecture du système
    • Problèmes matériels
    • Interfaces
    • Extensions
    • Programme Basic en RAM
    • Applications
    • Langage machine
    • Problèmes usuels Basic
    • Imprimante
    • Optimisation des programmes
    • Ecran et routines machine

    ISBN 2-85535-104-9

    https://archive.org/details/etsf-60-solutions-pour-votre-oric/

    Téléchargement ouvert à tous

  • National Extension College – 30 hours Basic – Oric Version

    Le programme de la BBC pour permettre aux débutants de se familiariser avec le Basic.

    Qu’est est ce que le basic ?

    Les micro-ordinateurs apparaissent en 1980 comme l’outil du futur. BASIC est le langage que tous utilisent. Ainsi, plus tôt vous apprendrez BASIC, plus vite vous comprendrez la révolution des micro-ordinateurs.
    Le programme Basic de 30 heures est un cours d’auto-apprentissage simple sur le langage des micro-ordinateurs. Mais les programmes ont besoin de plus que la maitrise d’un language ; ils ont également besoin d’une structure. Ainsi, le cours vous enseigne également de bonnes techniques de programmation. Vous apprendrez à conserver, ordonner et trier les fichiers, les enregistrements et les répertoires; comment imprimer des lettres et des adresses, comment inventer vos propres jeux informatiques; comment gérer les nombres, etc.
    Cette édition comprend un chapitre spécial sur l’utilisation de la couleur, du son et des graphiques de l’Oric.

    https://archive.org/details/national-extension-college-30-hours-basic-oric-version/

    Téléchargement ouvert à tous

  • UNDEL

    Utilitaire Sedoric pour récupérer des fichiers après un DEL

    Catastrophe : Tout votre travail  est perdu à cause d’un DEL malencontreux ! Et vous étiez tellement dans l’action que, bien sûr, vous n’avez pas sauvegardé depuis un bon moment. Le piège principal (mais pas que) est dû à la commande DEL”*.*” pour laquelle il faut confirmer par Y ou N si chacun des fichiers est à supprimer ou pas. Une erreur est vite arrivée…

    Pas de panique rien n’est perdu, mais de grâce n’écrivez plus rien sur cette disquette ! Et si possible, protégez-là en écriture, faites-en une copie et opérez sur la copie.

    Petit historique

    L’envie de faire cet utilitaire m’est venue en 1995, en écrivant l’annexe n° 9 : “Que se passe-t-il lors d’un DEL ?”, à la page 511 de “Sedoric 3.0 à nu”. Et depuis lors, ce projet n’a pas bougé de ma liste “Tout doux” ! Au fil du temps, quelques Oriciens se sont adressés à moi pour récupérer leur travail effacé par erreur, ce qui a renforcé ma motivation. Mais c’est le corona qui m’a fait passer à l’acte…

    Quelques précisions

    Le programme UNDEL est écrit en Basic 1.1 et utilise plusieurs instructions Sedoric sans équivalent dans les autres DOS. Par conséquent, il ne tournera que sur un système équipé d’une Rom 1.1 et sous Sedoric. Il s’agit typiquement d’une configuration Atmos + Microdisc + Sedoric. UNDEL fonctionne avec tout système émulant cette configuration (Euphoric et Oricutron testés). Il est inutile de l’essayer avec un Oric-1 ou avec un Telestrat sous Hyper-Basic. Les instructions Sedoric PMAP, SMAP, CRESEC, FRESEC, etc. sont incontournables et si vous voulez vous en passer, il faut réécrire leur équivalent en code machine.

    Base technique du problème

    Que se passe-t-il lorsqu’on écrit un fichier avec SAVE*, ESAVE ou COPY* ? :

    Dans l’ordre : Un descripteur est créé, un ou plusieurs secteurs du fichier proprement dit sont enregistrés à la suite, les 2 secteurs de bitmap sont ajustés (plusieurs secteurs sont marqués occupés, le nombre de fichiers présents sur la disquette est incrémenté, le nombre de secteurs libres est réduit) enfin une entrée est ajoutée au directory et l’offset de la prochaine entrée libre est ajusté. Il est à noter que le descripteur est toujours écrit sur le 1e secteur libre à partir du début de la bitmap. Le ou les secteurs du programme proprement dit sont écrits, dans l’ordre, sur les secteurs libres suivants, qui ne sont pas forcément contigus lorsque la disquette a déjà subi plusieurs écritures / suppressions.

    Que se passe-t-il si on supprime un fichier avec DEL, DELBAK ou DESTROY ? :

    Lorsqu’il efface un fichier, SEDORIC ne modifie en fait que les secteurs de bitmap et de directory.

    L’entrée du directory est remplacée par des #00 et l’offset de la prochaine entrée libre est réajusté. Les 2 secteurs de bitmap sont actualisés (plusieurs secteurs sont libérés, le nombre de fichiers présents sur la disquette est réduit, le nombre de secteurs libres est augmenté). MAIS ni le secteur de descripteur, ni le ou les secteurs du fichier proprement dit ne sont modifiés.

    Ils restent intacts et sont seulement marqués “libres” dans la bitmap. Il n’y a donc aucun problème tant qu’un nouveau fichier n’est pas écrit dans ces secteurs libérés (et ce sera malheureusement en priorité sur ceux-là). Comme vous pouvez l’imaginer, il est techniquement possible de récupérer le fichier supprimé en restaurant l’entrée de directory, les secteurs de bitmap, quelques liens, etc.

    Et lorsque plusieurs fichiers ont été supprimés ? :

    Pas de problème tant qu’aucune écriture n’est opérée sur la disquette. Il faut relancer UNDEL plusieurs fois, jusqu’à ce qu’il ne trouve plus rien. Pour mes tests, j’ai effacé une disquette 80 pistes de 17 secteurs, double face qui était bourrée de fichiers de toutes sortes avec un DEL”*.*” et j’ai pu tout récupérer avec UNDEL !

    Et si malheureusement une écriture a été faite ?

    Là, il est plus hasardeux de restaurer spécifiquement le fichier qui vous intéresse. Mais ce n’est pas forcément perdu si celui-ci est mappé assez loin dans la bitmap. La localisation des fichiers dans la bitmap n’a rien à voir avec l’ordre des suppressions. En outre, après plusieurs écritures / suppressions, les fichiers sont fragmentés et la disquette est truffée de résidus. Ceci implique un algorithme de restauration assez complexe. Mais le miracle est possible !

    Le programme UNDEL pour Sedoric

    Sedoric a subi quelques modifications au fil du temps (par exemple ajout d’un 2e secteur de bitmap pour passer aux disquettes 3.5″, ajout d’un système de sous-directory, etc.). Dans un premier temps, je me suis concentré sur la version 3.0 de Sedoric, parce que c’est celle que je connais le mieux pour l’avoir dépiautée en détail. Mais quelques vérifications à postériori montrent que UNDEL marche avec les disquettes de toutes les versions de Sedoric. Il est même possible de récupérer des fichiers (simples ou mergés) de disquettes Stratsed car la structure de celles-ci est très proche de celle des disquettes Sedoric.

    Structure d’un fichier Sedoric

    Du plus simple, qui est un fichier “ordinaire” occupant moins de 123 secteurs, au plus compliqué, formés de plusieurs fichiers mergés, il est possible de dresser le schéma général suivant :

    Un fichier “ordinaire” est composé comme suit :

    -Le descripteur principal (obligatoire) du fichier, qui liste le ou les secteurs qu’il faut charger pour mettre le fichier en place dans la Ram. Si nécessaire, un lien vers un éventuel descripteur secondaire est renseigné.

    -Le ou les secteurs du fichier proprement dit, listés dans ce descripteur principal.

    -Un descripteur secondaire, s’il reste des secteurs à lister dont les coordonnées n’ont pas pu être insérées dans le ou les descripteurs précédents, faute de place.

    -Après ce descripteur secondaire, se trouvent les secteurs listés dans ce descripteur.

    -Si cela ne suffit pas, un autre descripteur secondaire est ajouté, etc.

    -Chaque descripteur est relié au suivant par un lien. Le lien du dernier descripteur du fichier est mis à zéro pour indiquer qu’il n’y a plus rien après.

    -Chacun de tous ces éléments (descripteurs et secteurs du fichier proprement dit) est écrit sur le prochain secteur libre. Après plusieurs écritures / suppressions, la disquette est parsemée de “trous” (secteurs libres isolés). Mais les divers morceaux d’un fichier sont toujours écrits dans le bon ordre, même s’ils ne sont pas forcément contigus. -Les informations propres à un fichier sont données dans l’entête de son descripteur principal. Ce sont : Le type de fichier, les adresses de début, de fin et d’exécution, le nombre total de secteurs à charger pour mettre l’ensemble de ce fichier en place. Cet entête est suivi par la liste (ou le début de la liste) des secteurs à charger. Les descripteurs secondaires ne comportent que le lien vers le descripteur suivant et la suite de la liste des secteurs à charger.

    Les fichiers “mergés” sont formés comme suit :

    Plusieurs fichiers “ordinaires” peuvent être rassemblés sous un même nom, on dit alors qu’ils sont “mergés”, ce qui est impropre car “merged” signifie “fusionnés”. Or les fichiers restent intacts et sont seulement juxtaposés. Ils sont mis à la queue-leu-leu, sans être modifiés, sauf les liens entre les différents descripteurs qui sont chaînés : Le dernier lien de chaque fichier “ordinaire” (normalement mis à zéro) est remplacé par l’adresse du descripteur principal du fichier mergé suivant. Et ainsi de suite, jusqu’au dernier descripteur dont le lien est bien sûr maintenu à zéro. Aucune autre modification n’est effectuée. La taille globale de l’ensemble ne figure qu’au niveau de l’entrée de directory correspondant à cet ensemble de fichiers mergés. Seul le nom du premier fichier est retenu et figure dans cette entrée. Les secteurs de ces différents fichiers, sont écrits à la queue-le-leu et dans le bon ordre, mais ne sont pas forcément contigus.

    Et un peu plus de détails sur ce qui se passe lors d’un DEL

    L’information cruciale est qu’après un DEL, le ou les “blocs” (descripteur + secteurs à charger) restent en place sans la moindre modification. Seuls la bitmap et le directory sont affectés : Toute trace de l’existence du ou des fichiers est complétement effacée. De plus, l’ordre des entrées est remanié pour récupérer de la place, mais pas toujours complètement remanié, car il reste des trous. Je n’entre pas dans l’explication de ce phénomène, sans intérêt pour le propos d’aujourd’hui.

    Alors quel est le bilan de la situation ?

    1) Dans la bitmap, tous les secteurs correspondant au fichier supprimé (descripteurs et secteurs) ont été marqués libres (réutilisables), bien que les secteurs en question soient toujours en place. Il faut noter que les fichiers effacés ne sont pas récupérables dans l’ordre de leur effacement, mais dans l’ordre de leur représentation dans la bitmap. La prochaine écriture sur la disquette va écraser en priorité les secteurs libérés qui figurent à partir du début de la bitmap et ce ne sont pas forcément ceux libérés par le dernier DEL. Donc, avec un peu de chance, il est PEUT-ETRE encore possible de récupérer le fichier qui vous intéresse, même si une écriture a eu lieu après le DEL. Dans la bitmap encore, le nombre de secteurs libres est bien sûr augmenté du nombre de secteurs libérés, tandis que le nombre de fichiers est décrémenté. Le nombre de secteurs de directory peut éventuellement avoir été réduit. Heureusement, toutes ces informations sont récupérables.

    2) Dans le directory, l’entrée correspondant au fichier supprimé a tout simplement été effacée, créant ainsi une entrée libre. Comme déjà indiqué, les entrées restantes ont éventuellement et partiellement été réorganisées pour gagner de la place. Une entrée supprimée, cela veut dire que les informations  suivantes ont disparu :

    -Le nom et l’extension du fichier.

    -Les coordonnées piste et secteur du descripteur principal du fichier.

    -Le nombre total de secteurs occupés par le fichier (ou les fichiers s’il s’agit de fichiers mergés). -L’attribut de protection du fichier.

    Stratégie utilisée par UNDEL

    Phase 1 : Retrouver le premier descripteur du fichier

    Coup de chance, le premier secteur libre de la disquette est forcément un descripteur principal. Si ce n’est pas le cas, soit aucun DEL n’a été effectué, soit une écriture est intervenue après le dernier DEL. On a ça par exemple lorsqu’un fichier est écrit et ne surcharge que partiellement un fichier précédemment détruit et si celui-ci était plus gros. Il reste des secteurs “libres” qui ont toutes les chances de ne pas être un descripteur. UNDEL sait gérer cette situation de manière appropriée. A l’issue de cette phase, ce premier descripteur est restauré, ainsi que les secteurs qui y sont listés. Mais le descripteur principal trouvé est-il bien celui du fichier que nous voudrions récupérer ? Si plusieurs DEL ont été effectués et que le descripteur qui nous importe ne correspond pas au premier secteur libre, il faudra recommencer l’opération de sauvetage plusieurs fois, jusqu’à ce que le bon soit trouvé et restauré.

    Phase 2 : Examiner le lien vers le descripteur suivant

    Si ce lien est nul, il n’y a aucun descripteur suivant, notamment pas de descripteur de fichier mergé. Il ne reste plus qu’à finaliser l’entrée de directory et la bitmap (voir plus bas “Phase 4”). Au contraire, si ce lien n’est pas nul, il indique la localisation piste/secteur du descripteur suivant, qui peut être soit un descripteur secondaire du même fichier, soit le descripteur principal d’un fichier mergé. Comment départager ces 2 hypothèses ?

    Phase 3 : Examiner s’il reste des secteurs à charger pour le fichier en cours

    Le descripteur principal nous a indiqué le nombre total de secteur à charger pour mettre en place le fichier en cours. Sachant qu’un descripteur principal peut lister les coordonnées de 122 secteurs et un descripteur secondaire celle de 127 secteurs, il est facile de calculer s’il reste des secteurs qui ne sont pas encore listés. Si c’est le cas, le descripteur trouvé est un descripteur secondaire. Sinon le descripteur trouvé est le descripteur principal d’un fichier mergé. En résumé, il n’y a que 3 possibilités : Soit c’est fini, soit il y a encore un descripteur secondaire, soit il y encore un descripteur principal de fichier mergé. Le programme rebouclera au niveau voulu selon le cas. Le descripteur trouvé est restauré, ainsi que les secteurs qui y sont listés. Après plusieurs éventuelles réitérations et quelle que soit sa complexité, le fichier proprement dit est entièrement restauré. Il ne reste plus qu’à finaliser l’entrée de directory et la bitmap.

    Phase 4 : Créer une entrée de directory pour ce fichier

    Lorsque le dernier descripteur du fichier ainsi que les secteurs correspondants ont été restaurés, il faut créer une entrée dans le directory. Partant du 1er secteur de directory (le secteur 4 de la piste 20) on recherche la première entrée libre. S’il n’y en a pas, on passe au secteur de directory suivant, etc. Si on atteint le dernier secteur de directory sans avoir trouvé d’entrée libre, il faudra créer un nouveau secteur de Directory dont la première entrée sera l’entrée libre voulue. On écrit alors dans l’entrée libre les informations suivantes :

    -Le nom et l’extension du fichier. Par défaut ce sera SANSNOM.COM, ce qui impliquera de renommer le fichier avant de relancer UNDEL pour en restaurer un autre.

    -Les coordonnées piste et secteur du descripteur principal du fichier. Ces données ont été trouvées lors de la phase 1.

    -Le nombre total de secteurs occupés par le fichier. C’est la somme du nombre de secteurs à charger pour mettre en place le fichier (simple ou mergé) et du nombre total de descripteurs.

    -L’attribut de protection du fichier. Par défaut, il sera positionné sur PROT (qui ne gêne pas si on veut renommer le fichier !). Finalement l’adresse de la prochaine entrée libre est mise à jour (ou à zéro si on vient d’écrire sur la dernière entrée libre du secteur de directory).

    Phase 5 : Finaliser la bitmap

    La bitmap proprement dite (représentation des secteurs en fonction de leur occupation / disponibilité) a été mise à jour au fur et à mesure de l’avancée des phases précédentes. Reste à finaliser l’entête ou plutôt les deux entêtes, car la bitmap occupe deux secteurs. Les données à mettre à jour se réduisent à :

    -Le nombre de fichiers (ancienne valeur plus un)

    -Le nombre de secteurs de directory (peut éventuellement avoir été augmenté). Le nombre de secteurs libres a été mis à jour au fur et à mesure des phases précédentes et il n’y a pas à s’en occuper.

    Phase 6 : Renommer le fichier restauré

    La récupération du fichier est terminée. L’affichage des caractéristiques de ce fichier (type de fichier, adresses de début, de fin, d’exécution et nombre de secteurs occupés) vous permettra de comprendre de quel fichier il s’agit et de le renommer correctement. S’il ne s’agit pas du fichier que vous vouliez ou si vous en avez plusieurs à récupérer, il suffit de relancer UNDEL (après avoir renommé SANSNOM.COM).

    Et si une écriture a eu lieu après le ou les DEL ?

    Je pensais au départ que l’absence d’écriture après la suppression était un impératif absolu. Mais comme je l’ai déjà indiqué, les fichiers effacés ne sont pas récupérable dans l’ordre de leur effacement, mais dans l’ordre de leur représentation dans la bitmap. D’autre part, les écritures se font à partir du début de la bitmap. Il est donc possible de récupérer un fichier effacé, s’il n’est pas en tête de bitmap. Après la suppression de plusieurs fichiers, il est possible qu’il existe encore plusieurs fichiers récupérables, même s’il y a eu écrasement de l’un d’entre eux après une écriture malheureuse ! Après avoir reçu un avertissement d’échec, vous avez la possibilité de demander à UNDEL de rechercher s’il n’existe pas encore quelque chose à restaurer sur la disquette. Les nombreux essais, que j’ai effectués, montrent que ça marche assez bien.

    Conclusion

    Que ce soit avec un Atmos réel ou avec un émulateur (Euphoric et Oricutron ont été testés), vous pouvez sans crainte récupérer tous les fichiers effacés par erreur. Et même après une écriture, il reste une chance que tout ne soit pas perdu. Le programme UNDEL est solide et je suis sûr qu’il vous donnera entière satisfaction. Bien que je n’aie jamais rencontré de problème au cours de mes très nombreux essais avec Sedoric 3.0, je vous conseille quand même de protéger votre disquette originale et de travailler sur une copie, on ne sait jamais ! Le zip qui accompagne cet article contient non seulement les fichiers Undel.dsk et Undel.tap, mais aussi des fichiers .txt très commentés,  au cas où vous voudriez retoucher le programme…

  • Les sons préprogrammés de l’Oric (fin)

    3 – ZAP et OUPS

    Introduction

    Ces deux derniers sons ont une structure différente de celle des 5 sons préprogrammés précédents. Ils n’utilisent pas d’enveloppe, mais font appel à des boucles de temporisation pour contrôler l’évolution du son.

    LA COMMANDE ZAP

    Voici la routine copiée et adaptée de la Rom :

    Voici ce que révèle le bloc des 14 paramètres :

    -Contrôle des canaux en service : R7 = #3E, soit 0011 1110. Seul le canal 1 est activé.

    -Période du canal 1 : R0/R1 = #0000. Soit une fréquence infinie que le PSG 9812 ne peut générer !

    -Aucun bruit blanc n’est généré car R6 = #00.

    -Volume du son du canal 1 : R8 = #0F (le maximum). Aucune enveloppe n’est mise en jeu.

    Au premier abord, les paramètres de ZAP sont surprenants ! Le PSG est initialement mis en position de générer des ultra-sons, ce qu’il ne sait pas faire. Mais dans le code qui suit le chargement des 14 paramètres, une boucle est générée, comprenant une temporisation de 1,28 ms et une incrémentation de la période du 1er canal. Cette boucle tourne jusqu’à ce que la période atteigne #0070 ce qui correspond à 554 Hz : Le PSG génère donc un son de plus en plus grave. Le processus se termine alors on envoyant #00 (volume sonore nul) dans le registre R8.

    Si on augmente la temporisation par un facteur 10, afin de mieux percevoir ce qui sort du PSG au début de ZAP, on se rend compte que des criailleries atroces sont générées, comme si on était en train d’assassiner votre Oric ! Heureusement, avec la temporisation normale de ZAP, elles sont trop brèves pour être perçues. Mais il aurait été plus propre d’initialiser la période de départ du canal 1 avec une valeur un peu plus haute que  #0000 !

    Variantes

    La plus évidente est de réduire le volume sonore qui est actuellement au maximum. Un POKE # 982E suivit d’une valeur de #00 à #0F permet de l’ajuster finement.

    Ceci mis à part, les autres possibilités de modifications sont infinies grâce au concept de temporisation permettant d’introduire une modification des paramètres du PSG9812. Rien n’empêche de compliquer le profil du son produit. ZAP est de loin le son préprogrammé le plus intéressant de l’Oric.

    Pour l’heure, nous serons plus modestes et fixerons une période de départ autre que #0000 et une période d’arrivée autre que #0070. Nous pourrons aussi modifier la temporisation, c’est-à-dire la durée de chaque fréquence générée, et par suite la durée totale du son produit.

    Comme précédemment, la procédure consistera à charger ZAPLM en Ram et à POKEr les valeurs à modifier. Cette routine est localisée de #9800 à #9833 et les adresses à POKEr sont les suivantes :

    En #982E : Paramètre R8. Le volume du son du canal 1.

    En #9808 : Octet de poids faible de la période de départ (limitée à #FF, car un seul octet est pris en compte).

    En #981C : Octet de poids faible de la période finale (idem un seul octet pris en compte).

    En #9813 : Le nombre de tours de la boucle de temporisation. Dans l’état actuel de la routine (une boucle de 256 réitérations), il est seulement possible de réduire cette durée. Pour l’augmenter, il faudra mettre en place une deuxième boucle.

    Le programme ZAP1.BAS offre quelques échantillons tout prêts tandis que ZAP2.BAS permet d’expérimenter soi-même de nouveaux sons, en ajustant le volume sonore, la temporisation, les périodes de départ et de fin.

    Quelques remarques :

    -La durée des sons produits est très variable compte tenu de la gamme des fréquences à parcourir.

    -Les sons produits vont de l’aigu vers le grave. Or les sons aigus semblent moins audibles que les graves (à moins que ce ne soit un problème personnel). Il s’en suit que toutes les variantes se ressemblent car elles finissent par des sons graves mieux perçus.

    LA COMMANDE OUPS

    Voici le code d’OUPS transposé et adapté pour l’Atmos à partir du code original d’OUPS pour Telestrat :

    Voici ce que révèle le bloc des 14 paramètres :
    -Contrôle des canaux en service : R7 = #3E, soit 0011 1110. Seul le canal 1 est activé.
    -Période du canal 1 : R0/R1 = #0046 (environ un LA de l’octave 4).
    -Aucun bruit blanc n’est généré car R6 = #00.
    -Volume du son du canal 1 : R8 = #0F (le maximum). Aucune enveloppe n’est mise en jeu.
    Le PSG 9812 génère un LA de l’octave 4 avec un volume sonore maximum suivit d’une temporisation de 0,12 s avant que finalement le canal 1 soit inactivé. Simple non ?

    Variantes

    OUPS repose sur 3 paramètres : Période et volume du son, durée de la temporisation. La période du canal 1 (R0/R1) peut être comprise entre #0000 et #0FFF. Le volume sonore (R8) est ajustable de #00 à #0F. La durée du son peut varier de 1,28 ms (avec Y=1) et 0,33 s (avec Y=#FF). On peut évidemment générer une infinité de sons en combinant ces 3 paramètres.
    Après avoir chargé OUPSLM en Ram, il suffit de poker les valeurs à modifier. Compte tenu de l’adresse d’implantation d’OUPS en Ram (de #9800 à #9827), les adresses à poker sont :
    En # 981A-#981B : Période du canal 1 (R0/R1).
    En #9809 : Nombre de tours de la boucle externe Y.
    En #9822 : Volume sonore du canal 1 (R8)
    Comme pour les autres sons, je vous propose deux petits programmes Basic: Le premier OUPS1.BAS propose divers échantillons de variantes d’OUPS et le second OUPS2.BAS permet d’expérimenter soi-même toutes les combinaisons possibles des 3 paramètres d’OUPS.

    Le programme OUPS1.BAS

    Le menu propose 20 périodes correspondant à la fréquence des notes de DO de l’octave 1 au DO de l’octave 6, puis du LA de l’octave 1 au LA de l’octave 6 et enfin toute la gamme de l’octave 4. Les deux autres paramètres (durée et volume du son) n’ont pas été modifiés et sont ceux du OUPS d’origine.

    Le programme OUPS2.BAS

    Le menu vous propose de tester vous-même tous les sons de votre choix. On peut fixer indépendamment période, volume et durée et écouter ce que cela donne.

    LA COMMANDE ZAAP

    Voici une nouvelle famille de sons, les “ZAAP”, basés sur la routine ZAP, mais dont la durée serait augmentée grâce à une boucle supplémentaire. Non seulement cela permettra d’obtenir des sons plus longs, mais aussi de “normaliser” leur durée, qui varie selon le nombre de périodes balayées. Au final, avec cette “normalisation”, des sons de durée similaire pourront plus facilement être comparés.

    Listing modifié :

    Le nouveau listing ZAAPLM.ASM peut être obtenu à partir du listing ZAPLM.ASM en remplaçant la section située entre les lignes “;Début de la temporisation” et “;Fin de la temporisation” par la même section prise dans OUPSLM.ASM. Cette boucle supplémentaire permet des temporisations de 1,23 ms (pour Y=#01) à 315 ms (pour Y=#00, c’est-à-dire #100 en réalité).
    La temporisation comporte une partie fixe (boucle interne de 1,28 ms environ) et une partie ajustable, la 2e boucle ou boucle externe, qui joue un rôle multiplicateur. La durée totale théorique en ms d’un ZAAP est égale à 1,28 x(période finale – période initiale) x(nombre de tours de 2e boucle). La brièveté des sons ne permet pas de vérifier les valeurs réelles obtenues.

    Le programme ZAAP1.BAS

    Il montre ce que ça donne avec les octaves 3 à 7 lorsque la temporisation a été ajustée pour obtenir des sons de durée totale de 160, 320, 640 et 1300 ms. Voici  les périodes de départ et de fin utilisées pour chaque octave :

    Résultats On observe une nette progressivité dans les résultats obtenus avec les octaves 7 à 3 et pour chacune avec les durées croissantes. C’est l’octave 7 (la plus aiguë)  qui est la moins satisfaisante : La durée 640 ms et surtout la durée 1300 ms révèlent des distorsions peu agréables. Mais dans l’ensemble, cela représente une belle bibliothèque de sons cohérents dérivés de ZAP.

    Le programme ZAAP2.BAS

    Il vous permettra de procéder à vos propres tests en modifiant, les périodes de départ et de fin, ainsi que le nombre de boucles Y et le volume sonore. Le tableau ci-dessus vous sera probablement de quelque aide.

    Vous trouverez tous les programmes produits au cours de ce travail dans le fichier SonsPreprogr3.zip qui accompagne cet article.

  • SOUND GENERATOR

    Remplacement d’un AY-3-8912 par son grand frère : un AY-3-8910.
    No problem sur la carte Mammouth !

    Le remplacement in situ est à l’étude :

    En déplaçant deux composants, le “grand” générateur de sons pourrait s’installer près de l’ancien… Il y a assez de place.

    Une petite plaque double face, quelques soudures, et…

    Testé ! Ça fonctionne !

    Le hic, c’est que le boîtier ne se ferme plus. C’est un peu trop encombrant.
    Il va falloir amincir l’ensemble…

    Mais le concept est validé. On peut remplacer sans trop de problème un AY-3-8912 par son grand frère.
    Reste à lui faire subir une petite cure d’amaigrissement (qui ne saurait tarder)…


    A+

  • Les sons préprogrammés de l’Oric

    2e partie : PING, SHOOT, EXPLODE, TOUCON et TOUNOR

    Introduction

    Dans la première partie, nous avons vu comment modifier en Ram les sons préprogrammés dans la Rom, afin de pouvoir les adapter à nos besoins. Dans  cette 2e partie, nous verrons PING, SHOOT, EXPLODE, TOUCON (son des touches contrôles) et TOUNOR (son des touches normales). Ces cinq commandes ont toutes le même code : LDX LL, LDY HH et JSR #FA86. Seule diffère l’adresse LLHH ciblant le bloc des 14 paramètres que la routine #FA86 doit envoyer au PSG 8912.

    Pendant que je suis dans les généralités, remarquons que ces 5 sons utilisent une seule et même enveloppe, la n°0 \, mais avec une durée différente pour chacun d’eux.

    Ils se répartissent ensuite en 2 groupes : D’une part PING, TOUCON et TOUNOR qui utilisent un seul canal, le n°1 et pas de bruit blanc et d’autre part SHOOT et EXPLODE qui n’utilisent QUE du bruit blanc, mais mixé aux canaux 1,2 et 3.

    Pour le groupe PING, TOUCON et TOUNOR, c’est la période de ce canal 1 (paramètres R0/R1) qui fait la différence.  Pour le groupe SHOOT et EXPLODE, c’est la période du bruit blanc (paramètre R6) qui fait la différence. Vous savez déjà quasiment tout ! Les 2 commandes restantes, ZAP et OUPS, ont une structure différente et seront traitées dans la troisième et dernière partie de cette étude.

    La commande PING

    Contenu du bloc des 14 paramètres (voir le fichier source PINGLM.ASM) :

    #18, #00, #00, #00, #00, #00, #00               pour R0 à R6

    #3E, #10, #00, #00, #00, #0F, #00               pour R7 à R13.

    Prêtons attention aux valeurs différentes de zéro (sauf pour R7). Que fait PING ?

    -Contrôle des canaux en service : R7 = #3E = 0011 1110. Seul le canal 1 est actif.

    -Période du canal 1 : R0/R1 = #0018. Le son produit est proche du MI de l’octave 6.

    -Volume du son pour le canal 1 : R8 = #10. Le volume est contrôlé par une enveloppe.

    -Durée de cette enveloppe : R11/R12 : #0F00. On a #0F00x256=983040 µs soit environ 1s.

    -Numéro de l’enveloppe : R13 = #00. Il s’agit de la rampe descendante de forme \.

    PING envoie sur le canal 1 un son proche du MI de l’octave 6. Ce son attaque directement au volume maximal puis décroit jusqu’au niveau zéro, ce qui prend  environ 1s. La production de bruit blanc est inactivée. Les variables que nous pouvons ajuster sont la période et la durée du son.

    Variantes

    Je vous propose deux programmes, PING1.BAS qui offre quelques exemples de variantes et PING2.BAS qui permet d’expérimenter soi-même des sons basés sur PING en ajustant à volonté la période et la durée de l’enveloppe.

    Ces 2 programmes chargent PINGLM en Ram et de DOKEnt les valeurs à modifier selon les choix offerts par un menu. Compte tenu de l’adresse d’implantation de PINGLM en Ram (de #9800 à #9814), les adresses à DOKEr sont :

    En #9807- #9808 : La période du canal 1.

    En #9812- #9813 : La durée de la rampe. PING1.BAS propose 20 variantes de PING qui illustrent les possibilités (figure de gauche page précédente), que je vous laisse approfondir avec PING2.BAS en jouant simultanément sur la période et sur la durée.

    Les commandes TOUCON et TOUNOR

    Voici ce que révèle le bloc des 14 paramètres :

    Pour TOUCON :

    #2F, #00, #00, #00, #00, #00, #00               pour R0 à R6

    #3E, #10, #00, #00, #1F, #00, #00               pour R7 à R13.

    Pour TOUNOR :

    #1F, #00, #00, #00, #00, #00, #00               pour R0 à R6

    #3E, #10, #00, #00, #1F, #00, #00               pour R7 à R13.

    Ces deux commandes ne diffèrent que par la période du canal 1.

    -Contrôle des canaux en service : R7 = #3E = 0011 1110. Seul le canal 1 est actif.

    -La période du canal 1 (R0/R1) vaut :

     #002F pour TOUCON (MI de l’octave 5) et

     #001F pour TOUNOR (SI de l’octave 5).

    -Volume du son pour le canal 1 : R8 = #10. Le volume est contrôlé par une enveloppe.

    -La durée de l’enveloppe (R11/R12) est de #001F (environ 8 ms). C’est la différence majeure avec PING : Si PING est bref, TOUCON et TOUNOR sont ultra-brefs !

    -Numéro de l’enveloppe : R13 = #00. Il s’agit de la rampe descendante de forme \.

    Comme pour PING, les variables que nous pouvons ajuster sont la période et la durée du son. En fait, le fonctionnement des commandes TOUCON et TOUNOR est tout à fait semblable à celui de PING.

    Variantes

    Comme pour PING, je vous propose deux programmes :

    -TOUCON1.BAS propose 18 variantes de TOUCON/TOUNOR qui illustrent les possibilités (figure de droite page précédente) et que je vous laisse approfondir avec

    -TOUCON2.BAS en jouant simultanément sur la période et sur la durée.

    Ces 2 programmes s’appliquent aussi bien à TOUCON qu’à TOUNOR. Les adresse d’implantation de TOUCONLM en Ram et les adresses à DOKEr sont les mêmes que pour PING.

    Les commandes SHOOT et EXPLODE

    Voici ce que révèle le bloc des 14 paramètres :

    Pour SHOOT :

    #00, #00, #00, #00, #00, #00, #0F               pour R0 à R6

    #07, #10, #10, #10, #00, #08, #00               R7 à R13.

    Pour EXPLODE :

    #00, #00, #00, #00, #00, #00, #1F               pour R0 à R6

    #07, #10, #10, #10, #00, #18, #00               R7 à R13.

    On peut observer les paramètres :

    -Contrôle des canaux en service : R7 = #07 = 0000 0111. Les canaux 1, 2 et 3 ne délivrent que du bruit blanc.

    -Ce bruit blanc a pour période R6 = #0F pour SHOOT et R6 = #1F pour EXPLODE.

    -Pour les 2 commandes, le volume du son sur les 3 canaux est contrôlé par une enveloppe : R8 à R10 valent #10.

    -La durée de cette enveloppe (R11/R12) est #0800  (0,5 s environ) pour SHOOT et  #1800 (1,6 s environ) pour EXPLODE.

    -Numéro de l’enveloppe : R13 = #00. Il s’agit de la rampe descendante de forme \. Ces deux commandes sont très proches l’une de l’autre. Elles ne diffèrent que par la durée de l’enveloppe et la période du bruit blanc. La particularité de ces 2 sons est de reposer uniquement sur la production de bruit blanc ! Par définition, un bruit blanc est un signal aléatoire (voir https://fr.wikipedia.org/wiki/Bruit_blanc) et la notion de “période du bruit blanc” est surprenante, mais bon, voyons ce que ça donne en pratique…

    Variantes

    Ici encore les possibilités de modulation sont évidentes : Soit on modifie la période du bruit blanc, soit on joue sur la durée de l’enveloppe.

    Comme précédemment, la procédure consistera à charger SHOOTLM ou EXPLODELM en Ram et à POKEr les valeurs à modifier. Ces 2 routines ont la même adresse d’implantation en Ram (de #9800 à #9814) et les mêmes adresses à POKEr :

    En #980D :                         La période du bruit blanc.

    En #9812- #9813 :            La durée de la rampe.

    Les programmes SHOOT1.BAS (figure de gauche page précédente) et EXPLODE1.BAS (figure de droite page précédente) offrent quelques échantillons à écouter. Dans SHOOT1.BAS, la période du bruit blanc et la durée de l’enveloppe varient séparément, tandis que dans EXPLODE1.BAS les variations de ces 2 paramètres sont combinées. Les programmes SHOOT2.BAS et EXPLOD2.BAS vous permettrons d’expérimenter vos propres idées, en ajustant à volonté la période du bruit blanc et la durée de l’enveloppe. En fait ces 2 programmes s’appliquent aussi bien à SHOOT qu’à EXPLODE. Avec un peu de chance vous aurez la surprise de retrouver EXPLODE avec SHOOT2.BAS et SHOOT avec EXPLODE2.BAS !

    Petite douceur

    Après tout ce travail, il est temps de s’offrir une petite gâterie. Tous les sons examinés jusqu’ici étaient basés sur l’enveloppe n°0 \. Juste pour voir, j’ai fait quelques essais avec les enveloppes /, ////, / ͞   et /\/\/ , ceci pour les 5 sons PING, SHOOT, EXPLODE, TOUCON et TOUNOR. Pour chacun de ces sons, un seul paramètre diffère des paramètres d’origine : R13, qui est respectivement mis à #04 (/), #0C (////), #0D (/ ͞  ) et #0E (/\/\/) (figure ci-dessus).

    Comme on pouvait s’y attendre, les sons produits avec les enveloppes ////, / ͞   et /\/\ continuent à l’infini  (mais j’ai coupé !).

    Pour PING, SHOOT, EXPLODE, TOUCON et TOUNOR avec enveloppe /, les résultats sont assez surprenants, car ces 5 sons fonctionnent à l’envers de ce qu’on a habituellement dans l’oreille ! Les sons TOUCON et TOUTNOR inversés sont particulièrement intéressants.

    Avec l’enveloppe //// (c’est à dire les sons précédents mais répétés à l’infini), on découvre des bruits surprenants de machines ou de sonneries.

    L’enveloppe / ͞   est moins intéressante car le volume du son est maintenu au niveau haut à l’infini.

    Enfin l’enveloppe /\/\/, couplée à PING, SHOOT et EXPLODE nous emmène au bord de la mer (avec beaucoup d’imagination). A nouveau TOUCON et TOUTNOR donnent des résultats plutôt rigolos que je vous laisse les découvrir.

    Vous trouverez tous les fichiers de ces expérimentations et une mine d’idées pour agrémenter le bruitage de vos programmes dans le fichier SonsPreprogr2.zip qui accompagne cet article.

    A suivre…

  • Les sons préprogrammés de l’Oric

    1e partie : Récupération et adaptation du code source

    par André C.

    Les 3 articles précédents “Musique, Note, Octave, Fréquence et Période“, “Les enveloppes du PSG 8912” et “Temporisation en langage machine” vous ont fourni quelques éléments de compréhension des sons de l’Oric. Nous allons voir comment exploiter au mieux les sons préprogrammés grâce à une nouvelle série de 3 articles. Afin d’éviter les redites, j’ai zappé les bases déjà décrites et vous invite à vous reporter aux articles précédents en cas de besoin.

    Liste des sons préprogrammés

    Aux commandes usuelles PING, SHOOT, EXPLODE et ZAP, il faut ajouter TOUCON (bruit clavier des touches contrôles), TOUNOR (idem touches normales) et OUPS, le petit dernier du Telestrat.

    Tous les sons préprogrammés ont le même inconvénient : il n’est pas possible d’en moduler le volume sonore (d’où divers petits gadgets hardware apparus pour atténuer le son pendant la nuit !). La raison en est simple : Tous ces sons sont figés en Rom et on peut difficilement intervenir.

    Il est quand même possible de s’inspirer de leur code pour le mettre en Ram et le modifier. Pour OUPS par exemple, le volume sonore est figé plein pot, mais il est facile de rendre ce paramètre ajustable dans une version en Ram. Malheureusement, pour les sons préprogrammés utilisant une enveloppe, on est bien obligé de garder celle-ci, sous peine de faire autre chose. Il est toutefois possible de modifier la hauteur de la note, sa durée etc.

    Structure des sons préprogrammés

    Tous ces sons sont basés sur 2 routines en Rom :

    • La routine #F590 envoie un seul des 14 paramètres au PSG (les registres A et Y du 6502 contenant respectivement le paramètre à envoyer et le numéro du registre cible).
    • La routine #FA86 envoie 14 paramètres au PSG (les registres X et Y du 6502 contenant l’adresse où se trouvent les 14 paramètres).

    En outre ZAP et OUPS font appel à une temporisation à boucle pour gérer la durée du son produit.

    Récupération des sources en langage machine

    Le plus simple est donc de recopier le code présent en Rom dans un fichier source en langage machine. Il faut aussi modifier les adresses des blocs de paramètres pour les diriger vers la Ram. Enfin, dans le cas d’OUPS, il faut remplacer les adresses Telestrat par les adresses Atmos pour les 2 routines citées ci-dessus.

    C’est ainsi que j’ai obtenus les 8 fichiers source suivants : PINGLM.ASM, SHOOTLM.ASM, EXPLODLM.ASM, TOUCONLM.ASM, TOUNORLM.ASM, ZAPLM.ASM, OUPSLM.ASM et même PREDEFLM.ASM qui regroupe le code des 7 sons préprogrammés (voir le fichier SonsPreprogr1.zip qui accompagne cet article).

    Mise en œuvre des sons préprogrammés

    Après compilation, j’ai obtenu 8 fichiers exécutables .TAP qui sans surprise reproduisent fidèlement les 7 sons d’origine. Il ne reste plus qu’à étudier le mécanisme de chaque son et éventuellement à modifier certains paramètres.

    Les commandes PING, SHOOT, EXPLODE, TOUCON et TOUNOR utilisent une enveloppe pour contrôler le volume sonore alors que ZAP et OUPS fixent celui-ci au maximum. Le code de tous ces sons envoie un bloc de 14 paramètres au PSG 8912. Mais en outre, le code de ZAP et OUPS met en place des boucles de temporisation pour contrôler le son produit.

    L’analyse du bloc de 14 paramètres est facile car tous les paramètres sont à zéro par défaut (sauf R7 qui contrôle les canaux en service et qui est mis à #3F pour tout inhiber). Voir éventuellement “Retour sur la mise en œuvre du PSG AY3-8912” dans le CEO-mag de Janvier 2020.  Les paramètres spécifiques d’un son donné sont donc immédiatement apparents ce qui permet de comprendre ce que fait ce son. Attention toutefois au paramètre R13 dont la valeur #00 peut désigner l’enveloppe de n°0 lorsque le contrôle du volume sonore fait appel à une enveloppe.

    A suivre…

  • Musique, Note, Octave, Fréquence et Période

    Rappels et précisions

    par André C.

    CE QU’IL Y A DERRIÈRE LE HAUT-PARLEUR

    Le PSG 8912, circuit intégré complexe, génère des sons sur la base de 14 paramètres qu’il faut lui fournir. Ce sont surtout les 6 premiers paramètres (en fait 3 paramètres sur 2 octets chacun) qui nous intéressent aujourd’hui. Ils définissent la période des sons qui seront respectivement générés par les canaux 1, 2 et 3.
    Lorsqu’on veut programmer des sons en langage machine, il faut envoyer ces 14 paramètres aux 14 registres du PSG 8912 à l’aide de la routine #FA86 (Atmos), après avoir renseigné X et Y pour qu’ils pointent sur l’adresse où se trouve le bloc des 14 paramètres. Heureusement ces 14 registres sont latchés (verrouillés) et gardent leur valeur tant qu’on ne la remplace pas par une autre. La plupart du temps il y a donc peu de changements et il est possible de modifier un seul registre à l’aide de la routine #F590 (Atmos), après avoir renseigné A avec le n° de registre (de 0 à 13) et X avec la valeur à y placer (A, X et Y sont les registres du microprocesseur 6502).

    VOUS PRÉFÉREZ LE BASIC ?

    Il n’empêche que le PSG 8912, ce n’est pas de la tarte, avec ses 14 paramètres dont certains sont complexes ! Mais les commandes PLAY, MUSIC et SOUND simplifient la vie de ceux qui sont effrayés par le langage machine. Le bel effort, qui a été fait pour programmer les commandes PLAY, MUSIC et SOUND, est handicapé par la pauvreté des manuels. A ce propos, je vous renvoie à l’excellent article “PLAY, MUSIC, SOUND”, paru dans le CEO-mag d’avril 2000, n°119-120, pages 35 à 39.
    Toujours est-il que ces 3 commandes Basic permettent de mettre en œuvre assez facilement les paramètres du PSG 8912.

    MUSIC

    Dans le cas de MUSIC, par exemple, il suffit d’indiquer le canal à activer (1 à 3), l’octave (0 à 7), la note (1 à 12) et le volume (1 à 15 pour le volume sonore ou 0 pour passer la main au contrôle par une enveloppe). Quoi de plus simple ? Soit dit en passant, la syntaxe de ce dernier paramètre est regrettable. Pourquoi ne pas avoir repris les valeurs qu’accepte directement le PSG 8912, à savoir 0 à 15 pour le volume et 16 (#10) pour le passage de contrôle à une enveloppe ?

    SOUND

    Mais MUSIC a les inconvénients (les limites) de son avantage (la simplicité) : Cette commande ne sait produire aucun son en dehors des notes standards. Pour ce genre de sons, il existe la commande SOUND, pour laquelle il faut indiquer le canal (1 à 6 avec 1 à 3 pour le canal et 4 à 6 pour ajouter du bruit blanc aux canaux 1 à 3), la période (de 0 à 65535) et le volume (idem MUSIC).
    Pas top la syntaxe du 3e paramètre (période). En français la hauteur d’une note est définie par sa fréquence. On ne parle jamais de la période d’une note. L’utilisation de la période était probablement plus simple d’un point de vue programmation, mais elle est contre culturelle et pas du tout intuitive (plus une note est haute plus sa période diminue).
    Toute valeur entre #0000 et #FFFF (0 et 65535) est acceptée et la valeur que l’on indique est directement envoyée au PSG 8912. Mais celui-ci ne prend pas en compte les 4 bits supérieurs de l’octet de poids fort. Les valeurs réellement injectées dans le PSG sont ra menées à l’espace #0000 à #0FFF (0 à 4095 en décimal). L’intervalle de 0 à 65535 est donc illusoire (mais les capacités du PSG 8912 et celles de l’oreille humaine sont quand même largement couvertes).

    PERIODE

    La période (en secondes) est l’inverse de la fréquence (en Hertz). En pratique, pour avoir des valeurs manipulables, on exprime la période en µs. Pour ce faire, il faut diviser 1 000 000 par la fréquence (il y a un million de µs dans une seconde). Par exemple pour le LA de l’octave 3 (le diapason qui sert de référence en musique), la fréquence officielle est 440 Hz. La période correspondante est de 1 000 000 / 440 = 2 272,73 µs, une valeur qui n’est jamais mentionnée, ni utilisée.

    LE TRUC INVISIBLE

    Le truc qui n’est pas explicité dans les divers documents disponibles (et il y en a un paquet !) est que dans le cas du PSG 8912, la période n’est pas exprimée en µs, mais en unités de 16 µs (ça sent le système binaire là-dessous). Il faut donc appliquer un facteur de conversion de 62 480 (car 1 000 000 / 62 480 = 16,00512164). Dans le cas du LA de l’octave 3 (440 Hz) la période exprimée en unité de 16 µs est de 62480 / 440 = 142 (soit #008E en hexadécimal). Les amateurs de langage machine pourront vérifier que #008E est bien la valeur indiquée dans la Rom par les tables de conversion en #FC5E (octet de poids fort) et #FC6B (octet de poids faible). Et c’est bien la valeur 142 qu’il faut indiquer à la commande SOUND pour obtenir un LA de l’octave 3.

    POUR EN REVENIR AU PSG 8912

    C’est bien sûr #008E qu’il faut aussi indiquer au PSG pour obtenir ce même LA de l’octave 3. Par exemple, pour obtenir ce son sur le canal 1, il faudra placer #8E dans le premier registre et #00 dans le second. D’une manière générale, pour produire un son de fréquence F, il faudra placer dans les registres du PSG une valeur de période P = 62480 / F. Ce n’est pas si compliqué, encore fallait-il le dire clairement. En complément pour ceux qui seraient intéressé, une table de conversion “Note-Frequence-periode.pdf” accompagne cet article.