Prev: 659B Up: Map Next: 664E
659C: Scroll Playarea
Scrolls the play area horizontally by shifting pixel data left using RLD instructions.
ScrollPlayarea 659C LD HL,($7817) HL=*Current_ScreenPosition.
659F LD D,H Copy the screen position pointer into DE.
65A0 LD E,L
65A1 LD A,($7819) A=*ScrollPhase_Counter.
65A4 LD C,A Copy the scroll phase counter into C.
65A5 INC A Increment the scroll phase counter by one.
65A6 AND %00000111 Ensure the counter is limited to being a number between 00-07.
65A8 LD ($7819),A Write the scroll phase counter back to *ScrollPhase_Counter.
65AB JR NZ,ScrollPlayarea_UpdateColumnPointer Jump to ScrollPlayarea_UpdateColumnPointer if A is not zero.
65AD INC L Increment L by one.
65AE JR NZ,ScrollPlayarea_StorePointer Jump to ScrollPlayarea_StorePointer if L is not zero.
65B0 LD A,H H+=05.
65B1 ADD A,$05
65B3 LD H,A
ScrollPlayarea_StorePointer 65B4 LD ($7817),HL Write HL to *Current_ScreenPosition.
Set up the column data pointer for new graphics data.
ScrollPlayarea_UpdateColumnPointer 65B7 LD A,E E+=08.
65B8 ADD A,$08
65BA LD E,A
65BB JR NC,ScrollPlayarea_SetupScroll Jump to ScrollPlayarea_SetupScroll if {} is higher.
65BD LD A,D D+=05.
65BE ADD A,$05
65C0 LD D,A
ScrollPlayarea_SetupScroll 65C1 LD A,C Load the original scroll phase counter value into A.
65C2 LD B,$01 Set a counter in B for 01 column to process.
65C4 CALL PrepareScrollData Call PrepareScrollData.
Start of screen buffer.
65C7 LD HL,$401F HL=401F (screen buffer location).
65CA LD D,H Copy the screen position pointer into DE.
65CB LD E,L
65CC EXX Switch to the shadow registers.
ScrollPlayarea_ProcessRows 65CD LD A,(DE) A=*DE.
65CE INC E Increment E by one.
65CF LD L,A L=A.
65D0 LD H,$1F H=1F.
65D2 ADD HL,HL HL+=HL.
65D3 ADD HL,HL HL+=HL.
65D4 EXX Switch to the shadow registers.
65D5 LD B,$04 B=04.
ScrollPlayarea_0 65D7 EXX Switch to the shadow registers.
65D8 LD A,(HL) A=*HL.
65D9 INC L Increment L by one.
65DA EXX Switch to the shadow registers.
65DB RLD RLD.
65DD DEC L Decrease L by one.
65DE RLD RLD.
65E0 DEC L Decrease L by one.
65E1 RLD RLD.
65E3 DEC L Decrease L by one.
65E4 RLD RLD.
65E6 DEC L Decrease L by one.
65E7 RLD RLD.
65E9 DEC L Decrease L by one.
65EA RLD RLD.
65EC DEC L Decrease L by one.
65ED RLD RLD.
65EF DEC L Decrease L by one.
65F0 RLD RLD.
65F2 DEC L Decrease L by one.
65F3 RLD RLD.
65F5 DEC L Decrease L by one.
65F6 RLD RLD.
65F8 DEC L Decrease L by one.
65F9 RLD RLD.
65FB DEC L Decrease L by one.
65FC RLD RLD.
65FE DEC L Decrease L by one.
65FF RLD RLD.
6601 DEC L Decrease L by one.
6602 RLD RLD.
6604 DEC L Decrease L by one.
6605 RLD RLD.
6607 DEC L Decrease L by one.
6608 RLD RLD.
660A DEC L Decrease L by one.
660B RLD RLD.
660D DEC L Decrease L by one.
660E RLD RLD.
6610 DEC L Decrease L by one.
6611 RLD RLD.
6613 DEC L Decrease L by one.
6614 RLD RLD.
6616 DEC L Decrease L by one.
6617 RLD RLD.
6619 DEC L Decrease L by one.
661A RLD RLD.
661C DEC L Decrease L by one.
661D RLD RLD.
661F DEC L Decrease L by one.
6620 RLD RLD.
6622 DEC L Decrease L by one.
6623 RLD RLD.
6625 DEC L Decrease L by one.
6626 RLD RLD.
6628 DEC L Decrease L by one.
6629 RLD RLD.
662B DEC L Decrease L by one.
662C RLD RLD.
662E DEC L Decrease L by one.
662F RLD RLD.
6631 DEC L Decrease L by one.
6632 RLD RLD.
6634 DEC L Decrease L by one.
6635 RLD RLD.
6637 DEC L Decrease L by one.
6638 RLD RLD.
663A LD L,E L=E.
663B INC H Increment H by two.
663C INC H
663D DJNZ ScrollPlayarea_0 Decrease counter by one and loop back to ScrollPlayarea_0 until counter is zero.
663F LD A,$20 Move down one character row.
6641 ADD A,E
6642 LD E,A
6643 LD L,A Update the screen pointer.
6644 JR NC,ScrollPlayarea_NextRow Jump to ScrollPlayarea_NextRow if {} is higher.
6646 LD D,$48 D=48.
ScrollPlayarea_NextRow 6648 LD H,D Update the screen pointer.
6649 EXX Switch to the shadow registers.
664A DJNZ ScrollPlayarea_ProcessRows Decrease counter by one and loop back to ScrollPlayarea_ProcessRows until counter is zero.
664C EXX Switch back to the normal registers.
664D RET Return.
Prev: 659B Up: Map Next: 664E