{"id":536,"date":"2018-04-28T22:16:05","date_gmt":"2018-04-28T21:16:05","guid":{"rendered":"https:\/\/www.pmd85.cz\/?page_id=536"},"modified":"2019-10-20T17:24:57","modified_gmt":"2019-10-20T16:24:57","slug":"generovani-dvouhlase-hudby-na-jednobitovem-vystupu-verze-ii","status":"publish","type":"page","link":"https:\/\/www.pmd85.cz\/?page_id=536","title":{"rendered":"Generov\u00e1n\u00ed dvouhlas\u00e9 &#8222;hudby&#8220; na jednobitov\u00e9m v\u00fdstupu &#8211; verze II"},"content":{"rendered":"<p><a href=\"https:\/\/www.pmd85.cz\/?page_id=341\" rel=\"noopener\">P\u0159edchoz\u00ed verze<\/a> p\u0159ehr\u00e1va\u010de dvouhlas\u00e9 hudby pracovala s d\u011bli\u010dkami s rozli\u0161en\u00edm 8 bit\u016f. To se v praxi uk\u00e1zalo jako celkem dost omezuj\u00edc\u00ed faktor, nebo\u0165 ji\u017e v oblasti mal\u00e9 dvou\u010d\u00e1rkovan\u00e9 okt\u00e1vy zely d\u00edry po nepokryt\u00fdch t\u00f3nech. A z t\u0159\u00ed\u010d\u00e1rkovan\u00e9 mal\u00e9 okt\u00e1vy zbylo jen torzo.<\/p>\n<p>Nov\u00e1 verze p\u0159ehr\u00e1va\u010de vyu\u017e\u00edv\u00e1 techniku, pou\u017eitou u DDS (p\u0159\u00edm\u00e9 digit\u00e1ln\u00ed synt\u00e9zy), kdy k z\u00e1kladn\u00edmu akumul\u00e1toru se opakovan\u011b p\u0159i\u010d\u00edt\u00e1 konstanta, p\u0159\u00edmo \u00fam\u011brn\u00e1 po\u017eadovan\u00e9 frekvenci. A p\u0159i p\u0159ete\u010den\u00ed akumul\u00e1toru se\u00a0neguje hrana v\u00fdstupn\u00edho generovan\u00e9ho sign\u00e1lu. Procesor i8080 m\u00e1 hardwarovou podporu pro 16-bitov\u00e9 s\u010d\u00edt\u00e1n\u00ed, proto i uveden\u00fd p\u0159ehr\u00e1va\u010d pracuje s t\u00edmto rozli\u0161en\u00edm. P\u0159esn\u011bji \u0159e\u010deno, konstanty, ur\u010duj\u00edc\u00ed frekvence jednotliv\u00fdch not maj\u00ed rozli\u0161en\u00ed 16 bit\u016f. A jak se uk\u00e1zalo v praxi, pomoc\u00ed tohoto mechanismu lze bez probl\u00e9m\u016f pokr\u00fdt rozsah 88-kl\u00e1vesov\u00e9ho klav\u00edru, tzn. rozsah A2(subkontra\/velk\u00e1 dvou\u010d\u00e1rkovan\u00e1) a\u017e c5(mal\u00e1 p\u011bti\u010d\u00e1rkovan\u00e1 okt\u00e1va). Pou\u017eit\u00e1 technika zvl\u00e1d\u00e1 i v\u011bt\u0161\u00ed rozsah, je ot\u00e1zkou, kam a\u017e je zapot\u0159eb\u00ed zaj\u00edt.<\/p>\n<p>Uveden\u00fd p\u0159\u00edklad obsahuje i skladbu, z jej\u00edho\u017e z\u00e1pisu je vid\u011bt struktura defini\u010dn\u00edch dat t\u00e9to skladby. Struktura dat a intern\u00ed mechanismus p\u0159ehr\u00e1va\u010de byl upraven tak, aby umo\u017e\u0148oval transpozici cel\u00e9 skladby (pro p\u0159\u00edpad, \u017ee p\u0159ebereme data z jin\u00e9ho syst\u00e9mu a nechce se n\u00e1m ru\u010dn\u011b p\u0159epo\u010d\u00edt\u00e1vat \u010d\u00edsla not) a tak\u00e9 umo\u017e\u0148uje v rozsahu 1..7 m\u011bnit glob\u00e1ln\u00ed tempo skladby (lep\u0161\u00ed ne\u017e nic).<\/p>\n<p>P\u0159i p\u0159enosu dat na jin\u00e9 syst\u00e9my (t\u0159eba\u017ee na b\u00e1zi i8080 &#8211; ov\u0161em z\u00e1le\u017e\u00ed taky na pom\u011brn\u00e9m po\u010dtu vkl\u00e1dan\u00fdch WAIT stav\u016f od hardware po\u010d\u00edta\u010de!) je t\u0159eba pamatovat je\u0161t\u011b na jedno hardwarov\u011b z\u00e1visl\u00e9 \u0159e\u0161en\u00ed. T\u00edm, \u017ee m\u00e1 PMD-85 pov\u011b\u0161en speaker na bitu PC2, m\u00e1 jednu v\u00fdhodu. Zap\u00ed\u0161u-li hodnotu 04h na v\u00fdstupn\u00ed port PC slu\u017eebn\u00ed 8255-ky, nahod\u00edm t\u00edm speaker do log. 1. Pokud stejnou hodnotu 04h zap\u00ed\u0161u do \u0159\u00eddic\u00edho registru t\u00e9\u017ee 8255-ky, nuluju v\u00fdstupn\u00ed pin na portu PC2 a t\u00edm na speaker zap\u00ed\u0161u log. 0. Tak\u017ee mohu trvale dr\u017eet v akumul\u00e1toru hodnotu 04h a nemus\u00edm m\u011bnit jeho obsah a t\u00edm zpomalovat smy\u010dku p\u0159ehr\u00e1va\u010de. Tento efekt funguje jen pro n\u011bkter\u00e9 pozice bit\u016f. S t\u00edm je zapot\u0159eb\u00ed se p\u0159i portaci na jin\u00e9 syst\u00e9my bu\u010f vypo\u0159\u00e1dat, nebo zapisovat pouze na port PC a p\u0159ed pat\u0159i\u010dnou instrukci OUT za\u0159adit instrukci MVI A,pozice_bitu_speakru. Pak se ov\u0161em nat\u00e1hne d\u00e9lka hrac\u00ed smy\u010dky a bude nutno p\u0159epo\u010d\u00edtat d\u011bli\u010dky not.<\/p>\n<p>Zde je tedy sl\u00edben\u00fd p\u0159\u00edklad:<\/p>\n<p><a href=\"https:\/\/www.pmd85.cz\/wp-content\/uploads\/mus2frac.txt\" target=\"_blank\" rel=\"noopener\">P\u0159\u00edklad s pou\u017eit\u00edm knihovny p\u0159ehr\u00e1va\u010de (assembler)<\/a><\/p>\n<p><a href=\"https:\/\/www.pmd85.cz\/wp-content\/uploads\/mus2frac.zip\">P\u0159\u00edklad ve form\u011b virtu\u00e1ln\u00ed MGF nahr\u00e1vky pro emul\u00e1tor PMD-85 od RM-Teamu<\/a><\/p>\n<p><a href=\"https:\/\/www.pmd85.cz\/wp-content\/uploads\/Arrival.wma\" target=\"_blank\" rel=\"noopener\">Zvukov\u00fd z\u00e1znam skladby (form\u00e1t WMA)<\/a><\/p>\n<p>Pou\u017eit\u00e9 \u0159e\u0161en\u00ed m\u00e1 krom\u011b v\u011bt\u0161\u00edho rozli\u0161en\u00ed je\u0161t\u011b dal\u0161\u00ed v\u00fdhodu v tom, \u017ee algoritmus m\u00e1 po\u0159\u00e1d stejnou d\u00e9lku (vyjma m\u011b\u0159en\u00ed doby trv\u00e1n\u00ed t\u00f3nu p\u0159i p\u0159ete\u010den\u00ed registru C &#8211; ale tam to nevad\u00ed). Tak\u017ee kdy\u017e gener\u00e1tor 1. t\u00f3nu p\u0159eklop\u00ed logickou \u00farove\u0148, neprojev\u00ed se to na d\u00e9lce generovan\u00e9 vlny t\u00f3nu \u010d.2.<\/p>\n<p>Dal\u0161\u00ed fajnovost\u00ed, kterou se tato verze m\u016f\u017ee pochlubit, je \u010dty\u0159n\u00e1sobn\u00fd po\u010det t\u011bl vlastn\u00edho gener\u00e1toru. Ka\u017ed\u00e1 z t\u011bchto \u010dty\u0159 instanc\u00ed p\u0159edpokl\u00e1d\u00e1 ur\u010ditou kombinaci logick\u00fdch hodnot obou zvukov\u00fdch gener\u00e1tor\u016f: 0\/0, 0\/1, 1\/0 nebo 1\/1. Ka\u017ed\u00e9 t\u011blo se star\u00e1 o tu svou kombinaci a p\u0159i pot\u0159eb\u011b zm\u011bnit logickou hodnotu na v\u00fdstupu n\u011bkter\u00e9ho kan\u00e1lu se p\u0159ejde na jin\u00e9 t\u011blo.<\/p>\n<p>Oproti p\u016fvodn\u00edmu p\u0159ehr\u00e1va\u010di s osmibitov\u00fdm rozli\u0161en\u00edm m\u00e1 tento pon\u011bkud &#8222;zast\u0159en\u011bj\u0161\u00ed&#8220; projev. Asi je to t\u00edm, \u017ee z n\u011bjak\u00fdch 40T\/kan\u00e1l se d\u00e9lka algoritmu prot\u00e1hla na ca 51,5T\/kan\u00e1l a t\u00edm se v\u00fdstupn\u00ed sign\u00e1l h\u016f\u0159 synchronizuje se vzorkovac\u00ed frekvenc\u00ed zvukov\u00e9 karty na PC, kter\u00e1 je fixn\u011b nastavena na 44100Hz.<\/p>\n<p>Je\u0161t\u011b jedna pozn\u00e1mka. Vypo\u010dten\u00e9 konstanty pro gener\u00e1tor t\u00f3n\u016f jsem p\u016fvodn\u011b po\u010d\u00edtal pro zpomalen\u00ed procesoru (od vkl\u00e1dan\u00fdch WAIT stav\u016f od videoprocesoru) na \u00farovni 15-16%. Nakonec jsem podle m\u011b\u0159en\u00ed skute\u010dn\u00fdch generovan\u00fdch frekvenc\u00ed na \u010d\u00edta\u010di zp\u011btn\u011b propo\u010detl, \u017ee zpomalen\u00ed t\u00e9to konkr\u00e9tn\u00ed sekvence instrukc\u00ed \u010din\u00ed asi jen 10%. N\u011bjak hloub\u011bji jsem se v tom ne\u0161\u0165oural, pokud se n\u011bkomu bude p\u0159eci jen cht\u00edt, tak jeden pr\u016fchod smy\u010dkou m\u00e1 103 takt\u016f CPU a pro vygenerov\u00e1n\u00ed cel\u00e9 vlny je tedy t\u0159eba 2&#215;103 = 206 takt\u016f CPU.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>P\u0159edchoz\u00ed verze p\u0159ehr\u00e1va\u010de dvouhlas\u00e9 hudby pracovala s d\u011bli\u010dkami s rozli\u0161en\u00edm 8 bit\u016f. To se v praxi uk\u00e1zalo jako celkem dost omezuj\u00edc\u00ed faktor, nebo\u0165 ji\u017e v oblasti mal\u00e9 dvou\u010d\u00e1rkovan\u00e9 okt\u00e1vy zely d\u00edry po nepokryt\u00fdch t\u00f3nech. A z t\u0159\u00ed\u010d\u00e1rkovan\u00e9 mal\u00e9 okt\u00e1vy zbylo jen torzo. Nov\u00e1 verze p\u0159ehr\u00e1va\u010de vyu\u017e\u00edv\u00e1 techniku, pou\u017eitou u DDS (p\u0159\u00edm\u00e9 digit\u00e1ln\u00ed synt\u00e9zy), kdy k [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":337,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages\/536"}],"collection":[{"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=536"}],"version-history":[{"count":9,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages\/536\/revisions"}],"predecessor-version":[{"id":539,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages\/536\/revisions\/539"}],"up":[{"embeddable":true,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages\/337"}],"wp:attachment":[{"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=536"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}