vscroll: add faster version
This commit is contained in:
parent
f240488fb7
commit
abe1dd5bc5
|
@ -12,7 +12,7 @@ hgr_vscroll:
|
|||
stx SCROLL ; SCROLL = 0 ; 3
|
||||
|
||||
vscroll_loop:
|
||||
|
||||
.if 0
|
||||
; for x=0 to SCROLL
|
||||
; write 40 bytes of 00
|
||||
|
||||
|
@ -45,52 +45,56 @@ vscroll_line:
|
|||
; assume SCROLL=96
|
||||
; 96*(14+443+7)-1
|
||||
;
|
||||
.endif
|
||||
; Original = 66629
|
||||
; optimize = 58564
|
||||
|
||||
|
||||
;====================
|
||||
; draw bottom part
|
||||
|
||||
lda #0 ; 2
|
||||
sta SCROLL_OFFSET ; 3
|
||||
ldx SCROLL ; 3
|
||||
vscroll_bottom:
|
||||
stx XSAVE ; 3
|
||||
|
||||
ldx SCROLL_OFFSET ; 3
|
||||
lda hposn_high,X ; 4
|
||||
clc ; 2
|
||||
adc #$80 ; ora instead? ; 2
|
||||
sta INH ; 3
|
||||
lda hposn_low,X ; 4
|
||||
sta INL ; 3
|
||||
ldy SCROLL_OFFSET ; 3
|
||||
lda hposn_high,Y ; 4
|
||||
ora #$80 ; $20->$A0 ; 2
|
||||
sta vscroll_in_smc+2 ; INH ; 4
|
||||
lda hposn_low,Y ; 4
|
||||
sta vscroll_in_smc+1 ; INL ; 4
|
||||
;====
|
||||
; 24
|
||||
; 21
|
||||
|
||||
inc SCROLL_OFFSET ; 5
|
||||
|
||||
ldx XSAVE ; 3
|
||||
|
||||
lda hposn_high,X ; 4
|
||||
sta OUTH ; 3
|
||||
sta vscroll_out_smc+2 ; OUTH ; 4
|
||||
lda hposn_low,X ; 4
|
||||
sta OUTL ; 3
|
||||
sta vscroll_out_smc+1 ; OUTL ; 4
|
||||
;====
|
||||
; 22
|
||||
; 21
|
||||
|
||||
ldy #39 ; 2
|
||||
vscroll_bottom_line:
|
||||
lda (INL),Y ; 5
|
||||
sta (OUTL),Y ; 6
|
||||
|
||||
vscroll_in_smc:
|
||||
lda $A000,Y ; 4
|
||||
vscroll_out_smc:
|
||||
sta $2000,Y ; 5
|
||||
dey ; 2
|
||||
bpl vscroll_bottom_line ; 2/3
|
||||
;=====
|
||||
; 2+40*(16)-1
|
||||
; 641
|
||||
; 2+40*(14)-1
|
||||
; 561
|
||||
|
||||
inx ; 2
|
||||
cpx #192 ; 2
|
||||
bne vscroll_bottom ; 2/3
|
||||
;==========
|
||||
;5+96*(46+641+7)-1
|
||||
; 66629
|
||||
;5+96*(42+561+7)-1
|
||||
; 58564
|
||||
|
||||
;=====================
|
||||
; scroll whole screen
|
||||
|
|
|
@ -0,0 +1,101 @@
|
|||
;================================
|
||||
; HGR vscroll
|
||||
;================================
|
||||
; image to scroll in is in $A000
|
||||
;
|
||||
; At SCROLL=96 timing = 44,543 + 66,629 = 111,172 cycles
|
||||
; = approx 9 frames/second so 21s to scroll screen
|
||||
|
||||
hgr_vscroll:
|
||||
|
||||
ldx #191 ; 2
|
||||
stx SCROLL ; SCROLL = 0 ; 3
|
||||
|
||||
vscroll_loop:
|
||||
|
||||
; for x=0 to SCROLL
|
||||
; write 40 bytes of 00
|
||||
|
||||
ldx #0 ; 2
|
||||
vscroll_inner:
|
||||
lda hposn_high,X ; 4
|
||||
sta OUTH ; 3
|
||||
lda hposn_low,X ; 4
|
||||
sta OUTL ; 3
|
||||
;====
|
||||
; 14
|
||||
|
||||
ldy #39 ; 2
|
||||
lda #0 ; 2
|
||||
;===
|
||||
; 4
|
||||
vscroll_line:
|
||||
sta (OUTL),Y ; 6
|
||||
dey ; 2
|
||||
bpl vscroll_line ; 2/3
|
||||
;=====
|
||||
; 4+(40*11)-1
|
||||
; 443
|
||||
|
||||
inx ; 2
|
||||
cpx SCROLL ; 2
|
||||
bne vscroll_inner ; 2/3
|
||||
|
||||
;===============
|
||||
; assume SCROLL=96
|
||||
; 96*(14+443+7)-1
|
||||
;
|
||||
|
||||
;====================
|
||||
; draw bottom part
|
||||
|
||||
lda #0 ; 2
|
||||
sta SCROLL_OFFSET ; 3
|
||||
vscroll_bottom:
|
||||
stx XSAVE ; 3
|
||||
|
||||
ldx SCROLL_OFFSET ; 3
|
||||
lda hposn_high,X ; 4
|
||||
clc ; 2
|
||||
adc #$80 ; ora instead? ; 2
|
||||
sta INH ; 3
|
||||
lda hposn_low,X ; 4
|
||||
sta INL ; 3
|
||||
;====
|
||||
; 24
|
||||
|
||||
inc SCROLL_OFFSET ; 5
|
||||
|
||||
ldx XSAVE ; 3
|
||||
|
||||
lda hposn_high,X ; 4
|
||||
sta OUTH ; 3
|
||||
lda hposn_low,X ; 4
|
||||
sta OUTL ; 3
|
||||
;====
|
||||
; 22
|
||||
|
||||
ldy #39 ; 2
|
||||
vscroll_bottom_line:
|
||||
lda (INL),Y ; 5
|
||||
sta (OUTL),Y ; 6
|
||||
dey ; 2
|
||||
bpl vscroll_bottom_line ; 2/3
|
||||
;=====
|
||||
; 2+40*(16)-1
|
||||
; 641
|
||||
|
||||
inx ; 2
|
||||
cpx #192 ; 2
|
||||
bne vscroll_bottom ; 2/3
|
||||
;==========
|
||||
;5+96*(46+641+7)-1
|
||||
; 66629
|
||||
|
||||
;=====================
|
||||
; scroll whole screen
|
||||
|
||||
dec SCROLL
|
||||
bne vscroll_loop
|
||||
|
||||
rts
|
Loading…
Reference in New Issue