program do mierzenia częstotliwości autofire

Forum, na którym możemy pogadać o wszelakim oprogramowaniu na C64, grach, programach.
Wiadomość
Autor
ayran
Posty: 19
Rejestracja: 23 lut 2021, 17:41

program do mierzenia częstotliwości autofire

#1 Post autor: ayran »

Hello,

właśnie kompletuje części do zrobienia joysticka do C64. Mam już zrobiony joystick usb na arduino 32u4.
Ma być autofire regulowany cyfrowo. Czy znacie jakiś program do mierzenia częstotliwości autofire na C64? Chcę ustalić jaka maksymalna częstotliwość ma sens. Poza tym możecie napisać ew. jaką częstotliwość używa joystick który posiadacie?


Awatar użytkownika
rime.
Posty: 156
Rejestracja: 24 sty 2019, 02:52
Grupa: Fancy Rats

Re: program do mierzenia częstotliwości autofire

#3 Post autor: rime. »

Ważny jest też czas trwania wciśnięcia fire, wiele gier używa tzw. debouncingu lub minimalnej przerwy przed zaakceptowaniem kolejnego fire. Najgorsze w autofire jest to, że nie wiesz czy ucelujesz właśnie w ten odpowiedni moment.
Najlepszy tester joyów do sprawdzenia autofire widziałem u larka, i jest... dla Atari. https://www.youtube.com/watch?v=WgiPqFobIxA 10:50
Wszystkie testery jakie widziałem na naszą platformę, nawet te najbardziej rozbudowane jak JoyRide czy Game Controller Tester nie pokazują zachowania fire w przedziale czasowym, a tylko na bieżąco.

radius75
Posty: 102
Rejestracja: 26 sie 2020, 15:56

Re: program do mierzenia częstotliwości autofire

#4 Post autor: radius75 »

Napisałem taki programik w Basic, ale dla "TIME" (TI) który w teorii skacze w górę co 1/60 sekundy jest to jednak za mało precyzyjny pomiar push0 / release1
Może ktoś pokusi się o napisane czegoś podobnego pod asembler, jeśli tam skok "licznika czasu" będzie stabilny i szybszy niż dla TI, będzie to wtedy miało sens.
Bez tytułu.png
Bez tytułu.png (18.66 KiB) Przejrzano 1952 razy

hobocti77x_
Posty: 167
Rejestracja: 15 gru 2020, 10:41

Re: program do mierzenia częstotliwości autofire

#5 Post autor: hobocti77x_ »

Co chcesz aby ten program robil ? Ma podawac czestotliwosc w Hz. czy raczej dlugosci impulsu(fire) plus czas przerwy miedzy kolejnym implusem. Ma to robic ciagle czy jednorazowy pomiar ? Mozna to zrobic wykozystujac jako podstawe czestotliwosc taktowania procesora.

radius75
Posty: 102
Rejestracja: 26 sie 2020, 15:56

Re: program do mierzenia częstotliwości autofire

#6 Post autor: radius75 »

Akurat miałem wenę i trochę czasu, popełniłem taki programik. Przedstawia pracę autofire w dość prosty sposób.
Od biedy da się porównać pracę różnych autofire na porcie 2.
W sumie wydaje mi się że najskuteczniejszy do pomiaru i kalibracji autofire byłby po prostu oscyloskop :)

Kod: Zaznacz cały

;AUTOFIRE TESTER
;
*=$0801 ; line '10 PRINT"{clear}":SYS2080' at $0801
          BYTE      $10,$08,$0A,$00,$99,$22,$93,$22,$3a,$9e
          BYTE      $32,$30,$38,$30,$00,$00,$00
;
*=$0820
          sei                 ;set IRQ
          lda       #<irq
          sta       $0314
          lda       #>irq
          sta       $0315
          cli
;
;
loop      lda       #$00
          sta       $fb       ;reset counters for button released / pressed
