{"id":3604,"date":"2020-08-20T10:35:29","date_gmt":"2020-08-20T08:35:29","guid":{"rendered":"https:\/\/ceo.oric.org\/?p=3604"},"modified":"2020-08-20T10:35:29","modified_gmt":"2020-08-20T08:35:29","slug":"les-sons-preprogrammes-de-loric","status":"publish","type":"post","link":"https:\/\/oric.bqtt.net\/index.php\/2020\/08\/20\/les-sons-preprogrammes-de-loric\/","title":{"rendered":"Les sons pr\u00e9programm\u00e9s de l&#8217;Oric"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">1<sup>e<\/sup> partie&nbsp;: R\u00e9cup\u00e9ration et adaptation du code source<\/h3>\n\n\n\n<h5 class=\"wp-block-heading\"><em>par Andr\u00e9 C.<\/em><\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Les 3 articles pr\u00e9c\u00e9dents &#8220;<em>Musique, Note, Octave, Fr\u00e9quence et P\u00e9riode<\/em>&#8220;, &#8220;<em>Les enveloppes du PSG 8912<\/em>&#8221; et &#8220;<em>Temporisation en langage machine<\/em>&#8221; vous ont fourni quelques \u00e9l\u00e9ments de compr\u00e9hension des sons de l&#8217;Oric. Nous allons voir comment exploiter au mieux les sons pr\u00e9programm\u00e9s gr\u00e2ce \u00e0 une nouvelle s\u00e9rie de 3 articles. Afin d&#8217;\u00e9viter les redites, j&#8217;ai zapp\u00e9 les bases d\u00e9j\u00e0 d\u00e9crites et vous invite \u00e0 vous reporter aux articles pr\u00e9c\u00e9dents en cas de besoin.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Liste des sons pr\u00e9programm\u00e9s<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Aux commandes usuelles PING, SHOOT, EXPLODE et ZAP, il faut ajouter TOUCON (bruit clavier des touches contr\u00f4les), TOUNOR (idem touches normales) et OUPS, le petit dernier du 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\/08\/SonsPredef-1-Menu-1.bmp\" alt=\"\" class=\"wp-image-3608\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Tous les sons pr\u00e9programm\u00e9s ont le m\u00eame inconv\u00e9nient&nbsp;: il n&#8217;est pas possible d&#8217;en moduler le volume sonore (d&#8217;o\u00f9 divers petits gadgets hardware apparus pour att\u00e9nuer le son pendant la nuit&nbsp;!). La raison en est simple&nbsp;: Tous ces sons sont fig\u00e9s en Rom et on peut difficilement intervenir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il est quand m\u00eame possible de s&#8217;inspirer de leur code pour le mettre en Ram et le modifier. Pour OUPS par exemple, le volume sonore est fig\u00e9 plein pot, mais il est facile de rendre ce param\u00e8tre ajustable dans une version en Ram. Malheureusement, pour les sons pr\u00e9programm\u00e9s utilisant une enveloppe, on est bien oblig\u00e9 de garder celle-ci, sous peine de faire autre chose. Il est toutefois possible de modifier la hauteur de la note, sa dur\u00e9e etc.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Structure des sons pr\u00e9programm\u00e9s<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tous ces sons sont bas\u00e9s sur 2 routines en Rom&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>La routine #F590 envoie un seul des 14 param\u00e8tres au PSG (les registres A et Y du 6502 contenant respectivement le param\u00e8tre \u00e0 envoyer et le num\u00e9ro du registre cible).<\/li><li>La routine #FA86 envoie 14 param\u00e8tres au PSG (les registres X et Y du 6502 contenant l&#8217;adresse o\u00f9 se trouvent les 14 param\u00e8tres).<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">En outre ZAP et OUPS font appel \u00e0 une temporisation \u00e0 boucle pour g\u00e9rer la dur\u00e9e du son produit.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>R\u00e9cup\u00e9ration des sources en langage machine<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Le plus simple est donc de recopier le code pr\u00e9sent en Rom dans un fichier source en langage machine. Il faut aussi modifier les adresses des blocs de param\u00e8tres pour les diriger vers la Ram. Enfin, dans le cas d&#8217;OUPS, il faut remplacer les adresses Telestrat par les adresses Atmos pour les 2 routines cit\u00e9es ci-dessus.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C&#8217;est ainsi que j&#8217;ai obtenus les 8 fichiers source suivants&nbsp;: PINGLM.ASM, SHOOTLM.ASM, EXPLODLM.ASM, TOUCONLM.ASM, TOUNORLM.ASM, ZAPLM.ASM, OUPSLM.ASM et m\u00eame PREDEFLM.ASM qui regroupe le code des 7 sons pr\u00e9programm\u00e9s (voir le fichier SonsPreprogr1.zip qui accompagne cet article).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Mise en \u0153uvre des sons pr\u00e9programm\u00e9s<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Apr\u00e8s compilation, j&#8217;ai obtenu 8 fichiers ex\u00e9cutables .TAP qui sans surprise reproduisent fid\u00e8lement les 7 sons d&#8217;origine. Il ne reste plus qu&#8217;\u00e0 \u00e9tudier le m\u00e9canisme de chaque son et \u00e9ventuellement \u00e0 modifier certains param\u00e8tres.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les commandes PING, SHOOT, EXPLODE, TOUCON et TOUNOR utilisent une enveloppe pour contr\u00f4ler 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\u00e8tres au PSG 8912. Mais en outre, le code de ZAP et OUPS met en place des boucles de temporisation pour contr\u00f4ler le son produit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;analyse du bloc de 14 param\u00e8tres est facile car tous les param\u00e8tres sont \u00e0 z\u00e9ro par d\u00e9faut (sauf R7 qui contr\u00f4le les canaux en service et qui est mis \u00e0 #3F pour tout inhiber). Voir \u00e9ventuellement &#8220;Retour sur la mise en \u0153uvre du PSG AY3-8912&#8221; dans le CEO-mag de Janvier 2020. &nbsp;Les param\u00e8tres sp\u00e9cifiques d&#8217;un son donn\u00e9 sont donc imm\u00e9diatement apparents ce qui permet de comprendre ce que fait ce son. Attention toutefois au param\u00e8tre R13 dont la valeur #00 peut d\u00e9signer l&#8217;enveloppe de n\u00b00 lorsque le contr\u00f4le du volume sonore fait appel \u00e0 une enveloppe. <\/p>\n\n\n\n<p class=\"has-text-align-right wp-block-paragraph\">A suivre\u2026<\/p>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2020\/08\/SonsPreprogr1.zip\">SonsPreprogr1.zip<\/a><a href=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2020\/08\/SonsPreprogr1.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>1e partie&nbsp;: R\u00e9cup\u00e9ration et adaptation du code source par Andr\u00e9 C. Les 3 articles pr\u00e9c\u00e9dents &#8220;Musique, Note, Octave, Fr\u00e9quence et P\u00e9riode&#8220;, &#8220;Les enveloppes du PSG 8912&#8221; et &#8220;Temporisation en langage machine&#8221; vous ont fourni quelques \u00e9l\u00e9ments de compr\u00e9hension des sons de l&#8217;Oric. Nous allons voir comment exploiter au mieux les sons pr\u00e9programm\u00e9s gr\u00e2ce \u00e0 une [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3607,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[338,346,347,22,355,357,320],"tags":[671],"class_list":["post-3604","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-338","category-assembleur","category-atmos","category-ceomag","category-demos","category-dsk-file","category-tap-file","tag-ceomag361"],"_links":{"self":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts\/3604","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=3604"}],"version-history":[{"count":0,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts\/3604\/revisions"}],"wp:attachment":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/media?parent=3604"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/categories?post=3604"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/tags?post=3604"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}