![]() |
Routines |
Prev: 27272 | Up: Map | Next: 27363 |
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 (at 58152) |
27309 | LD A,3 | Copy three rows of eight attribute bytes 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 |