Autor Wątek: Korzystanie z plików .ay w pasmo  (Przeczytany 12115 razy)

Ice

  • *
  • Wiadomości: 7
  • Miejsce pobytu:
    Kraków
Korzystanie z plików .ay w pasmo
« dnia: 2017.10.30, 13:25:58 »
Czesc,

po ćwierćwieczu wróciłem do zabawy z kodem na zx pewnie jak wielu z was bo jest to dobra metoda na oderwanie sie od prozy życia:-)
I teraz konkretny problem, stworzyłem sobie obsługę przerwań IM2, wszystko ładnie chodzi i kolejny krok to próba odgrywania muzyki na ay poprzez ten mechanizm jednak nie moge sobie poradzic z formatem AY, generalnie przeczytałem juz wiekszosc rzeczy które sa w necie na ten temat i dalej tego jednoznacznie nie rozgryzlem.
Załóżmy że mam plik .ay z muzyką, importuje go do pasmo przez INCBIN, analizator formatu .ay pokazuje mi np że inicjacja playera w pliku ay to $C000 a odgrywanie muzyki to $C005, SP=0000 jednak nie znam adresu w ktory powinienem wgrać .ay do pamieci, jesli to zrobie od $C000 to wiadomo że na poczatku .ay mamy naglowek i ten adres inicjacji musi byc w innym miejscu, rozumiem ze powinienem agrac .ay w taki adres zeby wlasnie w $C000 byl kod inicjujacy, jak to zrobic? skad moza sie dowiedziec jaki jest offset procedury init w pliku.ay

Druga proba to wykorzystanie kodu dla pasmo - Arkos Tracker Player V1.0 ale on potrzebuje danych muzyki w formie surowej i tez mam probem z tym jak te dane uzyskac, probowalem z plikami .stc ale poniewaz robie to po omacku nie znajac dokladniej tych formatow to rowniez zaliczylem porazke:-)

ps:
w obsludze przerwan uzywam rst 56 zeby przerwania nie zawieszały basica, czy to moze miec jakis wplyw na calosc?

tak wyglada obsluga im2:
Interrupt:  DI                         
            PUSH AF                   
            PUSH BC
            PUSH DE
            PUSH HL
            PUSH IX
            EXX
            EX AF,AF'
            PUSH AF
            PUSH BC
            PUSH DE
            PUSH HL
            PUSH IY
            RST 56
            LD HL, $5800
            LD (HL),$CC     ;testowanie poprawnosci dzialania obslugi wyswietlajac atrybut $CC
            CALL atPlay 
            POP IY                   
            POP HL
            POP DE
            POP BC
            POP AF
            EXX
            EX AF,AF'
            POP IX
            POP HL
            POP DE
            POP BC
            POP AF
            EI                       
            RETI                     
            RET

i samo wywolanie:

start: 
      LD    DE,$C000
      CALL  atInit 
      DI
      LD    A,$80
      LD    I,A
      IM    2
      EI
    ret

org $c000   
    INCBIN "/Users/varna/Documents/zx spectrum/assembler/music-intro.stc"
end start

Ma ktos z was doswiadczenie w tych kwestiach i moglby pomoc?
pozdrawiam

silenter

  • *****
  • Wiadomości: 1337
  • Miejsce pobytu:
    Warszawa/Radzymin
Odp: Korzystanie z plików .ay w pasmo
« Odpowiedź #1 dnia: 2017.10.30, 13:43:51 »
Pytaj @Abrimaal - on tu chyba najwięcej wie w kwestii formatu AY.
128k +2 UK issue 1, JS128, FDD3000 in restoration, ZAXON MGT +D, PEAR AmpY, Pear ExEar :), PEAR TI-OF-TTL+FDD35, co to tu robi??? => 2xCDTV&A500

https://soundcloud.com/silenter

https://www.youtube.com/channel/UCKZhL7Lq1zUDDnRDTJKhN4A

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Korzystanie z plików .ay w pasmo
« Odpowiedź #2 dnia: 2017.10.30, 14:06:06 »
Format .ay to nie są muzyczki do wykorzystania we własnym kodzie. To co siedzi w środku to co do zasady dane dla emulatora, które pozwalają odgrać muzyczkę. Oczywiście da się plik pociąć na stosowne kawałki, powrzucać w odpowiedni miejsca w pamięci a potem zainicjować i uruchomić odtwarzanie co ramkę, ale jest to dłubanina i mocno ogranicza pisany program - musisz się dostosować do tego gdzie w pamięci leży muzyka. Efekt jest trochę taki jak w starych demach z muzyczkmi wyciąganymi z gier ;)
Opis formatu można znaleźć w plikach readme do AYMakeR'a.

