<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>https://mirror.atariki.pl/w/index.php?action=history&amp;feed=atom&amp;title=Programowanie%3A_Detekcja_stereo</id>
	<title>Programowanie: Detekcja stereo - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="https://mirror.atariki.pl/w/index.php?action=history&amp;feed=atom&amp;title=Programowanie%3A_Detekcja_stereo"/>
	<link rel="alternate" type="text/html" href="https://mirror.atariki.pl/w/index.php?title=Programowanie:_Detekcja_stereo&amp;action=history"/>
	<updated>2026-10-03T07:30:28Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://mirror.atariki.pl/w/index.php?title=Programowanie:_Detekcja_stereo&amp;diff=3279&amp;oldid=prev</id>
		<title>imported&gt;Atariki recovery: Reconstructed from archived HTML; see provenance manifest</title>
		<link rel="alternate" type="text/html" href="https://mirror.atariki.pl/w/index.php?title=Programowanie:_Detekcja_stereo&amp;diff=3279&amp;oldid=prev"/>
		<updated>2026-10-01T08:51:48Z</updated>

		<summary type="html">&lt;p&gt;Reconstructed from archived HTML; see provenance manifest&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Metoda nr 1 ==&lt;br /&gt;
&lt;br /&gt;
Metoda zaproponowana w wątku [http://atariarea.krap.pl/forum/viewtopic.php?id=5350 Detekcja STEREO - tester] przez [[Seban|Sebana/SLIGHT]] polega na założeniu, że drugi POKEY podłączony w obszarze $D210..$D21F nie ma podłączonych przerwań IRQ. Próba uaktywnienia przerwania licznika 1 drugiego POKEYa nie powinna wygenerować przerwania IRQ. Jeśli przerwanie jednak wystąpiło, można założyć że rozszerzenie nie jest obecne i adresowanie jego obszaru zainicjalizowało w rzeczywistości przerwanie IRQ licznika 1 standardowego POKEYa znajdującego się w obszarze $D200..$D20F (jest to konsekwencją uproszczonej budowy dekodera adresów).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* -----------------------------&lt;br /&gt;
* |second POKEY detect routine|&lt;br /&gt;
* | answer in A register:     |&lt;br /&gt;
* |$00 - absent $80 - present |&lt;br /&gt;
* -----------------------------&lt;br /&gt;
* | code &amp;amp;amp; idea: Seban/SLIGHT |&lt;br /&gt;
* |-+* (c) 1995,96 Slight! *+-|&lt;br /&gt;
* -----------------------------&lt;br /&gt;
&lt;br /&gt;
st  sei              ; disable IRQ&lt;br /&gt;
    inc $d40e        ; disable NMI&lt;br /&gt;
    lda #$03         ; A reg=3&lt;br /&gt;
    sta $d21f        ; init POKEY&lt;br /&gt;
    sta $d210        ; set freq of channel #1 (timer #1)&lt;br /&gt;
    ldx #$00         ; X reg=0&lt;br /&gt;
    stx $d211        ; set volume of channel #1 to zero&lt;br /&gt;
    inx              ; X reg=1&lt;br /&gt;
    stx $d21e        ; enable TIMER1 IRQ&lt;br /&gt;
    ldx $d40b        ; wait for scan line #0&lt;br /&gt;
    bne *-3&lt;br /&gt;
    stx $d219        ; start POKEY TIMERS&lt;br /&gt;
w   ldx $d40b        ; check current scan line&lt;br /&gt;
    bmi ext          ; when &amp;amp;gt;=128 and no IRQ is present second POKEY detected! EXIT!&lt;br /&gt;
    lda #$01         ; check POKEY TIMER1 IRQ status&lt;br /&gt;
    bit $d20e&lt;br /&gt;
    bne w            ; when no IRQ is present... loopback!&lt;br /&gt;
&lt;br /&gt;
                     ; if IRQ is present, it means no second pokey detected!&lt;br /&gt;
                     ; X reg have zero value&lt;br /&gt;
&lt;br /&gt;
ext lda $10          ; restore IRQ mask&lt;br /&gt;
    sta $d20e&lt;br /&gt;
    dec $d40e        ; enable NMI&lt;br /&gt;
    cli              ; enable IRQ&lt;br /&gt;
    txa              ; X to A&lt;br /&gt;
    rts              ; exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Metoda nr 2 ==&lt;br /&gt;
&lt;br /&gt;
Zaproponowana przez [[KMK]] wykorzystuje fakt, że po wprowadzeniu układu POKEY w stan &amp;quot;reset&amp;quot; rejestr [[Rejestry POKEY-a#RANDOM|RANDOM]] osiąga w przeciągu kilku cykli wartość $FF i utrzymuje ją.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
detect_stereo&lt;br /&gt;
      ldx #$00&lt;br /&gt;
      stx $d20f     ;halt pokey 0&lt;br /&gt;
      stx $d21f     ;halt pokey 1&lt;br /&gt;
      ldy #$03&lt;br /&gt;
      sty $d21f     ;release pokey 1&lt;br /&gt;
&lt;br /&gt;
      sta $d40a     ;delay necessary for&lt;br /&gt;
      sta $d40a     ;accelerator boards&lt;br /&gt;
&lt;br /&gt;
      lda #$ff&lt;br /&gt;
?loop and $d20a     ;see if pokey 0 is halted ($d20a = $ff)&lt;br /&gt;
      inx&lt;br /&gt;
      bne ?loop&lt;br /&gt;
&lt;br /&gt;
      sty $d20f&lt;br /&gt;
&lt;br /&gt;
      cmp #$ff&lt;br /&gt;
      bne ?mono&lt;br /&gt;
&lt;br /&gt;
      inx&lt;br /&gt;
&lt;br /&gt;
?mono ...           ;Results:&lt;br /&gt;
                    ;X=0 - mono&lt;br /&gt;
                    ;X=1 - stereo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Metoda nr 3 ==&lt;br /&gt;
&lt;br /&gt;
Zaproponowana przez [[XI|XI/Satantronic]] w 2007 roku i wykorzystana w programie [http://atarionline.pl/v01/index.php?ct=utils&amp;amp;sub=F.%20Diagnostyczne&amp;amp;tg=Stereo%20upgrade%20tester#Stereo%20upgrade%20tester Stereo upgrade tester], a bazująca na tym że do drugiego POKEY-a nie jest podłączona klawiatura, w wyniku czego z [[Rejestry POKEY-a#KBCODE|KBCODE]] będzie zawsze czytana wartość $00. Niestety również pierwszy POKEY zwróci tę samą wartość po resecie aż do chwili kiedy zostanie wciśnięty dowolny klawisz prócz L (który ma właśnie [[Kody klawiszy|kod $00]]), jak i po wciśnięciu klawisza L.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
detect_stereo:&lt;br /&gt;
  lda KBCODE        ;$D209&lt;br /&gt;
  cmp KBCODE+$10    ;$D209+$10&lt;br /&gt;
  rts               ;Z=0 - stereo&lt;br /&gt;
                    ;Z=1 - mono&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategoria:Programowanie Atari 8-bit]]&lt;br /&gt;
[[Kategoria:Niezbędnik kodera]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Atariki recovery</name></author>
	</entry>
</feed>