4cade/src/fx/fx.dhgr.soft.diagonal.a

283 lines
8.6 KiB
Plaintext
Raw Normal View History

2020-11-20 23:17:06 +00:00
;license:MIT
;(c) 2019-2020 by 4am
;
!cpu 6502
!to "build/FX/DHGR.SOFT.DIAG",plain
*=$6000
2020-11-21 06:52:04 +00:00
src = $C9
dst = $CB
y = $CD
col = $CE
counter = $CF
zphgrrowlo = $D0
zphgrrowhi = $E8
2020-11-20 23:17:06 +00:00
2020-11-21 06:52:04 +00:00
!macro INC_HGR_HI_BY .blocks {
lda dst+1
adc #(.blocks*4)
sta dst+1
eor #$60
sta src+1
}
!macro INC_HGR_HI {
+INC_HGR_HI_BY 1
}
!macro RESET_HGR_HI {
2020-11-21 05:35:20 +00:00
lda zphgrrowhi, x
2020-11-21 06:52:04 +00:00
sta dst+1
2020-11-20 23:17:06 +00:00
eor #$60
2020-11-21 06:52:04 +00:00
sta src+1
}
; note: .copymask is an immediate value, not an indexed array or a memory address
!macro COPY_WITH_MASK_IMM .copymask {
lda (src), y
eor (dst), y ; merge source and destination bits
and #.copymask ; isolate the bits to replace, zero the rest
eor (dst), y ; unmerge source and destination bits, leaves 'to keep' destination bits intact
sta (dst), y ; write the result
}
!macro COPY_WITH_MASK_IMM_AND_INC .copymask {
+COPY_WITH_MASK_IMM .copymask
+INC_HGR_HI
}
!macro COPY_BYTE {
lda (src), y
sta (dst), y
2020-11-20 23:17:06 +00:00
}
2020-11-21 06:52:04 +00:00
!macro COPY_BYTE_AND_INC {
+COPY_BYTE
+INC_HGR_HI
2020-11-21 04:33:59 +00:00
}
2020-11-20 23:17:06 +00:00
!source "src/fx/macros.a"
!source "src/fx/fx.dhgr.common.a"
2020-11-21 05:35:20 +00:00
+COPY_SELF_TO_AUXMEM
2020-11-21 06:52:04 +00:00
ldx #$30
2020-11-21 05:35:20 +00:00
- lda hgrrowlo-1, x
sta zphgrrowlo-1, x
2020-11-20 23:17:06 +00:00
dex
bne -
lda #(40+24+7-1) ; columns + rows + blocks per row - 1
sta counter
lda #39
sta col
ColLoop
2020-11-21 05:35:20 +00:00
ldx #23
2020-11-20 23:17:06 +00:00
ldy col
sty y
RowLoop
2020-11-21 05:35:20 +00:00
lda zphgrrowlo, x
2020-11-21 06:52:04 +00:00
sta src
sta dst
+RESET_HGR_HI
2020-11-20 23:17:06 +00:00
ldy y
2020-11-21 05:35:20 +00:00
+BRANCH_IF_Y_IS_OFFSCREEN @block2
2020-11-21 06:52:04 +00:00
; +COPY_WITH_MASK_IMM_AND_INC %00000000
; +COPY_WITH_MASK_IMM_AND_INC %00000000
; +COPY_WITH_MASK_IMM_AND_INC %00000000
+INC_HGR_HI_BY 3
+COPY_WITH_MASK_IMM_AND_INC %10000001
+COPY_WITH_MASK_IMM_AND_INC %10000001
; +COPY_WITH_MASK_IMM_AND_INC %00000000
; +COPY_WITH_MASK_IMM_AND_INC %00000000
; +COPY_WITH_MASK_IMM %00000000
+RESET_HGR_HI
2020-11-20 23:17:06 +00:00
@block2
iny
2020-11-21 05:35:20 +00:00
+BRANCH_IF_Y_IS_OFFSCREEN @block3
2020-11-21 06:52:04 +00:00
; +COPY_WITH_MASK_IMM_AND_INC %00000000
; +COPY_WITH_MASK_IMM_AND_INC %00000000
+INC_HGR_HI_BY 2
+COPY_WITH_MASK_IMM_AND_INC %10000110
+COPY_WITH_MASK_IMM_AND_INC %10000001
+COPY_WITH_MASK_IMM_AND_INC %10000001
+COPY_WITH_MASK_IMM_AND_INC %10010110
; +COPY_WITH_MASK_IMM_AND_INC %00000000
; +COPY_WITH_MASK_IMM %00000000
+RESET_HGR_HI
2020-11-20 23:17:06 +00:00
@block3
iny
2020-11-21 05:35:20 +00:00
+BRANCH_IF_Y_IS_OFFSCREEN @block4
2020-11-21 06:52:04 +00:00
; +COPY_WITH_MASK_IMM_AND_INC %00000000
; +COPY_WITH_MASK_IMM_AND_INC %00000000
+INC_HGR_HI_BY 2
+COPY_WITH_MASK_IMM_AND_INC %10000111
+COPY_WITH_MASK_IMM_AND_INC %10000111
+COPY_WITH_MASK_IMM_AND_INC %10000111
+COPY_WITH_MASK_IMM_AND_INC %10000111
; +COPY_WITH_MASK_IMM_AND_INC %10000000
; +COPY_WITH_MASK_IMM %10000000
+RESET_HGR_HI
2020-11-20 23:17:06 +00:00
@block4
iny
+LONG_BRANCH_IF_Y_IS_OFFSCREEN @block5
2020-11-21 06:52:04 +00:00
; +COPY_WITH_MASK_IMM_AND_INC %00000000
+INC_HGR_HI
+COPY_WITH_MASK_IMM_AND_INC %10011001
+COPY_WITH_MASK_IMM_AND_INC %10000001
+COPY_WITH_MASK_IMM_AND_INC %10011111
+COPY_WITH_MASK_IMM_AND_INC %10000111
+COPY_WITH_MASK_IMM_AND_INC %10000111
+COPY_WITH_MASK_IMM_AND_INC %10011001
; +COPY_WITH_MASK_IMM %00000000
+RESET_HGR_HI
2020-11-20 23:17:06 +00:00
@block5
iny
+LONG_BRANCH_IF_Y_IS_OFFSCREEN @block6
2020-11-21 06:52:04 +00:00
; +COPY_WITH_MASK_IMM_AND_INC %00000000
+INC_HGR_HI
+COPY_WITH_MASK_IMM_AND_INC %10011111
+COPY_WITH_MASK_IMM_AND_INC %10011111
+COPY_WITH_MASK_IMM_AND_INC %10011111
+COPY_WITH_MASK_IMM_AND_INC %10011111
+COPY_WITH_MASK_IMM_AND_INC %10011111
+COPY_WITH_MASK_IMM_AND_INC %10011111
; +COPY_WITH_MASK_IMM %00000000
+RESET_HGR_HI
2020-11-20 23:17:06 +00:00
@block6
iny
+LONG_BRANCH_IF_Y_IS_OFFSCREEN @block7
2020-11-21 06:52:04 +00:00
+COPY_WITH_MASK_IMM_AND_INC %11100110
+COPY_WITH_MASK_IMM_AND_INC %10011111
+COPY_WITH_MASK_IMM_AND_INC %11111111
+COPY_WITH_MASK_IMM_AND_INC %10011111
+COPY_WITH_MASK_IMM_AND_INC %11111111
+COPY_WITH_MASK_IMM_AND_INC %10011111
+COPY_WITH_MASK_IMM_AND_INC %10011111
+COPY_WITH_MASK_IMM %11100110
+RESET_HGR_HI
2020-11-20 23:17:06 +00:00
@block7
iny
2020-11-21 06:52:04 +00:00
+BRANCH_IF_Y_IS_OFFSCREEN @switchtoaux
+COPY_BYTE_AND_INC
+COPY_BYTE_AND_INC
+COPY_BYTE_AND_INC
+COPY_BYTE_AND_INC
+COPY_BYTE_AND_INC
+COPY_BYTE_AND_INC
+COPY_BYTE_AND_INC
+COPY_BYTE
+RESET_HGR_HI
@switchtoaux
2020-11-20 23:17:06 +00:00
sta $C003
sta $C005
2020-11-21 04:59:45 +00:00
ldy y
2020-11-21 05:35:20 +00:00
+BRANCH_IF_Y_IS_OFFSCREEN @block2_aux
2020-11-21 06:52:04 +00:00
; +COPY_WITH_MASK_IMM_AND_INC %00000000
; +COPY_WITH_MASK_IMM_AND_INC %00000000
; +COPY_WITH_MASK_IMM_AND_INC %00000000
+INC_HGR_HI_BY 3
+COPY_WITH_MASK_IMM_AND_INC %11000000
+COPY_WITH_MASK_IMM_AND_INC %11000000
; +COPY_WITH_MASK_IMM_AND_INC %00000000
; +COPY_WITH_MASK_IMM_AND_INC %00000000
; +COPY_WITH_MASK_IMM %00000000
+RESET_HGR_HI
2020-11-21 04:59:45 +00:00
@block2_aux
iny
2020-11-21 05:35:20 +00:00
+BRANCH_IF_Y_IS_OFFSCREEN @block3_aux
2020-11-21 06:52:04 +00:00
; +COPY_WITH_MASK_IMM_AND_INC %00000000
; +COPY_WITH_MASK_IMM_AND_INC %00000000
+INC_HGR_HI_BY 2
+COPY_WITH_MASK_IMM_AND_INC %10110000
+COPY_WITH_MASK_IMM_AND_INC %11000000
+COPY_WITH_MASK_IMM_AND_INC %11000000
+COPY_WITH_MASK_IMM_AND_INC %10110000
; +COPY_WITH_MASK_IMM_AND_INC %00000000
; +COPY_WITH_MASK_IMM %00000000
+RESET_HGR_HI
2020-11-21 04:59:45 +00:00
@block3_aux
iny
2020-11-21 05:35:20 +00:00
+BRANCH_IF_Y_IS_OFFSCREEN @block4_aux
2020-11-21 06:52:04 +00:00
; +COPY_WITH_MASK_IMM_AND_INC %00000000
; +COPY_WITH_MASK_IMM_AND_INC %00000000
+INC_HGR_HI_BY 2
+COPY_WITH_MASK_IMM_AND_INC %11110000
+COPY_WITH_MASK_IMM_AND_INC %11110000
+COPY_WITH_MASK_IMM_AND_INC %11110000
+COPY_WITH_MASK_IMM_AND_INC %11110000
; +COPY_WITH_MASK_IMM_AND_INC %00000000
; +COPY_WITH_MASK_IMM %00000000
+RESET_HGR_HI
2020-11-21 04:59:45 +00:00
@block4_aux
iny
+LONG_BRANCH_IF_Y_IS_OFFSCREEN @block5_aux
2020-11-21 06:52:04 +00:00
; +COPY_WITH_MASK_IMM_AND_INC %00000000
+INC_HGR_HI
+COPY_WITH_MASK_IMM_AND_INC %11001100
+COPY_WITH_MASK_IMM_AND_INC %11110000
+COPY_WITH_MASK_IMM_AND_INC %11111100
+COPY_WITH_MASK_IMM_AND_INC %11110000
+COPY_WITH_MASK_IMM_AND_INC %11110000
+COPY_WITH_MASK_IMM_AND_INC %11001100
; +COPY_WITH_MASK_IMM %00000000
+RESET_HGR_HI
2020-11-21 04:59:45 +00:00
@block5_aux
iny
+LONG_BRANCH_IF_Y_IS_OFFSCREEN @block6_aux
2020-11-21 06:52:04 +00:00
; +COPY_WITH_MASK_IMM_AND_INC %00000000
+INC_HGR_HI
+COPY_WITH_MASK_IMM_AND_INC %11111100
+COPY_WITH_MASK_IMM_AND_INC %11111100
+COPY_WITH_MASK_IMM_AND_INC %11111100
+COPY_WITH_MASK_IMM_AND_INC %11111100
+COPY_WITH_MASK_IMM_AND_INC %11111100
+COPY_WITH_MASK_IMM_AND_INC %11111100
; +COPY_WITH_MASK_IMM %00000000
+RESET_HGR_HI
2020-11-21 04:59:45 +00:00
@block6_aux
iny
+LONG_BRANCH_IF_Y_IS_OFFSCREEN @block7_aux
2020-11-21 06:52:04 +00:00
+COPY_WITH_MASK_IMM_AND_INC %10110011
+COPY_WITH_MASK_IMM_AND_INC %11111100
+COPY_WITH_MASK_IMM_AND_INC %11111111
+COPY_WITH_MASK_IMM_AND_INC %11111100
+COPY_WITH_MASK_IMM_AND_INC %11111111
+COPY_WITH_MASK_IMM_AND_INC %11111100
+COPY_WITH_MASK_IMM_AND_INC %11111100
+COPY_WITH_MASK_IMM %10110011
+RESET_HGR_HI
2020-11-21 04:59:45 +00:00
@block7_aux
iny
2020-11-21 06:52:04 +00:00
+BRANCH_IF_Y_IS_OFFSCREEN @switchtomain
+COPY_BYTE_AND_INC
+COPY_BYTE_AND_INC
+COPY_BYTE_AND_INC
+COPY_BYTE_AND_INC
+COPY_BYTE_AND_INC
+COPY_BYTE_AND_INC
+COPY_BYTE_AND_INC
+COPY_BYTE
@switchtomain
2020-11-20 23:17:06 +00:00
sta $C002
sta $C004
inc y
2020-11-21 05:35:20 +00:00
dex
2020-11-20 23:17:06 +00:00
+LBPL RowLoop
lda $c000
bmi @exit
dec col
dec counter
+LBNE ColLoop
@exit rts
2020-11-21 05:35:20 +00:00
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