Strona 1 z 2

Matriksowy "wygaszacz ekranu" na C64

: 08 gru 2020, 05:06
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ć.

Re: Matriksowy "wygaszacz ekranu" na C64

: 08 gru 2020, 08:02
autor: Steffan
Fajne. Muza plix. Coś pożycz z csdb na testy :)
pozdro
S.

Re: Matriksowy "wygaszacz ekranu" na C64

: 08 gru 2020, 08:25
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ę

Re: Matriksowy "wygaszacz ekranu" na C64

: 08 gru 2020, 09:02
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ś?

Re: Matriksowy "wygaszacz ekranu" na C64

: 08 gru 2020, 09:32
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ś.

Re: Matriksowy "wygaszacz ekranu" na C64

: 08 gru 2020, 09:48
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.

Re: Matriksowy "wygaszacz ekranu" na C64

: 08 gru 2020, 10:02
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.

Re: Matriksowy "wygaszacz ekranu" na C64

: 08 gru 2020, 10:17
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.

Re: Matriksowy "wygaszacz ekranu" na C64

: 08 gru 2020, 11:36
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.

Re: Matriksowy "wygaszacz ekranu" na C64

: 08 gru 2020, 11:57
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 :)

Re: Matriksowy "wygaszacz ekranu" na C64

: 08 gru 2020, 13:12
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:

Re: Matriksowy "wygaszacz ekranu" na C64

: 08 gru 2020, 13:15
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

Re: Matriksowy "wygaszacz ekranu" na C64

: 09 gru 2020, 12:07
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.

Re: Matriksowy "wygaszacz ekranu" na C64

: 09 gru 2020, 12:32
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.

Re: Matriksowy "wygaszacz ekranu" na C64

: 09 gru 2020, 12:46
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.

Re: Matriksowy "wygaszacz ekranu" na C64

: 09 gru 2020, 13:06
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

Re: Matriksowy "wygaszacz ekranu" na C64

: 09 gru 2020, 14:55
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ć

Re: Matriksowy "wygaszacz ekranu" na C64

: 09 gru 2020, 15:03
autor: Steffan
Dobrze jest!

Re: Matriksowy "wygaszacz ekranu" na C64

: 10 gru 2020, 00:55
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.

Re: Matriksowy "wygaszacz ekranu" na C64

: 20 gru 2020, 20:37
autor: Cyprian
fajny wygaszacz