forum speccy.pl

ZX Spectrum => PROGRAMOWANIE => Wątek zaczęty przez: Ice w 2017.10.30, 13:25:58

Tytuł: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: Ice w 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
Tytuł: Odp: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: silenter w 2017.10.30, 13:43:51
Pytaj @Abrimaal - on tu chyba najwięcej wie w kwestii formatu AY.
Tytuł: Odp: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: matofesi w 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 ;)
Tytuł: Odp: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: Gryzor w 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.
Tytuł: Odp: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: RafalM w 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ę ;)
Tytuł: Odp: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: Ice w 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
Tytuł: Odp: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: silenter w 2017.10.30, 19:00:49
Jeśli chcesz zabrać się za granie z plików na AY to polecam standard VGM.
Tytuł: Odp: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: RafalM w 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:

(https://image.ibb.co/igFkO6/i1.png) (https://imgbb.com/)

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

(https://preview.ibb.co/emP1wR/i2.png) (https://ibb.co/fKzZGR)

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>


Tytuł: Odp: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: Ice w 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
Tytuł: Odp: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: RafalM w 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.
Tytuł: Odp: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: Ice w 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?

Tytuł: Odp: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: RafalM w 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
Tytuł: Odp: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: KWF w 2017.10.31, 21:36:04
ZXSP jest pod OS X: http://zxsp.blogspot.co.uk/p/about-zxsp.html (http://zxsp.blogspot.co.uk/p/about-zxsp.html)
Tytuł: Odp: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: Tygrys w 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
Tytuł: Odp: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: Ice w 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
Tytuł: Odp: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: Tygrys w 2017.11.03, 08:27:09
Wykorzystując fragmenty programu, które umieściłeś wyżej oraz dodając brakującą procedurę inicjalizującą tabele przerwań, uzyskałem zamierzony efekt - muzyka gra, mam dostępny BASIC itp.

Dlatego obawiam się że robisz błąd podczas inicjalizacji tablicy przerwań. Bez tych brakujących procedur - nie mogę Ci powiedzieć co jest nie tak.
Tytuł: Odp: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: Ice w 2017.11.03, 12:50:00
wyglada to tak jak ponizej,
procedura uruchamiajaca przerwania chodzi jak nalezy, calos sie sypie jak
wywolywane jest $c005, niezaleznie czy wrzucam tam przekompilowany player przez pasmo czy tak jak radzil RafalM zrzut binariow zawierajacych player i muzyke (binaria powinny byc ladowane od $c000 (init $c000, play $c005)) eksportowane z Vortex trackera, includy dla pasmo sa zaremowane, wiadomo ze trzeba wybrac albo jedno albo drugie.
Skompilowanie playera i odpalenie pod przerwaniami nie zawiesza kompa ale tez nie odgrywa muzyki.
Z gory dziekuje za pomoc bo masz na bank wiecej doswiadczenia, ja teraz ogarniam debugger do pasmo bo mysle ze to pozwoli mi zdetektowac szybciej problem. Moze masz zrodla playera dla pasmo ktory chodzi jak nalezy, rosjanie najczesciej maja zrodla pod dosyc egzotyczne kompilatory a nie chce sie brac za przerabianie tego dla pasmo zeby nie walnac jakiejs glupoty i w konsekwencji szukac bledow gdzie indziej.

pozdrawiam


org $8000

rept    385
db      $81
endm

;$8181 interrupt routine
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                       

   
start: 
    ;  LD    HL,music_data
      CALL  $C000 
      DI
      LD    A,$80
      LD    I,A
      IM    2
      EI
    ret
org $c000   
music_player:
    ;INCBIN "/Users/varna/Documents/zx spectrum/assembler/testay.bin"
    ;INCLUDE "/Users/varna/Documents/zx spectrum/assembler/PT3_player.asm"
music_data:   
    ;INCBIN "/Users/varna/Documents/zx spectrum/assembler/Karboflex.pt3"
end start
Tytuł: Odp: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: Tygrys w 2017.11.03, 13:39:27
Poprawiłem kilka rzeczy i zaczęło działać. W głównej mierze był problem z inicjalizacją modułu, a dokładniej - pod wskazanym adresem nie było modułu.
Nie wnikam w to co robi player, ale dane utworu muszą być koniecznie pod adresem $C86E. Zmiana adresu nic nie wnosi, oprócz tego że wiesza wszystko.

Ogólnie po moich poprawkach wygląda to tak:

Cytuj
org $8000

rept    257
db      $81
endm

;$8181 interrupt routine
org $8181
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

   
start:
     ; LD    HL,music_data
      CALL  $C000
      DI
      LD    A,$80
      LD    I,A
      IM    2
      EI
    ret

   org $c000
music_player:
   incbin "vtplayer.bin"

   org 51310
music_data:
   incbin "Karboflex.pt3"

end start
Tytuł: Odp: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: matofesi w 2017.11.03, 14:19:29
No dobra... Wziąłem kod @Ice, znalazłem tylko do niego stosowny moduł. Skompilowałem i... nie działało. Przekładałem playera binarnego, źródłowego i nawet swoją wersję, którą kiedyś - z jakiegoś powodu - disassemblowałem i dostosowywałem do relokowania... nie działało. Wziąłem kod Tygrysa, skompilowałem i... nie działało. I w tym momencie do mnie dotarło dlaczego ;) Miałem fuse ustawione w tryb emulacji 48k a tam domyślnie nie ma AYka. Włączyłem w opcjach dodatkowo "Melodik" i... nagle zaczęło grać. Gra oryginalny kod z binarnym playerem (testay.bin), gra kod Tygrysa (również po wywaleniu dodatkowego org'a przed ładowaniem modułu). Gra kod z moim playerem. Nie gra tylko wtedy jak się użyje załączonego PT3_player.asm.

Zajrzałem sobie do poszczególnych playerów... "mój", binarny od Tygrysa i binarny od Ice to zasadniczo dokładnie ten sam player. PT3_player.asm jest inny - różnice są niewielkie i wynikają prawdopodobnie z tego, że nie jest samomodyfikujący. "Nasza" wersja ma część zmiennych w obszarze playera i dlatego np. nie ruszy w ROMie. Nie wiem co jest inaczej w wersji PT3_player.asm, ale najwyraźniej różnica wystarczy, żeby muzyczka nie grała.

W razie czego "mój" player w załączniku.
Tytuł: Odp: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: Ice w 2017.11.04, 13:46:04
Wielkie dzieki panowie za pomoc:-)
mam nadzieje ze inni skorzystają z tego wątku bo w sumie dosyc istotna sprawa zostala rozebrana na podstawowe elementy:-)
Ja dam znac w tym watku gdybym znalazl jakies ciekawe rozwiazania w tej sprawie.

