Routines |
Prev: 63499 | Up: Map | Next: 63598 |
|
||||||||||||||||
63504 | LD DE,1026 | Set D (height) to 4 and E to 2 (width) | ||||||||||||||
This entry point is used by the routines at 47193, 63494 and 63499.
|
||||||||||||||||
63507 | PUSH HL | Store HL | ||||||||||||||
63508 | PUSH DE | Store DE | ||||||||||||||
63509 | PUSH AF | Store AF | ||||||||||||||
63510 | LD A,C | Load x-coordinate to draw item into instruction at 63570... | ||||||||||||||
63511 | LD (63571),A | ... | ||||||||||||||
63514 | LD A,B | Multiply y-coordinate by 8... | ||||||||||||||
63515 | ADD A,A | ... | ||||||||||||||
63516 | ADD A,A | ... | ||||||||||||||
63517 | ADD A,A | ... | ||||||||||||||
63518 | LD L,A | ...and load into HL... | ||||||||||||||
63519 | LD H,0 | ... | ||||||||||||||
63521 | ADD HL,HL | Double again (so now 16 times y-coordinate, as 8 pixels in a character block, and two bytes per entry in data at 65140) | ||||||||||||||
63522 | LD DE,65140 | Point DE at table of display file addresses of start of each pixel row | ||||||||||||||
63525 | ADD HL,DE | Advance by 16 times y-coordinate to point HL at entry for start of item's current pixel row | ||||||||||||||
63526 | PUSH HL | Transfer this value into IX... | ||||||||||||||
63527 | POP IX | ... | ||||||||||||||
63529 | POP AF | Restore A (graphic index of item to draw)... | ||||||||||||||
63530 | LD L,A | ...and load into HL... | ||||||||||||||
63531 | LD H,0 | ... | ||||||||||||||
63533 | ADD HL,HL | Multiply by four (as there are two WORD entries for each graphic in the table at 29272)... | ||||||||||||||
63534 | ADD HL,HL | ... | ||||||||||||||
63535 | LD BC,29272 | Point BC at start of graphics data lookup table at 29272... | ||||||||||||||
63538 | ADD HL,BC | ...and add offset to point to entry for item of interest | ||||||||||||||
63539 | LD E,(HL) | Load graphic data address for this graphic into DE... | ||||||||||||||
63540 | INC HL | ... | ||||||||||||||
63541 | LD D,(HL) | ... | ||||||||||||||
63542 | INC HL | ... | ||||||||||||||
63543 | CALL 64632 | Load next value in table (address of graphic data for this object's mask) into HL | ||||||||||||||
63546 | POP BC | Restore BC (B = height, C = width) | ||||||||||||||
63547 | LD A,B | Load height into A... | ||||||||||||||
63548 | ADD A,A | ...and multiply by eight... | ||||||||||||||
63549 | ADD A,A | ... | ||||||||||||||
63550 | ADD A,A | ... | ||||||||||||||
63551 | EX AF,AF' | Swap A and A' | ||||||||||||||
63552 | LD B,C | Copy graphic width into B... | ||||||||||||||
63553 | LD A,C | ...and A'... | ||||||||||||||
63554 | LD (63574),A | ...and modify instruction at 63573 with this value also | ||||||||||||||
63557 | EX AF,AF' | Swap A and A' | ||||||||||||||
63558 | EX DE,HL | Swap DE (now pointer to object's mask graphic data) and HL (now pointer to object's graphic data) | ||||||||||||||
63559 | EXX | Switch registers | ||||||||||||||
63560 | LD C,A | Load C with eight times graphic's height | ||||||||||||||
63561 | PUSH BC | Store BC (C = remaining number of pixel rows to draw, initially eight times graphic's height) | ||||||||||||||
63562 | LD L,(IX+0) | Load HL' with display file address of start of pixel row at object's y-coordinate... | ||||||||||||||
63565 | LD H,(IX+1) | ... | ||||||||||||||
63568 | LD B,0 | Set B' to zero | ||||||||||||||
63570 | LD C,0 | Set C' to x-coordinate of item | ||||||||||||||
63572 | ADD HL,BC | Add x-coordinate as offset to address of start of pixel row in HL' (HL' now points at display file address to begin drawing) | ||||||||||||||
63573 | LD B,0 | Load B with graphic width | ||||||||||||||
63575 | EXX | Switch registers | ||||||||||||||
63576 | LD A,(DE) | Load graphic data byte from graphic mask data into A | ||||||||||||||
63577 | EXX | Switch registers | ||||||||||||||
63578 | AND (HL) | Modify mask data by AND-ing with contents of display file allowing scenery in background to show; set pixels are transparent | ||||||||||||||
63579 | EXX | Switch registers | ||||||||||||||
63580 | OR (HL) | Modify modified mask data by OR-ing with object graphic data byte from graphic data | ||||||||||||||
63581 | INC HL | Advance HL to next byte in object graphic data | ||||||||||||||
63582 | INC DE | Advance DE to next byte in object graphic mask data | ||||||||||||||
63583 | EXX | Switch registers | ||||||||||||||
63584 | LD (HL),A | Load masked graphic data byte into display file | ||||||||||||||
63585 | INC HL | Advance HL to next byte in display file | ||||||||||||||
63586 | DJNZ 63575 | Loop back to 63575 for next column of object graphic data | ||||||||||||||
63588 | INC IX | Advance IX by two bytes to next address in table of addresses of starts of pixel rows... | ||||||||||||||
63590 | INC IX | ... | ||||||||||||||
63592 | POP BC | Restore BC (C = remaining number of pixel rows to draw) | ||||||||||||||
63593 | DEC C | Decrease remaining number pixel rows to draw | ||||||||||||||
63594 | JR NZ,63561 | If not zero (i.e. still need to draw at least one more pixel row of graphic data) then loop back to 63561 | ||||||||||||||
63596 | POP HL | Restore HL | ||||||||||||||
63597 | RET | Return |
Prev: 63499 | Up: Map | Next: 63598 |