atarionline.pl Action! i RMT, CMC - 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:
         
        CommentAuthorinsert
      • CommentTime26 Jul 2012 13:07
       
      Hej,

      Czy ktos ma gotowe rozwiazanie aby odtwarzac muzyke z RMT oraz CMC we wlasnym programie w Action? Help
      • 2:
         
        CommentAuthorlarek
      • CommentTime26 Jul 2012 14:07
       
      Pewnie TDC :)
      • 3:
         
        CommentAuthorjhusak
      • CommentTime26 Jul 2012 17:07 zmieniony
       
      A ja to pies?

      A tak na poważnie.

      muzyczka RMT gdzie bądź, ona ma wektory "init","play" i jeszcze coś
      piszemy proc musinit=$7000 (na przykład)
      proc play =$7003

      i play trzeba podczepić pod jakiś timer (jest ich 3) w vblank.

      wywołujemy init i gra.

      Jeśli potrzeba coś umieścić w a x y przed wywołaniem procki, to piszemy:

      proc init( byte a byte b byte c)=$7000

      i to załatwia sprawę (acc idzie do a, x do b a y do c)
      -- edit
      acc idzie do a, y do b a x do c

      Reszta jest w necie.
      • 4:
         
        CommentAuthorinsert
      • CommentTime26 Jul 2012 17:07
       
      eee...Jakub a pokusilbys sie o kompletne zrodlo w Action wraz z dowolnym kawalkiem RMT zebym mogl to zrozumiec?
      • 5:
         
        CommentAuthorjhusak
      • CommentTime26 Jul 2012 18:07
       
      Coś wyklepię.
      • 6:
         
        CommentAuthorinsert
      • CommentTime26 Jul 2012 18:07
       
      Dziekuje! :) czekam z niecierpliwoscia
      • 7:
         
        CommentAuthorjhusak
      • CommentTime26 Jul 2012 20:07 zmieniony
       
      Przy założeniu, że procedura play = $7003 a init = $7000. Wyciągane z moich źródeł Crockett's Theme. Nie jest to optymalne, ale ilustracja jest.

      PROC SETVBLK=$E45C(BYTE JAK,MSB,LSB) RETURN
      PROC GRAJ3=$7003
      PROC INIT=$7000

      PROC USTAW()
      BYTE X,Y
      X=GRAJ3
      Y=GRAJ3 RSH 8
      SETVBLK(7,Y,X)
      RETURN


      PROC SKASUJ()
      BYTE X,Y
      X=$62
      Y=$E4
      SETVBLK(7,Y,X)
      RETURN

      PROC NIC()
      BYTE SKCTL=$D20F
      BYTE AUDCTL=$D208
      SKCTL=3
      AUDCTL=0
      INIT()
      USTAW()
      DO
      IF PEEK(53279)=5 THEN START=0 FI
      UNTIL PEEK(53279)=6 OD
      SKASUJ()
      SNDRST()
      RETURN
      • 8:
         
        CommentAuthorinsert
      • CommentTime27 Jul 2012 07:07
       
      Jakub, a dolaczylbys wszystkie potrzebne pliki etc? chodzi mi o kompletne zrodlo razem z wladowanym plikiem RMT
      • 9:
         
        CommentAuthorjhusak
      • CommentTime27 Jul 2012 13:07
       
      To ja piszę program, czy Ty ? :) Niestety, teraz nie za bardzo mam czas, a potem wyjeżdżam.

      Trzeba zadbać o przechowanie a x y podczas procedurki GRAJ3 - nie wiem, pewnie to jest już zrobione. Ponadto RMT używa lokacji na stronie zerowej, trzeba looknąć, czy kolizji z Action nie ma. Poczytaj i się podziel efektami ;)

      Jak nie zrobisz do mojego powrotu, to zobaczymy. Ale polecam spróbować, wierz mi, z mojej strony ilość roboty żeby to uruchomić jest podobna :)
      • 10:
         
        CommentAuthortdc
      • CommentTime30 Jul 2012 01:07 zmieniony
       
      Tak ja mam przykładowe wykorzystania RMT i CMC w Action!

      A najśmieszniejsze z tego jest to, że procedurki do CMC napisał nie kto inny jak Kuba Husak;) I tak używam ich od czasu kiedy dawno temu współpracowaliśmy przy pewnym projekcie;) Ehhh... stare dobre czasy;)

      Insert, napisz do mnie to pogadamy o tym.
      • 11:
         
        CommentAuthorinsert
      • CommentTime30 Jul 2012 07:07
       
      Witaj TDC, a nie lepiej zaprezentowac to tutaj publicznie z opisem co i jak uzywac, dlaczego etc? dla potomności :)
      • 12:
         
        CommentAuthorjhusak
      • CommentTime30 Jul 2012 07:07
       
      dawaj, tdc, dawaj :)
      • 13:
         
        CommentAuthortdc
      • CommentTime31 Jul 2012 00:07 zmieniony
       
      Już daję:

      ;  PLAYER  MUZYCZEK W "CMC"
      ; BY JAKUB HUSAK ÖĹŇ®ÓËĎÍĐŇĹÓĎ×®

      CARD ADRREP,ADRMUS,VVBLKD=$224
      BYTE CON=$D01F,ABC,BCD

      PROC CIO=$E456(BYTE areg,xreg)CARD FUNC Burst(BYTE chan,mode,CARD addr,buflen)TYPE IOCB=[BYTE id,num,cmd,stat
      CARD badr,padr,blen BYTE a1,a2,a3,a4,a5,a6]IOCB POINTER iptr chan==&$07 iptr=$340+(chan LSH 4) iptr.cmd=mode
      iptr.blen=buflen iptr.badr=addr CIO(0,chan LSH 4)
      RETURN(iptr.blen)

      CARD FUNC BGet(BYTE chan CARD addr,len)CARD temp
      temp=Burst(chan,7,addr,len)
      RETURN (temp)

      PROC COMM(BYTE A,X,Y)
      RETURN

      PROC TAKT()
      RETURN

      CARD FUNC DOS(BYTE ARRAY NAME )CARD ST,ND CLOSE(4)OPEN(4,NAME,4,0)BGET(4,@ST,2)IF ST<>$FFFF THEN PRINTE("NO DOS FILE!")
      BREAK() FI DO BGET(4,@ST,2)UNTIL ST<>$FFFF OD BGET(4,@ND,2)BGET(4,ST,ND-ST+1)CLOSE(4)
      RETURN (ST)

      PROC GRAJ()TAKT()[ $4C $E462]
      RETURN

      PROC SETVBLV=$E45C(BYTE A,X,Y)
      PROC SETV(CARD AD)BYTE A,B IF AD<>0 THEN A=AD AND $FF
      B=AD RSH 8 SETVBLV(7,B,A)ELSE SETVBLV(7,$C2,$8A)FI
      RETURN


      ^ to samo dodałem w załączniku.

      Nie ulega wątpliwości że jest to fajnie zrobione i nic tylko z tego korzystać. A robi się to np. tak:

      ;wczytujemy muzykę i player:
      ADRREP=DOS("D:WCITY.REP")
      ADRMUS=DOS("D:WCITY.CMC")
      ; te dwie proc ustawiają zmienne ADRREP i ADRMUS które sa kluczowe dla prawidłowego działania muzyki

      COMM=ADRREP+3 TAKT=ADRREP+6 ABC=ADRMUS AND $FF BCD=ADRMUS RSH 8 COMM($70,ABC,BCD)

      ; inicjowanie odtwarzania:
      COMM(0,0,0)SETV(GRAJ)


      ; ... tu właściwy kod programu


      ; gdy kończymy odważanie muzyki oraz wyłączamy player:
      SETV(0)COMM($40,0,0)

      Warto sobie przeczytać opis do CMC bo player umożliwia jeszcze kilka innych opcji odtwarzania itp. nawet pod pewnymi względami jest lepszy od RMT.
      Robimy to po wydaniu polecenia SETV(GRAJ) poleceniem COMM(...) z różnymi wartościami pierwszego parametru.


      Co do RMT to zrobiłem to sobie po swojemu w actionowym asemblerze więc i nie jest to tak czytelnie, i fajnie przygotowane jak to co przygotował na początku lat 90 Kuba. Bo to właściwie można traktować jak gotową bibliotekę do CMC w Action!
      • 14:
         
        CommentAuthorinsert
      • CommentTime31 Jul 2012 10:07
       
      Tdc. dzieki :) Ale ja nalegam na publikacje jak uzywac tego RMT :))))
      • 15:
         
        CommentAuthorjhusak
      • CommentTime31 Jul 2012 11:07
       
      @insert, żeby coś takiego przygotować, to trzeba jakiś atrykulik machnąć :)
      To nie jest wówczas hop siup, trzeba mieć z pół godzinki :)
      • 16:
         
        CommentAuthorinsert
      • CommentTime31 Jul 2012 14:07
       
      Jakub. no to wlasnie o takie cos blagam Was obu na kolanach, ja jestem totalnie zielony w kwestiach mocno sprzetowych, z czegos takiego mogbym sie sporo nauczyc, ale musze miec to kompletne - tj zrodlo z muzyka RMT i chociaz drobniutki opis co do czego i dlaczego :)
      • 17:
         
        CommentAuthortdc
      • CommentTime31 Jul 2012 15:07
       
      insert pierwszy raz słyszę że RMT to zagadnienie mocno sprzętowe ;)
      • 18:
         
        CommentAuthorinsert
      • CommentTime31 Jul 2012 15:07
       
      TDC. dla mnie jest wiele tematow ktorych nie jestem w stanie zrozumiec, jesli nie dostane gotowego pelnego zrodla z plikiem rtm i malym opisem :(
      • 19:
         
        CommentAuthorjhusak
      • CommentTime31 Jul 2012 15:07
       
      Bedzie, bedzie. Ale poczekaj parę dni.
      • 20:
         
        CommentAuthorinsert
      • CommentTime31 Jul 2012 15:07
       
      Dziekuje :)
      • 21:
         
        CommentAuthorinsert
      • CommentTime31 Jul 2012 16:07
       
      proba uzycia tego playera do cmc konczy sie wywalka emulatora, co robie zle?


      INCLUDE "H6:player_cmc.act"

      PROC KEYPRESS()
      BYTE CH = 764
      DO
      UNTIL CH <> 255
      OD
      RETURN

      PROC MAIN()

      ADRREP=DOS("H6:MUSIC.REP")
      ADRMUS=DOS("H6:KLOSS.CMC")

      COMM=ADRREP+3 TAKT=ADRREP+6 ABC=ADRMUS AND $FF BCD=ADRMUS RSH 8 COMM($70,ABC,BCD)

      COMM(0,0,0)SETV(GRAJ)
      GRAPHICS(12)
      KEYPRESS()

      SETV(0)COMM($40,0,0)

      RETURN
      • 22:
         
        CommentAuthorjhusak
      • CommentTime31 Jul 2012 16:07
       
      H6 = z konwersją crlf
      H1 = bez konwersji

      Spójrz na komendę wywołanie DOS i wszystko jasne :)
      • 23:
         
        CommentAuthorinsert
      • CommentTime31 Jul 2012 16:07
       
      bingo :) ale wywalke emluca mam po zakonczeniu programu :))) czemu? ;PPP
      • 24:
         
        CommentAuthorjhusak
      • CommentTime31 Jul 2012 18:07 zmieniony
       
      Może to jest winny kawałek?:
      SETVBLV(7,$C2,$8A)

      Sprawdź w monitorze (F8) co masz pod adresem $C28A. W standardowym osie jest coś takiego:

      >d c28a

      C28A:68 PLA
      C28B:A8 TAY
      C28C:68 PLA
      C28D:AA TAX
      C28E:68 PLA
      C28F:40 RTI
      • 25:
         
        CommentAuthorinsert
      • CommentTime1 Aug 2012 13:08
       
      No wlasnie TDC, jakbys ubral playera do RMT tak jak ten Jakubowy do CMC to bylo by to super, latwe w uzyciu i dla potomnych :) pliz pliz pliz
      • 26:
         
        CommentAuthortdc
      • CommentTime2 Aug 2012 05:08
       
      No jak już robić to dobrze i ładnie, a ja teraz niestety odpadam.