Programowanie: Odtwarzanie sampli: Różnice pomiędzy wersjami
tradycyjne odtwarzanie sampli |
stala ilosc cykli |
||
| Linia 48: | Linia 48: | ||
</pre> | </pre> | ||
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> | ||
ldy convtabl,x | |||
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 8 maj 2018, 00:00
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.