2,351

(23 odpowiedzi, napisanych Fabryka - 8bit)

Po analizie playerków w wersji 07 i 08 widzę, że:
1. Wersja 07 obsługuje:
- łączenie kanałów (autctl w patternie),
- zegar bazowy 1.77MHz dla #1 i #3 (ustawiany za pomocą yx w edytorze obwiedni częstotliwościowej, gdzie y jest dowolną nieparzystą wartością).
2. Wersja 08 obsługuje:
- filtr w #2 sterowany #4 włączony na stałe i używany do dudnień - wartość z #2 jest zmniejszana o 1 i wstawiana do #4,
- zniekształcenie instrumentu $Cx włącza pierwszą tabelę basów,
- zniekształcenie instrumentu $6x włącza drugą tabelę basów,
- nie ma brzmień 2-kanałowych (aczkolwiek kanały można łączyć w AUDCTL),
- zegar bazowy 1.77MHz dla #1 i #3 (ustawiany za pomocą yx w edytorze obwiedni częstotliwościowej, gdzie y jest dowolną nieparzystą wartością).
Jakby ktoś odkopał pliki dla ST w wersji 08, to mógłbym dodać support do playera.

2,352

(23 odpowiedzi, napisanych Fabryka - 8bit)

Wersja 08 jest tutaj (ST08.COM).
Nie znalazłem instrukcji niestety nigdzie.

2,353

(35 odpowiedzi, napisanych Fabryka - 8bit)

Wersja 0.5 z poprawnym basem Rzóga (do tej pory go wcale nie było).
Załączyłem kawałek Cedynia p.t. HLEJNIA.CMR. Normalny bas można włączyć za pomocą /N żeby zobaczyć różnicę :)
Kierownik może ściągać player stąd.

2,354

(45 odpowiedzi, napisanych Sprzęt - 8bit)

Od czego w ogóle wyszedłem? Od analizy kodu AspeQt, bo tam komunikacja przy niskich indeksach szła pięknie. No i okazało się, że tam w pliku serialport.h jest taki kwiatek:

    static inline int divisorToBaud(int divisor)
    {
        switch (divisor) {
        case 0:
            return 125494;
            break;
        case 1:
            return 110765;
            break;
        case 2:
            return 98797;
            break;
        default:
            return (int)(1781610.0 / (2*(divisor+7)));
        }
    }

1.781610 okazała się przybliżoną średnią między kwarcami PAL i NTSC z FREDDIEm (dokładna wychodzi 1781609.75). Ale poza tym to prędkości dla najwyższych indeksów są jakieś od czapy, bo w żaden sposób nie wychodzą ze znanych wzorów. ALE DZIAŁAJĄ!
Policzyłem w którą stronę jest więc odchylenie no i zacząłem eksperymentować z dobieraniem części ułamkowej do 7 wychodząc z założenia, że dla niskich prędkości błąd będzie nieznaczny i POKEY da sobie radę, a dla wysokich da się ustalić wzór liczący precyzyjnie działającą prędkość. No i metodą kolejnych przybliżeń (kiedy jeszcze działa, a kiedy już nie) wyszło mi 7.13.
Sprawdziłem czy wszystko działa na Atari z PAL, ale nie wiem czy będzie to jeszcze działać dla NTSC. Dla PAL z poziomu PC transmisja działa zarówno kiedy liczę zakładając zegar bazowy PAL, NTSC, NTSC z Freddie, jak i średnią wartość taką jak w AspeQt (PAL - NTSC-Freddie), jak i między dwoma skrajnymi częstotliwościami PAL i NTSC.
Niestety Dracowi już nie zadziałało - dla niego współczynnik wychodzi 7.25.

2,355

(23 odpowiedzi, napisanych Fabryka - 8bit)

Z klawiatury można sterować strzałką za pomocą Shift+kursory i Shift+Return. Shift+P odtwarza muzykę.
Edit: A = Shift+L ładuje song.

2,356

(16 odpowiedzi, napisanych Fabryka - 8bit)

No tak, bo zapomniałem o nrze songu:

MUZ=A:>BIN>FCPLAY.COM,% 1 -1,0,1 /X

2,357

(16 odpowiedzi, napisanych Fabryka - 8bit)

Tam mają być 4 zera. Kanał 1 i 2 jest w zybexie łączony więc warto by go ustawić po jednej stronie :)
Np.

[s]MUZ=A:>BIN>STPLAY.COM,% -1,-1,0,1 /X[/s]

Edit: Nie mogę sprawdzić na Atari bo zwaliło mi się SIO... hehe. Biednemu to wiatr w oczy itd.

Edit 2: No tak - późno już. Myślałem, że piszesz o STplay. Sprawdzę to zaraz.

Edit 3: Na emulu gra na obydwu kanałach równo. Ja żywym Atari nie mam chwilowo stereo jak wiesz...:/

2,358

(23 odpowiedzi, napisanych Fabryka - 8bit)

