atarionline.pl Stickman - coś tu nie gra - 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:
       
      CommentAuthormgr_inz_rafal
    • CommentTime15 May 2014 zmieniony
     
    Hej,
    Zasysam ASMA, znajduję Stickman.sap, zapisuję jako .xex.

    Wersja SAP brzmi jednak inaczej niż XEX.

    I teraz pytania:
    1. Dlaczego?
    2. Jak uzyskać XEX, który gra tak samo? (bo zakładam, że to co słyszę w SAP jest tą dobrą wersją, gdyż tak to moje uszy odbierają podczas oglądania Overmind).

    Dla ułatwienia, pliki w załączniku.
    • 2:
       
      CommentAuthormiker
    • CommentTime15 May 2014
     
    Wydaje mi się, że ten SAP nie był robiony ASAP-em, tylko albo "z ręki", albo jakimś starszym wynalazkiem. Powiem tak, mam gdzieś w dyskietkach źródło tej muzy, problem w tym, że nie mam "na wierchu" żadnej stacji dysków. Chyba, że może ktoś z koderów pomoże? :)
    • 3:
       
      CommentAuthorvoy
    • CommentTime15 May 2014
     
    Przychodzi mi na myśl ripper do muzyczek, który był dodany do któregoś numeru "Syzygy", tylko jego nazwa wyleciała mi z pamięci. :P Może nim da się wyciągnąć muzak w oryginalnym formacie prosto z Overminda?
    • 4: CommentAuthorpin
    • CommentTime16 May 2014
     
    Mgr inż Rafał. To nie używaj sapa, odpal muzę po prostu na Atarce. Też poszukam źródeł, bo na 100% je mam.
    • 5:
       
      CommentAuthormgr_inz_rafal
    • CommentTime16 May 2014 zmieniony
     
    No właśnie chcę odpalić na Atarce, stąd potrzebny mi .xex.

    _______________________ Edyta: _____
    A chyba, że tak:
    ->link<-

    Sprawdzę dziś za parę godzin :)
  1.  
    Niestety, zabawa z Sapemu 0.2 zakończona niepowodzeniem. Jak nie crash, to nic nie słychać :)

    Ponawiam więc prośbę o pomoc w uzyskaniu grającego pliku .xex, gdyż jest to kawał zajebistej muzyczki.

    PS. Proszę o niepomaganie w temacie uruchomienia Sapemu. Docelowa Atarka, która ma to grać i tak nie posiada na stanie dodatkowych banków.
    • 7: CommentAuthorwieczor
    • CommentTime16 May 2014
     
    Brzmi jakby wycinało któryś kanał/instrument. Ogólnie SAP to procedura grająca sama w sobie, więc skoro on gra dobrze, to przyczyn bym się doszukiwał w błędnej konwersji do XEXa i spróbował rozebrać to ręcznie (po nagłówkach informacyjnych SAP w zasadzie zawiera binarny plik Atari).
    • 8: CommentAuthorxxl
    • CommentTime16 May 2014 zmieniony
     
    pod xB zadanie jest dosc proste... wylaczasz rom, set file offset za naglowkiem, binary load, jsr do init, na vbi skok do plajera. zadziala wszedzie ale nie u Pina ;-)

    ---
    przy okazji masz przepis na plajera sapow na standardowym atari bez rozszerzenia pamieci.
  2.  
    xxl, to brzmi prawie jak "oczyść przestrzeń, wypowiedz intencję, zapal świecę, usiądź po turecku, podziękuj kosmicznym Opiekunom, jeśli po świecach zostały ogarki, nie wyrzucaj ich tylko najlepiej zakop"

    Cały czas mam nadzieję, że uda się ten kawałek odpalić na Atarce jakoś ciut prościej :)
    • 10:
       
      CommentAuthorvoy
    • CommentTime17 May 2014
     
    Pogrzebałem trochę w dyskach i rzeczonym ripperem okazał się Smart Player 2.3 ze strony A pierwszego dysku "Syzygy" nr 5. Z dalszych kombinacji: zgrałem zawartość pamięci Atari podczas "Stickman's World" i okazało się, że ta część korzysta z pamięci pod ROM-em - widać IRQ loader Sebana (z napisami) pod koniec pamięci. Jak wgrać te dane w banki dodatkowej pamięci (załóżmy, że zostały podzielone na 4 kawałki po 16 kB), by mógł je potem odnaleźć Smart Player, uruchomiony z Shiftem? Korzysta on z banków o numerach E3, E7, EB, EF. Przyznam się, że ta wiedza zdążyła mi już ulecieć przez lata. :P
    • 11: CommentAuthorwieczor
    • CommentTime17 May 2014 zmieniony
     
    Ale XXL ma rację (częściowo). Jak spojrzysz w info SAPa to zobaczysz że jest "wredny" :)

    LOAD A999-A9AA
    LOAD D800-F3D0

    Do tej pamięci masz dostęp jak wyłączysz ROM - a jak wyłączysz ROM to nie możesz ładować pliku binarnego OSem - ot i cały sekret - to się po prostu nie ładuje całe, bo konwersja do XEXa jest zbyt prosta, autor nie przewidział takich "sztuczek". Aby to zrobić należy to "opakować" procedurą ładującą, która wczyta blok do pamięci niskiej a potem dopiero wyłączy ROM i tam go przepisze. XBIOS nie używa ROMu, wot i cały sekret, na szczęście można się obyć bez tego. Znajdę chwilę to Ci zasembluję taki XEX z loaderem.

    Edit: no i error, nie doceniłem jednak tego XEXa :) Wygląda na to, że autorzy przewidzieli jednak "sztuczki" i ten XEX dokładnie robi to co trzeba - tzn. ładuje odpowiednie części binarki po czym umieszcza je tam gdzie trzeba w pamięci. Tak przynajmniej zeznaje debuger altirry który istotnie pokazuje we właściwych miejscach odpowiedni kod.... Tu musi być coś jeszcze. Dokładniej rzecz biorąc, słychać tylko 2 kanały z czterech. Za to co ciekawe - słychać je na obu POKEYach (ale to już oryginalny player musi mieć).

    EDIT2: MAM! Znalazłem chyba zabezpieczenie antypirackie :) Ciekawi mnie tylko że na WASAPie to przechodziło :)
    • 12: CommentAuthorwieczor
    • CommentTime17 May 2014 zmieniony
     
    Proszę bardzo już gra :) Bez specjalnych loaderów :) Panowie bardzo dowcipni są, z drugiej strony to ciekawa rzecz, wstawić kod który się wykonuje na Atari i pod emulcem a jest ignorowany przez WASAP.

    A szczegółowo: zaufałem uchu które słyszało tylko 2 kanały i zacząłem szukać miejsca gdzie player pisze do POKEYa. I co znalazłem? Po pierwsze player pisze do dwóch POKEYów - bardzo mądrze, mamy stereo to nie będziemy mieli głuchego głośnika. Ale po drugie:

    Player pobiera z pamięci, pisze do AUDF1 (i AUDF1-II)
    Pobiera i pisze do AUDF2 (i AUDF2-II)
    Następnie pobiera i pisze do AUDC1(AUDC1-II)
    oraz inną wartość do AUDC2(AUDC2-II).

    Wszystko wydaje się w porządku, dwa generatory już grają. Ale tu player robi coś "fajnego" mianowicie:

    D8F7: LDA #FF
    D8F9: BNE D939
    D8FB: .....
    .....
    D939: RTS

    Oczywiście jak się domyślacie od D8FB do D938 jest kod piszący dane do pozostałych dwóch (x 2) generatorów a BNE jest wykonywane zawsze :) Wystarczyło więc zapatchować exeka na LDA #00. Nie wiem tylko jakim cudem WASAP to przeskakuje... A może ma coś co podmienia ten kod na starcie?
    • 13: CommentAuthorwieczor
    • CommentTime17 May 2014
     
    A tu spatchowany SAP - od tej pory zapis do XEX również z poziomu playera da poprawny kod.
    • 14:
       
      CommentAuthormiker
    • CommentTime17 May 2014 zmieniony
     
    Wieczór, coderu...
    Panowie nie byli "dowcipni" tylko chodziło o obsługę stereo, która w tym czasie (1995) raczej była w powijakach. Przyznać się, ile atarek miało wtedy stereo u nas, a ile "jeszcze" nie . Linka do posta wysłałem Ramosowi, a ASMA HQ na pewno twój patch raczy ocenić, zobaczymy tylko na ile pozytywnie. :)
    Dzięki!
    • 15: CommentAuthorxxl
    • CommentTime17 May 2014
     
    po co patchowac?

    trzeba uzyc xB czyli wlasciwej metody ;-)

    w zalaczniku oryginalny sap - klikamy w "3" i jazda.
    • 16:
       
      CommentAuthorvoy
    • CommentTime17 May 2014
     
    Spróbowałem inaczej: dzięki opisowi formatu Music ProTrackera z Atariki, wyciągnąłem oryginalny moduł Stickmana w MPT z tamtego dumpa, wgrałem do Smart Playera i zmieniłem mu adres ładowania na $5000 (oryginalnie siedział od $E7A6). Obie wersje przeleciałem WASAP-em i zrobiłem z nich SAP-y i XEX-y. Wszystko w załączniku poniżej. :)
    • 17: CommentAuthorwieczor
    • CommentTime17 May 2014 zmieniony
     
    Tym niemniej gra a po zdjęciu tego warunku, gra jak oryginał. SAP również.

    Dobra Panowie, rozumiem, że ten kod miał coś na celu - wytłumaczcie, jak to się ma do stereo i jakim cudem na WASAP działa. Acha, xxl, wytłumacz co ma xB do tego, bo też nie rozumiem. Przecież to nie ma nic wspólnego z adresami w pamięci. A nawet jeśli to ta metoda nie jest kompatybilna w 100% z Atari :) Tylko z niektórymi.

    Jest player który pcha coś na dwa generatory, potem ma skok - niby warunkowy ale wykonywany zawsze i omija pozostałe dwa. To może grać pod jednym z dwóch warunków:

    a) coś zmodyfikuje kod

    b) do drugiej części playera skacze się osobno - i z z jakiegoś powodu to nie działa (chociaż reszta działa), tu po prostu może być tak, że ten kod co tam skacze nie ładuje się poprawnie

    To powyższe (b) nie wiem naprawdę co by miało na celu.
  3.  
    Ha! Serdeczne dzięki Panowie!

    Wszystkie wersje dostarczone przez Was działają :)
    • 19:
       
      CommentAuthorvoy
    • CommentTime17 May 2014
     
    Podejrzewam, że przy eksporcie do pliku wykonywalnego WASAP dodaje swój player, a w SAP-ie jest pozostawiony oryginalny z dema. Dodatkowo, SAP, który jest w ASMA, zawiera dwa moduły MPT: ten sprzed "Stickman's World" (siedzący pod $DF00) i ten właściwy spod $E7A6.
    • 20: CommentAuthorwieczor
    • CommentTime17 May 2014
     
    @Voy: to by miało sens, ale tak nie jest, bo zauważ, że ten rozkaz występuje też w SAPie i po jego zmodyfikowaniu WASAP zapisuje również działającego exeka. Czyli przerzuca to co w SAPie jest. FAKT że robi to trochę inaczej - nie ładuje bezpośrednio ale to właśnie dlatego, żeby można było ładować do wysokich adresów pamięci, czyli dokłada jakieś przepisywanie tego.
    • 21:
       
      CommentAuthorvoy
    • CommentTime17 May 2014 zmieniony
     
    To już chyba trzeba zapytać Sebana, po co były takie kombinacje alpejskie. :)

    Jestem za tym, by zamienić w ASMA Stickman.sap na ten wygenerowany przez WASAP-a z wyrypanego modułu. Nie ma sensu pozostawiać tego starszego, jako że w środku jest jak najbardziej standardowy moduł MPT, choć z nietypowym adresem ładowania.
    • 22:
       
      CommentAuthormgr_inz_rafal
    • CommentTime17 May 2014 zmieniony
     
    Hmm, Wieczór. Stickman patched nie gra dobrze na Atari :/
    Na emulcach jest OK.

    Sprawdzałem Chaos Loaderem i SIO2SD xex loaderem, choć nie wiem, czy to ma jakieś znaczenie. Może o jakieś zerowanie pamięci czynione przez emulatory tu chodzi?

    PS. Wersja voy'a gra dobrze.

    PS2. Dla zasady nadmienię, że wersja xxl'a również dobrze plumka na Atari, choć znając podejście xxl'a akurat nie spodziewałem się by było inaczej :)
    • 23: CommentAuthorxxl
    • CommentTime17 May 2014
     
    niema zadnej wersji xxla. to jest oryginalny sap bez patchow czy rekompilacji.
    • 24: CommentAuthorwieczor
    • CommentTime17 May 2014
     
    To nie wiem, sprawdzalem tylko na Altirze i Atari 800win no ale tam nie ma w sumie loadera po prostu bootuje sie binarke. To sprawdz inny. A "niegranie" jak sie objawia?
  4.  
    Objawia się tak, jak w oryginale.
    • 26: CommentAuthorwieczor
    • CommentTime17 May 2014
     
    Bardzo dziwne coś :)
    • 27: CommentAuthorseban
    • CommentTime17 May 2014 zmieniony
     
    Hej!

    Teraz już nie pamiętam co autor (tzn. w tym wypadku ja :] ) miał na myśli... musiałbym zajrzeć w kod... mam nawet gdzieś źródła. Jednak z tego co pamiętam, każda część Overmind wykrywała czy jest obecne stereo przy uruchamianiu się i modyfikowała kod player-a tak aby poprawnie grał na mono i na stereo. Jeżeli kod pisze inne wartości do jednego POKEY-a niż do drugiego... to jest tak z dwóch powodów...

    Większość muzaków zrobiona na potrzeby Overmind była mono, stereo robiliśmy przez modyfikację głośności lub opóźnienie lewego czy prawego kanału o kilka ramek, dawało to efekt pogłosu i głębi jeżeli miał ktoś stereo.

    A co do dźwięku w Overmind to część muzyczek jest tak mistrzowsko spreparowana przez Xray-a i Miker-a że większość nie zauważa że czasami grają tylko dwa kanały (np. podczas wczytywania) po wczytaniu ta sama muza nagle robi się 4-ro kanałowa (gdy IRQ loader zwolni 2 kanały do zakończonej transmisji) ... przejścia są zrobione tak iż większość śmiertelników tego nie zauważa.

    To był czas wielkich eksperymentów... cały Overmind jest jednym wielkim eksperymentem i wyszło jak wyszło... robiąc go ponownie na pewno bym zmienił 90% kodu, ale to już wiedziałem kończąc go linkować :) Przede wszystkim robił bym cross-developing na jakiejś silniejszej maszynie :) Wszystko było napisane, kompilowane i linkowane na małym Atari... to było bardzo upierdliwe i czasochłonne... jednak ten czas wspominam bardzo dobrze :)

    W player-ach MSX w Overmind jest masa błędów... są części które robią fade-out muzyki przy zakończeniu, ale gdy jest stereo to wyciszanie na drugim POKEY-u się totalnie kwasi... bo pisałem te części już tak nieprzytomny że nawet tego wtedy nie zarejestrowałem.

    Na drugiej stronie w IRQ loaderze do pewnego momentu jest fatalny błąd :) IRQ loader nie zachowuje poprawnie wartości rej. Y podczas wczytywania... prawdę mówiąc nie wiem dlaczego efekty podczas wczytywania w ogóle działają ;) być może dlatego że nie bardzo lubiłem rejestr "Y" ;)

    Takich błędów jest w overmind o wiele więcej :) ale było już ja późno aby je poprawiać, szczególnie że player i muza do części następnej była w większości wypadków "zaszyta" w części poprzedniej :P

    Reasumując mój wywód i wracając do muzyki ze "stickman part", muzyka w oryginale była mono, przez odpaleniem muzy kod sprawdzał czy jest stereo... jak je wykrył to modyfikował player tak aby uruchomić część kodu odpowiedzialną na dodanie efektu przestrzennego :) (taki pseudo-surround, he he he :> )

    edit: a i jeszcze jedno... jeżeli player jest wywoływany na "kilka razy", tzn. kod jego podzielony na kilka części, jest tak z tego powodu że brakowało czasu rastrowego... większość efektów w Overmind ma 50fps, tzn. mieści się w jednej ramce, często aby zaoszczędzić pamięć, albo uniknąć dwu-buforowania, dzieliłem player tak aby wykonać go po kawałki w momentach kiedy miałem wole akurat parę linii czasu rastrowego :)

    jsr vbl_sync
    jsr player_part1
    jsr calculate
    jsr clear_screen
    jsr player_part2
    jsr draw_effect
    jsr player_part3



    mało co się dzieje w Overmind na przerwaniach, często wcale ich nie ma bo ważny był każdy cykl :) Część efektów wykonuje się wręcz przy SEI, INC $D40E :)
    • 28: CommentAuthorwieczor
    • CommentTime17 May 2014 zmieniony
     
    Rozumiem czyli pomijanie kanału 3 i 4 było załączane gdy następowała komunikacja z dyskiem? To już Rafał wiesz jak to robić :) A ztym dzieleniem playera to fajny sposob, pamietam jak sie gimnastykowalem gdzie zmiescic drugie wywolanie bo zajmowalo ze 40 linii...

    Co do stereo - z moich doswiadczen wynika ze wykrywanie stereo i pomijanie kodu przeznaczonego drugiemu pokeyowi jest abslutnie zbędne :) Wystarczy sobie tam pisac a gdy stereo nie ma nic zlego sie nie dzieje - ot idzie to sobie w kosmos.

    Wykrywanie ma sens tylko w jednym przypadku, gdy mamy zupelnie inna muzyke dla stereo i poerwszy pokey ma dostawac cos innego. Ale tak juz chyba malo kto robi.
    • 29: CommentAuthorseban
    • CommentTime17 May 2014 zmieniony
     
    @wieczór:

    i jeszcze jedno... pod adresem $d8f7 nie ma "LDA #$ff", jest za to "LDA $FF", czyli sprawdzamy zawartość komórki $FF na stronie zero ;)

    A co do pisania po rejestrach drugiego POKEY-a gdy go nie ma... to jest bardzo zły pomysł... bo niestety nie idzie w kosmos, tylko zapisuje się do pierwszego POKEY-a... a najlepszym przypadku gdy wartości różnią się znacznie... słyszymy pykanie :) albo inne irytujące efekty.
    • 30: CommentAuthorwieczor
    • CommentTime17 May 2014
     
    Aaaaaaa widzisz, pozno bylo i przeoczylem. Rafal to juz wiem czemu "patch" nie dziala na Atari :) Zamienilem po prostu hexeditorem FF na 00 i zadowolony :) widac na atari cos tam jest a na emulcu 0 :D
    • 31: CommentAuthor0xF
    • CommentTime17 May 2014
     
    Wieczór zrobił dobrą analizę, tylko że tam nie było LDA #$FF, tylko LDA $FF. Bajt pod $FF nigdzie nie był ustawiany, więc w playerach SAP było tam zero. Natomiast skonwertowany xex ma wbudowany depaker, który używa $FC-$FF, w efekcie czego $FF nie było zerem.

    Wieczór zamienił LDA $FF na LDA $00, co oczywiście też nie gwarantuje zera. Właściwą poprawkę wrzuciłem tu: ->link<-

    Jest pomysł wyłapania takich kwiatków (użycie niezainicjalizowanej pamięci) w całej ASMA.
    • 32: CommentAuthor0xF
    • CommentTime17 May 2014
     
    Seban napisał post wyjaśniający problem w tej samej minucie, gdy ja zrobiłem commit. :)
    • 33: CommentAuthorwieczor
    • CommentTime17 May 2014 zmieniony
     
    Seban, nie zapisuje sie. Player RMT tak robi i nigdy nie slyszalem nic niewlasciwego. Zeby tak bylo rEjestry drugiego pokeya musialyby sie standardowo mapowac na pierwsze ale nic takiego nie ma miejsca. Zreszta Twoj player to robi i sie nie przejmuje :)

    Edit: dzieki 0xF za dodatkowe wyjasnienia, poza tym ze cos nie dziala i jak naprawic, lubie wiedziec dlaczego a w czary nie wierze :)
    • 34: CommentAuthorseban
    • CommentTime17 May 2014 zmieniony
     
    hej!

    W przypadku Overmind pod $FF była flaga iż IRQ loader działa i nie można mu jechać player-em po licznikach POKEY-a które wykorzystuje :) W tym wypadku (SAP) nie było żadnej gwarancji co znajduje się w $FF, więc było słychać tylko dwa kanały, bo player zakładał iż jest transmisja w trakcie.

    A co do POKEY-a, gdy nie ma stereo w Atari to cała strona $d200-$d2ff adresuje naszego biednego POKEY-a, zapis pod $d210, $d220, $d230, itd. to de-facto zapis pod $d200, więc jeżeli player będzie pisał coś pod $d210 zakładając że jest tam drugi POKEY a fizycznie go nie będzie, będzie fatalna brzmieniowo kicha, tym większa im większa będzie różnica czasowa w zapisie od $d200 do $d210, rozumiesz o co mi chodzi?

    Ten sam problem napotkał Jaskier pisząc Theta, zobacz jak dokonuje zapisów Player do Thety. Nie wykrywa on stereo ale minimalizuje czas pomiędzy zapisami i do tego o ile dobrze pamiętam najpierw pisze do pokey#1 ($d210-$d21f) a potem nadpisuje to wartościami z pokey#0 ($d200-$d20f). Jeżeli różnice w dźwiękach pomiędzy kanałami L i R w muzyce z THETA są znaczące i nie ma drugiego POKEY-a to również to słychać niestety.

    kawałek playera to thety:

    quit 	ldx #3
    stx $d21f
    stx $d20f
    ldx freqen+4
    ldy freqen
    stx $d210
    sty $d200
    ldx volume+4
    ldy volume
    stx $d211
    sty $d201
    ldx freqen+5
    ldy freqen+1
    stx $d212
    sty $d202
    ldx volume+5
    ldy volume+1
    stx $d213
    sty $d203
    ldx freqen+6
    ldy freqen+2
    stx $d214
    sty $d204
    ldx volume+6
    ldy volume+2
    stx $d215
    sty $d205
    ldx freqen+7
    ldy freqen+3
    stx $d216
    sty $d206
    ldx volume+7
    ldy volume+3
    stx $d217
    sty $d207
    sta aud1
    ldx aud2
    stx $d218
    sta $d208
    rts
    • 35: CommentAuthorwieczor
    • CommentTime17 May 2014
     
    Rozumiem ale nie wyjasnia to czemu RMT nie ma tego problemu. Sam player wykrywania nie ma, wali po portach tak jak zostal skonfigurowany i bez drugiego pokeya slychac jeden poprawnie a roznice sa na tyle znaczace ze byloby slychac na pewno
    A skad informacja ze cala strona adresuje pokeya? Pytam bo moze jest niescisla, albo jakies inne rozszerzenie powoduje taki efekt? Osobiscie przetestuje, ale nie spotkalem sie z mozliwoscia pisania do pokeya po innych adreaach
    • 36: CommentAuthorseban
    • CommentTime17 May 2014 zmieniony
     
    @wieczór: co do adresowania całych stron przez układy Atari... tak jest od wieków, dekoder pamięci jest tak uproszczony (jedna kostka 74138) że wszystkie układy w Atari tak mają... tzn. że zajmują zawsze całą stronę.

    GTIA, POKEY, ANTIC, PIA .... zajmują całą stronę. Chcesz przeprowadzić mały eksperyment? wystarczy Atari Basic...

    10 DL=PEEK(560)+256*PEEK(561)
    20 POKE DL+4,0:POKE DL+5,210
    30 POKE 559,33


    na ekranie zobaczysz zawartość stron pamięci $d2,$d3,$d4 (POKEY,PIA, ANTIC). Wyłącz STEREO... a zobaczysz że POKEY jak i reszta układów zajmuje po całej stronie.

    Powciskaj sobie np. SHIFT, klawisze. Na ekranie widzisz również cały czas zliczające liczniki POKEY-a, i jak widzisz wszystko powtarza się co 16 bajtów (jak masz stereo to co 32 bajty... na przemian POKEY#0 i POKEY #1).

    Jeżeli masz Ultimate 1MB to wprowadza w to trochę zamieszania, więc będzie zapewne wyglądało inaczej niż gołe Atari, ale zrozumiesz o co mi chodzi.

    EDIT #1:

    a tu masz jeszcze wersję w której zobaczysz to graficznie (strony $d0,$d1,$d2,$d3,$d4,$d5). Przy gołym sprzęcie serii XE (strony $d1,$d5) będą zawierały losowe dane z magistrali. Reszta obszarów reprezentuje w czasie rzeczywistym zawartość rejestrów (READ) układów GTIA, POKEY, PIA, ANTIC.

    10 GRAPHICS 6+16
    20 DL=PEEK(560)+256*PEEK(561)
    30 POKE DL+4,0:POKE DL+5,208
    40 POKE 559,33
    99 GOTO 99


    widać ładnie pracujące liczniki POKEY-a powtarzające się co 16 bajtów na stronie $d2xx, a do tego zobacz jak ładnie widać $d40b Antic-a (na całej stronie $d4xx)

    EDIT #2:

    Zresztą zrób prosty test, wyłącz stereo napisz:

    10 POKE 53791,3  :REM $D21F
    20 POKE 53776,128:REM $D210
    30 POKE 53777,168:REM $D211
    40 GOTO 40


    który POKEY gra? :)
    • 37: CommentAuthorwieczor
    • CommentTime17 May 2014
     
    No gra. Muszę w takim razie przyjrzeć się playerowi RMT - tam jak wyłączysz stereo słychać normalnie jeden pokey bez zakłóceń. A wydawało mi się że pętla pisząca do pokeya nie zwiera żadnych warunków.
    • 38: CommentAuthorseban
    • CommentTime17 May 2014 zmieniony
     
    Hej!

    Player RMT zawiera asemblację warunkową, skompilowany zostaje właściwy fragment kodu w zależności od tego co ustawiłeś w trackerze.

    Dodatkowo minimalizuje czasy pomiędzy zapisami do POKEY#0 i POKEY#1 tak jak to robił Jaskier w Theta Music Composer.

    ;* STEREOMODE	equ 0..3			
    ;* ;0 => compile RMTplayer for 4 tracks mono
    ;* ;1 => compile RMTplayer for 8 tracks stereo
    ;* ;2 => compile RMTplayer for 4 tracks stereo L1 R2 R3 L4
    ;* ;3 => compile RMTplayer for 4 tracks stereo L1 L2 R3 R4


    ...
    ...
    ...

    SetPokey
    IFT STEREOMODE==1 ;* L1 L2 L3 L4 R1 R2 R3 R4
    ldy #$ff
    v_audctl2 equ *-1
    lda trackn_audf+0+4
    ldx trackn_audf+0
    xstastx01 sta $d210
    stx $d200
    lda trackn_audc+0+4
    ldx trackn_audc+0
    xstastx02 sta $d211
    stx $d201
    lda trackn_audf+1+4
    ldx trackn_audf+1
    xstastx03 sta $d212
    stx $d202
    lda trackn_audc+1+4
    ldx trackn_audc+1
    xstastx04 sta $d213
    stx $d203
    lda trackn_audf+2+4
    ldx trackn_audf+2
    xstastx05 sta $d214
    stx $d204
    lda trackn_audc+2+4
    ldx trackn_audc+2
    xstastx06 sta $d215
    stx $d205
    lda trackn_audf+3+4
    ldx trackn_audf+3
    xstastx07 sta $d216
    stx $d206
    lda trackn_audc+3+4
    ldx trackn_audc+3
    xstastx08 sta $d217
    stx $d207
    lda #$ff
    v_audctl equ *-1
    xstysta01 sty $d218
    sta $d208
    ELI STEREOMODE==0 ;* L1 L2 L3 L4
    ldy #$ff
    v_audctl equ *-1
    lda trackn_audf+0
    ldx trackn_audc+0
    sta $d200
    stx $d201
    lda trackn_audf+1
    ldx trackn_audc+1
    sta $d200+2
    stx $d201+2
    lda trackn_audf+2
    ldx trackn_audc+2
    sta $d200+4
    stx $d201+4
    lda trackn_audf+3
    ldx trackn_audc+3
    sta $d200+6
    stx $d201+6
    sty $d208
    ELI STEREOMODE==2 ;* L1 R2 R3 L4
    ldy #$ff
    v_audctl equ *-1
    lda trackn_audf+0
    ldx trackn_audc+0
    sta $d200
    stx $d201
    sta $d210
    lda trackn_audf+1
    ldx trackn_audc+1
    sta $d210+2
    stx $d211+2
    lda trackn_audf+2
    ldx trackn_audc+2
    sta $d210+4
    stx $d211+4
    sta $d200+4
    lda trackn_audf+3
    ldx trackn_audc+3
    sta $d200+6
    stx $d201+6
    sta $d210+6
    sty $d218
    sty $d208
    ELI STEREOMODE==3 ;* L1 L2 R3 R4
    ldy #$ff
    v_audctl equ *-1
    lda trackn_audf+0
    ldx trackn_audc+0
    sta $d200
    stx $d201
    lda trackn_audf+1
    ldx trackn_audc+1
    sta $d200+2
    stx $d201+2
    lda trackn_audf+2
    ldx trackn_audc+2
    sta $d210+4
    stx $d211+4
    sta $d200+4
    lda trackn_audf+3
    ldx trackn_audc+3
    sta $d210+6
    stx $d211+6
    sta $d200+6
    sty $d218
    sty $d208
    EIF
    rts
    • 39: CommentAuthorwieczor
    • CommentTime17 May 2014
     
    No ja wiem że zawiera kompilację warunkową - mam na myśli już skompilowany kod. Ale widzę co tu jest zrobione. Faktycznie zapisów do drugiego pokeya praktycznie nie słychać jak go nie ma.
    • 40: CommentAuthorseban
    • CommentTime17 May 2014
     
    Nie bardzo rozumiem dlaczego to zostało tak zrobione i nikt nie chciał wykrywać obecności drugiego POKEY-a w playerze, przecież nie jest to skomplikowane i nie zajmuje hektarów kodu. Gdy nie ma drugiego POKEY-a nie powinno się pisać bo po pierwsze zajmuje to niepotrzebne cykle, a po drugie twierdzę ze nawet takie szybkie zapisy negatywnie wpływają na jakość dźwięku.
    • 41: CommentAuthorwieczor
    • CommentTime17 May 2014
     
    Ja ze swoim uchem nic nie zauważyłem, a jednak zauważam różnicę kiedy literalnie to samo pisane jest do dwóch chipów, nawet w RMT gdzie czasy są zminimalizowane. Pojawia się efekt pseudo-stereo - słychać minimalnie inaczej, zwłaszcza na basach.

    A co do wykrywania to jest to dość racjonalne - skoro i tak zakładasz opcję dźwięku stereo, to w przypadku braku stereo te cykle i tak są zbędne - wykorzystasz je jakoś? Jeśli tak to ci ze stereo coś stracą :) A wykrycie pochłonie dodatkowe cykle więc uznano, że skórka nie warta wyprawki - uproszczenie uznano za lepsze :)
    • 42: CommentAuthorseban
    • CommentTime17 May 2014 zmieniony
     
    no wykrywa się raz przy jsr player_init, i robi się samo modyfikację kodu player-a. Ale fakt, jak muzyk planował że muza będzie stereo to jej "monfonizowanie" nie ma najmniejszego sensu... no chyba że można zrobić to z głową :)

    W przypadku Overmind mieliśmy doczynienia z sytuacją odwrotną... muza była mono i musieliśmy dodać jej przestrzeni gdy wykryte zostało stereo :) sposobów było kilka... delay, panning, volume mixing i wszelakie możliwe kombinacje tego ;)
    • 43: CommentAuthorwieczor
    • CommentTime17 May 2014 zmieniony
     
    No ja muzę monofonizuję akurat - tzn. ta sama muza bez drugiego pokeya ma brzmieć dobrze i kompletnie :) Tzn. nie dopuszczam dwóch osobnych wersji zresztą to nie ma sensu - wykorzystywanie lewego i prawego kanału indywidualnie powoduje ping-pong jak na Amidze, więc używam go do pogłębienia - bez drugiego pokeya po prostu brzmienie jest płytsze i nie ma takiej przestrzeni. Poza tym więcej z tym by było roboty, a uzytkowników mono jednak nie powinno sie ignorować. Jedyny moduł który grał "indywidualnie" na pokeyach i brzmiało to fajnie to było coś X-raya - musiałbym znaleźć, na samym początku było skakanie po kanałach.

    Mi chodziło bardziej o to że tych cykli nie ma co oszczędzać :) A dzięki temu można sobie przełączyć stereo/mono w locie i działa (nie dotyczy Altirry :( tam po przełączeniu cały dźwięk się kaszani niezależnie od playera i trzeba restartować emulator)
  5.  
    Pytanie poboczne: co to jest za muzyczka bezpośrednio poprzedzająca Stickmana w Overmind? Chodzi mi o tę z migającego ekranu ładowania.

    Zamieszczam mały wycinek dla ułatwienia.
    • 45: CommentAuthorblanketman
    • CommentTime18 Oct 2014
     
    @mgr_inz_rafal

    • 46:
       
      CommentAuthormiker
    • CommentTime18 Oct 2014
     
    Mi się jednak wydaje, że to oryginalna kompozycja X-Ray'a. W razie czego zainteresowany może to potwierdzić/zaprzeczyć. :)
    • 47: CommentAuthorblanketman
    • CommentTime18 Oct 2014
     
    Fakt... zerknąłem na daty powstania. :-p
    • 48: CommentAuthorwieczor
    • CommentTime18 Oct 2014
     
    Znowu słoń uszy podeptał :) Przecież to są dwa różne utwory, rytm jest podobny :)
    • 49:
       
      CommentAuthormgr_inz_rafal
    • CommentTime18 Oct 2014 zmieniony
     
    A wiecie któren to .SAP? Nie mogę namierzyć...

    PS. X-Ray ma niesamowite nazwy songów. Inspirujące :)

    PS2. Heh, ten gostek z teledysku to kobitka. Dobrze, że sprawdziłem, bo bym walnął gafę :)
    • 50:
       
      CommentAuthormiker
    • CommentTime19 Oct 2014
     
    "Black Flock" z katalogu "Bienias Adam" -> ->link<-
    Rzeczona sekwencja wchodzi na końcu, jak w demku. :)