Witam, nie mogę nigdzie znaleźć programu w basicu który umożliwia wczytywanie muzyki z CMC. Nazywa się demo.bas, na obrazach dysków z CMC nie ma. Napisałem grę w advan basicu i chciałbym spróbować dołączyć do niej muzykę z CMC. Zakładam, że nie będzie to niestety takie proste - brakuje w tym języku funkcji USR. Może ktoś już wcześniej próbował?
Jeżeli rozważasz kompilacje tak napisanego programu do wersji binarnej... to dość łatwo można sobie z tym poradzić (zapisując plik *.rep oraz CMC i połączyć to w jeden plik np. super packerem... Przykład w załączniku.
Dzięki za pomysł, ale nie mogę uruchomić załączonego pliku. Czy wynika stąd, że nie muszę w programie wywoływać żadnej procedury inicjującej uruchomienie muzyki? Ale w takim razie jak zgrać samą muzykę utworzoną w CMC? Z jakimś loaderem? Przepraszam za te szczegółowe pytania, ale dopiero powracam do Atari stąd nie wszystko jest dla mnie jasne. Będę zobowiązany za bardziej szczegółowe wyjaśnienie. Dzięki!
Musisz nagrać muzyke cmc pod jakimś adresem np. 8000 potem w cmc zapisuje się odtwarzacz jako plik rep (jego adres też można ustawić tak aby nie było konfliktu z muzyką). A w programie w basicu wywołanie robisz tak jak na załączonym zrzucie (oczywiście trzeba ustawić odpowiednie wartości adresów pod siebie). Jeżeli chcesz to sprawdzić z poziomu basica, to plik cmc oraz plik rep musi być już załadowany wcześniej do ramu.
Nie znam Advan Basic-a, ale jakieś mechanizmy tego typu muszą być. Czy masz już za sobą lekturę podręcznika do Advan Basica? Tam widzę coś na stronach 53-55 o uruchamianiu programów maszynowych.
PS. A dlaczego akurat Advan Basic? Turbo Basic XL nie wystarczy?
Jak najbardziej korzystam z podręcznika do Advan Basica. Od niego zacząłem. Ale jestem takim "niedzielnym" programistą, więc język maszynowy jest mi niestety obcy :-( Dlaczego Advan Basic? Pierwszą grę napisałem faktycznie w TB (zresztą miała premierę na atarionline - gra w linie), ale chciałem spróbować czegoś nowego, tym bardziej, że język ten ma całkiem fajne instrukcje do kontroli player-missile. Grę prawie ukończyłem, pozostała kwestia muzyki (oprawa dźwiękowa jest). Jak będzie gotowa, podeślę :-)
W sumie ciekawy temat. Bez assemblera to się chyba nie da. Albo się wpiąć w przerwanie i zainicjować normalnie muzykę, tak jak opisuje to manual do CMC, albo spróbować zasymulować USR. Tylko trzeba wtedy na stos przez PHA wrzucić kolejno dwa bajty adresu powrotnego (funkcja ADR basica dla następnej linii kodu), adres dla CMC, numer utworu i liczbę parametrów (2) (kolejność biorę z głowy :P). I wtedy JMP to adresu odtwarzacza. Wtedy unikamy tematu przerwań, ale nie unikamy assemblera.
The assembly language code can be inserted into a BASIC program. You do not have to worry about where to place the machine language code.
W rozdziale 16. "MACHINE LANGUAGE SUBROUTINES" jest opis jak włączać własny kod assemblerowy do programu w AdvanBASIC-u. Żeby odpalić muzykę z CMC trzeba sobie zainicjalizować przerwanie VBLKD n.p. czymś w rodzaju:
Kod pisałem z głowy, bo nie znam tego narzecza więc sprawdź 5 razy jak będziesz implementował :)
Edit: Pomyliłem CODEL z LCODE.
Edit 2: Ponieważ AdvanBASIC skompiluje Ci gotowy kod, to jak zapiszesz plik wynikowy .COD zawierający skompilowany kod gry to dołącz do niego plik .REP i plik .CMC zgrany z CMC i zapisz wynik w pliku .COM. W samym programie nie należy plików .REP i .CMC ładować jak to się działo w AtariBASIC-u.
Polecam z Basicow zainteresowac sie Fast Basic. Szybszy niz Turbo Basic XL i tez ma wbudowane funkcje do kontroli Player/Missile i nawet prostych DLI ! Trochę sie nim bawiłem i jest na prawdę spoko :). Jednak postanowiłem rzucić Basica i skoczyć w Action! i póki co jest mi z nim dobrze :D.
Edit
Z tego co widzę to Fast Basic ma funkcję USR do uruchamiania kodu maszynowego spod adresu
USR(address[,num1 ... ]): Low level function that calls the user supplied machine code subroutine at address.