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-22 04:02:16 +00:00
|
|
|
y = $EF
|
2020-11-21 22:41:19 +00:00
|
|
|
src = $F0
|
|
|
|
dst = $F2
|
2020-11-21 23:26:19 +00:00
|
|
|
row = $FD
|
2020-11-21 22:41:19 +00:00
|
|
|
col = $FE
|
|
|
|
counter = $FF
|
2020-11-20 23:17:06 +00:00
|
|
|
|
2020-11-22 02:07:09 +00:00
|
|
|
!macro SET_HGR_HI_WITH_OFFSET .offset {
|
|
|
|
!if .offset > 0 {
|
|
|
|
adc #(.offset*4)
|
2020-11-21 06:52:04 +00:00
|
|
|
}
|
2020-11-22 00:02:58 +00:00
|
|
|
sta src+1
|
|
|
|
eor #$60
|
|
|
|
sta dst+1
|
2020-11-21 06:52:04 +00:00
|
|
|
}
|
|
|
|
|
2020-11-22 02:07:09 +00:00
|
|
|
!macro RESET_HGR_HI_WITH_OFFSET .offset {
|
2020-11-21 22:17:19 +00:00
|
|
|
txa
|
2020-11-22 02:07:09 +00:00
|
|
|
+SET_HGR_HI_WITH_OFFSET .offset
|
2020-11-21 06:52:04 +00:00
|
|
|
}
|
|
|
|
|
2020-11-22 02:07:09 +00:00
|
|
|
!macro COPY_WITH_MASK .copymask {
|
2020-11-21 06:52:04 +00:00
|
|
|
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
|
|
|
|
}
|
2020-11-22 02:07:09 +00:00
|
|
|
|
|
|
|
; note: .copymask is an immediate value, not an indexed array or a memory address
|
|
|
|
!macro COPY_WITH_OFFSET_AND_MASK .offset, .copymask {
|
|
|
|
+RESET_HGR_HI_WITH_OFFSET .offset
|
|
|
|
+COPY_WITH_MASK .copymask
|
2020-11-21 06:52:04 +00:00
|
|
|
}
|
|
|
|
|
2020-11-22 02:07:09 +00:00
|
|
|
!macro COPY_BYTE .offset {
|
|
|
|
+RESET_HGR_HI_WITH_OFFSET .offset
|
2020-11-21 06:52:04 +00:00
|
|
|
lda (src), y
|
|
|
|
sta (dst), y
|
2020-11-20 23:17:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
!source "src/fx/macros.a"
|
|
|
|
!source "src/fx/fx.dhgr.common.a"
|
|
|
|
|
2020-11-22 04:02:16 +00:00
|
|
|
lda #<switchtoaux
|
|
|
|
sta jmpa+1
|
|
|
|
sta jmpb+1
|
|
|
|
sta jmpc+1
|
|
|
|
sta jmpd+1
|
|
|
|
sta jmpe+1
|
|
|
|
sta jmpf+1
|
|
|
|
lda #>switchtoaux
|
|
|
|
sta jmpa+2
|
|
|
|
sta jmpb+2
|
|
|
|
sta jmpc+2
|
|
|
|
sta jmpd+2
|
|
|
|
sta jmpe+2
|
|
|
|
sta jmpf+2
|
|
|
|
lda #<switchtomain
|
|
|
|
sta jmpg+1
|
|
|
|
sta jmph+1
|
|
|
|
sta jmpi+1
|
|
|
|
sta jmpj+1
|
|
|
|
sta jmpk+1
|
|
|
|
sta jmpl+1
|
|
|
|
lda #>switchtomain
|
|
|
|
sta jmpg+2
|
|
|
|
sta jmph+2
|
|
|
|
sta jmpi+2
|
|
|
|
sta jmpj+2
|
|
|
|
sta jmpk+2
|
|
|
|
sta jmpl+2
|
|
|
|
|
|
|
|
+COPY_TO_AUXMEM $60, $08
|
2020-11-20 23:17:06 +00:00
|
|
|
|
|
|
|
lda #(40+24+7-1) ; columns + rows + blocks per row - 1
|
|
|
|
sta counter
|
|
|
|
|
|
|
|
lda #39
|
|
|
|
sta col
|
|
|
|
ColLoop
|
2020-11-21 22:17:19 +00:00
|
|
|
lda #23
|
|
|
|
sta row
|
2020-11-20 23:17:06 +00:00
|
|
|
ldy col
|
2020-11-22 04:02:16 +00:00
|
|
|
sty y
|
2020-11-20 23:17:06 +00:00
|
|
|
RowLoop
|
2020-11-21 22:17:19 +00:00
|
|
|
ldx row
|
2020-11-21 22:41:19 +00:00
|
|
|
lda hgrrowlo, x
|
2020-11-21 06:52:04 +00:00
|
|
|
sta src
|
|
|
|
sta dst
|
2020-11-21 22:41:19 +00:00
|
|
|
lda hgrrowhi, x
|
2020-11-22 02:07:09 +00:00
|
|
|
tax ; X = high byte of src throughout RowLoop
|
2020-11-22 04:02:16 +00:00
|
|
|
ldy y
|
|
|
|
cpy #40
|
|
|
|
bcc +
|
|
|
|
jmpa jmp switchtoaux
|
|
|
|
+
|
2020-11-22 02:07:09 +00:00
|
|
|
+SET_HGR_HI_WITH_OFFSET 3
|
|
|
|
+COPY_WITH_MASK %10000001
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 4, %10000001
|
2020-11-22 04:02:16 +00:00
|
|
|
block2
|
2020-11-20 23:17:06 +00:00
|
|
|
iny
|
2020-11-22 04:02:16 +00:00
|
|
|
cpy #40
|
|
|
|
bcc +
|
|
|
|
jmpb jmp switchtoaux
|
|
|
|
+
|
2020-11-22 02:07:09 +00:00
|
|
|
+COPY_WITH_OFFSET_AND_MASK 2, %10000110
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 3, %10000001
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 4, %10000001
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 5, %10010110
|
2020-11-22 04:02:16 +00:00
|
|
|
block3
|
2020-11-20 23:17:06 +00:00
|
|
|
iny
|
2020-11-22 04:02:16 +00:00
|
|
|
cpy #40
|
|
|
|
bcc +
|
|
|
|
jmpc jmp switchtoaux
|
|
|
|
+
|
2020-11-22 02:07:09 +00:00
|
|
|
+COPY_WITH_OFFSET_AND_MASK 2, %10000111
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 3, %10000111
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 4, %10000111
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 5, %10000111
|
2020-11-22 04:02:16 +00:00
|
|
|
block4
|
2020-11-20 23:17:06 +00:00
|
|
|
iny
|
2020-11-22 04:02:16 +00:00
|
|
|
cpy #40
|
|
|
|
bcc +
|
|
|
|
jmpd jmp switchtoaux
|
|
|
|
+
|
|
|
|
+LONG_BRANCH_IF_Y_IS_OFFSCREEN switchtoaux
|
2020-11-22 02:07:09 +00:00
|
|
|
+COPY_WITH_OFFSET_AND_MASK 1, %10011001
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 2, %10000001
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 3, %10011111
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 4, %10000111
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 5, %10000111
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 6, %10011001
|
2020-11-22 04:02:16 +00:00
|
|
|
block5
|
2020-11-20 23:17:06 +00:00
|
|
|
iny
|
2020-11-22 04:02:16 +00:00
|
|
|
cpy #40
|
|
|
|
bcc +
|
|
|
|
jmpe jmp switchtoaux
|
|
|
|
+
|
|
|
|
+LONG_BRANCH_IF_Y_IS_OFFSCREEN switchtoaux
|
2020-11-22 02:07:09 +00:00
|
|
|
+COPY_WITH_OFFSET_AND_MASK 1, %10011111
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 2, %10011111
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 3, %10011111
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 4, %10011111
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 5, %10011111
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 6, %10011111
|
2020-11-22 04:02:16 +00:00
|
|
|
block6
|
2020-11-20 23:17:06 +00:00
|
|
|
iny
|
2020-11-22 04:02:16 +00:00
|
|
|
cpy #40
|
|
|
|
bcc +
|
|
|
|
jmpf jmp switchtoaux
|
|
|
|
+
|
|
|
|
+LONG_BRANCH_IF_Y_IS_OFFSCREEN switchtoaux
|
2020-11-22 02:07:09 +00:00
|
|
|
+COPY_WITH_OFFSET_AND_MASK 0, %11100110
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 1, %10011111
|
|
|
|
+COPY_BYTE 2
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 3, %10011111
|
|
|
|
+COPY_BYTE 4
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 5, %10011111
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 6, %10011111
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 7, %11100110
|
2020-11-22 04:02:16 +00:00
|
|
|
block7
|
2020-11-20 23:17:06 +00:00
|
|
|
iny
|
2020-11-22 04:02:16 +00:00
|
|
|
cpy #40
|
|
|
|
bcs switchtoaux
|
2020-11-22 02:07:09 +00:00
|
|
|
+COPY_BYTE 0
|
|
|
|
+COPY_BYTE 1
|
|
|
|
+COPY_BYTE 2
|
|
|
|
+COPY_BYTE 3
|
|
|
|
+COPY_BYTE 4
|
|
|
|
+COPY_BYTE 5
|
|
|
|
+COPY_BYTE 6
|
|
|
|
+COPY_BYTE 7
|
2020-11-22 04:02:16 +00:00
|
|
|
switchtoaux
|
2020-11-20 23:17:06 +00:00
|
|
|
sta $C003
|
|
|
|
sta $C005
|
2020-11-22 04:02:16 +00:00
|
|
|
ldy y
|
|
|
|
cpy #40
|
|
|
|
bcc +
|
|
|
|
jmpg jmp switchtomain
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 3, %11000000
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 4, %11000000
|
|
|
|
block2_aux
|
|
|
|
iny
|
|
|
|
cpy #40
|
|
|
|
bcc +
|
|
|
|
jmph jmp switchtomain
|
|
|
|
+
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 2, %10110000
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 3, %11000000
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 4, %11000000
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 5, %10110000
|
|
|
|
block3_aux
|
|
|
|
iny
|
|
|
|
cpy #40
|
|
|
|
bcc +
|
|
|
|
jmpi jmp switchtomain
|
|
|
|
+
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 2, %11110000
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 3, %11110000
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 4, %11110000
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 5, %11110000
|
|
|
|
block4_aux
|
|
|
|
iny
|
|
|
|
cpy #40
|
|
|
|
bcc +
|
|
|
|
jmpj jmp switchtomain
|
|
|
|
+
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 1, %11001100
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 2, %11110000
|
2020-11-22 02:07:09 +00:00
|
|
|
+COPY_WITH_OFFSET_AND_MASK 3, %11111100
|
2020-11-22 04:02:16 +00:00
|
|
|
+COPY_WITH_OFFSET_AND_MASK 4, %11110000
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 5, %11110000
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 6, %11001100
|
|
|
|
block5_aux
|
|
|
|
iny
|
|
|
|
cpy #40
|
|
|
|
bcc +
|
|
|
|
jmpk jmp switchtomain
|
|
|
|
+
|
2020-11-22 02:07:09 +00:00
|
|
|
+COPY_WITH_OFFSET_AND_MASK 1, %11111100
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 2, %11111100
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 3, %11111100
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 4, %11111100
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 5, %11111100
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 6, %11111100
|
2020-11-22 04:02:16 +00:00
|
|
|
block6_aux
|
|
|
|
iny
|
|
|
|
cpy #40
|
|
|
|
bcc +
|
|
|
|
jmpl jmp switchtomain
|
|
|
|
+
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 0, %10110011
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 1, %11111100
|
|
|
|
+COPY_BYTE 2
|
2020-11-22 02:07:09 +00:00
|
|
|
+COPY_WITH_OFFSET_AND_MASK 3, %11111100
|
2020-11-22 04:02:16 +00:00
|
|
|
+COPY_BYTE 4
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 5, %11111100
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 6, %11111100
|
|
|
|
+COPY_WITH_OFFSET_AND_MASK 7, %10110011
|
|
|
|
block7_aux
|
|
|
|
cpy #40
|
|
|
|
bcs switchtomain
|
|
|
|
+COPY_BYTE 0
|
|
|
|
+COPY_BYTE 1
|
|
|
|
+COPY_BYTE 2
|
|
|
|
+COPY_BYTE 3
|
|
|
|
+COPY_BYTE 4
|
|
|
|
+COPY_BYTE 5
|
|
|
|
+COPY_BYTE 6
|
|
|
|
+COPY_BYTE 7
|
|
|
|
switchtomain
|
2020-11-20 23:17:06 +00:00
|
|
|
sta $C002
|
|
|
|
sta $C004
|
2020-11-22 04:02:16 +00:00
|
|
|
inc y
|
2020-11-21 22:17:19 +00:00
|
|
|
dec row
|
2020-11-20 23:17:06 +00:00
|
|
|
+LBPL RowLoop
|
|
|
|
dec col
|
2020-11-22 04:02:16 +00:00
|
|
|
bne +
|
|
|
|
clc
|
|
|
|
!byte $A9
|
|
|
|
- sec
|
|
|
|
lda #<block2
|
|
|
|
sta jmpa+1
|
|
|
|
lda #<block3
|
|
|
|
sta jmpb+1
|
|
|
|
lda #<block4
|
|
|
|
sta jmpc+1
|
|
|
|
lda #<block5
|
|
|
|
sta jmpd+1
|
|
|
|
lda #<block6
|
|
|
|
sta jmpe+1
|
|
|
|
lda #<block7
|
|
|
|
sta jmpf+1
|
|
|
|
lda #>block2
|
|
|
|
sta jmpa+2
|
|
|
|
!if >block3 != >block2 {
|
|
|
|
lda #>block3
|
|
|
|
}
|
|
|
|
sta jmpb+2
|
|
|
|
!if >block4 != >block3 {
|
|
|
|
lda #>block4
|
|
|
|
}
|
|
|
|
sta jmpc+2
|
|
|
|
!if >block5 != >block4 {
|
|
|
|
lda #>block5
|
|
|
|
}
|
|
|
|
sta jmpd+2
|
|
|
|
!if >block6 != >block5 {
|
|
|
|
lda #>block6
|
|
|
|
}
|
|
|
|
sta jmpe+2
|
|
|
|
!if >block7 != >block6 {
|
|
|
|
lda #>block7
|
|
|
|
}
|
|
|
|
sta jmpf+2
|
|
|
|
lda #<block2_aux
|
|
|
|
sta jmpg+1
|
|
|
|
lda #<block3_aux
|
|
|
|
sta jmph+1
|
|
|
|
lda #<block4_aux
|
|
|
|
sta jmpi+1
|
|
|
|
lda #<block5_aux
|
|
|
|
sta jmpj+1
|
|
|
|
lda #<block6_aux
|
|
|
|
sta jmpk+1
|
|
|
|
lda #<block7_aux
|
|
|
|
sta jmpl+1
|
|
|
|
lda #>block2_aux
|
|
|
|
sta jmpg+2
|
|
|
|
!if >block3_aux != block2_aux {
|
|
|
|
lda #>block3_aux
|
|
|
|
}
|
|
|
|
sta jmph+2
|
|
|
|
!if >block4_aux != block3_aux {
|
|
|
|
lda #>block4_aux
|
|
|
|
}
|
|
|
|
sta jmpi+2
|
|
|
|
!if >block5_aux != block4_aux {
|
|
|
|
lda #>block5_aux
|
|
|
|
}
|
|
|
|
sta jmpj+2
|
|
|
|
!if >block6_aux != block5_aux {
|
|
|
|
lda #>block6_aux
|
|
|
|
}
|
|
|
|
sta jmpk+2
|
|
|
|
!if >block7_aux != block6_aux {
|
|
|
|
lda #>block7_aux
|
|
|
|
}
|
|
|
|
sta jmpl+2
|
|
|
|
sta $C005
|
|
|
|
bcc -
|
|
|
|
sta $C004
|
|
|
|
+ lda $c000
|
|
|
|
bmi exit
|
2020-11-20 23:17:06 +00:00
|
|
|
dec counter
|
|
|
|
+LBNE ColLoop
|
2020-11-22 04:02:16 +00:00
|
|
|
exit rts
|
2020-11-20 23:17:06 +00:00
|
|
|
|
2020-11-21 22:41:19 +00:00
|
|
|
; next table can not cross a page boundary
|
|
|
|
!if <* > $E8 {
|
|
|
|
!align 255, 0
|
|
|
|
}
|
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
|
2020-11-21 22:41:19 +00:00
|
|
|
|
|
|
|
; next table can not cross a page boundary
|
|
|
|
!if <* > $E8 {
|
|
|
|
!align 255, 0
|
|
|
|
}
|
2020-11-21 05:35:20 +00:00
|
|
|
hgrrowhi
|
2020-11-21 23:37:44 +00:00
|
|
|
!byte $40,$40,$41,$41,$42,$42,$43,$43
|
|
|
|
!byte $40,$40,$41,$41,$42,$42,$43,$43
|
|
|
|
!byte $40,$40,$41,$41,$42,$42,$43,$43
|
2020-11-21 22:41:19 +00:00
|
|
|
|
2020-11-22 04:02:16 +00:00
|
|
|
!if * > $6800 {
|
2020-11-21 22:41:19 +00:00
|
|
|
!error "Code too large, adjust COPY_TO_AUXMEM macro"
|
|
|
|
}
|