1

Temat: POKEY, odmierzanie czasu

mam polaczone generatory i ustawiona czestotliwosc 15kHz (%00011001 w AUDCTL).

jakie wartosci wpisac do AUDF4 i AUDF3 aby odliczyc 1/23.4 sekundy dla PAL i NTSC ?

http://atari.pl/hsc/ad.php?i=1.

2

Odp: POKEY, odmierzanie czasu

http://atariki.krap.pl/index.php/NTSC_vs_PAL
http://atariki.krap.pl/index.php/Rejestry_POKEY-a

Edit: Mam nadzieję, że masz świadomość iż:
1. Każde przerwanie obsługiwane jest PO ZAKOŃCZENIU bieżącego cyklu rozkazowego (a rozkaz potrafi trwać 2..7 cykli).
2. Zapis do WSYNC BLOKUJE PROCESOR a więc i moment przyjęcia przerwania do 105 cyklu podczas generowania linii.
3. Ponieważ ANTIC jest procesorem nadrzędnym każdy cykl jego dostępu do pamięci zablokuje dostęp do pamięci procesora (albo pracę procesora - nie jestem tego 100% pewny, trzeba by to uściślić).
Jeśli chcesz więc precyzyjnie odpalać przerwania to masz możliwość synchronizowania startu licznika (zapis do WSYNC i do STIMER), no a później trzeba by precyzyjnie kontrolować co robi processor i ANTIC i tak sobie ułożyć program, żeby przerwanie było przyjmowane bez różnych za każdym razem opóźnień związanych z zakończeniem wykonywania rozkazu. A jeśli precyzyjnie nie ma być no to problem z głowy i nie ma co myśleniem zbytnim głowy psować.

Ostatnio edytowany przez mono (2014-05-23 16:08:30)

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

3

Odp: POKEY, odmierzanie czasu

dzieki.

cos mi nie gra jak trzeba, chce wyeliminowac blad w obliczeniach, czy te wartosci to:
PAL: $299
NTSC: $29F

???

http://atari.pl/hsc/ad.php?i=1.

4

Odp: POKEY, odmierzanie czasu

