Prev: 31154 Up: Map Next: 31874
31591: Handler: Aliens
Used by the routines at TitleScreen and StartGame.
Handler_Aliens 31591 LD A,(26257) Return if *26257 is zero.
31594 OR A
31595 RET Z
31596 LD A,(26261) Return if A=*26261 is not zero.
31599 OR A
31600 RET NZ
31601 LD HL,26279 HL=26279.
31604 LD B,6 B=6.
Handler_Aliens_0 31606 PUSH BC Stash BC and HL on the stack.
31607 PUSH HL
31608 LD E,(HL) E=*HL.
31609 INC HL Increment HL by one.
31610 LD D,(HL) D=*HL.
31611 LD A,D Jump to Handler_Aliens_12 if D is not zero.
31612 OR A
31613 JP NZ,Handler_Aliens_12
31616 LD A,(26276) Jump to Handler_Aliens_19 if *26276 is not zero.
31619 OR A
31620 JP NZ,Handler_Aliens_19
31623 PUSH HL Stash HL on the stack.
31624 LD HL,26297 HL=26297.
31627 LD A,(26298) Jump to Handler_Aliens_3 if *26298 is not zero.
31630 OR A
31631 JR NZ,Handler_Aliens_3
31633 LD A,(26353) A=*26353.
31636 AND %00000110 Keep only bits 1-2.
31638 LD A,28 A=28.
31640 JR Z,Handler_Aliens_1 Jump to Handler_Aliens_1 if HL is equal to A.
31642 LD A,14 A=14.
Handler_Aliens_1 31644 CP (HL) Jump to Handler_Aliens_2 if *HL is not zero.
31645 JR NZ,Handler_Aliens_2
31647 LD (HL),254 Write 254 to *HL.
Handler_Aliens_2 31649 INC (HL) Increment *HL by two.
31650 INC (HL)
Handler_Aliens_3 31651 LD L,(HL) L=*HL.
31652 LD H,0 H=0.
31654 LD DE,26077 HL+=26077.
31657 ADD HL,DE
31658 LD E,(HL) E=*HL.
31659 INC HL Increment HL by one.
31660 LD D,(HL) D=*HL.
31661 LD A,D Jump to Handler_Aliens_4 if D is not zero.
31662 OR A
31663 JR NZ,Handler_Aliens_4
31665 LD HL,26298 HL=26298.
31668 LD (HL),A Write A to *HL.
31669 JR Handler_Aliens_11 Jump to Handler_Aliens_11.
Handler_Aliens_4 31671 CALL ConvertScreenToAttributeBufferAddress Call ConvertScreenToAttributeBufferAddress.
31674 LD A,D Jump to Handler_Aliens_11 if D is equal to 88.
31675 CP 88
31677 JR Z,Handler_Aliens_11
31679 LD A,E A=E.
31680 AND %00011111 Keep only bits 0-4.
31682 LD B,A B=A.
31683 LD A,(26349) A=*26349.
31686 AND %00011111 Keep only bits 0-4.
31688 CP B Jump to Handler_Aliens_6 if A is less than B.
31689 JR C,Handler_Aliens_6
31691 SUB B A-=B.
Handler_Aliens_5 31692 CP 8 Jump to Handler_Aliens_11 if A is greater than or equal to 8.
31694 JR NC,Handler_Aliens_11
31696 JR Handler_Aliens_7 Jump to Handler_Aliens_7.
Handler_Aliens_6 31698 LD C,A C=A.
31699 LD A,B A=B-C.
31700 SUB C
31701 JR Handler_Aliens_5 Jump to Handler_Aliens_5.
Handler_Aliens_7 31703 LD HL,65 HL=0065+DE.
31706 ADD HL,DE
31707 PUSH HL Stash HL on the stack.
31708 LD DE,23264 DE=23264 (attribute buffer location).
31711 LD A,(26259) Jump to Handler_Aliens_8 if *26259 is zero.
31714 AND A
31715 JR Z,Handler_Aliens_8
31717 LD E,192 E=192.
Handler_Aliens_8 31719 SBC HL,DE HL-=DE (with carry).
31721 POP HL Restore HL from the stack.
31722 JR NC,Handler_Aliens_11 Jump to Handler_Aliens_11 if A is greater than or equal to A.
31724 PUSH HL Stash HL on the stack.
31725 LD HL,26298 HL=26298.
31728 INC (HL) Increment *HL by one.
31729 LD A,(HL) Jump to Handler_Aliens_9 if *HL is not equal to 4.
31730 CP 4
31732 JR NZ,Handler_Aliens_9
31734 LD (HL),0 Write 0 to *HL.
Handler_Aliens_9 31736 INC HL Increment HL by one.
31737 LD A,(26353) A=*26353.
31740 AND %00000010 Keep only bit 1.
31742 LD A,3 A=3.
31744 JR Z,Handler_Aliens_10 Jump to Handler_Aliens_10 if HL is equal to 3.
31746 INC (HL) Increment *HL by one.
31747 LD A,(HL) Jump to Handler_Aliens_10 if *HL is not equal to 3.
31748 CP 3
31750 JR NZ,Handler_Aliens_10
31752 XOR A Write 0 to *HL.
31753 LD (HL),A
Handler_Aliens_10 31754 ADD A,A Multiply A by 8.
31755 ADD A,A
31756 ADD A,A
31757 POP HL Restore HL and DE from the stack.
31758 POP DE
31759 INC DE Increment DE by one.
31760 LD (DE),A Write A to *DE.
31761 LD IXl,A
31763 JR Handler_Aliens_14 Jump to Handler_Aliens_14.
Handler_Aliens_11 31765 POP AF Restore AF from the stack.
31766 JR Handler_Aliens_15 Jump to Handler_Aliens_15.
Handler_Aliens_12 31768 EX DE,HL Exchange the DE and HL registers.
31769 LD A,(HL) Jump to Handler_Aliens_15 if *HL is equal to 70.
31770 CP 70
31772 JR Z,Handler_Aliens_15
31774 CP 7 Jump to Handler_Aliens_15 if *HL is equal to 7.
31776 JR Z,Handler_Aliens_15
31778 LD (HL),0 Write 0 to *HL.
31780 INC DE Increment DE by one.
31781 LD A,(DE) A=*DE.
31782 LD IXl,A
31784 PUSH HL Stash HL on the stack.
31785 CALL ConvertAttributeToScreenBufferAddress Call ConvertAttributeToScreenBufferAddress.
31788 LD B,8 B=8.
31790 XOR A A=0.
Handler_Aliens_13 31791 LD (HL),A Write A to *HL.
31792 INC H Increment H by one.
31793 DJNZ Handler_Aliens_13 Decrease counter by one and loop back to Handler_Aliens_13 until counter is zero.
31795 POP HL Restore HL from the stack.
31796 LD C,32 C=32.
31798 ADD HL,BC HL+=BC.
31799 PUSH HL Stash HL on the stack.
31800 LD BC,23296 BC=23296 (attribute buffer location).
31803 AND A HL-=BC.
31804 SBC HL,BC
31806 POP HL Restore HL from the stack.
31807 JR NC,Handler_Aliens_15 Jump to Handler_Aliens_15 if H is greater than or equal to A.
Handler_Aliens_14 31809 LD A,(HL) Jump to Handler_Aliens_16 if *HL is zero.
31810 OR A
31811 JR Z,Handler_Aliens_16
31813 LD A,(26259) Jump to Handler_Aliens_15 if *26259 is not zero.
31816 OR A
31817 JR NZ,Handler_Aliens_15
31819 LD A,(HL) Jump to Handler_Aliens_16 if *HL is equal to 70.
31820 CP 70
31822 JR Z,Handler_Aliens_16
Handler_Aliens_15 31824 LD D,0 D=0.
31826 JR Handler_Aliens_19 Jump to Handler_Aliens_19.
Handler_Aliens_16 31828 LD A,(26353) A=*26353.
31831 AND %00000010 Keep only bit 1.
31833 LD A,69 A=69.
31835 JR Z,Handler_Aliens_17 Jump to Handler_Aliens_17 if A is equal to 69.
31837 LD A,6 Write 6 to *HL.
Handler_Aliens_17 31839 LD (HL),A
31840 PUSH HL Stash HL on the stack.
31841 CALL ConvertAttributeToScreenBufferAddress Call ConvertAttributeToScreenBufferAddress.
31844 EX DE,HL Exchange the DE and HL registers.
31845 LD HL,24622 HL=Graphics_Bullets_01.
31848 LD C,IXl
31850 LD B,0 B=0.
31852 ADD HL,BC HL+=BC.
31853 LD B,8 Set a line counter in B (8 lines in a UDG).
Handler_Aliens_18 31855 LD A,(HL) Copy the UDG data to the screen buffer.
31856 LD (DE),A
31857 INC D Move down one pixel line in the screen buffer.
31858 INC HL Move to the next UDG graphic data byte.
31859 DJNZ Handler_Aliens_18 Decrease the line counter by one and loop back to Handler_Aliens_18 until all 8 lines of the UDG character have been drawn.
31861 POP DE Restore DE and HL from the stack.
Handler_Aliens_19 31862 POP HL
31863 LD (HL),E Write E to *HL.
31864 INC HL Increment HL by one.
31865 LD (HL),D Write D to *HL.
31866 INC HL Increment HL by two.
31867 INC HL
31868 POP BC Restore BC from the stack.
31869 DEC B Decrease B by one.
31870 JP NZ,Handler_Aliens_0 Jump to Handler_Aliens_0 if B is not equal to 8.
31873 RET Return.
Prev: 31154 Up: Map Next: 31874