Autor Wątek: AY Maker - jak stworzyć plik .ay ?  (Przeczytany 4429 razy)

Abrimaal

  • *****
  • Wiadomości: 963
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
AY Maker - jak stworzyć plik .ay ?
« dnia: 2013.08.04, 04:08:30 »
AY Maker tworzy pliki w formacie AY z kodu (plik .bin) + pliku .ini
Chciałbym utworzyć .ay dla utworu, który kiedyś napisałem na Beepola i nie odtwarza prawidłowo, zamiast części dźwięków są piski. Możliwe, że napisany w 2001 AY Maker nie rozpoznaje playera Beepola (użyłem sound engine Special FX).
Czy ktoś ma jakieś doświadczenia? Próbowałem zmieniać wartości rejestrów na starcie czy numer playera, nic nie daje.
Dołączam cały folder wraz z programem uruchamianym z pliku .bat jako że forum nie przyjmuje niektórych typów załączników.
Plik .bin z muzyką ładuje się i startuje od 50350, długość 1767B
AY Music, ULA plus.

Abrimaal

  • *****
  • Wiadomości: 963
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: AY Maker - jak stworzyć plik .ay ?
« Odpowiedź #1 dnia: 2013.08.30, 05:40:08 »
Próbowałem też inny plik z muzyką na beeper, tym razem napisany na Music Box 48, czyli z wbudowanym playerem i gra tylko pierwszy dźwięk. Teoretycznie wg specyfikacji programu powinien on (AYMaker) uruchomić dowolny kod dla Z80, a nie robi tego.
Do konwersji trackerowych formatów (stc, pt2, pt3) wyciągniętych z gier czy demo używam Vortex Tracker, wprawdzie nie ma (chyba?) możliwości dodania info o utworze (autor, tytuł etc...), ale plik .ay wychodzi prawidłowy.
Zależy mi na uzupełnieniu zaniedbanej bazy AY Project, podzieliłem ją wg autorów, usunąłem duplikaty i dodałem na razie kilkadziesiąt plików. Wszystkie utwory powinny być w formacie .ay, dziś wiele playerów obsługuje ten format i tylko ten ze Spectrum. Oprócz powszechnie znanego AYEmul (Bulba) dla PC, pliki .stc próbuje grać XAmp pod Android, jednak bardzo marnie mu to wychodzi.
Czy znacie jakąś alternatywę dla staruszka AYMaker, który z kodu (np. pliku .bin) potrafi zrobić .ay?
AY Music, ULA plus.

Abrimaal

  • *****
  • Wiadomości: 963
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: AY Maker - jak stworzyć plik .ay ?
« Odpowiedź #2 dnia: 2013.10.16, 21:49:17 »
Czasem zdarza się, że plik .ay nie działa, jak powinien - zacina się, wiesza lub gra przypadkowe dźwięki, natomiast sam kod na Spectrum gra prawidłowo. Dotyczy to głównie muzyki na beeper.
Problemy, które dotąd napotkałem:
1. Zawiera CALL do ROMu. Wtedy trzeba procedurę skopiować do RAM, podmienić adres i sprawdzić czy nie ma dalszych.
2. Tworzy własną tabelę przerwań z wartością 255 ($FF), pod adresem 65535 (#FFFF) umieszcza JR a jego parametr zawarty jest w ROM pod adresem 0. Emulowana pamięć pliku .ay nie zawiera ROM, całe 65536B to RAM.
AY Music, ULA plus.

Abrimaal

  • *****
  • Wiadomości: 963
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: AY Maker - jak stworzyć plik .ay ?
« Odpowiedź #3 dnia: 2013.11.30, 05:24:34 »
Nie raz dołączałem do pliku .ay syntezę mowy czy inne digitracki. Na tym straciłem 2 godziny i dalej stoję.
Zagadka nie do rozwiązania przeze mnie, krótkie zdanie około 5 kB, jedna pętla grająca zawartość pamięci przez beeper.
AYMaker nie potrafi zrobić z tego pliku .ay (!!!) ???
Próbowałem już chyba wszystko, różne PlayerVersion (1-3), czy połączyć go z poprzednim blokiem.

ini dla AYMaker dla tego jednego pliku:

Author=L.A. Esq
Misc=One Too Many (c) 1993 Extacy-3
FirstSong=0
FileVersion=0
PlayerVersion=0

NewSong
Name=One Too Many
stack=59795 ;może być dowolny byleby nie wchodził na kod, i tak nie używany
INIT=65045
SongLength=0:02:000
CodeName=otm-59796.bin
CodeAddress=59796

Podwójne  ??? ??? - chciałem dołączyć plik bin i ini - i pisanie postu od początku.  :'(

Plik otm-59796 jest prawidłowy, można go sprawdzić w emu ładując binarnie pod ten adres i RANDOMIZE USR 65045
Zmieniłem rozszerzenia na txt - ważne - nie otwierać tego pliku w notatniku czy innym edytorze tekstu.
A oto cała pętla - czyli "player muzyki" (czy AYMaker analizuje kod? Co może być w nim niewłaściwego?):
Zamiana IX na HL (i LD L,5 : DEC L na A) nic nie daje, dalej nie tworzy z tego ay.

DI ; 65045
LD IX, 59796 ; 65046
LD DE, 5248 ; 65050
L_FE1D: LD B, 8 ; 65053
LD C, (IX+0) ; 65055
L_FE22: RR C ; 65058
CALL C, L65092 ; 65060
CALL NC, L65095 ; 65063
OUT (254), A ; 65066
LD L, 5 ; 65068
L_FE2E: DEC L ; 65070
JP NZ, L_FE2E ; 65071
DJNZ L_FE22 ; 65074
INC IX ; 65076
DEC DE ; 65078
LD A, E ; 65079
OR D ; 65080
JP NZ, L_FE1D ; 65081
EI ; 65084
RET ; 65085
CCF ; 65086
SCF ; 65087
RET ; 65088
SCF ; 65089
CCF ; 65090
RET ; 65091
L_FE44: LD A, 16 ; 65092
RET ; 65094
L_FE47: LD A, 0 ; 65095
RET ; 65096

« Ostatnia zmiana: 2013.11.30, 06:05:41 wysłana przez Abrimaal »
AY Music, ULA plus.

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4255
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: AY Maker - jak stworzyć plik .ay ?
« Odpowiedź #4 dnia: 2013.12.01, 14:10:48 »
Poprawiony plik .ini w załączniku. Teraz wszystko 'gra i bucy' ;)