Mi wyszło odpowiednio  $014E i $013F
Więc któś z nas ma błąd :(

"tatusiu zobacz, narysowałam tobie takie same coś jak na twojej koszulce" 
https://github.com/willyvmm/mouSTer
jmp $e477

5

Odp: POKEY, odmierzanie czasu

Hej!

A mi wychodzi:

331 ($14B) dla PAL ( 23.4285391 Hz )
334 ($14E) dla NTSC ( 23.4324776 Hz )

10 CLK=15556.55:REM PAL
11 CLK=15699.76:REM NTSC
15 F=23.4
20 N=(CLK/(F*2))-1
25 N=INT(N):? "N=";N
30 F=CLK/(2*(N+1))
35 ? F;" Hz"

Ostatnio edytowany przez seban (2014-05-23 19:32:45)

6

Odp: POKEY, odmierzanie czasu

Czeski błąd wpisałem 24,3 jak obliczałem PAL i do tego zamieniłem wartości  dla PAL i NTSC :(

Tym razem wyszło mi dokładnie tak samo.

"tatusiu zobacz, narysowałam tobie takie same coś jak na twojej koszulce" 
https://github.com/willyvmm/mouSTer
jmp $e477

7

Odp: POKEY, odmierzanie czasu

nie zgadza mi sie... bardziej :/

---
w takim razie metode mam do d....

Ostatnio edytowany przez xxl (2014-05-24 08:04:17)

http://atari.pl/hsc/ad.php?i=1.

8

Odp: POKEY, odmierzanie czasu

PAL:
1 / 23.4 sekundy = 1773447 / 23.4 = 75788 cykli
75788 / 114 = 665 skanlinii
Trzeba wpisać 664: $98 do AUDF3 i 2 do AUDF4.

NTSC:
1 / 23.4 sekundy = 1789772.5/23.4 = 76486 cykli
76486 / 114 = 671 skanlinii
Trzeba wpisać 670: $9F do AUDF3 i 2 do AUDF4.

https://www.youtube.com/watch?v=jofNR_WkoCE

9

Odp: POKEY, odmierzanie czasu

dzieki, zauwazylem ze w okolicach zaokraglen mam blad bo przy wielokrotnosciach "obliczanych z wyniku" wszystko sie rozjechalo...

efekt:
https://www.youtube.com/watch?v=tEJegdZb6AQ

uzylem jenostki czasu 1/23.5 - najmniejsz blad zaokraglen (chyba... chyba ze jeszcze mam cos nie tak)

http://atari.pl/hsc/ad.php?i=1.

10

Odp: POKEY, odmierzanie czasu

@Fox: w takim razie to co jest w Atariki:

http://atariki.krap.pl/index.php/Rejestry_POKEY-a

dokładnie chodzi o to:

dla zegara wejściowego o częstotliwości 1/28 lub 1/114 częstotliwości głównej: F = CLOCK/(2*(N+1)). 

okazuje się bzdurą?

--------------------> EDIT <--------------------

Ok, zrobiłem mały test... generalnie częstotliwość generowania IRQ  przez POKEY w tym wypadku jest równa:

F=CLOCK/(N+1) ... czy ma być +1 jeszcze dokładnie nie sprawdziłem... poniżej kod... oscylogramy za chwilę jak znajdę soft do mojego zabytkowego oscyloskopu.

    org    $2000

frq equ    $14b

st  sei
    inc    $d40e
    ldx    $d40b
    bne    *-3
    stx    $d400
    dex
    txs
    dex
    stx    $d301

    ldx    <irq
    ldy    >irq
    stx    $fffe
    sty    $ffff

    lda    #$03
    sta    $d20f
    
    lda    #%00011001
    sta    $d208

    ldx    <frq
    ldy    >frq
    stx    $d204
    sty    $d206

    cli

    lda    #$04
    sta    $d20e

    lda    $d302
    and    #[$04^$ff]
    sta    $d302
    
    ldx    #%00000001
    stx    $d300
    
    ora    #$04
    sta    $d302

    lda    #$a8
    sta    $d207

    jmp    *


irq    pha

;e   lda    #$01
;    sta    $d300
;    eor    #$01
;    sta     e+1
;    asl    @
;    asl    @
;    asl    @
;    sta    $d01f

    lda    #$01
    sta    $d300
:64 sta    $d40a
    lda    #$00
    sta    $d300


    lda    #$00
    sta    $d20e

    lda    #$04
    sta    $d20e

    pla
    rti

    run    st

Ostatnio edytowany przez seban (2014-05-24 15:09:25)

11

Odp: POKEY, odmierzanie czasu

W Atariki chodzi o częstotliwość dźwięku prostokatnego - potrzebne są dwa tykniecią na okres.

https://www.youtube.com/watch?v=jofNR_WkoCE

12

Odp: POKEY, odmierzanie czasu

@Fox... jest dokładnie tak jak piszesz, zapomniałem że na wyjściu każdego z kanałów jest zapętlony przerzutnik "D" :-)

I poniżej obiecane screeny z oscyloskopu i kodu który wyżej wkleiłem, legenda:

ch#1) [przebieg w kolorze żółtym] wyjście audio POKEY-a ---> częstotliwość generowana przez POKEY na wyjściu audio.

ch#2) [przebieg w kolorze cyjan] wyjście PIA ---> częstotliwość występowania IRQ (bit #0 przestawiony na wyjście, pochylone zbocza spowodowane przez filtr na płycie Atari)

AUDUF=$0000
http://seban.slight.pl/aa/IRQ_N%3D%24000.png

AUDUF=$0001
http://seban.slight.pl/aa/IRQ_N%3D%24001.png

AUDUF=$0002
http://seban.slight.pl/aa/IRQ_N%3D%24002.png

AUDUF=$0003
http://seban.slight.pl/aa/IRQ_N%3D%24003.png

AUDUF=$014B
http://seban.slight.pl/aa/IRQ_N%3D%2414B.png

ps) pomiary częstotliwości pokazane przez oscyloskop należy traktować z pewną rezerwą :) ot feler tego modelu/firmware przy niskich częstotliwościach :)

Ostatnio edytowany przez seban (2014-05-24 18:31:10)