Hlavní navigace

Názor k článku Vývoj her a dem pro ZX Spectrum: vlastní vykreslovací subrutiny podruhé od _dw - Je to slozitejsi nez to na prvni pohled...

  • Článek je starý, nové názory již nelze přidávat.
  • 9. 3. 2023 18:58

    _dw

    Je to slozitejsi nez to na prvni pohled vypada... .)

    Doslo me, ze uz FORTHu si mohu dovolit vetsi volnost jen diky tomu ze v kodu nikde nejsou fce co vraceji priznaky, nebo fce co vraceji 8 bitovou hodnotu v A.
    Proste FORTH kdyz porovna neco, tak si ulozi hodnotu TRUE (-1) nebo FALSE (0) do 16 bitoveho registru (TOS) a pak se s tim dale pracuje. Nastesti to neni tak strasne, jak to vypada, protoze prekladac je schopen odchytit vetsinu techto slov a spojit je do nejakeho celku.

    Misto

    EQ IF

    vygeneruje spojene slovo

    EQ_IF, ktery vnitrne pouzije ten priznak co ma procesor na kterem ten forth pobezi. EQ ktery ulozi TRUE/FALSE na TOS a IF ktery ho teprve vyzvedne je virtualni zpusob jak je FORTH navrzen a to neni nic proti FORTHu. A ani to neni nic proti Z80, jen to jen problem prekladace, ze musi najit spravny zpusob jak to prevest do instrukci Z80.

    Slova (spojeni slov ) jsou pak neco jako inline fce a ja pak nemusim nic resit. Jen si uhlidat HL (TOS), DE (NOS) a HL' (RAS).

    V beznem asembleru mit tohle bude uz horsi, bude fakt zalezet jak si definujes v cem se ti budou slova vracet a dokonce jestli budes kombinovat 1, 8 a 16 bitove vstupy/vystupy.

    Ani mit A pouzity pro 8 bitovy vstup/vystup neni zadna slava pokud musis ochranovat F.

    A ani neplati vzdy ze je vhodnejsi mit PUSH + POP reseny v ramci fce (skoro neco jako pascalova konvence.. .) )

    Kdyz bude ta fce typu SWITCH... a ty v kazde vetvi budes muset delat POP POP POP... Tak se to vyplati delat v tom volani. Pripadne to obalit v dalsi fci a teprve tu volat.

    Je to cele uplna dzungle i kdyz muzou existovat nejaka optimalni pravidla, tak ne vzdy se vyplati. Neco jako je v sachu pozicni a kombinacni hra. Nektere pozice jsou nebezpecne na ne na prvni pohled viditelne kombinace, kde nic neplati vsechno si musis spocitat. Takze se nemuzeme drzet jen pozicnich pravidel i kdyz ty nam mohou hodne pomoct.
    Nebo je to asi stejny chaos jako formalni a kontextove gramatiky. To by musel rici nekdo kdo informatiku studoval. .)

    PS: Nastesti vetsinou plati, ze problem je na ZX skoro vzdy velikost kodu/grafiky a ne rychlost procesoru. Ja bych treba rutinu pro tisk znaku nerozbaloval. A kdybych musel tak prvne zkusil misto 8 cyklu mit 4 cykly. Proto preferuji mit mene PUSH POPu ve funkci nez mit vice, jen okolo volani kde je to nutne.

    Pak jsou tu nektere veci co za me resi proste makro (M4)

    Potrebuji nahrat do osmibitoveho registru nejakou konstantu? Ok. necham si to vygenerovat makrem, do ktereho jsou vstupy jake hodnoty/konstanty maji ostatni registry. A on najde tu spravnou variantu. Zmeni se nekde konstanta? Nevadi, nic nemusim menit, vygeneruje se jiny kod.

    9. 3. 2023, 18:59 editováno autorem komentáře