Chase H.Q. | Routines |
Prev: A9DE | Up: Map | Next: AAC6 |
|
||||||||||
draw_helicopter | AA38 | LD A,B | Return if counter isn't 3 | |||||||
AA39 | CP $03 | |||||||||
AA3B | RET NZ | |||||||||
AA3C | LD A,(IY+$4F) | A = IY[$4F] - IY[$4E] -- a delta between two bytes in this unknown $E315 buffer | ||||||||
AA3F | SUB (IY+$4E) | |||||||||
AA42 | LD D,$00 | D = 0 | ||||||||
AA44 | LD H,D | HL = 0 | ||||||||
AA45 | LD L,D | |||||||||
AA46 | LD E,A | E = A => DE = A -- DE is now the delta from above, widened | ||||||||
AA47 | LD A,($A23F) | Load fast_counter | ||||||||
AA4A | LD B,$08 | B = 8 | ||||||||
AA4C | AND $E0 | fast_counter & $E0 | ||||||||
Multiplier
|
||||||||||
dhl_loop1 | AA4E | RLA | Shift top bit out | |||||||
AA4F | JR NC,dhl_aa52 | If it was set then HL += DE | ||||||||
AA51 | ADD HL,DE | |||||||||
dhl_aa52 | AA52 | ADD HL,HL | HL <<= 1 | |||||||
AA53 | DJNZ dhl_loop1 | Loop dhl_loop1 while B > 0 | ||||||||
AA55 | LD A,H | A = H / 2 -- is this undoing overshoot? | ||||||||
AA56 | RRA | |||||||||
AA57 | LD ($AA8D),A | Self modify 'LD A' @ AA8C (below) | ||||||||
AA5A | LD A,$00 | A = <self modified> -- Self modified by AAEE (in move_helicopter) | ||||||||
AA5C | SUB (IY+$4E) | A -= IY[$4E] | ||||||||
AA5F | LD ($AA77),A | Self modify 'ADD A' @ AA76 (below) | ||||||||
AA62 | LD B,$05 | 5 iterations | ||||||||
AA64 | LD A,($A234) | A = counter_A & 1 -- counter used for turbo smoke and helicopter blades | ||||||||
AA67 | AND $01 | |||||||||
AA69 | LD HL,($5D08) | Load addrof_helicopter_stuff_1 | ||||||||
AA6C | JR Z,dhl_aa71 | If A was set | ||||||||
AA6E | LD HL,($5D0A) | Kiad addrof_helicopter_stuff_2 | ||||||||
dhl_aa71 | AA71 | LD E,(HL) | DE = wordat(HL); HL += 2 | |||||||
AA72 | INC HL | |||||||||
AA73 | LD D,(HL) | |||||||||
AA74 | INC HL | |||||||||
AA75 | LD A,(DE) | A = *DE | ||||||||
AA76 | ADD A,$00 | A += <self modified> -- Self modified by AA5F (above) | ||||||||
AA78 | INC DE | DE++ | ||||||||
AA79 | PUSH IY | Preserve IY, HL, BC | ||||||||
AA7B | PUSH HL | |||||||||
AA7C | PUSH BC | |||||||||
AA7D | CALL dhl_aa94 | Call dhl_aa94 | ||||||||
AA80 | POP BC | Restore IY, HL, BC | ||||||||
AA81 | POP HL | |||||||||
AA82 | POP IY | |||||||||
AA84 | DJNZ dhl_aa71 | Loop loop_aa71 while B > 0 | ||||||||
AA86 | LD E,(HL) | DE = wordat(HL); HL++ | ||||||||
AA87 | INC HL | |||||||||
AA88 | LD D,(HL) | |||||||||
AA89 | XOR A | A = 0 | ||||||||
AA8A | PUSH IY | Preserve IY | ||||||||
AA8C | LD A,$00 | A = <self modified> -- Self modified by AA57 (above) | ||||||||
AA8E | CALL dhl_aa94 | Call dhl_aa94 | ||||||||
AA91 | POP IY | Restore IY | ||||||||
AA93 | RET | Return | ||||||||
dhl_aa94 | AA94 | LD BC,$0000 | BC = <self modified> -- Self modified by AB00, move_helicopter_4 + others | |||||||
AA97 | NEG | A = -A | ||||||||
AA99 | LD ($933E),A | Self modify 'LD D,x' @ draw_object_right_7 to load A | ||||||||
AA9C | LD A,(DE) | HL = *DE++ | ||||||||
AA9D | INC DE | |||||||||
AA9E | LD L,A | |||||||||
AA9F | LD H,$00 | |||||||||
AAA1 | AND A | Set flags | ||||||||
AAA2 | JP P,dhl_aaa6 | |||||||||
AAA5 | DEC H | H-- | ||||||||
dhl_aaa6 | AAA6 | ADD HL,BC | HL += BC | |||||||
AAA7 | EX DE,HL | |||||||||
AAA8 | LD B,(HL) | B = *HL | ||||||||
AAA9 | RLC B | B <<= 3 | ||||||||
AAAB | RLC B | |||||||||
AAAD | RLC B | |||||||||
AAAF | LD A,D | A = D | ||||||||
AAB0 | AND A | Set flags | ||||||||
AAB1 | LD A,E | A = E | ||||||||
AAB2 | LD C,$00 | C = 0 | ||||||||
AAB4 | JP M,dhl_aac1 | |||||||||
AAB7 | RET NZ | Return if non-zero | ||||||||
AAB8 | CP $80 | Jump to draw_object_right_helicopter_entrypt if A >= 128 | ||||||||
AABA | JP NC,draw_object_right_helicopter_entrypt | |||||||||
AABD | ADD A,B | A += B | ||||||||
AABE | JP draw_object_left_helicopter_entrypt | Exit via draw_object_left_helicopter_entrypt | ||||||||
dhl_aac1 | AAC1 | ADD A,B | A += B | |||||||
AAC2 | RET NC | Return if no carry | ||||||||
AAC3 | JP draw_object_left_helicopter_entrypt | Exit via draw_object_left_helicopter_entrypt |
Prev: A9DE | Up: Map | Next: AAC6 |