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

gorgh

  • ***
  • Wiadomości: 128
  • Miejsce pobytu:
    Wyszków
Odp: mój pierwszy programik
« Odpowiedź #15 dnia: 2018.08.06, 16:01:45 »
ha! I to jest pomysł.
W międzyczasie zoptymalizowałem trochę procedurę liczącą pixle, że liczy się od razu 2 pixle, przy czym pierwszy pixel jest zapisywany

 add a,a
 add a,a
 ld (for_value+1),a
A przy liczniu wartości rejestu e (zwiększanie aby pixel miał wartość od 0 do 3) zamiast zerować ten rejestr robię po prostu:
for_value
 ld e,$ff
Dzięki temu ilość danych w tablicy zmniejsza się z 1024 elementów do 512 elementów i zczytywanie wartości pixla z tablicy to po prostu
  ld a,(hl)
 add a,a
 inc hl
zamiast
ld a,(hl)
 add a,a
 add a,a
 inc hl
 add a,(hl)
 add a,a
 inc hl

Phonex

  • *****
  • Wiadomości: 1260
  • Miejsce pobytu:
    Warszawa
Odp: mój pierwszy programik
« Odpowiedź #16 dnia: 2018.08.06, 16:22:58 »
A właśnie, coś budziło mój instynktowny sprzeciw, jak zobaczyłem adres początku Twojego programu. Już wiem co :)
Dolna część pamięci od $4000 do $7999 jest wolniejsza, ponieważ kiedy ULA pobiera z niej dane do obrazu, zatrzymuje zegar procesora. Więc program będzie się wykonywał szybciej jeśli umieścisz go powyżej $8000.
Tu trochę informacji https://www.worldofspectrum.org/faq/reference/48kreference.htm#Contention
« Ostatnia zmiana: 2018.08.06, 16:32:06 wysłana przez Phonex »

gorgh

  • ***
  • Wiadomości: 128
  • Miejsce pobytu:
    Wyszków
Odp: mój pierwszy programik
« Odpowiedź #17 dnia: 2018.08.06, 16:41:51 »
nice, chociaż tego artykułu na razie nie za bardzo rozumiem, muszę się wczytać
przy okazji zaoszczędziłem jeszcze 2048 cykli zastępując
inc hl
tym:
inc l

jako, że tablica, po której indeksuję ma 512 wartości to tylko raz trzeba zwiększyć h

Dalthon

  • ****
  • Wiadomości: 428
  • Miejsce pobytu:
    TriCity
Odp: mój pierwszy programik
« Odpowiedź #18 dnia: 2018.08.06, 16:56:01 »
nice, chociaż tego artykułu na razie nie za bardzo rozumiem, muszę się wczytać
wersja skrótowa (i wystarczającą): kod umieszczamy 32768-49151 oraz w banku 0 (49152-65535) - wszędzie indziej "działa wolniej" :)
co do bankowania: https://www.worldofspectrum.org/faq/reference/128kreference.htm - chociaż na naszym forum jest to lepiej wyjaśnione :)
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ź #19 dnia: 2018.08.06, 17:40:30 »
Kod jako taki nie działa wolniej ;) Wolniej działają dostępy do pamięci (i portów). Konkretnie to jest tak, że zależnie od tego w którym dokładnie cyklu pracy ULA nastąpi próba dostępu do dzielonej pamięci (w ZXS 48 $4000-$7fff) ULA zatrzyma zegar procesora na 0-6 cykli. Kod umieszczony w tej pamięci będzie faktycznie chodził wolniej, bo jego wykonanie to również dostępy do pamięci. Ale niestety nie da się tak po prostu podać procentowo jak dużo zje ULA bo jest to mocno zależne od tego, co się wykonuje. Kod umieszczony powyżej $7fff i liczący sobie coś na danych w tym samym zakresie będzie chodził na pełnej prędkości procesora. Ten sam kod zapisujący coś do pamięci ekranu będzie zwalniany w zależności od tego w który punkt się akurat wstrzeli. Da się to wszystko dokładnie policzyć pod warunkiem, że to, co robisz da się zsynchronizować z rastrem. Jeśli nie to trzeba się po prostu dopasować "na oko" i liczyć z tym, że będzie chodzić tak jak będzie chodzić ;)

