	.include        "global.s"


	.area	_CODE

_set_bkg_palette::
	PUSH	BC

	LDA	HL,7(SP)	; Skip return address and registers
	LD	B,(HL)		; BC = rgb_data
	DEC	HL
	LD	C,(HL)
	DEC	HL
	LD	E,(HL)		; E = nb_palettes
	DEC	HL
	LD	L,(HL)		; L = first_palette

	LD	A,E		; A = nb_palettes
	AND	#0xFF
	JR	NZ,1$
	POP	BC
	RET
1$:
	DEC	A
	AND	#0x07
	INC	A
	ADD	A		; A *= 8
	ADD	A
	ADD	A
	LD	E,A		; DE = nb_palettes
	XOR	A
	LD	D,A

        LD      A,L		; L = first_palette
	XOR	#0x07
	ADD	A,A		; A *= 8
	ADD	A,A
	ADD	A,A
	LD	L,A		; A = first BCPS data
2$:
	LDH	A,(.STAT)
	AND	#0x02
	JR	NZ,2$

	LD	A,L
	LDH	(.BCPS),A
	LD	A,(BC)
	LDH	(.BCPD),A

	INC	BC		; next rgb_data
	INC	HL		; next BCPS
	DEC	E
	LD	A,D
	OR	E
	JR	NZ,2$

	POP	BC
	RET

_set_sprite_palette::
	PUSH	BC

	LDA	HL,7(SP)	; Skip return address and registers
	LD	B,(HL)		; BC = rgb_data
	DEC	HL
	LD	C,(HL)
	DEC	HL
	LD	E,(HL)		; E = nb_palettes
	DEC	HL
	LD	L,(HL)		; L = first_palette

	LD	A,E		; A = nb_palettes
	AND	#0xFF
	JR	NZ,1$
	POP	BC
	RET
1$:
	DEC	A
	AND	#0x07
	INC	A
	ADD	A		; A *= 8
	ADD	A
	ADD	A
	LD	E,A		; DE = nb_palettes
	XOR	A
	LD	D,A

        LD      A,L		; L = first_palette
	XOR	#0x07
	ADD	A,A		; A *= 8
	ADD	A,A
	ADD	A,A
	LD	L,A		; A = first OCPS data
2$:
	LDH	A,(.STAT)
	AND	#0x02
	JR	NZ,2$

	LD	A,L
	LDH	(.OCPS),A
	LD	A,(BC)
	LDH	(.OCPD),A

	INC	BC		; next rgb_data
	INC	HL		; next OCPS
	DEC	E
	LD	A,D
	OR	E
	JR	NZ,2$

	POP	BC
	RET
