Odpověď na názor

Odpovídáte na názor k článku Ovládání hráčů ve hře klávesnicí nebo joystickem na ZX Spectru. 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.
  • 26. 5. 2023 22:56

    _dw

    A dalsi iterace je o bajt kratsi a jeste rychleji...:

    att_adr:                        ;vypocet adresy atributu 32*D+E
            ld a,d                  ;Y
            add  a,a                ;Y*2   0..+2..46
            add  a,a                ;Y*4   0..+4..92
            add  a,a                ;Y*8   0..+8..184
            ld h,0x58>>2            ;
            ld l,a                  ;
            add hl,hl               ;ATTRIBUTE_ADR/2+Y*16
            add hl,hl               ;ATTRIBUTE_ADR+Y*32
            ld a,l                  ;hl=8*Y
            add a,e                 ;lo(Y*32+E)
            ld l,a                  ;
            adc a,h                 ;1:4
            sub l                   ;1:4
            ld h,a                  ;1:4
            ret

    ...a jeste rychleji...:

    att_adr:                        ;vypocet adresy atributu 32*D+E
            ld a,d                  ;Y
            add  a,a                ;Y*2   0..+2..46
            add  a,a                ;Y*4   0..+4..92
            add  a,a                ;Y*8   0..+8..184
            ld h,0x58>>2            ;
            ld l,a                  ;
            add hl,hl               ;ATTRIBUTE_ADR/2+Y*16
            add hl,hl               ;ATTRIBUTE_ADR+Y*32
            ld a,l                  ;hl=8*Y
            add a,e                 ;lo(Y*32+E)
            ld l,a                  ;
            jr nc,$+3               ;2:7/12
            inc h                   ;1:4
            ret

    a nakonec jeste rychleji protoze je to ve funkci a s mene bajty:
    ...a jeste rychleji...:

    att_adr:                        ;vypocet adresy atributu 32*D+E
            ld a,d                  ;Y
            add  a,a                ;Y*2   0..+2..46
            add  a,a                ;Y*4   0..+4..92
            add  a,a                ;Y*8   0..+8..184
            ld h,0x58>>2            ;
            ld l,a                  ;
            add hl,hl               ;ATTRIBUTE_ADR/2+Y*16
            add hl,hl               ;ATTRIBUTE_ADR+Y*32
            ld a,l                  ;hl=8*Y
            add a,e                 ;lo(Y*32+E)
            ld l,a                  ;
            ret nc                ;1:5/11
            inc h                   ;1:4
            ret

    26. 5. 2023, 22:58 editováno autorem komentáře