Programowanie: Odtwarzanie sampli
From Atariki
Wersja z dnia 22:00, 7 maj 2018 Mono (Dyskusja | wkład) (stala ilosc cykli) ← Previous diff |
Wersja z dnia 22:01, 7 maj 2018 Mono (Dyskusja | wkład) (membrana glosnika) Next diff → |
||
Linia 1: | Linia 1: | ||
- | Odtwarzanie sampli możliwe jest poprzez bezpośrednie sterowanie wychyleniem membrany w dowolnym rejestrze [[Rejestry POKEY-a#AUDC1|AUDCx]]. | + | Odtwarzanie sampli możliwe jest poprzez bezpośrednie sterowanie wychyleniem membrany głośnika w dowolnym rejestrze [[Rejestry POKEY-a#AUDC1|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. | 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. |
Wersja z dnia 22:01, 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 (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.