Prev: 43844 Up: Map Next: 43990
43970: Copy Room Data
Input
B Length of data to be copied
DE The room buffer target destination
HL Pointer to the room data we want to copy
This routine copies the number of bytes given by B, from *HL to *DE, and keeps on looping until a termination character is returned.
CopyRoomData 43970 PUSH BC Stash the length counter on the stack.
43971 LD A,(HL) Fetch a byte from the source room data pointer and store it in A.
Have we finished with everything?
43972 CP 255 If the terminator character (255) has been reached jump to CopyRoomData_Next.
43974 JR Z,CopyRoomData_Next
Handle copying the data from the source room data to the target room buffer.
CopyRoomData_Loop 43976 LD (DE),A Write the room data byte to the room buffer target destination.
43977 INC HL Increment the source room data pointer by one.
43978 INC DE Increment the room buffer target destination by one.
43979 LD A,(HL) Fetch a byte from the source room data pointer and store it in A.
43980 DJNZ CopyRoomData_Loop Decrease the length counter by one and loop back to CopyRoomData_Loop until the length counter is zero.
Refresh the same counter as on entry to the routine and start the process again.
43982 POP BC Restore the original length counter from the stack.
43983 JR CopyRoomData Jump to CopyRoomData.
This cycle is now over, so store the terminator in the room buffer, increment both pointers ready for the next call to this routine and finally, tidy up the stack.
CopyRoomData_Next 43985 LD (DE),A Write the termination character to the room buffer target destination.
43986 INC DE Increment the room buffer target destination by one.
43987 INC HL Increment the source room data pointer by one.
43988 POP BC Housekeeping; discard the length counter from the stack.
43989 RET Return.
Prev: 43844 Up: Map Next: 43990