Programowanie: Odtwarzanie sampli
From Atariki
Wersja z dnia 21:54, 7 maj 2018 Mono (Dyskusja | wkład) (tradycyjne odtwarzanie sampli) ← Previous diff |
Wersja z dnia 22:00, 7 maj 2018 Mono (Dyskusja | wkład) (stala ilosc cykli) Next diff → |
||
Linia 48: | Linia 48: | ||
</pre> | </pre> | ||
- | Dysponując próbką w młodszej połówce rejestru indeksowego (w poniższym przykładzie X) można zastosować analogiczną metodę | + | Jeśli z jakichś powodów nie można użyć akumulatora a dysponujemy próbką w młodszej połówce rejestru indeksowego (w poniższym przykładzie X) można zastosować analogiczną metodę |
<pre> | <pre> | ||
- | lda convtabl,x | + | ldy convtabl,x |
- | sta AUDCx | + | sty AUDCx |
... | ... | ||
Linia 57: | Linia 57: | ||
:256 .byte (# & $F) | $10 | :256 .byte (# & $F) | $10 | ||
</pre> | </pre> | ||
+ | Aby zyskać pewność, że procedura zawsze będzie się wykonywać stałą liczbę cykli należy tablice umieścić na granicy strony. | ||
[[Kategoria:Programowanie Atari 8-bit]] | [[Kategoria:Programowanie Atari 8-bit]] | ||
[[Kategoria:Niezbędnik kodera]] | [[Kategoria:Niezbędnik kodera]] |
Wersja z dnia 22:00, 7 maj 2018
Odtwarzanie sampli możliwe jest poprzez bezpośrednie sterowanie wychyleniem membrany w dowolnym rejestrze AUDCx.
Włączenie trybu bezpośredniego sterowania membraną odbywa się przez ustawienie bitu 4. Bity odpowiadające za głośność (0..3) odpowiadają wtedy za wychylenie membrany: $0 - bez wychylenia, $F - maksymalne wychylenie.
$F : == $E : == $D : == $C : == $B : == $A : == $9 : == $8 : == $7 : == $6 : == $5 : == $4 : == $3 : == $2 : == $1 : == $0 +==------------------------------
Przetworniki DAC dla każdego kanału POKEY-a mają liniową charakterystykę więc nie jest potrzebne dodatkowe przetwarzanie wartości sampla.
Mając więc w młodszej połówce akumulatora wartość próbki wystarczy:
ora #$10 sta AUDCx
Jeśli próbka znajduje się w starszej połówce akumulatora można:
sec ror ror ror ror sta AUDCx
co można nieco zoptymalizować za pomocą tablicy konwersji (sample powinien wtedy znajdować się w górnej połówce rejestru indeksowego X)
lda convtabh,x sta AUDCx ... convtabh: :256 .byte (# >> 4) | $10
Jeśli z jakichś powodów nie można użyć akumulatora a dysponujemy próbką w młodszej połówce rejestru indeksowego (w poniższym przykładzie X) można zastosować analogiczną metodę
ldy convtabl,x sty AUDCx ... convtabl: :256 .byte (# & $F) | $10
Aby zyskać pewność, że procedura zawsze będzie się wykonywać stałą liczbę cykli należy tablice umieścić na granicy strony.