Обычная выводилка:
;hl->de
spr:
ld c,height
push de
ld b,width
row:
call putzn
inc e
jr z,$+6
ld a,d
sub 8
ld d,a
djnz row
pop de
call d_de_zn
dec c
jr nz,spr
оптимизированная:
ld a,(hl)
inc hl
exx
ld c,a
ld b,8
exx
ld c,height
spr:
push de
ld b,width
row:
exx
rr c
djnz $+9
exx
ld a,(hl)
inc hl
exx
ld c,a
ld b,8
exx
call nc,put_zn
call c,put_zn_msk
inc e
jr z,$+6
ld a,d
sub 8
ld d,a
djnz row
pop de
call d_de_zn
dec c
jr nz,spr
put_zn:
dup 8
ld a,(hl)
ld (de),a
inc hl
inc d
edup
ret
put_zn_msk:
dup 8
ld a,(de)
and (hl)
inc hl
or (hl)
ld (de),a
inc hl
inc d
edup
ret
просьба не пинать если где накосячил или не соптимизировал, писалось на лету. Общий принцип работы с битовой маской думаю понятен %)




Ответить с цитированием