Vlákno názorů k článku Vývoj pro ZX Spectrum: vlastní vykreslovací subrutiny potřetí od _dw - U toho vypisu matrixu znaku draw_ascii_table: ...

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

    _dw

    U toho vypisu matrixu znaku

    draw_ascii_table:
            ; Vytištění ASCII tabulky
            ;
            ; vstupy:
            ; DE - adresa v obrazové paměti pro vykreslení znaku
            ld a, ' '                ; kód vykreslovaného znaku
    next_char:
            push af                  ; uschovat akumulátor na zásobník
            call draw_char           ; zavolat subrutinu pro vykreslení znaku
            ld a, ' '                ; vykreslit za znakem mezeru
            call draw_char           ; zavolat subrutinu pro vykreslení znaku
            pop af                   ; obnovit akumulátor ze zásobníku
            inc a                    ; ASCII kód dalšího znaku
            cp  ' ' + 96             ; jsme již na konci ASCII tabulky?
            jr nz, next_char         ; ne? potom pokračujeme
            ret                      ; návrat z podprogramu

    bych postupoval jinak. Prohodil bych mezeru na zacatek jako prvni znak. tim bych presunul problem prelezu pres tretiny na rutinu draw_char a mezeru bych "tisknul" zvednutim indexu E.
    Pak kdyz se podivame jak ukoncujeme smycku tak zjistime ze to jde nahradit pres sign flag, takze zadne cp 128 neni potreba. Celych 5 bajtu dolu, nebo 1 bajt kdyz jen vyhodime cp.

    draw_ascii_table:
            ; Vytištění ASCII tabulky
            ;
            ; vstupy:
            ; DE - adresa v obrazové paměti pro vykreslení znaku
            ld a, ' '                ; kód vykreslovaného znaku
    next_char:
            inc  e                   ; "vykreslit" pred znakem mezeru
            push af                  ; uschovat akumulátor na zásobník
            call draw_char           ; zavolat subrutinu pro vykreslení znaku
            pop af                   ; obnovit akumulátor ze zásobníku
            inc  a                   ; ASCII kód dalšího znaku
            jp  p, next_char         ; ne? potom pokračujeme
            ret                      ; návrat z podprogramu
  • 21. 3. 2023 7:30

    Pavel Tišnovský
    Zlatý podporovatel

    jj presne to jsem planoval na priste (protoze flagy jsem vlastne moc nezminioval, krome ZERO se kterym se proste pracovat musi a trosku o CARRY). Priste o tom bude kapitola (jeste nevim jestli i o half carry a parite, ale asi jo, at to mame vsechno pohromade).

  • 21. 3. 2023 13:26

    _dw

    Jedna z nejzaludnejsich veci na Z80. Naucit se spravne kdy se vlajky a ktere nastavuji a kdy naopak ne. To pak uplne meni co pisete za kod. Ze se vlajka nemeni umoznuje instrukci pouzit "na uklid" a naopak ji to muze delat nepouzitelnou.

    Bylo by zajimave vedet proc to tak navrhli, protoze to je neco co je tezke vymyslet do dusledku. Mozna to byla jen postupna evoluce.

    PS: Mit jinak zprehazene bity ve F by umoznilo nejake osklive triky. To je asi spis problem, kdyz se zacnete divat prilis dlouho do propasti...
    Ale to je asi taky dusledek zachovani kompatibility a ten puvodni navrh asi byl rad ze je rad a neresil, ze pouzit v djnz registr C by bylo fakt lepsi.
    Hmm... prave koukam ze to asi navrhl puvodne ital Federico Faggin a je mu ted 81.
    A misto kompatibility je to teda spis evoluce 4004 (jeho navrh)->8008(sefuje tomu)->8080(sefuje tomu)->Z80(sefuje tomu)
    To jsem si myslel ze v tom maji prsty hlavne japonci. Masatoshi Shima. Tomu je 79.
    Treti do party 4004 Ralph Ungermann uz teda neni mezi nami. Ale vtipne cteni ze opustil intel kvuli nizkym mzdam.

  • 21. 3. 2023 14:28

    Pavel Tišnovský
    Zlatý podporovatel

    tak u 6502 to udelali jinak - flagy se v podstate nastavuji kdekoli to jde, tedy i u LDx atd. Ma to svoje vyhody, protoze se prakticky nikdy nemusi pouzit CMP, na druhou stranu se moc flagy nedaji pouzit dlouhodobejsi ukladani hodnot. IMHO to proste u obou "rad" procesoru tipli (a hlavne se ty CPU zacaly pouzivat v uplne jinych oblastech, nez se predpokladalo).