waterfall: add crazy unrolled copy code

This commit is contained in:
Vince Weaver 2018-08-02 15:02:43 -04:00
parent 093bc751de
commit 91fc5c3ee7
3 changed files with 664 additions and 10 deletions

View File

@ -31,6 +31,6 @@ waterfall_page2.inc: waterfall_page2.png
#####
clean:
rm -f *~ *.o *.lst *.inc WATERFALL
rm -f *~ *.o *.lst waterfall_page*.inc WATERFALL

View File

@ -56,3 +56,655 @@ gr_copy_line:
rts ; 6
;=========================================================
; fast copy rows 22-36 from $C00 to $800
;=========================================================
;
; 6 + 7*8*40 = 2246 cycles
; 6*7*40 = 1680 bytes of code?
gr_copy_row22:
;= y = 22 $5a8 =========================
; x=0,y=22
lda $da8
sta $9a8
lda $da9
sta $9a9
lda $daa
sta $9aa
lda $dab
sta $9ab
lda $dac
sta $9ac
lda $dad
sta $9ad
lda $dae
sta $9ae
lda $daf
sta $9af
; x=8,y=22
lda $db0
sta $9b0
lda $db1
sta $9b1
lda $db2
sta $9b2
lda $db3
sta $9b3
lda $db4
sta $9b4
lda $db5
sta $9b5
lda $db6
sta $9b6
lda $db7
sta $9b7
; x=16,y=22
lda $db8
sta $9b8
lda $db9
sta $9b9
lda $dba
sta $9ba
lda $dbb
sta $9bb
lda $dbc
sta $9bc
lda $dbd
sta $9bd
lda $dbe
sta $9be
lda $dbf
sta $9bf
; x=24,y=22
lda $dc0
sta $9c0
lda $dc1
sta $9c1
lda $dc2
sta $9c2
lda $dc3
sta $9c3
lda $dc4
sta $9c4
lda $dc5
sta $9c5
lda $dc6
sta $9c6
lda $dc7
sta $9c7
; x=32,y=22
lda $dc8
sta $9c8
lda $dc9
sta $9c9
lda $dca
sta $9ca
lda $dcb
sta $9cb
lda $dcc
sta $9cc
lda $dcd
sta $9cd
lda $dce
sta $9ce
lda $dcf
sta $9cf
;= y = 24 $628 =========================
; x=0,y=24
lda $e28
sta $a28
lda $e29
sta $a29
lda $e2a
sta $a2a
lda $e2b
sta $a2b
lda $e2c
sta $a2c
lda $e2d
sta $a2d
lda $e2e
sta $a2e
lda $e2f
sta $a2f
; x=8,y=24
lda $e30
sta $a30
lda $e31
sta $a31
lda $e32
sta $a32
lda $e33
sta $a33
lda $e34
sta $a34
lda $e35
sta $a35
lda $e36
sta $a36
lda $e37
sta $a37
; x=16,y=24
lda $e38
sta $a38
lda $e39
sta $a39
lda $e3a
sta $a3a
lda $e3b
sta $a3b
lda $e3c
sta $a3c
lda $e3d
sta $a3d
lda $e3e
sta $a3e
lda $e3f
sta $a3f
; x=24,y=24
lda $e40
sta $a40
lda $e41
sta $a41
lda $e42
sta $a42
lda $e43
sta $a43
lda $e44
sta $a44
lda $e45
sta $a45
lda $e46
sta $a46
lda $e47
sta $a47
; x=32,y=24
lda $e48
sta $a48
lda $e49
sta $a49
lda $e4a
sta $a4a
lda $e4b
sta $a4b
lda $e4c
sta $a4c
lda $e4d
sta $a4d
lda $e4e
sta $a4e
lda $e4f
sta $a4f
;= y = 26 $6a8 =========================
; x=0,y=26
lda $ea8
sta $aa8
lda $ea9
sta $aa9
lda $eaa
sta $aaa
lda $eab
sta $aab
lda $eac
sta $aac
lda $ead
sta $aad
lda $eae
sta $aae
lda $eaf
sta $aaf
; x=8,y=26
lda $eb0
sta $ab0
lda $eb1
sta $ab1
lda $eb2
sta $ab2
lda $eb3
sta $ab3
lda $eb4
sta $ab4
lda $eb5
sta $ab5
lda $eb6
sta $ab6
lda $eb7
sta $ab7
; x=16,y=26
lda $eb8
sta $ab8
lda $eb9
sta $ab9
lda $eba
sta $aba
lda $ebb
sta $abb
lda $ebc
sta $abc
lda $ebd
sta $abd
lda $ebe
sta $abe
lda $ebf
sta $abf
; x=24,y=26
lda $ec0
sta $ac0
lda $ec1
sta $ac1
lda $ec2
sta $ac2
lda $ec3
sta $ac3
lda $ec4
sta $ac4
lda $ec5
sta $ac5
lda $ec6
sta $ac6
lda $ec7
sta $ac7
; x=32,y=26
lda $ec8
sta $ac8
lda $ec9
sta $ac9
lda $eca
sta $aca
lda $ecb
sta $acb
lda $ecc
sta $acc
lda $ecd
sta $acd
lda $ece
sta $ace
lda $ecf
sta $acf
;= y = 28 $728 =========================
; x=0,y=28
lda $e28
sta $a28
lda $e29
sta $a29
lda $e2a
sta $a2a
lda $e2b
sta $a2b
lda $e2c
sta $a2c
lda $e2d
sta $a2d
lda $e2e
sta $a2e
lda $e2f
sta $a2f
; x=8,y=28
lda $e30
sta $a30
lda $e31
sta $a31
lda $e32
sta $a32
lda $e33
sta $a33
lda $e34
sta $a34
lda $e35
sta $a35
lda $e36
sta $a36
lda $e37
sta $a37
; x=16,y=28
lda $e38
sta $a38
lda $e39
sta $a39
lda $e3a
sta $a3a
lda $e3b
sta $a3b
lda $e3c
sta $a3c
lda $e3d
sta $a3d
lda $e3e
sta $a3e
lda $e3f
sta $a3f
; x=24,y=28
lda $e40
sta $a40
lda $e41
sta $a41
lda $e42
sta $a42
lda $e43
sta $a43
lda $e44
sta $a44
lda $e45
sta $a45
lda $e46
sta $a46
lda $e47
sta $a47
; x=32,y=28
lda $e48
sta $a48
lda $e49
sta $a49
lda $e4a
sta $a4a
lda $e4b
sta $a4b
lda $e4c
sta $a4c
lda $e4d
sta $a4d
lda $e4e
sta $a4e
lda $e4f
sta $a4f
;= y = 30 $7a8 =========================
; x=0,y=30
lda $ea8
sta $aa8
lda $ea9
sta $aa9
lda $eaa
sta $aaa
lda $eab
sta $aab
lda $eac
sta $aac
lda $ead
sta $aad
lda $eae
sta $aae
lda $eaf
sta $aaf
; x=8,y=30
lda $eb0
sta $ab0
lda $eb1
sta $ab1
lda $eb2
sta $ab2
lda $eb3
sta $ab3
lda $eb4
sta $ab4
lda $eb5
sta $ab5
lda $eb6
sta $ab6
lda $eb7
sta $ab7
; x=16,y=30
lda $eb8
sta $ab8
lda $eb9
sta $ab9
lda $eba
sta $aba
lda $ebb
sta $abb
lda $ebc
sta $abc
lda $ebd
sta $abd
lda $ebe
sta $abe
lda $ebf
sta $abf
; x=24,y=30
lda $ec0
sta $ac0
lda $ec1
sta $ac1
lda $ec2
sta $ac2
lda $ec3
sta $ac3
lda $ec4
sta $ac4
lda $ec5
sta $ac5
lda $ec6
sta $ac6
lda $ec7
sta $ac7
; x=32,y=30
lda $ec8
sta $ac8
lda $ec9
sta $ac9
lda $eca
sta $aca
lda $ecb
sta $acb
lda $ecc
sta $acc
lda $ecd
sta $acd
lda $ece
sta $ace
lda $ecf
sta $acf
;= y = 28 $728 =========================
; x=0,y=28
lda $e28
sta $a28
lda $e29
sta $a29
lda $e2a
sta $a2a
lda $e2b
sta $a2b
lda $e2c
sta $a2c
lda $e2d
sta $a2d
lda $e2e
sta $a2e
lda $e2f
sta $a2f
; x=8,y=28
lda $e30
sta $a30
lda $e31
sta $a31
lda $e32
sta $a32
lda $e33
sta $a33
lda $e34
sta $a34
lda $e35
sta $a35
lda $e36
sta $a36
lda $e37
sta $a37
; x=16,y=28
lda $e38
sta $a38
lda $e39
sta $a39
lda $e3a
sta $a3a
lda $e3b
sta $a3b
lda $e3c
sta $a3c
lda $e3d
sta $a3d
lda $e3e
sta $a3e
lda $e3f
sta $a3f
; x=24,y=28
lda $e40
sta $a40
lda $e41
sta $a41
lda $e42
sta $a42
lda $e43
sta $a43
lda $e44
sta $a44
lda $e45
sta $a45
lda $e46
sta $a46
lda $e47
sta $a47
; x=32,y=28
lda $e48
sta $a48
lda $e49
sta $a49
lda $e4a
sta $a4a
lda $e4b
sta $a4b
lda $e4c
sta $a4c
lda $e4d
sta $a4d
lda $e4e
sta $a4e
lda $e4f
sta $a4f
;= y = 30 $7a8 =========================
; x=0,y=30
lda $ea8
sta $aa8
lda $ea9
sta $aa9
lda $eaa
sta $aaa
lda $eab
sta $aab
lda $eac
sta $aac
lda $ead
sta $aad
lda $eae
sta $aae
lda $eaf
sta $aaf
; x=8,y=30
lda $eb0
sta $ab0
lda $eb1
sta $ab1
lda $eb2
sta $ab2
lda $eb3
sta $ab3
lda $eb4
sta $ab4
lda $eb5
sta $ab5
lda $eb6
sta $ab6
lda $eb7
sta $ab7
; x=16,y=30
lda $eb8
sta $ab8
lda $eb9
sta $ab9
lda $eba
sta $aba
lda $ebb
sta $abb
lda $ebc
sta $abc
lda $ebd
sta $abd
lda $ebe
sta $abe
lda $ebf
sta $abf
; x=24,y=30
lda $ec0
sta $ac0
lda $ec1
sta $ac1
lda $ec2
sta $ac2
lda $ec3
sta $ac3
lda $ec4
sta $ac4
lda $ec5
sta $ac5
lda $ec6
sta $ac6
lda $ec7
sta $ac7
; x=32,y=30
lda $ec8
sta $ac8
lda $ec9
sta $ac9
lda $eca
sta $aca
lda $ecb
sta $acb
lda $ecc
sta $acc
lda $ecd
sta $acd
lda $ece
sta $ace
lda $ecf
sta $acf
rts ; 6

View File

@ -236,16 +236,17 @@ page1_loop: ; delay 115+(7 loop)+4 (bit)+4(extra)
; -2 display loop setup
; -6 jsr to do_nothing
; -10 check for keypress
; -2257 copy screen
; =============
; 4533
; 2276
jsr do_nothing ; 6
; lda #4 ; 4
; sta DRAW_PAGE ; 3
; jsr gr_copy_to_current ; 6+ 9292
lda #4 ; 2
sta DRAW_PAGE ; 3
jsr gr_copy_row22 ; 6+ 2246
;=========
;
; 2257
lda KEYPRESS ; 4
@ -263,16 +264,17 @@ all_done:
;=================================
; do nothing
;=================================
; and take 4533-6 = 4527 cycles to do it
; and take 2276-6 = 2260 cycles to do it
do_nothing:
; Try X=4 Y=174 cycles=4525 R2
; Try X=29 Y=15 cycles=2266 R4
nop ; 2
nop ; 2
ldy #174 ; 2
ldy #15 ; 2
loop1:
ldx #4 ; 2
ldx #29 ; 2
loop2:
dex ; 2
bne loop2 ; 2nt/3