![]() |
Routines |
| Prev: 6414 | Up: Map | Next: 6440 |
|
Used by the routine at InitialiseLevel.
|
||||||||||
| CopyLevelDataToBuffer | 6424 | LD C,$05 | Set a counter in C for 05 rows to copy. | |||||||
| CopyLevelDataToBuffer_CopyRow | 6426 | LD B,$20 | Set a counter in B for 20 bytes per row. | |||||||
| CopyLevelDataToBuffer_CopyByte | 6428 | LD A,(HL) | Fetch a terrain byte from the source data. | |||||||
| 6429 | INC HL | Move to the next source data byte. | ||||||||
| 642A | LD (DE),A | Write the byte to the destination buffer. | ||||||||
| 642B | INC E | Move to the next destination buffer position. | ||||||||
| 642C | DJNZ CopyLevelDataToBuffer_CopyByte | Decrease the bytes-per-row counter by one and loop back to CopyLevelDataToBuffer_CopyByte until the whole row has been copied. | ||||||||
|
Handle updating the destination pointer positioning after each row.
|
||||||||||
| 642E | DEC E | Step back one position. | ||||||||
| 642F | LD A,E | Align to a 20 byte boundary. | ||||||||
| 6430 | AND %11100000 | Keep only the upper 3 bits of the E co-ordinate. | ||||||||
| 6432 | LD E,A | Reset to the start of the current 20 byte block. | ||||||||
| 6433 | INC D | Move down one row. | ||||||||
| 6434 | DEC C | Decrease the row counter by one. | ||||||||
| 6435 | JR NZ,CopyLevelDataToBuffer_CopyRow | Jump back to CopyLevelDataToBuffer_CopyRow until all the rows have been copied. | ||||||||
|
Adjust the destination pointer after copying a complete 05x20 block.
|
||||||||||
| 6437 | ADD A,$20 | Move to the next block horizontally. | ||||||||
| 6439 | LD E,A | Load the new horizontal position into E. | ||||||||
| 643A | RET Z | Return if E wrapped around to 00 (we reached the end of the buffer). | ||||||||
|
Move the destination pointer back up 05 rows to the original vertical position.
|
||||||||||
| 643B | LD A,D | D-=05. | ||||||||
| 643C | SUB $05 | |||||||||
| 643E | LD D,A | |||||||||
| 643F | RET | Return. | ||||||||
| Prev: 6414 | Up: Map | Next: 6440 |