![]() |
Routines |
Prev: 79B2 | Up: Map | Next: 7C82 |
Used by the routines at TitleScreen and StartGame.
|
||||
See Aliens Don't Fire.
|
||||
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 |