Programowanie: Odtwarzanie sampli
From Atariki
Wersja z dnia 22:01, 7 maj 2018 Mono (Dyskusja | wkład) (membrana glosnika) ← Previous diff |
Wersja z dnia 22:02, 7 maj 2018 Mono (Dyskusja | wkład) (styl) Next diff → |
||
Linia 38: | Linia 38: | ||
</pre> | </pre> | ||
- | co można nieco zoptymalizować za pomocą tablicy konwersji (sample powinien wtedy znajdować się w górnej połówce rejestru indeksowego X) | + | co można nieco zoptymalizować za pomocą tablicy konwersji (kiedy przykładowy sample znajduje się w górnej połówce rejestru indeksowego X) |
<pre> | <pre> | ||
lda convtabh,x | lda convtabh,x |
Wersja z dnia 22:02, 7 maj 2018
Odtwarzanie sampli możliwe jest poprzez bezpośrednie sterowanie wychyleniem membrany głośnika 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 (kiedy przykładowy sample znajduje 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.