mirror of
https://github.com/irmen/prog8.git
synced 2024-12-02 07:49:27 +00:00
optimized scroll routines by removing needless twin loops
This commit is contained in:
parent
11e9539416
commit
131fe670a4
@ -594,8 +594,6 @@ asmsub scroll_left_full (ubyte alsocolors @ Pc) clobbers(A, Y) {
|
|||||||
; contents of the rightmost column are unchanged, you should clear/refill this yourself
|
; contents of the rightmost column are unchanged, you should clear/refill this yourself
|
||||||
; Carry flag determines if screen color data must be scrolled too
|
; Carry flag determines if screen color data must be scrolled too
|
||||||
|
|
||||||
; TODO why are the two inner loops split apart? can't they just be one single .for/.next macro?
|
|
||||||
|
|
||||||
%asm {{
|
%asm {{
|
||||||
stx c64.SCRATCH_ZPREGX
|
stx c64.SCRATCH_ZPREGX
|
||||||
bcs +
|
bcs +
|
||||||
@ -605,18 +603,7 @@ asmsub scroll_left_full (ubyte alsocolors @ Pc) clobbers(A, Y) {
|
|||||||
ldx #0
|
ldx #0
|
||||||
ldy #38
|
ldy #38
|
||||||
-
|
-
|
||||||
.for row=0, row<=12, row+=1
|
.for row=0, row<=24, row+=1
|
||||||
lda c64.Colors + 40*row + 1,x
|
|
||||||
sta c64.Colors + 40*row,x
|
|
||||||
.next
|
|
||||||
inx
|
|
||||||
dey
|
|
||||||
bpl -
|
|
||||||
|
|
||||||
ldx #0
|
|
||||||
ldy #38
|
|
||||||
-
|
|
||||||
.for row=13, row<=24, row+=1
|
|
||||||
lda c64.Colors + 40*row + 1,x
|
lda c64.Colors + 40*row + 1,x
|
||||||
sta c64.Colors + 40*row,x
|
sta c64.Colors + 40*row,x
|
||||||
.next
|
.next
|
||||||
@ -628,18 +615,7 @@ _scroll_screen ; scroll the screen memory
|
|||||||
ldx #0
|
ldx #0
|
||||||
ldy #38
|
ldy #38
|
||||||
-
|
-
|
||||||
.for row=0, row<=12, row+=1
|
.for row=0, row<=24, row+=1
|
||||||
lda c64.Screen + 40*row + 1,x
|
|
||||||
sta c64.Screen + 40*row,x
|
|
||||||
.next
|
|
||||||
inx
|
|
||||||
dey
|
|
||||||
bpl -
|
|
||||||
|
|
||||||
ldx #0
|
|
||||||
ldy #38
|
|
||||||
-
|
|
||||||
.for row=13, row<=24, row+=1
|
|
||||||
lda c64.Screen + 40*row + 1,x
|
lda c64.Screen + 40*row + 1,x
|
||||||
sta c64.Screen + 40*row,x
|
sta c64.Screen + 40*row,x
|
||||||
.next
|
.next
|
||||||
@ -664,41 +640,23 @@ asmsub scroll_right_full (ubyte alsocolors @ Pc) clobbers(A) {
|
|||||||
+ ; scroll the color memory
|
+ ; scroll the color memory
|
||||||
ldx #38
|
ldx #38
|
||||||
-
|
-
|
||||||
.for row=0, row<=12, row+=1
|
.for row=0, row<=24, row+=1
|
||||||
lda c64.Colors + 40*row + 0,x
|
lda c64.Colors + 40*row + 0,x
|
||||||
sta c64.Colors + 40*row + 1,x
|
sta c64.Colors + 40*row + 1,x
|
||||||
.next
|
.next
|
||||||
dex
|
dex
|
||||||
bpl -
|
bpl -
|
||||||
|
|
||||||
ldx #38
|
|
||||||
-
|
|
||||||
.for row=13, row<=24, row+=1
|
|
||||||
lda c64.Colors + 40*row,x
|
|
||||||
sta c64.Colors + 40*row + 1,x
|
|
||||||
.next
|
|
||||||
dex
|
|
||||||
bpl -
|
|
||||||
|
|
||||||
_scroll_screen ; scroll the screen memory
|
_scroll_screen ; scroll the screen memory
|
||||||
ldx #38
|
ldx #38
|
||||||
-
|
-
|
||||||
.for row=0, row<=12, row+=1
|
.for row=0, row<=24, row+=1
|
||||||
lda c64.Screen + 40*row + 0,x
|
lda c64.Screen + 40*row + 0,x
|
||||||
sta c64.Screen + 40*row + 1,x
|
sta c64.Screen + 40*row + 1,x
|
||||||
.next
|
.next
|
||||||
dex
|
dex
|
||||||
bpl -
|
bpl -
|
||||||
|
|
||||||
ldx #38
|
|
||||||
-
|
|
||||||
.for row=13, row<=24, row+=1
|
|
||||||
lda c64.Screen + 40*row,x
|
|
||||||
sta c64.Screen + 40*row + 1,x
|
|
||||||
.next
|
|
||||||
dex
|
|
||||||
bpl -
|
|
||||||
|
|
||||||
ldx c64.SCRATCH_ZPREGX
|
ldx c64.SCRATCH_ZPREGX
|
||||||
rts
|
rts
|
||||||
}}
|
}}
|
||||||
@ -716,16 +674,7 @@ asmsub scroll_up_full (ubyte alsocolors @ Pc) clobbers(A) {
|
|||||||
+ ; scroll the color memory
|
+ ; scroll the color memory
|
||||||
ldx #39
|
ldx #39
|
||||||
-
|
-
|
||||||
.for row=1, row<=11, row+=1
|
.for row=1, row<=24, row+=1
|
||||||
lda c64.Colors + 40*row,x
|
|
||||||
sta c64.Colors + 40*(row-1),x
|
|
||||||
.next
|
|
||||||
dex
|
|
||||||
bpl -
|
|
||||||
|
|
||||||
ldx #39
|
|
||||||
-
|
|
||||||
.for row=12, row<=24, row+=1
|
|
||||||
lda c64.Colors + 40*row,x
|
lda c64.Colors + 40*row,x
|
||||||
sta c64.Colors + 40*(row-1),x
|
sta c64.Colors + 40*(row-1),x
|
||||||
.next
|
.next
|
||||||
@ -735,16 +684,7 @@ asmsub scroll_up_full (ubyte alsocolors @ Pc) clobbers(A) {
|
|||||||
_scroll_screen ; scroll the screen memory
|
_scroll_screen ; scroll the screen memory
|
||||||
ldx #39
|
ldx #39
|
||||||
-
|
-
|
||||||
.for row=1, row<=11, row+=1
|
.for row=1, row<=24, row+=1
|
||||||
lda c64.Screen + 40*row,x
|
|
||||||
sta c64.Screen + 40*(row-1),x
|
|
||||||
.next
|
|
||||||
dex
|
|
||||||
bpl -
|
|
||||||
|
|
||||||
ldx #39
|
|
||||||
-
|
|
||||||
.for row=12, row<=24, row+=1
|
|
||||||
lda c64.Screen + 40*row,x
|
lda c64.Screen + 40*row,x
|
||||||
sta c64.Screen + 40*(row-1),x
|
sta c64.Screen + 40*(row-1),x
|
||||||
.next
|
.next
|
||||||
@ -768,16 +708,7 @@ asmsub scroll_down_full (ubyte alsocolors @ Pc) clobbers(A) {
|
|||||||
+ ; scroll the color memory
|
+ ; scroll the color memory
|
||||||
ldx #39
|
ldx #39
|
||||||
-
|
-
|
||||||
.for row=23, row>=12, row-=1
|
.for row=23, row>=0, row-=1
|
||||||
lda c64.Colors + 40*row,x
|
|
||||||
sta c64.Colors + 40*(row+1),x
|
|
||||||
.next
|
|
||||||
dex
|
|
||||||
bpl -
|
|
||||||
|
|
||||||
ldx #39
|
|
||||||
-
|
|
||||||
.for row=11, row>=0, row-=1
|
|
||||||
lda c64.Colors + 40*row,x
|
lda c64.Colors + 40*row,x
|
||||||
sta c64.Colors + 40*(row+1),x
|
sta c64.Colors + 40*(row+1),x
|
||||||
.next
|
.next
|
||||||
@ -787,16 +718,7 @@ asmsub scroll_down_full (ubyte alsocolors @ Pc) clobbers(A) {
|
|||||||
_scroll_screen ; scroll the screen memory
|
_scroll_screen ; scroll the screen memory
|
||||||
ldx #39
|
ldx #39
|
||||||
-
|
-
|
||||||
.for row=23, row>=12, row-=1
|
.for row=23, row>=0, row-=1
|
||||||
lda c64.Screen + 40*row,x
|
|
||||||
sta c64.Screen + 40*(row+1),x
|
|
||||||
.next
|
|
||||||
dex
|
|
||||||
bpl -
|
|
||||||
|
|
||||||
ldx #39
|
|
||||||
-
|
|
||||||
.for row=11, row>=0, row-=1
|
|
||||||
lda c64.Screen + 40*row,x
|
lda c64.Screen + 40*row,x
|
||||||
sta c64.Screen + 40*(row+1),x
|
sta c64.Screen + 40*(row+1),x
|
||||||
.next
|
.next
|
||||||
|
Loading…
Reference in New Issue
Block a user