Właściwa metoda pracy to wciągnięcie źródłowego modułu do odpowiedniego dla niego trackera/compilera, kompilacja danych z ewentualnym dołączeniem kodu playera a następnie użycie tych danych (jeśli był player to tak po prostu, jeśli nie to trzeba go w odpowiednim miejscu dołączyć do naszego kodu). Tak działał oryginalny Sound Tracker, tak działają jak rozumiem współczesne odpowiedniki.

Co do użycia RST 56 w kodzie obsługi IM2 - nie rób tego. Nie ma co prawda fizycznego zakazu, ale wygląda... nieelegancko ;)
Jeśli koniecznie chcesz grać "w tle" dla BASICa to na końcu swojej procedury obsługi IM2 po podniesieniu wszystkich rejestrów zrób JP 56.

No i kończenie kodu dwoma RETami (bo RETI to RET dodatkowo wystawiający na szynę informację, że kończy przerwanie) jest nadmiarowe - drugi RET się po prostu nie wykona ;)

Gryzor

  • *****
  • Wiadomości: 2009
  • Miejsce pobytu:
    Warszawa
Odp: Korzystanie z plików .ay w pasmo
« Odpowiedź #3 dnia: 2017.10.30, 16:09:36 »
Na tej stronie masz rozne kody playerow:
https://bulba.untergrund.net/progr_e.htm

Np. PtxPlay z pakietu PTxTools.7z. Uwaga - moga byc bledy :-)

Nie mam nic pod reka do SoundTrackera, ale mozesz z archiwum speccy.pl sciagnac Sound Compiler, ktory generuje gotowy kod do grania.
Wszystko zalezy w jakim formacie masz melodyjke.

RafalM

  • *****
  • Wiadomości: 1133
  • Miejsce pobytu:
    Sulejówek
Odp: Korzystanie z plików .ay w pasmo
« Odpowiedź #4 dnia: 2017.10.30, 17:51:19 »
Spróbuję napisać po swojemu gdyby nie było to dość jasne.

Format AY to właściwie nie jest żaden format. To w 99% kod assemblera wyripowany z jakiejś gry czy dema. Odgrywania takiego pliku to tak naprawdę pełna emulacja Zx Spectrum tylko bez wyświetlania grafiki.

Tak naprawdę plik AY może zawierać nawet muzykę na beepera a nie tylko na AY ;)

Taki kod może zawierać muzykę utworzoną w dowolnym edytorze i mieć dowolny wewnętrzny format. Muzyka mogła być zrobiona w jakiś szerzej znanym edytorze jak Sound Tracker lub Vortex Tracker ale niekoniecznie. W przypadku większości gier z lat 80-tych ludzie mieli jakieś swoje prywatne narzędzia do tworzenia muzyki używane w ich firmie i nigdzie indziej. Dziś to wszystko dawno temu przepadło i trzeba by robić duży research by dojść jak jest zakodowana muzyka w konkretnej grze.

Jeśli ci to nie robi różnicy to ściągaj Vortex Tracker 2 ze strony Siergieja Bulby. Przy pomocy tego edytora otworzysz większość plików muzycznych pisanych pod standardowe trackery typu .pt2, .pt3 itp. A potem możesz to wyeksportować tak by użyć w swoim programie. Jakby co to pytaj. Ekspertem nie jestem ale mogę powiedzieć jak ja to robię ;)

Ice

  • *
  • Wiadomości: 7
  • Miejsce pobytu:
    Kraków
Odp: Korzystanie z plików .ay w pasmo
« Odpowiedź #5 dnia: 2017.10.30, 18:33:41 »
Bardzo dziekuje za pomoc Panowie,
generalnie przekopalem sie przez te rzeczy wczesniej ale zrozumialem ze w .ay jest umieszczony rowniez player (jesli pochodzenie kawałka jest ze spectrum) i sadzilem ze mozna zmusic ten plik do odgrywania muzyki ale teraz ogarniam ze to faktycznie nie jest takie proste jak zakladalem.

Zdecydowałem sie na Vortex Playera, wczytuje muzyke w formacie .pt3, nastepnie robie eksport pliku do "ZX Spectrum with player", i teraz do jakiego fomatu eksportowac? mam do dyspozycji: hobeta (jak ogarniam to TRD), ay file, tap file oraz .scl, rozumiem ze .scl bedzie wlasciwym wyborem?
wyswietlaja mi sie adresy INIT i PLAY (np odpowiednio $C000 i $C005), wyswietla mi sie tez Variable adress: $C651 i Module adress: $C86E no i teraz mam problem w jakim miejscu w pamieci to osadzic bo przeciez w $C000 zaczyna sie nagłówek pliku wiec INIT w ten adres wykrzaczy procka, jak policzyc ten offset do INIT na tym przykładzie i czy moge plik .scl zaimportowac w pasmo za pomoca INCBIN,

