![]() |
Routines |
| Prev: 9C61 | Up: Map | Next: 9D19 |
|
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.
|
||||||||||
| 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 |