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 04:59:45 +00:00
|
|
|
y = $9C
|
|
|
|
row = $9D
|
|
|
|
col = $9E
|
|
|
|
counter = $9F
|
|
|
|
zpcopymasks1 = $A0
|
|
|
|
zpcopymasks2 = $A8
|
|
|
|
zpcopymasks3 = $B0
|
|
|
|
zpcopymasks4 = $B8
|
|
|
|
zpcopymasks5 = $C0
|
|
|
|
zpcopymasks6 = $C8
|
|
|
|
zpcopymasks1_aux = $D0
|
|
|
|
zpcopymasks2_aux = $D8
|
|
|
|
zpcopymasks3_aux = $E0
|
|
|
|
zpcopymasks4_aux = $E8
|
|
|
|
zpcopymasks5_aux = $F0
|
|
|
|
zpcopymasks6_aux = $F8
|
2020-11-21 05:11:40 +00:00
|
|
|
hgrlo = $BE00 ; [$C0 bytes, main memory only]
|
|
|
|
hgr1hi = $BF00 ; [$C0 bytes, main memory only]
|
2020-11-20 23:17:06 +00:00
|
|
|
|
|
|
|
!macro RESET_HGR_CALC_BY_7 {
|
2020-11-21 05:11:40 +00:00
|
|
|
lda hgr1hi, x
|
2020-11-20 23:17:06 +00:00
|
|
|
sta $27
|
|
|
|
eor #$60
|
|
|
|
sta $3d
|
|
|
|
}
|
|
|
|
|
2020-11-21 04:59:45 +00:00
|
|
|
; .copymask must be in zero page and must be the exact address
|
|
|
|
; (it is not indexed by X)
|
2020-11-21 04:33:59 +00:00
|
|
|
!macro COPY_BIT_BY .src1, .dest1, .copymask {
|
2020-11-21 04:59:45 +00:00
|
|
|
lda <.copymask
|
|
|
|
beq +
|
2020-11-21 04:33:59 +00:00
|
|
|
lda (.src1),y
|
|
|
|
eor (.dest1),y ; merge source and destination bits
|
2020-11-21 04:59:45 +00:00
|
|
|
and <.copymask ; isolate the bits to replace, zero the rest
|
2020-11-21 04:33:59 +00:00
|
|
|
eor (.dest1),y ; unmerge source and destination bits, leaves 'to keep' destination bits intact
|
|
|
|
sta (.dest1),y ; write the result
|
2020-11-21 04:59:45 +00:00
|
|
|
+
|
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 04:59:45 +00:00
|
|
|
ldx #$60
|
|
|
|
- lda copymasks1-1, x
|
|
|
|
sta zpcopymasks1-1, x
|
2020-11-20 23:17:06 +00:00
|
|
|
dex
|
|
|
|
bne -
|
|
|
|
|
|
|
|
+BUILD_HGR_LOOKUP_TABLES_X_IS_ALREADY_0 hgrlo, hgr1hi
|
|
|
|
|
2020-11-21 05:11:40 +00:00
|
|
|
+COPY_SELF_TO_AUXMEM
|
|
|
|
|
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
|
|
|
|
lda #23
|
|
|
|
sta row
|
|
|
|
ldy col
|
|
|
|
sty y
|
|
|
|
RowLoop
|
|
|
|
lda row
|
|
|
|
asl
|
|
|
|
asl
|
|
|
|
asl
|
|
|
|
tax
|
|
|
|
lda hgrlo, x
|
|
|
|
sta $26
|
|
|
|
sta $3c
|
|
|
|
lda hgr1hi, x
|
|
|
|
sta $27
|
|
|
|
eor #$60
|
|
|
|
sta $3d
|
|
|
|
|
|
|
|
ldy y
|
|
|
|
+IS_Y_OFFSCREEN
|
|
|
|
+LBCS @block2
|
|
|
|
|
|
|
|
!for i, 0, 7 {
|
2020-11-21 04:59:45 +00:00
|
|
|
+COPY_BIT_BY $3c, $26, zpcopymasks1+i
|
2020-11-20 23:17:06 +00:00
|
|
|
!if i < 7 {
|
|
|
|
+HGR_INC_WITHIN_BLOCK
|
|
|
|
}
|
|
|
|
}
|
|
|
|
+RESET_HGR_CALC_BY_7
|
|
|
|
@block2
|
|
|
|
iny
|
|
|
|
+IS_Y_OFFSCREEN
|
|
|
|
+LBCS @block3
|
|
|
|
|
|
|
|
!for i, 0, 7 {
|
2020-11-21 04:59:45 +00:00
|
|
|
+COPY_BIT_BY $3c, $26, zpcopymasks2+i
|
2020-11-20 23:17:06 +00:00
|
|
|
!if i < 7 {
|
|
|
|
+HGR_INC_WITHIN_BLOCK
|
|
|
|
}
|
|
|
|
}
|
|
|
|
+RESET_HGR_CALC_BY_7
|
|
|
|
@block3
|
|
|
|
iny
|
|
|
|
+IS_Y_OFFSCREEN
|
|
|
|
+LBCS @block4
|
|
|
|
|
|
|
|
!for i, 0, 7 {
|
2020-11-21 04:59:45 +00:00
|
|
|
+COPY_BIT_BY $3c, $26, zpcopymasks3+i
|
2020-11-20 23:17:06 +00:00
|
|
|
!if i < 7 {
|
|
|
|
+HGR_INC_WITHIN_BLOCK
|
|
|
|
}
|
|
|
|
}
|
|
|
|
+RESET_HGR_CALC_BY_7
|
|
|
|
@block4
|
|
|
|
iny
|
|
|
|
+IS_Y_OFFSCREEN
|
|
|
|
+LBCS @block5
|
|
|
|
|
|
|
|
!for i, 0, 7 {
|
2020-11-21 04:59:45 +00:00
|
|
|
+COPY_BIT_BY $3c, $26, zpcopymasks4+i
|
2020-11-20 23:17:06 +00:00
|
|
|
!if i < 7 {
|
|
|
|
+HGR_INC_WITHIN_BLOCK
|
|
|
|
}
|
|
|
|
}
|
|
|
|
+RESET_HGR_CALC_BY_7
|
|
|
|
@block5
|
|
|
|
iny
|
|
|
|
+IS_Y_OFFSCREEN
|
|
|
|
+LBCS @block6
|
|
|
|
|
|
|
|
!for i, 0, 7 {
|
2020-11-21 04:59:45 +00:00
|
|
|
+COPY_BIT_BY $3c, $26, zpcopymasks5+i
|
2020-11-20 23:17:06 +00:00
|
|
|
!if i < 7 {
|
|
|
|
+HGR_INC_WITHIN_BLOCK
|
|
|
|
}
|
|
|
|
}
|
|
|
|
+RESET_HGR_CALC_BY_7
|
|
|
|
@block6
|
|
|
|
iny
|
|
|
|
+IS_Y_OFFSCREEN
|
|
|
|
+LBCS @block7
|
|
|
|
|
|
|
|
!for i, 0, 7 {
|
2020-11-21 04:59:45 +00:00
|
|
|
+COPY_BIT_BY $3c, $26, zpcopymasks6+i
|
2020-11-20 23:17:06 +00:00
|
|
|
!if i < 7 {
|
|
|
|
+HGR_INC_WITHIN_BLOCK
|
|
|
|
}
|
|
|
|
}
|
|
|
|
+RESET_HGR_CALC_BY_7
|
|
|
|
@block7
|
|
|
|
iny
|
|
|
|
+IS_Y_OFFSCREEN
|
|
|
|
+LBCS @nextrow
|
|
|
|
|
|
|
|
!for i, 0, 7 {
|
|
|
|
lda ($3c),y
|
|
|
|
sta ($26),y
|
|
|
|
!if i < 7 {
|
|
|
|
+HGR_INC_WITHIN_BLOCK
|
|
|
|
}
|
|
|
|
}
|
|
|
|
+RESET_HGR_CALC_BY_7
|
|
|
|
@nextrow
|
|
|
|
sta $C003
|
|
|
|
sta $C005
|
2020-11-21 04:59:45 +00:00
|
|
|
|
|
|
|
ldy y
|
|
|
|
+IS_Y_OFFSCREEN
|
|
|
|
+LBCS @block2_aux
|
|
|
|
|
|
|
|
!for i, 0, 7 {
|
|
|
|
+COPY_BIT_BY $3c, $26, zpcopymasks1_aux+i
|
|
|
|
!if i < 7 {
|
|
|
|
+HGR_INC_WITHIN_BLOCK
|
|
|
|
}
|
|
|
|
}
|
|
|
|
+RESET_HGR_CALC_BY_7
|
|
|
|
@block2_aux
|
|
|
|
iny
|
|
|
|
+IS_Y_OFFSCREEN
|
|
|
|
+LBCS @block3_aux
|
|
|
|
|
|
|
|
!for i, 0, 7 {
|
|
|
|
+COPY_BIT_BY $3c, $26, zpcopymasks2_aux+i
|
|
|
|
!if i < 7 {
|
|
|
|
+HGR_INC_WITHIN_BLOCK
|
|
|
|
}
|
|
|
|
}
|
|
|
|
+RESET_HGR_CALC_BY_7
|
|
|
|
@block3_aux
|
|
|
|
iny
|
|
|
|
+IS_Y_OFFSCREEN
|
|
|
|
+LBCS @block4_aux
|
|
|
|
|
|
|
|
!for i, 0, 7 {
|
|
|
|
+COPY_BIT_BY $3c, $26, zpcopymasks3_aux+i
|
|
|
|
!if i < 7 {
|
|
|
|
+HGR_INC_WITHIN_BLOCK
|
|
|
|
}
|
|
|
|
}
|
|
|
|
+RESET_HGR_CALC_BY_7
|
|
|
|
@block4_aux
|
|
|
|
iny
|
|
|
|
+IS_Y_OFFSCREEN
|
|
|
|
+LBCS @block5_aux
|
|
|
|
|
|
|
|
!for i, 0, 7 {
|
|
|
|
+COPY_BIT_BY $3c, $26, zpcopymasks4_aux+i
|
|
|
|
!if i < 7 {
|
|
|
|
+HGR_INC_WITHIN_BLOCK
|
|
|
|
}
|
|
|
|
}
|
|
|
|
+RESET_HGR_CALC_BY_7
|
|
|
|
@block5_aux
|
|
|
|
iny
|
|
|
|
+IS_Y_OFFSCREEN
|
|
|
|
+LBCS @block6_aux
|
|
|
|
|
|
|
|
!for i, 0, 7 {
|
|
|
|
+COPY_BIT_BY $3c, $26, zpcopymasks5_aux+i
|
|
|
|
!if i < 7 {
|
|
|
|
+HGR_INC_WITHIN_BLOCK
|
|
|
|
}
|
|
|
|
}
|
|
|
|
+RESET_HGR_CALC_BY_7
|
|
|
|
@block6_aux
|
|
|
|
iny
|
|
|
|
+IS_Y_OFFSCREEN
|
|
|
|
+LBCS @block7_aux
|
|
|
|
|
|
|
|
!for i, 0, 7 {
|
|
|
|
+COPY_BIT_BY $3c, $26, zpcopymasks6_aux+i
|
|
|
|
!if i < 7 {
|
|
|
|
+HGR_INC_WITHIN_BLOCK
|
|
|
|
}
|
|
|
|
}
|
|
|
|
+RESET_HGR_CALC_BY_7
|
|
|
|
@block7_aux
|
|
|
|
iny
|
|
|
|
+IS_Y_OFFSCREEN
|
|
|
|
+LBCS @nextrow_aux
|
|
|
|
|
|
|
|
!for i, 0, 7 {
|
|
|
|
lda ($3c),y
|
|
|
|
sta ($26),y
|
|
|
|
!if i < 7 {
|
|
|
|
+HGR_INC_WITHIN_BLOCK
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@nextrow_aux
|
|
|
|
|
2020-11-20 23:17:06 +00:00
|
|
|
sta $C002
|
|
|
|
sta $C004
|
|
|
|
ldy y
|
|
|
|
iny
|
|
|
|
sty y
|
|
|
|
dec row
|
|
|
|
+LBPL RowLoop
|
|
|
|
lda $c000
|
|
|
|
bmi @exit
|
|
|
|
dec col
|
|
|
|
dec counter
|
|
|
|
+LBNE ColLoop
|
|
|
|
@exit rts
|
|
|
|
|
|
|
|
;1GFEDCBA ->
|
|
|
|
;1GGFFEED (main) +
|
|
|
|
;1DCCBBAA (aux)
|
|
|
|
copymasks1
|
|
|
|
!byte %00000000
|
|
|
|
!byte %00000000
|
|
|
|
!byte %00000000
|
|
|
|
!byte %10000001
|
|
|
|
!byte %10000001
|
|
|
|
!byte %00000000
|
|
|
|
!byte %00000000
|
|
|
|
!byte %00000000
|
|
|
|
copymasks2
|
|
|
|
!byte %00000000
|
|
|
|
!byte %00000000
|
|
|
|
!byte %10000110
|
|
|
|
!byte %10000001
|
|
|
|
!byte %10000001
|
|
|
|
!byte %10010110
|
|
|
|
!byte %00000000
|
|
|
|
!byte %00000000
|
|
|
|
copymasks3
|
|
|
|
!byte %00000000
|
|
|
|
!byte %00000000
|
|
|
|
!byte %10000111
|
|
|
|
!byte %10000111
|
|
|
|
!byte %10000111
|
|
|
|
!byte %10000111
|
|
|
|
!byte %10000000
|
|
|
|
!byte %10000000
|
|
|
|
copymasks4
|
|
|
|
!byte %00000000
|
|
|
|
!byte %10011001
|
|
|
|
!byte %10000001
|
|
|
|
!byte %10011111
|
|
|
|
!byte %10000111
|
|
|
|
!byte %10000111
|
|
|
|
!byte %10011001
|
|
|
|
!byte %00000000
|
|
|
|
copymasks5
|
|
|
|
!byte %00000000
|
|
|
|
!byte %10011111
|
|
|
|
!byte %10011111
|
|
|
|
!byte %10011111
|
|
|
|
!byte %10011111
|
|
|
|
!byte %10011111
|
|
|
|
!byte %10011111
|
|
|
|
!byte %00000000
|
|
|
|
copymasks6
|
|
|
|
!byte %11100110
|
|
|
|
!byte %10011111
|
|
|
|
!byte %11111111
|
|
|
|
!byte %10011111
|
|
|
|
!byte %11111111
|
|
|
|
!byte %10011111
|
|
|
|
!byte %10011111
|
|
|
|
!byte %11100110
|
|
|
|
copymasks1_aux
|
|
|
|
!byte %00000000
|
|
|
|
!byte %00000000
|
|
|
|
!byte %00000000
|
|
|
|
!byte %11000000
|
|
|
|
!byte %11000000
|
|
|
|
!byte %00000000
|
|
|
|
!byte %00000000
|
|
|
|
!byte %00000000
|
|
|
|
copymasks2_aux
|
|
|
|
!byte %00000000
|
|
|
|
!byte %00000000
|
|
|
|
!byte %10110000
|
|
|
|
!byte %11000000
|
|
|
|
!byte %11000000
|
|
|
|
!byte %10110000
|
|
|
|
!byte %00000000
|
|
|
|
!byte %00000000
|
|
|
|
copymasks3_aux
|
|
|
|
!byte %00000000
|
|
|
|
!byte %00000000
|
|
|
|
!byte %11110000
|
|
|
|
!byte %11110000
|
|
|
|
!byte %11110000
|
|
|
|
!byte %11110000
|
|
|
|
!byte %00000000
|
|
|
|
!byte %00000000
|
|
|
|
copymasks4_aux
|
|
|
|
!byte %00000000
|
|
|
|
!byte %11001100
|
|
|
|
!byte %11110000
|
|
|
|
!byte %11111100
|
|
|
|
!byte %11110000
|
|
|
|
!byte %11110000
|
|
|
|
!byte %11001100
|
|
|
|
!byte %00000000
|
|
|
|
copymasks5_aux
|
|
|
|
!byte %00000000
|
|
|
|
!byte %11111100
|
|
|
|
!byte %11111100
|
|
|
|
!byte %11111100
|
|
|
|
!byte %11111100
|
|
|
|
!byte %11111100
|
|
|
|
!byte %11111100
|
|
|
|
!byte %00000000
|
|
|
|
copymasks6_aux
|
|
|
|
!byte %10110011
|
|
|
|
!byte %11111100
|
|
|
|
!byte %11111111
|
|
|
|
!byte %11111100
|
|
|
|
!byte %11111111
|
|
|
|
!byte %11111100
|
|
|
|
!byte %11111100
|
|
|
|
!byte %10110011
|