forum speccy.pl
ZX Spectrum => PROGRAMOWANIE => Wątek zaczęty przez: Tygrys w 2017.12.19, 15:02:34
-
To wątek dla osób, które potrafią już programować i chcą napisać coś na ZX Spectrum (dla innych platform będą osobne wątki w dedykowanych działach), ale nie wiedzą od czego zacząć, jakich narzędzi potrzebują itp. To właściwe miejsce na zadawanie pytań. Wiele tematów zostało już poruszonych, zatem tu pojawią się linki do odpowiednich wątków.
-
... ale potrzebuję więcej czasu. :D Ciekawy wątek, będę zaglądać. A powtórzę się chyba znowu, jeśli zapytam, jak zrobić Twister Effect? Może być w pseudo code.
-
Dla osób, które chcą poznać asm Z80 w konwencjolany sposób oraz po polsku, pomocny będzie Kompetny Kurs Kodu Maszynowego (http://www.speccy.pl/archive/prod.php?id=416) znajdujący się archiwum plików. Tu nalezą się podziękowania dla tdu za włozony wysiłek w przygotowanie pakietu.
-
Czasu to nikt nie ma, choć niektórzy przy braku czasu robią różne fajne rzeczy.. ;)
Co do twistera to są dwa sposoby:
- jeden to matematyczne obliczenie pozycji każdego z rogów bryły i odpowiednie ich wypełnianie widocznych krawędzi
Ten efekt miał wejść do Big Things (http://www.speccy.pl/archive/prod.php?id=402), ale nie zdążyłem dopracować procedury teksturowania, przez co wygladał nie za ciekawie i ostatecznie nie wszedł do dema,
- drugi to przygotowanie grafiki w ten sposób, aby sprawiały wrażenie obrotu. Wtedy zamiast przeliczać, przenosi się 'pasek' grafiki w odpowiednie miejsce ekranu. ;)
Szybki, efektownie wyglądający. Ten sposób widoczny jest w 99% dem. W tym efekcie jest pole na użycie rozkazów Z80 - POP / PUSH do przerzucania danych.
-
...
W tym efekcie jest pole na użycie rozkazów Z80 - POP / PUSH do przerzucania danych.
...
Przybliżysz? Bo nie bardzo rozumiem - dane obrazka wrzucasz na stos?
Nie, nie to musi być jakiś tzw. "MYK"
-
@silenter Żaden tam specjalny myk... Jak masz odpowiednio przygotowane dane to ich przewalanie w ekran czymś takim:
ld sp,adres_grafiki
pop hl
pop bc
pop de
ld sp,adres_ekranu
push de
push bc
push hl
Myk jest w tym, żeby te dane odpowiednio przygotować i żeby odpowiednio ustawiać adresy skąd/dokąd ;)
A robi się tak dlatego, że push/pop jest po prostu szybsze od innych metod przerzucania danych :)
-
Procedura która oddaje idee uzycia stosu do przerzucania danych wygląda mniej więcej tak:
ld (temp),sp
ld sp,dane
pop hl ; odczytywanie danych do rejestrów
pop de
pop bc
pop af
ld sp,ekran+8; ustawienie adresu ekranu pamietajac o tym że PUSH zmniejsza licznik stosu o 2 bajty.. czyli trzeba ustawić adres na koniec linii.
push af ; i odkładamy dane w odwortnej kolejności niż kolejność pobierania
push de
push bc
push af
ld sp,(temp)
ret
temp:
defw 0
dane:
defb ......
-
Przy przerzucaniu danych stosem w ekran trzeba pamiętać właśnie o tym, że jedziemy "od tyłu" i dobrze policzyć żeby nas raster nie ściął w niewłaściwym miejscu. Zakładając oczywiście, że robimy efekt mieszczący się w ramce - bo jeśli nie, to po co by się było szarpać ze stosem? ;)
-
Ja się wgryzam z88dk i równolegle w cc65 (z racji Apple //), ale faktycznie moje potrzeby nie są "efektowe" - w zasadzie sama logika plus wyświetlanie statycznej grafiki.
Ale do właśnie "przewalania" sprawnie szybko obszarów pamięci ekranu chyba nic szybszego niż asm nie będzie.
-
Do Twoich potrzeb zwykły LDIR starczy w zupełności. Zapewni to z88dk podczas kompilacji o ile użyjesz memcpy().
da się też robić wstawki asm, oczywiście.
-
Pamiętajcie, że POP i PUSH operują na 16 bitowych rejestrach. Zatem za jednym "zamachem" kopiujemy 16 pikseli :)
-
...
ld (temp),sp
ld sp,dane
...
Tak podejrzewałem - to jest ten "MYK" - bezpośrednia zabawa Stack Pointer
-
Ale do właśnie "przewalania" sprawnie szybko obszarów pamięci ekranu chyba nic szybszego niż asm nie będzie.
Jakby się uprzeć to można by znaleźć coś szybszego - np. Z80 DMA ;)
-
no i należy pamiętać że jeśli są używane przerwania to...
di
ld (temp),sp
(...)
ld sp,(temp)
ei
ret
... bo inaczej można się zdziwić :D
-
no i należy pamiętać że jeśli są używane przerwania to...
di
ld (temp),sp
(...)
ld sp,(temp)
ei
ret
... bo inaczej można się zdziwić :D
Czyli, wylacz przerwania, bo moga cos przerwac :)
https://www.youtube.com/watch?v=7rr88Szc5q0
:):):):)
Pozdrawiam.