![]() |
Routines |
| Prev: 54406 | Up: Map | Next: 54505 |
|
||||||||||||||||
| 54411 | LD DE,1026 | Set D (height) to 4 and E to 2 (width) | ||||||||||||||
|
This entry point is used by the routines at 30145, 34990 and 54406.
|
||||||||||||||||
| 54414 | PUSH HL | Store HL | ||||||||||||||
| 54415 | PUSH DE | Store DE | ||||||||||||||
| 54416 | PUSH AF | Store AF | ||||||||||||||
| 54417 | LD A,C | Load x-coordinate to draw item into instruction at 54477... | ||||||||||||||
| 54418 | LD (54478),A | ... | ||||||||||||||
| 54421 | LD A,B | Multiply y-coordinate by 8... | ||||||||||||||
| 54422 | ADD A,A | ... | ||||||||||||||
| 54423 | ADD A,A | ... | ||||||||||||||
| 54424 | ADD A,A | ... | ||||||||||||||
| 54425 | LD L,A | ...and load into HL... | ||||||||||||||
| 54426 | LD H,0 | ... | ||||||||||||||
| 54428 | 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 26240) | ||||||||||||||
| 54429 | LD DE,26240 | Point DE at table of display file addresses of start of each pixel row | ||||||||||||||
| 54432 | ADD HL,DE | Advance by 16 times y-coordinate to point HL at entry for start of item's current pixel row | ||||||||||||||
| 54433 | PUSH HL | Transfer this value into IX... | ||||||||||||||
| 54434 | POP IX | ... | ||||||||||||||
| 54436 | POP AF | Restore A (graphic index of item to draw)... | ||||||||||||||
| 54437 | LD L,A | ...and load into HL... | ||||||||||||||
| 54438 | LD H,0 | ... | ||||||||||||||
| 54440 | ADD HL,HL | Multiply by four (as there are two WORD entries for each graphic in the table at 55950)... | ||||||||||||||
| 54441 | ADD HL,HL | ... | ||||||||||||||
| 54442 | LD BC,55950 | Point BC at start of graphics data lookup table at 55950... | ||||||||||||||
| 54445 | ADD HL,BC | ...and add offset to point to entry for item of interest | ||||||||||||||
| 54446 | LD E,(HL) | Load graphic data address for this graphic into DE... | ||||||||||||||
| 54447 | INC HL | ... | ||||||||||||||
| 54448 | LD D,(HL) | ... | ||||||||||||||
| 54449 | INC HL | ... | ||||||||||||||
| 54450 | CALL 55735 | Load next value in table (address of graphic data for this object's mask) into HL | ||||||||||||||
| 54453 | POP BC | Restore BC (B = height, C = width) | ||||||||||||||
| 54454 | LD A,B | Load height into A... | ||||||||||||||
| 54455 | ADD A,A | ...and multiply by eight... | ||||||||||||||
| 54456 | ADD A,A | ... | ||||||||||||||
| 54457 | ADD A,A | ... | ||||||||||||||
| 54458 | EX AF,AF' | Swap A and A' | ||||||||||||||
| 54459 | LD B,C | Copy graphic width into B... | ||||||||||||||
| 54460 | LD A,C | ...and A'... | ||||||||||||||
| 54461 | LD (54481),A | ...and modify instruction at 54480 with this value also | ||||||||||||||
| 54464 | EX AF,AF' | Swap A and A' | ||||||||||||||
| 54465 | EX DE,HL | Swap DE (now pointer to object's mask graphic data) and HL (now pointer to object's graphic data) | ||||||||||||||
| 54466 | EXX | Switch registers | ||||||||||||||
| 54467 | LD C,A | Load C with eight times graphic's height | ||||||||||||||
| 54468 | PUSH BC | Store BC (C = remaining number of pixel rows to draw, initially eight times graphic's height) | ||||||||||||||
| 54469 | LD L,(IX+0) | Load HL' with display file address of start of pixel row at object's y-coordinate... | ||||||||||||||
| 54472 | LD H,(IX+1) | ... | ||||||||||||||
| 54475 | LD B,0 | Set B' to zero | ||||||||||||||
| 54477 | LD C,0 | Set C' to x-coordinate of item | ||||||||||||||
| 54479 | 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) | ||||||||||||||
| 54480 | LD B,0 | Load B with graphic width | ||||||||||||||
| 54482 | EXX | Switch registers | ||||||||||||||
| 54483 | LD A,(DE) | Load graphic data byte from graphic mask data into A | ||||||||||||||
| 54484 | EXX | Switch registers | ||||||||||||||
| 54485 | AND (HL) | Modify mask data by AND-ing with contents of display file allowing scenery in background to show; set pixels are transparent | ||||||||||||||
| 54486 | EXX | Switch registers | ||||||||||||||
| 54487 | OR (HL) | Modify modified mask data by OR-ing with object graphic data byte from graphic data | ||||||||||||||
| 54488 | INC HL | Advance HL to next byte in object graphic data | ||||||||||||||
| 54489 | INC DE | Advance DE to next byte in object graphic mask data | ||||||||||||||
| 54490 | EXX | Switch registers | ||||||||||||||
| 54491 | LD (HL),A | Load masked graphic data byte into display file | ||||||||||||||
| 54492 | INC HL | Advance HL to next byte in display file | ||||||||||||||
| 54493 | DJNZ 54482 | Loop back to 54482 for next column of object graphic data | ||||||||||||||
| 54495 | INC IX | Advance IX by two bytes to next address in table of addresses of starts of pixel rows... | ||||||||||||||
| 54497 | INC IX | ... | ||||||||||||||
| 54499 | POP BC | Restore BC (C = remaining number of pixel rows to draw) | ||||||||||||||
| 54500 | DEC C | Decrease remaining number pixel rows to draw | ||||||||||||||
| 54501 | JR NZ,54468 | If not zero (i.e. still need to draw at least one more pixel row of graphic data) then loop back to 54468 | ||||||||||||||
| 54503 | POP HL | Restore HL | ||||||||||||||
| 54504 | RET | Return | ||||||||||||||
| Prev: 54406 | Up: Map | Next: 54505 |