PHP код:
device zxspectrum128
ORG 25000
PLOTTBL EQU #A000
begin
call FORMER
LOOP
ei:halt:di
radv1 ld a,#40:call circle
ld a,(radv1+1):inc a:ld (radv1+1),a
LD A,127:IN A,(#FE)
RRA:JR C,LOOP
EI:RET
xr db #80
yr db #60
rad db 0
circle
ld (rad),a;a=radius
ld d,a,e,0;x := 0,y := RADIUS
ld h,0,l,a
add hl,hl
ld bc,hl,hl,3
or a:sbc hl,bc;d := 3 - (2 * RADIUS)
clp1
ld a,e:cp d: jr z,nlp1
ret nc
nlp1
call plotall;PLOT
inc e
bit 7,h:jr z,else1;if (d<0)
;d := d + (4 * x) + 6
push hl
ld h,0,l,e
add hl,hl
add hl,hl
ld bc,6
add hl,bc
pop bc
add hl, bc
jp endif1
else1;d := d + 4 * (x - y) + 10
push hl
ld h,0,l,e
ld c,d,b,0
or a:sbc hl,bc
add hl,hl
add hl,hl
ld bc,10
add hl,bc
pop bc
add hl,bc
dec d;y := y - 1;
endif1
;inc e
jp clp1
plotall
;PutPixel(CenterX + X, Center Y + Y)/setPixel(xCenter+x,yCenter+y)
push de:ld a,(xr):add a,e:ld e,a
ld a,(yr):add a,d:ld d,a
call PLOT:pop de:push de;ok
;PutPixel(CenterX + X, Center Y - Y)/setPixel(xCenter+y,yCenter+x)
ld a,(xr):add a,d:ld c,e,e,a
ld a,(yr):add a,c:ld d,a
call PLOT:pop de:push de;ok
;PutPixel(CenterX - X, Center Y + Y)/setPixel(xCenter-x,yCenter+y)
ld a,(xr):sub e:ld e,a
ld a,(yr):add a,d:ld d,a
call PLOT:pop de:push de;ok
;PutPixel(CenterX - X, Center Y - Y)/setPixel(xCenter+y,yCenter-x)
ld a,(xr):add a,d:ld c,e,e,a
ld a,(yr):sub c:ld d,a
call PLOT:pop de:push de;ok
;PutPixel(CenterX + Y, Center Y + X)/setPixel(xCenter-x,yCenter-y)
ld a,(xr):sub e:ld e,a
ld a,(yr):sub d:ld d,a
call PLOT:pop de:push de;ok
;PutPixel(CenterX + Y, Center Y - X)/setPixel(xCenter-y,yCenter-x)
ld a,(xr):sub d:ld c,e,e,a
ld a,(yr):sub c:ld d,a
call PLOT:pop de:push de;ok
;PutPixel(CenterX - Y, Center Y + X)/setPixel(xCenter+x,yCenter-y)
ld a,(xr):add a,e:ld e,a
ld a,(yr):sub d:ld d,a
call PLOT:pop de:push de;ok
;PutPixel(CenterX - Y, Center Y - X)/setPixel(xCenter-y,yCenter+x)
ld a,(xr):sub d:ld c,e,e,a
ld a,(yr):add a,c:ld d,a
call PLOT:pop de
ret
FORMER LD DE,#4000,BC,#8000,L,E
FLP1 LD H,high PLOTTBL
LD (HL),D:INC H:LD (HL),E:INC H
LD (HL),C:INC H:LD (HL),B
RRC B
LD A,C:ADC A,0:LD C,A
FBR1 INC D:LD A,D:AND 7
JR NZ,FNXT:LD A,E:ADD A,32
LD E,A:JR C,FNXT
LD A,D:SUB 8:LD D,A
FNXT INC L:JR NZ,FLP1
LD HL,PLOTTBL+#C0,BC,#3F
LD DE,HL:INC E
LD (HL),0:LDIR
RET
;----------- plot DE=x.y------------------------
PLOT
PUSH HL,BC:LD H,HIGH PLOTTBL,L,D,B,(HL):INC H
LD A,(HL),L,E:INC H:OR (HL)
INC H:LD C,A,A,(BC)
OR (HL):LD (BC),A
POP BC,HL:RET
end
display /d,end-begin
savesna "test.sna",begin