Programowanie: Odtwarzanie sampli

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
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.

Personal tools