Já to prostě nedám a tuhle informací ze dneška pustím ven. Chtěl jsem zobrazovat můj hudební formát v reálném čase i na obrazovku, nicméně ta nízká frekvence na které běží můj program pověšený na mou hudební rutinu je tak nízká, že mi u tohohle rychlého zobrazování textu začala má A1200 pouze s Fast RAM malinko táhnout zvuk. Tenhle problém již nebudu řešit a asi zobrazím hudební formát běžným pomalejším způsobem aby to i 020ka dávala.
Někdo si může říci neúspěch. Já tohle žeru. To je boží jak to na té poddimenzované frekvenci pro vykonání programové smyčky nestíhá!
Samozřejmě výkonu u 020 je dost, jen jsem ji moc "přiškrtil" na rychlé zobrazování textu
Já mám již skladbu ve 2 patternech v mém formátu nějaký pátek převedenou, ale dnes jsem se něčím zabýval a přimělo se mně to podívat na velikost 2 patternů v bytech.
Nesoutěžím, to není cíl, ale drobnosti jednoduše potěší.
Info z Eagleplayeru a pak můj skok přes 2 patterny u stejné skladby.
EP: 3132 bajtů, můj hudební formát 1092 bajtů (444 hexa)
MOD je samozřejmě komplexnější formát ale i tak jsem byl překvapen. Počítal jsem že budu celkově tak na 2 KB. Tedy 1 KB na jeden pattern.
Díky za odpověď. Jsem opět o něco chytřejší. Dnes jsem provedl nějaké testy jak to vše vypadá s mezerou místo nuly a myslím že je to ok. Pro použití nuly bych musel opět drobátko nabalit kód, tak když to není nutný, nebudu to dělat.
Já mám 2 druhy vizuální mezery. Ta druhá mezera říká, že se má provést další veliký cyklus programu, tedy se opustí část kódu, která by se jinak opakovala. Zároveň se tahle funkce "druhé" mezery dá použít i jako časovač, aniž by jsem jej musel definovat, co je taky fajn.
V té druhé části máš asi makra. K těm jsem se nedostal, i když princip je dle všeho jednoduchý. Dělají se tam nějaké bitové (bytové?) posuny.
Ale to u mně není na pořadu dne.
Obvykle se za logickou pravdu (true) používá jakákoliv _nenulová_ hodnota. Má to tak C, C++, C# a asi i mnoho dalších procedurálních jazyků vycházejících z Algolu. Naopak nepravda (false) je definována jako nulová hodnota, bez ohledu na počet bitů.
Ve tvém případě by to tedy mohlo být tak, že "space" je tam, kde je nula, jinak se zobrazí znak. Problém může být to, že "space" je vlastně taky znak. Ale to nemusí být v praxi potřebné.
Pokud ale chceš mít uloženy informace true/false, že se někde něco (v prostoru) zobrazuje, ta nejúspornější varianta uložení je tzv. bitfield array - pole bitů. Například v C/C++ hodnotu true/false pro celočíselný index X získáš jako ( bitarray[ X >> 3 ] & ( 0x80 >> ( X & 7 ) ) ). Nastavit hodnotu můžeš použitím ( IsTrue ? bitarray[ X >> 3 ] |= ( 0x80 >> ( X & 7 ) ) : bitarray[ X >> 3 ] &= ~( 0x80 >> ( X & 7 ) ) ). Pro deklaraci "unsigned char* bitarray;".
Jak co nejlépe pro kohokoliv podat informaci o tom, že se budou na obrazovce zobrazovat pouze data, které mají hodnotu logické 1. Data se budou zobrazovat v hexadecimální soustavě, ale tahle informace již podaná je. To je spíše info pro vás. Kde nebudou logické 1 budou mezery / mezera.
Včera možná dnes, no jednoduše kolem půlnoci jsem časově synchronizoval práci textra a hudební rutiny kvůli jednomu režimu a potřeboval jsem v závěru přesně odsledovat 4 cykly, řekněme 1 cyklus tak 20 vteřin s čím jsem celkem zápasil, protože jsem vždy v jednom cyklu chytl mikrospánek, ale nakonec se povedlo. Tak jsem to mohl spokojeně vypnout. Já jsem vždy k večeru aktivnější jen tělo takhle protestuje
Tak před chvílí na mně asm vyjel s chybou co jsem nečekal, protože jsem dlouhodobě do toho kódu kde se vyskytovala nezasahoval. Tak jsem nevěděl která bije asi tak minutu. Pak jsem pochopil že PC relativní adresaci na adresu bitplanu již nestačil skok Já to měl definovaný za textem pro můj jednoduchý program co s textem pracuje. No a jak jsem text nabaloval, tak již to bylo moc... . Tak jsem vzal celý program pro Cooper a hodil ho před ten text. Již dobrý... .
Tak na reální Amize jsem měl ve zvuku v režimu kdy odstavuji hudební rutinu v samplu pořád drobné praskání ve zvuku. Nejdříve jsem měl za to, že se jedná o rychlost hraní samplu. To se nepotvrdilo. Sampl má celkem 512 bytů, já z něj cykloval 256 bytů. Pomohlo snížit ještě úsek cyklování samplu a já to rovnou nastavil na frekvenci opakování samplu která mi vyhovovala a opakuji ve výsledku 160 bytů ze samplu. Nastavoval jsem to na přesnost 10 bytů a za mně je to ok. Teď si uvědomuji, že dané praskání v samplu nezpůsobovalo dávání jeho frekvenčního průběhu na nulu a pak na jeho klasický průběh, ale rozdíl průběhu při jeho opakování. Jeho průběh má klesající charakter a ten skok v jeho vzdálenějším průběhu k jeho začátku již byl moc veliký
Tak nějak již mám program pro vypisování textu ve stavu, kdy dělá to co jsem chtěl, popřípadě jsem se různým zkoušením musel dopracovat k z mého pohledu k nějaké nejlepší variantě, jak by co mělo fungovat.
Obraz je vycentrovaný, celkově posunutý o 1 pixel níže, protože ve výsledku záleží, jestli máte výšku zobrazovaného pole v sudém, nebo v lichém počtu.
Vrátil jsem vypisování textu funkci, že mezera nepromaže text, pokud tam nějaký je. Původně mazání mezerou bylo ku prospěchu nicméně já již můžu mazat text i jinak a teď má již nepromazávání textu mezerou své výhody.
V režimu odstavené hudební rutiny již dokážu mazat text velice rychle, to je vlastně předvolený režim, pokud je hudební rutina odstavena, za mně to pak vypadá dobře. To rychlé promazávání je důležité opravdu jen v tomhle režimu - z mého pohledu.
Vizuálně jsem zmenšil zobrazovací plochu, nelíbilo se mi psaní textu třeba jen na 3 řádky do již vytvořeného jednoduchého grafického prvku. Takhle je to za mně ok.
Odtestuji na real Amize, možná nějaká kontrola kódu, ale dle všeho za mně jednoduchý engine pro práci s textem hotov, pokud se nevyskytne problém, ale to budu opravovat kód a ne měnit funkcionalitu, s tou jsem alespoň já spokojen.
Tak doedituji skladbu a ještě kód pro zobrazení nějakého obrázku... .
Už nějaký ten pátek mám stav, kdy v mém programu odstavym hudební rutinu a přes to pracuji se zvukem mám práci se zvukem bezproblémovou, neboli zvuk je čistý bez ruchů. Všechny registry se zvukem kompletně ošetřeny aby se s nimi pracovalo jak na úrovni mé hudební rutiny, teď již i při jejím vypnutí. To jsem již jednou měl a neměl jsem zvuk čistý, asi tomu pomohli drobné změny v logice v rámci práce se zvukem. Taky jsem trochu jinak vyřešil odstavení registru pro práci s DMA v rámci zvuku. Klasická $dff096ka, kde rozhodnutí, jestli se použije nečiní kód před tímhle registrem, ale úplně jej preskakuji a aktivaci DMA Pauli vykonám ještě před hlavní smyčkou programu. Tohle jsem si mohl dovolit díky tomu, že mám odstavenou hudební rutinu. Asi by šlo pracovat s registrem $dff096 v rámci zvuku i na 2 místech v programu současně, za podmínky, že počet taktů při použití obouch registrů bude shodný v momentě kdy je použijete, ostatní by vedlo k rozsinchronizovani zvuku.
Pak jsem se zaměřil na další věci ohledně textra. Snažil jsem se logicky oddělit stav, kdy se v rámci textu pracuje s menší části obrazovky.
Pak jsem si všiml jedné chyby a to, že mi program v textu nezobrazuje úplně poslední řádek a to ne řádek textu, to bych viděl hned 🙂, ale poslední řádek v rozsahu výšky 1 pixelu a i to až na posledním řádku ve kterém vypisuji text. Do tohohle posledního řádku o výšce 1 pixel vypisuji asi jenom část ze znaku čárky. Chybu jsem začal hledat v pátek a dohledal ji v sobotu. To je ten můj styl, kdy nemám rád v kódu něco co nevím co přesně dělá když kód funguje "stejně" i bez jeho použití... . Neměl jsem definovanou oblast pro zobrazení, jinak se dle všeho zobrazuje menší výsek obrazovky jak je standardně zmiňované v dokumentacích. Už jsem chtěl dávat dotaz, ale měl jsem hlavu již ve srač... tak jsem to odložil, mezi tím si začal číst diskuze na EAB a já zjistil kde je problém. Vlastně to reagovalo již pouze u vynulování registru určeného pro začátek určení oblasti pro zobrazení a konečně se mi zobrazil i poslední nejnižší pixel pro vypsání textu. Hurá 🙂.
Ještě jsem se chtěl podívat jakou oblast mám definovat. Samozřejmě v diskuzích se střídalo pár nastavení, které se opakovali ale i tak jsem to chtěl mít více podložené že které z nich. Zabrousil jsem proto do mých PDF knih o assembleru a vsadil na mou oblíbenou polskou (ne od Zapy). Sklamala. Druhý můj tažný kůň je taková ta Italská brožurka . Tam jsem konečně porozuměl italskému normální stav na první dobrou... 🙂
Potřebuji v textru udělat ještě 1 věc, která má co dočinění s přechodem mezi různými režimy v programu.
Když se ještě vrátím k tomu nedefinování zobrazení oblasti v obraze a nezobrazování posledního pixelu co zobrazovat chcete. Vtipná to situace, skoro na zabití... 🙂
Při rychlém vypisování textu se mi ve zvuku (při vypnuté hudební rutině) jednou za čas objevil ruch který zněl jako když jste u vinylové desky přešli jehlou gramce přes více stop. Standardně se prokázal rychlý přístup do HW registru pro zvuk. Tak jsem to ošetřil drobátko jinak, takovým kompromisem mezi obouma stavy (bez potřebného efektu / s efektem).
Pak jsem se vrhnul do zkoumání, jestli pokud zvukové registry ošetřim tak jak by se s nimi správně mělo počas hraní skladby pracovat, jestli dosáhnu jakéhokoliv zlepšení vůči současnému stavu hraní zvuku. (to ošetření psáno výše to byla jiná liga tam jsem s HW registry pracoval mnohonásobně rychleji) To o čem píšu teď, je časově na hraně ale už to začíná Amiga i dávat tak jsem nebyl nucen přistoupit k jinému řešení, tedy vrátit se k nejjednodušší logice programu. Já totiž to dělám drobátko po zvukové stránce prasárnu ale HW mi to za stavu kdy pracuji s 1 samplem umožňuje a pokud mi to umožňuje nemám důvod přidávat do programu instrukce navíc. Osobně to považuji za lepší řešení. Není to tedy o lenosti, já měl verze obě a vrátil jsem se k jednodušší protože stačí, alespoň zatím.
Pak jsem. začal řešit ještě 1 problém. Chtěl jsem hrát takové mono, tedy aby mi v levém a v pravém kanály hrálo to stejný. Někdy se mi bohužel jeden kanál vůči druhému po zvukové stránce chytl později (a to nepravidelně) co bylo ve zvuku dost slyšet. Samozřejmě jsem to zkoušel i popři z mého pohledu správné práci s HW registry. Ale ani to nepomohlo. Došel jsem k závěru, že to neovlivním. Potřeboval bych pracovat s HW registry pomaleji a to nemůžu. Rozhodl jsem se proto hrát jen 1 kanál co ničemu až tak nevadí. Je to pro mně asi lepší řešení jako hrát oba kanály s jednodušší logikou kódu a tedy i pomalejším přístupem k HW registrům. To bych mohl... .
Vše co sem teď píšu platí pro vypnutou hudební rutinu. V mé hudební rutině pracuj s HW registry snad standardně, tam by tohle použít nešlo co mně prozatím utvrzuje v mém správném rozhodnutí ji pro tenhle případ odstavit.
Tak přeci jen použita o něco propracovanější logika. Ruch ve zvuku při rychlém použití HW registru se mi podařilo odstranit. Napadla mně alternativa ponechání nastavení konstantní hlasitosti, nepoužívám ani přerušení DMA u Pauli (taky ruch ve zvuku). Napadlo mně za sampl dát 2 byte na nulové hodnotě, tedy jsem to přidal přímo do průběhu samplu v Octamedu. A když potřebuji ztlumit zvuk bez ruchu, hraju jen ty poslední 2 byte v samplu. Vypadá to dobře, tak snad se to osvědčí. S tímhle jsem se radši už ani v emulací nehrál, tedy rovno v assembleru na Amize 1200.
Tohle mi umožňuje pracovat se samplem bez ruchu při práci s registry při každé smyčce programu a to jsem potřeboval. Když jsem měnil hlasitost v HW registry nebo přerušil DMA u Pauli, na zvuk bez ruchu jsem potřeboval tak 3 programové smyčky co bylo pro mně nepoužitelný. Teď mi stačí 1 programová smyčka.
Standardně budu ještě testovat, měl jsem jednou ve zvuku chybu tak uvidím, ale bylo to při rychlém psaní textu. Tam můžu pribržďovat psaní textu. Dodělal jsem to před chvílí, prozatím s hraním se v asm stačilo
Tak základ dalšího režimu programu pracujícím s textem hotov. Již jen nějaké to lazení standardně. A standardně jsem si to i užil. Použitelná až 3.verze. Ta nejjednodušší varianta jaká mohla být. Já tu logiku chtěl mít propracovanější nicméně kvůli rychlé frekvenci přístupu k hudebním HW registrům byl ve zvuku za mně nepoužitelný (veliký) ruch. Jak jsem psal že bude má hudební rutina "komunikovat" s jiným programem tak opak je pravdou a úplně jsem ji odstavil (kolem 10 míst v programu a vše přepínám jediným bitem. 9 míst v programu patří části pro text, odstavení hudební rutiny je přímočařejší a dělám to na jednom nebo dvou místech v programu. Člověk by si řekl odstavuji hudební rutinu a takhle zasahuji do programu pro text, ano velká návaznost. To byla ale stručná závorka 🙂 ).
Vložit komentář: