mirror of
https://github.com/blondie7575/GSCats.git
synced 2024-11-25 10:30:49 +00:00
279 lines
3.8 KiB
ArmAsm
279 lines
3.8 KiB
ArmAsm
|
skyPalette:
|
||
|
.word $06af,$06af,$06af,$06af,$06af,$06af,$06af,$06af,$06af,$06af,$06af,$06af,$06af,$06af,$06af,$06af
|
||
|
|
||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
; BORDER_COLOR
|
||
|
;
|
||
|
; Trashes A
|
||
|
;
|
||
|
.macro BORDER_COLOR color
|
||
|
SAVE_AXY
|
||
|
BITS8
|
||
|
lda BORDERCOLOR
|
||
|
and #$f0
|
||
|
ora color
|
||
|
sta BORDERCOLOR
|
||
|
BITS16
|
||
|
RESTORE_AXY
|
||
|
.endmacro
|
||
|
|
||
|
|
||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
; setPalette
|
||
|
; Set all colors in a palette from memory
|
||
|
; PARAML0 = Pointer to 32 color bytes
|
||
|
; A = Palette index
|
||
|
;
|
||
|
setPalette:
|
||
|
SAVE_XY
|
||
|
|
||
|
asl
|
||
|
asl
|
||
|
asl
|
||
|
asl
|
||
|
asl
|
||
|
BITS8A
|
||
|
sta setPaletteLoop_SMC+1
|
||
|
BITS16
|
||
|
ldx #0
|
||
|
ldy #0
|
||
|
|
||
|
setPaletteLoop:
|
||
|
lda (PARAML0),y
|
||
|
setPaletteLoop_SMC:
|
||
|
sta $e19e00,x ; Self-modifying code!
|
||
|
|
||
|
iny
|
||
|
iny
|
||
|
inx
|
||
|
inx
|
||
|
cpx #32
|
||
|
bne setPaletteLoop
|
||
|
|
||
|
RESTORE_XY
|
||
|
rts
|
||
|
|
||
|
|
||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
; setPaletteColor
|
||
|
; Set a single color in a palette
|
||
|
; PARAML0 = 0:Color index
|
||
|
; PARAML1 = 0:R:G:B
|
||
|
; A = Palette index
|
||
|
;
|
||
|
setPaletteColor:
|
||
|
phx
|
||
|
asl
|
||
|
asl
|
||
|
asl
|
||
|
asl
|
||
|
asl
|
||
|
sta SCRATCHL
|
||
|
lda PARAML0
|
||
|
asl
|
||
|
clc
|
||
|
adc SCRATCHL
|
||
|
tax
|
||
|
lda PARAML1
|
||
|
sta $e19e00,x
|
||
|
plx
|
||
|
rts
|
||
|
|
||
|
|
||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
; getPaletteColor
|
||
|
; Reads a single color from a palette
|
||
|
; Y = Color index
|
||
|
; A = Palette index
|
||
|
; A => Color value 0:R:G:B
|
||
|
;
|
||
|
getPaletteColor:
|
||
|
SAVE_XY
|
||
|
asl
|
||
|
asl
|
||
|
asl
|
||
|
asl
|
||
|
asl
|
||
|
sta SCRATCHL
|
||
|
tya
|
||
|
asl
|
||
|
clc
|
||
|
adc SCRATCHL
|
||
|
tax
|
||
|
lda $e19e00,x
|
||
|
RESTORE_XY
|
||
|
rts
|
||
|
|
||
|
|
||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
; paletteFade
|
||
|
;
|
||
|
; PARAML2 = targetPalette
|
||
|
;
|
||
|
paletteFade:
|
||
|
ldx #$f
|
||
|
|
||
|
paletteFadeTimeLoop:
|
||
|
ldy #$f
|
||
|
|
||
|
paletteFadeColorLoop:
|
||
|
lda #0
|
||
|
jsr getPaletteColor
|
||
|
sta SCRATCHL2
|
||
|
|
||
|
phy ; Find target red
|
||
|
tya
|
||
|
asl
|
||
|
tay
|
||
|
lda (PARAML2),y
|
||
|
cmp SCRATCHL2
|
||
|
beq paletteFadeColorLoopSkipColor ; Entire color already matches
|
||
|
and #$0F00
|
||
|
sta SCRATCHL
|
||
|
ply
|
||
|
|
||
|
lda SCRATCHL2 ; Fade red channel
|
||
|
and #$0F00
|
||
|
cmp SCRATCHL
|
||
|
beq paletteFadeColorLoopG
|
||
|
bcs paletteFadeColorLoopDecR
|
||
|
lda SCRATCHL2
|
||
|
clc
|
||
|
adc #$0100
|
||
|
sta SCRATCHL2
|
||
|
bra paletteFadeColorLoopG
|
||
|
|
||
|
paletteFadeColorLoopDecR:
|
||
|
lda SCRATCHL2
|
||
|
sec
|
||
|
sbc #$0100
|
||
|
sta SCRATCHL2
|
||
|
|
||
|
paletteFadeColorLoopG:
|
||
|
phy ; Find target green
|
||
|
tya
|
||
|
asl
|
||
|
tay
|
||
|
lda (PARAML2),y
|
||
|
and #$00F0
|
||
|
sta SCRATCHL
|
||
|
ply
|
||
|
|
||
|
lda SCRATCHL2 ; Fade green channel
|
||
|
and #$00F0
|
||
|
cmp SCRATCHL
|
||
|
beq paletteFadeColorLoopB
|
||
|
bcs paletteFadeColorLoopDecG
|
||
|
lda SCRATCHL2
|
||
|
clc
|
||
|
adc #$0010
|
||
|
sta SCRATCHL2
|
||
|
bra paletteFadeColorLoopB
|
||
|
|
||
|
paletteFadeColorLoopDecG:
|
||
|
lda SCRATCHL2
|
||
|
sec
|
||
|
sbc #$0010
|
||
|
sta SCRATCHL2
|
||
|
|
||
|
paletteFadeColorLoopB:
|
||
|
phy ; Find target blue
|
||
|
tya
|
||
|
asl
|
||
|
tay
|
||
|
lda (PARAML2),y
|
||
|
and #$000F
|
||
|
sta SCRATCHL
|
||
|
ply
|
||
|
|
||
|
lda SCRATCHL2 ; Fade blue channel
|
||
|
and #$000F
|
||
|
cmp SCRATCHL
|
||
|
beq paletteFadeColorLoopStore
|
||
|
bcs paletteFadeColorLoopDecB
|
||
|
inc SCRATCHL2
|
||
|
bra paletteFadeColorLoopStore
|
||
|
|
||
|
paletteFadeColorLoopDecB:
|
||
|
dec SCRATCHL2
|
||
|
|
||
|
paletteFadeColorLoopStore:
|
||
|
sty PARAML0
|
||
|
lda SCRATCHL2
|
||
|
sta PARAML1
|
||
|
lda #0
|
||
|
jsr setPaletteColor
|
||
|
bra paletteFadeColorLoopDone
|
||
|
|
||
|
paletteFadeColorLoopSkipColor:
|
||
|
ply
|
||
|
|
||
|
paletteFadeColorLoopDone:
|
||
|
dey
|
||
|
bpl paletteFadeColorLoopNext
|
||
|
jsr delayFade
|
||
|
jsr delayFade
|
||
|
jsr delayFade
|
||
|
jsr delayFade
|
||
|
jsr delayFade
|
||
|
dex
|
||
|
bpl paletteFadeTimeLoopNext
|
||
|
|
||
|
rts
|
||
|
|
||
|
paletteFadeColorLoopNext:
|
||
|
jmp paletteFadeColorLoop
|
||
|
paletteFadeTimeLoopNext:
|
||
|
jmp paletteFadeTimeLoop
|
||
|
|
||
|
|
||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
; Vertical blank checkers
|
||
|
;
|
||
|
|
||
|
; The Brutal Deluxe version, taken from LemminGS
|
||
|
;
|
||
|
nextVBL:
|
||
|
lda #75
|
||
|
pha
|
||
|
nextVBL0:
|
||
|
lda $e0c02e
|
||
|
and #$7f
|
||
|
cmp 1,s
|
||
|
blt nextVBL0
|
||
|
cmp #100
|
||
|
bge nextVBL0
|
||
|
pla
|
||
|
waitVBL:
|
||
|
lda $e0c018
|
||
|
bpl waitVBL
|
||
|
rts
|
||
|
|
||
|
|
||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
; delayFade
|
||
|
; Sleeps for a teeny bit
|
||
|
;
|
||
|
delayFade:
|
||
|
SAVE_AXY
|
||
|
|
||
|
ldy #$01 ; Loop a bit
|
||
|
delayFadeOuter:
|
||
|
ldx #$ff
|
||
|
delayFadeInner:
|
||
|
nop
|
||
|
nop
|
||
|
nop
|
||
|
nop
|
||
|
nop
|
||
|
nop
|
||
|
nop
|
||
|
dex
|
||
|
bne delayFadeInner
|
||
|
dey
|
||
|
bne delayFadeOuter
|
||
|
|
||
|
RESTORE_AXY
|
||
|
rts
|
||
|
|