Prev: 25955 Up: Map Next: 26011
25956: Prepare Scroll Data
Used by the routines at ScrollPlayarea_Left and ScrollPlayarea_Right.
Input
A Scroll phase
PrepareScrollData 25956 ADD A,A C=A*4.
25957 ADD A,A
25958 LD C,A
25959 EXX Switch to the shadow registers.
25960 LD BC,1535 Set a counter in B of 5 (the 255 in C isn't used).
25963 LD DE,30720 DE=30720.
PrepareScrollData_Loop 25966 EXX Switch back to the normal registers.
25967 LD A,(DE) Read the index byte.
25968 INC D Move to the next byte.
25969 RRCA Rotate the index byte right three times to extract the address components.
25970 RRCA
25971 RRCA
25972 LD L,A Copy the result to L.
25973 AND %00011111 Keep only bits 0-4.
25975 ADD A,128 Add 128 to form the high byte of the graphics address in HL.
25977 LD H,A
25978 LD A,L Restore the rotated value.
25979 AND %11100000 Keep only bits 5-7.
25981 ADD A,C Add the scroll offset from C.
25982 LD L,A Complete the graphics address in HL.
25983 PUSH HL Stash the graphics address on the stack.
25984 EXX Switch to the shadow registers.
25985 POP HL Restore the graphics address from the stack.
25986 LDI Copy 4 bytes from the graphics line to the destination.
25988 LDI
25990 LDI
25992 LDI
25994 DJNZ PrepareScrollData_Loop Decrease the row counter by one and loop back to PrepareScrollData_Loop until all the rows have been copied.
25996 LD A,(DE) A=*DE.
25997 INC A Increment A by one.
25998 LD (DE),A Write A to *DE.
25999 INC E Increment E by one.
26000 LD A,(DE) A=*DE.
26001 EXX Switch to the shadow registers.
26002 ADD A,B A+=B.
26003 EXX Switch to the shadow registers.
26004 LD (DE),A Write A to *DE.
26005 LD E,2 E=2.
26007 LD B,16 B=16.
26009 EXX Switch to the shadow registers.
26010 RET Return.
Prev: 25955 Up: Map Next: 26011