mirror of
https://github.com/a2-4am/4cade.git
synced 2025-02-19 20:30:42 +00:00
shave some cycles
This commit is contained in:
parent
2da7d1c180
commit
1e0351206f
@ -5,10 +5,11 @@
|
|||||||
!to "build/FX/DHGR.SOFT.DIAG",plain
|
!to "build/FX/DHGR.SOFT.DIAG",plain
|
||||||
*=$6000
|
*=$6000
|
||||||
|
|
||||||
y = $9C
|
y = $6D
|
||||||
row = $9D
|
col = $6E
|
||||||
col = $9E
|
counter = $6F
|
||||||
counter = $9F
|
zphgrrowlo = $70
|
||||||
|
zphgrrowhi = $88
|
||||||
zpcopymasks1 = $A0
|
zpcopymasks1 = $A0
|
||||||
zpcopymasks2 = $A8
|
zpcopymasks2 = $A8
|
||||||
zpcopymasks3 = $B0
|
zpcopymasks3 = $B0
|
||||||
@ -21,11 +22,9 @@ zpcopymasks3_aux = $E0
|
|||||||
zpcopymasks4_aux = $E8
|
zpcopymasks4_aux = $E8
|
||||||
zpcopymasks5_aux = $F0
|
zpcopymasks5_aux = $F0
|
||||||
zpcopymasks6_aux = $F8
|
zpcopymasks6_aux = $F8
|
||||||
hgrlo = $BE00 ; [$C0 bytes, main memory only]
|
|
||||||
hgr1hi = $BF00 ; [$C0 bytes, main memory only]
|
|
||||||
|
|
||||||
!macro RESET_HGR_CALC_BY_7 {
|
!macro RESET_HGR_CALC_BY_7 {
|
||||||
lda hgr1hi, x
|
lda zphgrrowhi, x
|
||||||
sta $27
|
sta $27
|
||||||
eor #$60
|
eor #$60
|
||||||
sta $3d
|
sta $3d
|
||||||
@ -47,43 +46,34 @@ hgr1hi = $BF00 ; [$C0 bytes, main memory only]
|
|||||||
!source "src/fx/macros.a"
|
!source "src/fx/macros.a"
|
||||||
!source "src/fx/fx.dhgr.common.a"
|
!source "src/fx/fx.dhgr.common.a"
|
||||||
|
|
||||||
ldx #$60
|
+COPY_SELF_TO_AUXMEM
|
||||||
- lda copymasks1-1, x
|
|
||||||
sta zpcopymasks1-1, x
|
ldx #$90
|
||||||
|
- lda hgrrowlo-1, x
|
||||||
|
sta zphgrrowlo-1, x
|
||||||
dex
|
dex
|
||||||
bne -
|
bne -
|
||||||
|
|
||||||
+BUILD_HGR_LOOKUP_TABLES_X_IS_ALREADY_0 hgrlo, hgr1hi
|
|
||||||
|
|
||||||
+COPY_SELF_TO_AUXMEM
|
|
||||||
|
|
||||||
lda #(40+24+7-1) ; columns + rows + blocks per row - 1
|
lda #(40+24+7-1) ; columns + rows + blocks per row - 1
|
||||||
sta counter
|
sta counter
|
||||||
|
|
||||||
lda #39
|
lda #39
|
||||||
sta col
|
sta col
|
||||||
ColLoop
|
ColLoop
|
||||||
lda #23
|
ldx #23
|
||||||
sta row
|
|
||||||
ldy col
|
ldy col
|
||||||
sty y
|
sty y
|
||||||
RowLoop
|
RowLoop
|
||||||
lda row
|
lda zphgrrowlo, x
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
tax
|
|
||||||
lda hgrlo, x
|
|
||||||
sta $26
|
sta $26
|
||||||
sta $3c
|
sta $3c
|
||||||
lda hgr1hi, x
|
lda zphgrrowhi, x
|
||||||
sta $27
|
sta $27
|
||||||
eor #$60
|
eor #$60
|
||||||
sta $3d
|
sta $3d
|
||||||
|
|
||||||
ldy y
|
ldy y
|
||||||
+IS_Y_OFFSCREEN
|
+BRANCH_IF_Y_IS_OFFSCREEN @block2
|
||||||
+LBCS @block2
|
|
||||||
|
|
||||||
!for i, 0, 7 {
|
!for i, 0, 7 {
|
||||||
+COPY_BIT_BY $3c, $26, zpcopymasks1+i
|
+COPY_BIT_BY $3c, $26, zpcopymasks1+i
|
||||||
@ -94,8 +84,7 @@ RowLoop
|
|||||||
+RESET_HGR_CALC_BY_7
|
+RESET_HGR_CALC_BY_7
|
||||||
@block2
|
@block2
|
||||||
iny
|
iny
|
||||||
+IS_Y_OFFSCREEN
|
+BRANCH_IF_Y_IS_OFFSCREEN @block3
|
||||||
+LBCS @block3
|
|
||||||
|
|
||||||
!for i, 0, 7 {
|
!for i, 0, 7 {
|
||||||
+COPY_BIT_BY $3c, $26, zpcopymasks2+i
|
+COPY_BIT_BY $3c, $26, zpcopymasks2+i
|
||||||
@ -106,8 +95,7 @@ RowLoop
|
|||||||
+RESET_HGR_CALC_BY_7
|
+RESET_HGR_CALC_BY_7
|
||||||
@block3
|
@block3
|
||||||
iny
|
iny
|
||||||
+IS_Y_OFFSCREEN
|
+BRANCH_IF_Y_IS_OFFSCREEN @block4
|
||||||
+LBCS @block4
|
|
||||||
|
|
||||||
!for i, 0, 7 {
|
!for i, 0, 7 {
|
||||||
+COPY_BIT_BY $3c, $26, zpcopymasks3+i
|
+COPY_BIT_BY $3c, $26, zpcopymasks3+i
|
||||||
@ -118,8 +106,7 @@ RowLoop
|
|||||||
+RESET_HGR_CALC_BY_7
|
+RESET_HGR_CALC_BY_7
|
||||||
@block4
|
@block4
|
||||||
iny
|
iny
|
||||||
+IS_Y_OFFSCREEN
|
+BRANCH_IF_Y_IS_OFFSCREEN @block5
|
||||||
+LBCS @block5
|
|
||||||
|
|
||||||
!for i, 0, 7 {
|
!for i, 0, 7 {
|
||||||
+COPY_BIT_BY $3c, $26, zpcopymasks4+i
|
+COPY_BIT_BY $3c, $26, zpcopymasks4+i
|
||||||
@ -130,8 +117,7 @@ RowLoop
|
|||||||
+RESET_HGR_CALC_BY_7
|
+RESET_HGR_CALC_BY_7
|
||||||
@block5
|
@block5
|
||||||
iny
|
iny
|
||||||
+IS_Y_OFFSCREEN
|
+BRANCH_IF_Y_IS_OFFSCREEN @block6
|
||||||
+LBCS @block6
|
|
||||||
|
|
||||||
!for i, 0, 7 {
|
!for i, 0, 7 {
|
||||||
+COPY_BIT_BY $3c, $26, zpcopymasks5+i
|
+COPY_BIT_BY $3c, $26, zpcopymasks5+i
|
||||||
@ -142,8 +128,7 @@ RowLoop
|
|||||||
+RESET_HGR_CALC_BY_7
|
+RESET_HGR_CALC_BY_7
|
||||||
@block6
|
@block6
|
||||||
iny
|
iny
|
||||||
+IS_Y_OFFSCREEN
|
+BRANCH_IF_Y_IS_OFFSCREEN @block7
|
||||||
+LBCS @block7
|
|
||||||
|
|
||||||
!for i, 0, 7 {
|
!for i, 0, 7 {
|
||||||
+COPY_BIT_BY $3c, $26, zpcopymasks6+i
|
+COPY_BIT_BY $3c, $26, zpcopymasks6+i
|
||||||
@ -154,8 +139,7 @@ RowLoop
|
|||||||
+RESET_HGR_CALC_BY_7
|
+RESET_HGR_CALC_BY_7
|
||||||
@block7
|
@block7
|
||||||
iny
|
iny
|
||||||
+IS_Y_OFFSCREEN
|
+BRANCH_IF_Y_IS_OFFSCREEN @nextrow
|
||||||
+LBCS @nextrow
|
|
||||||
|
|
||||||
!for i, 0, 7 {
|
!for i, 0, 7 {
|
||||||
lda ($3c),y
|
lda ($3c),y
|
||||||
@ -170,8 +154,7 @@ RowLoop
|
|||||||
sta $C005
|
sta $C005
|
||||||
|
|
||||||
ldy y
|
ldy y
|
||||||
+IS_Y_OFFSCREEN
|
+BRANCH_IF_Y_IS_OFFSCREEN @block2_aux
|
||||||
+LBCS @block2_aux
|
|
||||||
|
|
||||||
!for i, 0, 7 {
|
!for i, 0, 7 {
|
||||||
+COPY_BIT_BY $3c, $26, zpcopymasks1_aux+i
|
+COPY_BIT_BY $3c, $26, zpcopymasks1_aux+i
|
||||||
@ -182,8 +165,7 @@ RowLoop
|
|||||||
+RESET_HGR_CALC_BY_7
|
+RESET_HGR_CALC_BY_7
|
||||||
@block2_aux
|
@block2_aux
|
||||||
iny
|
iny
|
||||||
+IS_Y_OFFSCREEN
|
+BRANCH_IF_Y_IS_OFFSCREEN @block3_aux
|
||||||
+LBCS @block3_aux
|
|
||||||
|
|
||||||
!for i, 0, 7 {
|
!for i, 0, 7 {
|
||||||
+COPY_BIT_BY $3c, $26, zpcopymasks2_aux+i
|
+COPY_BIT_BY $3c, $26, zpcopymasks2_aux+i
|
||||||
@ -194,8 +176,7 @@ RowLoop
|
|||||||
+RESET_HGR_CALC_BY_7
|
+RESET_HGR_CALC_BY_7
|
||||||
@block3_aux
|
@block3_aux
|
||||||
iny
|
iny
|
||||||
+IS_Y_OFFSCREEN
|
+BRANCH_IF_Y_IS_OFFSCREEN @block4_aux
|
||||||
+LBCS @block4_aux
|
|
||||||
|
|
||||||
!for i, 0, 7 {
|
!for i, 0, 7 {
|
||||||
+COPY_BIT_BY $3c, $26, zpcopymasks3_aux+i
|
+COPY_BIT_BY $3c, $26, zpcopymasks3_aux+i
|
||||||
@ -206,8 +187,7 @@ RowLoop
|
|||||||
+RESET_HGR_CALC_BY_7
|
+RESET_HGR_CALC_BY_7
|
||||||
@block4_aux
|
@block4_aux
|
||||||
iny
|
iny
|
||||||
+IS_Y_OFFSCREEN
|
+BRANCH_IF_Y_IS_OFFSCREEN @block5_aux
|
||||||
+LBCS @block5_aux
|
|
||||||
|
|
||||||
!for i, 0, 7 {
|
!for i, 0, 7 {
|
||||||
+COPY_BIT_BY $3c, $26, zpcopymasks4_aux+i
|
+COPY_BIT_BY $3c, $26, zpcopymasks4_aux+i
|
||||||
@ -218,8 +198,7 @@ RowLoop
|
|||||||
+RESET_HGR_CALC_BY_7
|
+RESET_HGR_CALC_BY_7
|
||||||
@block5_aux
|
@block5_aux
|
||||||
iny
|
iny
|
||||||
+IS_Y_OFFSCREEN
|
+BRANCH_IF_Y_IS_OFFSCREEN @block6_aux
|
||||||
+LBCS @block6_aux
|
|
||||||
|
|
||||||
!for i, 0, 7 {
|
!for i, 0, 7 {
|
||||||
+COPY_BIT_BY $3c, $26, zpcopymasks5_aux+i
|
+COPY_BIT_BY $3c, $26, zpcopymasks5_aux+i
|
||||||
@ -230,8 +209,7 @@ RowLoop
|
|||||||
+RESET_HGR_CALC_BY_7
|
+RESET_HGR_CALC_BY_7
|
||||||
@block6_aux
|
@block6_aux
|
||||||
iny
|
iny
|
||||||
+IS_Y_OFFSCREEN
|
+BRANCH_IF_Y_IS_OFFSCREEN @block7_aux
|
||||||
+LBCS @block7_aux
|
|
||||||
|
|
||||||
!for i, 0, 7 {
|
!for i, 0, 7 {
|
||||||
+COPY_BIT_BY $3c, $26, zpcopymasks6_aux+i
|
+COPY_BIT_BY $3c, $26, zpcopymasks6_aux+i
|
||||||
@ -242,8 +220,7 @@ RowLoop
|
|||||||
+RESET_HGR_CALC_BY_7
|
+RESET_HGR_CALC_BY_7
|
||||||
@block7_aux
|
@block7_aux
|
||||||
iny
|
iny
|
||||||
+IS_Y_OFFSCREEN
|
+BRANCH_IF_Y_IS_OFFSCREEN @nextrow_aux
|
||||||
+LBCS @nextrow_aux
|
|
||||||
|
|
||||||
!for i, 0, 7 {
|
!for i, 0, 7 {
|
||||||
lda ($3c),y
|
lda ($3c),y
|
||||||
@ -259,7 +236,7 @@ RowLoop
|
|||||||
ldy y
|
ldy y
|
||||||
iny
|
iny
|
||||||
sty y
|
sty y
|
||||||
dec row
|
dex
|
||||||
+LBPL RowLoop
|
+LBPL RowLoop
|
||||||
lda $c000
|
lda $c000
|
||||||
bmi @exit
|
bmi @exit
|
||||||
@ -268,6 +245,14 @@ RowLoop
|
|||||||
+LBNE ColLoop
|
+LBNE ColLoop
|
||||||
@exit rts
|
@exit rts
|
||||||
|
|
||||||
|
hgrrowlo
|
||||||
|
!byte $00,$80,$00,$80,$00,$80,$00,$80
|
||||||
|
!byte $28,$A8,$28,$A8,$28,$A8,$28,$A8
|
||||||
|
!byte $50,$D0,$50,$D0,$50,$D0,$50,$D0
|
||||||
|
hgrrowhi
|
||||||
|
!byte $20,$20,$21,$21,$22,$22,$23,$23
|
||||||
|
!byte $20,$20,$21,$21,$22,$22,$23,$23
|
||||||
|
!byte $20,$20,$21,$21,$22,$22,$23,$23
|
||||||
;1GFEDCBA ->
|
;1GFEDCBA ->
|
||||||
;1GGFFEED (main) +
|
;1GGFFEED (main) +
|
||||||
;1DCCBBAA (aux)
|
;1DCCBBAA (aux)
|
||||||
|
@ -131,7 +131,7 @@
|
|||||||
sta CopyMaskAddr+1
|
sta CopyMaskAddr+1
|
||||||
}
|
}
|
||||||
|
|
||||||
; must set N flag based on Y immediately before using this macro
|
; must set N flag based on Y immediately before using these macros
|
||||||
; e.g. LDY, INY, DEY, TYA
|
; e.g. LDY, INY, DEY, TYA
|
||||||
!macro IS_Y_OFFSCREEN {
|
!macro IS_Y_OFFSCREEN {
|
||||||
bpl +
|
bpl +
|
||||||
@ -140,6 +140,12 @@
|
|||||||
+ cpy #40
|
+ cpy #40
|
||||||
++
|
++
|
||||||
}
|
}
|
||||||
|
!macro BRANCH_IF_Y_IS_OFFSCREEN .target {
|
||||||
|
bpl +
|
||||||
|
- jmp .target
|
||||||
|
+ cpy #40
|
||||||
|
bcs -
|
||||||
|
}
|
||||||
|
|
||||||
_FX_MACROS_=*
|
_FX_MACROS_=*
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user