4cade/src/fx/fx.shr.radial.a

175 lines
4.1 KiB
Plaintext
Raw Normal View History

2021-12-17 03:07:35 +00:00
;license:MIT
;(c) 2021 by 4am
;
!cpu 6502
!to "build/FX.INDEXED/SHR.RADIAL",plain
*=$A000
shrlo = $201 ; $C8 bytes
CoordinatesFileCopy = $2C8; $11 bytes
shrhi = $301 ; $C8 bytes
mirror_cols = $1E29 ; $A0 bytes but clobbers $28 bytes before
mirror_rows = $1F01 ; $C7 bytes
coords = $9F00 ; $1F41 bytes
last_coords = coords+$1F3E
!source "src/constants.a"
!source "src/macros.a"
!source "src/fx/fx.shr.common.a"
start
ldx #$C6
ldy #$00
- tya
sta mirror_cols-$27, x
sta mirror_rows-1, x
iny
dex
bne -
+BUILD_SHR_LOOKUP_TABLES shrlo, shrhi
;X=0
+COPY_SCB_AND_PALETTES
;WRITEAUXMEM active
+WRITE_MAIN
;X=0
- lda start, x
sta $9D00, x
lda start+$100, x
sta $9E00, x
inx
bne -
jmp stage2
!pseudopc *-$300 {
stage2
ldx CoordinatesFile ; LOAD_FILE_AT macro destroys pathname
- lda CoordinatesFile, x ; so we need to make a copy
sta CoordinatesFileCopy, x
dex
bpl -
+READ_RAM2_WRITE_RAM2
+LOAD_FILE_AT CoordinatesFileCopy, coords
;WRITEMAINMEM active after LOAD_FILE_AT macro
lda #$80
sta coords-2
ldx #(endzp-startzp) ; copy loop code to zero page
- lda startzp-1, x
sta $FF, x
dex
bne -
+WRITE_AUX
jsr LoopBL
+WRITE_MAIN
ldx #$00
- lda $9D00, x ; copy main code back to $A000
sta start, x ; so it can be called again if necessary
lda $9E00, x
sta start+$100, x
inx
bne -
+READ_RAM1_WRITE_RAM1
rts
startzp
!pseudopc 0 {
; bottom-left quadrant (opposite row, original column, reverse input order)
LoopBL ldx last_coords ; SMC
bmi LoopTL
lda mirror_rows, x
tax
ldy #1
lda (LoopBL+1), y
tay
jsr copy
lda <LoopBL+1
php
dec <LoopBL+1
dec <LoopBL+1
plp
bne LoopBL
dec <LoopBL+2
bit $C000
bpl LoopBL
rts
; top-left quadrant (original row, original column, original input order)
LoopTL ldx coords ; SMC
bmi LoopTR
ldy #1
lda (LoopTL+1), y
tay
jsr copy
inc <LoopTL+1
inc <LoopTL+1
bne LoopTL
inc <LoopTL+2
bit $C000
bpl LoopTL
rts
; top-right quadrant (original row, opposite column, reverse input order)
LoopTR ldx last_coords ; SMC
bmi LoopBR
ldy #1
lda (LoopTR+1), y
tay
lda mirror_cols, y
tay
jsr copy
lda <LoopTR+1
php
dec <LoopTR+1
dec <LoopTR+1
plp
bne LoopTR
dec <LoopTR+2
bit $C000
bpl LoopTR
rts
; bottom-right quadrant (opposite row, opposite column, original input order)
LoopBR ldx coords ; SMC
bmi exit
lda mirror_rows, x
tax
ldy #1
lda (LoopBR+1), y
tay
lda mirror_cols, y
tay
jsr copy
inc <LoopBR+1
inc <LoopBR+1
bne LoopBR
inc <LoopBR+2
bit $C000
bpl LoopBR
exit rts
copy
lda shrlo, x
sta <src1+1
lda shrhi, x
sta <src1+2
lda shrlo+1, x
sta <src2+1
lda shrhi+1, x
sta <src2+2
src1 lda $FD00, y ; SMC high byte
sta (src1+1), y
src2 lda $FD00, y ; SMC high byte
sta (src2+1), y
rts
}
endzp
}
CoordinatesFile
!byte 18
!text "FX/SHR.RADIAL.DATA"