Trafilem na dziwne zjawisko. Odgrywam prostą melodyjkę + sfx korzystając z oryginalnej procedury asm dołączonej do RMT Rastera. Czyli co ramkę wywołuję: jsr RASTERMUSICTRACKER+3
W demonstracyjnym kodzie sfx.a65 to wywolanie jest robione wewnatrz przerwania VBI. Melodyjka jest prosciutka, wiec na 100% przerwanie sie wyrabia. Mozna tak, mozna poza vbi. W kazdym przypadku gra mi OK.
ALE: jesli wywoluję jsr RASTERMUSICTRACKER+3 w srodku przerwania VBI to Atari wiesza mi sie w momencie wyjścia do DOS'a! Sprawdzilem to dokladnie zarowno na emulcu jak i na real Atari. Nic innego nie zmieniam w kodzie, wiec na pewno wywolanie procedury grajka w przerwaniu VBI jest przyczyną.
Do DOS'a wychodze z petli glownej po nacisnieciu klawisza ESC. Przed wyjsciem wylaczam PMG, wylaczam przerwania, wylaczam dzwiek (jsr RASTERMUSICTRACKER+9), po czym wywołuję: jmp ($000a)
I jak mówiłem: wychodzi do DOS'a elegancko w kazdym przypadku oprócz takiego kiedy wewnątrz VBI wywołuje playera RMT. Wtedy sie wiesza.
Oczywiscie obszedlem problem wywalajac wywolanie playera do petli glownej, ale ciekawi mnie czemu tak sie dzieje?
"wyłączasz skok" to dosc karkołomne wyrazenie ;) Ale chyba kumam o co chodzi. Tyle ze to chyba nie moze byc przyczyna, bo przed wyjsciem do DOS'a wylaczam przerwania: lda #0 sta NMIEN
Wiec od tego momentu moja procka VBI nie powinno sie juz wykonac ani razu.
@tebe - oczywiscie. Samo przerwanie w czasie gry dziala poprawnie i nie powoduje klopotow.
Teoria Jakuba ze DOS wlacza sobie przerwanie VBI nie ustawiajac wczesniej wektora wydaje mi sie mocno wątpliwa. W kazdym razie takie dzialanie jest nieodpowiedzialne :P
Bylem na zlocie wiec nie mialem czasu na eksperymenty, ale dzis sprawdze wszystko jeszcze raz. Sprobuje min. przywracac przed wysjciem do dos'a oryginalny wektor procedury.
BTW. Na Grzybsoniadzie omawialem ten problem z doswiadczonymi programistami i dowiedzialem sie min ze aby wrocic do DOS'a powinienem zrobic zwykly rts a nie jmp ($000a). Tez sprawdze jaki bedzie skutek. No i skoro na emulcu tez sie wiesza to polecono mi zrobic trace tego bledu.
Zrobilem dalsze testy. Faktycznie, jesli najpierw odtworzę oryginalny wektor przerwania ($e45f) i wychodze przez rts, to poprawnie wraca do DOS'a. Temat zamkniety, dzieki za pomoc.