jeszcze raz dziekuje za odzew,

pozdrawiam

silenter

  • *****
  • Wiadomości: 1337
  • Miejsce pobytu:
    Warszawa/Radzymin
Odp: Korzystanie z plików .ay w pasmo
« Odpowiedź #6 dnia: 2017.10.30, 19:00:49 »
Jeśli chcesz zabrać się za granie z plików na AY to polecam standard VGM.
128k +2 UK issue 1, JS128, FDD3000 in restoration, ZAXON MGT +D, PEAR AmpY, Pear ExEar :), PEAR TI-OF-TTL+FDD35, co to tu robi??? => 2xCDTV&A500

https://soundcloud.com/silenter

https://www.youtube.com/channel/UCKZhL7Lq1zUDDnRDTJKhN4A

RafalM

  • *****
  • Wiadomości: 1133
  • Miejsce pobytu:
    Sulejówek
Odp: Korzystanie z plików .ay w pasmo
« Odpowiedź #7 dnia: 2017.10.30, 22:33:52 »
Cytuj
Zdecydowałem sie na Vortex Playera, wczytuje muzyke w formacie .pt3, nastepnie robie eksport pliku do "ZX Spectrum with player", i teraz do jakiego fomatu eksportowac?

Najprościej będzie chyba do pliku .tap

Adres pod jaki to zostanie skompilowane wpisujesz jaki chcesz, ale chyba lepiej by było to powyżej adresu 32768 bo dolna pamięć Spectrum ma jakieś tam opóźnienia związane z tym że korzysta z niej układ ULA i odbija się to na jakości dźwięku:



Ja to następnie wczytuje do emulatora (obie części - player i dane muzyki ) zwykłym poleceniem LOAD "" CODE a następnie robię eksport odpowiedniego fragmentu pamięci do pliku .bin W ten sposób pozbywam się .tapa z jego nagłówkami chociaż może komuś innemu akurat przyda się właśnie obraz taśmy



W ostatnim kroku w assemblerze dołączam plik .bin do mojego projektu i wywołuję kod w odpowiednim miejscu. Jedno wywołanie to fragment utworu na 1/50 sekundy więc należy to wywoływać w pętli, podczas każdej ramki. Można też wywołanie playera umieścić bezpośrednio w kodzie obsługi przerwania.

Osobiście pracuję w assemblerze Sjasm ale w Pasmo musi to też być możliwe:

ORG 30000
Loop:
HALT
CALL 52005
JP Loop

ORG 52000
INCBIN <c:\Spectrum\MyProject\Music.bin>



Ice

  • *
  • Wiadomości: 7
  • Miejsce pobytu:
    Kraków
Odp: Korzystanie z plików .ay w pasmo
« Odpowiedź #8 dnia: 2017.10.31, 17:33:47 »
czesc,

dzieki za pomoc RafalM, Twoj patent dziala i jest w sumie calkiem spoko gdy wywoluje go w podobny sposob jak ty, niestety nie dziala mi na przerwaniach (mam reset gdy wywoluje z Call $c005, gdy w petli obslugi przerwan nie ma tego wywolania $c005 to wszystko hula ale oczywiscie nie ma prawa grac), a robie to tak:

odpalenie IM2:

     CALL  $C000 
      DI
      LD    A,$80
      LD    I,A
      IM    2
      EI
    ret

obsluga:

Interrupt: 
            DI                       
            PUSH AF                   
            PUSH BC
            PUSH DE
            PUSH HL
            PUSH IX
            EXX
            EX AF,AF'
            PUSH AF
            PUSH BC
            PUSH DE
            PUSH HL
            PUSH IY
            LD HL, $5800
            LD (HL),$AA
            CALL $C005 
            POP IY                   
            POP HL
            POP DE
            POP BC
            POP AF
            EXX
            EX AF,AF'
            POP IX
            POP HL
            POP DE
            POP BC
            POP AF
            EI
            JP  56                         
            ;RETI                       

czy ktos doswiadczony "czuje" tutaj jakis konflikt? rejestry? pamiec? moze player wrzuca gdzies DI?

znalazlem tez kod asemblerowy dla playera pt3 ale pomimo ze sie kompiluje to jednak
nie odpala muzyki aczkolwiek nie wiesza sie w ww przypadku (odpalenia na przerwaniach).

pozdrawiam

