Minsky circle

 


Уже не первый раз прибегаю к использованию этого алгоритма, который позволяет рисовать окружность произвольного радиуса. Я использовал только заливку экрана.

device zxspectrum48
        ORG #6000
begin
ld ixl,12+9
mlp2:
; ld de,12*256 ;Y
ld e,0
ld d,ixl
ld hl,0 ;X
; jr $
exx
ld bc,256
mlp:
exx
;    y=y-x>>4
push hl
sra h:rr l
sra h:rr l
sra h:rr l
sra h:rr l
; sra h:rr l
ex de,hl
or a
sbc hl,de
ex de,hl
pop hl
;    x=x+y>>4
push de
sra d:rr e
sra d:rr e
sra d:rr e
sra d:rr e
; sra d:rr e
add hl,de
pop de
ld a,h;X
add a,16
cp 32
jr nc,skipplot ; C=1 arg1>=a
ld c,a

ld a,d;Y
add a,12
cp 24
jr nc,skipplot ; C=1 arg1>=a
ld b,a
push hl
ld l,b
add hl,hl
add hl,hl
ld h,11
add hl,hl
add hl,hl
add hl,hl
ld b,0
add hl,bc
ld (hl),$FF
pop hl
skipplot:
exx
dec bc
ld a,b
or c
jr nz,mlp
exx
ei
 dup 25-23
halt
edup
dec ixl
jp nz,mlp2
jr $
end
display /d,end-begin
savesna "minsk.sna",begin

Есть один недостаток - неудобно определять количество итераций, здесь используется 256.

Исходник+.sna


Комментарии