Prev: 51529 Up: Map Next: 52047
51536: Draw Wide Entity Sprite
Draws or erases a wide entity's sprite on the display. Draw_Wide_Entity_Sprite sets draw mode so the entity colour is written to the attribute area. Erase_Wide_Entity_Sprite sets erase mode and skips the attribute write. Both paths enter Draw_Wide_Entity_Sprite_Render, which reads the entity type to look up sprite data from Sprite_Pixel_Data_Table, computes the screen position from the Y and X bytes, then XOR-blends sixteen pixel rows of sprite data onto the display across three bytes (24 pixels) wide.
Input
HL Entity record pointer
Draw_Wide_Entity_Sprite 51536 EXX Set draw mode (attribute write enabled).
51537 LD D,1
51539 EXX
This entry point is used by the routine at Erase_Wide_Entity_Sprite.
Draw_Wide_Entity_Sprite_Render 51540 LD B,H Copy the entity record pointer to BC.
51541 LD C,L
51542 LD E,(HL) Look up the sprite data address for this entity type.
51543 SLA E
51545 LD D,0
51547 LD HL,50700
51550 ADD HL,DE
51551 LD E,(HL)
51552 INC HL
51553 LD D,(HL)
51554 LD H,B Copy the entity record pointer from BC.
51555 LD L,C
51556 INC HL Read the entity's Y position and form the pixel row address.
51557 LD B,70
51559 LD C,(HL)
51560 SLA C
51562 RL B
51564 PUSH BC
51565 INC HL Read the X position and extract the byte column and bit offset.
51566 LD A,(HL)
51567 AND A
51568 LD HL,0
51571 RRA
51572 RR L
51574 RRA
51575 RR L
51577 RRA
51578 RR L
51580 EXX Save the pixel bit offset in the shadow register.
51581 LD C,A
51582 EXX
51583 LD A,L Compute the sprite pixel data address and add the column offset.
51584 RRCA
51585 ADD A,L
51586 LD L,A
51587 LD A,H
51588 ADC A,0
51590 LD H,A
51591 ADD HL,DE
51592 LD B,H Copy the sprite data pointer to BC.
51593 LD C,L
51594 POP HL Restore the pixel row address from the stack.
51595 EXX Read the pixel bit offset from the shadow register.
51596 LD A,C
51597 EXX
Render the sprite row by row. Each row XOR-blends three bytes of pixel data onto the display. After every ninth row the entity's colour is written to three screen attribute cells.
Draw_Wide_Entity_Sprite_Row1 51598 ADD A,(HL) Blit the first sprite row onto the display.
51599 LD E,A
51600 INC HL
51601 LD D,(HL)
51602 INC HL
51603 EX DE,HL
51604 LD A,(BC)
51605 XOR (HL)
51606 LD (HL),A
51607 INC BC
51608 INC HL
51609 LD A,(BC)
51610 XOR (HL)
51611 LD (HL),A
51612 INC BC
51613 INC HL
51614 LD A,(BC)
51615 XOR (HL)
51616 LD (HL),A
51617 INC BC
51618 EXX Jump to Draw_Wide_Entity_Sprite_Row2 if in erase mode (skip the attribute write).
51619 LD A,D
51620 AND A
51621 EXX
51622 JR Z,Draw_Wide_Entity_Sprite_Row2
51624 LD A,H Compute the attribute area address from the current screen row.
51625 RRCA
51626 RRCA
51627 RRCA
51628 AND %00000011 Keep only the row address bits.
51630 OR %01011000 Set the attribute memory flag.
51632 LD H,A Write the entity's colour to three attribute cells.
51633 EXX
51634 LD A,B
51635 EXX
51636 LD (HL),A
51637 DEC HL
51638 LD (HL),A
51639 DEC HL
51640 LD (HL),A
Draw_Wide_Entity_Sprite_Row2 51641 EX DE,HL Blit row two.
51642 EXX
51643 LD A,C
51644 EXX
51645 ADD A,(HL)
51646 LD E,A
51647 INC HL
51648 LD D,(HL)
51649 INC HL
51650 EX DE,HL
51651 LD A,(BC)
51652 XOR (HL)
51653 LD (HL),A
51654 INC BC
51655 INC HL
51656 LD A,(BC)
51657 XOR (HL)
51658 LD (HL),A
51659 INC BC
51660 INC HL
51661 LD A,(BC)
51662 XOR (HL)
51663 LD (HL),A
51664 INC BC
51665 EX DE,HL Blit row three.
51666 EXX
51667 LD A,C
51668 EXX
51669 ADD A,(HL)
51670 LD E,A
51671 INC HL
51672 LD D,(HL)
51673 INC HL
51674 EX DE,HL
51675 LD A,(BC)
51676 XOR (HL)
51677 LD (HL),A
51678 INC BC
51679 INC HL
51680 LD A,(BC)
51681 XOR (HL)
51682 LD (HL),A
51683 INC BC
51684 INC HL
51685 LD A,(BC)
51686 XOR (HL)
51687 LD (HL),A
51688 INC BC
51689 EX DE,HL Blit row four.
51690 EXX
51691 LD A,C
51692 EXX
51693 ADD A,(HL)
51694 LD E,A
51695 INC HL
51696 LD D,(HL)
51697 INC HL
51698 EX DE,HL
51699 LD A,(BC)
51700 XOR (HL)
51701 LD (HL),A
51702 INC BC
51703 INC HL
51704 LD A,(BC)
51705 XOR (HL)
51706 LD (HL),A
51707 INC BC
51708 INC HL
51709 LD A,(BC)
51710 XOR (HL)
51711 LD (HL),A
51712 INC BC
51713 EX DE,HL Blit row five.
51714 EXX
51715 LD A,C
51716 EXX
51717 ADD A,(HL)
51718 LD E,A
51719 INC HL
51720 LD D,(HL)
51721 INC HL
51722 EX DE,HL
51723 LD A,(BC)
51724 XOR (HL)
51725 LD (HL),A
51726 INC BC
51727 INC HL
51728 LD A,(BC)
51729 XOR (HL)
51730 LD (HL),A
51731 INC BC
51732 INC HL
51733 LD A,(BC)
51734 XOR (HL)
51735 LD (HL),A
51736 INC BC
51737 EX DE,HL Blit row six.
51738 EXX
51739 LD A,C
51740 EXX
51741 ADD A,(HL)
51742 LD E,A
51743 INC HL
51744 LD D,(HL)
51745 INC HL
51746 EX DE,HL
51747 LD A,(BC)
51748 XOR (HL)
51749 LD (HL),A
51750 INC BC
51751 INC HL
51752 LD A,(BC)
51753 XOR (HL)
51754 LD (HL),A
51755 INC BC
51756 INC HL
51757 LD A,(BC)
51758 XOR (HL)
51759 LD (HL),A
51760 INC BC
51761 EX DE,HL Blit row seven.
51762 EXX
51763 LD A,C
51764 EXX
51765 ADD A,(HL)
51766 LD E,A
51767 INC HL
51768 LD D,(HL)
51769 INC HL
51770 EX DE,HL
51771 LD A,(BC)
51772 XOR (HL)
51773 LD (HL),A
51774 INC BC
51775 INC HL
51776 LD A,(BC)
51777 XOR (HL)
51778 LD (HL),A
51779 INC BC
51780 INC HL
51781 LD A,(BC)
51782 XOR (HL)
51783 LD (HL),A
51784 INC BC
51785 EX DE,HL Blit row eight.
51786 EXX
51787 LD A,C
51788 EXX
51789 ADD A,(HL)
51790 LD E,A
51791 INC HL
51792 LD D,(HL)
51793 INC HL
51794 EX DE,HL
51795 LD A,(BC)
51796 XOR (HL)
51797 LD (HL),A
51798 INC BC
51799 INC HL
51800 LD A,(BC)
51801 XOR (HL)
51802 LD (HL),A
51803 INC BC
51804 INC HL
51805 LD A,(BC)
51806 XOR (HL)
51807 LD (HL),A
51808 INC BC
51809 EX DE,HL Blit row nine.
51810 EXX
51811 LD A,C
51812 EXX
51813 ADD A,(HL)
51814 LD E,A
51815 INC HL
51816 LD D,(HL)
51817 INC HL
51818 EX DE,HL
51819 LD A,(BC)
51820 XOR (HL)
51821 LD (HL),A
51822 INC BC
51823 INC HL
51824 LD A,(BC)
51825 XOR (HL)
51826 LD (HL),A
51827 INC BC
51828 INC HL
51829 LD A,(BC)
51830 XOR (HL)
51831 LD (HL),A
51832 INC BC
51833 EXX Jump to Draw_Wide_Entity_Sprite_Row10 if in erase mode (skip the attribute write).
51834 LD A,D
51835 AND A
51836 EXX
51837 JR Z,Draw_Wide_Entity_Sprite_Row10
51839 LD A,H Compute the attribute area address from the current screen row.
51840 RRCA
51841 RRCA
51842 RRCA
51843 AND %00000011 Keep only the row address bits.
51845 OR %01011000 Set the attribute memory flag.
51847 LD H,A Write the entity's colour to three attribute cells.
51848 EXX
51849 LD A,B
51850 EXX
51851 LD (HL),A
51852 DEC HL
51853 LD (HL),A
51854 DEC HL
51855 LD (HL),A
Draw_Wide_Entity_Sprite_Row10 51856 EX DE,HL Blit row ten.
51857 EXX
51858 LD A,C
51859 EXX
51860 ADD A,(HL)
51861 LD E,A
51862 INC HL
51863 LD D,(HL)
51864 INC HL
51865 EX DE,HL
51866 LD A,(BC)
51867 XOR (HL)
51868 LD (HL),A
51869 INC BC
51870 INC HL
51871 LD A,(BC)
51872 XOR (HL)
51873 LD (HL),A
51874 INC BC
51875 INC HL
51876 LD A,(BC)
51877 XOR (HL)
51878 LD (HL),A
51879 INC BC
51880 EX DE,HL Blit row eleven.
51881 EXX
51882 LD A,C
51883 EXX
51884 ADD A,(HL)
51885 LD E,A
51886 INC HL
51887 LD D,(HL)
51888 INC HL
51889 EX DE,HL
51890 LD A,(BC)
51891 XOR (HL)
51892 LD (HL),A
51893 INC BC
51894 INC HL
51895 LD A,(BC)
51896 XOR (HL)
51897 LD (HL),A
51898 INC BC
51899 INC HL
51900 LD A,(BC)
51901 XOR (HL)
51902 LD (HL),A
51903 INC BC
51904 EX DE,HL Blit row twelve.
51905 EXX
51906 LD A,C
51907 EXX
51908 ADD A,(HL)
51909 LD E,A
51910 INC HL
51911 LD D,(HL)
51912 INC HL
51913 EX DE,HL
51914 LD A,(BC)
51915 XOR (HL)
51916 LD (HL),A
51917 INC BC
51918 INC HL
51919 LD A,(BC)
51920 XOR (HL)
51921 LD (HL),A
51922 INC BC
51923 INC HL
51924 LD A,(BC)
51925 XOR (HL)
51926 LD (HL),A
51927 INC BC
51928 EX DE,HL Blit row thirteen.
51929 EXX
51930 LD A,C
51931 EXX
51932 ADD A,(HL)
51933 LD E,A
51934 INC HL
51935 LD D,(HL)
51936 INC HL
51937 EX DE,HL
51938 LD A,(BC)
51939 XOR (HL)
51940 LD (HL),A
51941 INC BC
51942 INC HL
51943 LD A,(BC)
51944 XOR (HL)
51945 LD (HL),A
51946 INC BC
51947 INC HL
51948 LD A,(BC)
51949 XOR (HL)
51950 LD (HL),A
51951 INC BC
51952 EX DE,HL Blit row fourteen.
51953 EXX
51954 LD A,C
51955 EXX
51956 ADD A,(HL)
51957 LD E,A
51958 INC HL
51959 LD D,(HL)
51960 INC HL
51961 EX DE,HL
51962 LD A,(BC)
51963 XOR (HL)
51964 LD (HL),A
51965 INC BC
51966 INC HL
51967 LD A,(BC)
51968 XOR (HL)
51969 LD (HL),A
51970 INC BC
51971 INC HL
51972 LD A,(BC)
51973 XOR (HL)
51974 LD (HL),A
51975 INC BC
51976 EX DE,HL Blit row fifteen.
51977 EXX
51978 LD A,C
51979 EXX
51980 ADD A,(HL)
51981 LD E,A
51982 INC HL
51983 LD D,(HL)
51984 INC HL
51985 EX DE,HL
51986 LD A,(BC)
51987 XOR (HL)
51988 LD (HL),A
51989 INC BC
51990 INC HL
51991 LD A,(BC)
51992 XOR (HL)
51993 LD (HL),A
51994 INC BC
51995 INC HL
51996 LD A,(BC)
51997 XOR (HL)
51998 LD (HL),A
51999 INC BC
52000 EX DE,HL Blit row sixteen.
52001 EXX
52002 LD A,C
52003 EXX
52004 ADD A,(HL)
52005 LD E,A
52006 INC HL
52007 LD D,(HL)
52008 INC HL
52009 EX DE,HL
52010 LD A,(BC)
52011 XOR (HL)
52012 LD (HL),A
52013 INC BC
52014 INC HL
52015 LD A,(BC)
52016 XOR (HL)
52017 LD (HL),A
52018 INC BC
52019 INC HL
52020 LD A,(BC)
52021 XOR (HL)
52022 LD (HL),A
52023 INC BC
52024 EXX Return if in erase mode (skip the final attribute write).
52025 LD A,D
52026 AND A
52027 EXX
52028 RET Z
52029 LD A,H Compute the attribute area address from the current screen row.
52030 RRCA
52031 RRCA
52032 RRCA
52033 AND %00000011 Keep only the row address bits.
52035 OR %01011000 Set the attribute memory flag.
52037 LD H,A Write the entity's colour to three attribute cells and return.
52038 EXX
52039 LD A,B
52040 EXX
52041 LD (HL),A
52042 DEC HL
52043 LD (HL),A
52044 DEC HL
52045 LD (HL),A
52046 RET
Prev: 51529 Up: Map Next: 52047