Przy okazji, można już załączać pliki .bin i .ini

Abrimaal

  • *****
  • Wiadomości: 963
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: AY Maker - jak stworzyć plik .ay ?
« Odpowiedź #5 dnia: 2013.12.01, 19:10:23 »
Dzięki, nie wiem dlaczego u mnie nie startował, ustawialem player=3.
AY Music, ULA plus.

Abrimaal

  • *****
  • Wiadomości: 963
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: AY Maker - jak stworzyć plik .ay ?
« Odpowiedź #6 dnia: 2013.12.21, 01:22:52 »
Player Beepola (Special FX) potrzebuje dowolnych danych w ROM, aby odtwarzać perkusję jako przypadkowe bity, czyli szum.
Gdy ROM był pusty w pliku ay, to zamiast szumu z różną prędkością (różne brzmienia perkusji) były tam zera i player grał beepy. Tak jak przy szumie ładowania z kasety słychać kiedy lecą dane, a kiedy zera.
Niepotrzebne jemu natomiast jest ładowanie 243 pod adres 0 (parametr dla skoku JR), te przerwania wyglądają na nieużywane. Może autor miał w zamyśle dodanie czegoś jeszcze.
Na początku wrzucilem cały ROM48 do pliku AY lecz AYMaker odmówił załadowania pod adres 0, więc próbnie załadowałem go pod adres 00001 i zagrał prawidłowo. Wniosek z tego, że player nie korzysta z procedur w ROM, tylko z jej zawartości.
Kolejne próby to zmniejszenie objętości pliku, pierwsze 4000 bajtów załadowane pod adres 16 działa doskonale.
Próbowałem skrócić do 2000 ładując pod różne adresy (np. 16, 1000, 2000) - za każdym razem gdzieś w pliku .ay grał beepy zamiast części bębnów.
Czyli player potrzebuje pierwszych 4kB pamięci wypełnionych przypadkową zawartością, niekoniecznie zawartością ROM. Dodawanie do utworu, który ma niecałe 3kb wraz z playerem, 4kB śmieci to trochę bezsens.
Czy ktoś mógłby napisać kod, który to robi? Proszę o odpowiedź w tym temacie.

To jest fragment kodu playera, który odpowiada za generowanie szumu (perkusji). Rejestr HL jest ustawiony na adres 0, zmiana tej wartości nie da nic, w pliku .ay całe 65536 bajtów to RAM, czyli zera.
PLAY_PERC:
               DEFB  $21                   ; LD HL,nn
PERC_PATT:     DEFW  $0000                 ; Address of the percussion data
               LD    A,(HL)
               INC   HL
               LD    C,(HL)
               INC   HL
               LD    (PERC_PATT),HL        ; Point PERC_PATT at next datum
               AND   $7F
               CALL  JUMP_PERC_ADDR
« Ostatnia zmiana: 2013.12.21, 01:43:54 wysłana przez Abrimaal »
AY Music, ULA plus.