atarionline.pl SFX-Tracker - Forum Atarum

    Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

    • :
    • :

    Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

      • 1:
         
        CommentAuthorpebe
      • CommentTime20 May 2021 13:05
       
      @pin: Rozumiem w czym rzecz, dlatego zrobiłem stronicowanie listy - zawsze to jakaś opcja dla dużych zbiorów. Jednak jak wspomniał też @jhusak, przy naprawdę dużych zbiorach, powinno się korzystać z wildcards, ewentualnie, jak pisałem ja, podział na mniejsze katalogi.
      • 2:
         
        CommentAuthorpebe
      • CommentTime20 May 2021 13:05
       
      Nom... zaktualizowałem MADzie do najnowszej dostępnej i mnie unieruchomiło ;(

      Trzeba czekać.
      • 3:
         
        CommentAuthorsun
      • CommentTime20 May 2021 14:05
       
      @pebe: teraz działa.
      • 4:
         
        CommentAuthorjhusak
      • CommentTime20 May 2021 14:05 zmieniony
       
      @pebe, przecież nie piszesz DOSA. Odniosłem wrażenie, że lista plików to główna funkcjonalność programu :)

      Ja bym to robił tak:
      - domyślna maska *.* albo *, jeśli rozszerzenie ukryte, możliwość zmiany.
      czytam 8, czy 16 wpisów, klawisz next/break
      break - zamyka kanał odczytu katalogu i wraca do menu.

      Wtedy Ci to zajmie 5-10 x mniej cennej pamięci.

      ----

      Nie zaglądałem do kodu, ale naprawdę nie z lenistwa :)
      • 5:
         
        CommentAuthorpebe
      • CommentTime20 May 2021 17:05 zmieniony
       
      @jhusak: Rozumiem Cię, ja jednak mam podejście: "Wygodne dla użytkownika" Sam lubię wygodę, intuicyjność, estetykę. Bez schlebiania sobie to wszystko można zrobić, mądrze planując ;)
      I tak nieco ponad 1,5KB przeznaczone jest na generowanie listy dla SFX i TAB. Nie trzymam ich cały czas w pamięci. Tworze je na podstawie danych zapisanych w stercie (pamięć pod ROMem), aby przeglądanie jej było sprawne i odczucia (użytkownika) były jak najlepsze.

      Widzisz, zmorą retro oprogramowania użytkowego, była ich obsługa - zapewne się ze mną zgodzisz. Była niekiedy do granic możliwości uproszczona, co skutkowało "topornością" takiego softu - fakt, działał, ale kosztem intuicyjności.
      Mamy czasy, gdzie są wdrażane bardzo ciekawe rozwiązania, jeśli chodzi o interface użytkownika i... one działają wyśmienicie. Dlaczego nie wprowadzić takich (lub podobnych/zbliżonych) rozwiązań dla małego Atari(?)
      Sam wiesz, że czasami większa ilość kodu pozwala osiągnąć lepsze rezultaty FPS (przykład Amaurote), czy wszelakie dema, gdzie stosuje się blittery)

      W kwestii pamieci, i tak (w obecnej wersji) nie zwiększę pamięci dla danych utworu. Może w następnej, pokombinuje z XMSem. Sterta jest niezależnym od SFXMM rozwiązaniem i po jej modyfikacji, można by ją dostosować do używania pamięci rozszerzonej małego Atari, a tej (jak wiemy) może być bardzo dużo. Najważniejsze, by się ogarnąć właściwy program, a dane, zawsze się upcha.

      Co do zaglądania na GitHub, doskonale rozumiem i nie obwiniam nikogo o lenistwo - jak pisałem, nikogo do niczego nie zmuszam. Każdy z Nas ma swoje życie, swoje obowiązki i nie mogę ich przerywać konieczności zobaczenia mojego kodu na GitHubie :) (chyba że... ;) )

      ---

      A teraz największa ciekawostka. Udało mi się ogarnąć nowe wydanie MADzi i skompilowałem kod.
      Doznałem szoku, bo jest mniejszy o 2044 bajty - Jestem ogromnie zadowolony.

      XEX z wersji 1.6.5 MAD Pascala - zapraszam do testów ;)

      ---

      @sun: Cieszę się, że poprawka zadziałała i że zgłosiłeś tego BUGa. W creditsach nie mam na tyle miejsca, by wymienić wszystkich którzy testowali/testują program (poza tym, jest trochę szkoda pamięci na przechowywanie takich informacji), jednak na GitHubie zrobię taką listę i na pewno, każdy, który choć trochę się przyczyni do lepszego działania SFXMM, będzie wymieniony.
      • 6:
         
        CommentAuthorjhusak
      • CommentTime20 May 2021 18:05
       
      Spoko, rozumiem podejście "przede wszystkim wygoda użytkownika" aż za dobrze :) Masz całkowitą rację :)
      • 7:
         
        CommentAuthorpebe
      • CommentTime20 May 2021 19:05
       
      @jhusak: Mówisz: aż za dobrze? nie wolno rozpieszczać, bo się to może obrócić przeciwko :D Już utrudniam nieco korzystanie z programu. Wycofuje zmianę i z powrotem trzeba będzie trzymać control, by przemieszczać kursor hahahahaha.

      Żart. Dzięki.
      • 8: CommentAuthormono
      • CommentTime20 May 2021 19:05 zmieniony
       
      Bardzo przydają się skróty klawiszowe dla ludzi, którzy już znają program, po to żeby szybko zrobić to co się chce.
      Przykładem antywzorca może być SoundTracker z ASF gdzie cała obsługa odbywa się joystickiem, bo kolesie pokupowali sobie Amigi i uznali że sterowanie wskaźnikiem jest mega wygodne.
      No i musisz jeździć tym joystickiem z jednego końca ekranu na drugi żeby cokolwiek zrobić i celować w te wszystkie checkboxy.
      To samo w zasadzie zrobili autorzy SoundTracker'a dla ZX Spectrum. I to samo Black Magic Composer dla Atari.
      Nie polecam takich rozwiązań.
      Skróty klawiszowe do wszystkich funkcji występują we wszystkich polskich programach muzycznych (za wyjątkiem wspomnianych) jak CMC, TMC, MPT czy NEO.
      Sugeruję zastanowić się nad skrótami dla każdej funkcji w programie (lub _przynajmniej_ dla wszystkich których często się używa).

      Edit: Mile widziana jest też pomoc pod klawiszem HELP. TMC ma kontekstową ale nawet zwykły ekran z listą skrótów klawiszowych i/lub ważniejszymi informacjami, jak ma to miejsce np w NEO, jest już mega przydatny.
      • 9:
         
        CommentAuthorsun
      • CommentTime20 May 2021 20:05
       
      @mono: że o sterowaniu przez GA czy Alexa nie wspominajmy :)
      "Hej google, skrobnij mi tu taką muzyczkę i fx'y do gierki." :)
      • 10:
         
        CommentAuthorpebe
      • CommentTime20 May 2021 20:05
       
      @Mono: Rację masz :D Nad skrótami klawiszowymi na pewno pomyślę. Kwestia pomocy pod HELP to intuicyjna sprawa - mam już pomysł, jak zrobić przyjemnego helpa :D

      @sun: Trochę Cię poniosło z GA i Alexa hahaha, ale... nie jest to nie wykonalne, zwłaszcza jeśli chodzi o sterowanie głosowe XD
      Zwłaszcza "skrobnij mi tu fx'y do gierki." hahaha, dobre.
      • 11:
         
        CommentAuthorpebe
      • CommentTime21 May 2021 10:05 zmieniony
       
      Usunąłem trochę błędów, które pojawiły się po aktualizacji MADzi. Jednak na chwilę obecną nie przybyła żadna funkcjonalność.

      Zastanawiam się, jak rozwiązać skróty klawiszowe, przy obecnej konstrukcji programu. Mam pewien pomysł, jednak nie wiem czy wypali. Znajdę chwilkę czasu to podumam nad tym.

      Jestem w niewielkim stresie, bo mam dziś spotkanie, które może dużo zmienić. Trzymajcie kciuki. :)
      • 12:
         
        CommentAuthorjhusak
      • CommentTime21 May 2021 15:05
       
      @pebe. Ja trzymam! OBA.
      • 13:
         
        CommentAuthorpebe
      • CommentTime21 May 2021 15:05
       
      @jhusak: Dzięki. Przydało się wsparcie kciuków OBU :D Czekam na podpisanie umowy przez zleceniobiorcę i będę działał. A na razie, wracam do świata ATARI :D

      Powered by 6502 :)
      • 14:
         
        CommentAuthorjhusak
      • CommentTime21 May 2021 16:05
       
      Super! A tak przy okazji, jakiego typu błędy pojawiają się/mogą się pojawić po aktualizacji MadPascala?
      • 15:
         
        CommentAuthorpebe
      • CommentTime21 May 2021 18:05
       
      @jhusak: Ja to w ogóle trochę źle dokonałem aktualizację, ale:

      - array[0..0] of byte, nie przyjmuje jako parametr w funkcji/procedurze, trzeba stworzyć typ, np:
      type
      byteArray=array[0..0] of byte;

      procedure myProc(mem:byteArray);
      procedure myProc(var mem:byteArray);

      - był błąd w funkcji HALT(param) (tego sam wyłapałem)
      - ja nie zaktualizowałem procedur assemblerowych i wywalało mi błąd przy przypisywaniu do zmiennej tekstowej, innej zmiennej tekstowej;
      - i kilka innych...


      generalnie jest tylko lepiej :)
      • 16:
         
        CommentAuthorjhusak
      • CommentTime21 May 2021 19:05
       
      Troszku tego jest...
      • 17:
         
        CommentAuthorpebe
      • CommentTime21 May 2021 20:05 zmieniony
       
      @jhusak: e.. rzuć okiem na listę zmian w repo releases... ja na prawdę o wszystkim nie wiem :D
      Ale więcej jest zmian związanych z optymalizacją i zmianami w bibliotekach, niż z błędami jako takimi (a przynajmniej o tym nie piszą :P)

      ->link<-
      • 18:
         
        CommentAuthorKaz
      • CommentTime22 May 2021 14:05
       
      Offtop, ale związany z autorem wątku - PeBe ma dziś urodziny. Sto lat chłopie, obyś nam obrodził dużą liczbą programów i gier :D
      • 19: CommentAuthormono
      • CommentTime22 May 2021 15:05
       
      Sto? $100 lat!
      • 20:
         
        CommentAuthorpebe
      • CommentTime22 May 2021 16:05
       
      Z góry Wszystkim dziękuję za życzenia i te hexadecymalne i binarne, jak i dziesiętne :D

      @Kaz: Nie ważne ile, byle by były skończone hahaha... XD
      @Mono: Właśnie, Bocianu mi życzył $FF :D:D:D Bomba pomysł - rozbawił mnie.
      • 21:
         
        CommentAuthorpebe
      • CommentTime23 May 2021 21:05 zmieniony
       
      Co się dzieje z SFX Trakcerem (Music Makerem) ?

      A więc. @jhusak, powiedział, że:
      Na razie projekt jest fazie zmian, poprawek, zmian koncepcji, optymalizacji etcetera.


      I miał jak najbardziej rację.

      Ciągle się coś zmienia, przybywa, ubywa (jak wody we Włodawie :D - chyba tak to mówiono?)

      Doszedłem do wniosku, że "wyekstrachuje" edytor tematów do osobnego programu - nie jest on nie zbędny w głównym programie, choć fajna to funkcjonalność.
      Pozostawiłem możliwość wyboru, wczytania i ustawienia domyślnego tematu. Ostatnia opcja, zapisuje w napędzie D:DEFAULT.THM aktualny zestaw schematów, wraz z wybranym tematem (zastosowanym) kolorystycznym - jest kilka nowych.

      To dało trochę pamięci - której, tak bardzo mi brakuje, by wdrożyć wszystko co zaplanowałem.

      Jednak, bardzo się obawiam tego, że nie które opcje nie będą tak rozbudowane, jak bym sobie życzył :/

      Będę pracował nad tym, by w definicji SFX, też była lista dostępny "funkcji" (jak w edycji TABsów, pod klawiszem RETURN)
      To rozwiązanie, jest nie tylko estetyczne, ale i pozwala wyeliminować klawisze skrótu, jak i (przede wszystkim) domysły, jak to działa - tworzyć wielką pomoc, tylko po to, by wytłumaczyć jak tworzyć zapętlenia SFXów(?), trochę mija się z celem, a fizycznie, wcale to tak prosto nie wygląda.

      Myślę, nad wdrożeniem funkcjonalności kopiuj/wklej, by łatwo powielać/przenosić SFXy/TABy.
      Także, zastanawiam się nad sensem wprowadzania możliwości zapisu "jednostkowego" dla SFXów/TABów - być może ograniczę się tylko do SFXów, bardziej praktyczne jest zapisanie definicji dźwięku, niż nut :)

      Generalnie, dużo błędów usunąłem w obecnej wersji, a funkcjonalności przybyło "jak na lekarstwo". Dzięki wyzbyciu się edytora tematów, zyskałem miejsce, jednak...
      "Nie wiedzieć czemu", dość szybko znika :P Wygodny jest MAD Pascal, jednak to nie to samo co Assembler, gdzie ma się wpływ na każdy aspekt programu.

      Dużo pracy przede mną. Jeśli znalazła się jakaś osoba, która pomyślała (jak ja), że to prosty projekt - to jest w błędzie (nie ma to jak samo-doświadczenie trudu)
      Jednak wiem, że jeśli pojawią się schody, będę mógł liczyć na Waszą pomoc - jeśli się mylę, napiszcie.

      Pozdrawiam i życzę udanego, nowego tygodnia.
      Potraktujcie poniedziałek, jak kolejny dzień - nie początek tygodnia, a lepiej go przeżyjecie.

      Do usłyszenia za jakiś czas.
      PeBe.

      PS. Na pocieszenie XEX, z najnowszej wersji SFXMM (może zawierać błędy)
      • 22:
         
        CommentAuthorpebe
      • CommentTime24 May 2021 00:05
       
      Czy ktoś widział to?

      ->link<-

      Właśnie dostałem cynk i jestem nieco zaniepokojony.
      Nie chciałbym być oskarżony o kradzież pomysłu.

      Z punktu widzenia dyplomacji, wystosowałem maila i czekam na odpowiedź.
      • 23: CommentAuthorpin
      • CommentTime24 May 2021 00:05
       
      kompletnie się tym nie przejmuj.
      • 24:
         
        CommentAuthorjhusak
      • CommentTime24 May 2021 09:05
       
      To są dwie róóóóóżne rzeczy z podobną nazwą.
      • 25:
         
        CommentAuthorpebe
      • CommentTime24 May 2021 09:05 zmieniony
       
      Tak.

      Zdziwiłem się, gdyż napisała do mnie wczoraj osoba, pokazując mi link do tematu na forum atari.org. nie ukrywam, że w pierwszej chwili podniosło mi się ciśnienie (a jeszcze świętowałem urodziny) Nie chciała źle - prewencja przed potencjalną gównoburzą :D

      Jednak... Już wszystko wiem. Nawiązałem kontakt z XXLem i z pełnią gracji i wyszukanej dyplomacji, wszystko sobie wyjaśniliśmy. :D
      • 26:
         
        CommentAuthorpebe
      • CommentTime24 May 2021 11:05 zmieniony
       
      Postanowiłem, że przedstawię Wam swój najświeższy pomysł.

      Jest on wdrożeniem inspiracji @marok, która pozwala na ustalenie dla pojedynczego SFXa w jaki sposób, będzie brana pod uwagę wartość MOD/VAL

      Obrałem ten kierunek i utworzyłem (wstępnie) definicje czterech trybów:

      0 - HFD - High Frequency Divider
      1 - MFD - Middle Frequency Divider
      2 - LFD/NLM - Low Frequency Divider/Note Level Modulation
      3 - DSD - Direct Set Divider

      Co one oznaczają?

      HFD - High Frequency Divider
      Szerokie spektrum modulacji dzielnika częstotliwości w zakresie +/-127. Pozwala zmieniać relatywnie podstawę dźwięku.
      Nie ma możliwości zapętlenia SFXa
      Pełna zgodność wsteczna z pierwotnym silnikiem SFX

      MFD - Middle Frequency Divider
      Średnie spektrum modulacji.
      Zakres modulacji +/-64 od podstawy dźwięku
      Możliwość zapętlenia SFXa

      LFD - Low Frequency Divider
      Niskie spektrum modulacji.
      Zakres modulacji +/-32 od podstawy dźwięku.
      Możliwość zapętlenia SFXa

      NLM - Note Level Modulation
      Modulacja na poziomie nuty (pół tonów)
      Zakres modulacji +/-32 pół tony w odniesieniu do nuty bazowej (tej umieszczonej w TABie)
      Możliwość zapętlenia SFX

      DSD - Direct Set Divider
      Bezpośrednia wartość dzielnika częstotliwości.
      Zakres od 0 do 255
      Brak możliwości zapętlenia.
      Stała, maksymalna długość SFXa (128 punktów obwiedni)


      Taki mam plan :D

      Ciekawą cechą takiego "rozbicia" możliwości, jest to, że można dostosować wielkość "grajka" do własnych potrzeb.
      Owszem, można wcisnąć pełną funkcjonalność, jednak, jeżeli, ktoś będzie chciał mieć Tylko dźwięki w grze, to sam graje będzie (niezwykle) mały.
      • 27:
         
        CommentAuthorpebe
      • CommentTime25 May 2021 09:05 zmieniony
       
      Ciąg dalszy...

      Co mam na myśli pisząc Frequency Divider oraz modulacje?
      Jak już wielokrotnie pisałem w tym wątku, dzielnik częstotliwości to drugi parametr instrukcji SOUND w Basicu. Jest ona odpowiedzialna za wysokość generowanego przez POKEY dźwięku. Im ta wartość jest większa, tym częstotliwość jest niższa, zgodnie ze wzorem:

      fOut=POKEY_freq/FreqDiv

      fOut - częstotliwość wyjścowa
      POKEY_freq - wartość podstawy częstotliwości pracy POKEYa (danego kanału)
      FreqDiv - wartość dzielnika częstotliwości

      A dlaczego modulacja?
      Wartość dzielnika częstotliwości będzie ulegała zmianom, poprzez parametr MOD/VAL. W większości rodzajów - przedstawione w poście powyżej - modulacja ta odbywa się względnie, tzn. dla wartość bazowej określanej w TAB (niezależnie, czy będzie to nuta, czy też wartość bezpośrednia dzielnika) jej wartość jest zmieniana o wartość parametru MOD/VAL, która może przyjmować wartości dodatnie oraz ujemne. Ostatecznie, wartość wynikowa staje się wartością bazową.

      base_freq=base_freq+MODVal

      Definicje MOD/VAL
      Dla poszczególnych rodzajów modulacji, istnieją różne formy jej zapisu i interpretacji. Najlepiej to przedstawi zapis binarny, gdzie wyraźnie widać, jakie bity odpowiadają za funkcje, a jakie za wartość.

      I tak, dla:

      High Frequency Modulation
      %00000000 - brak modulacji (blank)
      %0xxxxxxx - zwiększenie dzielnika częstotliwości o wartość określoną w bitach 'x'
      %1xxxxxxx - zmniejszenie dzielnika częstotliwości o wartość określoną w bitach 'x'
      %10000000 - koniec definicji SFX (End Of SFX)

      Middle Frequency Modulation
      %00000000 - brak modulacji
      %00xxxxxx - zwiększenie dzielnika częstotliwości o wartość 'x'
      %01xxxxxx - zmniejszenie dzielnika częst. o wartość 'x'
      %1xxxxxxx - skok do pozycji określonej w bitach 'x' (w obrębie SFXa)
      %10000000 - koniec definicji SFX

      Low Frequency Modulation/Note Level Modulation
      %00000000 - brak modulacji
      %000xxxxx - zwiększenie dzielnika częst. o wartość 'x'
      %001xxxxx - zmniejszenie dzielnika częst. o wartość 'x'
      %010xxxxx - podniesienie nuty o 'x' półtonów
      %011xxxxx - obniżenie nuty o 'x' półtonów
      %1xxxxxxx - skok do pozycji określonej w bitach 'x' (w obrębie SFXa)
      %10000000 - koniec definicji SFX

      Direct Set Divider
      %xxxxxxxx - wartość bezpośrednia rejestru dzielnika częstotliwości

      W module edycji SFX, wpisywanie wartości jest "nieco" kłopotliwe, stąd zmiana ich sposobu definiowania.
      Podobnie, jak w module edycji TAB, tak i w SFX, po przejściu do edycji obwiedni, naciskając klawisz RETURN, zostanie otwarta lista dostępnych funkcji MOD/VAL. Po wybraniu jednej z nich, poproszony zostaniesz o podanie wartości. Jej zakres zostanie wyświetlony na ekranie. Po zaakceptowaniu RETURNem, program przetworzy wprowadzone informacje do wartości MOD/VAL.

      Rodzaj modulacji można ustalić wchodząc w OPT->SET MOD MODE i tam wybierać z listy interesujący tryb.

      Taka edycja nie jest najbardziej komfortowa dla bardzo złożonych SFXów, więc zapewne pojawi się program, którym będzie można to czynić w sposób bardziej przystępny wizualnie. Ale na razie, tak będzie.

      Początki takiej edycji przedstawiam w załączonym XEXie.
      • 28: CommentAuthormarok
      • CommentTime25 May 2021 13:05
       
      Ja się potrzebuję wytłumaczyć z tego, że postulowałem większy zakres przy wartościach do modulacji (dostępnych w zapisie).

      W zasadzie to nie wiem, jaka jest 'realna' przydatność takiej możliwości - być może bardzo ograniczona(!). Mnie bardziej chodziło wtedy o uproszczenie samego zapisu, gdy zauważyłem, że jest chyba na to w miarę oczywisty sposób (za cenę pewnego ograniczenia, ale które być może można zaakceptować). A ta dodatkowa swoboda większego zakresu, sama w sobie, to przecież nic złego (nawet jeśli nie byłaby w praktyce wykorzystywana).


      Zastanawiam się, która muzyczka (może jakaś z gry) korzysta z podobnej do Twojej modulacji, a jednocześnie jest na tyle nieskomplikowana (tak to określmy), że nic nie zmienia w zapisie AUDCTL ($d208)?

      Jest na pewno dużo muzyczek, które nie modyfikują AUDCTL (dałyby się wpisać więc nawet w proponowany format), ale też nie korzystają z podobnej techniki modulacji.


      Przedstawione rozwiązanie ma ten niewątpliwy walor, że jest (niemal?) maksymalnie elastyczne przy stosowaniu modulacji. Minusem może być nieco już sporawa (chiciaż nie przesadnie) komplikacja w interpretowaniu danych, co trochę przełoży się na potrzebny kod do obsługi tego (piszesz o możliwości redukcji tego koniecznego kodu, w zależności od faktycznego stosowania określonych tylko opcji tej modulacji - to jednak). Być może da się nad tym jeszcze nieco pomyśleć koncepcyjnie, by wybrać to, co najwartościowsze (potrzebne) w modulacji i jednocześnie celować w uproszczenie zapisów, które pasowałoby chyba najlepiej do ogólnej koncepcji pewnie takiego playera (może "playerka"? - bo jest jakaś szansa, że mógłby być on niedługi i sprawny).


      Co mnie jeszcze zastanawia w przedstawionych szczegółach odnoszących się do założeń.

      - Pętla w def. SFX.

      "Ostatecznie, wartość wynikowa staje się wartością bazową.

      base_freq=base_freq+MODVal
      "

      Pętla nie może się więc odnieść (wrócić) do określonej "w wyliczeniu" w pierwszym przebiegu (zanim zapętliło) wartości "freq" (base_freq), ale odnosi się do wartości aktualnie wyliczonej. Więc aby wrócić do dokładnie takiej samej wartości, jaka była za pierwszym razem (zanim zapętliło) trzeba tak ukształtować zmiany w modulacjach, które są wliczane do pętli, aby przy zsumowaniu dawały zero (były obojętne). Inaczej pętla zadziała za każdym razem inaczej - co (nie powiem) może być zamierzone, ale gdy nie jest, to trzeba by się trzymać takiego właśnie schematu. (Albo wprowadzić gdzieś zapis - obliczyć? - "wartości koregującej", która przywróci "wartość pierwotną" - taka jaka była i ma pozostać także po zapętleniu na pierwszej pozycji pętli).
      • 29:
         
        CommentAuthorpebe
      • CommentTime25 May 2021 14:05 zmieniony
       
      @marok:
      Więc aby wrócić do dokładnie takiej samej wartości, jaka była za pierwszym razem (zanim zapętliło) trzeba tak ukształtować zmiany w modulacjach, które są wliczane do pętli, aby przy zsumowaniu dawały zero


      Dokładnie tak to się kształtuje, jak napisałeś.
      Jeżeli chcesz uzyskać ciągłość, np. vibrato to wartości modulacji muszą być następujące:
      pos:    0  1  2  3  4  5  6  7  8  9
      mod/val 0 -1 1 1 -1 <1

      gdzie <1 to skok do pozycji 1 SFXa


      O ile się nie walnąłem, to właśnie tak powinna wyglądać definicja vibrato w przedziale -1..1 dla wartości bazowej.
      • 30:
         
        CommentAuthorpebe
      • CommentTime26 May 2021 21:05 zmieniony
       
      Nie śpię, bo pracuję ;) nad SFXMM

      Ciężko pracowałem nad tym, aby zwolnić (znowu) pamięć. Udało mi się całkiem sporo, jednak nie obyło się bez strat, a mianowicie:
      - Nie ma CREDITsów
      - Nie ma edytora tematów
      Powyższe prawdopodobnie zrobię jako osobne programy, tak samo jak zaawansowaną edycję SFXów.

      Za to jest, duuuużo poprawek i można zapisywać i odczytywać pliki. Zmienił się sposób edycji SFXów, jednak tylko dla funkcji MOD/VAL. Jutro postaram się przyszykować dokumentacje dla tego modułu.

      Wszystko na bieżąco staram się umieszczać w Projekcie (o tu ->link<- )

      Ap-ropo dokumentacji. Przybyło :) Dziś udało mi się udokumentować TABy i fragment dotyczący funkcji MOD.
      Wszystko dostępne na GitHubie (o tu ->link<- ) w dwóch językach.

      Wpadł mi do głowy niezwykły (choć może bardziej szalony) pomysł. Jednak jest on jak na razie niewykonalny (z poziomu MADzi). Chodzi o podzielenie całego programu na moduły, które byłby doczytywane.
      Wymaga to jednak nowej funkcjonalności MAD Pascala, której jeszcze nie ma.

      To by pozwoliło zrobić naprawdę wypasiony program.

      A tym czasem, XEXik w załączniku.
      • 31: CommentAuthormono
      • CommentTime26 May 2021 23:05
       
      Można próbować skorzystać z XIO 40, ale trzeba pamiętać że nie wszystkie DOS-y go implementują.
      • 32:
         
        CommentAuthorpebe
      • CommentTime27 May 2021 07:05 zmieniony
       
      @mono: nie w tym rzecz, ale dobrze wiedzieć :P

      Chodzi raczej o sposób w jaki MP inicjuje program przed jego uruchomieniem i wrażenia wizualne, m.in. wyłączanie ekranu na czas inicjacji. Czy jest coś więcej w tym procesie, nie wiem, nie wnikałem w temat.
      Po za tym, dla wygody piszącego, brakuje dyrektyw, którymi można by w kodzie źródłowym, określać miejsce (w pamięci ATARI) kompilacji programu.

      Pisałem z @tebe na ten temat, jednak on chciał zaimplementować moduły w pamięci rozszerzonej. To również dobry pomysł, ale jak podkreśliłem mu: to zawęża grono użytkowników.
      Ja zaproponowałem miks funkcji, gdzie, m.in. dyrektywami można by określać sposób funkcjonowania:
      - czy będzie on wczytywany do pamięci XMS
      - czy będzie on wczytywany do pamięci podstawowej

      Dobrym rozwiązaniem też, byłoby wykrywanie, czy użytkownik posiada pamieć XMS i po prostu, wykorzystanie jej do buforowania takiego doczytywania. W efekcie pierwsze użycie modułu zajęłoby czas (bo musiał by go wczytać), ale kolejne użycie to już tylko operacja na pamięci.

      Rozwiązań jest wiele i dobrze by było, jak by konfiguracja była możliwie elastyczna.

      W obecnej sytuacji, nawet jak podzieliłbym program na osobne XEXy, pojawiają się następujące (znane mi) problemy:
      - wyłączanie ekranu w trakcie inicjacji XEXa
      - brak dostępu do zmienny modułu nadrzędnego
      - dublowanie bibliotek

      Generalnie to już pomysł na wersje 2.0 SFXMM.
      • 33:
         
        CommentAuthorjhusak
      • CommentTime27 May 2021 08:05
       
      To nie jest takie trudne do ogarnięcia. Piszesz nadrządcę, który uruchamia moduły, a jest cały czas obecny w pamięci. Dodatkowo w stałym miejscu ustawiasz potrzebne zmienne globalne i już. Przejście do innego modułu to ustawienie zmiennej i powrót z modułu.
      • 34:
         
        CommentAuthorpebe
      • CommentTime27 May 2021 09:05 zmieniony
       
      @jhusak: owszem, masz rację, jednak w obecnej fazie, to spore obciążenie - związane z czasem przeprojektowania programu.

      6 maja projekt pojawił się na forum, a mamy 27 maja. To 21 dni pracy nad programem który nadal nie gra :(
      Mimo iż mam 100% wolnego czasu, nie idzie mi to tak sprawnie, jak zakładałem i borykam się z ciągłą optymalizacją i brakiem miejsca.
      To nie czas na taką modyfikację, ale pomysł jest zacny :D

      Dodatkowo w stałym miejscu ustawiasz potrzebne zmienne globalne i już

      Tak. Większość danych mam albo w RAMie pod ROMem (cała sterta - HEAP), albo poprzez "absolute" do tablic/zmiennych, także ta część jest już ustandaryzowana. Rzuć okiem na pliki:
      - mapa pamięci SFXMM - ->link<-
      - inicjacja zmiennych globalnych SFXMM - ->link<-
      - zasoby SFXMM - ->link<-

      Samo podejście do "modułowości" można rozwiązać na wiele sposobów, jednak, jeżeli będzie takie rozwiązanie na poziomie kompilatora, to warto poczekać.
      • 35:
         
        CommentAuthorpebe
      • CommentTime27 May 2021 21:05
       
      Mam pytanie odnośnie Assemblera.

      Znalazłem takie zestawienie rozkazów rodziny 6502 ->link<-

      Obok OPCode są dwie cyfry. Wiem, że to ilość cykli, jednak nie bardzo mogę się domyślić, która odpowiada za co.

      Ktoś pomoże?
      • 36:
         
        CommentAuthorjhusak
      • CommentTime27 May 2021 22:05 zmieniony
       
      Strasznie nieczytelna ta tabela. Pierwsza liczba to liczba bajtów rozkazu+operand, druga to ilość cykli.
      Ta tabela jest czytelniejsza: ->link<-
      ponadto są tam opisy instrukcji.

      Nieźle żeś natrzaskał tego kodu :)

      A czy w creditsach na głównej stronie projektu na githubie nik stork to niejaki bocianu? :)
      • 37:
         
        CommentAuthorpebe
      • CommentTime28 May 2021 07:05 zmieniony
       
      @jhusak: nieczytelna to fakt i w dodatku z błędami. Nie wiem, czemu się uparłem na nią :P Później znalazłem inne zestawienie, ale Twoje jest ładniejsze :D

      Tak jakoś wyszło z tym kodem :)

      Ale heca z nickiem bocianu XD Rozbawiłem się. Poprawiłem. Dzięki (jak to się stało? ;) )
      • 38:
         
        CommentAuthorjhusak
      • CommentTime28 May 2021 08:05
       
      Czasem przychodzi taki czas, że trzeba zerknąć na dzieło nowym okiem i przemyśleć wszystko jeszcze raz. Nie bał bym się potencjalnego wywrócenia kodu do góry nogami, jeśli jest na to uzasadnienie.
      • 39:
         
        CommentAuthorpebe
      • CommentTime28 May 2021 09:05 zmieniony
       
      Zerknę nowym okiem, owszem :D chcę ukończyć dzieło w tej postaci co jest. A i tak (na 99%) będę jeszcze zmieniał, bo coś czuje, że mi braknie pamięci :/

      Właśnie siedzę nad nową wersją SFX-Engine (stara jest w Krecie). Ani pół razu jej nie sprawdziłem (póki co) W głowie działa, ale czy w rzeczywistości też będzie działać? Nie wiem.

      Jestem na etapie wdrażania modulacji, a dokładniej nad najbardziej skomplikowaną jej wersją, tj. LFM/NVM (Low Freq Mod/Note Value Mod)

      Śmieszne, bo kod (póki co) się kompiluje :P

      Wrzucę na Gita ->link<- , Możesz zobaczyć (jeśli Cię interesuje) jak mi idzie.
      • 40:
         
        CommentAuthorpebe
      • CommentTime28 May 2021 15:05
       
      Do znawców i hardcorowców świata 8-bit :D

      Jak myślicie? Będzie działać? ->link<-

      XD jeszcze nie testowany - coś ugotowałem, ale jeszcze nie wiem jak smakuje... hahahaha
      • 41:
         
        CommentAuthorjhusak
      • CommentTime28 May 2021 18:05
       
      niedługie toto, dobrze. Oby działało :)
      • 42:
         
        CommentAuthorpebe
      • CommentTime28 May 2021 19:05
       
      @jhusak: smutna wieść, to tylko SFX, bez track-playera :(

      Za grajka, jeszcze nie wiem jak się zabrać :/ chodzi mi o logikę. Ale spokojnie, ja już coś wymyślę :)
      • 43:
         
        CommentAuthorpebe
      • CommentTime28 May 2021 19:05
       
      PS. Nie blokuje (50% sukcesu). Gra, ale trzeszczy (15%) nie gra tego co powinien. 0 sukcesu, bo gra choć nie powinien.
      • 44:
         
        CommentAuthorpebe
      • CommentTime28 May 2021 21:05 zmieniony
       
      Jestem podłamany.

      Raz, że mi brakuje pamięci :/
      436 bajtów wolnych (załamka)

      Dwa, przekombinowałem :/
      SFXId to offset tablicy. Offset w tablicy to wskaźnik do HEAP. Wskaźnik to offset w HEAP. HEAP to tablica...

      Kiedy ja na to k#a wpadłem (?)

      Trzy... ehh... szkoda pisać.

      Nie wiem, co z tego będzie. Muszę przemyśleć kod na nowo, zwłaszcza obsługę sterty, bo tu mam najwięcej "kaszany".

      Błagam, rzućcie coś motywującego, bo mam ochotę walnąć tym wszystkim i wyjechać w Karpaty...

      Mam tendencje do przerostu formy nad treścią i dlatego (przeważnie) potrzebuje nadzoru, bo bez tego, tak się to kończy - Dołem, Stratą czasu i dołem.
      • 45:
         
        CommentAuthorsun
      • CommentTime28 May 2021 22:05
       
      Czasem warto zrobić przerwę i wyjechać w Karpaty.
      • 46: CommentAuthormarok
      • CommentTime28 May 2021 23:05
       
      Pewnie można będzie to wszystko z czasem ogarnąć. Ciężko za pierwszym podejściem napisać coś, co od razu zadziała (to odnośnie tej części od playera w asm). Czasem, a nawet często, zdarzają się jakieś logiczne błędy w założeniach (czasem nieco nawet dla nas samych wstydliwe, toteż dołujące).

      Z mojej perspektywy najpoważniej wygląda sprawa wolnej pamięci, ale w tej sprawie może ktoś znający środowisko MADzi (jak go nazywasz) zdołałby coś konstruktywnego zaproponować. Jednak prawdopodobnie będzie to oznaczało pewne spowolnienie prac, bo nie wszyscy są w stanie nadążyć z tempem, jakie umiesz sam sobie narzucić (tak sobie przynajmniej to wyobrażam - i na konkretną pomoc będziesz może potrzebował trochę poczekać).

      Kod playera warto sobie pomagać teraz pisać w MADzi, uważam, jak to może w czymś pomóc, ponieważ na tym etapie chyba najważniejsza jest niezawodność działania, a później zawsze można będzie do tego wrócić (aby działał "optymalnie" z naszego punktu widzenia - tu też nie ma się co "napinać", bo jeśli się specjalnie w to nie celuje to i nie ma to większego sensu).


      Nie wiem. Może niektóre sugestie (choćby moje) odnoszące się do możliwie korzystnej postaci playera sprowokowały trochę tą sytuację i wpłynęły na zmianę planów (kolejności zajęć). W sumie, jak zacząłeś od ogólnej postaci programu, wystroju, obsługi, mając raczej ogólny zarys tego, co chcesz uzyskać od strony playera, ale jeszcze nie do końca może zdefiniowany, to teraz wkraczając mocniej w ten obszar i pracując nad samym playerem, zderzyłeś się z trudnościami, których się akurat nie spodziewałeś doświadczyć (to się oczywiście zdarza).

      Ja sądzę, że często jest tak, że w tego typu programach akurat zaczyna się od playera i mocno już ogarniętej ("zamkniętej" na nowe możliwości) struktury danych wymyślonego formatu. Bo to może być najtrudniejszy etap, a przynajmniej taki, gdzie można się potknąć o coś, czego wcześniej się nie przewidziało. Ale że Twój pomysł polegał na czymś w miarę prostym, choć uważam, że wartościowym i potencjalnie użytecznym (można by chyba wiele dawnych utworów z muzyczek na atari przerobić na ten przyszły format), to odwrócenie kolejności jest do pomyślenia i może się tym bardziej udać.
      • 47:
         
        CommentAuthorsun
      • CommentTime29 May 2021 00:05
       
      @marok: wydaje mi się, że 2 ostatnie akapity to trafiłeś w punkt, tzn.
      - zaczyna się od interfejsu (łatwiejsza rzecz) i dochodzi się do ściany chcąc uzyskać efekt, którym w tym przypadku jest player sfx.
      - faktycznie kolejność przeważnie jest taka jak piszesz. Ja często robię jakieś fragmenty kodu (nie koniecznie piszę teraz o Atari), którymi badam czy "to się uda" i dopiero jak jestem zadowolony z tych wprawek działam dalej, Wtedy zasadniczo jest już z górki.

      Ale... każdy jest indywidualny i to jest najciekawsze, bo w zasadzie nie jest ważne to od której strony się zaczyna a to, jak to mówił klasyk, jak się kończy :)
      • 48: CommentAuthormarok
      • CommentTime29 May 2021 08:05
       
      @sun: ok, dzięx.


      bezpośredni błąd (txa niweluje lda) pod:

      getChannelFreq
      lda SFX_CHANNELS_ADDR+_chnFreq,x // get current channel frequency
      setPokey
      txa
      lsr @
      tax

      sta audf,x // store direct to POKEY register




      ta sekwencja..:

      next_channel
      txa // shift offset to next channel
      adc #8 // 8 bytes per channel
      cmp #$20 // is it last channel?
      beq endtick // yes, end tick

      ...oznacza, że operacje doprowadzające rej.X do właściwej postaci (w jedną i drugą stronę), czyli:

      setPokey
      txa
      lsr @
      tax
      ...
      txa
      asl @
      tax

      mogą nie mieć nadanego im sensu

      jeśli normalnie w rej.X w zapisie %---xx--- x to bity określające docelowy kanał pokeya, to nie jedno lsr @ tu wystarczy, a chyba dwa (z uwagi na %xx- )

      przy czym mamy tu ten problem z zamazaniem wartości w rej. A, który nie znika (i trzeba by inaczej to rozpisać)
      • 49:
         
        CommentAuthorpebe
      • CommentTime29 May 2021 08:05 zmieniony
       
      @marok: Nie trudno przyznać Ci rację.

      Już tak mam, że wygląd się dla mnie liczy bardzo i często skupiam się mocno na tym, aby wszystko było perfekcyjnie dograne pod tym kątem.

      Owszem, zostawiłem sobie najtrudniejszą część na sam koniec, jednak nie przypuszczałem, że będę się liczył z tak małą ilością miejsca, która nawet nie pozwoli mi na "debugowanie" w locie pewnych kwestii - nie mówię tu o analizie kodu np. pod Altirrą.

      Co do Twojej ostatniej wypowiedzi dt. kodu ASM.
      Tak. Wyłapałem ten błąd wczoraj, jednak nie aktualizowałem kodu na GitHubie, jednak, jestem wdzięczny za poświęcenie czasu na analizę tego kodu. Trudno powiedzieć ile jeszcze błędów tam jest. Pisałem to mając non stop "reklamy" (w postaci, to obiad, to ktoś wlazł do pokoju, to coś tam innego...) Trudno było się skupić, jednocześnie analizowałem kod na sucho, instrukcja po instrukcji wielokrotnie, by ogarnąć co się dzieje.

      Na chwilę obecną staram się przerobić kod główny programu, gdyż nie tylko wymienione przeze mnie wcześniej rzeczy są problemem. Gdzieś straciłem kontrolę nad danymi.

      Nie inicjuje mi prawidłowo tablic i pokazuje śmieci.
      Chcę się też pozbyć biblioteki HEAP w całości, gdyż niepotrzebnie dubluje mi dane, co w efekcie prowadzi do zawiłości dostępu do danych.

      @sun: żeby nie było. Twoje posty są równie istotne, co innych i podzielam Twoje zdanie, co do wypowiedzi do @marok.
      • 50:
         
        CommentAuthorjhusak
      • CommentTime29 May 2021 12:05 zmieniony
       
      Też myślę, że przemyślenie i usunięcie tego heapa na korzyść jakiejś liniowej struktury, która będzie najwyżej raz na jakiś czas przepisywać ten kilobajt czy dwa, to dobra droga.

      Tak. Programowanie na 8-bit to sztuka kompromisu i wyczucia.