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
     
    @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
     
    Nom... zaktualizowałem MADzie do najnowszej dostępnej i mnie unieruchomiło ;(

    Trzeba czekać.
    • 3:
       
      CommentAuthorsun
    • CommentTime20 May 2021
     
    @pebe: teraz działa.
    • 4:
       
      CommentAuthorjhusak
    • CommentTime20 May 2021 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 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
     
    Spoko, rozumiem podejście "przede wszystkim wygoda użytkownika" aż za dobrze :) Masz całkowitą rację :)
    • 7:
       
      CommentAuthorpebe
    • CommentTime20 May 2021
     
    @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 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
     
    @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
     
    @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 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
     
    @pebe. Ja trzymam! OBA.
    • 13:
       
      CommentAuthorpebe
    • CommentTime21 May 2021
     
    @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
     
    Super! A tak przy okazji, jakiego typu błędy pojawiają się/mogą się pojawić po aktualizacji MadPascala?
    • 15:
       
      CommentAuthorpebe
    • CommentTime21 May 2021
     
    @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
     
    Troszku tego jest...
    • 17:
       
      CommentAuthorpebe
    • CommentTime21 May 2021 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
     
    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
     
    Sto? $100 lat!
    • 20:
       
      CommentAuthorpebe
    • CommentTime22 May 2021
     
    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 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
     
    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
     
    kompletnie się tym nie przejmuj.
    • 24:
       
      CommentAuthorjhusak
    • CommentTime24 May 2021
     
    To są dwie róóóóóżne rzeczy z podobną nazwą.
    • 25:
       
      CommentAuthorpebe
    • CommentTime24 May 2021 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 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 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
     
    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 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 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
     
    Można próbować skorzystać z XIO 40, ale trzeba pamiętać że nie wszystkie DOS-y go implementują.
    • 32:
       
      CommentAuthorpebe
    • CommentTime27 May 2021 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
     
    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 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
     
    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 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 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
     
    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 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
     
    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
     
    niedługie toto, dobrze. Oby działało :)
    • 42:
       
      CommentAuthorpebe
    • CommentTime28 May 2021
     
    @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
     
    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 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
     
    Czasem warto zrobić przerwę i wyjechać w Karpaty.
    • 46: CommentAuthormarok
    • CommentTime28 May 2021
     
    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
     
    @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
     
    @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 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 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.