| Chase H.Q. | Routines |
| Prev: 860F | Up: Map | Next: 86F6 |
|
Used by the routine at run_pregame_screen.
|
||||
| draw_pregame | 865A | LD HL,$77D8 | Address of data | |
| dp_loop | 865D | LD A,(HL) | A = *HL | |
| 865E | AND A | Set flags | ||
| 865F | JP Z,draw_pregame_10 | Jump to rendering messages only, if zero | ||
| 8662 | INC HL | HL++ | ||
| 8663 | CP $D0 | Jump if < $D0 | ||
| 8665 | JR C,draw_pregame_2 | |||
| 8667 | CP $E0 | Jump if < $E0 -- $D0..DF | ||
| 8669 | JR C,draw_pregame_0 | |||
| 866B | CP $F0 | Jump if >= $F0 | ||
| 866D | JR NC,draw_pregame_1 | |||
|
Otherwise handle $E0..$EF. This just seems to set a value.
|
||||
| 866F | SUB $E0 | A -= $E0 | ||
| 8671 | LD ($86C9),A | Self modify draw_pregame_7 with A | ||
| 8674 | JR dp_loop | Loop | ||
|
Handle $D0..DF.
|
||||
| draw_pregame_0 | 8676 | SUB $D0 | A -= $D0 | |
| 8678 | RLCA | Self modify 86C2 with A * 8 | ||
| 8679 | RLCA | |||
| 867A | RLCA | |||
| 867B | LD ($86C3),A | |||
| 867E | JR dp_loop | Loop | ||
|
Handle $F0..FF.
|
||||
| draw_pregame_1 | 8680 | LD D,A | D = A | |
| 8681 | LD E,(HL) | E = *HL++ | ||
| 8682 | INC HL | |||
| 8683 | JR dp_loop | Loop | ||
|
Handle $00..$CF.
|
||||
| draw_pregame_2 | 8685 | CP $1F | ||
| 8687 | LD B,$01 | B = 1 single tile? | ||
| 8689 | JR NC,draw_pregame_3 | Jump if >= $1F | ||
| 868B | LD B,A | B = A run of tiles? | ||
| 868C | LD A,(HL) | A = *HL++ | ||
| 868D | INC HL | |||
|
Handle $1F..?
|
||||
| draw_pregame_3 | 868E | PUSH HL | ||
| 868F | SUB $1F | A -= $1F A is now a tile index | ||
| 8691 | RLCA | multiply by 8 - size of tile | ||
| 8692 | RLCA | |||
| 8693 | RLA | why the different rotates? | ||
| 8694 | PUSH BC | |||
| 8695 | LD C,A | BC = A | ||
| 8696 | LD B,$00 | |||
| 8698 | RL B | shift in carry flag? | ||
| 869A | LD HL,$78A7 | Address of base of tiles | ||
| 869D | ADD HL,BC | Point at tile we need | ||
| 869E | POP BC | |||
| 869F | EX DE,HL | |||
|
label=loop_86a0
|
||||
| draw_pregame_4 | 86A0 | PUSH BC | ||
| 86A1 | PUSH DE | |||
| 86A2 | PUSH HL | |||
|
Plot a tile.
|
||||
| 86A3 | LD B,$08 | B = 8 | ||
| draw_pregame_5 | 86A5 | LD A,(DE) | *HL = *DE++ | |
| 86A6 | LD (HL),A | |||
| 86A7 | INC DE | |||
| 86A8 | INC H | H++ | ||
| 86A9 | DJNZ draw_pregame_5 | Loop | ||
| 86AB | POP BC | |||
| 86AC | LD A,B | D = (B << 2) & $20 | ||
| 86AD | RLA | |||
| 86AE | RLA | |||
| 86AF | AND $20 | |||
| 86B1 | LD D,A | |||
| 86B2 | LD A,C | E = (C & $1F) + D | ||
| 86B3 | AND $1F | |||
| 86B5 | ADD A,D | |||
| 86B6 | LD E,A | |||
| 86B7 | LD A,C | A = (C & $E0) << 1 | ||
| 86B8 | AND $E0 | |||
| 86BA | ADD A,A | |||
| 86BB | LD D,$59 | D = $59 | ||
| 86BD | JR NC,draw_pregame_6 | |||
| 86BF | INC D | D++ | ||
| draw_pregame_6 | 86C0 | ADD A,E | A += E | |
| 86C1 | LD E,A | E = A | ||
| 86C2 | LD A,$00 | A = xx Self modified | ||
| 86C4 | AND A | Set flags | ||
| 86C5 | JR Z,draw_pregame_7 | Jump if zero | ||
| 86C7 | LD (DE),A | *DE = A | ||
| draw_pregame_7 | 86C8 | LD A,$00 | A = xx Self modified | |
| 86CA | DEC A | A-- | ||
| 86CB | JR Z,draw_pregame_8 | Jump if zero | ||
| 86CD | LD A,H | A = H & $0F | ||
| 86CE | AND $0F | |||
| 86D0 | JR NZ,draw_pregame_9 | Jump if non-zero | ||
| 86D2 | LD A,H | H -= $10 | ||
| 86D3 | SUB $10 | |||
| 86D5 | LD H,A | |||
| 86D6 | LD A,L | L += $20 | ||
| 86D7 | ADD A,$20 | |||
| 86D9 | LD L,A | |||
| 86DA | JR draw_pregame_9 | |||
| draw_pregame_8 | 86DC | LD H,B | HL = BC | |
| 86DD | LD L,C | |||
| 86DE | INC L | L++ | ||
| draw_pregame_9 | 86DF | POP DE | ||
| 86E0 | POP BC | |||
| 86E1 | DJNZ draw_pregame_4 | Loop loop_86a0 while B | ||
| 86E3 | EX DE,HL | |||
| 86E4 | POP HL | |||
| 86E5 | JP dp_loop | Loop | ||
| draw_pregame_10 | 86E8 | LD B,$04 | 4 messages to print | |
| 86EA | LD HL,$7798 | Address of pre_game_messages | ||
| draw_pregame_11 | 86ED | LD A,$04 | Flags TBD | |
| 86EF | DEC HL | HL-- | ||
| 86F0 | CALL print_message | Call print_message | ||
| 86F3 | DJNZ draw_pregame_11 | Loop while B > 0 | ||
| 86F5 | RET | Return | ||
| Prev: 860F | Up: Map | Next: 86F6 |