O CMC raz jeszcze...Pierwszą ważną sprawą jest sprostowanie błędu, który został popełniony przez autora artykułu "Chaos Music Composer - to wcale nie jest trudne" (TA 8/92). Napisał on: "...wybierz najwyższą oktawę (CONTROL + GÓRA) i naciśnij klawisz P.". Niestety, po naciśnięciu tego klawisza nic się nie dzieje, ponieważ najwyższa oktawa kończy się na klawiszu "O" i oczywiście ten klawisz powinien być wciśnięty w celu uzyskania brzmienia werbla. W tym samym artykule czytamy: "Wczytaj np. demo BLUEMON...". Autor korzystał ze stacji dysków, więc podanie nazwy pliku demonstracyjnego do załadowania wydało mu się sprawą oczywistą. Zapomniał jednak o użytkownikach magnetofonu, którzy mogą nie wiedzieć, o jakim pliku mowa. Pokrótce przedstawię jego charakterystyczne cechy. Okno song wygląda następująco:
00: -- 01 -- Drugą dość istotną sprawą jest wykorzystanie skomponowanej muzyki we własnym programie. Jeśli chodzi o BASIC, to sprawa wydaje się prosta, gdyż przykładowy program DEMO.BAS teoretycznie zrobi za nas wszystko. Jednak tak nie jest i tu także pojawiły się kłopoty. Napisał do nas autor programu demonstracyjnego, któremu przestawała grać muzyka po wykonaniu instrukcji GRAPHICS 15. Powodem tego był standardowy adres ładowania muzyki, równy $8400. Zaraz za muzyką znajduje się moduł odtwarzający, który jest kasowany przez instrukcję GRAPHICS 15. W efekcie program grający wywołuje procedurę, której już nie ma i po prostu się zawiesza. Aby uniknąć takiej sytuacji, należy w programie CMC przed nagraniem pliku zmienić adres na $7000. Służy do tego kombinacja klawiszy CONTROL i A. Automatycznie ustawi się też adres ładowania modułu odtwarzającego. Trzeba jednak pamiętać o tym, by moduł kończył się przed niebezpiecznym obszarem pamięci (początek tego obszaru zależy od trybu graficznego). Po zgraniu powinno to wszystko działać, należy jednak pamiętać, aby program w BASIC-u nie był zbyt długi, gdyż "nadepnie" na początek naszej muzyki. Najskuteczniejszą metodą uchronienia się przed takim wypadkiem jest ustawienie tzw. memtop poniżej adresu początku muzyki. Wykonujemy to, pisząc w programie POKE 106,112. Ta instrukcja ochroni naszą muzykę przed zniszczeniem przez program BASIC-owy. Jednak ceną za ochronę naszego programu jest zmniejszona ilość wolnej pamięci RAM. Uważam, że po tych uwagach każdy średniozaawansowany użytkownik będzie umiał odgrywać muzykę w dowolnym trybie graficznym BASIC-a. Jeśli chodzi o odgrywanie muzyki z poziomu assemblera, to przedstawię krótki program, który odgrywa muzykę podczas przerwania synchronizacji pionowej vblkd. Polecam jego samodzielną analizę z instrukcją obsługi CMC (str. 17-20) w ręce. * CMC player by MP's * (c) 1992 Tajemnice ATARI opt %10101 setvbl equ $e45c exitvbl equ $e462 vvblkd equ $0224 kbcodes equ $02fc border equ $02c8 vblkd equ $07 *--- adresy w module m_adr equ $xxxx adres modulu s_adr equ $xxxx adres muzyczki m_init equ m_adr+$03 m_tact equ m_adr+$06 voltr1 equ m_adr+$09 voltr2 equ m_adr+$0a voltr3 equ m_adr+$0b *--- komendy dla modulu p_song equ $00 p_atpos equ $10 p_instr equ $20 p_tempo equ $30 p_coda equ $40 p_break equ $50 p_cont equ $60 p_init equ $70 org $480 *--- zachowal stary adres przerwania lda vvblkd sta hlp_w+1 lda vvblka+1 sta hlp_w+2 *--- inicjalizuj lda Marek Pasek
|