Prev: 64592 Up: Map Next: 64774
64620: FILL routine
FILL_ROUTINE 64620 DI Disable interrupt
64621 BIT 5,(IX+0) Is bit 5 set? (SHADE command)
64625 JP NZ,SHADE_ROUTINE
64628 BIT 4,(IX+0) Is bit 4 set? (BLOCK command)
64632 JP NZ,BLOCK_ROUTINE
64635 CALL CALC_RELATIVE_OFFSETS Calculate offsets
64638 CALL PIXEL_TO_SCREEN_ADDRESS Convert pixel to screen address
64641 AND (HL) Is that pixel set?
64642 JR NZ,FILL_ROUTINE_6 If so, nothing more to do
64644 LD DE,(23653) DE=STK-END
64648 LD HL,65522
64651 ADD HL,SP
64652 SBC HL,DE
64654 SRL H
64656 RR L
64658 LD D,255
64660 LD E,L
64661 LD A,H
64662 OR A
64663 JR Z,FILL_ROUTINE_0
64665 LD E,D
FILL_ROUTINE_0 64666 PUSH DE
FILL_ROUTINE_1 64667 LD D,0
FILL_ROUTINE_2 64669 INC C Increment X co-ordinate
64670 JR Z,FILL_ROUTINE_4 If we've reached edge of screen, stop incrementing
64672 CALL PIXEL_TO_SCREEN_ADDRESS Convert pixel to screen address
64675 AND (HL) Is that pixel set?
64676 JR Z,FILL_ROUTINE_2 If not, keep incrementing X co-ordinate
This entry point is used by the routines at FILL_ROUTINE_8 and FILL_ROUTINE_11.
FILL_ROUTINE_3 64678 LD A,C A=X co-ordinate
64679 OR A Is X co-ordinate = 0?
64680 JR Z,FILL_ROUTINE_5
FILL_ROUTINE_4 64682 DEC C Decrement X co-ordincate
64683 CALL PIXEL_TO_SCREEN_ADDRESS Convert pixel to screen address
64686 PUSH AF Store A (pixel as byte)
64687 AND (HL) Is that pixel set?
64688 JR Z,FILL_ROUTINE_7 If not, skip forward to set pixel
64690 POP AF Retrieve pixel as byte
FILL_ROUTINE_5 64691 POP BC Retrieve X and Y co-ords from stack
64692 INC E
64693 LD A,B A=Y co-ordinate
64694 INC A What would next Y co-ordinate be?
64695 JR Z,FILL_ROUTINE_6 If Y co-ordinate would be 0, exit to next graphics instruction
64697 CALL PIXEL_TO_SCREEN_ADDRESS Convert pixel to screen address
64700 AND (HL) Is that pixel set?
64701 JR NZ,FILL_ROUTINE_5 If not, pop next set of co-ordinates and carry on
64703 JR FILL_ROUTINE_1
FILL_ROUTINE_6 64705 EI
64706 JP SKIP_3_THEN_NEXT Next graphics instruction
FILL_ROUTINE_7 64709 POP AF Retrieve pixel as byte to write
64710 PUSH DE
64711 OR (HL) Set pixel
64712 LD (HL),A Write pixel back to screen
64713 CALL 3035 Set attribute byte
64716 POP DE
64717 LD A,B A=Y co-ordinate
64718 CP 175 Does it equal 175?
64720 JR Z,FILL_ROUTINE_10
64722 INC B
64723 CALL PIXEL_TO_SCREEN_ADDRESS Convert pixel to screen address
64726 AND (HL) Is that pixel set?
64727 JR Z,FILL_ROUTINE_8
64729 RES 1,D
64731 JR FILL_ROUTINE_9
FILL_ROUTINE_8 64733 BIT 1,D
64735 JR NZ,FILL_ROUTINE_9
64737 XOR A A=0
64738 OR E Is E > 0?
64739 JR Z,FILL_ROUTINE_9
64741 DEC E
64742 PUSH BC Store current co-ordinates on stack
64743 SET 1,D
FILL_ROUTINE_9 64745 DEC B Decrement Y co-ordinate
64746 JR Z,FILL_ROUTINE_3 Back to start of loop
FILL_ROUTINE_10 64748 DEC B Decrement Y co-ordinate
64749 CALL PIXEL_TO_SCREEN_ADDRESS Convert pixel to screen adress
64752 AND (HL) Is that pixel set?
64753 JR Z,FILL_ROUTINE_11
64755 RES 0,D
64757 JR FILL_ROUTINE_12
FILL_ROUTINE_11 64759 BIT 0,D
64761 JR NZ,FILL_ROUTINE_12
64763 XOR A A=0
64764 OR E Is E > 0?
64765 JR Z,FILL_ROUTINE_12
64767 DEC E
64768 PUSH BC Store current co-ordinates on stack
64769 SET 0,D
FILL_ROUTINE_12 64771 INC B Increment Y co-ordinate
64772 JR FILL_ROUTINE_3 Back to start of loop
Prev: 64592 Up: Map Next: 64774