mirror of
https://github.com/a2-4am/4cade.git
synced 2024-12-23 16:29:34 +00:00
new dither transition effects
This commit is contained in:
parent
07ac765e25
commit
0cf8c9c7ee
21
res/FX.CONF
21
res/FX.CONF
@ -28,83 +28,104 @@ MANDELBROT.IN
|
||||
RADIAL
|
||||
STAGGER.LR
|
||||
SOFT.UD
|
||||
DITHER.IRIS
|
||||
HEART.IN
|
||||
CRYSTAL
|
||||
STAR.RIPPLE
|
||||
BIT2.FIZZLE
|
||||
DITHER.HEART
|
||||
MEETINTHEMIDDLE
|
||||
BOXES48
|
||||
APPLE.IN
|
||||
FLOWER.RAD.RIP
|
||||
DITHER.CORNER4
|
||||
SOFT.IRIS
|
||||
W.RIPPLE.BLOOM
|
||||
DIAGONAL
|
||||
PINWHEELS
|
||||
DITHER.SLOWSTAR
|
||||
STAGGERWHITE.UD
|
||||
BOXES48.SYNCC
|
||||
CORNER4.RIP
|
||||
BOLT
|
||||
DITHER.SNOWFLAK
|
||||
RADIAL2
|
||||
STAR
|
||||
FLOWER.IN
|
||||
R.BY.PIXEL
|
||||
DITHER.BUTTERFL
|
||||
WAVY.IRIS
|
||||
BIT.FIZZLE
|
||||
STAR.IN
|
||||
BOXES48.PAGEC
|
||||
DITHER.MAPLE
|
||||
DIAG.STRIPES
|
||||
APPLE
|
||||
MANDELBROT.RIP
|
||||
SOFT.L
|
||||
DITHER.SOFTIRIS
|
||||
HEART.RIPPLE
|
||||
FLOWER.RAD
|
||||
SLOW.STAR.IN
|
||||
IRIS.IN
|
||||
DITHER.STAR
|
||||
BUTTERFLYRIPPLE
|
||||
BOXES48.SPIRALC
|
||||
W.IRIS.BLOOM.IN
|
||||
CENTER.BY.PIXEL
|
||||
DITHER.WAVYIRIS
|
||||
RADBUBBLES
|
||||
SNOWFLAKE.IN
|
||||
FLOWER
|
||||
APPLE.RIPPLE
|
||||
DITHER.DISSOLVE
|
||||
DIAGONAL2
|
||||
STAR.BLOOM
|
||||
DIAMOND.STRIPES
|
||||
BOXES48.SYNC
|
||||
DITHER.RADIAL
|
||||
THIN.DISSOLVE
|
||||
PALETTE.FIZZLE
|
||||
BUTTERFLY
|
||||
BUBBLES
|
||||
DITHER.RADIAL2
|
||||
FLOWER.RIPPLE
|
||||
SPLIT.UD.INTRO
|
||||
WAVY.IRIS.IN
|
||||
R.BY.2
|
||||
DITHER.RADIAL4
|
||||
HALF.FIZZLE
|
||||
BOXES48.LDIAGON
|
||||
SNOWFLAKE.RIP
|
||||
RADIAL3
|
||||
HEART
|
||||
BOLT.IN
|
||||
DITHER.RADIAL5
|
||||
FLOWER.RAD.IN
|
||||
DIAGONAL3
|
||||
MANDELBROT
|
||||
BOXES48.SPIRAL
|
||||
DITHER.APPLE
|
||||
WAVY.RIPPLE
|
||||
CORNER4.OUT
|
||||
LATTICE
|
||||
BAR.DISSOLVE
|
||||
DITHER.BOLT
|
||||
R.BY.PALETTE
|
||||
FOURSPIRAL
|
||||
SOFT.R
|
||||
MAPLE.IN
|
||||
DITHER.FLOWER
|
||||
BOXES48.SNAKEC
|
||||
RADIAL4
|
||||
IRIS
|
||||
CASCADE
|
||||
DITHER.FLOWERRD
|
||||
SNOWFLAKE
|
||||
VERTICAL.BLINDS
|
||||
BUTTERFLY.IN
|
||||
LR.BY.PIXEL
|
||||
DITHER.MANDEL
|
||||
CHECKERB.FIZZLE
|
||||
BOXES48.SIDES
|
||||
CIRCLE.STRIPES
|
||||
|
16
src/fx/fx.hgr.dither.apple.a
Normal file
16
src/fx/fx.hgr.dither.apple.a
Normal file
@ -0,0 +1,16 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2022 by 4am/qkumba
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/DITHER.APPLE",plain
|
||||
*=$6000
|
||||
|
||||
!source "src/fx/fx.hgr.precomputed.3bit.a"
|
||||
|
||||
+FX_INITONCE_3BIT CoordinatesFile, Start
|
||||
Start
|
||||
+FX_PRECOMPUTED_3BIT_DITHER Coordinates3Bit, EndCoordinates3Bit
|
||||
|
||||
CoordinatesFile
|
||||
!byte 13
|
||||
!text "FX/APPLE.DATA"
|
19
src/fx/fx.hgr.dither.bolt.a
Normal file
19
src/fx/fx.hgr.dither.bolt.a
Normal file
@ -0,0 +1,19 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2022 by 4am/qkumba
|
||||
;
|
||||
; https://thenounproject.com/ArtZ91/collection/pure-lines/?i=550425
|
||||
; Lightning Bolt by Arthur Shlain from the Noun Project
|
||||
; CC-BY
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/DITHER.BOLT",plain
|
||||
*=$6000
|
||||
|
||||
!source "src/fx/fx.hgr.precomputed.3bit.a"
|
||||
|
||||
+FX_INITONCE_3BIT CoordinatesFile, Start
|
||||
Start
|
||||
+FX_PRECOMPUTED_3BIT_DITHER Coordinates3Bit, EndCoordinates3Bit
|
||||
|
||||
CoordinatesFile
|
||||
!byte 12
|
||||
!text "FX/BOLT.DATA"
|
16
src/fx/fx.hgr.dither.butterfly.a
Normal file
16
src/fx/fx.hgr.dither.butterfly.a
Normal file
@ -0,0 +1,16 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2022 by 4am/qkumba
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/DITHER.BUTTERFL",plain
|
||||
*=$6000
|
||||
|
||||
!source "src/fx/fx.hgr.precomputed.2bit.a"
|
||||
|
||||
+FX_INITONCE_2BIT CoordinatesFile, Start
|
||||
Start
|
||||
+FX_PRECOMPUTED_2BIT_DITHER Coordinates2Bit, EndCoordinates2Bit
|
||||
|
||||
CoordinatesFile
|
||||
!byte 17
|
||||
!text "FX/BUTTERFLY.DATA"
|
16
src/fx/fx.hgr.dither.corner4.a
Normal file
16
src/fx/fx.hgr.dither.corner4.a
Normal file
@ -0,0 +1,16 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2022 by 4am/qkumba
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/DITHER.CORNER4",plain
|
||||
*=$6000
|
||||
|
||||
!source "src/fx/fx.hgr.precomputed.1bit.a"
|
||||
|
||||
+FX_INITONCE_1BIT CoordinatesFile, Start
|
||||
Start
|
||||
+FX_PRECOMPUTED_1BIT_DITHER Coordinates1Bit, EndCoordinates1Bit
|
||||
|
||||
CoordinatesFile
|
||||
!byte 15
|
||||
!text "FX/CORNER4.DATA"
|
68
src/fx/fx.hgr.dither.dissolve.a
Normal file
68
src/fx/fx.hgr.dither.dissolve.a
Normal file
@ -0,0 +1,68 @@
|
||||
;license:MIT
|
||||
;(c) 2022 by 4am
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/DITHER.DISSOLVE",plain
|
||||
*=$6000
|
||||
|
||||
row1 = $fe
|
||||
row2 = $ff
|
||||
src = $3c
|
||||
dst = $26
|
||||
|
||||
lda #$00
|
||||
sta row1
|
||||
lda #$BF
|
||||
sta row2
|
||||
@loop lda row1
|
||||
jsr HGRCalc
|
||||
ldy #$27
|
||||
- tya
|
||||
and #$03
|
||||
tax
|
||||
lda (src),y
|
||||
eor (dst),y ; merge source and destination bits
|
||||
@amask and mask1,x ; 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
|
||||
dey
|
||||
bpl -
|
||||
lda row2
|
||||
jsr HGRCalc
|
||||
ldy #$27
|
||||
- tya
|
||||
and #$03
|
||||
tax
|
||||
lda (src),y
|
||||
eor (dst),y
|
||||
@bmask and mask3,x
|
||||
eor (dst),y
|
||||
sta (dst),y
|
||||
dey
|
||||
bpl -
|
||||
lda #$28
|
||||
jsr WaitForKeyWithTimeout
|
||||
bmi @exit
|
||||
inc row1
|
||||
dec row2
|
||||
lda row1
|
||||
cmp #$60
|
||||
beq @loop
|
||||
ldx @amask+1
|
||||
ldy @bmask+1
|
||||
stx @bmask+1
|
||||
sty @amask+1
|
||||
cmp #$C0
|
||||
bne @loop
|
||||
@exit rts
|
||||
|
||||
mask1 !byte %10110011
|
||||
mask2 !byte %11100110
|
||||
mask3 !byte %11001100
|
||||
mask4 !byte %10011001
|
||||
!byte %10110011
|
||||
!byte %11100110
|
||||
|
||||
!source "src/wait.a"
|
||||
!source "src/fx/fx.hgr.common.a"
|
||||
+HGR_CALC_ROUTINES
|
16
src/fx/fx.hgr.dither.flower.a
Normal file
16
src/fx/fx.hgr.dither.flower.a
Normal file
@ -0,0 +1,16 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2022 by 4am/qkumba
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/DITHER.FLOWER",plain
|
||||
*=$6000
|
||||
|
||||
!source "src/fx/fx.hgr.precomputed.3bit.a"
|
||||
|
||||
+FX_INITONCE_3BIT CoordinatesFile, Start
|
||||
Start
|
||||
+FX_PRECOMPUTED_3BIT_DITHER Coordinates3Bit, EndCoordinates3Bit
|
||||
|
||||
CoordinatesFile
|
||||
!byte 14
|
||||
!text "FX/FLOWER.DATA"
|
16
src/fx/fx.hgr.dither.flower.radial.a
Normal file
16
src/fx/fx.hgr.dither.flower.radial.a
Normal file
@ -0,0 +1,16 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2022 by 4am/qkumba
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/DITHER.FLOWERRD",plain
|
||||
*=$6000
|
||||
|
||||
!source "src/fx/fx.hgr.precomputed.3bit.a"
|
||||
|
||||
+FX_INITONCE_3BIT CoordinatesFile, Start
|
||||
Start
|
||||
+FX_PRECOMPUTED_3BIT_DITHER Coordinates3Bit, EndCoordinates3Bit
|
||||
|
||||
CoordinatesFile
|
||||
!byte 18
|
||||
!text "FX/FLOWER.RAD.DATA"
|
16
src/fx/fx.hgr.dither.heart.a
Normal file
16
src/fx/fx.hgr.dither.heart.a
Normal file
@ -0,0 +1,16 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2022 by 4am/qkumba
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/DITHER.HEART",plain
|
||||
*=$6000
|
||||
|
||||
!source "src/fx/fx.hgr.precomputed.2bit.a"
|
||||
|
||||
+FX_INITONCE_2BIT CoordinatesFile, Start
|
||||
Start
|
||||
+FX_PRECOMPUTED_2BIT_DITHER Coordinates2Bit, EndCoordinates2Bit
|
||||
|
||||
CoordinatesFile
|
||||
!byte 13
|
||||
!text "FX/HEART.DATA"
|
16
src/fx/fx.hgr.dither.iris.a
Normal file
16
src/fx/fx.hgr.dither.iris.a
Normal file
@ -0,0 +1,16 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2022 by 4am/qkumba
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/DITHER.IRIS",plain
|
||||
*=$6000
|
||||
|
||||
!source "src/fx/fx.hgr.precomputed.1bit.a"
|
||||
|
||||
+FX_INITONCE_1BIT CoordinatesFile, Start
|
||||
Start
|
||||
+FX_PRECOMPUTED_1BIT_DITHER Coordinates1Bit, EndCoordinates1Bit
|
||||
|
||||
CoordinatesFile
|
||||
!byte 12
|
||||
!text "FX/IRIS.DATA"
|
16
src/fx/fx.hgr.dither.mandelbrot.a
Normal file
16
src/fx/fx.hgr.dither.mandelbrot.a
Normal file
@ -0,0 +1,16 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2022 by 4am/qkumba
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/DITHER.MANDEL",plain
|
||||
*=$6000
|
||||
|
||||
!source "src/fx/fx.hgr.precomputed.3bit.a"
|
||||
|
||||
+FX_INITONCE_3BIT CoordinatesFile, Start
|
||||
Start
|
||||
+FX_PRECOMPUTED_3BIT_DITHER Coordinates3Bit, EndCoordinates3Bit
|
||||
|
||||
CoordinatesFile
|
||||
!byte 18
|
||||
!text "FX/MANDELBROT.DATA"
|
16
src/fx/fx.hgr.dither.maple.a
Normal file
16
src/fx/fx.hgr.dither.maple.a
Normal file
@ -0,0 +1,16 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2022 by 4am/qkumba
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/DITHER.MAPLE",plain
|
||||
*=$6000
|
||||
|
||||
!source "src/fx/fx.hgr.precomputed.2bit.a"
|
||||
|
||||
+FX_INITONCE_2BIT CoordinatesFile, Start
|
||||
Start
|
||||
+FX_PRECOMPUTED_2BIT_DITHER Coordinates2Bit, EndCoordinates2Bit
|
||||
|
||||
CoordinatesFile
|
||||
!byte 13
|
||||
!text "FX/MAPLE.DATA"
|
117
src/fx/fx.hgr.dither.radial.a
Normal file
117
src/fx/fx.hgr.dither.radial.a
Normal file
@ -0,0 +1,117 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2022 by 4am/qkumba
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/DITHER.RADIAL",plain
|
||||
*=$6000
|
||||
|
||||
evenrow_ptr = $E4 ; word
|
||||
oddrow_ptr = $E6 ; word
|
||||
mirror_src1 = $E8 ; word
|
||||
mirror_dest1 = $EA ; word
|
||||
mirror_src2 = $EC ; word
|
||||
mirror_dest2 = $EE ; word
|
||||
src1 = $F0 ; word
|
||||
dest1 = $F2 ; word
|
||||
src2 = $F4 ; word
|
||||
dest2 = $F6 ; word
|
||||
input = $FE ; word
|
||||
|
||||
!source "src/fx/fx.hgr.precomputed.1bit.a"
|
||||
|
||||
+FX_INITONCE_1BIT CoordinatesFile, Start
|
||||
lda #$80
|
||||
sta Coordinates1Bit-2
|
||||
+BUILD_DITHER_MASKS dither_masks, evenrow_masks, oddrow_masks, no_masks
|
||||
+BUILD_HGR_LOOKUP_TABLES hgrlo, hgr1hi
|
||||
+BUILD_HGR_MIRROR_LOOKUP_TABLES hgrlomirror, hgr1himirror
|
||||
+BUILD_MIRROR_COLS mirror_cols
|
||||
+BUILD_SPARSE_BITMASKS copymasks, mirror_copymasks
|
||||
Start
|
||||
+LDADDR evenrow_masks
|
||||
+ST16 evenrow_ptr
|
||||
+LDADDR oddrow_masks
|
||||
+ST16 oddrow_ptr
|
||||
jsr FullRadial
|
||||
bit KBD
|
||||
bpl +
|
||||
rts
|
||||
+ lda #<no_masks
|
||||
sta <evenrow_ptr
|
||||
sta <oddrow_ptr
|
||||
; /!\ execution falls through here
|
||||
FullRadial
|
||||
+LDADDR EndCoordinates1Bit-2
|
||||
+ST16 input
|
||||
LoopBL ; bottom-left quadrant (opposite row, original column, reverse input order)
|
||||
ldy #0
|
||||
lda (input),y
|
||||
bmi DoneBL
|
||||
tax
|
||||
+ROW_X_TO_MIRROR_ADDRESSES
|
||||
iny
|
||||
lda (input),y
|
||||
+HIGH_3_LOW_5 input
|
||||
+COPY_BIT_DITHER mirror_src1, mirror_dest1, copymasks, oddrow_ptr
|
||||
+COPY_BIT_DITHER mirror_src2, mirror_dest2, copymasks, evenrow_ptr
|
||||
+DEC_INPUT_AND_LOOP LoopBL
|
||||
DoneBL
|
||||
|
||||
+LDADDR Coordinates1Bit
|
||||
+ST16 input
|
||||
LoopTL ; top-left quadrant
|
||||
ldy #0
|
||||
lda (input),y
|
||||
bmi DoneTL
|
||||
tax
|
||||
+ROW_X_TO_BASE_ADDRESSES
|
||||
inc input
|
||||
lda (input),y
|
||||
+HIGH_3_LOW_5 input
|
||||
+COPY_BIT_DITHER src1, dest1, copymasks, evenrow_ptr
|
||||
+COPY_BIT_DITHER src2, dest2, copymasks, oddrow_ptr
|
||||
+INC_INPUT_AND_LOOP LoopTL
|
||||
DoneTL
|
||||
|
||||
+LDADDR EndCoordinates1Bit-2
|
||||
+ST16 input
|
||||
LoopTR ; top-right quadrant (same row, opposite column, reverse input order)
|
||||
ldy #0
|
||||
lda (input),y
|
||||
bmi DoneTR
|
||||
tax
|
||||
+ROW_X_TO_BASE_ADDRESSES
|
||||
iny
|
||||
lda (input),y
|
||||
+HIGH_3_LOW_5 input
|
||||
lda mirror_cols,y
|
||||
tay
|
||||
+COPY_BIT_DITHER src1, dest1, mirror_copymasks, evenrow_ptr
|
||||
+COPY_BIT_DITHER src2, dest2, mirror_copymasks, oddrow_ptr
|
||||
+DEC_INPUT_AND_LOOP LoopTR
|
||||
DoneTR
|
||||
|
||||
+LDADDR Coordinates1Bit
|
||||
+ST16 input
|
||||
LoopBR ; bottom-right quadrant (opposite row, opposite column, original input order)
|
||||
ldy #0
|
||||
lda (input),y
|
||||
bmi DoneBR
|
||||
tax
|
||||
+ROW_X_TO_MIRROR_ADDRESSES
|
||||
inc input
|
||||
lda (input),y
|
||||
+HIGH_3_LOW_5 input
|
||||
lda mirror_cols,y
|
||||
tay
|
||||
+COPY_BIT_DITHER mirror_src1, mirror_dest1, mirror_copymasks, oddrow_ptr
|
||||
+COPY_BIT_DITHER mirror_src2, mirror_dest2, mirror_copymasks, evenrow_ptr
|
||||
+INC_INPUT_AND_LOOP LoopBR
|
||||
DoneBR
|
||||
rts
|
||||
|
||||
+DITHER_MASK_DATA
|
||||
|
||||
CoordinatesFile
|
||||
!byte 14
|
||||
!text "FX/RADIAL.DATA"
|
91
src/fx/fx.hgr.dither.radial.common.a
Normal file
91
src/fx/fx.hgr.dither.radial.common.a
Normal file
@ -0,0 +1,91 @@
|
||||
evenrow_ptr = $E4 ; word
|
||||
oddrow_ptr = $E6 ; word
|
||||
mirror_src1 = $E8 ; word
|
||||
mirror_dest1 = $EA ; word
|
||||
mirror_src2 = $EC ; word
|
||||
mirror_dest2 = $EE ; word
|
||||
src1 = $F0 ; word
|
||||
dest1 = $F2 ; word
|
||||
src2 = $F4 ; word
|
||||
dest2 = $F6 ; word
|
||||
reverse_input = $FC ; word
|
||||
input = $FE ; word
|
||||
|
||||
+BUILD_DITHER_MASKS dither_masks, evenrow_masks, oddrow_masks, no_masks
|
||||
+BUILD_MIRROR_COLS mirror_cols
|
||||
+BUILD_HGR_LOOKUP_TABLES_X_IS_ALREADY_0 hgrlo, hgr1hi
|
||||
+BUILD_HGR_MIRROR_LOOKUP_TABLES hgrlomirror, hgr1himirror
|
||||
+BUILD_SPARSE_BITMASKS copymasks, mirror_copymasks
|
||||
+LDADDR evenrow_masks
|
||||
+ST16 evenrow_ptr
|
||||
+LDADDR oddrow_masks
|
||||
+ST16 oddrow_ptr
|
||||
jsr FullRadial
|
||||
bit KBD
|
||||
bmi Exit
|
||||
lda #<no_masks
|
||||
sta <evenrow_ptr
|
||||
sta <oddrow_ptr
|
||||
; /!\ execution falls through here
|
||||
FullRadial
|
||||
+LDADDR Coordinates
|
||||
+ST16 input
|
||||
+LDADDR EndCoordinates-2
|
||||
+ST16 reverse_input
|
||||
+HIDE_NEXT_BYTE
|
||||
Exit rts
|
||||
Loop ldy #0
|
||||
lda (input),y
|
||||
bmi Exit
|
||||
tax
|
||||
+ROW_X_TO_BASE_ADDRESSES
|
||||
+ROW_X_TO_MIRROR_ADDRESSES
|
||||
inc input
|
||||
lda (input),y
|
||||
+HIGH_3_LOW_5 input
|
||||
|
||||
; top-left quadrant (original row, original column, original input order)
|
||||
+COPY_BIT_DITHER src1, dest1, copymasks, evenrow_ptr
|
||||
+COPY_BIT_DITHER src2, dest2, copymasks, oddrow_ptr
|
||||
|
||||
; bottom-right quadrant (opposite row, opposite column, original input order)
|
||||
lda mirror_cols,y
|
||||
tay
|
||||
+COPY_BIT_DITHER mirror_src1, mirror_dest1, mirror_copymasks, oddrow_ptr
|
||||
+COPY_BIT_DITHER mirror_src2, mirror_dest2, mirror_copymasks, evenrow_ptr
|
||||
|
||||
ldy #0
|
||||
lda (reverse_input),y
|
||||
tax
|
||||
+ROW_X_TO_BASE_ADDRESSES
|
||||
+ROW_X_TO_MIRROR_ADDRESSES
|
||||
iny
|
||||
lda (reverse_input),y
|
||||
+HIGH_3_LOW_5 reverse_input
|
||||
|
||||
; bottom-left quadrant (opposite row, original column, reverse input order)
|
||||
+COPY_BIT_DITHER mirror_src1, mirror_dest1, copymasks, oddrow_ptr
|
||||
+COPY_BIT_DITHER mirror_src2, mirror_dest2, copymasks, evenrow_ptr
|
||||
|
||||
; top-right quadrant (same row, opposite column, reverse input order)
|
||||
lda mirror_cols,y
|
||||
tay
|
||||
+COPY_BIT_DITHER src1, dest1, mirror_copymasks, evenrow_ptr
|
||||
+COPY_BIT_DITHER src2, dest2, mirror_copymasks, oddrow_ptr
|
||||
|
||||
inc input
|
||||
bne +
|
||||
inc input+1
|
||||
+ lda reverse_input
|
||||
php
|
||||
dec reverse_input
|
||||
dec reverse_input
|
||||
plp
|
||||
bne +
|
||||
dec reverse_input+1
|
||||
bit $c000
|
||||
bmi ++
|
||||
+ jmp Loop
|
||||
++ rts
|
||||
|
||||
+DITHER_MASK_DATA
|
20
src/fx/fx.hgr.dither.radial2.a
Normal file
20
src/fx/fx.hgr.dither.radial2.a
Normal file
@ -0,0 +1,20 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2020 by 4am/qkumba
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/DITHER.RADIAL2",plain
|
||||
*=$6000
|
||||
|
||||
!source "src/fx/fx.hgr.precomputed.1bit.a"
|
||||
|
||||
+FX_INITONCE_1BIT CoordinatesFile, Start
|
||||
+FX_RIPPLE_1BIT aslmod
|
||||
|
||||
Start
|
||||
!source "src/fx/fx.hgr.dither.radial.common.a"
|
||||
|
||||
CoordinatesFile
|
||||
!byte 14
|
||||
!text "FX/RADIAL.DATA"
|
||||
Coordinates=Coordinates1Bit
|
||||
EndCoordinates=EndCoordinates1Bit
|
20
src/fx/fx.hgr.dither.radial4.a
Normal file
20
src/fx/fx.hgr.dither.radial4.a
Normal file
@ -0,0 +1,20 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2022 by 4am/qkumba
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/DITHER.RADIAL4",plain
|
||||
*=$6000
|
||||
|
||||
!source "src/fx/fx.hgr.precomputed.1bit.a"
|
||||
|
||||
+FX_INITONCE_1BIT CoordinatesFile, Start
|
||||
jsr EndCoordinates1Bit+1
|
||||
|
||||
Start
|
||||
!source "src/fx/fx.hgr.dither.radial.common.a"
|
||||
|
||||
CoordinatesFile
|
||||
!byte 14
|
||||
!text "FX/RADIAL.DATA"
|
||||
Coordinates=Coordinates1Bit
|
||||
EndCoordinates=EndCoordinates1Bit
|
20
src/fx/fx.hgr.dither.radial5.a
Normal file
20
src/fx/fx.hgr.dither.radial5.a
Normal file
@ -0,0 +1,20 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2020 by 4am/qkumba
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/DITHER.RADIAL5",plain
|
||||
*=$6000
|
||||
|
||||
!source "src/fx/fx.hgr.precomputed.1bit.a"
|
||||
|
||||
+FX_INITONCE_1BIT CoordinatesFile, Start
|
||||
+FX_RIPPLE_1BIT aslmod3
|
||||
|
||||
Start
|
||||
!source "src/fx/fx.hgr.dither.radial.common.a"
|
||||
|
||||
CoordinatesFile
|
||||
!byte 14
|
||||
!text "FX/RADIAL.DATA"
|
||||
Coordinates=Coordinates1Bit
|
||||
EndCoordinates=EndCoordinates1Bit
|
16
src/fx/fx.hgr.dither.slow.star.a
Normal file
16
src/fx/fx.hgr.dither.slow.star.a
Normal file
@ -0,0 +1,16 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2022 by 4am/qkumba
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/DITHER.SLOWSTAR",plain
|
||||
*=$6000
|
||||
|
||||
!source "src/fx/fx.hgr.precomputed.1bit.a"
|
||||
|
||||
+FX_INITONCE_1BIT CoordinatesFile, Start
|
||||
Start
|
||||
+FX_PRECOMPUTED_1BIT_DITHER Coordinates1Bit, EndCoordinates1Bit
|
||||
|
||||
CoordinatesFile
|
||||
!byte 17
|
||||
!text "FX/SLOW.STAR.DATA"
|
16
src/fx/fx.hgr.dither.snowflake.a
Normal file
16
src/fx/fx.hgr.dither.snowflake.a
Normal file
@ -0,0 +1,16 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2022 by 4am/qkumba
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/DITHER.SNOWFLAK",plain
|
||||
*=$6000
|
||||
|
||||
!source "src/fx/fx.hgr.precomputed.1bit.a"
|
||||
|
||||
+FX_INITONCE_1BIT CoordinatesFile, Start
|
||||
Start
|
||||
+FX_PRECOMPUTED_1BIT_DITHER Coordinates1Bit, EndCoordinates1Bit
|
||||
|
||||
CoordinatesFile
|
||||
!byte 17
|
||||
!text "FX/SNOWFLAKE.DATA"
|
16
src/fx/fx.hgr.dither.soft.iris.a
Normal file
16
src/fx/fx.hgr.dither.soft.iris.a
Normal file
@ -0,0 +1,16 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2022 by 4am/qkumba
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/DITHER.SOFTIRIS",plain
|
||||
*=$6000
|
||||
|
||||
!source "src/fx/fx.hgr.precomputed.2bit.a"
|
||||
|
||||
+FX_INITONCE_2BIT CoordinatesFile, Start
|
||||
Start
|
||||
+FX_PRECOMPUTED_2BIT_DITHER Coordinates2Bit, EndCoordinates2Bit
|
||||
|
||||
CoordinatesFile
|
||||
!byte 17
|
||||
!text "FX/SOFT.IRIS.DATA"
|
16
src/fx/fx.hgr.dither.star.a
Normal file
16
src/fx/fx.hgr.dither.star.a
Normal file
@ -0,0 +1,16 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2022 by 4am/qkumba
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/DITHER.STAR",plain
|
||||
*=$6000
|
||||
|
||||
!source "src/fx/fx.hgr.precomputed.2bit.a"
|
||||
|
||||
+FX_INITONCE_2BIT CoordinatesFile, Start
|
||||
Start
|
||||
+FX_PRECOMPUTED_2BIT_DITHER Coordinates2Bit, EndCoordinates2Bit
|
||||
|
||||
CoordinatesFile
|
||||
!byte 12
|
||||
!text "FX/STAR.DATA"
|
16
src/fx/fx.hgr.dither.wavy.iris.a
Normal file
16
src/fx/fx.hgr.dither.wavy.iris.a
Normal file
@ -0,0 +1,16 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2022 by 4am/qkumba
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/DITHER.WAVYIRIS",plain
|
||||
*=$6000
|
||||
|
||||
!source "src/fx/fx.hgr.precomputed.2bit.a"
|
||||
|
||||
+FX_INITONCE_2BIT CoordinatesFile, Start
|
||||
Start
|
||||
+FX_PRECOMPUTED_2BIT_DITHER Coordinates2Bit, EndCoordinates2Bit
|
||||
|
||||
CoordinatesFile
|
||||
!byte 17
|
||||
!text "FX/WAVY.IRIS.DATA"
|
@ -1,5 +1,5 @@
|
||||
;license:MIT
|
||||
;(c) 2019 by 4am
|
||||
;(c) 2019-2022 by 4am
|
||||
;
|
||||
copymasks = $0200 ; $100 bytes but sparse, index is 0..6 but in high 3 bits, so $00, $20, $40, $60, $80, $A0, $C0
|
||||
mirror_copymasks = $0201
|
||||
@ -8,6 +8,10 @@ hgrlomirror = $BD40 ; $C0 bytes
|
||||
mirror_cols = $BE00 ; $28 bytes
|
||||
hgr1hi = $BE40 ; $C0 bytes
|
||||
hgr1himirror = $BF40 ; $C0 bytes
|
||||
; the next 3 addresses should all be on the same page
|
||||
evenrow_masks = $8500 ; $28 bytes (for dithering)
|
||||
oddrow_masks = $8528 ; $28 bytes (for dithering)
|
||||
no_masks = $8550 ; $28 bytes (for dithering)
|
||||
Coordinates1Bit= $8600 ; $3481 bytes ($3480 on disk + 1 byte EOF marker)
|
||||
EndCoordinates1Bit=Coordinates1Bit+$3480
|
||||
|
||||
@ -101,7 +105,7 @@ EndCoordinates1Bit=Coordinates1Bit+$3480
|
||||
inc <input
|
||||
beq +
|
||||
jmp .loop
|
||||
+ bit $c000
|
||||
+ bit KBD
|
||||
bmi +
|
||||
inc <input+1
|
||||
jmp .loop
|
||||
@ -116,7 +120,7 @@ EndCoordinates1Bit=Coordinates1Bit+$3480
|
||||
plp
|
||||
bne +
|
||||
dec input+1
|
||||
bit $c000
|
||||
bit KBD
|
||||
bpl .loop
|
||||
bmi ++
|
||||
+ jmp .loop
|
||||
@ -331,7 +335,142 @@ mirror_dest2=*+1
|
||||
+INC_INPUT_AND_LOOP InputLoop
|
||||
}
|
||||
end
|
||||
!if * and 1 {
|
||||
!byte 0 ;align 2 but avoids the fake allocation bug if it was aligned already
|
||||
}
|
||||
|
||||
!macro FX_PRECOMPUTED_1BIT_DITHER .coords, .endcoords {
|
||||
+BUILD_DITHER_MASKS dither_masks, evenrow_masks, oddrow_masks, no_masks
|
||||
+BUILD_HGR_LOOKUP_TABLES hgrlo, hgr1hi
|
||||
+BUILD_HGR_MIRROR_LOOKUP_TABLES hgrlomirror, hgr1himirror
|
||||
+BUILD_MIRROR_COLS mirror_cols
|
||||
+BUILD_SPARSE_BITMASKS copymasks, mirror_copymasks
|
||||
|
||||
; phase 1 - in reverse, with additional masking
|
||||
+COPY_TO_0 start, end
|
||||
|
||||
; set up starting coordinate for reading coordinates in reverse order
|
||||
+LDADDR .endcoords-2
|
||||
sta <input
|
||||
sty <input+1
|
||||
|
||||
; set up EOF marker to stop reading coordinates in reverse order
|
||||
lda #$80
|
||||
sta .coords-2
|
||||
|
||||
; set up logic to advance to next coordinates in reverse order
|
||||
ldx #(next2_end-next2_start-1)
|
||||
- lda next2_start, x
|
||||
sta <next, x
|
||||
dex
|
||||
bpl -
|
||||
|
||||
jsr InputLoop
|
||||
|
||||
bit KBD
|
||||
bmi start
|
||||
|
||||
; phase 2 - in order, without additional masking
|
||||
+COPY_TO_0 start, end
|
||||
|
||||
; redirect additional masking pointers to an array that contains #$FFs (so no masking)
|
||||
lda #<no_masks
|
||||
sta <evenrow_ptr
|
||||
sta <oddrow_ptr
|
||||
|
||||
jmp InputLoop
|
||||
start
|
||||
!pseudopc 0 {
|
||||
Exit1Bit rts
|
||||
evenrow_ptr
|
||||
!word evenrow_masks
|
||||
oddrow_ptr
|
||||
!word oddrow_masks
|
||||
InputLoop
|
||||
ldy #0
|
||||
input=*+1
|
||||
ldx .coords ; first value: HGR row (only 0..95 will be in input array)
|
||||
bmi Exit1Bit ; if > 127 then we're done
|
||||
+ROW_X_TO_BASE_ADDRESSES
|
||||
+ROW_X_TO_MIRROR_ADDRESSES
|
||||
|
||||
iny
|
||||
lda (<input), y
|
||||
+HIGH_3_LOW_5 input
|
||||
|
||||
; main 1x2 block in top-left quadrant
|
||||
src1=*+1
|
||||
lda $FDFD, y
|
||||
eor (<dest1), y
|
||||
and copymasks, x
|
||||
and (<evenrow_ptr), y
|
||||
eor (<dest1), y
|
||||
dest1=*+1
|
||||
sta $FDFD, y
|
||||
src2=*+1
|
||||
lda $FDFD, y
|
||||
eor (<dest2), y
|
||||
and copymasks, x
|
||||
and (<oddrow_ptr), y
|
||||
eor (<dest2), y
|
||||
dest2=*+1
|
||||
sta $FDFD, y
|
||||
|
||||
; corresponding 1x2 block in top-right quadrant (same row, opposite column)
|
||||
lda mirror_cols, y
|
||||
tay
|
||||
+COPY_BIT_DITHER src1, dest1, mirror_copymasks, evenrow_ptr
|
||||
+COPY_BIT_DITHER src2, dest2, mirror_copymasks, oddrow_ptr
|
||||
|
||||
; corresponding 1x2 block in bottom-right quadrant (opposite row, opposite column)
|
||||
mirror_src1=*+1
|
||||
lda $FDFD, y
|
||||
eor (<mirror_dest1), y
|
||||
and mirror_copymasks, x
|
||||
and (<oddrow_ptr), y
|
||||
eor (<mirror_dest1), y
|
||||
mirror_dest1=*+1
|
||||
sta $FDFD, y
|
||||
mirror_src2=*+1
|
||||
lda $FDFD, y
|
||||
eor (<mirror_dest2), y
|
||||
and mirror_copymasks, x
|
||||
and (<evenrow_ptr), y
|
||||
eor (<mirror_dest2), y
|
||||
mirror_dest2=*+1
|
||||
sta $FDFD, y
|
||||
|
||||
; corresponding 1x2 block in bottom-left quadrant (opposite row, original column)
|
||||
lda mirror_cols, y
|
||||
tay
|
||||
+COPY_BIT_DITHER mirror_src1, mirror_dest1, copymasks, oddrow_ptr
|
||||
+COPY_BIT_DITHER mirror_src2, mirror_dest2, copymasks, evenrow_ptr
|
||||
|
||||
next
|
||||
inc <input
|
||||
inc <input
|
||||
bne +
|
||||
bit KBD
|
||||
bmi ++
|
||||
inc <input+1
|
||||
+ jmp InputLoop
|
||||
++ rts
|
||||
}
|
||||
end
|
||||
|
||||
next2_start
|
||||
!pseudopc next {
|
||||
lda <input
|
||||
php
|
||||
dec <input
|
||||
dec <input
|
||||
plp
|
||||
bne +
|
||||
dec <input+1
|
||||
bit KBD
|
||||
bmi ++
|
||||
+ jmp InputLoop
|
||||
++ rts
|
||||
}
|
||||
next2_end
|
||||
|
||||
+DITHER_MASK_DATA
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2020 by 4am
|
||||
;(c) 2019-2022 by 4am
|
||||
;
|
||||
copymasks = $0200 ; $100 bytes but sparse, index is 0..4 but in high 3 bits, so $00, $20, $40, $60, $80
|
||||
mirror_copymasks = $0201
|
||||
@ -8,7 +8,12 @@ hgrlomirror = $BD40 ; $C0 bytes
|
||||
mirror_cols = $BE00 ; $28 bytes
|
||||
hgr1hi = $BE40 ; $C0 bytes
|
||||
hgr1himirror = $BF40 ; $C0 bytes
|
||||
; the next 3 addresses should all be on the same page
|
||||
evenrow_masks = $8000 ; $28 bytes (used for dithering)
|
||||
oddrow_masks = $8028 ; $28 bytes (used for dithering)
|
||||
no_masks = $8050 ; $28 bytes (used for dithering)
|
||||
Coordinates2Bit= $8100 ; $3C01 bytes ($3C00 on disk + 1 byte as EOF)
|
||||
EndCoordinates2Bit = Coordinates2Bit + $3C00
|
||||
|
||||
!source "src/fx/macros.a"
|
||||
|
||||
@ -92,7 +97,7 @@ InitOnce
|
||||
+LOAD_FILE_AT .CoordinatesFile, Coordinates2Bit
|
||||
+READ_RAM1_WRITE_RAM1
|
||||
lda #$00
|
||||
sta Coordinates2Bit + $3C00
|
||||
sta EndCoordinates2Bit
|
||||
}
|
||||
|
||||
!macro FX_REVERSE_2BIT {
|
||||
@ -100,9 +105,9 @@ InitOnce
|
||||
sty $f0
|
||||
lda #>Coordinates2Bit
|
||||
sta $f1
|
||||
lda #<(Coordinates2Bit + $3C00 - 2)
|
||||
lda #<(EndCoordinates2Bit - 2)
|
||||
sta $f2
|
||||
lda #>(Coordinates2Bit + $3C00 - 2)
|
||||
lda #>(EndCoordinates2Bit - 2)
|
||||
sta $f3
|
||||
|
||||
ldx #$1E ; #$3C/2
|
||||
@ -305,13 +310,134 @@ dest2=*+1
|
||||
|
||||
inc <input
|
||||
bne InputLoop
|
||||
bit $c000
|
||||
bit KBD
|
||||
bmi Exit2Bit
|
||||
inc <input+1
|
||||
bne InputLoop ; always branches
|
||||
}
|
||||
end
|
||||
!if * and 1 {
|
||||
!byte 0 ;align 2 but avoids the fake allocation bug if it was aligned already
|
||||
}
|
||||
|
||||
!macro FX_PRECOMPUTED_2BIT_DITHER .coords, .endcoords {
|
||||
+BUILD_DITHER_MASKS dither_masks, evenrow_masks, oddrow_masks, no_masks
|
||||
+BUILD_HGR_LOOKUP_TABLES hgrlo, hgr1hi
|
||||
+BUILD_MIRROR_COLS mirror_cols
|
||||
+BUILD_SPARSE_BITMASKS_2BIT copymasks, mirror_copymasks
|
||||
|
||||
; phase 1 - in reverse, with additional masking (dithering)
|
||||
jsr copytozp
|
||||
|
||||
; set up starting coordinate for reading coordinates in reverse order
|
||||
+LDADDR .endcoords-2
|
||||
sta <input
|
||||
sty <input+1
|
||||
|
||||
; set up EOF marker to stop reading coordinates in reverse order
|
||||
lda #$00
|
||||
sta .coords-2
|
||||
|
||||
; set up logic to advance to next coordinates in reverse order
|
||||
ldx #(next2_end-next2_start-1)
|
||||
- lda next2_start, x
|
||||
sta <next, x
|
||||
dex
|
||||
bpl -
|
||||
|
||||
jsr InputLoop
|
||||
|
||||
bit KBD
|
||||
bmi start
|
||||
|
||||
; phase 2 - in order, without additional masking
|
||||
jsr copytozp
|
||||
|
||||
; redirect additional masking pointers to an array that contains #$FFs (so no dithering)
|
||||
lda #<no_masks
|
||||
sta <evenrow_ptr
|
||||
sta <oddrow_ptr
|
||||
|
||||
jmp InputLoop
|
||||
|
||||
copytozp
|
||||
+COPY_TO_0 start, end
|
||||
start
|
||||
!pseudopc 0 {
|
||||
Exit2Bit rts
|
||||
evenrow_ptr
|
||||
!word evenrow_masks
|
||||
oddrow_ptr
|
||||
!word oddrow_masks
|
||||
InputLoop
|
||||
ldy #0
|
||||
input=*+1
|
||||
ldx .coords ; first value: HGR row + 1
|
||||
beq Exit2Bit ; if 0 then we're done
|
||||
+ROW_X_TO_2BIT_BASE_ADDRESSES
|
||||
|
||||
iny
|
||||
lda (<input), y
|
||||
+HIGH_3_LOW_5 input
|
||||
|
||||
; main 2x2 block in left half
|
||||
src1=*+1
|
||||
lda $FDFD, y
|
||||
eor (<dest1), y
|
||||
and copymasks, x
|
||||
and (<evenrow_ptr), y
|
||||
eor (<dest1), y
|
||||
dest1=*+1
|
||||
sta $FDFD, y
|
||||
src2=*+1
|
||||
lda $FDFD, y
|
||||
eor (<dest2), y
|
||||
and copymasks, x
|
||||
and (<oddrow_ptr), y
|
||||
eor (<dest2), y
|
||||
dest2=*+1
|
||||
sta $FDFD, y
|
||||
|
||||
; corresponding 2x2 block in right half (same row, opposite column)
|
||||
lda mirror_cols, y
|
||||
tay
|
||||
lda (src1), y
|
||||
eor (dest1), y
|
||||
and mirror_copymasks, x
|
||||
and (<evenrow_ptr), y
|
||||
eor (dest1), y
|
||||
sta (dest1), y
|
||||
|
||||
lda (src2), y
|
||||
eor (dest2), y
|
||||
and mirror_copymasks, x
|
||||
and (<oddrow_ptr), y
|
||||
eor (dest2), y
|
||||
sta (dest2), y
|
||||
|
||||
next
|
||||
inc <input
|
||||
inc <input
|
||||
bne InputLoop
|
||||
bit KBD
|
||||
bmi Exit2Bit
|
||||
inc <input+1
|
||||
bne InputLoop ; always branches
|
||||
}
|
||||
end
|
||||
|
||||
next2_start
|
||||
!pseudopc next {
|
||||
lda <input
|
||||
php
|
||||
dec <input
|
||||
dec <input
|
||||
plp
|
||||
bne InputLoop
|
||||
dec <input+1
|
||||
bit KBD
|
||||
bpl InputLoop
|
||||
rts
|
||||
}
|
||||
next2_end
|
||||
|
||||
+DITHER_MASK_DATA
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
;license:MIT
|
||||
;(c) 2019-2020 by 4am
|
||||
;(c) 2019-2022 by 4am
|
||||
;
|
||||
|
||||
copymasks = $0200 ; $100 bytes but sparse, index is 0..7 but in high 3 bits, so $00, $20, $40...
|
||||
@ -12,10 +12,18 @@ hgrlo3c = $BD00 ; $80 bytes
|
||||
hgrhi3a = $BD80 ; $80 bytes
|
||||
hgrhi3b = $BE00 ; $80 bytes
|
||||
hgrhi3c = $BE80 ; $80 bytes
|
||||
dither1_lo = $6900 ; $80 bytes
|
||||
dither2_lo = $6980 ; $80 bytes
|
||||
dither3_lo = $6A00 ; $80 bytes
|
||||
; the next 3 addresses should all be on the same page
|
||||
evenrow_masks = $6A80 ; $28 bytes (for dithering)
|
||||
oddrow_masks = $6AA8 ; $28 bytes (for dithering)
|
||||
no_masks = $6AD0 ; $28 bytes (for dithering)
|
||||
Coordinates3Bit= $6B00 ; pixel data is $5001 bytes ($5000 on disk + 1 byte as EOF marker)
|
||||
; and for optimization we only support loading external files page-aligned
|
||||
; and $BC00+ is used by the 3bit macros for data tables
|
||||
; so we load at $6B00 and waste $FF bytes at $BB01+ but it's okay
|
||||
EndCoordinates3Bit = Coordinates3Bit + $5000
|
||||
|
||||
!source "src/fx/macros.a"
|
||||
|
||||
@ -279,13 +287,159 @@ dest3=*+1
|
||||
|
||||
inc <input
|
||||
bne InputLoop
|
||||
bit $c000
|
||||
bit KBD
|
||||
bmi Exit3Bit
|
||||
inc <input+1
|
||||
bne InputLoop ; always branches
|
||||
}
|
||||
end
|
||||
!if * and 1 {
|
||||
!byte 0 ;align 2 but avoids the fake allocation bug if it was aligned already
|
||||
}
|
||||
|
||||
!macro FX_PRECOMPUTED_3BIT_DITHER .coords, .endcoords {
|
||||
+BUILD_DITHER_MASKS dither_masks, evenrow_masks, oddrow_masks, no_masks
|
||||
+BUILD_3BIT_HGR_LOOKUP_TABLES
|
||||
+BUILD_EXTRA_COLS
|
||||
+BUILD_SPARSE_BITMASKS_3BIT
|
||||
|
||||
; phase 1 - in reverse, with additional masking
|
||||
+COPY_TO_0 start, end
|
||||
|
||||
; set up starting coordinate for reading coordinates in reverse order
|
||||
+LDADDR .endcoords-2
|
||||
sta <input
|
||||
sty <input+1
|
||||
|
||||
; set up EOF marker to stop reading coordinates in reverse order
|
||||
lda #$80
|
||||
sta .coords-2
|
||||
|
||||
; set up logic to advance to next coordinates in reverse order
|
||||
ldx #(next2_end-next2_start-1)
|
||||
- lda next2_start, x
|
||||
sta <next, x
|
||||
dex
|
||||
bpl -
|
||||
|
||||
; set up pointers to dither mask pointers so even rows do even-row dithering and odd rows do odd-row dithering
|
||||
ldx #$7F
|
||||
- lda #<evenrow_masks
|
||||
sta dither1_lo, x
|
||||
sta dither2_lo-1, x
|
||||
sta dither3_lo, x
|
||||
lda #<oddrow_masks
|
||||
sta dither1_lo-1, x
|
||||
sta dither2_lo, x
|
||||
sta dither3_lo-1, x
|
||||
dex
|
||||
dex
|
||||
bpl -
|
||||
jsr InputLoop
|
||||
|
||||
bit KBD
|
||||
bmi start
|
||||
|
||||
; phase 2 - in order, without additional masking
|
||||
+COPY_TO_0 start, end
|
||||
|
||||
; set up pointers to dither mask pointers so all rows do no dithering
|
||||
ldx #$7F
|
||||
- lda #<no_masks
|
||||
sta dither1_lo, x
|
||||
sta dither2_lo, x
|
||||
sta dither3_lo, x
|
||||
dex
|
||||
bpl -
|
||||
jmp InputLoop
|
||||
start
|
||||
!pseudopc 0 {
|
||||
Exit3Bit rts
|
||||
dither1_ptr
|
||||
!word evenrow_masks
|
||||
dither2_ptr
|
||||
!word oddrow_masks
|
||||
dither3_ptr
|
||||
!word evenrow_masks
|
||||
InputLoop
|
||||
ldy #0
|
||||
input=*+1
|
||||
lda .coords
|
||||
bmi Exit3Bit ; if high bit is 1 then we're done
|
||||
cmp #$40
|
||||
php
|
||||
tax
|
||||
lda dither1_lo, x
|
||||
sta dither1_ptr
|
||||
lda dither2_lo, x
|
||||
sta dither2_ptr
|
||||
lda dither3_lo, x
|
||||
sta dither3_ptr
|
||||
+ROW_X_TO_3BIT_BASE_ADDRESSES
|
||||
|
||||
iny
|
||||
lda (<input), y
|
||||
and #%11100000
|
||||
tax
|
||||
eor (<input), y
|
||||
plp
|
||||
bcc +
|
||||
tay
|
||||
lda extra_cols, y
|
||||
+ tay
|
||||
|
||||
; 2x3 block
|
||||
src1=*+1
|
||||
lda $FDFD, y
|
||||
eor (<dest1), y
|
||||
and copymasks, x
|
||||
and (dither1_ptr), y
|
||||
eor (<dest1), y
|
||||
dest1=*+1
|
||||
sta $FDFD, y
|
||||
src2=*+1
|
||||
lda $FDFD, y
|
||||
eor (<dest2), y
|
||||
and copymasks, x
|
||||
and (dither2_ptr), y
|
||||
eor (<dest2), y
|
||||
dest2=*+1
|
||||
sta $FDFD, y
|
||||
src3=*+1
|
||||
lda $FDFD, y
|
||||
eor (<dest3), y
|
||||
and copymasks, x
|
||||
and (dither3_ptr), y
|
||||
eor (<dest3), y
|
||||
dest3=*+1
|
||||
sta $FDFD, y
|
||||
|
||||
next
|
||||
inc <input
|
||||
inc <input
|
||||
bne +
|
||||
bit KBD
|
||||
bmi ++
|
||||
inc <input+1
|
||||
+ jmp InputLoop
|
||||
++ rts
|
||||
|
||||
}
|
||||
end
|
||||
|
||||
next2_start
|
||||
!pseudopc next {
|
||||
lda <input
|
||||
php
|
||||
dec <input
|
||||
dec <input
|
||||
plp
|
||||
bne +
|
||||
dec <input+1
|
||||
bit KBD
|
||||
bmi ++
|
||||
+ jmp InputLoop
|
||||
++ rts
|
||||
}
|
||||
next2_end
|
||||
|
||||
+DITHER_MASK_DATA
|
||||
}
|
||||
|
72
src/fx/fx.hgr.thin.bar.dissolve.a
Normal file
72
src/fx/fx.hgr.thin.bar.dissolve.a
Normal file
@ -0,0 +1,72 @@
|
||||
;license:MIT
|
||||
;(c) 2022 by 4am
|
||||
;
|
||||
!cpu 6502
|
||||
!to "build/FX.INDEXED/THIN.DISSOLVE",plain
|
||||
*=$6000
|
||||
|
||||
row1 = $fe
|
||||
row2 = $ff
|
||||
src = $3c
|
||||
dst = $26
|
||||
|
||||
lda #$00
|
||||
sta row1
|
||||
lda #$BF
|
||||
sta row2
|
||||
@loop lda row1
|
||||
jsr HGRCalc
|
||||
ldy #$27
|
||||
- tya
|
||||
and #$03
|
||||
tax
|
||||
lda (src),y
|
||||
eor (dst),y ; merge source and destination bits
|
||||
and mask1,x ; 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
|
||||
dey
|
||||
bpl -
|
||||
lda row2
|
||||
jsr HGRCalc
|
||||
ldy #$27
|
||||
- tya
|
||||
and #$03
|
||||
tax
|
||||
lda (src),y
|
||||
eor (dst),y
|
||||
and mask3,x
|
||||
eor (dst),y
|
||||
sta (dst),y
|
||||
dey
|
||||
bpl -
|
||||
lda #$30
|
||||
jsr WaitForKeyWithTimeout
|
||||
bmi @exit
|
||||
!if 0 {
|
||||
ldx mask1
|
||||
ldy mask3
|
||||
stx mask3
|
||||
sty mask1
|
||||
ldx mask2
|
||||
ldy mask4
|
||||
stx mask4
|
||||
sty mask2
|
||||
}
|
||||
inc row1
|
||||
dec row2
|
||||
lda row1
|
||||
cmp #$C0
|
||||
bne @loop
|
||||
@exit rts
|
||||
|
||||
!source "src/wait.a"
|
||||
!source "src/fx/fx.hgr.common.a"
|
||||
+HGR_CALC_ROUTINES
|
||||
|
||||
mask1 !byte %10110011
|
||||
mask2 !byte %11100110
|
||||
mask3 !byte %11001100
|
||||
mask4 !byte %10011001
|
||||
!byte %10110011
|
||||
!byte %11100110
|
@ -62,6 +62,22 @@
|
||||
bne -
|
||||
}
|
||||
|
||||
!macro BUILD_DITHER_MASKS .dither_masks, .evenrow_masks, .oddrow_masks, .no_masks {
|
||||
ldy #$28
|
||||
-- ldx #$03
|
||||
- dey
|
||||
lda .dither_masks, x
|
||||
sta .evenrow_masks, y
|
||||
lda .dither_masks+2, x
|
||||
sta .oddrow_masks, y
|
||||
lda #$FF
|
||||
sta .no_masks, y
|
||||
dex
|
||||
bpl -
|
||||
tya
|
||||
bne --
|
||||
}
|
||||
|
||||
!macro HGR_CALC {
|
||||
; in: A = HGR row (0x00..0xBF)
|
||||
; out: A/X clobbered
|
||||
@ -126,6 +142,25 @@
|
||||
sta (.dest1),y ; write the result
|
||||
}
|
||||
|
||||
!macro COPY_BIT_DITHER .src1, .dest1, .copymasks, .dithermaskptr {
|
||||
lda (.src1),y
|
||||
eor (.dest1),y ; merge source and destination bits
|
||||
and .copymasks,x ; isolate the bits to replace, zero the rest
|
||||
and (.dithermaskptr),y
|
||||
eor (.dest1),y ; unmerge source and destination bits, leaves 'to keep' destination bits intact
|
||||
sta (.dest1),y ; write the result
|
||||
}
|
||||
|
||||
!macro DITHER_MASK_DATA {
|
||||
dither_masks
|
||||
!byte %10110011
|
||||
!byte %11100110
|
||||
!byte %11001100
|
||||
!byte %10011001
|
||||
!byte %10110011
|
||||
!byte %11100110
|
||||
}
|
||||
|
||||
!macro COPY_BIT_ZP .src1, .dest1, .zpcopymask {
|
||||
lda (.src1),y
|
||||
eor (.dest1),y ; merge source and destination bits
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11942238
|
||||
!be24 11953057
|
||||
!le16 5108
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11892590
|
||||
!be24 11902980
|
||||
!le16 5405
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11831498
|
||||
!be24 11841888
|
||||
!le16 3769
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11844696
|
||||
!be24 11855086
|
||||
!le16 4189
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11861141
|
||||
!be24 11871531
|
||||
!le16 5321
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11880041
|
||||
!be24 11890431
|
||||
!le16 5949
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11947346
|
||||
!be24 11958165
|
||||
!le16 410
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11948100
|
||||
!be24 11958919
|
||||
!le16 448
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11948548
|
||||
!be24 11959367
|
||||
!le16 303
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11900141
|
||||
!be24 11910960
|
||||
!le16 1242
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11947832
|
||||
!be24 11958651
|
||||
!le16 67
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11942179
|
||||
!be24 11952998
|
||||
!le16 59
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11940645
|
||||
!be24 11951464
|
||||
!le16 1437
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11926120
|
||||
!be24 11936939
|
||||
!le16 537
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11897995
|
||||
!le16 2146
|
||||
!be24 11908385
|
||||
!le16 2575
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11901741
|
||||
!be24 11912560
|
||||
!le16 6600
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11947756
|
||||
!be24 11958575
|
||||
!le16 76
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11942082
|
||||
!be24 11952901
|
||||
!le16 97
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11947899
|
||||
!be24 11958718
|
||||
!le16 201
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11926657
|
||||
!be24 11937476
|
||||
!le16 4436
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11931093
|
||||
!be24 11941912
|
||||
!le16 1658
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11932751
|
||||
!be24 11943570
|
||||
!le16 1053
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11933804
|
||||
!be24 11944623
|
||||
!le16 3294
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11937098
|
||||
!be24 11947917
|
||||
!le16 2954
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11940052
|
||||
!be24 11950871
|
||||
!le16 479
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11940531
|
||||
!be24 11951350
|
||||
!le16 114
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11948851
|
||||
!be24 11959670
|
||||
!le16 2370
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11913371
|
||||
!be24 11924190
|
||||
!le16 4383
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11917754
|
||||
!be24 11928573
|
||||
!le16 2221
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11885990
|
||||
!be24 11896380
|
||||
!le16 6600
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11822943
|
||||
!be24 11833333
|
||||
!le16 8555
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11835267
|
||||
!be24 11845657
|
||||
!le16 9429
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11848885
|
||||
!be24 11859275
|
||||
!le16 12256
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11866462
|
||||
!be24 11876852
|
||||
!le16 13579
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11901383
|
||||
!be24 11912202
|
||||
!le16 358
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11908341
|
||||
!be24 11919160
|
||||
!le16 5030
|
||||
|
@ -4,5 +4,5 @@
|
||||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 11919975
|
||||
!be24 11930794
|
||||
!le16 6145
|
||||
|
Loading…
Reference in New Issue
Block a user