atarionline.pl Mad Pascal RMT kilka muzyczek - 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: CommentAuthorMq
    • CommentTime16 Nov 2020 zmieniony
     
    Jest taka koncepcja. Chcę mieć w programie (grze) kilka muzyczek RMT, ale każdą osobno. Wiem, że można kilka muzyczek zrobić w jednym pliku RMT i potem grać odpowiednią, ale ja tak właśnie nie chcę, tylko chcę mieć osobne muzyczki i dajmy na to mieć trzy osobne, bo następnie te nieużywane będą spakowane, żeby nie zajmowały miejsca jak nie są potrzebne, albo nawet np. muzyczki niepotrzebne już będą kasowane z pamięci zwalniając miejsce na inne rzeczy.
    I teraz tak: mam jeden player do RMT, i jeden plik *.feat zawierający wszystkie feature'y których używają muzyczki.
    Zacząłem od dwóch muzyczek i wrzuciłem jedną pod adres $7000, a drugą pod $A000. I robię tak:
    - wyłączam przerwanie vbi
    msx.modul:=pointer(modul1);
    msx.init(0);
    - włączam vbi, a w nim mam msx.play

    I gra mi pierwsza muzyczka od początku i jest ok.

    I teraz program czeka sobie na naciśnięcie klawisza, wtedy ma się przełączyć na drugą muzyczkę.

    - robię msx.stop
    - wyłączam przerwanie vbi
    msx.modul:=pointer(modul2);
    msx.init(0);
    - włączam vbi, a w nim mam msx.play

    I gra mi druga muzyczka i jest też wszystko ok.

    Problem zaczyna się jak chcę znowu wrócić do pierwszej muzyczki.
    - robię msx.stop
    - wyłączam przerwanie vbi
    msx.modul:=pointer(modul1);
    msx.init(0);
    - włączam vbi, a w nim mam msx.play

    Muzyczka startuje, ale za chwilę ma pomieszane patterny i gra nie po kolei, włącznie z tym, że ma na różnych kanałach różne patterny z różnych fragmentów muzyczki. Słowem jakiś bajzel, ale nie wiem dlaczego.

    Czy moja koncepcja jest poprawna i powinno to tak zadziałać, czy może powinienem coś jeszcze dodatkowo zrobić, żeby zresetować się poprawnie do innej muzyczki?

    Edit: fałszywy alarm. Powyższy opis zostawiam jako gotową receptę, rzecz działa całkowicie poprawnie. Coś mi zaświtało w głowie, żeby odpalić debugera i zajrzeć co się dzieje w pamięci i okazało się, że coś mi nadpisuje jedną z muzyczek. Ja to testuję w grze: pierwsza muzyczka ma grać na stronie tytułowej, a druga w grze i tu jest ok. Natomiast po gameover i powrocie do strony tytułowej coś nadpisuje kilka pierwszych bajtów muzyczki i dlatego się sypie. Zmieniłem adresy na inne wolne i już jest ok, wszystko działa poprawnie. To nadpisywanie, to bez związku z samymi procedurami zmiany muzyczek, przed tą muzyczką mam obszar PMG, który czyszczę i pewnie za dużo czyszczę, albo coś pomieszałem z adresami.

    W każdym razie fałszywy alarm i można robić bez problemu tak jak napisałem. Docelowo ma być tak, że w grze będzie jeden player na stałe, bo ciągle używany, ale będzie kilka muzyczek i wszystkie będą spakowane, a w danej chwili tylko jedna będzie wypakowywana zawsze pod ten sam adres i player będzie grał po prostu to co dostanie.
    • 2: CommentAuthormuffy
    • CommentTime16 Nov 2020
     
    A player (napisałeś, że jest jeden) nie miał przypadkiem wymogu aby muza była w konkretnym miejscu w pamięci (nie pamietam już jak to leciało)?
    Ja to bym spakowane dane wrzucał w jeden obszar (tak zrobiłem w 07) ale ja to maszynowiec jestem więc nie słuchaj ;)
    • 3: CommentAuthorMq
    • CommentTime16 Nov 2020 zmieniony
     
    @muffy: dzięki za szybką odpowiedź, właśnie napisałem dokładnie to samo powyżej w wyedytowanym poście:-) Mój błąd był.

    A player nie ma wymogu, żeby muza była w jednym miejscu. Spokojnie można relokować dowolnie muzyczki, ale robię to tylko dla testu, bo docelowo i tak lepiej jest mieć w jednym miejscu muzyczki, będę się starał robić muzyczki o podobnych objętościach i będą miały założony obszar w pamięci.
    • 4: CommentAuthormuffy
    • CommentTime16 Nov 2020
     
    A nie za maco :)
    Czyli wnioskuję z tego co napisałeś, że program w pewien sposób sam sobie pisał muzykę do odtworzenia w real time :D
    • 5: CommentAuthorMq
    • CommentTime16 Nov 2020
     
    Tak:-) Już poprawiłem. W Dude Story mam gracza i ponieważ skacze do góry i na dół, to poza widoczną postacią na górze i na dole zapisuję kilka bajtów zerowych, żeby zamazywać to co przesuwam się w górę i w dół. Na samym dole jak była postać gracza, to również za nią dopisywałem te zera dalej. Pamięć PMG kończy mi się na $9FFF, a dotychczas adresy od $A000 miałem niewykorzystywane, więc tego błędu nie zauważyłem i nie przeszkadzało, że kilka zer się zapisywało poza obszarem PMG. Teraz wrzuciłem muzyczkę od $A000 właśnie, a że wcześniej tego nigdy nie robiłem z tymi muzyczkami, to nie wiedziałem czy to zadziała zgodnie z moim planem, więc pierwsze podejrzenie było, że coś nie tak robię z muzyczką, a dopiero jak zajrzałem w pamięć, to się zdziwiłem, że się kilka bajtów nadpisuje zerami. To wystarczyło, żeby muzyczka co prawda grała, ale jakiś bajzel robiła z kolejnością patternów.