1

Mam taki pomysł a'propos nie działającej procki detekcji stereo w Yoomp!.

Podeślijcie mi albo wklejcie tu różne procki detekcji stereo jakie znacie. Sklecę programik, który się roześle po świecie, niech ludzie sprawdzą, będziemy wiedzieli wtedy czego warto używać, a co powinno być zabronione.  Myślę, że przyda się to całej scenie.

Najlepiej niech to będą niezależne procedurki, do których można skoczyć przez JSR i zwracające w A wartość 0 (mono) lub 1 (stereo), cobym się nie męczył i nie próbował zrozumieć co i jak :)

A może takie coś już istnieje?

: 404. Stopka not found

2 Ostatnio edytowany przez seban (2007-11-06 12:21:21)

Hej!

To ja się upieram przy wersji ze sprawdzaniem IRQ:

* -----------------------------
* |second POKEY detect routine|
* | answer in A register:     |
* |$00 - absent $80 - present |
* -----------------------------
* | code & idea: Seban/SLIGHT |
* |-+* (c) 1995,96 Slight! *+-|
* -----------------------------

st  sei            ; disable IRQ
    inc $d40e        ; disable NMI
    lda #$03        ; A reg=3
    sta $d21f        ; init POKEY
    sta $d210        ; set freq of channel #1 (timer #1)
    ldx #$00        ; X reg=0
    stx $d211        ; set volume of channel #1 to zero
    inx            ; X reg=1
    stx $d21e        ; enable TIMER1 IRQ
    ldx $d40b        ; wait for scan line #0
    bne *-3
    stx $d219        ; start POKEY TIMERS
w   ldx $d40b        ; check current scan line
    bmi ext        ; when >=128 and no IRQ is present second POKEY detected! EXIT!
    lda #$01        ; check POKEY TIMER1 IRQ status
    bit $d20e        
    bne w        ; when no IRQ is present... loopback!
    
                ; if IRQ is present, it means no second pokey detected!
                ; X reg have zero value
    
ext lda $10        ; restore IRQ mask
    sta $d20e
    dec $d40e        ; enable NMI
    cli            ; enable IRQ
    txa            ; X to A 
    rts            ; exit

A jeszcze jedno w wątku Fandala była mowa o jakimś stereo w cartridge... nie widziałem czegoś takiego nie wiem w jakiej przestrzeni adresowej znajduje się drugi POKEY... ale należy przypuszczać iż wówczas znajduje się w obszarze $d5xx... wtedy ta procedura nie ma szans zadziałać... wykrywanie pokeya w przestrzeni $d5xx być może można by było przeprowadzić metodą którą zaproponował MacGyver. Z tym że w tym wypadku (drugi POKEY na karcie) mamy dodatkową atrakcję o której wspominał Zenon, jak tam fizycznie nic nie będzie podpięte (brak carta) to jest duża szansa iż pojawią się wartości losowe (brak rezystorów podciągających na szynie danych) albo będą tam permanentnie wartości $FF (gdy będą obecne rezystory podciągające magistrale danych). Ta niedogodność opisana powyżej nie istnieje gdy POKEY jest fizycznie montowany w Atari w obszarze $D2xx,  o czym dyskutowałem z Zenonem w wątku wcześniejszym.  Także trzeba by dokładnie taką procedurę sprawdzić na obu przypadkach atarek.


pozdr
Seban

3

No to mamy pierwszą wersję. Ale czekamy na więcej.
http://eru.nutki.com/a8/testereo.xex

Grzybson, jakbyś sprawdził, co toto robi na Twoim kompie, byłoby super.

: 404. Stopka not found

4

Daj prawa do odczytu bo nie można pobrać pliku.

STYMulator JIL ST YM2149 mjuz:k @ gnu/linux
SIUP (SIo2Usb2Pc) - SIO2PC USB Edition
PIN ready logo
3M / InD: ... na kasetach były zabezpieczenia w postaci tzw. "mikropierdnięcie" ...

5

sorki, gotowe

: 404. Stopka not found

6

Komentarze "init POKEY #2" i "set freq of channel #1" wprowadzają w błąd, bo te instrukcje robią co innego. Wartość zwracana dla mono to #$01, przynajmniej na emulatorze (to wygląda na błąd emulatora). Poza tym problemem może być włączenie DLI na końcu.

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

7 Ostatnio edytowany przez seban (2007-11-05 23:17:59)

Hej!

0xF masz rację błędne komentarze poprawiłem :) Co do wartości to sprawdzę na real atari :) pisałem to 1995 roku nie pamiętam już co zwracało :) dam znać jak sprawdzę :)
coś mi się kołacze po głowie iż robiłem:

jsr detect
bmi stereo_present

wiec być może źle opisałem źródła.. jak mówiłem sprawdzę na real atari :)


pozdrawiam
Seban

