Autor Wątek: mój pierwszy programik  (Przeczytany 36456 razy)

Dalthon

  • ****
  • Wiadomości: 428
  • Miejsce pobytu:
    TriCity
Odp: mój pierwszy programik
« Odpowiedź #45 dnia: 2018.08.10, 13:45:29 »
A nie lepiej wstawiać te adresy do tablicy a potem odczytywać zamiast ld a,($ffff) ld a,(hl) inc hl?
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

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: mój pierwszy programik
« Odpowiedź #46 dnia: 2018.08.10, 14:07:04 »
@Dalthon Ale to są adresy. Jak je wsadzisz do tablicy, to trzeba je będzie pobrać a potem z nich dopiero pobrać właściwe dane.

Dalthon

  • ****
  • Wiadomości: 428
  • Miejsce pobytu:
    TriCity
Odp: mój pierwszy programik
« Odpowiedź #47 dnia: 2018.08.10, 14:57:22 »
a to się powtórzę:

może powinienem przyjrzeć się co to i jak ma robić zanim coś będę doradzał..
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

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: mój pierwszy programik
« Odpowiedź #48 dnia: 2018.08.10, 15:39:12 »
Nie przejmuj się - w pierwszej chwili po przeczytaniu twojego posta zacząłem już liczyć i kombinować jak to poprzestawiać. Dopiero po dłuższej chwili do mnie dotarło, że coś jednak jest nie tak ;)

gorgh

  • ***
  • Wiadomości: 128
  • Miejsce pobytu:
    Wyszków
Odp: mój pierwszy programik
« Odpowiedź #49 dnia: 2018.08.10, 15:46:13 »
dziękuję za wszelkie próby pomocy, dziś udało mi się zanimować tunel, na razie bez perspektywy
http://parafie.filonet.eu/misc/3.gif

gorgh

  • ***
  • Wiadomości: 128
  • Miejsce pobytu:
    Wyszków
Odp: mój pierwszy programik
« Odpowiedź #50 dnia: 2018.08.10, 16:41:32 »
z ciekawostek dla programistów: rozpętlony kod zajmuje 4 banki pamięci i 61 kb danych. Wywołań procedury stawiania 2 bajtów (1x4 pixele) jest 420 w ćwiartce czyli w sumie 1680. Każde wywołanie to 153 T stany. Ekran jest rysowany ćwiartkami. Tablica z danymi dla pixeli zajmuje 2500 bajtów czyli 10 stron pamięci i jest modyfikowana za każdym razem cała.

ZX Freeq

  • *****
  • Wiadomości: 1833
  • Miejsce pobytu:
    Warszawa
Odp: mój pierwszy programik
« Odpowiedź #51 dnia: 2018.08.10, 22:56:26 »
Dzięki wielkie za ten wątek @gorgh i @pozostali!
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

Dr Piotr

  • ***
  • Wiadomości: 196
Odp: mój pierwszy programik
« Odpowiedź #52 dnia: 2018.08.10, 23:36:38 »
@Dr Piotr Robisz ten sam błąd co Dalthon.
A to zacytuje za Dalthonem :)

$ffff to nie jest $ffff tylko miejsce, w które inny kod wstawia adresy. Każdy może być inny.
Czyli samodyfikujacy sie kod,  a takim razie mozna zejsc do 143 cykli:
ld a,($ffff) ; 13
and d ; 4
ld c,a ; 4

ld a,($ffff) ; 13
and e ; 4
or c ; 4
ld c,a ; 4

ld a,($ffff) ; 13
and 12 ; 7
or c ; 4
ld c,a ; 4

ld a,($ffff) ; 13
and b ; 4
or c ; 4
ld l, a ; 4

ld a,(hl) ;7
 ld ($ffff),a ;13
 inc h ;4
 ld a,(hl) ;7
 ld ($ffff),a ;13
 dec h ;4

gdzies na paczatku tylko trzeba dac ld de, 0xc030 :)

gorgh

  • ***
  • Wiadomości: 128
  • Miejsce pobytu:
    Wyszków
Odp: mój pierwszy programik
« Odpowiedź #53 dnia: 2018.08.11, 13:28:15 »
wow Dr Piotr! Masz maga intuicję, dziękuję!
W prawdzie wychodzi 147 cykli a nie 143 ale to już oszczędność 10080 cykli na cały obraz, dzięki temu zmieszczę się w 4 ramkach z muzyką!
Dodatkowo procka jest mniejsza o 2 bajty, więc to oszczędność 3360 bajtów
Dziękuję!
Umieszczę Cię w podziękowaniach w grze

gorgh

  • ***
  • Wiadomości: 128
  • Miejsce pobytu:
    Wyszków
Odp: mój pierwszy programik
« Odpowiedź #54 dnia: 2018.08.11, 17:09:26 »
a tak to wygląda w praniu

KWF

  • *****
  • Wiadomości: 6823
  • Miejsce pobytu:
    trzecia planeta od Słońca
  • "I co ja robię tu, u-u, co Ty tutaj robisz ..."
    • Insta do lasownia
Odp: mój pierwszy programik
« Odpowiedź #55 dnia: 2018.08.11, 20:30:06 »
Ciekawy efekt.
KWF
-----
R Tape loading error 0:1
Moje zabawki: https://github.com/McKlaud76

gorgh

  • ***
  • Wiadomości: 128
  • Miejsce pobytu:
    Wyszków
Odp: mój pierwszy programik
« Odpowiedź #56 dnia: 2018.08.11, 21:53:35 »
dziękuję Klaud
Właśnie mnie olśniło, przecież układ bitów w wyliczonym bajcie może równie dobrze służyć za pierwszy bajt do wyglądu pixeli!
więc zamiast
ld l,a                 ;4

ld a,(hl)          ;7
 ld ($ffff),a ;13
 inc h ;4
 ld a,(hl)          ;7
 ld ($ffff),a ;13
 dec h ;4
jest :
ld l,a             ;4
 ld ($ffff),a     ;13
 ld a,(hl)        ;7
 ld ($ffff),a    ;13
czyli oszczędność 15 cykli!

gorgh

  • ***
  • Wiadomości: 128
  • Miejsce pobytu:
    Wyszków
Odp: mój pierwszy programik
« Odpowiedź #57 dnia: 2018.08.14, 20:35:13 »
wczoraj postanowiłem sprofilować rozwinięty kod, czyli zamiast czytać za każdym razem pamięć, co zajmuje 13 cykli, w miejscach gdzie ta sama lokacja czytana jest kilka razy po prostu czytam ją jeden raz, pozwoliło to na zaoszczędzenie 48204 T stanów na cały obraz i sama procedura rysowania wyrabia się teraz w 2,44 ramki i zajmuje zamiast 56 kb tylko 40. Jest więc szansa na port dla Amstrada. W załączniku binarka.

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: mój pierwszy programik
« Odpowiedź #58 dnia: 2018.08.14, 21:35:57 »
Bardzo fajne efekty, choć może zamiast na Forever to na speccy.pl party? ;)

gorgh

  • ***
  • Wiadomości: 128
  • Miejsce pobytu:
    Wyszków
Odp: mój pierwszy programik
« Odpowiedź #59 dnia: 2018.08.14, 21:38:23 »
w sumie niezły pomysł