{"id":851,"date":"2019-03-22T20:14:15","date_gmt":"2019-03-22T19:14:15","guid":{"rendered":"https:\/\/www.pmd85.cz\/?page_id=851"},"modified":"2019-10-20T17:24:09","modified_gmt":"2019-10-20T16:24:09","slug":"kvarteto-na-jednom-bitu","status":"publish","type":"page","link":"https:\/\/www.pmd85.cz\/?page_id=851","title":{"rendered":"Kvarteto na jednom bitu"},"content":{"rendered":"<p><span style=\"color: #808080;\"><em>motto: &#8222;V\u00ed\u0161, \u017ee jsme zalo\u017eili kvarteto? Kdo? No p\u0159ece my t\u0159i. Kdo my t\u0159i? No j\u00e1 a br\u00e1cha. Ty m\u00e1\u0161 br\u00e1chu? Ne, a pro\u010d?&#8220;<\/em><\/span><\/p>\n<p>Tak takhle ne. Budeme opravdu p\u0159ehr\u00e1vat \u010dty\u0159i hlasy na jednom jednobitov\u00e9m v\u00fdstupu. U mikropo\u010d\u00edta\u010de PMD-85 se jedn\u00e1 konkr\u00e9tn\u011b o bit PC2 &#8222;slu\u017eebn\u00edho&#8220; PPI typu MHB8255A.<\/p>\n<p>Dlouho jsem se tr\u00e1pil s variantou se \u010dty\u0159n\u00e1sobn\u00fdm p\u0159evzorkov\u00e1n\u00edm a vy\u010dlen\u011bn\u00edm \u010dasov\u00fdch slot\u016f pro \u010dty\u0159i p\u016fvodn\u00ed zvukov\u00e9 kan\u00e1ly. Bylo to super, um\u011blo to pracovat s energi\u00ed jednotliv\u00fdch zvukov\u00fdch kan\u00e1l\u016f (bylo mo\u017eno simulovat \u010dty\u0159i hladiny hluku, linouc\u00ed se z PMD-85) a .. to bylo vlastn\u011b v\u0161e. Procedura byla extr\u00e9mn\u011b dlouh\u00e1, siln\u011b z\u00e1visl\u00e1 na synchronizaci se vzorkov\u00e1n\u00edm zvukov\u00e9 karty p\u0159i b\u011bhu v emul\u00e1toru, a hlavn\u011b &#8211; hlavn\u011b produkovala parazitn\u00ed frekvence.<\/p>\n<p>Na Foreveru 2019 mi Busy (https:\/\/busy.speccy.cz) poradil, abych pou\u017eil \u0159e\u0161en\u00ed s m\u00edsen\u00edm zvukov\u00fdch kan\u00e1l\u016f prostou funkc\u00ed OR a doporu\u010dil mi rutinu J\u00e1na De\u00e1ka s n\u00e1zvem ZX10. Osmibitov\u00e9 d\u011blic\u00ed konstanty jsem nahradil 16-bitovou p\u0159\u00edmou digit\u00e1ln\u00ed synt\u00e9zou (DDS) a v\u00fdsledek je dal\u0161\u00edm evolu\u010dn\u00edm krokem v generov\u00e1n\u00ed v\u00edcehlas\u00e9 hudby na PMD-85. Rutinu lze beze zm\u011bny funk\u010dnosti expandovat teoreticky a\u017e na 127-hlasovou polyfonii, ov\u0161em frekven\u010dn\u00ed rastr bude u\u017e asi dosti hrub\u00fd. P\u0159i zv\u011bt\u0161en\u00ed po\u010dtu p\u0159ehr\u00e1van\u00fdch hlas\u016f bude v\u017edy nutno p\u0159epo\u010d\u00edtat generuj\u00edc\u00ed konstanty t\u00f3n\u016f a vhodn\u011b posunout pozici bitu, budic\u00edho reproduktor (to je ta zablokovan\u00e1 instrukce RAR). Rutina nem\u00e1 na rozd\u00edl od ZX10 sofistikovan\u00fd p\u0159edkous\u00e1va\u010d datov\u00e9ho toku not, prost\u011b bere, co j\u00ed d\u00e1te, a to p\u0159ehraje.<\/p>\n<p>Samotn\u00e9 j\u00e1dro p\u0159ehr\u00e1va\u010de vypad\u00e1 takto:<\/p>\n<pre>; *****************************************\r\n; procedura generov\u00e1n\u00ed \u010dty\u0159 soub\u011b\u017en\u00fdch t\u00f3n\u016f\r\n; *****************************************\r\n\r\nsound:  push b         ; uschovat ukazatel do notov\u00e9ho z\u00e1pisu\r\n\r\nsoundL: xra a          ; p\u0159\u00edprava funkce OR pro slu\u010dov\u00e1n\u00ed\r\n\r\nsoundA: lxi b,0        ; #1 konstanta v\u00fd\u0161ky t\u00f3nu\r\n        lxi h,0        ; akumul\u00e1tor DDS gener\u00e1toru\r\n        dad b          ; vlastn\u00ed DDS synt\u00e9za\r\n        shld soundA+4  ; ulo\u017eit v\u00fdsledek\r\n        sbi 0          ; CY = v\u00fdstup frekvence syntez\u00e1toru\r\n                       ; (p\u0159ete\u010den\u00ed nahod\u00ed A := 11111111)\r\n\r\nsoundB: lxi b,0        ; #2 konstanta v\u00fd\u0161ky t\u00f3nu\r\n        lxi h,0        ; akumul\u00e1tor DDS gener\u00e1toru\r\n        dad b          ; vlastn\u00ed DDS synt\u00e9za\r\n        shld soundB+4  ; ulo\u017eit v\u00fdsledek\r\n        sbi 0          ; CY = v\u00fdstup frekvence syntez\u00e1toru\r\n                       ; (p\u0159ete\u010den\u00ed nahod\u00ed A := 1111111x)\r\n\r\nsoundC: lxi b,0        ; #3 konstanta v\u00fd\u0161ky t\u00f3nu\r\n        lxi h,0        ; akumul\u00e1tor DDS gener\u00e1toru\r\n        dad b          ; vlastn\u00ed DDS synt\u00e9za\r\n        shld soundC+4  ; ulo\u017eit v\u00fdsledek\r\n        sbi 0          ; CY = v\u00fdstup frekvence syntez\u00e1toru\r\n                       ; (p\u0159ete\u010den\u00ed nahod\u00ed A := 111111xx)\r\n\r\nsoundD: lxi b,0        ; #4 konstanta v\u00fd\u0161ky t\u00f3nu\r\n        lxi h,0        ; akumul\u00e1tor DDS gener\u00e1toru\r\n        dad b          ; vlastn\u00ed DDS synt\u00e9za\r\n        shld soundD+4  ; ulo\u017eit v\u00fdsledek\r\n        sbi 0          ; CY = v\u00fdstup frekvence syntez\u00e1toru\r\n                       ; (p\u0159ete\u010den\u00ed nahod\u00ed A := 111111xx)\r\n\r\n        ;rar           ; (posun pro 8-kan\u00e1lov\u00fd p\u0159ehr\u00e1va\u010d)\r\n        ani 4          ; OUT = F1 OR F2 OR F3 OR F4\r\n        out kbdled     ; v\u00fdstup na reproduktor\r\n\r\n        dcx d          ; odpo\u010det d\u00e9lky souzvuku t\u00f3n\u016f\r\n        mov a,d\r\n        ora e\r\n        jnz soundL\r\n\r\n        pop b          ; obnovit ukazatel do notov\u00e9ho z\u00e1pisu\r\n        ret<\/pre>\n<p>Jednodu\u0161\u0161\u00ed to u\u017e asi b\u00fdt nem\u016f\u017ee. Samotn\u00e9 generov\u00e1n\u00ed ka\u017ed\u00e9ho jednoho zvukov\u00e9ho kan\u00e1lu (DDS ) se odehr\u00e1v\u00e1 v \u0161estn\u00e1ctibitov\u00fdch registrech BC a HL a neovliv\u0148uje obsah 8-bitov\u00e9ho registru A. Do registru A se p\u0159en\u00e1\u0161\u00ed pouze informace o po\u017eadavku na vygenerov\u00e1n\u00ed pulsu ka\u017ed\u00fdm ze \u010dty\u0159 gener\u00e1tor\u016f. \u017de chce dan\u00fd gener\u00e1tor vyrobit puls, d\u00e1 v\u011bd\u011bt pomoc\u00ed nastaven\u00ed p\u0159\u00edznaku CY, kter\u00fd pomoc\u00ed instrukce &#8222;SBI 0&#8220; postoup\u00ed tuto informaci pr\u00e1v\u011b do registru A. Na konci smy\u010dky se podle obsahu registru A po\u0161le na reproduktor bu\u010f logick\u00e1 0 (\u017e\u00e1dn\u00fd kan\u00e1l negeneruje puls, registr A z\u016fstal nulov\u00fd) nebo logick\u00e1 1 (minim\u00e1ln\u011b jeden z kan\u00e1l\u016f generuje puls, registr A m\u00e1 hodnotu 111111xxb &#8211; tedy jednu z hodnot 0FFh\/0FEh\/0FDh\/0FCh).<\/p>\n<p><a href=\"https:\/\/www.pmd85.cz\/wp-content\/uploads\/voice416.txt\" target=\"_blank\" rel=\"noopener\">zdrojov\u00fd k\u00f3d demonstra\u010dn\u00edho p\u0159\u00edkladu s vyu\u017eit\u00edm p\u0159ehr\u00e1va\u010de VOICE416<\/a><\/p>\n<p><a href=\"https:\/\/www.pmd85.cz\/wp-content\/uploads\/demo_voice416.wma\" rel=\"noopener\">zvukov\u00fd z\u00e1znam uveden\u00e9ho demonstra\u010dn\u00edho p\u0159\u00edkladu<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>motto: &#8222;V\u00ed\u0161, \u017ee jsme zalo\u017eili kvarteto? Kdo? No p\u0159ece my t\u0159i. Kdo my t\u0159i? No j\u00e1 a br\u00e1cha. Ty m\u00e1\u0161 br\u00e1chu? Ne, a pro\u010d?&#8220; Tak takhle ne. Budeme opravdu p\u0159ehr\u00e1vat \u010dty\u0159i hlasy na jednom jednobitov\u00e9m v\u00fdstupu. U mikropo\u010d\u00edta\u010de PMD-85 se jedn\u00e1 konkr\u00e9tn\u011b o bit PC2 &#8222;slu\u017eebn\u00edho&#8220; PPI typu MHB8255A. Dlouho jsem se tr\u00e1pil s variantou [&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\/851"}],"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=851"}],"version-history":[{"count":10,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages\/851\/revisions"}],"predecessor-version":[{"id":871,"href":"https:\/\/www.pmd85.cz\/index.php?rest_route=\/wp\/v2\/pages\/851\/revisions\/871"}],"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=851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}