Chase H.Q. | Routines |
Prev: B828 | Up: Map | Next: B8D2 |
|
||||||||||||
scroll_horizon | B848 | LD HL,($A24A) | Load speed into HL | |||||||||
B84B | LD A,H | Return if speed is zero | ||||||||||
B84C | OR L | |||||||||||
B84D | RET Z | |||||||||||
B84E | LD A,($A25C) | Load current_curvature into A | ||||||||||
B851 | AND A | Jump if current_curvature is zero | ||||||||||
B852 | JR Z,sh_straight_road | |||||||||||
current_curvature is non-zero here.
|
||||||||||||
sh_curved_road | B854 | EX AF,AF' | Bank current_curvature (and unbank what?) | |||||||||
B855 | RR H | Bottom bit of H (speed.hi) moves to carry (H now unused) | ||||||||||
A here must be the banked A'... it must be passed in. This doesn't make much sense to me.
|
||||||||||||
B857 | RLA | A = ((A << 3) + (carry << 2)) & 6 | ||||||||||
B858 | RLA | |||||||||||
B859 | RLA | |||||||||||
B85A | AND $06 | |||||||||||
B85C | LD C,A | BC = horizon_a25d + A | ||||||||||
B85D | LD A,($A25D) | |||||||||||
B860 | ADD A,C | |||||||||||
B861 | LD C,A | |||||||||||
B862 | LD B,$00 | |||||||||||
B864 | LD HL,$B828 | 16 word horizon table at horizon_table | ||||||||||
B867 | ADD HL,BC | HL += BC | ||||||||||
B868 | LD B,(HL) | BC = wordat(HL) | ||||||||||
B869 | INC HL | |||||||||||
B86A | LD C,(HL) | |||||||||||
Decrement horizon_a25e.
|
||||||||||||
B86B | LD HL,$A25E | HL = &horizon_a25e | ||||||||||
B86E | DEC (HL) | *HL-- | ||||||||||
B86F | JR NZ,sh_straight_road | Jump if non-zero | ||||||||||
It became zero.
|
||||||||||||
B871 | LD (HL),B | *HL = B [bottom byte of table entry] | ||||||||||
B872 | EX AF,AF' | Bank A [must be because A gets overwritten next] | ||||||||||
B873 | LD A,C | A = C | ||||||||||
B874 | JP P,sh_b879 | Jump if positive | ||||||||||
B877 | NEG | A = -A | ||||||||||
sh_b879 | B879 | LD HL,$C7E8 | Address of operand in 'LD A,x' @ C7E7 (horizon shift value 0..19) | |||||||||
B87C | ADD A,(HL) | A += *HL | ||||||||||
B87D | JP P,sh_b882 | Jump if positive | ||||||||||
B880 | ADD A,$14 | A += 20 -- negative case (or zero) | ||||||||||
sh_b882 | B882 | CP $14 | Jump if A < 20 | |||||||||
B884 | JR C,sh_b888 | |||||||||||
B886 | SUB $14 | A -= 20 | ||||||||||
sh_b888 | B888 | LD (HL),A | *HL = A | |||||||||
sh_straight_road | B889 | XOR A | Zero A, B, E | |||||||||
B88A | LD B,A | |||||||||||
B88B | LD E,A | |||||||||||
B88C | EX AF,AF' | Bank zeroed A | ||||||||||
B88D | LD A,($A258) | Return if incline is zero (flat road) | ||||||||||
B890 | OR A | |||||||||||
B891 | RET Z | |||||||||||
B892 | JP P,sh_not_flat_road | Jump if positive | ||||||||||
Otherwise negative.
|
||||||||||||
B895 | INC E | E = -(E + 1) | ||||||||||
B896 | NEG | |||||||||||
sh_not_flat_road | B898 | LD HL,$B827 | 16 word horizon table at horizon_table | |||||||||
B89B | LD C,A | BC = A (B is zeroed earlier) | ||||||||||
B89C | ADD HL,BC | HL += BC | ||||||||||
B89D | LD A,($A25B) | A = fast_counter - var_a25b | ||||||||||
B8A0 | LD C,A | |||||||||||
B8A1 | LD A,($A23F) | |||||||||||
B8A4 | SUB C | |||||||||||
B8A5 | AND A | Set flags | ||||||||||
B8A6 | RET Z | Return if non-zero | ||||||||||
B8A7 | LD C,(HL) | C = *HL -- loading from horizon table | ||||||||||
sh_b8a8_loop | B8A8 | SUB C | A -= C | |||||||||
B8A9 | JR C,sh_b8b1_exit | Jump if carry | ||||||||||
B8AB | INC B | B++ | ||||||||||
B8AC | EX AF,AF' | Bank | ||||||||||
B8AD | ADD A,C | A += C | ||||||||||
B8AE | EX AF,AF' | Bank | ||||||||||
B8AF | JR sh_b8a8_loop | Loop | ||||||||||
sh_b8b1_exit | B8B1 | LD A,B | Return if B is zero | |||||||||
B8B2 | AND A | |||||||||||
B8B3 | RET Z | |||||||||||
B8B4 | LD HL,$A25A | var_a25a += A | ||||||||||
B8B7 | ADD A,(HL) | |||||||||||
B8B8 | LD (HL),A | |||||||||||
Sign extend based on low bit of E?
|
||||||||||||
B8B9 | LD A,B | A = B | ||||||||||
B8BA | RR E | Shift bottom bit of E out? | ||||||||||
B8BC | LD B,$00 | B = 0 -- just widen to (B,A) | ||||||||||
B8BE | JR NC,sh_set_horizon | Jump if no carry | ||||||||||
Otherwise negative.
|
||||||||||||
B8C0 | DEC B | B = $FF | ||||||||||
B8C1 | NEG | A = -A | ||||||||||
Adjust horizon_level by (B,A).
|
||||||||||||
sh_set_horizon | B8C3 | LD HL,($A171) | Change horizon_level by (B,A) | |||||||||
B8C6 | LD C,A | |||||||||||
B8C7 | ADD HL,BC | |||||||||||
B8C8 | LD ($A171),HL | |||||||||||
B8CB | EX AF,AF' | Bank | ||||||||||
B8CC | LD HL,$A25B | var_a25b += A | ||||||||||
B8CF | ADD A,(HL) | |||||||||||
B8D0 | LD (HL),A | |||||||||||
B8D1 | RET | Return |
Prev: B828 | Up: Map | Next: B8D2 |