Matriksowy "wygaszacz ekranu" na C64
- Operator Teleksu
- Posty: 59
- Rejestracja: 27 lis 2020, 21:31
Matriksowy "wygaszacz ekranu" na C64
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 jeśli udało mi się to napisać.
SYS 2*4096 żeby uruchomić.
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 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!
Re: Matriksowy "wygaszacz ekranu" na C64
Fajne. Muza plix. Coś pożycz z csdb na testy
pozdro
S.
pozdro
S.
B O O M !
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]
- Operator Teleksu
- Posty: 59
- Rejestracja: 27 lis 2020, 21:31
Re: Matriksowy "wygaszacz ekranu" na C64
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ę
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!
Re: Matriksowy "wygaszacz ekranu" na C64
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ś?
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
- Operator Teleksu
- Posty: 59
- Rejestracja: 27 lis 2020, 21:31
Re: Matriksowy "wygaszacz ekranu" na C64
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ś.
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!
Re: Matriksowy "wygaszacz ekranu" na C64
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.Operator Teleksu pisze: ↑08 gru 2020, 09:32LOAD "PLIK",8,1
to mógłbym napisać w BASIC'u coś takiego:
10 SYS 4096
20 SYS 4099
30 GOTO 20
MCN
- Operator Teleksu
- Posty: 59
- Rejestracja: 27 lis 2020, 21:31
Re: Matriksowy "wygaszacz ekranu" na C64
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!
Re: Matriksowy "wygaszacz ekranu" na C64
Wręcz przeciwnie będzie przyspieszone. Daj spowolnienie w linii 25MCN pisze: ↑08 gru 2020, 09:48Pewnie 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.Operator Teleksu pisze: ↑08 gru 2020, 09:32LOAD "PLIK",8,1
to mógłbym napisać w BASIC'u coś takiego:
10 SYS 4096
20 SYS 4099
30 GOTO 20
Zacytuje siebie z inne posta:
pozdroSteffan 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)
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.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
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)
...
S.
B O O M !
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]
Re: Matriksowy "wygaszacz ekranu" na C64
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.
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.
- Operator Teleksu
- Posty: 59
- Rejestracja: 27 lis 2020, 21:31
Re: Matriksowy "wygaszacz ekranu" na C64
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!
Re: Matriksowy "wygaszacz ekranu" na C64
Kurczę, nie doceniłem szybkości interpretera
MCN
Re: Matriksowy "wygaszacz ekranu" na C64
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:
https://www.wudsn.com/index.php/ide
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:
Jak się kod zacznie rozrastać to możesz wypróbować WUDSN - pełnoprawne IDE, wspiera KickA, ACME i TASS.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
https://www.wudsn.com/index.php/ide
- Operator Teleksu
- Posty: 59
- Rejestracja: 27 lis 2020, 21:31
Re: Matriksowy "wygaszacz ekranu" na C64
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.
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!
Re: Matriksowy "wygaszacz ekranu" na C64
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.
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]
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]
- Operator Teleksu
- Posty: 59
- Rejestracja: 27 lis 2020, 21:31
Re: Matriksowy "wygaszacz ekranu" na C64
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!
Re: Matriksowy "wygaszacz ekranu" na C64
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:
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.
◼
◼
- Operator Teleksu
- Posty: 59
- Rejestracja: 27 lis 2020, 21:31
Re: Matriksowy "wygaszacz ekranu" na C64
To też pożyteczna radajuntek pisze: ↑09 gru 2020, 13:06Jako 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
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!
Re: Matriksowy "wygaszacz ekranu" na C64
Dobrze jest!
B O O M !
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]
Re: Matriksowy "wygaszacz ekranu" na C64
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.
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
fajny wygaszacz
C= C64 Breadbin, C= 1541, C= 1802; Atari 8/16/32/64bit;
http://260ste.atari.org
http://260ste.atari.org