Prev: 9C61 Up: Map Next: 9D19
9C79: Draw a line between two points
Used by the routine at DRAW_OUTLINE.
Takes the difference along each axis, remembers which way each one runs in a pair of bits, and picks whichever axis is longer to step along -- the ordinary way of drawing a line one pixel at a time on a machine with no multiply. $5E23 and $5E24 hold the working values.
Input
BC One end
DE The other
DRAW_LINE 9C79 LD H,B Keep one end in HL to walk along.
9C7A LD L,C
9C7B LD C,$00
9C7D LD A,H |dx|, with bit 0 of C remembering the direction.
9C7E SUB D
9C7F JR NC,DRAW_LINE_0
9C81 NEG
9C83 SET 0,C
DRAW_LINE_0 9C85 LD B,A
9C86 LD A,L |dy|, in bit 1.
9C87 SUB E
9C88 JR NC,DRAW_LINE_1
9C8A NEG
9C8C SET 1,C
DRAW_LINE_1 9C8E CP B Whichever is longer becomes the axis stepped along...
9C8F EX AF,AF'
9C90 LD A,C
9C91 LD ($5E24),A
9C94 EX AF,AF'
9C95 JP C,DRAW_LINE_5 ...and the steep case is handled separately.
9C98 LD ($5E23),A
9C9B PUSH DE
9C9C PUSH HL
9C9D LD E,A
9C9E LD D,$00
9CA0 LD L,D
9CA1 LD H,B
9CA2 CALL DIVIDE_SLOPE
9CA5 LD A,($5E24)
9CA8 BIT 0,A
9CAA JR NZ,DRAW_LINE_2
9CAC CALL NEGATE_HL
DRAW_LINE_2 9CAF LD A,($5E24)
9CB2 BIT 1,A
9CB4 LD C,$01
9CB6 JR NZ,DRAW_LINE_3
9CB8 LD C,$FF
DRAW_LINE_3 9CBA EX DE,HL
9CBB POP HL
9CBC LD A,($5E23)
9CBF INC A
9CC0 LD B,A
9CC1 LD A,E
9CC2 EX AF,AF'
DRAW_LINE_4 9CC3 PUSH BC
9CC4 CALL PLOT_PIXEL
9CC7 LD A,L
9CC8 EX AF,AF'
9CC9 LD L,A
9CCA ADD HL,DE
9CCB LD A,L
9CCC EX AF,AF'
9CCD POP BC
9CCE ADD A,C
9CCF LD L,A
9CD0 DJNZ DRAW_LINE_4
9CD2 POP HL
9CD3 JP PLOT_PIXEL
DRAW_LINE_5 9CD6 EX AF,AF'
9CD7 LD A,B
9CD8 LD ($5E23),A
9CDB EX AF,AF'
9CDC PUSH DE
9CDD PUSH HL
9CDE LD E,B
9CDF LD D,$00
9CE1 LD L,D
9CE2 LD H,A
9CE3 CALL DIVIDE_SLOPE
9CE6 LD A,($5E24)
9CE9 BIT 1,A
9CEB JR NZ,DRAW_LINE_6
9CED CALL NEGATE_HL
DRAW_LINE_6 9CF0 LD A,($5E24)
9CF3 BIT 0,A
9CF5 LD C,$01
9CF7 JR NZ,DRAW_LINE_7
9CF9 LD C,$FF
DRAW_LINE_7 9CFB EX DE,HL
9CFC POP HL
9CFD LD A,($5E23)
9D00 INC A
9D01 LD B,A
9D02 LD A,E
9D03 EX AF,AF'
DRAW_LINE_8 9D04 PUSH BC
9D05 CALL PLOT_PIXEL
9D08 LD A,H
9D09 EX AF,AF'
9D0A LD H,L
9D0B LD L,A
9D0C ADD HL,DE
9D0D LD A,L
9D0E LD L,H
9D0F EX AF,AF'
9D10 POP BC
9D11 ADD A,C
9D12 LD H,A
9D13 DJNZ DRAW_LINE_8
9D15 POP HL
9D16 JP PLOT_PIXEL
Prev: 9C61 Up: Map Next: 9D19