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 19:21:15 +00:00
|
|
|
lastdsthi = $C8
|
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 19:21:15 +00:00
|
|
|
lda lastdsthi
|
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
|
2020-11-21 19:21:15 +00:00
|
|
|
lda zphgrrowhi, x
|
|
|
|
sta dst+1
|
|
|
|
sta lastdsthi
|
|
|
|
eor #$60
|
|
|
|
sta src+1
|
2020-11-20 23:17:06 +00:00
|
|
|
|
2020-11-21 18:44:59 +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
|
2020-11-21 19:03:03 +00:00
|
|
|
+COPY_WITH_MASK_IMM %10000001
|
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 %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
|
2020-11-21 19:03:03 +00:00
|
|
|
+COPY_WITH_MASK_IMM %10010110
|
2020-11-21 06:52:04 +00:00
|
|
|
; +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
|
2020-11-21 19:03:03 +00:00
|
|
|
+COPY_WITH_MASK_IMM %10000111
|
2020-11-21 06:52:04 +00:00
|
|
|
; +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
|
2020-11-21 18:28:54 +00:00
|
|
|
+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
|
2020-11-21 19:03:03 +00:00
|
|
|
+COPY_WITH_MASK_IMM %10011001
|
2020-11-21 06:52:04 +00:00
|
|
|
; +COPY_WITH_MASK_IMM %00000000
|
|
|
|
+RESET_HGR_HI
|
2020-11-20 23:17:06 +00:00
|
|
|
@block5
|
|
|
|
iny
|
2020-11-21 18:28:54 +00:00
|
|
|
+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
|
2020-11-21 19:03:03 +00:00
|
|
|
+COPY_WITH_MASK_IMM %10011111
|
2020-11-21 06:52:04 +00:00
|
|
|
; +COPY_WITH_MASK_IMM %00000000
|
|
|
|
+RESET_HGR_HI
|
2020-11-20 23:17:06 +00:00
|
|
|
@block6
|
|
|
|
iny
|
2020-11-21 18:28:54 +00:00
|
|
|
+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
|
2020-11-21 19:03:03 +00:00
|
|
|
+COPY_WITH_MASK_IMM %11000000
|
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 %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
|
2020-11-21 19:03:03 +00:00
|
|
|
+COPY_WITH_MASK_IMM %10110000
|
2020-11-21 06:52:04 +00:00
|
|
|
; +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
|
2020-11-21 19:03:03 +00:00
|
|
|
+COPY_WITH_MASK_IMM %11110000
|
2020-11-21 06:52:04 +00:00
|
|
|
; +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
|
2020-11-21 18:28:54 +00:00
|
|
|
+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
|
2020-11-21 19:03:03 +00:00
|
|
|
+COPY_WITH_MASK_IMM %11001100
|
2020-11-21 06:52:04 +00:00
|
|
|
; +COPY_WITH_MASK_IMM %00000000
|
|
|
|
+RESET_HGR_HI
|
2020-11-21 04:59:45 +00:00
|
|
|
@block5_aux
|
|
|
|
iny
|
2020-11-21 18:28:54 +00:00
|
|
|
+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
|
2020-11-21 19:03:03 +00:00
|
|
|
+COPY_WITH_MASK_IMM %11111100
|
2020-11-21 06:52:04 +00:00
|
|
|
; +COPY_WITH_MASK_IMM %00000000
|
|
|
|
+RESET_HGR_HI
|
2020-11-21 04:59:45 +00:00
|
|
|
@block6_aux
|
|
|
|
iny
|
2020-11-21 18:28:54 +00:00
|
|
|
+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
|
2020-11-21 18:44:59 +00:00
|
|
|
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
|