pozdrawiam

ps:

mam jeszcze jedno pytanie ktore moze byc dla was prozaiczne: jak "zawodowo" sprawdzic czy mamy do czynienia z 48k+ay czy ze 128k?
i jak poprawic kod zeby sie nie sypal na 128k, to sa sprawy zwiazane z poprawieniem obslugi przerwan w 128k czy chodzi o banki pamieci?
Tytuł: Odp: Korzystanie z plików .ay w pasmo
Wiadomość wysłana przez: matofesi w 2017.11.04, 17:16:17
mam jeszcze jedno pytanie ktore moze byc dla was prozaiczne: jak "zawodowo" sprawdzic czy mamy do czynienia z 48k+ay czy ze 128k?
i jak poprawic kod zeby sie nie sypal na 128k, to sa sprawy zwiazane z poprawieniem obslugi przerwan w 128k czy chodzi o banki pamieci?

Są dwie (a właściwie trzy) sprawy: Pierwsza to oczywiście bankowanie pamięci. Żeby sprawdzić, czy masz stosowne banki zapisujesz bajt do pamięci gdzieś powyżej $c000, przełączasz bank, zapisujesz w to samo miejsce inną wartość, przełączasz z powrotem na pierwszy bank i sprawdzasz czy jest to, co zapisałeś za pierwszym razem. Można też sprawdzać zawartość ROMu itp., ale test bankowania jest najpewniejszy.
Druga sprawa to uruchamianie kodu na 128k w trybie 128 - jeśli całość ma współpracować z BASICem itp. to trzeba poza przełączaniem banków portem $7ffd dodatkowo modyfikować odpowiednie zmienne systemowe. No i oczywiście kod obsługi przerwań i tablica wektorów muszą siedzieć między $8000 a $c000 bo od $c000 pamięć może "zniknąć" jak się banki przełączą.
Dodatkowa trzecia sprawa nie ma strategicznego znaczenia przy "zwykłych" programach - 128 ma inaczej poustawiane stałe czasowe wyświetlania. A to oznacza, że jeśli chcesz pisać kod, który będzie robił mulitoclory czy efekty na borderze to wtedy musisz sprawdzić na czym kod się wykonuje i dostosować odpowiednio opóźnienia. I żeby było zabawniej to 128/szary +2 ma inne czasy niż +2A/+3 o wschodnich klonach bankujących zgodnie ze 128 nie mówię, bo tam w ogóle sprawa wygląda inaczej ;)