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
     
    Hej,

    Czy ktos ma gotowe rozwiazanie aby odtwarzac muzyke z RMT oraz CMC we wlasnym programie w Action? Help
    • 2:
       
      CommentAuthorlarek
    • CommentTime26 Jul 2012
     
    Pewnie TDC :)
    • 3:
       
      CommentAuthorjhusak
    • CommentTime26 Jul 2012 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
     
    eee...Jakub a pokusilbys sie o kompletne zrodlo w Action wraz z dowolnym kawalkiem RMT zebym mogl to zrozumiec?
    • 5:
       
      CommentAuthorjhusak
    • CommentTime26 Jul 2012
     
    Coś wyklepię.
    • 6:
       
      CommentAuthorinsert
    • CommentTime26 Jul 2012
     
    Dziekuje! :) czekam z niecierpliwoscia
    • 7:
       
      CommentAuthorjhusak
    • CommentTime26 Jul 2012 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
     
    Jakub, a dolaczylbys wszystkie potrzebne pliki etc? chodzi mi o kompletne zrodlo razem z wladowanym plikiem RMT
    • 9:
       
      CommentAuthorjhusak
    • CommentTime27 Jul 2012
     
    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 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
     
    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
     
    dawaj, tdc, dawaj :)
    • 13:
       
      CommentAuthortdc
    • CommentTime31 Jul 2012 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
     
    Tdc. dzieki :) Ale ja nalegam na publikacje jak uzywac tego RMT :))))
    • 15:
       
      CommentAuthorjhusak
    • CommentTime31 Jul 2012
     
    @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
     
    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
     
    insert pierwszy raz słyszę że RMT to zagadnienie mocno sprzętowe ;)
    • 18:
       
      CommentAuthorinsert
    • CommentTime31 Jul 2012
     
    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
     
    Bedzie, bedzie. Ale poczekaj parę dni.
    • 20:
       
      CommentAuthorinsert
    • CommentTime31 Jul 2012
     
    Dziekuje :)
    • 21:
       
      CommentAuthorinsert
    • CommentTime31 Jul 2012
     
    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
     
    H6 = z konwersją crlf
    H1 = bez konwersji

    Spójrz na komendę wywołanie DOS i wszystko jasne :)
    • 23:
       
      CommentAuthorinsert
    • CommentTime31 Jul 2012
     
    bingo :) ale wywalke emluca mam po zakonczeniu programu :))) czemu? ;PPP
    • 24:
       
      CommentAuthorjhusak
    • CommentTime31 Jul 2012 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
     
    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
     
    No jak już robić to dobrze i ładnie, a ja teraz niestety odpadam.