Kolejny player - tym razem do formatu MUZ/ST7 Sound Trackera Henryka Cygerta (byłoby wcześniej, ale 2 dni walczyłem z głupim bugiem :/).
Player ma te same rzeczy co poprzednie :) Łącznie z odgrywaniem n razy na ramkę (w zasadzie to nie wiem po co).
Nie ma na razie modyfikacji zrobionych przez Stanisława Skwiota.
Nie wyświetla też tempa, bo akurat w tym formacie ta informacja nie jest globalna, ale ustawiana w każdym patternie osobno!
I panorama jest dla 4 kanałów, a nie dla 3 jak w CMC.
Można ściągnąć też stąd.
RUNEXTa ustawiamy:

ST7,A:>BIN>STPLAY.COM,% /X
MUZ,A:>BIN>STPLAY.COM,% /X

A i dzięki wielkie dla Epiego za player oczywiście w wersji źródłowej (jak widać jak ktoś jest utalentowany, to nawet mając źródła narobi głupich bamboli).

Edit: I jak zwykle bugs & requests please!

2,359

(18 odpowiedzi, napisanych Bałagan)

E tam. Napisałbyś Mikey jakiś fajny programik.

Edit: Na ATARI!

2,360

(37 odpowiedzi, napisanych Fabryka - 8bit)

Jasne. Ciekawy pomysł.

2,361

(37 odpowiedzi, napisanych Fabryka - 8bit)

Jeśli w ciągu głównym liczysz współrzędne punktów, a za pomocą cli, sei pozwalasz na wykonanie procedury IRQ, która w międzyczasie nadeszła, to może prościej (i szybciej) byłoby wywołać zwykły jsr bez uruchamienia przerwań. Przyjęcie procedury przerwania wymaga:
- zakończenia bieżącego cyklu rozkazowego (czyli cli) - rozkaz sei pobrany prefetchem podczas wykonania cli zostaje zignorowany,
- przyjęcia przerwania przez cpu - 7 cykli (odłożenie powrotu i rejestru znaczników cpu na stos, wstawienie adresu procedury obsługi przerwania z $fffe do pc),
- przy powrocie z przerwania rti wykona się drugie 7 cykli.
A jsr zajmie 6 cykli + 6 cykli rts, nie komplikuje algorytmu, jest przejrzystsze.

Edit: A jeśli już koniecznie chcesz użyć przerwań, to zrób zamiast cli, sei po prostu brk!

2,362

(37 odpowiedzi, napisanych Fabryka - 8bit)

A nie prościej jsr?

2,363

(37 odpowiedzi, napisanych Fabryka - 8bit)

Tak.

2,364

(37 odpowiedzi, napisanych Fabryka - 8bit)

Nie ma przerwań IRQ, które są chwilowo wysyłane. Żądanie IRQ utrzymuje się do chwili, aż je zgasisz. Przez potwierdzenie odebrania przerwania.

2,365

(37 odpowiedzi, napisanych Fabryka - 8bit)

Procesor zajmuje się wykonywaniem Twojego programu. W momencie kiedy pojawi się sygnał przerwania ustawiana jest odpowiednia flaga żądania obsługi w IRQST. Jeśli znacznik I procesora jest zgaszony (a gasi go rozkaz CLI), wtedy wykonywanie programu jest zawieszane, a CPU zajmuje się wykonaniem procedury obsługi przerwania. Po wykonaniu obsługi wraca z powrotem do wykonywania programu od miejsca w którym mu przerwano.
Jeśli znacznik I jest ustawiony, to CPU nie wykonuje przerwania. Do chwili kiedy nie skasujesz flagi I po prostu przerwania nie będą obsługiwane, ale odpowiednie znaczniki ciągle będą się palić w IRQST. Jak odblokujesz przerwania (CLI), wtedy procesor będzie ciągle przerywał Twój program i będzie obsługiwał przerwania do chwili kiedy w IRQST nie zniknie ostatnie żądanie. Żądanie obsługi przerwania znika kiedy następuje potwierdzenie jego obsługi - odbywa się to przez Twoją procedurę obsługi przerwania w sposób, jaki opisano wyżej - przez zablokowanie danego przerwania w IRQEN i ponowne jego włączenie w tym samym rejestrze.

Edit: Jeśli źródło przerwań zgłasza je często (TIMER1 może to robić BARDZO często - szczególnie z ustawionym zegarem 1.77MHz), może się zdarzyć, że podczas obsługi przerwania nadejdzie nowe żądanie. Wtedy po zakończeniu obsługi bieżącego przerwania CPU od razu wejdzie z powrotem do procedury obsługi przerwania.

2,366

(37 odpowiedzi, napisanych Fabryka - 8bit)

Ale rozkazy SEI i CLI, ani żadna ich kombinacja nie powodują wygenerowania przerwania, a jedynie ustawienie CPU w stan kiedy może już przyjmować zgłoszenia przerwań i je obsługiwać (CLI) lub kiedy ich nie będzie obsługiwać (SEI). Dlatego te przerwania nazywają się maskowalne.

Edit: Wygenerowanie przerwania odbywa się po odliczeniu licznika AUDF1 ($D200) od ustawionej wartości do zera. Rozpoczęcie odliczania następuje po wpisaniu dowolnej wartości do STIMER ($D209).

