Programowanie: Odtwarzanie sampli

From Atariki

(Różnice między wersjami)
Jump to: navigation, search

Mono (Dyskusja | wkład)
(tradycyjne odtwarzanie sampli)
Next diff →

Wersja z dnia 21:54, 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

Dysponując próbką w młodszej połówce rejestru indeksowego (w poniższym przykładzie X) można zastosować analogiczną metodę

  lda convtabl,x
  sta AUDCx
  ...

convtabl:
:256 .byte (# & $F) | $10
Personal tools