Programowanie: Odtwarzanie sampli

From Atariki

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

Personal tools