Autor Wątek: Chcę napisać grę/demo, ale potrzebuję ...  (Przeczytany 10059 razy)

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Chcę napisać grę/demo, ale potrzebuję ...
« dnia: 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.

ZX Freeq

  • *****
  • Wiadomości: 1833
  • Miejsce pobytu:
    Warszawa
Odp: Chcę napisać grę/demo, ale potrzebuję ...
« Odpowiedź #1 dnia: 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.
ZX80|ZX81+16kB+PandAY|ZX 48k/+/128k+/+2/+2A/+3/Vega/Next|QL+QIDE|JS128|Timex 2048+2040|UK2086|FDD3000+3.5''|AY|ZX HD|Divide2k11/2k14|DivMMC/PicoDivSD|BetaDisk 128|Opus|Masakrator FM|If 1/2/Microdrv|Multiface 1|+2A\B SDI-1|SJS 1/2|ZX Printer|TZXDuino|+3 HxC USB|ZXUno|Omni
Z88|A500/600|PC200|Ent128

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Chcę napisać grę/demo, ale potrzebuję ...
« Odpowiedź #2 dnia: 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 znajdujący się archiwum plików. Tu nalezą się podziękowania dla tdu za włozony wysiłek w przygotowanie pakietu.

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Chcę napisać grę/demo, ale potrzebuję ...
« Odpowiedź #3 dnia: 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, 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.

silenter

  • *****
  • Wiadomości: 1337
  • Miejsce pobytu:
    Warszawa/Radzymin
Odp: Chcę napisać grę/demo, ale potrzebuję ...
« Odpowiedź #4 dnia: 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"
128k +2 UK issue 1, JS128, FDD3000 in restoration, ZAXON MGT +D, PEAR AmpY, Pear ExEar :), PEAR TI-OF-TTL+FDD35, co to tu robi??? => 2xCDTV&A500

https://soundcloud.com/silenter

https://www.youtube.com/channel/UCKZhL7Lq1zUDDnRDTJKhN4A

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Chcę napisać grę/demo, ale potrzebuję ...
« Odpowiedź #5 dnia: 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 :)

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Chcę napisać grę/demo, ale potrzebuję ...
« Odpowiedź #6 dnia: 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 ......

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Chcę napisać grę/demo, ale potrzebuję ...
« Odpowiedź #7 dnia: 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? ;)

tooloud

  • *****
  • Wiadomości: 3185
  • Miejsce pobytu:
    Warszawa
  • mydłem go!
Odp: Chcę napisać grę/demo, ale potrzebuję ...
« Odpowiedź #8 dnia: 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.
dużo sprzętu mało czasu.

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Chcę napisać grę/demo, ale potrzebuję ...
« Odpowiedź #9 dnia: 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.

ZX Freeq

  • *****
  • Wiadomości: 1833
  • Miejsce pobytu:
    Warszawa
Odp: Chcę napisać grę/demo, ale potrzebuję ...
« Odpowiedź #10 dnia: 2017.12.19, 16:07:10 »
Pamiętajcie, że POP i PUSH operują na 16 bitowych rejestrach. Zatem za jednym "zamachem" kopiujemy 16 pikseli :)
ZX80|ZX81+16kB+PandAY|ZX 48k/+/128k+/+2/+2A/+3/Vega/Next|QL+QIDE|JS128|Timex 2048+2040|UK2086|FDD3000+3.5''|AY|ZX HD|Divide2k11/2k14|DivMMC/PicoDivSD|BetaDisk 128|Opus|Masakrator FM|If 1/2/Microdrv|Multiface 1|+2A\B SDI-1|SJS 1/2|ZX Printer|TZXDuino|+3 HxC USB|ZXUno|Omni
Z88|A500/600|PC200|Ent128

silenter

  • *****
  • Wiadomości: 1337
  • Miejsce pobytu:
    Warszawa/Radzymin
Odp: Chcę napisać grę/demo, ale potrzebuję ...
« Odpowiedź #11 dnia: 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
128k +2 UK issue 1, JS128, FDD3000 in restoration, ZAXON MGT +D, PEAR AmpY, Pear ExEar :), PEAR TI-OF-TTL+FDD35, co to tu robi??? => 2xCDTV&A500

https://soundcloud.com/silenter

https://www.youtube.com/channel/UCKZhL7Lq1zUDDnRDTJKhN4A

silenter

  • *****
  • Wiadomości: 1337
  • Miejsce pobytu:
    Warszawa/Radzymin
Odp: Chcę napisać grę/demo, ale potrzebuję ...
« Odpowiedź #12 dnia: 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 ;)
128k +2 UK issue 1, JS128, FDD3000 in restoration, ZAXON MGT +D, PEAR AmpY, Pear ExEar :), PEAR TI-OF-TTL+FDD35, co to tu robi??? => 2xCDTV&A500

https://soundcloud.com/silenter

https://www.youtube.com/channel/UCKZhL7Lq1zUDDnRDTJKhN4A

Dalthon

  • ****
  • Wiadomości: 428
  • Miejsce pobytu:
    TriCity
Odp: Chcę napisać grę/demo, ale potrzebuję ...
« Odpowiedź #13 dnia: 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
ZX Spectrum +2 Grey | Just Speccy 128 | ZX Spectrum Next | ZX-Uno 2MB |  Murmulator | Amstrad 6128 | MSX2 Philips VG-8235 | Commodore 64 | Commodore +4 | Atari 520 STF | Amiga 1200

SAJ

  • *****
  • Wiadomości: 1484
  • Miejsce pobytu:
    Terra Prime
Odp: Chcę napisać grę/demo, ale potrzebuję ...
« Odpowiedź #14 dnia: 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.