4cade/src/fx/fx.hgr.center.by.pixel.a

125 lines
2.2 KiB
Plaintext

;license:MIT
;(c) 2019 by 4am
;
!cpu 6502
!to "build/FX.INDEXED/CENTER.BY.PIXEL",plain
*=$6000
copymask1 = $f2
copymask2 = $f3
skipcounter = $f7
top = $f9
bottom = $fa
counter = $fb
maskindex = $fc
row = $fd
col1 = $fe
col2 = $ff
!source "src/fx/macros.a"
!source "src/constants.a"
lda #44
sta skipcounter
lda #$5F
sta counter
lda #0
sta top
lda #$BF
sta bottom
lda #0
sta col1
lda #39
sta col2
ColLoop
lda #6
sta maskindex
jsr WaitForVBL
MaskLoop
ldx maskindex
lda copymasks1,x
sta copymask1
lda copymasks2,x
sta copymask2
lda #23
sta row
RowLoop
lda row
+HGR_ROW_CALC
ldx #8
BlockLoop
ldy col1
lda ($26),y
eor ($3c),y
and copymask1
eor ($26),y
sta ($26),y
ldy col2
lda ($26),y
eor ($3c),y
and copymask2
eor ($26),y
sta ($26),y
clc
+HGR_INC_WITHIN_BLOCK
dex
bne BlockLoop
dec row
bpl RowLoop
dec skipcounter
+LBPL SkipTopAndBottom
lda top
+HGR_CALC
ldy #39
- lda ($3c),y
sta ($26),y
dey
bpl -
inc top
lda bottom
+HGR_CALC
ldy #39
- lda ($3c),y
sta ($26),y
dey
bpl -
dec bottom
dec counter
bmi Exit
SkipTopAndBottom
lda $c000
bmi Exit
dec maskindex
+LBPL MaskLoop
inc col1
dec col2
+LBNE ColLoop
Exit jmp UnwaitForVBL
copymasks1
!byte %11111111
!byte %10111111
!byte %10011111
!byte %10001111
!byte %10000111
!byte %10000011
!byte %10000001
copymasks2
!byte %11111111
!byte %11111110
!byte %11111100
!byte %11111000
!byte %11110000
!byte %11100000
!byte %11000000
!source "src/wait.a"