Routines |
Prev: F209 | Up: Map | Next: F257 |
This draws static tiles to the screen - the tiles used by the morale flag, score, etc.
Used by the routine at plot_static_tiles_horizontal.
|
||||||||||||
plot_static_tiles | F20B | LD ($F075),A | Save a copy of the plot direction | |||||||||
F20E | LD A,(HL) | Load flags_and_length | ||||||||||
F20F | AND $7F | Mask off length | ||||||||||
F211 | LD B,A | Set B for loop iterations | ||||||||||
F212 | INC HL | Advance to tile indices | ||||||||||
F213 | PUSH DE | Preserve the pointer to screen address | ||||||||||
F214 | EXX | Bank | ||||||||||
F215 | POP DE | Restore the pointer to screen address | ||||||||||
F216 | EXX | Unbank | ||||||||||
Start loop (once for each tile)
|
||||||||||||
plot_static_tiles_0 | F217 | LD A,(HL) | Read a tile index | |||||||||
F218 | EXX | Bank | ||||||||||
Point HL at static_tiles[tileindex]
|
||||||||||||
F219 | LD C,A | Multiply the tile index by 9 | ||||||||||
F21A | LD B,$00 | |||||||||||
F21C | LD L,A | |||||||||||
F21D | LD H,$00 | |||||||||||
F21F | ADD HL,HL | |||||||||||
F220 | ADD HL,HL | |||||||||||
F221 | ADD HL,HL | |||||||||||
F222 | ADD HL,BC | |||||||||||
F223 | LD BC,$7F00 | Point BC at static_tiles[0] | ||||||||||
F226 | ADD HL,BC | Combine | ||||||||||
F227 | LD B,$08 | Set B for 8 iterations | ||||||||||
Plot a tile.
Start loop (once for each byte/row)
|
||||||||||||
plot_static_tiles_1 | F229 | LD A,(HL) | Copy a byte of tile | |||||||||
F22A | LD (DE),A | |||||||||||
F22B | INC D | Advance DE to the next screen row | ||||||||||
F22C | INC HL | |||||||||||
F22D | DJNZ plot_static_tiles_1 | ...loop | ||||||||||
F22F | DEC D | Step DE back so it's still in the right block | ||||||||||
F230 | PUSH DE | Preserve screen pointer | ||||||||||
Calculate screen attribute address of tile.
|
||||||||||||
F231 | LD A,D | Get screen pointer high byte | ||||||||||
F232 | LD D,$58 | Set the attribute pointer to $58xx by default | ||||||||||
F234 | CP $48 | If the screen pointer is $48xx... set the attribute pointer to $59xx | ||||||||||
F236 | JR C,plot_static_tiles_2 | |||||||||||
F238 | INC D | |||||||||||
F239 | CP $50 | If the screen pointer is $50xx... set the attribute pointer to $5Axx | ||||||||||
F23B | JR C,plot_static_tiles_2 | |||||||||||
F23D | INC D | |||||||||||
plot_static_tiles_2 | F23E | LD A,(HL) | Copy the attribute byte which follows the tile data | |||||||||
F23F | LD (DE),A | |||||||||||
F240 | POP HL | Restore screen pointer | ||||||||||
F241 | LD A,($F075) | Fetch static_tiles_plot_direction | ||||||||||
F244 | AND A | Is it vertical? | ||||||||||
F245 | JR NZ,plot_static_tiles_3 | Jump if so | ||||||||||
Horizontal
Reset and advance the screen pointer
|
||||||||||||
F247 | LD A,H | Rewind the screen pointer by 7 rows | ||||||||||
F248 | SUB $07 | |||||||||||
F24A | LD H,A | |||||||||||
F24B | INC L | Advance to the next character | ||||||||||
F24C | JR plot_static_tiles_4 | (else) | ||||||||||
Vertical
|
||||||||||||
plot_static_tiles_3 | F24E | CALL next_scanline_down | Get the same position on the next scanline down | |||||||||
plot_static_tiles_4 | F251 | EX DE,HL | Move new scanline pointer into DE | |||||||||
F252 | EXX | Unbank | ||||||||||
F253 | INC HL | Advance to the next input byte | ||||||||||
F254 | DJNZ plot_static_tiles_0 | ...loop | ||||||||||
F256 | RET | Return |
Prev: F209 | Up: Map | Next: F257 |