2,367

(37 odpowiedzi, napisanych Fabryka - 8bit)

Z tego co piszesz nie ustawiasz rejestru zezwolenia na przerwanie IRQEN ($D20E) wartością zezwalającą na przerwanie TIMER1 (#1).
SEI powoduje zablokowanie obsługi przerwań przez CPU, a CLI odblokowanie obsługi ale tylko tych, które są dozwolone w IRQEN. W żadnym wypadku NIE WYGENERUJE żadnego przerwania.
IRQST ($D20E) zawiera flagi informujące, że dane źródło przerwania IRQ jest aktywne. Poprawna obsługa przerwania polega na zablokowaniu i ponownym odblokowaniu przerwania w IRQEN dzięki czemu zniknie flaga zgłoszenia w IRQST.

2,368

(12 odpowiedzi, napisanych Fabryka - 8bit)

Żeby ładnie wyglądało w menu :D

Edit: A naprawdę to chciałem grać na 3 kanałach (a nie na 2), ale nie zdążyłem tego zrobić.

2,369

(12 odpowiedzi, napisanych Fabryka - 8bit)

Metoda jest tutaj.
Moja jest tylko minimalnie zmodyfikowana - wygląda tak:

  sei
  ldx #0        ;reset pokey1
  stx audctl
  ldy #%11
  sty skctl
  lda irqens    ;blokada przerwania licznika 1 pokey1
  and #%11111110
  sta irqen
  stx audf1      ;wyciszenie kanalu 1 pokey1
  stx audc1
  
  lda #%1       ;pokey2: baseclk=15khz
  sta audctl2
  sty skctl2    ;reset pokeya2
  sty audf12    ;po 3 liniach skaningowych powinno zlapac przerwanie jesli mono
  stx audc12    ;cisza
  sta irqen2    ;irq licznika 1 pokeya2
  
  sta stimer2   ;uruchomienie licznikow (niekoniecznie potrzebne)
  bit irqst
  ldx #8
?stsyncloop:
  stx wsync
  dex
  bne ?stsyncloop
  
  and irqst     ;czy wystapilo przerwanie licznika 1 w pokey1
  lsr @
  
  stx audctl2
  sty skctl2
  lda irqens
  sta irqen
  txa
  rol @         ;A=0 mono; A=1 stereo
  cli

Była wykorzystana w msx collection XL Digital i w playerze NEO do utworów konkursowych Yerzmyeya i Pinokia w Głuchołazach 2010.
A nie działa?

2,370

(323 odpowiedzi, napisanych Sprzęt - 8bit)

...karabinem maszynowym. Czyli jednak roboty wykończeniowe.

2,371

(41 odpowiedzi, napisanych Fabryka - 8bit)

Zmodyfikowałem procedurę odgrywającą sample w taki sposób, że nie pozwalam na przejęcie kontroli, ale sam wywołuję odegranie 2 próbek. Zdaję sobie sprawę z tego, że to, co robię na zewnątrz aż do ponownego wywołania procedury może spowodować niestrojenie (właśnie z powodów o których napisałeś - dzięki), ale właściwie to nie ma tam tego wiele - właśnie chodzi mi o potwierdzenie zjawiska.
Procedury testuję sobie na 80 kolumnowym S2: od VBXE a tam ANTIC jest wyłączony, więc efekt powinien być chyba identyczny.

Edit: A nie 24 z 311.5 okresów (dla PAL oczywiście) :D?

2,372

(41 odpowiedzi, napisanych Fabryka - 8bit)

Wersja 0.3 do pobrania (stąd też).
- Zmieniłem player na Jaskrowy. Nie powinno się już tak spektakularnie krzaczyć, jak poprzedni.
- Poprawiłem też synchronizację procedur odgrywających syntetyki i sample dzięki czemu muzyka nie powinna spowalniać.
- Można też zrobić pauzę (poprzednio zaczynało grać od nowa).
Co mi się zdaje, to że sample nie stroją z instrumentami syntetycznymi podczas grania .MD2. Z .MD1 powinno być ok, bo to procedura, która była poprzednio używana. Fajnie gdyby się ktoś kompetentny wypowiedział.
Zapraszam do testowania i zgłaszania uwag oraz błędów.

2,373

(12 odpowiedzi, napisanych Fabryka - 8bit)

Spróbuj tego - powinno działać.

2,374

(12 odpowiedzi, napisanych Fabryka - 8bit)

Oczywiście. Zaraz dorobię.

2,375

(70 odpowiedzi, napisanych Fabryka - 8bit)

Źródło to jeszcze pół biedy. Najczęściej jednak dysponuje się kodem maszynowym hehe.
Z moich ostatnich działań nad playerami źródła miałem tylko do RMT i TMC. Do MPT był co prawda opis, jak wykorzystać ale widać gołym okiem, że nie działa to jak należy :/.

Edit: Doszły jeszcze Jaskrowe źródełka do MPT (już włączone) i CMC (nie zostały wykorzystane) i od Epiego do ST (na razie jeszcze niewykorzystane).