![]() |
Routines |
| Prev: 56293 | Up: Map | Next: 56514 |
| MoveTile_Down | 56395 | LD A,(59230) | Take *Tile_Vertical_Position and decrease it by one, which adjusts the value for the tile height. Write this value back to *Tile_Vertical_Coordinate. | |
| 56398 | DEC A | |||
| 56399 | LD (59232),A | |||
|
Set the total of how many spaces the tile will be moving.
|
||||
| 56402 | LD A,(59233) | B=*Tile_SpacesToMove. | ||
| 56405 | LD B,A | |||
|
This is the tile loop, each space moved will decrease this counter by one.
|
||||
| MoveTile_Down_Loop | 56406 | PUSH BC | Stash the number of spaces left to move on the stack. | |
| 56407 | LD A,(59229) | Take *Tile_Horizontal_Position and add 2 which adjusts the value for the tile height. Write this value back to *Tile_Horizontal_Coordinate. | ||
| 56410 | ADD A,2 | |||
| 56412 | LD (59231),A | |||
|
Start moving the tile a single space.
|
||||
| 56415 | LD B,4 | Set a counter in B for the height of the tile in bytes (4 rows). | ||
| MoveTile_Down_RowLoop | 56417 | PUSH BC | Stash the row counter (tile height) on the stack. | |
|
Get the screen buffer address from the co-ordinates.
|
||||
| 56418 | LD A,(59231) | B=*Tile_Horizontal_Coordinate. | ||
| 56421 | LD B,A | |||
| 56422 | LD A,(59232) | C=*Tile_Vertical_Coordinate. | ||
| 56425 | LD C,A | |||
| 56426 | CALL Calculate_ScreenBlockAddress | Call Calculate_ScreenBlockAddress. | ||
| 56429 | PUSH HL | Stash the destination screen buffer address on the stack. | ||
| 56430 | INC B | Call Calculate_ScreenBlockAddress but increment the position by one. This allows us to fetch the screen buffer address of the next position. DE=screen buffer address of the tile + 1. | ||
| 56431 | CALL Calculate_ScreenBlockAddress | |||
| 56434 | PUSH HL | |||
| 56435 | POP DE | |||
| 56436 | POP HL | HL=screen buffer address of the tile. | ||
| 56437 | LD A,8 | Set the number of bytes in a character block to A. | ||
| 56439 | LD BC,4 | Set a counter in B for the number of bytes in a row (4), and set C to 0 which is used for erasing the left-over tile pixels. | ||
| 56442 | PUSH HL | Stash the current screen buffer address of the tile on the stack. | ||
|
Start moving the current row.
|
||||
| MoveTile_Down_ColumnLoop | 56443 | PUSH HL | Stash the current screen buffer address of the tile on the stack. | |
| 56444 | PUSH DE | Stash the current screen buffer address of the tile on the stack. | ||
| 56445 | LDIR | LDIR. | ||
| 56447 | DEC HL | Decrease HL by one. | ||
| 56448 | PUSH HL | Stash HL on the stack. | ||
| 56449 | LD (HL),C | Write C to *HL. | ||
| 56450 | POP DE | Restore DE from the stack. | ||
| 56451 | DEC DE | Decrease DE by one. | ||
| 56452 | LD BC,3 | BC=0003. | ||
| 56455 | LDDR | LDDR. | ||
| 56457 | POP DE | Restore DE and HL from the stack. | ||
| 56458 | POP HL | |||
| 56459 | INC D | Move to the next pixel row in the destination address. | ||
| 56460 | INC H | Move to the next pixel row in the source address. | ||
| 56461 | LD BC,4 | BC=0004. | ||
| 56464 | DEC A | Decrease the pixel row counter by one. | ||
| 56465 | JP NZ,MoveTile_Down_ColumnLoop | Jump back to MoveTile_Down_ColumnLoop until all pixels in the row have been moved. | ||
| 56468 | POP HL | Restore HL from the stack. | ||
| 56469 | CALL Calculate_AttributeAddress | Call Calculate_AttributeAddress. | ||
|
Move DE down one attribute row.
|
||||
| 56472 | LD HL,32 | DE+=0032. | ||
| 56475 | ADD HL,DE | |||
| 56476 | EX DE,HL | |||
| 56477 | LD BC,4 | Copy 0004 attribute bytes from . | ||
| 56480 | LDIR | |||
| 56482 | LD BC,3 | BC=0003. | ||
| 56485 | LD A,71 | A=INK: WHITE, PAPER: BLACK (BRIGHT) . | ||
| 56487 | DEC HL | Decrease HL by one. | ||
| 56488 | LD (HL),A | Write A to *HL. | ||
| 56489 | PUSH HL | Stash HL on the stack. | ||
| 56490 | POP DE | Restore DE from the stack. | ||
| 56491 | DEC DE | Decrease DE by one. | ||
| 56492 | LDDR | LDDR. | ||
| 56494 | LD HL,59231 | Decrease *Tile_Horizontal_Coordinate by one. | ||
| 56497 | DEC (HL) | |||
| 56498 | POP BC | Restore the pixel row counter from the stack. | ||
| 56499 | DJNZ MoveTile_Down_RowLoop | Decrease the pixel row counter by one and loop back to MoveTile_Down_RowLoop until counter is zero. | ||
|
The tile has successfully moved one space!
|
||||
| 56501 | POP BC | Using the number of spaces left to move (from the stack) call Sound_TileMovement. | ||
| 56502 | PUSH BC | |||
| 56503 | CALL Sound_TileMovement | |||
| 56506 | LD HL,59229 | Increment *Tile_Horizontal_Position by one. | ||
| 56509 | INC (HL) | |||
| 56510 | POP BC | Restore the number of spaces left to move from the stack. | ||
| 56511 | DJNZ MoveTile_Down_Loop | Decrease the number of spaces counter by one and loop back to MoveTile_Down_Loop until the tile is in the destination space. | ||
| 56513 | RET | Return. | ||
| Prev: 56293 | Up: Map | Next: 56514 |