{"id":3671,"date":"2020-09-10T20:37:05","date_gmt":"2020-09-10T18:37:05","guid":{"rendered":"https:\/\/ceo.oric.org\/?p=3671"},"modified":"2020-09-10T20:37:05","modified_gmt":"2020-09-10T18:37:05","slug":"les-sons-preprogrammes-de-loric-fin","status":"publish","type":"post","link":"https:\/\/oric.bqtt.net\/index.php\/2020\/09\/10\/les-sons-preprogrammes-de-loric-fin\/","title":{"rendered":"Les sons pr\u00e9programm\u00e9s de l&#8217;Oric (fin)"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\"><strong>3 \u2013 ZAP et OUPS<\/strong><\/h3>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Introduction<\/strong><\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Ces deux derniers sons ont une structure diff\u00e9rente de celle des 5 sons pr\u00e9programm\u00e9s pr\u00e9c\u00e9dents. Ils n&#8217;utilisent pas d&#8217;enveloppe, mais font appel \u00e0 des boucles de temporisation pour contr\u00f4ler l&#8217;\u00e9volution du son.<\/p>\n\n\n\n<h4 class=\"has-text-align-center wp-block-heading\"><strong>LA COMMANDE ZAP<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Voici la routine copi\u00e9e et adapt\u00e9e de la Rom&nbsp;:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2020\/09\/SonsPreprogr3_Page_1a_Page_1-1024x735.png\" alt=\"\" class=\"wp-image-3673\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Voici ce que r\u00e9v\u00e8le le bloc des 14 param\u00e8tres :<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">-Contr\u00f4le des canaux en service&nbsp;: R7&nbsp;= #3E, soit 0011 111<strong>0<\/strong>. Seul le canal 1 est activ\u00e9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">-P\u00e9riode du canal 1&nbsp;: R0\/R1 = #0000. Soit une fr\u00e9quence infinie que le PSG 9812 ne peut g\u00e9n\u00e9rer&nbsp;!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">-Aucun bruit blanc n&#8217;est g\u00e9n\u00e9r\u00e9&nbsp;car R6 = #00.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">-Volume du son du canal 1&nbsp;: R8 = <strong>#0F<\/strong> (le maximum). Aucune enveloppe n&#8217;est mise en jeu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Au premier abord, les param\u00e8tres de ZAP sont surprenants&nbsp;! Le PSG est initialement mis en position de g\u00e9n\u00e9rer des ultra-sons, ce qu&#8217;il ne sait pas faire. Mais dans le code qui suit le chargement des 14 param\u00e8tres, une boucle est g\u00e9n\u00e9r\u00e9e, comprenant une temporisation de 1,28 ms et une incr\u00e9mentation de la p\u00e9riode du 1<sup>er<\/sup> canal. Cette boucle tourne jusqu&#8217;\u00e0 ce que la p\u00e9riode atteigne #0070 ce qui correspond \u00e0 554&nbsp;Hz&nbsp;: Le PSG g\u00e9n\u00e8re donc un son de plus en plus grave. Le processus se termine alors on envoyant #00 (volume sonore nul) dans le registre R8.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si on augmente la temporisation par un facteur 10, afin de mieux percevoir ce qui sort du PSG au d\u00e9but de ZAP, on se rend compte que des criailleries atroces sont g\u00e9n\u00e9r\u00e9es, comme si on \u00e9tait en train d&#8217;assassiner votre Oric&nbsp;! Heureusement, avec la temporisation normale de ZAP, elles sont trop br\u00e8ves pour \u00eatre per\u00e7ues. Mais il aurait \u00e9t\u00e9 plus propre d&#8217;initialiser la p\u00e9riode de d\u00e9part du canal 1 avec une valeur un peu plus haute que&nbsp; #0000&nbsp;!<\/p>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Variantes<\/strong><\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">La plus \u00e9vidente est de r\u00e9duire le volume sonore qui est actuellement au maximum. Un POKE # 982E suivit d&#8217;une valeur de #00 \u00e0 #0F permet de l&#8217;ajuster finement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ceci mis \u00e0 part, les autres possibilit\u00e9s de modifications sont infinies gr\u00e2ce au concept de temporisation permettant d&#8217;introduire une modification des param\u00e8tres du PSG9812. Rien n&#8217;emp\u00eache de compliquer le profil du son produit. <strong>ZAP est de loin le son pr\u00e9programm\u00e9 le plus int\u00e9ressant de l&#8217;Oric.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour l&#8217;heure, nous serons plus modestes et fixerons une p\u00e9riode de d\u00e9part autre que #0000 et une p\u00e9riode d&#8217;arriv\u00e9e autre que #0070. Nous pourrons aussi modifier la temporisation, c\u2019est-\u00e0-dire la dur\u00e9e de chaque fr\u00e9quence g\u00e9n\u00e9r\u00e9e, et par suite la dur\u00e9e totale du son produit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Comme pr\u00e9c\u00e9demment, la proc\u00e9dure consistera \u00e0 charger ZAPLM en Ram et \u00e0 POKEr les valeurs \u00e0 modifier. Cette routine est localis\u00e9e de #9800 \u00e0 #9833 et les adresses \u00e0 POKEr sont les suivantes :<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En #982E&nbsp;: Param\u00e8tre R8. Le volume du son du canal 1.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En #9808&nbsp;: Octet de poids faible de la p\u00e9riode de d\u00e9part (limit\u00e9e \u00e0 #FF, car un seul octet est pris en compte).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En #981C&nbsp;: Octet de poids faible de la p\u00e9riode finale (idem un seul octet pris en compte).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En #9813&nbsp;: Le nombre de tours de la boucle de temporisation. Dans l&#8217;\u00e9tat actuel de la routine (une boucle de 256 r\u00e9it\u00e9rations), il est seulement possible de r\u00e9duire cette dur\u00e9e. Pour l&#8217;augmenter, il faudra mettre en place une deuxi\u00e8me boucle.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le programme ZAP1.BAS offre quelques \u00e9chantillons tout pr\u00eats tandis que ZAP2.BAS permet d&#8217;exp\u00e9rimenter soi-m\u00eame de nouveaux sons, en ajustant le volume sonore, la temporisation, les p\u00e9riodes de d\u00e9part et de fin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quelques remarques&nbsp;:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">-La dur\u00e9e des sons produits est tr\u00e8s variable compte tenu de la gamme des fr\u00e9quences \u00e0 parcourir. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">-Les sons produits vont de l&#8217;aigu vers le grave. Or les sons aigus semblent moins audibles que les graves (\u00e0 moins que ce ne soit un probl\u00e8me personnel). Il s&#8217;en suit que toutes les variantes se ressemblent car elles finissent par des sons graves mieux per\u00e7us.<\/p>\n\n\n\n<h4 class=\"has-text-align-center wp-block-heading\"><strong>LA COMMANDE OUPS<\/strong><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Voici le code d&#8217;OUPS transpos\u00e9 et adapt\u00e9 pour l&#8217;Atmos \u00e0 partir du code original d&#8217;OUPS pour Telestrat :<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2020\/09\/Les-sons-preprogrammes-3b_Page_2-1024x507.png\" alt=\"\" class=\"wp-image-3674\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Voici ce que r\u00e9v\u00e8le le bloc des 14 param\u00e8tres :<br>-Contr\u00f4le des canaux en service : R7 = #3E, soit 0011 111<strong>0<\/strong>. Seul le canal 1 est activ\u00e9.<br>-P\u00e9riode du canal 1 : R0\/R1 = <strong>#0046<\/strong> (environ un LA de l&#8217;octave 4).<br>-Aucun bruit blanc n&#8217;est g\u00e9n\u00e9r\u00e9 car R6 = #00.<br>-Volume du son du canal 1 : R8 = <strong>#0F<\/strong> (le maximum). Aucune enveloppe n&#8217;est mise en jeu.<br>Le PSG 9812 g\u00e9n\u00e8re un LA de l&#8217;octave 4 avec un volume sonore maximum suivit d&#8217;une temporisation de 0,12 s avant que finalement le canal 1 soit inactiv\u00e9. Simple non ?<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Variantes<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">OUPS repose sur 3 param\u00e8tres : P\u00e9riode et volume du son, dur\u00e9e de la temporisation. La p\u00e9riode du canal 1 (R0\/R1) peut \u00eatre comprise entre #0000 et #0FFF. Le volume sonore (R8) est ajustable de #00 \u00e0 #0F. La dur\u00e9e du son peut varier de 1,28 ms (avec Y=1) et 0,33 s (avec Y=#FF). On peut \u00e9videmment g\u00e9n\u00e9rer une infinit\u00e9 de sons en combinant ces 3 param\u00e8tres.<br>Apr\u00e8s avoir charg\u00e9 OUPSLM en Ram, il suffit de poker les valeurs \u00e0 modifier. Compte tenu de l&#8217;adresse d&#8217;implantation d&#8217;OUPS en Ram (de #9800 \u00e0 #9827), les adresses \u00e0 poker sont :<br>En # 981A-#981B : P\u00e9riode du canal 1 (R0\/R1).<br>En #9809 : Nombre de tours de la boucle externe Y.<br>En #9822 : Volume sonore du canal 1 (R8)<br>Comme pour les autres sons, je vous propose deux petits programmes Basic: Le premier OUPS1.BAS propose divers \u00e9chantillons de variantes d&#8217;OUPS et le second OUPS2.BAS permet d&#8217;exp\u00e9rimenter soi-m\u00eame toutes les combinaisons possibles des 3 param\u00e8tres d&#8217;OUPS.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Le programme OUPS1.BAS<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Le menu propose 20 p\u00e9riodes correspondant \u00e0 la fr\u00e9quence des notes de DO de l&#8217;octave 1 au DO de l&#8217;octave 6, puis du LA de l&#8217;octave 1 au LA de l&#8217;octave 6 et enfin toute la gamme de l&#8217;octave 4. Les deux autres param\u00e8tres (dur\u00e9e et volume du son) n&#8217;ont pas \u00e9t\u00e9 modifi\u00e9s et sont ceux du OUPS d&#8217;origine.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Le programme OUPS2.BAS<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Le menu vous propose de tester vous-m\u00eame tous les sons de votre choix. On peut fixer ind\u00e9pendamment p\u00e9riode, volume et dur\u00e9e et \u00e9couter ce que cela donne.<\/p>\n\n\n\n<h4 class=\"has-text-align-center wp-block-heading\">LA COMMANDE ZAAP<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Voici une nouvelle famille de sons, les &#8220;ZAAP&#8221;, bas\u00e9s sur la routine ZAP, mais dont la dur\u00e9e serait augment\u00e9e gr\u00e2ce \u00e0 une boucle suppl\u00e9mentaire. Non seulement cela permettra d&#8217;obtenir des sons plus longs, mais aussi de &#8220;normaliser&#8221; leur dur\u00e9e, qui varie selon le nombre de p\u00e9riodes balay\u00e9es. Au final, avec cette &#8220;normalisation&#8221;, des sons de dur\u00e9e similaire pourront plus facilement \u00eatre compar\u00e9s.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Listing modifi\u00e9 :<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Le nouveau listing ZAAPLM.ASM peut \u00eatre obtenu \u00e0 partir du listing ZAPLM.ASM en rempla\u00e7ant la section situ\u00e9e entre les lignes &#8220;;D\u00e9but de la temporisation&#8221; et &#8220;;Fin de la temporisation&#8221; par la m\u00eame section prise dans OUPSLM.ASM. Cette boucle suppl\u00e9mentaire permet des temporisations de 1,23 ms (pour Y=#01) \u00e0 315 ms (pour Y=#00, c\u2019est-\u00e0-dire #100 en r\u00e9alit\u00e9).<br>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\u00f4le multiplicateur. La dur\u00e9e totale th\u00e9orique en ms d&#8217;un ZAAP est \u00e9gale \u00e0 1,28 x(p\u00e9riode finale \u2013 p\u00e9riode initiale) x(nombre de tours de 2e boucle). La bri\u00e8vet\u00e9 des sons ne permet pas de v\u00e9rifier les valeurs r\u00e9elles obtenues.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Le programme ZAAP1.BAS<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Il montre ce que \u00e7a donne avec les octaves 3 \u00e0 7 lorsque la temporisation a \u00e9t\u00e9 ajust\u00e9e pour obtenir des sons de dur\u00e9e totale de 160, 320, 640 et 1300&nbsp;ms. Voici&nbsp; les p\u00e9riodes de d\u00e9part et de fin utilis\u00e9es pour chaque octave&nbsp;:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2020\/09\/Les-sons-preprogrammes-3c_Page_3-1024x316.png\" alt=\"\" class=\"wp-image-3675\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>R\u00e9sultats<\/em> On observe une nette progressivit\u00e9 dans les r\u00e9sultats obtenus avec les octaves 7 \u00e0 3 et pour chacune avec les dur\u00e9es croissantes. C&#8217;est l&#8217;octave 7 (la plus aigu\u00eb)&nbsp; qui est la moins satisfaisante&nbsp;: La dur\u00e9e 640&nbsp;ms et surtout la dur\u00e9e 1300&nbsp;ms r\u00e9v\u00e8lent des distorsions peu agr\u00e9ables. Mais dans l&#8217;ensemble, cela repr\u00e9sente une belle biblioth\u00e8que de sons coh\u00e9rents d\u00e9riv\u00e9s de ZAP.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Le programme ZAAP2.BAS<\/strong><\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Il vous permettra de proc\u00e9der \u00e0 vos propres tests en modifiant, les p\u00e9riodes de d\u00e9part et de fin, ainsi que le nombre de boucles Y et le volume sonore. Le tableau ci-dessus vous sera probablement de quelque aide.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vous trouverez tous les programmes produits au cours de ce travail dans le fichier SonsPreprogr3.zip qui accompagne cet article.<\/p>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2020\/09\/SonsPreprogr3.zip\">SonsPreprogr3.zip<\/a><a href=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2020\/09\/SonsPreprogr3.zip\" class=\"wp-block-file__button\" download>T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>3 \u2013 ZAP et OUPS Introduction Ces deux derniers sons ont une structure diff\u00e9rente de celle des 5 sons pr\u00e9programm\u00e9s pr\u00e9c\u00e9dents. Ils n&#8217;utilisent pas d&#8217;enveloppe, mais font appel \u00e0 des boucles de temporisation pour contr\u00f4ler l&#8217;\u00e9volution du son. LA COMMANDE ZAP Voici la routine copi\u00e9e et adapt\u00e9e de la Rom&nbsp;: Voici ce que r\u00e9v\u00e8le le [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[338,346,347,22,311,320],"tags":[671],"class_list":["post-3671","post","type-post","status-publish","format-standard","hentry","category-338","category-assembleur","category-atmos","category-ceomag","category-microdisc","category-tap-file","tag-ceomag361"],"_links":{"self":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts\/3671","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/comments?post=3671"}],"version-history":[{"count":0,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts\/3671\/revisions"}],"wp:attachment":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/media?parent=3671"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/categories?post=3671"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/tags?post=3671"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}