Dyskusja:Programowanie: Detekcja stereo

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 12:54, 27 paź 2011
Xxl (Dyskusja | wkład)

← Previous diff
Wersja z dnia 13:43, 27 paź 2011
0xF (Dyskusja | wkład)
(tłumaczę o co mi chodziło)
Next diff →
Linia 70: Linia 70:
Obawiam się Seban, że podobnie jak poprzednicy nie zrozumiałeś mojej poprawki. Sprawdź, nie tylko jest krótsza ale i szybsza - pętla jest przerywana. [[Użytkownik:Xxl|Xxl]] 14:54, 27 paź 2011 (CEST) Obawiam się Seban, że podobnie jak poprzednicy nie zrozumiałeś mojej poprawki. Sprawdź, nie tylko jest krótsza ale i szybsza - pętla jest przerywana. [[Użytkownik:Xxl|Xxl]] 14:54, 27 paź 2011 (CEST)
 +
 +:Seban: jednak nie zrozumiałeś. Poruszyłem dwie kwestie:
 +
 +:1. Procka XXLa jest poprawna i szybsza. Jedyny mankament to, że zwraca odwrotny wynik, niż pozostałe procki.
 +
 +:2. Zaproponowałem jeszcze inną technikę - przy pomocy rejestrów POT. Zwróciłem uwagę, że "rozwlekłość" procedury Sebana wynika z programowania przerwań, a KMK i XXL z konieczności wielokrotnego sprawdzenia RANDOM. Być może "technika POT" byłaby krótsza. Jednak wycofuję się z tego pomysłu, bo co, jeśli podłączone są wiosełka lub coś innego (w 1200XL podobno jumpery) ?
 +
 +:[[Użytkownik:0xF|0xF]] 15:43, 27 paź 2011 (CEST)

Wersja z dnia 13:43, 27 paź 2011

A może dałoby się zrobić to inaczej:

      ldx #$00
      stx $d20f     ;halt pokey 0
      stx $d21f     ;halt pokey 1
      lda #$03
      sta $d21f     ;release pokey 1

      lda $d20a     ;see if pokey 0 is halted ($d20a = $ff)
?loop and $d20a
      inx
      bne ?loop

      ldy #$03
      sty $d20f

      cmp #$ff
      bne ?mono

      inx

?mono ...           ;X=0 - mono
                    ;X=1 - stereo

? Procedura jest prostsza i krótsza niż u Sebana, oraz nie używa przerwań, ale nie bardzo mam na czym sprawdzić, czy to działa. KMK 16:43, 19 paź 2011 (CEST)

EDIT: dalsze skrócenie, do 32 bajtów. Na emulatorze działa. KMK 17:15, 19 paź 2011 (CEST)

Będzie działać na real sprzęcie. Sprawdziłem czy pokey w reset daje $FF. Dokładnie tak do działa. Pomysł bardzo fajny i o wiele prostszy niż zabawa z IRQ. --Seban/SLIGHT 20:28, 20 paź 2011 (CEST)


moze w ten sposob?

detect_stereo
      ldx #$00
      stx $d20f     ;halt pokey 0
      stx $d21f     ;halt pokey 1
      ldy #$03
      sty $d21f     ;release pokey 1

      lda #$ff
?loop dex
      beq ?stereo 
      cmp $d20a ;see if pokey 0 is halted ($d20a = $ff)
      beq ?loop
?stereo
      sty $d20f
                    ;Results:
                    ;X = 0  - stereo
                    ;X !=0  - mono

Xxl 16:21, 25 paź 2011 (CEST)

Uczcijmy to minutą ciszy. :) KMK 19:47, 25 paź 2011 (CEST)

kolejna cykliczna "adekwatna a nawet gorsza reakcja" Drac030 :) Xxl 21:45, 25 paź 2011 (CEST)

Najlepiej jest, kiedy właśnie tak myślisz. Nie krępuj się zatem :) KMK 21:59, 25 paź 2011 (CEST)

Niestety zmienia "API" w nieintuicyjny sposób (chyba, że nazwiemy funkcję "is_mono"). W rozwiązaniu Sebana kosztuje bajty ustawienie przerwań, a potem posprzątanie po nich. W rozwiązaniu KMK kosztuje to, że jeden $FF w RANDOM jeszcze o niczym nie świadczy. Jeśli dalej chcemy ciąć bajty, to można spróbować POTx - np. w jednym POKEYu odpalić szybkie skanowanie, a w drugim wolne. Jeśli szybkie włączymy w drugim POKEYu, a potem wolne w podstawowym, to nawet nie trzeba potem sprzątać. 0xF 12:34, 26 paź 2011 (CEST)

Na POTach test stereo robi SysInfo. I to chyba działa, nie słyszałem narzekań. KMK 13:08, 26 paź 2011 (CEST)

@fox: ale przecież KMK nie odczytuje raz $d20a... odczytuje to 256 razy, jak się którykolwiek bajt trafi nie $ff to zostanie to właśnie and-em wykryte. Moim zdaniem to prosta i czytelna metoda ;) Będzie działać na 100% :) --Seban/SLIGHT 13:31, 27 paź 2011 (CEST)

@fox #2: a dobra, nie doczytałem. Znaczy nie zrozumiałem za pierwszym razem o co Fox-owi chodziło. Fox tłumaczył że u KMK właśnie 256-krotnie AND-owanie daje pewność, w przeciwieństwie do procki XXL-a ;-) To była raczej próba oświecenia XXL-a przez Fox-a :P --Seban/SLIGHT 13:33, 27 paź 2011 (CEST)

Obawiam się Seban, że podobnie jak poprzednicy nie zrozumiałeś mojej poprawki. Sprawdź, nie tylko jest krótsza ale i szybsza - pętla jest przerywana. Xxl 14:54, 27 paź 2011 (CEST)

Seban: jednak nie zrozumiałeś. Poruszyłem dwie kwestie:
1. Procka XXLa jest poprawna i szybsza. Jedyny mankament to, że zwraca odwrotny wynik, niż pozostałe procki.
2. Zaproponowałem jeszcze inną technikę - przy pomocy rejestrów POT. Zwróciłem uwagę, że "rozwlekłość" procedury Sebana wynika z programowania przerwań, a KMK i XXL z konieczności wielokrotnego sprawdzenia RANDOM. Być może "technika POT" byłaby krótsza. Jednak wycofuję się z tego pomysłu, bo co, jeśli podłączone są wiosełka lub coś innego (w 1200XL podobno jumpery) ?
0xF 15:43, 27 paź 2011 (CEST)
Personal tools