;
release   ldy       $fb       ;counter to Y
          lda       $dc00
          and       #$10
          cmp       #$10      ;button released check
          beq       release
;
          lda       #$20      ;for clear screen line char [spc]
          ldx       #$ff
clear1    sta       $0400,x
          dex
          bne       clear1
;
          lda       #$12      ;char 'R'
loop1     sta       $0400,y
          dey
          cpy       #$ff
          bne       loop1
;
          lda       #$00
          sta       $fb       ;reset counters for button released / pressed
;
press     ldy       $fb       ;counter to Y
          lda       $dc00
          and       #$10
          cmp       #$00      ;button pressed check
          beq       press
;
          lda       #$20      ;for clear screen line char [spc]
          ldx       #$ff
clear2    sta       $0518,x
          dex
          bne       clear2
;
          lda       #$10      ;char 'P'
loop2     sta       $0518,y
          dey
          cpy       #$ff
          bne       loop2
;
          jmp       loop
;
;
irq       lda       $fb       ;counter
          cmp       #$ff
          beq       irqend
          inc       $fb
irqend    jmp       $ea31
;
Bez tytułu33.png
Bez tytułu33.png (12.46 KiB) Przejrzano 1800 razy

radius75
Posty: 102
Rejestracja: 26 sie 2020, 15:56

Re: program do mierzenia częstotliwości autofire

#7 Post autor: radius75 »

Pomiar QuickJoyIII SV-123 Supercharger
Pin6 względem Gnd przy załączonym autofire.
Masz tu punkt odniesienia.
IMG_20220122_140506.jpg
IMG_20220122_140506.jpg (3.07 MiB) Przejrzano 1734 razy

ayran
Posty: 19
Rejestracja: 23 lut 2021, 17:41

Re: program do mierzenia częstotliwości autofire

#8 Post autor: ayran »

niech retro będzie z tobą.

hobocti77x_
Posty: 167
Rejestracja: 15 gru 2020, 10:41

Re: program do mierzenia częstotliwości autofire

#9 Post autor: hobocti77x_ »

Napisalem prosty rejestrator. Mozesz go wykozystac. Potrzebujesz do niego jeszcze program do analizy danych ale on moze byc juz w BASIC. Moj program zapisuje w buforze $75fa - $7fff stan przycisku fire.Dane czytasz od adresu $75fa b7,b6,...b0 az do &7fff ale tu tylko 6 bitow b7,b6,b5..b2. Stan FIRE jest probkowany 20526 razy na sek. zalozylem ze czestotliwosc procesora to 985248 Hz/ 1 sek.Bit 1 przycisk zwolniony ,bit 0 wciscniety. A i wazne abys obnizyl gorna granice RAM dla programu w BASIC do adresu $75f9

Kod: Zaznacz cały

                *=$c000
joy   =$dc00       
start =$75fa
                sei
                lda #$10
                sta 2
                lda #<start
                sta save+1
                lda #>start
                sta save+2
                ldx #8
;--------------
loop
                lda 2           ;3
                and joy         ;4
                clc             ;2
                adc #$f0        ;2
                tya             ;2
                rol a           ;2
                tay             ;2
                dex             ;2        /18
                ;--             ;5
                beq *+4         ;2,3
                bne skip        ;2,3
                ldx #8          ;2
                ;--
save            sta $f000       ;4
                inc save+1      ;6
                beq *+2         ;2,3    /5
                bne L0          ;2,3
                inc save+2      ;6
                bpl loop        ;2,3
                bmi finish
skip
                nop             ;10
                nop
                nop
                nop
                nop
                beq *+2         ; /5
                bne L0
L0              nop
                nop
                nop
                bne loop           
finish          cli
                rts

Awatar użytkownika
Steffan
Posty: 854
Rejestracja: 04 maja 2019, 19:43
Grupa: BooM!

Re: program do mierzenia częstotliwości autofire

