![]() |
Routines |
| DE | Play area coordinates of point above character's head |
| 27276 | LD A,(32767) | B=leftmost column of play area on screen |
| 27279 | LD B,A | |
| 27280 | LD A,E | A=x-coordinate of point above character |
| 27281 | AND 248 | A=x-coordinate of left edge of message box |
| 27283 | SUB B | Return with the carry flag set if the message box would be off-screen to the right |
| 27284 | CP 32 | |
| 27286 | CCF | |
| 27287 | RET C | |
| 27288 | LD E,A | E=0, 8, 16 or 24: screen column of left edge of message box |
| 27289 | LD A,D | A=y-coordinate of point above character's head |
| 27290 | SUB 3 | A=y-coordinate of top line of message box |
| 27292 | RET C | Return with the carry flag set if this would be off the top of the screen |
| 27293 | LD D,0 | DE=0, 8, 16 or 24 |
| 27295 | PUSH HL | Save HL |
| 27296 | ADD A,A | Set HL the to the attribute file address for the top left corner of the message box |
| 27297 | ADD A,A | |
| 27298 | ADD A,A | |
| 27299 | LD L,A | |
| 27300 | LD H,22 | |
| 27302 | ADD HL,HL | |
| 27303 | ADD HL,HL | |
| 27304 | ADD HL,DE | |
| 27305 | PUSH HL | Save this base attribute file address |
| 27306 | LD DE,58152 | Point DE at the buffer used to save the screen area overwritten by the message box |
| 27309 | LD A,3 | Copy three rows of eight attribute bytes from the screen into the buffer (58152-58175) |
| 27311 | LD BC,8 | |
| 27314 | LDIR | |
| 27316 | LD C,24 | |
| 27318 | ADD HL,BC | |
| 27319 | DEC A | |
| 27320 | JR NZ,27311 | |
| 27322 | POP HL | Restore the base attribute file address to HL |
| 27323 | PUSH HL | And save it again |
| 27324 | LD A,H | Set HL to the display file address for the top left corner of the message box |
| 27325 | SUB 80 | |
| 27327 | ADD A,A | |
| 27328 | ADD A,A | |
| 27329 | ADD A,A | |
| 27330 | LD H,A | |
| 27331 | LD C,3 | There are 3 rows of UDGs to copy |
| 27333 | LD A,8 | 8 pixel rows per UDG |
| 27335 | PUSH BC | |
| 27336 | PUSH HL | |
| 27337 | LD C,8 | 8 UDGs per row |
| 27339 | LDIR | Copy one row of pixels into the buffer |
| 27341 | POP HL | |
| 27342 | INC H | Move HL to the next row of pixels on screen |
| 27343 | DEC A | |
| 27344 | JR NZ,27336 | Jump back until all 8 pixel rows for this row of UDGS have been copied into the buffer |
| 27346 | LD A,L | Move HL to the display file address for the start of the top row of pixels for the next row of UDGs |
| 27347 | ADD A,32 | |
| 27349 | LD L,A | |
| 27350 | JR C,27356 | |
| 27352 | LD A,H | |
| 27353 | SUB 8 | |
| 27355 | LD H,A | |
| 27356 | POP BC | |
| 27357 | DEC C | One more row of UDGs copied |
| 27358 | JR NZ,27333 | Jump back until all 3 rows have been done |
| 27360 | POP DE | Drop the base attribute file address into DE |
| 27361 | POP HL | Restore the original contents of HL |
| 27362 | RET | Return with the carry flag reset |