.global _bopti_asm_mono_scsp
.global _bopti_asm_mono_alpha_scsp

# REGISTER ALLOCATION:
# r0: layer
# r1: -
# r2: (temp)
# r3: vram longword
# --
# r4: vram pointer
# r5: layer pointer
# r6: mask
# r7: -(x&31)

_bopti_asm_mono_scsp:
	# Read layer longword and shift it
	mov.l	@r5, r0
	shld	r7, r0

	# Clear the target VRAM and unwanted image data
	mov.l	@r4, r3
	and	r6, r0
	not	r6, r6
	and	r6, r3

	# Blit and return
	or	r0, r3
	rts
	mov.l	r3, @r4

# REGISTER ALLOCATION:
# r0: AND layer
# r1: OR layer
# r2: (temp)
# r3: vram longword
# --
# r4: vram pointer
# r5: layer pointer
# r6: mask
# r7: -(x&31)

_bopti_asm_mono_alpha_scsp:
	# Read layer longwords and shift them
	mov.l	@r5, r0
	mov.l	@(4,r5), r1
	shld	r7, r0
	shld	r7, r1

	# Apply masks to clear layer data
	and	r6, r0
	and	r6, r1

	# Blit to VRAM
	mov.l	@r4, r3
	not	r0, r0
	and	r0, r3
	or	r1, r3
	rts
	mov.l	r3, @r4