mirror of
https://github.com/blondie7575/GSCats.git
synced 2024-11-22 06:31:48 +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
|
|
|