ORG 32768
LD C, 94 ; X
LD B, 100 ; Y
Plot:
CALL SetBit
Right:
INC C
CALL GetBit
AND (HL)
JR NZ, SkipRight
PUSH BC
CALL Plot
POP BC
SkipRight:
DEC C
Left:
DEC C
CALL GetBit
AND (HL)
JR NZ, SkipLeft
PUSH BC
CALL Plot
POP BC
SkipLeft:
INC C
Up:
INC B
CALL GetBit
AND (HL)
JR NZ, SkipUp
PUSH BC
CALL Plot
POP BC
SkipUp:
DEC B
Down:
DEC B
CALL GetBit
AND (HL)
JR NZ, SkipDown
PUSH BC
CALL Plot
POP BC
SkipDown:
INC B
RET
GetBit:
PUSH BC
CALL 22AAh ; PIXEL-ADD
POP BC
PUSH BC
LD B, A
INC B
XOR A
SCF
Loop:
RRA
DJNZ Loop
POP BC
RET
SetBit:
CALL GetBit
OR (HL)
LD (HL), A
RET
10 BORDER 0: PAPER 0: INK 0: BRIGHT 0: CLS
9001 LET x$="055197195055055192189054051043048041037018029043052039106066057088078055048066016"
9002 LET y$="159131124151142116108135088090136137095071065088085066044019024043048030033047065"
9100 GO TO 9400
9200 LET x2=VAL (x$(g TO g+2)): LET y2=VAL (y$(g TO g+2)): RETURN
9300 LET x1=x2: LET y1=y2: RETURN
9400 LET g=1: GO SUB 9200: FOR g=1 TO LEN x$ STEP 3: GO SUB 9300: GO SUB 9200: IF x2<0 THEN LET g=g+1: GO SUB 9200: GO SUB 9300
9500 PLOT INVERSE 1;x1,y1: DRAW INVERSE 1; PAPER 2;x2-x1,y2-y1: NEXT g