Jak ctu kapitolu 15. tak jsem si uvedomil, ze jsem udelal chybu ve vypoctu prechodu adresy znaku mezi tretinama.
Nemohu komentovat ani opravit komentar co nebyl (jeste) schvalen takze pisi novy prispevek. Opravena verze je o bajt delsi a takt rychlejsi (zmena je jen pod djnz loop).
loop: ld A,(HL) ; 1:7 načtení jednoho bajtu z masky ld (DE),A ; 1:7 zápis hodnoty na adresu (DE) inc L ; 1:4 posun na další bajt masky inc D ; 1:4 posun na definici dalšího obrazového řádku djnz loop ; 2:8/13 vnitřní smyčka: blok s osmi zápisy inc E ; 1:4 ret z ; 1:5/11 D+=8,E=E+1=0 ld D, C ; 1:4 ret ; 1:10 D=D,E=E+1
V 15. kapitole rutina calc_block_address se ta taky vylepsit, kdyz misto rra se pouzije rrca.
Puvodni:
calc_block_address: ; parametry: ; B - x-ová souřadnice (ve znacích, ne pixelech) ; C - y-ová souřadnice (ve znacích, ne pixelech) ; ; návratové hodnoty: ; HL - adresa pro zápis bloku ; ; vzor adresy: ; 0 1 0 Y4 Y3 0 0 0 | Y2 Y1 Y0 X4 X3 X2 X1 X0 ld A, C ; 1:4 and %00000111 ; 2:7 pouze spodní tři bity y-ové souřadnice (řádky 0..7) rra ; 1:4 rra ; 1:4 rra ; 1:4 rra ; 1:4 nyní jsou čísla řádků v horních třech bitech or B ; 1:4 připočítat x-ovou souřadnici ld L, A ; 1:4 máme spodní bajt adresy ; Y2 Y1 Y0 X4 X3 X2 X1 X0 ld A, C ; 1:4 y-ová souřadnice and %00011000 ; 2:7 dva bity s indexem "bloku" 0..3 (dolní tři bity už máme zpracovány) or %01000000 ; 2:7 "posun" do obrazové paměti (na 0x4000) ld H, A ; 1:4 máme horní bajt adresy ; 00 01 00 Y4 Y3 00 00 00 ret ; 1:10 návrat z podprogramu
Nove:
calc_block_address: ; parametry: ; B - x-ová souřadnice (ve znacích, ne pixelech) ; C - y-ová souřadnice (ve znacích, ne pixelech) ; ; návratové hodnoty: ; HL - adresa pro zápis bloku ; ; vzor adresy: ; 0 1 0 Y4 Y3 0 0 0 | Y2 Y1 Y0 X4 X3 X2 X1 X0 ld A, C ; 1:4 rrca ; 1:4 rrca ; 1:4 rrca ; 1:4 and %11100000 ; 2:7 nyní jsou čísla řádků v horních třech bitech or B ; 1:4 připočítat x-ovou souřadnici ld L, A ; 1:4 máme spodní bajt adresy ; Y2 Y1 Y0 X4 X3 X2 X1 X0 ld A, C ; 1:4 y-ová souřadnice and %00011000 ; 2:7 dva bity s indexem "bloku" 0..3 (dolní tři bity už máme zpracovány) or %01000000 ; 2:7 "posun" do obrazové paměti (na 0x4000) ld H, A ; 1:4 máme horní bajt adresy ; 00 01 00 Y4 Y3 00 00 00 ret ; 1:10 návrat z podprogramu