8

dobrze pamiętasz Seban

    jsr stereo
    bmi present
*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

9

Hej!

Fox napisał/a:

Wartość zwracana dla mono to #$01, przynajmniej na emulatorze (to wygląda na błąd emulatora).

Foxie właśnie sprawdziłem na emulatorze... atari800win Plus 4.0... wartość zwracana w przypadku mono to $00 ($80 w przypadku stereo)
Sprawdziłem również pod atari800-2.0.3-windx... wartość zwracana w przypadku mono to również $00 ($80 w przypadku stereo)
W przypadku 'real Atari' jest dokładnie tak samo, czyli $00 w przypadku mono i $80 w przypadku stereo.

pozdrawiam
Seban

10

1 na emulatorze:

    run    $600
    org    $600
st  sei            ; disable IRQ
    inc $d40e        ; disable NMI
    lda #$03        ; A reg=3
    sta $d21f        ; init POKEY #1
    sta $d210        ; init POKEY #2
    ldx #$00        ; X reg=0
    stx $d211        ; set freq of channel #1
    inx            ; X reg=1
    stx $d21e        ; enable TIMER1 IRQ
    ldx $d40b        ; wait for scan line #0
    bne *-3
    stx $d219        ; start POKEY TIMERS
w   ldx $d40b        ; check current scan line
    bmi ext        ; when >128 and no IRQ is present second POKEY detected! EXIT!
    lda #$01        ; check POKEY TIMER1 IRQ status
    bit $d20e        
    bne w        ; when no IRQ is present... loopback!
    
                ; if IRQ is present, it means no second pokey detected!
                ; X reg have zero value
    
ext lda $10        ; restore IRQ mask
    sta $d20e
    dec $d40e        ; enable NMI
    cli            ; enable IRQ
    txa            ; X to A 
 dta 2
    rts            ; exit

Zwracam uwagę, że $d40b może być blisko przekręcenia na 1 na początku wywołania tej procedury,
więc jedynka może też wystąpić na ataraku w ułamku procenta przypadków.

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

11 Ostatnio edytowany przez seban (2007-11-08 16:01:41)

Hej!

mimo usilnych prób nie udaje mi się osiągnąć wartości 1 na emulatorze :( nie wiem skąd nam wynika różnica w wynikach.
Biorąc pod uwagę twój przypadek występowania wartości 1, jeżeli zastosujesz " BMI stereo_present", problem jedynki pozostaje pomijalny.

sprawdzę jeszcze metodę zaproponowaną przez MacGyvera, na emulatorze zauważyłem dziwne zachowanie drugiego POKEY'a:

 lda #$00
 sta $d20f
 sta $d21f
 tax

loop
 lda $d20a
 sta $bc40,x
 lda $d21a
 sta $bd40,x

 sta $d40a

 inx
 bne loop

 lda #$03
 sta $d20f
 sta $d21f

 jmp *

pierwszy Pokey zwraca wartości 0xFF w stanie init, drugi natomiast wartości 0x00. Sprawdzę jeszcze na real atari w domu, obecnie to wynik z emulatora.

UPDATE:

Foxie jak zwykle miałeś rację :D Zapuściłem coś takiego:

 ldy #0

loop
 
 jsr detect
 sta $BC40,y
 iny
 jmp loop

na emulatorze mamy co drugie wywołanie jedynkę, na real Atari oczywiście też jedynki się zdarzają tyle że bardziej przypadkowo, poniżej screen shoty:

real atari:
http://seban.slight.pl/temp/real_stereo.jpg
emulator:
http://seban.slight.pl/temp/emu_stereo.png


co ciekawe udaje mi się raz na kilka uruchomień w emulatorze tej procedury spowodać zwraca ona same zera :)

pozdrawiam
Seban

12

seban napisał/a:

sprawdzę jeszcze metodę zaproponowaną przez MacGyvera, na emulatorze zauważyłem dziwne zachowanie drugiego POKEY'a: pierwszy Pokey zwraca wartości 0xFF w stanie init, drugi natomiast wartości 0x00.

Drugi POKEY poza dźwiękiem nie jest praktycznie emulowany.

Tak myślałem, coby wspólnymi siłami stworzyć jak najbardziej uniwersalną prockę detekcji POKEYa, która wykrywałaby wiele POKEYów, czy to w $d2xx, czy na carcie. Pomysł był taki, żeby przekazać procedurze potencjalny adres POKEYa, a ona by odpowiedziała na pytanie, czy jest tam POKEY. Niestety to zły pomysł, bo trzeba wykryć różne POKEYe.

Swoją drogą ciekawe, ile osób ma:
- POKEYa na carcie
- automatycznie włączające się stereo
- więcej niż dwa POKEYe
?

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

13

