Odpověď na názor

Odpovídáte na názor k článku Vývoj pro ZX Spectrum: vlastní vykreslovací subrutiny potřetí. Názory mohou přidávat pouze registrovaní uživatelé. Nově přidané názory se na webu objeví až po schválení redakcí.

  • Č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