Matriksowy "wygaszacz ekranu" na C64

Szukasz drobnej pomocy przy kodowaniu, albo chcesz przedstawić światu swoją gotową lub w trakcie realizacji produkcję? To właściwy dział.
Wiadomość
Autor
Awatar użytkownika
Operator Teleksu
Posty: 59
Rejestracja: 27 lis 2020, 21:31

Matriksowy "wygaszacz ekranu" na C64

#1 Post autor: Operator Teleksu »

Witajcie,

Chciałbym się pochwalić prostym demem (jeśli można to tak nazwać, bo nie wiem), które ostatnio napisałem.
Jest to można powiedzieć, moje pierwsze podejście do tematu assemblera mos 6502 - tzn. może nie absolutnie
pierwsze, ale pierwsze takie nie całkiem trywialne.

Napiszcie czy jest szansa, że jeszcze będą ze mnie kiedyś ludzie :wink: jeśli udało mi się to napisać.

SYS 2*4096 żeby uruchomić.
Załączniki
matrix.zip
(941 Bajtów) Pobrany 139 razy
Have a nice day!

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

Re: Matriksowy "wygaszacz ekranu" na C64

#2 Post autor: Steffan »

Fajne. Muza plix. Coś pożycz z csdb na testy :)
pozdro
S.
B O O M !
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]

Awatar użytkownika
Operator Teleksu
Posty: 59
Rejestracja: 27 lis 2020, 21:31

Re: Matriksowy "wygaszacz ekranu" na C64

#3 Post autor: Operator Teleksu »

:D Muza by się przydała ale jakby powiedzieć - nie dotarłem jeszcze do rozdziału o SID w książce z której
czerpie wiedzę. Używam tu SID'a do liczb losowych ale to znalazłem w necie prosty na to przepis.
pozdro :)

Edit: kiedyś tam pewnie jeszcze dodam jakąś muzyczkę
Have a nice day!

Awatar użytkownika
carrion
Posty: 2329
Rejestracja: 27 lut 2009, 17:38
Kontakt:

Re: Matriksowy "wygaszacz ekranu" na C64

#4 Post autor: carrion »

hej pewnie już znasz ale tutaj masz masę poradników z kodowania na c64 w asm.
https://codebase64.org/doku.php

