Prev: 664E Up: Map Next: 66F9
6650: Scroll Playarea Right
Scrolls the play area horizontally by shifting pixel data right using RRD instructions.
ScrollPlayarea_Right 6650 LD HL,($7817) HL=*Current_ScreenPosition.
6653 LD A,($7819) Jump to ScrollPlayarea_Right_1 if *ScrollPhase_Counter is not zero.
6656 AND A
6657 JR NZ,ScrollPlayarea_Right_1
6659 LD A,L Jump to ScrollPlayarea_Right_0 if L is not zero.
665A AND A
665B JR NZ,ScrollPlayarea_Right_0
665D LD A,H H-=05.
665E SUB $05
6660 LD H,A
ScrollPlayarea_Right_0 6661 DEC L Decrease L by one.
6662 LD ($7817),HL Write HL to *Current_ScreenPosition.
6665 LD A,$08 A=08.
ScrollPlayarea_Right_1 6667 DEC A Decrease A by one.
6668 LD ($7819),A Write A to *ScrollPhase_Counter.
666B LD D,H Copy HL to DE.
666C LD E,L
666D LD B,$FF B=FF.
666F CALL PrepareScrollData Call PrepareScrollData.
Start of screen buffer.
6672 LD HL,$4000 HL=4000 (screen buffer).
6675 LD D,H Copy the screen position pointer into DE.
6676 LD E,L
6677 EXX Switch to the shadow registers.
ScrollPlayarea_Right_2 6678 LD A,(DE) A=*DE.
6679 INC E Increment E by one.
667A LD L,A L=A.
667B LD H,$1F H=1F.
667D ADD HL,HL Multiply HL by 04.
667E ADD HL,HL
667F EXX Switch to the shadow registers.
Scroll one character row (20 characters) left by 01 pixel using RRD.
6680 LD B,$04 Set a counter in B for 04 rows.
ScrollCharacterRow_Right 6682 EXX Switch to the shadow registers.
6683 LD A,(HL) A=*HL.
6684 INC L Increment L by one.
6685 EXX Switch to the shadow registers.
6686 RRD RRD.
6688 INC L Increment L by one.
6689 RRD RRD.
668B INC L Increment L by one.
668C RRD RRD.
668E INC L Increment L by one.
668F RRD RRD.
6691 INC L Increment L by one.
6692 RRD RRD.
6694 INC L Increment L by one.
6695 RRD RRD.
6697 INC L Increment L by one.
6698 RRD RRD.
669A INC L Increment L by one.
669B RRD RRD.
669D INC L Increment L by one.
669E RRD RRD.
66A0 INC L Increment L by one.
66A1 RRD RRD.
66A3 INC L Increment L by one.
66A4 RRD RRD.
66A6 INC L Increment L by one.
66A7 RRD RRD.
66A9 INC L Increment L by one.
66AA RRD RRD.
66AC INC L Increment L by one.
66AD RRD RRD.
66AF INC L Increment L by one.
66B0 RRD RRD.
66B2 INC L Increment L by one.
66B3 RRD RRD.
66B5 INC L Increment L by one.
66B6 RRD RRD.
66B8 INC L Increment L by one.
66B9 RRD RRD.
66BB INC L Increment L by one.
66BC RRD RRD.
66BE INC L Increment L by one.
66BF RRD RRD.
66C1 INC L Increment L by one.
66C2 RRD RRD.
66C4 INC L Increment L by one.
66C5 RRD RRD.
66C7 INC L Increment L by one.
66C8 RRD RRD.
66CA INC L Increment L by one.
66CB RRD RRD.
66CD INC L Increment L by one.
66CE RRD RRD.
66D0 INC L Increment L by one.
66D1 RRD RRD.
66D3 INC L Increment L by one.
66D4 RRD RRD.
66D6 INC L Increment L by one.
66D7 RRD RRD.
66D9 INC L Increment L by one.
66DA RRD RRD.
66DC INC L Increment L by one.
66DD RRD RRD.
66DF INC L Increment L by one.
66E0 RRD RRD.
66E2 INC L Increment L by one.
66E3 RRD RRD.
66E5 LD L,E L=E.
66E6 INC H Increment H by two.
66E7 INC H
66E8 DJNZ ScrollCharacterRow_Right Decrease counter by one and loop back to ScrollCharacterRow_Right until counter is zero.
66EA LD A,$20 E+=20.
66EC ADD A,E
66ED LD E,A
66EE LD L,A L=A.
66EF JR NC,ContinueScreenScroll_Right Jump to ContinueScreenScroll_Right if {} is higher.
66F1 LD D,$48 D=48.
ContinueScreenScroll_Right 66F3 LD H,D Update the screen pointer.
66F4 EXX Switch to the shadow registers.
66F5 DJNZ ScrollPlayarea_Right_2 Decrease counter by one and loop back to ScrollPlayarea_Right_2 until counter is zero.
66F7 EXX Switch back to the normal registers.
66F8 RET Return.
Prev: 664E Up: Map Next: 66F9