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.
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 ;)
@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.
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.