Szczerze mówiąc mam w planach umieszczenie 4 POKEY-ów w atarce (zależy od tego kiedy mi się uda zdobyć dodatkowe POKEY-e), stąd moje "kombinacje" odnośnie wykrywania Stereo. Ale na dzień dzisiejszy nie znam nikogo, kto by posiadał w atarce więcej niż 2 POKEY-e.

14

Autodetekcja jest raczej rozpowszechniona - Pasiu ją robił.

15 Ostatnio edytowany przez seban (2007-11-08 19:36:43)

Hej!

Fox napisał/a:

- automatycznie włączające się stereo

Tym w ogóle nie należy się przejmować, ten układ działa jedynie w torze audio, jeżeli przez jakiś czas panuje cisza na prawym kanale, na ten kanał (prawy) zostaje podany sygnał z lewego POKEY-a, jeżeli sygnał się pojawi na drugim POKEY-u (kanał prawy) to następuje przełączanie tak że na kanale lewym mamy sygnał z oryginalnego POKEY-a, na kanale prawym sygnał z drugiego dołożonego POKEY-a. Z punktu widzenia dekodera adresów i reszty konstrukcji reszta wygląda jak zwykłe klasyczne stereo, z manualnym wyłącznikiem ON/OFF. Zresztą układ Pasia posiada manualny wyłącznik drugiego POKEY-a.

pozdrawiam
Seban

16

MacGyver: o tych twoich planach to jest dość głośno od dobrych 10 lat. :)

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

17

epi: nigdy nie obiecywałem konkretnych terminów ;) co nagle to po diable ;)

18

Xi napisał kolejny tester stereo: http://satantronic.atari.sk/?str=xe_utils

STYMulator JIL ST YM2149 mjuz:k @ gnu/linux
SIUP (SIo2Usb2Pc) - SIO2PC USB Edition
PIN ready logo
3M / InD: ... na kasetach były zabezpieczenia w postaci tzw. "mikropierdnięcie" ...

19

a mi się odechciało...
tylko gadacie i gadacie...

: 404. Stopka not found

20

test Sebana jest dokładniejszy, co tu więcej pisać

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

21 Ostatnio edytowany przez Sc0rpi0 (2007-12-03 15:36:45)

Fox napisał/a:
    ldx $d40b        ; wait for scan line #0
    bne *-3
    stx $d219        ; start POKEY TIMERS

Zwracam uwagę, że $d40b może być blisko przekręcenia na 1 na początku wywołania tej procedury,

Jak sie pozwala atarce na losowość i oszczędza 3 bajty to może być :P

    ldx $d40b
    bpl  *-3
    ldx $d40b        ; wait for scan line #0
    bne *-3
    stx $d219        ; start POKEY TIMERS

Na prawdziwym sprzęcie mimo że linie nie sa podpięte mozna ile wlezie pokeyów sprawdzać
bo stan IRQ się pokaże w rejestrach, tylko trzeba odpowiednio parować sprawdzanie.
Np. POKEY 2 z 1, 3 (jak wykryje 2) sprawdzać z 1 (adresy powtarzane co $20 lub $40),
ale juz 4 trzeba by sprawdzac z 2. Co do nieobecności układu to też można obejść przez
sprawdzanie SKSTAT (mamy możliwość tam wymusić odpowiednie stałe stany),
jeżeli więc będzie się tam zmieniać, albo będzie stały stan ale niezgodny z tym co powinno być
to znaczy, że tam nic nie ma. Czyli mogą być 3 układy nie 4 z dziurami w $30-$3f ;P, załatwia to
też prawie sprawę sprawdzania tego z carta - prawie, bo gorzej jak tam coś jest, ale nie POKEY :P
i na dodatek akurat by się temu czemuś go udało "zaemulować". Tak czy siak mało prawdopodobne.
Przez ustawianie odpowiedniego stanu SKSTAT i sprawdzanie czy się zgadza z tym co ma być
odpowiednio na odpowiednich numerach układów można bez wykorzystywania IRQ sprawdzić
ilosć podpiętego tałatajstwa. Co do emulatora to się na nim nie znam, ale jeżeli faktycznie poza
dzwiękiem nie ma emulacji układów >=2 to będzie niestety kicha.

---==<<Sc0rpi0>>==---

22

Oki, a jeśli już mamy wykryte Stereo - to jaki utwór MPT gra raz jeden kanał, raz drugi - by przetestować co słychać faktycznie na głośnikach. Pod MegaPlayer'em widzę, że każdy utwór gra jednocześnie obydwa kanały....

23

http://madteam.atari8.info/uzytki/mpt2pro.zip

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

24

pajero: MegaPlayer właśnie korzysta z "takiego myka", żeby nie bawić się w detekcję, tylko niezależnie od tego, czy Atarka jest w mono czy w stereo "grało dobrze" - efekt jest taki, że w mono gra jak w mono, w stereo z "echem".