Chase H.Q. | Routines |
Prev: 8EE7 | Up: Map | Next: 9052 |
|
||||
draw_everything_else | 8F5F | LD HL,$ED28 | Point HL at (something above the stack) | |
8F62 | LD ($A9E3),HL | Self modify 'LD HL' @ A9E2 to load the stack? address | ||
8F65 | LD HL,$E900 | Self modify 'LD HL' @ draw_hazards_14 to load $E900 | ||
8F68 | LD ($AED0),HL | |||
Add 32 to the first 21 entries of tables $E301 and $E336. If meddled with this affects the height of elements.
|
||||
8F6B | LD HL,$E301 | HL = $E301 | ||
8F6E | LD DE,$E336 | DE = $E336 | ||
8F71 | LD BC,$1520 | B = 21 iterations, C = 32 (added to table entries) | ||
dee_loop | 8F74 | LD A,(HL) | *HL += 32 | |
8F75 | ADD A,C | |||
8F76 | LD (HL),A | |||
8F77 | LD A,(DE) | *DE += 32 | ||
8F78 | ADD A,C | |||
8F79 | LD (DE),A | |||
Do these wrap around?
|
||||
8F7A | INC E | DE++ | ||
8F7B | INC L | HL++ | ||
8F7C | DJNZ dee_loop | Loop while B > 0 | ||
Draw tunnel, if configured.
|
||||
8F7E | LD IY,$E315 | IY = $E315 | ||
8F82 | NOP | Self modified: either CALL draw_tunnel, or NOPs | ||
8F83 | NOP | |||
8F84 | NOP | |||
8F85 | DEC IY | IY-- | ||
8F87 | LD A,($A240) | Load road_buffer_offset into A | ||
8F8A | ADD A,$73 | Add 115 so it's the right side objects data offset + 19 | ||
8F8C | LD L,A | Point HL at road buffer right side objects data | ||
8F8D | LD H,$EE | |||
8F8F | LD IX,$EAB0 | IX = $EAB0 | ||
8F93 | LD BC,$1420 | Counter B = 20, Stride C = 32 | ||
dee_inner_loop | 8F96 | PUSH IX | Preserve IX, HL, BC | |
8F98 | PUSH HL | |||
8F99 | PUSH BC | |||
8F9A | LD A,($A222) | Call (somewhere in draw_hazards) if n_hazards is set | ||
8F9D | AND A | |||
8F9E | CALL NZ,draw_hazards_14 | |||
8FA1 | CALL dust_stones_stuff | Call dust_stones_stuff | ||
8FA4 | NOP | Self modified: either CALL draw_helicopter, or NOPs | ||
8FA5 | NOP | |||
8FA6 | NOP | |||
8FA7 | NOP | Self modified: either CALL draw_tunnel, or NOPs | ||
8FA8 | NOP | |||
8FA9 | NOP | |||
8FAA | POP BC | Restore IX, HL, BC | ||
8FAB | POP HL | |||
8FAC | POP IX | |||
8FAE | LD A,(HL) | Fetch from right side objs data | ||
8FAF | AND A | Jump to right hand stuff if non-zero [why not a CALL?] | ||
8FB0 | JR NZ,dee_right_hand_stuff | |||
...
|
||||
dee_continue_after_right_hand_done | 8FB2 | INC IX | Advance IX by 2 | |
8FB4 | INC IX | |||
8FB6 | LD A,L | Advance HL by 32 | ||
8FB7 | ADD A,C | |||
8FB8 | LD L,A | |||
8FB9 | LD A,(HL) | A = *HL -- reading $EE0C down to $EEF9 (wrapping!) | ||
8FBA | AND A | Set flags | ||
8FBB | JR NZ,dee_left_hand_stuff | Jump to dee_left_hand_stuff if non-zero -- left hand stuff, it will jump back here so I'm not sure why it's not a CALL | ||
dee_continue_after_left_hand_done | 8FBD | INC IX | Advance IX by 2 | |
8FBF | INC IX | |||
8FC1 | LD A,L | Advance HL by -33 | ||
8FC2 | SUB $21 | |||
8FC4 | LD L,A | |||
8FC5 | DEC IY | IY-- | ||
8FC7 | DJNZ dee_inner_loop | Loop to dee_inner_loop while B > 0 -- inner loop | ||
..
|
||||
8FC9 | LD A,($8FA4) | Load self modified instructions from earlier | ||
8FCC | AND A | Return if drawing the helicopter | ||
8FCD | RET NZ | |||
8FCE | LD A,($A227) | Return if floating_arrow is zero => no arrow | ||
8FD1 | AND A | |||
8FD2 | RET Z | |||
Draw the floating arrow.
|
||||
dee_draw_floating_arrow | 8FD3 | LD HL,$E1DF | Point HL at floating_arrow_defns[0] | |
8FD6 | LD E,$78 | Set horizontal position to 120 | ||
8FD8 | DEC A | Jump if floating_arrow is 1 => left facing arrow | ||
8FD9 | JR Z,dee_floating_arrow_chosen | |||
8FDB | LD HL,$E1E4 | Point HL at floating_arrow_defns[1] | ||
8FDE | LD E,$80 | Set horizontal position to 128 | ||
dee_floating_arrow_chosen | 8FE0 | LD D,$30 | D = $30 | |
8FE2 | LD C,(HL) | Load width bytes | ||
8FE3 | INC HL | Advance to flags | ||
8FE4 | LD B,(HL) | Load flags | ||
8FE5 | SRL B | flags >>= 1 | ||
8FE7 | PUSH BC | BC' = BC | ||
8FE8 | EXX | |||
8FE9 | POP BC | |||
8FEA | LD E,C | E' = C' | ||
8FEB | LD C,$00 | C' = 0 | ||
8FED | EXX | Unbank | ||
8FEE | INC HL | Advance to height | ||
8FEF | LD B,(HL) | Load height into B | ||
8FF0 | INC HL | |||
8FF1 | LD A,(HL) | Load bitmap address into HL | ||
8FF2 | INC HL | |||
8FF3 | LD H,(HL) | |||
8FF4 | LD L,A | |||
8FF5 | JP draw_part_entry2 | Exit via draw_part_entry2 (plotting) | ||
Right hand object handling.
|
||||
dee_right_hand_stuff | 8FF8 | LD E,A | E = A | |
8FF9 | LD A,(IX+$01) | A = IX[1] -- what are we checking here? | ||
8FFC | AND A | Set flags | ||
8FFD | JR NZ,dee_continue_after_right_hand_done | Loop or exit? | ||
8FFF | PUSH IX | Preserve IX, HL, BC | ||
9001 | PUSH HL | |||
9002 | PUSH BC | |||
9003 | LD A,E | DE = E * 7 | ||
9004 | ADD A,A | |||
9005 | ADD A,A | |||
9006 | ADD A,A | |||
9007 | SUB E | |||
9008 | LD E,A | |||
9009 | LD D,$00 | |||
900B | LD HL,$901C | Set return address to dee_right__return_901C (below) | ||
900E | PUSH HL | |||
900F | LD HL,($5CF8) | Load addrof_right_hand_handlers | ||
9012 | ADD HL,DE | Index right_hand_handlers | ||
9013 | LD E,(HL) | Read argument for routine into DE & advance | ||
9014 | INC HL | |||
9015 | LD D,(HL) | |||
9016 | INC HL | |||
9017 | LD A,(HL) | Read address of routine into HL | ||
9018 | INC HL | |||
9019 | LD H,(HL) | |||
901A | LD L,A | |||
901B | JP (HL) | Indirect jump | ||
dee_right__return_901C | 901C | POP BC | Restore IX, HL, BC | |
901D | POP HL | |||
901E | POP IX | |||
9020 | JP dee_continue_after_right_hand_done | Continue | ||
Left hand object handling.
|
||||
dee_left_hand_stuff | 9023 | LD E,A | E = A -- sampled = 5 (only) | |
9024 | CP $02 | Jump if A == 2 -- this test not present for RHS | ||
9026 | JR Z,dee_left__a_is_2 | |||
A != 2
|
||||
dee_left__a_isnt_2 | 9028 | LD A,(IX+$01) | A = IX[1] -- what are we checking here? | |
902B | AND A | Set flags | ||
902C | JR NZ,dee_continue_after_left_hand_done | Loop or exit? | ||
dee_left__a_is_2 | 902E | PUSH IX | Preserve IX, HL, BC | |
9030 | PUSH HL | |||
9031 | PUSH BC | |||
9032 | LD A,E | DE = E * 7 | ||
9033 | ADD A,A | |||
9034 | ADD A,A | |||
9035 | ADD A,A | |||
9036 | SUB E | |||
9037 | LD E,A | |||
9038 | LD D,$00 | |||
903A | LD HL,$904B | Set return address to dee_left__return (below) | ||
903D | PUSH HL | |||
903E | LD HL,($5CFE) | Load addrof_left_hand_handlers | ||
9041 | ADD HL,DE | Index left_hand_handlers | ||
9042 | LD E,(HL) | Read argument for routine into DE & advance | ||
9043 | INC HL | |||
9044 | LD D,(HL) | |||
9045 | INC HL | |||
9046 | LD A,(HL) | Read address of routine into HL | ||
9047 | INC HL | |||
9048 | LD H,(HL) | |||
9049 | LD L,A | |||
B is used in the routines, what is it here? It must be passed in.
|
||||
904A | JP (HL) | Indirect jump -- Call draw_stretchy_object_left draw_stretchy_object_right draw_tunnel_light_left draw_tunnel_light_right draw_object_right etc. | ||
dee_left__return | 904B | POP BC | Restore IX, HL, BC | |
904C | POP HL | |||
904D | POP IX | |||
904F | JP dee_continue_after_left_hand_done | Continue |
Prev: 8EE7 | Up: Map | Next: 9052 |