2,376

(37 odpowiedzi, napisanych Fabryka - 8bit)

Jasne. Ciekawy pomysł.

2,377

(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,378

(37 odpowiedzi, napisanych Fabryka - 8bit)

A nie prościej jsr?

2,379

(37 odpowiedzi, napisanych Fabryka - 8bit)

Tak.

2,380

(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,381

(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,382

(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,383

(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,384

(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,385

(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,386

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

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

2,387

(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,388

(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,389

(12 odpowiedzi, napisanych Fabryka - 8bit)

Spróbuj tego - powinno działać.

2,390

(12 odpowiedzi, napisanych Fabryka - 8bit)

Oczywiście. Zaraz dorobię.

2,391

(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).

2,392

(12 odpowiedzi, napisanych Fabryka - 8bit)

No i jest.
Powinien poprawnie odtwarzać RMT 4 i 8 kanałowe. Wykorzystałem procedurę Rastra i przerobiłem ją tak, żeby była w pełni relokowalna. Wymagała też uniezależnienia liczby kanałów w module od tego czy użytkownik deklaruje posiadanie stereo czy nie.
Co to robi:
- detekcja 2 pokeya,
- oblicza ilość songów, patternów, instrumentów,
- pokazuje ilość kanałów.
Jeśli moduł nie był "oczyszczony" (strip), to doczytuje nazwę songu i instrumentów i pokazuje je jeśli było /X.
Zapraszam do gry (można też ściągać stąd).

RUNEXT.CFG można ustawić tak:

RMT,A:>BIN>RMTPLAY.COM,%

tym razem bez szczegółów, bo nazwy 64 instrumentów potrafią skutecznie wszystko zaciemnić.

Edit: Bambol w urlu.

2,393

(16 odpowiedzi, napisanych Fabryka - 8bit)

Zdekompilowałem i poprawiłem tak, żeby grał nie upakowaną muzykę, ale plik źródłowy. Bardzo prosty.

2,394

(16 odpowiedzi, napisanych Fabryka - 8bit)

Gdyby ktoś miał problemy z pobraniem muzyki w formacie Future Composera, to można to zrobić stąd (ten zawiera oryginalny zestaw plików .FC) i stąd.
Ponieważ w drugim ATRze niektóre utwory są uszkodzone proponuję najpierw wyjąć pliki z drugiego, po czym nadpisać je tymi z pierwszego. Z poziomu linuxa można to zrobić np. za pomocą franny:

$ F=$(franny -L plik.atr|grep "\\.FC"|cut -c 5-12); for f in $F; do franny -S -i $f.FC -o $f.FC plik.atr; done

gdzie plik.atr to odpowiednio "Future Composer.atr" i "FUTURCOM.ATR".

2,395

(16 odpowiedzi, napisanych Fabryka - 8bit)

Player kawałków z Future Composera. Features są bazowane na CMC Playerze:
- panorama,
- granie n razy na ramkę (domyślnie 1),
- liczy ilość songów, patternów, instrumentów,
- gra w stereo jak jest,
- powinien kończyć działanie po zakończeniu utworu.
Można go ściągnąć stąd lub stąd.
Zapraszam do gry i proszę o bugs & requests.

Edit: RUNEXTa należy wyedytować podając 3-ZNAKOWE rozszerzenie !!!uzupełniając je spacjami z prawej strony!!!, czyli:

FC ,A:>BIN>FCPLAY.COM,% /X

2,396

(35 odpowiedzi, napisanych Fabryka - 8bit)

Żeby odsłuchać drugi kawałek z Lasermanii wystarczy:

D1:>LASER 2

mając skonfigurowanego RUNEXTa.

2,397

(41 odpowiedzi, napisanych Fabryka - 8bit)

A tam. Procedury odgrywające prawie do wszystkiego są, więc ja to tylko robię tu murzyńską robotę.

2,398

(41 odpowiedzi, napisanych Fabryka - 8bit)

Tak, tak. Nie dotykałem procedury grającej jeszcze - wczoraj strasznie się zagmatwałem z tymi rozszerzeniami.

2,399

(35 odpowiedzi, napisanych Fabryka - 8bit)

Wersja 0.4 z:
- defaultowo szukane rozszerzenia są teraz CMC, CM3, CMR, DMC,
- powinno poprawnie liczyć ilość instrumentów,
- po napotkaniu komendy STOP player kończy działanie,
- rozpoznawana jest sygnatura plików opisywanych przez Pana Henryka Karpowicza w Serious #11 (.CM3). Na początku sygnatury zamiast bajtu $a0 jest $30.
Można też więcej wymusić przełącznikami niż dotychczas (znaczenie niektórych się zmieniło).

Ze względu na przyjęcie różnych defaultów można uprościć wpis w RUNEXT.CFG i wywalić przełączniki :)

Analogicznie, jak w MPT można też pobrać aktualną wersję stąd.

2,400

(41 odpowiedzi, napisanych Fabryka - 8bit)

Wersja 0.2 - zmieniłem domyślne rozszerzenia z MPT/SMP na MPT, MD1, MD2, D15, D8, SMP.
Aktualnie, jeśli poda się niepełną nazwę, program będzie próbował szukać plików z kolejnymi rozszerzeniami: MPT, MD1, MD2.
Jeśli podany plik ma inne rozszerzenie wtedy domyślnie zakłada się, że jest to odpowiednik MD1.
Dla plików MD1 szukane są sample: D15, D8 i SMP; dla MD2 tylko D8 i SMP.
Dla plików SMP przyjmowana jest wysoka jakość (hehe) samplowania 15kHz - można to zmieniać parametrami /L i /H.

Wersja aktualna może być ściągana (jeśli komuś wygodniej) stąd.

Edit: Niegramatyczne konstrukcje.

Edit 2: .D8 zamiast .MD8