| Chase H.Q. | Routines |
| Prev: 9CC2 | Up: Map | Next: 9D17 |
|
The bonus value is passed as five BCD digits in DE and A like: 0bDDDDddddEEEEeeeeAAAAxxxxx, where x is not used.
The bonus value must have a single sequence of zeroes, e.g. "55000" is okay, but "50500" is not.
|
||||||||||
| bonus | 9CD6 | LD B,A | Preserve A | |||||||
| 9CD7 | LD HL,$9D57 | -> Byte after bonus digits buffer | ||||||||
| 9CDA | LD C,$FF | Flag, set to $FF while digits are zero | ||||||||
| 9CDC | LD A,B | Needless move | ||||||||
| 9CDD | CALL bonus_digit | Call bonus_digit -- final digit first | ||||||||
| 9CE0 | SET 7,(HL) | Top-bit terminate the bonus string | ||||||||
| 9CE2 | LD A,B | Load lowest digit | ||||||||
| 9CE3 | CALL bonus_high_nibble | Call bonus_high_nibble | ||||||||
| 9CE6 | LD A,E | Load middle digits | ||||||||
| 9CE7 | CALL bonus_digit | Call bonus_digit | ||||||||
| 9CEA | LD A,E | Load middle digits | ||||||||
| 9CEB | CALL bonus_high_nibble | Call bonus_high_nibble | ||||||||
| 9CEE | LD A,D | Load high digits | ||||||||
| 9CEF | CALL bonus_digit | Call bonus_digit | ||||||||
| 9CF2 | LD A,D | Load high digits | ||||||||
| 9CF3 | CALL bonus_high_nibble | Call bonus_high_nibble | ||||||||
| 9CF6 | JR bonus_exit | Exit via bonus_exit | ||||||||
| bonus_high_nibble | 9CF8 | RRA | Shift the high digit down | |||||||
| 9CF9 | RRA | |||||||||
| 9CFA | RRA | |||||||||
| 9CFB | RRA | |||||||||
| bonus_digit | 9CFC | AND $0F | Mask off low nibble | |||||||
| 9CFE | JR NZ,bonus_non_zero | If A is not zero goto bonus_non_zero | ||||||||
|
Digit is zero.
|
||||||||||
| 9D00 | RLC C | Jump if the flag in C is set | ||||||||
| 9D02 | JR C,bonus_store | |||||||||
|
We saw a non-zero-to-zero transition, so terminate.
|
||||||||||
| 9D04 | POP AF | Discard return address | ||||||||
| 9D05 | JR bonus_exit | Exit via bonus_exit | ||||||||
| bonus_non_zero | 9D07 | LD C,$00 | Set flag to zero now we've seen a non-zero digit | |||||||
| bonus_store | 9D09 | ADD A,$30 | Turn digit to ASCII | |||||||
| 9D0B | DEC HL | Write digit out in reverse | ||||||||
| 9D0C | LD (HL),A | |||||||||
| 9D0D | RET | Return | ||||||||
| bonus_exit | 9D0E | LD ($9D9C),HL | Self modify 'LD HL,xxxx' @ 9D9B -- bonus score pointer | |||||||
| 9D11 | LD A,$01 | Set the trigger_bonus_flag | ||||||||
| 9D13 | LD ($A22C),A | |||||||||
| 9D16 | LD A,B | A = B, then fall into increment_score with the bonus preserved | ||||||||
| Prev: 9CC2 | Up: Map | Next: 9D17 |