Routines |
Prev: 27272 | Up: Map | Next: 27363 |
Used by the routines at 29716, 29896 and 62668. Returns with the carry flag set if the message box would be off-screen. Otherwise copies the area of the screen that will be overwritten by the message box into the buffer at 58152, and returns with the attribute file address for the top-left corner of the message box in DE.
|
||||||||
27276 | LD A,(32767) | B=leftmost column of the play area on screen | ||||||
27279 | LD B,A | |||||||
27280 | LD A,E | A=x-coordinate of the character's head | ||||||
27281 | AND 248 | A=x-coordinate of the left edge of the 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 x-coordinate of the left edge of the message box | ||||||
27289 | LD A,D | A=y-coordinate of the point above the character's head | ||||||
27290 | SUB 3 | A=y-coordinate of the top line of the message box | ||||||
27292 | RET C | Return with the carry flag set if this would be off the top of the screen | ||||||
The message box is going to be printed. Prepare for that by saving the area of the screen that will be overwritten.
|
||||||||
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 (at 58152) | ||||||
27309 | LD A,3 | Copy three rows of eight attribute bytes each from the screen into the first 24 bytes of the buffer | ||||||
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 |
Prev: 27272 | Up: Map | Next: 27363 |