*
* SetRGB32 patch
*

* LoadRGB32()
* SetRGB32()
* SetRGB32CM()

				include "exec/macros.i"
				include "lvos/exec_lib.i"

				xdef	_pSTART
				xdef	_pEND

				xdef	_setfnc


_pSTART

******************************************************************
_pLoadRGB32		movem.l	d0-d7/a0-a6,-(sp)
				tst.l	a1
				beq		.lend
				moveq	#-1,d1				; test 0xffffffff
.lnt			clr.l	d0
				move.w	(a1),d0				; read 'count'
				beq		.lend				; table over
				subq.l	#1,d0				; fix counter
				addq.l	#4,a1				; skip 'count.w'&'first color.w'
.lc				cmp.l	(a1),d1				; RED
				bne		.lec
				cmp.l	4(a1),d1			; GREEN
				bne		.lec
				cmp.l	8(a1),d1			; BLUE
				bne		.lec
				sub.l	#$01010101,(a1)		; max white -> 0xfefefefe
				sub.l	#$01010101,4(a1)
				sub.l	#$01010101,8(a1)
.lec			addq.l	#8,a1				; next item
				addq.l	#4,a1
				dbra	d0,.lc
				bra		.lnt
.lend			movem.l	(sp)+,d0-d7/a0-a6
				jmp		([_pOldLoadRGB32,pc])
;-----------------------------------------------------------------
_pOldLoadRGB32	dc.l	0

******************************************************************
_pSetRGB32		movem.l	d0/d4-d7/a0-a6,-(sp)
				moveq	#-1,d0
				cmp.l	d0,d1			; RED
				bne		.send
				cmp.l	d0,d2			; GREEN
				bne		.send
				cmp.l	d0,d3			; BLUE
				bne		.send
				sub.l	#$01010101,d1	; max white -> 'fe's
				sub.l	#$01010101,d2
				sub.l	#$01010101,d3
.send			movem.l	(sp)+,d0/d4-d7/a0-a6
				jmp		([_pOldSetRGB32,pc])
;-----------------------------------------------------------------
_pOldSetRGB32	dc.l	0

******************************************************************
_pSetRGB32CM	movem.l	d0/d4-d7/a0-a6,-(sp)
				moveq	#-1,d0
				cmp.l	d0,d1			; RED
				bne		.scend
				cmp.l	d0,d2			; GREEN
				bne		.scend
				cmp.l	d0,d3			; BLUE
				bne		.scend
				sub.l	#$01010101,d1	; max white -> 'fe's
				sub.l	#$01010101,d2
				sub.l	#$01010101,d3
.scend			movem.l	(sp)+,d0/d4-d7/a0-a6
				jmp		([_pOldSetRGB32CM,pc])
;-----------------------------------------------------------------
_pOldSetRGB32CM	dc.l	0

_pEND

* a0: mem
* a1: gfxbase
_setfnc			movem.l	d0-d7/a0-a6,-(sp)
				move.l	#_pEND,d0
				sub.l	#_pSTART,d0
				move.l	#_pSTART,d1
				move.l	d1,a2
				moveq	#0,d1
.ck				move.b	(a2,d1.l),(a0,d1.l)
				addq.l	#1,d1
				dbra	d0,.ck
				move.l	$00000004,a6
				move.l	a1,a5
				move.l	a0,a3

				move.l	a5,a1
				move.l	a3,d0
				add.l	#_pLoadRGB32-_pSTART,d0
				move.w	#-882,a0
				jsr	_LVOSetFunction(a6)
				move.l	d0,_pOldLoadRGB32-_pSTART(a3)

				move.l	a5,a1
				move.l	a3,d0
				add.l	#_pSetRGB32-_pSTART,d0
				move.w	#-852,a0
				jsr	_LVOSetFunction(a6)
				move.l	d0,_pOldSetRGB32-_pSTART(a3)

				move.l	a5,a1
				move.l	a3,d0
				add.l	#_pSetRGB32CM-_pSTART,d0
				move.w	#-996,a0
				jsr	_LVOSetFunction(a6)
				move.l	d0,_pOldSetRGB32CM-_pSTART(a3)

				movem.l	(sp)+,d0-d7/a0-a6
				rts