jest rozdział jak odgrywać muzyczkę na SIDa zazwyczaj jest to skok inicjacyjny jsr $1000 i potem co ramkę skok do $1003
i tyle!
widzę że w programie nie używasz przerwań i to też dało by się zrobić jeśli twoja pętla główna jest jakoś synchronizowana do kolejnych odświeżeń ekranu to tam po prostu graj muzykę poprzez jsr $1003 (zakładając że plik muzyki jest od $1000.

jak by co to pytaj. pomożemy

a jakiego narzędzia do assemblacji użyłeś?
c64portal.pl, retronavigator.com

Awatar użytkownika
Operator Teleksu
Posty: 59
Rejestracja: 27 lis 2020, 21:31

Re: Matriksowy "wygaszacz ekranu" na C64

#5 Post autor: Operator Teleksu »

dzięki za link, znałem "z widzenia" ale się nie wczytywałem i może stamtąd szybciej się nauczę po trochu
wszystkiego co potrzeba niż z jakiś starych książek na archive.org

Używałem Turbo Assemblera 6.0 - dla większej "zabawy" natywnego, uruchomionego w emulatorze, nie żadnego
cross-asemblera.

O SID'dzie tak jak napisałem, jeszcze kiedyś poczytam, na razie jestem zielony i chciałbym zapytać bo nie wiem
czy dobrze rozumiem co mi carrion próbowałeś wytłumaczyć. Czy powinienem rozumieć, że jakbym wczytał
plik z muzyką do pamięci tak jak każdy program:
LOAD "PLIK",8,1
to mógłbym napisać w BASIC'u coś takiego:
10 SYS 4096
20 SYS 4099
30 GOTO 20
i by mi to odtworzyło muzykę z tego pliku?
Jakby co sorry za dziwne/głupie pytanie ale tak zrozumiałem że wynika z tego co mi opisałeś.
Have a nice day!

Awatar użytkownika
MCN
Posty: 7
Rejestracja: 01 gru 2020, 18:18

Re: Matriksowy "wygaszacz ekranu" na C64

#6 Post autor: MCN »

Operator Teleksu pisze:
08 gru 2020, 09:32
LOAD "PLIK",8,1
to mógłbym napisać w BASIC'u coś takiego:
10 SYS 4096
20 SYS 4099
30 GOTO 20
Pewnie będzie mooooocno spowolnione. Ta procedurka ($1003) powinna być wołana co ramkę, czyli w PAL, 50 razy na sekundę, dlatego najlepiej podpiąć się pod przerwanie rastra.
MCN

Awatar użytkownika
Operator Teleksu
Posty: 59
Rejestracja: 27 lis 2020, 21:31

Re: Matriksowy "wygaszacz ekranu" na C64

#7 Post autor: Operator Teleksu »

MCN pisze:
08 gru 2020, 09:48
Pewnie będzie mooooocno spowolnione. Ta procedurka ($1003) powinna być wołana co ramkę, czyli w PAL, 50 razy na sekundę, dlatego najlepiej podpiąć się pod przerwanie rastra.
Ok, ale to podstawowe założenia, w jaki deseń to działa, jednak rozumiem? Bo rozumie się że to samo bym napisał w
asemblerze i jeszcze trzeba było by spowalniać dodatkowo.

Przerwania to też temat z którego nic nie wiem, ale już mi nie piszcie teraz bo wszystko powoli. Jak kiedyś (może za tydzień a
może za rok jeśli stracę zapał czasami) dodam tą muzykę to się pochwalę w tym samym wątku.
Have a nice day!

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

Re: Matriksowy "wygaszacz ekranu" na C64

#8 Post autor: Steffan »

MCN pisze:
08 gru 2020, 09:48
Operator Teleksu pisze:
08 gru 2020, 09:32
LOAD "PLIK",8,1
to mógłbym napisać w BASIC'u coś takiego:
10 SYS 4096
20 SYS 4099
30 GOTO 20
Pewnie będzie mooooocno spowolnione. Ta procedurka ($1003) powinna być wołana co ramkę, czyli w PAL, 50 razy na sekundę, dlatego najlepiej podpiąć się pod przerwanie rastra.
Wręcz przeciwnie będzie przyspieszone. Daj spowolnienie w linii 25
Zacytuje siebie z inne posta:
Steffan pisze:
04 gru 2020, 14:39
...
Podsumowując:
-odpalasz init (większość zaków ładuje się pod adres $1000 i init ma ten sam adres (tam jest jmp do procedury inita) a potem cyklicznie wywołujesz dane "plajera" (pisze w cudzysłowie bo tak naprawde to nie plajer (np. tak jak to było na Amidze z modułkami) adres np. $1003
Możesz sobie nawet takiego sida (oczywiście bez nagłówka załadować do pamięci i potem odtwarzać przez bajzika. Będzie grało ch...owo i nie w czas (ale do obczajenia wystarczająco) :lol: :lol: :lol: :lol:

Kod: Zaznacz cały

	'zaladuj do komorki 780, numer sub-sida, np. dla pierwszej muzyczki =0
	'wywolanie sys najpierw zaladuje akumulator wartoscia z komorki 780
	'i wykona skok do programu inicjujacego player w ML pod adresem $1000 -> 4096 dziesietnie
	
	0 poke 780,0:sys 4096

	'odswiezaj playera w ML adres: $1003
	
	1 sys 4096+3
	
	'petla opozniajaca, co by nie zap.. grało za szybko
	2 forx=1to9 :next
	
	'i powtorka
	3 goto 1
	
Najpierw napisz kod bejzika, a potem dograj zaka pod $1000. Jak zrobisz odwrotnie, gwarantuje że interpreter bejzika popiepszy pamięć w $1000+ i dupa z grania. Najlepiej zobacz monitorem czy zak tam się załadował po napisaniu kodu.

UWAGA! zak do $1000 bez naglowka oraz dwóch bajtow (adresowych pliku) - czysty kod!

np. Vice monitor pozwala załadować komendą "l" jak dobrze pamiętam (sprawdź w helpie)
...
pozdro
S.
B O O M !
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]

Awatar użytkownika
Nitro
Posty: 1544
Rejestracja: 03 wrz 2008, 20:23
Grupa: Black Sun

Re: Matriksowy "wygaszacz ekranu" na C64

#9 Post autor: Nitro »

Spoko, to też sztuka jeśli zdolności jeszcze nie podszlifowane zrobić coś prostego od strony kodu ale estetycznego.
Dalej taki 'prosty' efekt zajmujący mało RAMu i CPU może posłużyć jako transition pomiędzy bardziej skomplikowanymi partami[które trzeba doładować z dysku w locie] jak będziesz pisał demo.
P.S. Pisanie na C64 zdecydowanie bym sobie odpuścił, chyba, że jakieś bardzo proste eksperymenty. Crossdev dziś to standard.

Awatar użytkownika
Operator Teleksu
Posty: 59
Rejestracja: 27 lis 2020, 21:31

Re: Matriksowy "wygaszacz ekranu" na C64

#10 Post autor: Operator Teleksu »

Nitro pisze:
08 gru 2020, 11:36
P.S. Pisanie na C64 zdecydowanie bym sobie odpuścił, chyba, że jakieś bardzo proste eksperymenty. Crossdev dziś to standard.
Chyba owszem nawet ja sobie odpuszczę, już się zaprzyjaźniłem z monitorem VICE, czas przerzucić się na TMPx albo może
nawet C64 Studio. Ale to, tak na dobry początek, pełen oldskul :)
Have a nice day!

Awatar użytkownika
MCN
Posty: 7
Rejestracja: 01 gru 2020, 18:18

Re: Matriksowy "wygaszacz ekranu" na C64

#11 Post autor: MCN »

Steffan pisze:
08 gru 2020, 10:17
MCN pisze:
08 gru 2020, 09:48
Pewnie będzie mooooocno spowolnione. Ta procedurka ($1003) powinna być wołana co ramkę, czyli w PAL, 50 razy na sekundę, dlatego najlepiej podpiąć się pod przerwanie rastra.
Wręcz przeciwnie będzie przyspieszone. Daj spowolnienie w linii 25
Zacytuje siebie z inne posta:
Kurczę, nie doceniłem szybkości interpretera :oops:
MCN

Awatar użytkownika
Nitro
Posty: 1544
Rejestracja: 03 wrz 2008, 20:23
Grupa: Black Sun

Re: Matriksowy "wygaszacz ekranu" na C64

#12 Post autor: Nitro »

Ja polecam Kick Assembler, nie jest kompatybilny z TASM ale szybko się przestawisz a w przyszłości ogromna dodatkowa funkcjonalność przyda.
http://theweb.dk/KickAssembler/Main.html#frontpage
Edytor na początek dowolny tylko koniecznie zrób sobie skrypt który odpala VICE i ładuje etykiety, u mnie to tak wyglądało:
java -jar c:\kickassembler\kickassembler\kickass.jar %1 -showmem -vicesymbols -aom
@echo off
C:\WinVICE-1.14\WinVICE-1.14\x64.exe -moncommands %2 %3
Jak się kod zacznie rozrastać to możesz wypróbować WUDSN - pełnoprawne IDE, wspiera KickA, ACME i TASS.
Obrazek
https://www.wudsn.com/index.php/ide

Awatar użytkownika
Operator Teleksu
Posty: 59
Rejestracja: 27 lis 2020, 21:31

Re: Matriksowy "wygaszacz ekranu" na C64

#13 Post autor: Operator Teleksu »

Wszyscy tacy pomocni, że pomyślałem zapytam jeszcze o jedną rzecz...

Przeczytałem sobie wątek na forum, który cytował Steffan i mówię - to już wiem jak się zabrać do tego żeby
dodać muzykę do swojego matrixowego programiku. Tylko zaraz przyszło mi do głowy jaki może być jednak
problem z doklejeniem i odgrywaniem czyjejś muzy. Mianowicie używam trzeciego głosu SID'a do generowania
liczb losowych i robię to co każdą klatkę animacji. Melodie które można znaleźć na hvsc.c64.org, nie wiem na
pewno bo nie pisze, ale chyba prawie wszystkie używają wszystkich trzech głosów SID. Więc jakbym zaczął
odgrywać taką melodię to chyba popsułbym sobie generator liczb losowych - albo jakbym nastawiał go z powrotem
co każdą klatkę to zjebałbym odgrywaną melodię. Tak przynajmniej mi się wydaje - napiszcie jeżeli jest metoda
że niekoniecznie.

Zastanawiam się teraz (a może źle myślę z tym co napisałem wyżej) czy powinienem pomyśleć nad napisaniem
jakiegoś prostego, własnego, udźwiękowienia do tego programu czy w ogóle dać sobie z tym luz i zająć się na razie
czym innym? Własne udźwiękowienie to ma się rozumieć byłaby żadna muzyka tylko jakiś tam powtarzający się
w różnych wariacjach efekt dźwiękowy "przeskakującego kodu" i tyle.
Have a nice day!

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

Re: Matriksowy "wygaszacz ekranu" na C64

#14 Post autor: Steffan »

Nie wiem czy jest sens ciągłego generowania liczb. Wygeneruj sobie na początku ich tyle ile potrzebujesz (z zapasem żeby zapętlone wyglądało na losowe), tablica i jazda.

A co do dalszej części Twojego pytania. To nie wiem. Ty jesteś koderem i od Ciebie zależy co chcesz / będziesz robił z tym projektem. Tu na forum znajdziesz kilku doskonałych koderów, mniej lub bardziej aktywnych (skorych do pomocy). Pytaj! Myślę, że jak pytanie będzie konkretne (nie lanie wody) odpowiedzą. Powodzenia.
S.
B O O M !
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]

Awatar użytkownika
Operator Teleksu
Posty: 59
Rejestracja: 27 lis 2020, 21:31

Re: Matriksowy "wygaszacz ekranu" na C64

#15 Post autor: Operator Teleksu »

Steffan pisze:
09 gru 2020, 12:32
Nie wiem czy jest sens ciągłego generowania liczb. Wygeneruj sobie na początku ich tyle ile potrzebujesz (z zapasem żeby zapętlone wyglądało na losowe), tablica i jazda.
No też, w sumie racja, że prosta rada. Czasem człowiek nie pomyśli a już chce się pytać o wszystko innych.
Have a nice day!

Awatar użytkownika
juntek
Posty: 210
Rejestracja: 23 wrz 2018, 20:17

Re: Matriksowy "wygaszacz ekranu" na C64

#16 Post autor: juntek »

Generator szumu SID-a to bardzo dobre źródło liczb losowych o rzeczywiście losowym rozkładzie wyników.
Ale faktycznie z odczytem komórki $d41b SID-a będzie problem gdy chce się mieć w programie melodię.
Jako inne źródło liczb losowych można wykorzystać:
$d012 - aktualna pozycja rastra
$d01e - rejestr kolizji sprite - sprite
$d01f - rejestr kolizji sprite - tło
$dc04 - młodszy bajt timera ACIA#1
$dc05 - starszy bajt timera ACIA#1
$dc06 - młodszy bajt timera BCIA#1
$dc07 - starszy bajt timera BCIA#1
$dd04 - młodszy bajt timera ACIA#2
$dd05 - starszy bajt timera ACIA#2
$dd06 - młodszy bajt timera BCIA#2
$dd07 - starszy bajt timera BCIA#2

Ponieważ niektóre z tych komórek mają niejednorodny rozkład wartości (np. $d012 ma dwa razy większe prawdopodobieństwo "wylosowania" wartości z przedziału 0-54niż z przedziału 55-255) celem poprawienia "losowości" należy dodać do siebie wartości otrzymane z kilku powyższych komórek:

Kod: Zaznacz cały

lda $d012
adc $dc04
adc $dc05
adc $dc06
adc $dc07
adc $20 ;ostatnio "wylosowana" wartość
sta $20
READY.

Awatar użytkownika
Operator Teleksu
Posty: 59
Rejestracja: 27 lis 2020, 21:31

Re: Matriksowy "wygaszacz ekranu" na C64

#17 Post autor: Operator Teleksu »

juntek pisze:
09 gru 2020, 13:06
Jako inne źródło liczb losowych można wykorzystać:
$d012 - aktualna pozycja rastra
$d01e - rejestr kolizji sprite - sprite
$d01f - rejestr kolizji sprite - tło
$dc04 - młodszy bajt timera ACIA#1
$dc05 - starszy bajt timera ACIA#1
$dc06 - młodszy bajt timera BCIA#1
$dc07 - starszy bajt timera BCIA#1
$dd04 - młodszy bajt timera ACIA#2
$dd05 - starszy bajt timera ACIA#2
$dd06 - młodszy bajt timera BCIA#2
$dd07 - starszy bajt timera BCIA#2
To też pożyteczna rada :wink:

Ale tak póki co - zamieszczam wersje z doklejoną muzą (problem z liczbami losowymi rozwiązałem
metodą taką jak Steffan napisał). Proszem tylko pamiętać że to w ramach eksperymentu i za bardzo
nie wysilałem się z szukaniem jak najfajniejszej melodyjki (choć mam nadzieję że fajna) ani z
dopasowywaniem tempa.

SYS 2*4096 - nadal żeby uruchomić
Załączniki
matrix.zip
(2.85 KiB) Pobrany 116 razy
Have a nice day!

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

Re: Matriksowy "wygaszacz ekranu" na C64

#18 Post autor: Steffan »

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

Awatar użytkownika
Nitro
Posty: 1544
Rejestracja: 03 wrz 2008, 20:23
Grupa: Black Sun

Re: Matriksowy "wygaszacz ekranu" na C64

#19 Post autor: Nitro »

Imo nie kombinuj ani z liczbami losowymi z SIDa lub czegokolwiek innego.
Po prostu stwórz tablicę liczb losowych.
I to jest zasada chyba nr 1 w kodowaniu na 8 bitach - tablicuj, tablicuj i jeszcze raz tablicuj wszystko co się da.
P.S. Szum szumowi nierówny, niektóre są przyjemniejsze dla oka - patrz Perlin noise, Blue noise.

Awatar użytkownika
Cyprian
Posty: 94
Rejestracja: 06 kwie 2020, 10:43
Kontakt:

Re: Matriksowy "wygaszacz ekranu" na C64

#20 Post autor: Cyprian »

fajny wygaszacz
C= C64 Breadbin, C= 1541, C= 1802; Atari 8/16/32/64bit;
http://260ste.atari.org

ODPOWIEDZ