RafalM

  • *****
  • Wiadomości: 1133
  • Miejsce pobytu:
    Sulejówek
Odp: Korzystanie z plików .ay w pasmo
« Odpowiedź #9 dnia: 2017.10.31, 17:50:13 »
Reset w programie jest bardzo często rezultatem problemów ze skokiem programu w złe miejsce a to z kolei bierze się często z problemów ze stosem bo instrukcje RET wykonują skok pod adres zapisany na stosie.

Nie wiem jaką posiadasz wiedzę na ten temat ale jeśli się trochę na tym znasz to sprawdź czy przegram przy końcowej instrukcji RET wychodzącej z obsługi przerwania wraca w to samo miejsce.

Można to prześledzić w debuggerze. Ustaw breakpointy i zobacz co się dzieje.

Ice

  • *
  • Wiadomości: 7
  • Miejsce pobytu:
    Kraków
Odp: Korzystanie z plików .ay w pasmo
« Odpowiedź #10 dnia: 2017.10.31, 18:39:39 »
tak, ogarniam temat, w 89' zrobilem dosyc proste dema ktore nawet poszly w swiat a teraz pewne rzeczy sobie przypominam,
najpierw stawialem srodowisko na os x, pozniej ogarnialem pasmo i to wszystko mam poukladane, natomiast programowanie spectruma na PC to troche inna zabawa i chcialem wszystko ogarnac sobie od poczatku kodem zrodlowym w pasmo i z czasem komplikowac sobie wyzwania programistyczne bazujac na w miare elsatycznych i pewnych rozwiazaniach, z tego wzgledu wole kompilowac player w pasmo niz rzezbic .tap ale oczywiscie cieszy mnie ze juz cos gra:-)
Jesli chodzi o debugger to w Fuse jest dosyc prymitywny albo jeszcze nie potrafie go dobrze obsluzyc, nie moge przewijac kodu, widze tylko aktualny rozkaz i kilkanascie nastepnych, nie widze tez breakpointow.

Zna ktoś moze dissasembler kodu z80 pod osx ktory mozna polecic?


RafalM

  • *****
  • Wiadomości: 1133
  • Miejsce pobytu:
    Sulejówek
Odp: Korzystanie z plików .ay w pasmo
« Odpowiedź #11 dnia: 2017.10.31, 21:34:33 »
Nie wiem co jest dostępne pod Osx (rozumiem że chodzi o system pod Maca). Gdybyś jednak pracował na Windows to z emulatorów mogę polecić:

- Spectaculator: przyjazny emulator, wygodny debugger ale mniej zaawansowany od pozostałych

- Spin: zaawansowany debugger, warunkowe breakpointy(wejdź w breakpoint tylko gdy A=255) ale mniej przyjazny

- SpecEmu: w debugerrze można eksportować fragment pamięci do pliku tekstowego z kodem asemblera

KWF

  • *****
  • Wiadomości: 6823
  • Miejsce pobytu:
    trzecia planeta od Słońca
  • "I co ja robię tu, u-u, co Ty tutaj robisz ..."
    • Insta do lasownia
Odp: Korzystanie z plików .ay w pasmo
« Odpowiedź #12 dnia: 2017.10.31, 21:36:04 »
KWF
-----
R Tape loading error 0:1
Moje zabawki: https://github.com/McKlaud76

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Korzystanie z plików .ay w pasmo
« Odpowiedź #13 dnia: 2017.11.02, 07:49:11 »
@Ice - czy to co pokazałeś to jest cały, czy też tylko cześć kodu odpowiedzialnego za odpalenie IM2? Bo jeżeli cały do zabrakło kilku istotnych rzeczy, bez których to nie będzie działać. Opis jak to zrobić poprawnie jest tutaj: http://www.speccy.pl/forum/index.php?topic=407.msg4216#msg4216

Ice

  • *
  • Wiadomości: 7
  • Miejsce pobytu:
    Kraków
Odp: Korzystanie z plików .ay w pasmo
« Odpowiedź #14 dnia: 2017.11.03, 00:52:30 »
@Tygrys,
zrobiłem skrót myślowy, nie wrzucałem kodu dot. wypelniania tablicy wektorów bo to pewnego rodzaju standard,
generalnie obsługa przerwan chodzi ale sypie mi sie gdy dam tam wywołanie playera, natomiast wywolywanie playera bez uzycia IM2 ze zwyklej petli co 1/50 jest ok,
prawdopodobnie jest cos zamieszane ze stosem jak ktos w poprzednim poscie sugerowal.
w weekend przy tym posiedze bo mam troche czasu a zabawa jest w sumie przyjemna,

pozdrawiam