Prev: 33084 Up: Map Next: 33203
33094: Print World Map
Used by the routines at GameInitialise and Handler_SubGame.
world-map
Print_WorldMap 33094 LD IX,61440 IX=WorldMap_Data.
33098 LD HL,24576 HL=ShadowBuffer.
33101 LD E,255 Set E as a bit counter/ mask.
33103 LD D,128 D is used as a bit mask for the output.
33105 LD A,0 Initialise A to 0 which is used for comparisons.
Main loop, process the map data.
WorldMap_Loop 33107 INC IX Increment the map data pointer by one.
33109 LD B,(IX-1) Load the current map data byte into B.
33112 INC E Increment the bit counter by one.
33113 JR Z,WorldMap_ExpandData Jump to WorldMap_ExpandData if the bit counter wrapped around to zero.
33115 LD E,255 Reset E to 255 if it didn't wrap.
Expand map data into pixels.
WorldMap_ExpandData 33117 RRC E Rotate E right (with carry).
33119 RL (HL) Rotate the byte at *HL left one position, including the carry from the previous line.
33121 DEC B Decrease bits remaining in the current map byte by one.
33122 SRL D Shift the output bit mask right one position.
33124 JR Z,WorldMap_NextByte Jump to WorldMap_NextByte if B is zero (the byte is filled).
33126 CP B Jump to WorldMap_ExpandData if A is not equal to B.
33127 JR NZ,WorldMap_ExpandData
Move to the next map data byte.
33129 JR WorldMap_Loop Jump to WorldMap_Loop.
Move to next shadow buffer byte.
WorldMap_NextByte 33131 INC HL Increment the shadow buffer pointer by one.
33132 LD A,120 A=120 (high byte of the shadow buffer end address).
33134 CP H Jump to WorldMap_ClearEdge if the end of the shadow buffer has been reached.
33135 JR Z,WorldMap_ClearEdge
33137 LD A,B Store the remaining bits from the current map byte in A.
33138 CP 8 Jump to WorldMap_FullByte if A is equal to/ higher than 8.
33140 JR NC,WorldMap_FullByte
33142 CP 0 Check if we're done with current map byte.
33144 LD D,128 Reset the bit mask in D to 128.
33146 JR Z,WorldMap_Loop Jump to WorldMap_Loop if we are done with the current map byte.
33148 LD A,0 Reset A for comparison in bit manipulation loop.
33150 JR WorldMap_ExpandData Jump to WorldMap_ExpandData.
Handle full byte remaining.
WorldMap_FullByte 33152 LD (HL),E Store the full byte in the shadow buffer.
33153 SUB 8 Subtract 8 from the remaining bit count.
33155 LD B,A
33156 JR WorldMap_NextByte Jump to WorldMap_NextByte.
Due to the way the decompression works, the image is left with a trailing line - this is what it would look like if we didn't clear the right edge of the map.
world-map-no-clear
Clear the right edge of the map.
WorldMap_ClearEdge 33158 LD HL,24607 HL=24607.
33161 LD DE,32 Set the row width in DE (0032 bytes is one whole row).
33164 LD B,192 Set a counter in B of the number of rows to process (192).
WorldMap_ClearEdge_Loop 33166 RES 0,(HL) Reset bit 0 of *HL.
33168 ADD HL,DE Move to the next row.
33169 DJNZ WorldMap_ClearEdge_Loop Decrease the row counter by one and loop back to WorldMap_ClearEdge_Loop until all rows have been processed.
Copy the map to the screen buffer.
33171 LD HL,24576 Copy 6144 bytes from ShadowBuffer to the screen buffer.
33174 LD DE,16384
33177 LD BC,6144
33180 LDIR
Colour the whole of the attribute buffer INK: YELLOW, PAPER: BLUE (BRIGHT) .
33182 LD HL,22528 HL=22528 (attribute buffer location).
33185 LD DE,22529 DE=22529.
33188 LD BC,767 BC=767.
33191 LD (HL),78 Write INK: YELLOW, PAPER: BLUE (BRIGHT) to *HL.
33193 LDIR Copy 767 more bytes to the rest of the attribute buffer.
33195 LD A,1 Write 1 to *39372.
33197 LD (39372),A
33200 OUT (254),A Set the border to BLUE.
33202 RET Return.
Prev: 33084 Up: Map Next: 33203