ZXNet эхоконференция «code.zx»
тема: настоящих буйных мало...
от: Oleg Grigoriev
кому: All
дата: 25 Jul 1999
Пусть враги твои, All, умрут без сыновей!
Сидел тут, сидел и со скуки написал часа за полтора процедуру построения
окружности по Брезенхему... Толку с неё никакого, но не выбрасывать же? :)
────[ Здесь начинается файл CIRCLE .C ]───────────────────────
ORG #8000
CALL CR_PTB
LD DE,#7F5F,B,#5E:CALL CIRCLE
HALT:XOR A:IN (#FE):CPL:AND #1F
JR Z,$-#07
RET
;***************************************
;[DE] =X,Y
;[B] =R
;
CIRCLE LD L,B,H,#00
ADD HL,HL
PUSH DE:LD DE,#0003
EX DE,HL
OR A:SBC HL,DE
POP DE
LD C,B,B,#00
CIR0 PUSH DE
PUSH HL,BC
CIR01 LD A,D:ADD A,B:JR C,CIR02
PUSH DE,BC
LD D,A
PUSH DE,BC
LD A,E:ADD A,C:LD E,A
CALL NC,PNTS
POP BC,DE
LD A,E:SUB C:LD E,A
CALL NC,PNTS
POP BC,DE
CIR02 LD A,D:SUB B:JR C,CIR03
PUSH DE,BC
LD D,A
PUSH DE,BC
LD A,E:ADD A,C:LD E,A
CALL NC,PNTS
POP BC,DE
LD A,E:SUB C:LD E,A
CALL NC,PNTS
POP BC,DE
CIR03 LD A,D:ADD A,C:JR C,CIR04
PUSH DE,BC
LD D,A
PUSH DE,BC
LD A,E:ADD A,B:LD E,A
CALL NC,PNTS
POP BC,DE
LD A,E:SUB B:LD E,A
CALL NC,PNTS
POP BC,DE
CIR04 LD A,D:SUB C:JR C,CIR1
LD D,A
PUSH DE,BC
LD A,E:ADD A,B:LD E,A
CALL NC,PNTS
POP BC,DE
LD A,E:SUB B:LD E,A
CALL NC,PNTS
CIR1 POP BC,HL
INC B
BIT 7,H:JR Z,CIR2
PUSH HL
LD L,B,H,#00
LD DE,#0006
JR CIR3
CIR2 DEC C
PUSH HL
LD L,B,H,#00
LD E,C,D,#00
OR A:SBC HL,DE
LD DE,#000A
CIR3 ADD HL,HL,HL,HL,HL,DE
POP DE:ADD HL,DE
POP DE
LD A,C:SUB B:JP NC,CIR0
RET
;***************************************
;[DE] =X,Y
;
PNTS LD H,PNTTB[,L,D,C,(HL)
INC H:LD A,(HL)
INC H:LD L,E:OR (HL)
INC H:LD H,(HL),L,A
LD A,(HL):OR C:LD (HL),A
RET
;***************************************
;
CR_PTB LD HL,PNTTB,A,#80
CRPT0 LD (HL),A:RRCA:INC L
JR NZ,CRPT0
INC H
CRPT1 LD A,L:RRCA:RRCA:RRCA:AND #1F
LD (HL),A:INC L
JR NZ,CRPT1
INC H
LD B,#C0,DE,#4000
CRPT2 CALL CRPTDE0,CRPTDE1:DJNZ CRPT2
LD DE,#0000
CRPT3 CALL CRPTDE0:JR NZ,CRPT3
RET
CRPTDE0 LD (HL),E:INC H
LD (HL),D:DEC H:INC L
RET
CRPTDE1 INC D:LD A,D:AND #07:RET NZ
LD A,E:ADD A,#20:LD E,A:RET C
LD A,D:SUB #08:LD D,A
RET
ORG $^
PNTTB
────[ Здесь кончается файл CIRCLE .C ]────────────────────────
[ WBR, Oleg. ]
[ 21:09 25 July XXXIV A.S. ]
|