Prev: 79B2 Up: Map Next: 7C82
7B67: Handler: Aliens
Used by the routines at TitleScreen and StartGame.
Handler_Aliens 7B67 LD A,($6691) Return if *6691 is zero.
7B6A OR A
7B6B RET Z
7B6C LD A,($6695) Return if A=*6695 is not zero.
7B6F OR A
7B70 RET NZ
7B71 LD HL,$66A7 HL=66A7.
7B74 LD B,$06 B=06.
Handler_Aliens_0 7B76 PUSH BC Stash BC and HL on the stack.
7B77 PUSH HL
7B78 LD E,(HL) E=*HL.
7B79 INC HL Increment HL by one.
7B7A LD D,(HL) D=*HL.
7B7B LD A,D Jump to Handler_Aliens_12 if D is not zero.
7B7C OR A
7B7D JP NZ,Handler_Aliens_12
7B80 LD A,($66A4) Jump to Handler_Aliens_19 if *66A4 is not zero.
7B83 OR A
7B84 JP NZ,Handler_Aliens_19
7B87 PUSH HL Stash HL on the stack.
7B88 LD HL,$66B9 HL=66B9.
7B8B LD A,($66BA) Jump to Handler_Aliens_3 if *66BA is not zero.
7B8E OR A
7B8F JR NZ,Handler_Aliens_3
7B91 LD A,($66F1) A=*66F1.
7B94 AND %00000110 Keep only bits 1-2.
7B96 LD A,$1C A=1C.
7B98 JR Z,Handler_Aliens_1 Jump to Handler_Aliens_1 if HL is equal to A.
7B9A LD A,$0E A=0E.
Handler_Aliens_1 7B9C CP (HL) Jump to Handler_Aliens_2 if *HL is not zero.
7B9D JR NZ,Handler_Aliens_2
7B9F LD (HL),$FE Write FE to *HL.
Handler_Aliens_2 7BA1 INC (HL) Increment *HL by two.
7BA2 INC (HL)
Handler_Aliens_3 7BA3 LD L,(HL) L=*HL.
7BA4 LD H,$00 H=00.
7BA6 LD DE,$65DD HL+=65DD.
7BA9 ADD HL,DE
7BAA LD E,(HL) E=*HL.
7BAB INC HL Increment HL by one.
7BAC LD D,(HL) D=*HL.
7BAD LD A,D Jump to Handler_Aliens_4 if D is not zero.
7BAE OR A
7BAF JR NZ,Handler_Aliens_4
7BB1 LD HL,$66BA HL=66BA.
7BB4 LD (HL),A Write A to *HL.
7BB5 JR Handler_Aliens_11 Jump to Handler_Aliens_11.
Handler_Aliens_4 7BB7 CALL ConvertScreenToAttributeBufferAddress Call ConvertScreenToAttributeBufferAddress.
7BBA LD A,D Jump to Handler_Aliens_11 if D is equal to 58.
7BBB CP $58
7BBD JR Z,Handler_Aliens_11
7BBF LD A,E A=E.
7BC0 AND %00011111 Keep only bits 0-4.
7BC2 LD B,A B=A.
7BC3 LD A,($66ED) A=*66ED.
7BC6 AND %00011111 Keep only bits 0-4.
7BC8 CP B Jump to Handler_Aliens_6 if A is less than B.
7BC9 JR C,Handler_Aliens_6
7BCB SUB B A-=B.
Handler_Aliens_5 7BCC CP $08 Jump to Handler_Aliens_11 if A is greater than or equal to 08.
7BCE JR NC,Handler_Aliens_11
7BD0 JR Handler_Aliens_7 Jump to Handler_Aliens_7.
Handler_Aliens_6 7BD2 LD C,A C=A.
7BD3 LD A,B A=B-C.
7BD4 SUB C
7BD5 JR Handler_Aliens_5 Jump to Handler_Aliens_5.
Handler_Aliens_7 7BD7 LD HL,$0041 HL=0041+DE.
7BDA ADD HL,DE
7BDB PUSH HL Stash HL on the stack.
7BDC LD DE,$5AE0 DE=5AE0 (attribute buffer location).
7BDF LD A,($6693) Jump to Handler_Aliens_8 if *6693 is zero.
7BE2 AND A
7BE3 JR Z,Handler_Aliens_8
7BE5 LD E,$C0 E=C0.
Handler_Aliens_8 7BE7 SBC HL,DE HL-=DE (with carry).
7BE9 POP HL Restore HL from the stack.
7BEA JR NC,Handler_Aliens_11 Jump to Handler_Aliens_11 if A is greater than or equal to A.
7BEC PUSH HL Stash HL on the stack.
7BED LD HL,$66BA HL=66BA.
7BF0 INC (HL) Increment *HL by one.
7BF1 LD A,(HL) Jump to Handler_Aliens_9 if *HL is not equal to 04.
7BF2 CP $04
7BF4 JR NZ,Handler_Aliens_9
7BF6 LD (HL),$00 Write 00 to *HL.
Handler_Aliens_9 7BF8 INC HL Increment HL by one.
7BF9 LD A,($66F1) A=*66F1.
7BFC AND %00000010 Keep only bit 1.
7BFE LD A,$03 A=03.
7C00 JR Z,Handler_Aliens_10 Jump to Handler_Aliens_10 if HL is equal to 03.
7C02 INC (HL) Increment *HL by one.
7C03 LD A,(HL) Jump to Handler_Aliens_10 if *HL is not equal to 03.
7C04 CP $03
7C06 JR NZ,Handler_Aliens_10
7C08 XOR A Write 00 to *HL.
7C09 LD (HL),A
Handler_Aliens_10 7C0A ADD A,A Multiply A by 08.
7C0B ADD A,A
7C0C ADD A,A
7C0D POP HL Restore HL and DE from the stack.
7C0E POP DE
7C0F INC DE Increment DE by one.
7C10 LD (DE),A Write A to *DE.
7C11 LD IXl,A
7C13 JR Handler_Aliens_14 Jump to Handler_Aliens_14.
Handler_Aliens_11 7C15 POP AF Restore AF from the stack.
7C16 JR Handler_Aliens_15 Jump to Handler_Aliens_15.
Handler_Aliens_12 7C18 EX DE,HL Exchange the DE and HL registers.
7C19 LD A,(HL) Jump to Handler_Aliens_15 if *HL is equal to 46.
7C1A CP $46
7C1C JR Z,Handler_Aliens_15
7C1E CP $07 Jump to Handler_Aliens_15 if *HL is equal to 07.
7C20 JR Z,Handler_Aliens_15
7C22 LD (HL),$00 Write 00 to *HL.
7C24 INC DE Increment DE by one.
7C25 LD A,(DE) A=*DE.
7C26 LD IXl,A
7C28 PUSH HL Stash HL on the stack.
7C29 CALL ConvertAttributeToScreenBufferAddress Call ConvertAttributeToScreenBufferAddress.
7C2C LD B,$08 B=08.
7C2E XOR A A=00.
Handler_Aliens_13 7C2F LD (HL),A Write A to *HL.
7C30 INC H Increment H by one.
7C31 DJNZ Handler_Aliens_13 Decrease counter by one and loop back to Handler_Aliens_13 until counter is zero.
7C33 POP HL Restore HL from the stack.
7C34 LD C,$20 C=20.
7C36 ADD HL,BC HL+=BC.
7C37 PUSH HL Stash HL on the stack.
7C38 LD BC,$5B00 BC=5B00 (attribute buffer location).
7C3B AND A HL-=BC.
7C3C SBC HL,BC
7C3E POP HL Restore HL from the stack.
7C3F JR NC,Handler_Aliens_15 Jump to Handler_Aliens_15 if H is greater than or equal to A.
Handler_Aliens_14 7C41 LD A,(HL) Jump to Handler_Aliens_16 if *HL is zero.
7C42 OR A
7C43 JR Z,Handler_Aliens_16
7C45 LD A,($6693) Jump to Handler_Aliens_15 if *6693 is not zero.
7C48 OR A
7C49 JR NZ,Handler_Aliens_15
7C4B LD A,(HL) Jump to Handler_Aliens_16 if *HL is equal to 46.
7C4C CP $46
7C4E JR Z,Handler_Aliens_16
Handler_Aliens_15 7C50 LD D,$00 D=00.
7C52 JR Handler_Aliens_19 Jump to Handler_Aliens_19.
Handler_Aliens_16 7C54 LD A,($66F1) A=*66F1.
7C57 AND %00000010 Keep only bit 1.
7C59 LD A,$45 A=45.
7C5B JR Z,Handler_Aliens_17 Jump to Handler_Aliens_17 if A is equal to 45.
7C5D LD A,$06 Write 06 to *HL.
Handler_Aliens_17 7C5F LD (HL),A
7C60 PUSH HL Stash HL on the stack.
7C61 CALL ConvertAttributeToScreenBufferAddress Call ConvertAttributeToScreenBufferAddress.
7C64 EX DE,HL Exchange the DE and HL registers.
7C65 LD HL,$602E HL=Graphics_Bullets_01.
7C68 LD C,IXl
7C6A LD B,$00 B=00.
7C6C ADD HL,BC HL+=BC.
7C6D LD B,$08 Set a line counter in B (08 lines in a UDG).
Handler_Aliens_18 7C6F LD A,(HL) Copy the UDG data to the screen buffer.
7C70 LD (DE),A
7C71 INC D Move down one pixel line in the screen buffer.
7C72 INC HL Move to the next UDG graphic data byte.
7C73 DJNZ Handler_Aliens_18 Decrease the line counter by one and loop back to Handler_Aliens_18 until all 08 lines of the UDG character have been drawn.
7C75 POP DE Restore DE and HL from the stack.
Handler_Aliens_19 7C76 POP HL
7C77 LD (HL),E Write E to *HL.
7C78 INC HL Increment HL by one.
7C79 LD (HL),D Write D to *HL.
7C7A INC HL Increment HL by two.
7C7B INC HL
7C7C POP BC Restore BC from the stack.
7C7D DEC B Decrease B by one.
7C7E JP NZ,Handler_Aliens_0 Jump to Handler_Aliens_0 if B is not equal to 08.
7C81 RET Return.
Prev: 79B2 Up: Map Next: 7C82