gorgh

  • ***
  • Wiadomości: 128
  • Miejsce pobytu:
    Wyszków
Odp: mój pierwszy programik
« Odpowiedź #20 dnia: 2018.08.06, 17:44:19 »
Aha, rozumiem. Czyli najlepiej w obszarze $5800-$7fff trzymać dane do których rzadko jest dostęp

Dalthon

  • ****
  • Wiadomości: 428
  • Miejsce pobytu:
    TriCity
Odp: mój pierwszy programik
« Odpowiedź #21 dnia: 2018.08.06, 18:35:49 »
Napisałem "działa wolniej" a nie działa wolniej :) :) :)

Każdy sobie sam trzyma dane w pamięci - nie ma jednego złotego wzorca :) Ja akurat tam głównie trzymam spakowane dane które sobie rozpakowuję jak są potrzebne albo składowe grafiki. Pewnie co koder, to inny rozkład danych, umiejscowienie stosu, vectora przerwań itd. itp.
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

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ź #22 dnia: 2018.08.06, 23:28:03 »
<brawa> za wątek. Siedzę i czytam z rozdziawioną paszczą.
KWF
-----
R Tape loading error 0:1
Moje zabawki: https://github.com/McKlaud76

trojacek

  • *****
  • Wiadomości: 6831
  • Miejsce pobytu:
    Warszawa
Odp: mój pierwszy programik
« Odpowiedź #23 dnia: 2018.08.06, 23:46:48 »
Dla mnie to fajna gimnastyka umysłowa, choć  zbytnio się nie zagłębiałem w kod.
Sam niedawno usiadłem do asemblera, po ćwierć wieku przerwy. Frajda :D

tooloud

  • *****
  • Wiadomości: 3185
  • Miejsce pobytu:
    Warszawa
  • mydłem go!
Odp: mój pierwszy programik
« Odpowiedź #24 dnia: 2018.08.07, 07:35:52 »
Dawno nie było równie ciekawego wątku!
dużo sprzętu mało czasu.

Dalthon

  • ****
  • Wiadomości: 428
  • Miejsce pobytu:
    TriCity
Odp: mój pierwszy programik
« Odpowiedź #25 dnia: 2018.08.07, 10:26:47 »
I to musiał się człowiek z małego Atari pojawić bo się zx'owcom nie chce kodować... :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

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ź #26 dnia: 2018.08.07, 12:41:41 »
Bo nie każdy jest "koderem" a dla niektórych (np. dla mnie) BASIC jest szczytem wiedzy tajemnej. Nie przeraża mnie sam ASM, ale ilość narzędzi aby z kodu otrzymać program wykonywany w postaci pliku .tap czy .tzx.

gorgh: Czy już masz poprawioną wersję programu z początku watku? Podoba się mi efekt wizualny.
KWF
-----
R Tape loading error 0:1
Moje zabawki: https://github.com/McKlaud76

Dalthon

  • ****
  • Wiadomości: 428
  • Miejsce pobytu:
    TriCity
Odp: mój pierwszy programik
« Odpowiedź #27 dnia: 2018.08.07, 13:19:13 »
Nie przeraża mnie sam ASM, ale ilość narzędzi aby z kodu otrzymać program wykonywany w postaci pliku .tap czy .tzx.
Ke? Proste jak... się tutaj zajrzy: http://zxspectrumdev.blogspot.com/2009/01/setting-up-development-environment-on.html
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ź #28 dnia: 2018.08.07, 13:22:09 »
Nie przeraża mnie sam ASM, ale ilość narzędzi aby z kodu otrzymać program wykonywany w postaci pliku .tap czy .tzx.

Hmmm... Jedno? ;)

pasmo --tapbas plik.asm plik.tap

gorgh

  • ***
  • Wiadomości: 128
  • Miejsce pobytu:
    Wyszków
Odp: mój pierwszy programik
« Odpowiedź #29 dnia: 2018.08.07, 13:33:20 »
gorgh: Czy już masz poprawioną wersję programu z początku watku? Podoba się mi efekt wizualny.

tak, załączam razem ze źródłami, prędkość mi się już podoba, trafi to do dema na forever jak Bóg da (trzeba tylko kolory odwrócić to teraz jest w negatywie)