![]() |
Routines |
| Prev: 29955 | Up: Map | Next: 30101 |
|
||||||||||||
| 29960 | EX AF,AF' | Switch register AF | ||||||||||
| 29961 | XOR A | Prepare to modify instruction at 30043 to NOP (i.e. A=0) | ||||||||||
|
This entry point is used by the routines at 29950 and 29955.
|
||||||||||||
| 29962 | LD (30043),A | Modify instruction at 30043 with new opcode in A | ||||||||||
| 29965 | EX AF,AF' | Switch back | ||||||||||
| 29966 | PUSH HL | Store HL, BC and AF... | ||||||||||
| 29967 | PUSH BC | ... | ||||||||||
| 29968 | PUSH AF | ... | ||||||||||
| 29969 | LD A,C | Load x-coordinate to draw item into instruction at 30037 | ||||||||||
| 29970 | LD (30038),A | ... | ||||||||||
| 29973 | LD A,B | Multiply y-coordinate by 8... | ||||||||||
| 29974 | ADD A,A | ... | ||||||||||
| 29975 | ADD A,A | ... | ||||||||||
| 29976 | ADD A,A | ... | ||||||||||
| 29977 | LD L,A | ...and load into HL... | ||||||||||
| 29978 | LD H,0 | ... | ||||||||||
| 29980 | 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 26064) | ||||||||||
| 29981 | LD DE,26064 | Point DE at table of display file addresses of starts of each pixel row | ||||||||||
| 29984 | ADD HL,DE | Advance by 16 times y-coordinate to point HL at entry for start of item's current pixel row | ||||||||||
| 29985 | PUSH HL | Transfer this value into IX... | ||||||||||
| 29986 | POP IX | ... | ||||||||||
| 29988 | POP AF | Restore A (graphic index of item to draw)... | ||||||||||
| 29989 | LD L,A | ...and load into HL... | ||||||||||
| 29990 | LD H,0 | ... | ||||||||||
| 29992 | ADD HL,HL | Multiply by four... | ||||||||||
| 29993 | ADD HL,HL | ... | ||||||||||
| 29994 | LD BC,42642 | Point BC at start of graphics data lookup table... | ||||||||||
| 29997 | ADD HL,BC | ...and add offset to point to entry for item of interest | ||||||||||
| 29998 | LD C,(HL) | Load graphic width into C | ||||||||||
| 29999 | INC HL | Advance to height | ||||||||||
| 30000 | LD B,(HL) | Load graphic height into B | ||||||||||
| 30001 | INC HL | Advance to graphic address | ||||||||||
| 30002 | LD A,(HL) | Load graphic address into HL... | ||||||||||
| 30003 | INC HL | ... | ||||||||||
| 30004 | LD H,(HL) | ... | ||||||||||
| 30005 | LD L,A | ... | ||||||||||
| 30006 | LD A,C | Load graphic width into A | ||||||||||
| 30007 | CP 255 | If width is not set to 255, then... | ||||||||||
| 30009 | JR NZ,30014 | ...skip to 30014... | ||||||||||
| 30011 | LD BC,514 | ...else set both height and width to 2 | ||||||||||
| 30014 | PUSH BC | Store width and height | ||||||||||
| 30015 | EX DE,HL | Swap graphic address into DE | ||||||||||
| 30016 | LD A,B | Load height into A... | ||||||||||
| 30017 | ADD A,A | ...and multiply by eight... | ||||||||||
| 30018 | ADD A,A | ... | ||||||||||
| 30019 | ADD A,A | ... | ||||||||||
| 30020 | LD L,A | ...and load into L | ||||||||||
| 30021 | LD H,C | Load H with graphic width | ||||||||||
| 30022 | LD A,C | Load A with graphic width | ||||||||||
| 30023 | LD (30041),A | Load graphic width into instruction at 30040 | ||||||||||
| 30026 | PUSH HL | Transfer width (H) and eight times height (L) from HL to... | ||||||||||
| 30027 | POP BC | ...B (width) and C (eight times height) | ||||||||||
| 30028 | PUSH BC | Store B (width) and C (x times height, where x decreases through loop) | ||||||||||
| 30029 | LD L,(IX+0) | Load HL with display file address to draw item data to screen (stored in IX) from table at 26064... | ||||||||||
| 30032 | LD H,(IX+1) | ... | ||||||||||
| 30035 | LD B,0 | Set B to zero | ||||||||||
| 30037 | LD C,0 | Load C with x-coordinate of item to draw | ||||||||||
| 30039 | ADD HL,BC | Increase display file offset with x-coordinate (characters) | ||||||||||
| 30040 | LD B,0 | Load B with width of graphic to draw | ||||||||||
| 30042 | LD A,(DE) | Load a byte of graphic data into A | ||||||||||
| 30043 | NOP | Blend with graphic data already in display file | ||||||||||
| 30044 | LD (HL),A | Write resultant graphic data to display file | ||||||||||
| 30045 | INC HL | Advance display file pointer to draw second column | ||||||||||
| 30046 | INC DE | Advance to next graphic data byte | ||||||||||
| 30047 | DJNZ 30042 | Repeat loop (for second column of graphic) | ||||||||||
| 30049 | INC IX | Advance IX by two (as it is pointing to a table of two-byte addresses)... | ||||||||||
| 30051 | INC IX | ... | ||||||||||
| 30053 | POP BC | Restore width and eight times height to BC... | ||||||||||
| 30054 | DEC C | ...and decrease C (eight times height) to move to next pixel row | ||||||||||
| 30055 | JR NZ,30028 | Repeat loop for next pixel row | ||||||||||
| 30057 | POP DE | Restore height (D) and width (E) (characters) | ||||||||||
| 30058 | LD A,E | Load width into A | ||||||||||
| 30059 | LD (30069),A | Modify instruction at 30068 with width | ||||||||||
| 30062 | POP BC | Restore y- and x-coordinates for item being drawn | ||||||||||
| 30063 | PUSH BC | Store this again | ||||||||||
| 30064 | PUSH DE | Store width and height | ||||||||||
| 30065 | CALL 36569 | Update virtual attribute cursor storage location to position (C, B) and point HL to corresponding attribute file address | ||||||||||
| 30068 | LD B,0 | Load B with width of item being drawn | ||||||||||
| 30070 | LD A,(23695) | Load A with attribute stored at 23695 (this is set by instructions prior to this routine being called) | ||||||||||
| 30073 | LD (HL),A | Write attribute to current virtual cursor location | ||||||||||
| 30074 | PUSH HL | Store current virtual cursor location | ||||||||||
| 30075 | XOR A | Set A to zero | ||||||||||
| 30076 | LD DE,22528 | Point DE to start of attribute file | ||||||||||
| 30079 | SBC HL,DE | Load HL with address of virtual attribute cursor location, relative to start of attribute file | ||||||||||
| 30081 | LD DE,24539 | Point DE at terrain interaction data | ||||||||||
| 30084 | ADD HL,DE | Add relative address of virtual cursor (attribute) as offset | ||||||||||
| 30085 | LD A,(23483) | Load stored terrain interaction parameter into terrain interaction table for this attribute file address... | ||||||||||
| 30088 | LD (HL),A | ... | ||||||||||
| 30089 | POP HL | Restore current virtual cursor location | ||||||||||
| 30090 | INC HL | Advance cursor to the right one character | ||||||||||
| 30091 | DJNZ 30070 | Repeat loop for rest of width | ||||||||||
| 30093 | POP DE | Restore height (D) and width (E) | ||||||||||
| 30094 | POP BC | Restore y (B) and x (C) coordinates for item being drawn | ||||||||||
| 30095 | INC B | Increase y-coordinate | ||||||||||
| 30096 | DEC D | Decrease "remaining" height | ||||||||||
| 30097 | JR NZ,30063 | If there is some remaining height to colour, then loop back | ||||||||||
| 30099 | POP HL | Restore HL | ||||||||||
| 30100 | RET | Return | ||||||||||
| Prev: 29955 | Up: Map | Next: 30101 |