#10 Post autor: Steffan »

hobocti77x_ pisze:
04 lut 2022, 15:10
...Stan FIRE jest probkowany 20526 razy na sek. zalozylem ze czestotliwosc procesora to 985248 Hz/ 1 sek.Bit 1 przycisk zwolniony ,bit 0 wciscniety. A i wazne abys obnizyl gorna granice RAM dla programu w BASIC do adresu $75f9
Niech mnie ktoś poprawi, ale ja do dzisiaj posiadałem wiedzę, że stan klawiatury/joya CIA odświeża co 1/60 sekundy niezależnie czy to jest maszyna PALowa czy NTSCowa. Co za tym idzie wystarczyłoby próbkować np. z podwójną częstotliwością 120Hz tak aby nie przeoczyć jakiejś zmiany. Może się mylę i chętnie się czegoś nowego dowiem. Piszcie.

pozdrawiam
Steffan
B O O M !
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]

hobocti77x_
Posty: 167
Rejestracja: 15 gru 2020, 10:41

Re: program do mierzenia częstotliwości autofire

#11 Post autor: hobocti77x_ »

Chocby po to aby dowiedziec sie jaki jest wspólczynnik wypelnienia sygnalu
https://upload.wikimedia.org/wikipedia/ ... _label.gif

Awatar użytkownika
rime.
Posty: 156
Rejestracja: 24 sty 2019, 02:52
Grupa: Fancy Rats

Re: program do mierzenia częstotliwości autofire

#12 Post autor: rime. »

Steffan pisze:
04 lut 2022, 21:05
Niech mnie ktoś poprawi, ale ja do dzisiaj posiadałem wiedzę, że stan klawiatury/joya CIA odświeża co 1/60 sekundy
Stan portów joya można odczytać częściej niż raz na ramke, przypuszczam, że ogranicza nas tylko czas propagacji sygnału. Dzięki temu przez port joya można nawet ładować soft: https://youtu.be/eIjwf7xaKrU?t=180 :D
Napisałem coś takiego na szybko:

Kod: Zaznacz cały

begin
	ClearScreen(KEY_SPACE, SCREEN_CHAR_LOC);

	while True do
	begin
		i := peek(^56320, 0) & 16;
		if i = 0 then
		begin
			SCREEN_FG_COL := WHITE;
			SCREEN_BG_COL := WHITE;
		end else
		begin
			SCREEN_FG_COL := BLACK;
			SCREEN_BG_COL := BLACK;
		end;
	end;
end.
Białe tło = fire wciśnięty. Naparzałem w zbindowany fire we Vice by zasymulować autofajer, i udało mi się uchwycić taką ramke:
vice-video-2022020503053282.mp4_snapshot_00.00.156.png
vice-video-2022020503053282.mp4_snapshot_00.00.156.png (15.26 KiB) Przejrzano 1564 razy
Kropki to grey dot bug, ale jak widać zmiana została zarejestrowana przynajmniej 3 razy w tej ramce

Awatar użytkownika
Steffan
Posty: 854
Rejestracja: 04 maja 2019, 19:43
Grupa: BooM!

Re: program do mierzenia częstotliwości autofire

#13 Post autor: Steffan »

Ciekawe. Rime i Hobocti77x_ dzięki za info.
pozdro
Steffan
B O O M !
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]

hobocti77x_
Posty: 167
Rejestracja: 15 gru 2020, 10:41

Re: program do mierzenia częstotliwości autofire

#14 Post autor: hobocti77x_ »

Mysle ze czestotliwosc tak naprawde nie jest ci potrzebna bo co da ci np. informacja ze wynosi ona przykladowo 24.12 Hz. Bardziej moze ci sie przydac czas trwania strzalu i czas miedzy kolejnym strzalem. To moze pozwolic ci znalesc optymalne ustawienia ktore moga byc rozne dla roznych programow.

ODPOWIEDZ