atarionline.pl CMC i Advan Basic - Forum Atarum

    Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

    • :
    • :

    Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

    1.  
      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ł?

      Pozdrawiam!
      • 2: CommentAuthorpigula
      • CommentTime21 Feb 2021 13:02
       
      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.
    2.  
      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!
      • 4: CommentAuthorpigula
      • CommentTime21 Feb 2021 17:02
       
      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.
    3.  
      Dzięki!
      Teraz jasne, tylko niestety w advan basicu nie ma funkcji USR :-(
      • 6:
         
        CommentAuthorKaz
      • CommentTime21 Feb 2021 19:02
       
      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?
    4.  
      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ę :-)
      • 8: CommentAuthorKrzys
      • CommentTime26 Feb 2021 17:02
       
      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.

      Wygląda więc na rabialne. Chyba.
      • 9: CommentAuthormono
      • CommentTime26 Feb 2021 19:02 zmieniony
       
      Z manuala ->link<- str.7 p.8.d:
      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:
      100 MACHINE 200
      110 CODE "LDAIM,70,LDXIM,<LSB moduł>,LDYIM,<MSB moduł>"
      120 CODE "JSR,<LSB player+3>,<MSB player+3>"
      130 CODE "LDAIM,0,LDXIM,<nr muzyczki>"
      140 CODE "JSR,<LSB player+3>,<MSB player+3>"
      150 CODE "LDAIM,7,LDYIM":CODEL(170+"L"):CODE "LDXIM":CODEL(170+"H")
      160 CODE "JMP,5C,E4"
      170 CODE "JSR,<LSB player+6>,<MSB player+6>"
      180 CODE "JMP,62,E4"
      200 ...dalszy ciąg programu

      a odłączyć czymś w rodzaju:
      100 MACHINE 200
      110 CODE "LDAIM,40"
      120 CODE "JSR,<LSB player+3>,<MSB player+3>"
      130 CODE "LDAIM,7,LDYIM,62,LDXIM,E4"
      140 CODE "JMP,5C,E4"
      200 ...dalszy ciąg programu

      Ewentualnie zasymulować wywołanie funkcji USR AtariBASIC-a.
      Inicjalizacja odegrania muzyki
      X=USR(player, nr muzyczki, moduł)
      to byłoby coś w rodzaju:
      100 MACHINE 200
      110 CODE "LDAIM,<LSB moduł>,PHA,LDAIM,<MSB moduł>,PHA"
      120 CODE "LDAIM,<nr muzyczki>,PHA,LDAIM,0,PHA"
      130 CODE "LDAIM,2,PHA"
      140 CODE "JMP,<LSB player>,<MSB player>"
      200 ...dalszy ciąg programu

      a odłączenie czyli
      X=USR(player)
      czymś w rodzaju:
      100 MACHINE 200
      110 CODE "LDAIM,0,PHA"
      120 CODE "JMP,<LSB player>,<MSB player>"
      200 ...dalszy ciąg programu

      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.
      • 10: CommentAuthorMaterion
      • CommentTime5 Mar 2021 18:03 zmieniony
       
      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.