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
|