forum speccy.pl

ZX Spectrum => PROGRAMOWANIE => Wątek zaczęty przez: Tygrys w 2017.12.19, 15:02:34

Tytuł: Chcę napisać grę/demo, ale potrzebuję ...
Wiadomość wysłana 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.
Tytuł: Odp: Chcę napisać grę/demo, ale potrzebuję ...
Wiadomość wysłana przez: ZX Freeq w 2017.12.19, 15:13:48
... 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.
Tytuł: Odp: Chcę napisać grę/demo, ale potrzebuję ...
Wiadomość wysłana przez: Tygrys w 2017.12.19, 15:20:24
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.
Tytuł: Odp: Chcę napisać grę/demo, ale potrzebuję ...
Wiadomość wysłana przez: Tygrys w 2017.12.19, 15:31:25
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.
Tytuł: Odp: Chcę napisać grę/demo, ale potrzebuję ...
Wiadomość wysłana przez: silenter w 2017.12.19, 15:38:12
...
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"
Tytuł: Odp: Chcę napisać grę/demo, ale potrzebuję ...
Wiadomość wysłana przez: matofesi w 2017.12.19, 15:45:32
@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 :)
Tytuł: Odp: Chcę napisać grę/demo, ale potrzebuję ...
Wiadomość wysłana przez: Tygrys w 2017.12.19, 15:46:53
Procedura która oddaje idee uzycia stosu do przerzucania danych wygląda mniej więcej tak:

Cytuj
  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 ......
Tytuł: Odp: Chcę napisać grę/demo, ale potrzebuję ...
Wiadomość wysłana przez: matofesi w 2017.12.19, 15:50:50
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? ;)
Tytuł: Odp: Chcę napisać grę/demo, ale potrzebuję ...
Wiadomość wysłana przez: tooloud w 2017.12.19, 15:58:08
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.
Tytuł: Odp: Chcę napisać grę/demo, ale potrzebuję ...
Wiadomość wysłana przez: Tygrys w 2017.12.19, 16:05:07
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.
Tytuł: Odp: Chcę napisać grę/demo, ale potrzebuję ...
Wiadomość wysłana przez: ZX Freeq w 2017.12.19, 16:07:10
Pamiętajcie, że POP i PUSH operują na 16 bitowych rejestrach. Zatem za jednym "zamachem" kopiujemy 16 pikseli :)
Tytuł: Odp: Chcę napisać grę/demo, ale potrzebuję ...
Wiadomość wysłana przez: silenter w 2017.12.19, 18:01:10
...

Cytuj
  ld (temp),sp

  ld sp,dane
  ...

Tak podejrzewałem - to jest ten "MYK" - bezpośrednia zabawa Stack Pointer
Tytuł: Odp: Chcę napisać grę/demo, ale potrzebuję ...
Wiadomość wysłana przez: silenter w 2017.12.19, 18:03:37
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 ;)
Tytuł: Odp: Chcę napisać grę/demo, ale potrzebuję ...
Wiadomość wysłana przez: Dalthon w 2017.12.23, 04:07:23
no i należy pamiętać że jeśli są używane przerwania to...
Cytuj
di
ld (temp),sp

(...)

ld sp,(temp)
ei
ret
... bo inaczej można się zdziwić :D
Tytuł: Odp: Chcę napisać grę/demo, ale potrzebuję ...
Wiadomość wysłana przez: SAJ w 2017.12.23, 04:12:47
no i należy pamiętać że jeśli są używane przerwania to...
Cytuj
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.