mirror of
https://github.com/a2-4am/4sports.git
synced 2024-09-30 16:55:03 +00:00
136 lines
3.6 KiB
Plaintext
136 lines
3.6 KiB
Plaintext
;license:MIT
|
|
;(c) 2019-2022 by 4am
|
|
;
|
|
|
|
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_DHGR dithermasks
|
|
+BUILD_SPARSE_BITMASKS_1BIT_DHGR copymasks, mirror_copymasks
|
|
+BUILD_HGR_LOOKUP_TABLES_X_IS_ALREADY_0 hgrlo, hgr1hi
|
|
+BUILD_HGR_MIRROR_LOOKUP_TABLES hgrlomirror, hgr1himirror
|
|
+BUILD_MIRROR_COLS_DHGR mirror_cols
|
|
+COPY_TO_AUXMEM $60, 4
|
|
|
|
+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)
|
|
clc
|
|
- lda copymasks, x
|
|
beq +
|
|
+COPY_BIT_DITHER src1, dest1, copymasks, evenrow_ptr
|
|
+COPY_BIT_DITHER src2, dest2, copymasks, oddrow_ptr
|
|
+ bcs +
|
|
sta $C003
|
|
sta $C005
|
|
sec
|
|
bcs -
|
|
+ sta $C002
|
|
sta $C004
|
|
|
|
; bottom-right quadrant (opposite row, opposite column, original input order)
|
|
lda mirror_cols,y
|
|
tay
|
|
clc
|
|
- lda mirror_copymasks, x
|
|
beq +
|
|
+COPY_BIT_DITHER mirror_src1, mirror_dest1, mirror_copymasks, oddrow_ptr
|
|
+COPY_BIT_DITHER mirror_src2, mirror_dest2, mirror_copymasks, evenrow_ptr
|
|
+ bcs +
|
|
sta $C003
|
|
sta $C005
|
|
sec
|
|
bcs -
|
|
+ sta $C002
|
|
sta $C004
|
|
|
|
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)
|
|
clc
|
|
- lda copymasks, x
|
|
beq +
|
|
+COPY_BIT_DITHER mirror_src1, mirror_dest1, copymasks, oddrow_ptr
|
|
+COPY_BIT_DITHER mirror_src2, mirror_dest2, copymasks, evenrow_ptr
|
|
+ bcs +
|
|
sta $C003
|
|
sta $C005
|
|
sec
|
|
bcs -
|
|
+ sta $C002
|
|
sta $C004
|
|
|
|
; top-right quadrant (same row, opposite column, reverse input order)
|
|
lda mirror_cols,y
|
|
tay
|
|
clc
|
|
- lda mirror_copymasks, x
|
|
beq +
|
|
+COPY_BIT_DITHER src1, dest1, mirror_copymasks, evenrow_ptr
|
|
+COPY_BIT_DITHER src2, dest2, mirror_copymasks, oddrow_ptr
|
|
+ bcs +
|
|
sta $C003
|
|
sta $C005
|
|
sec
|
|
bcs -
|
|
+ sta $C002
|
|
sta $C004
|
|
|
|
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
|