
; Storm C Compiler
; TEMP:Mesa_2_5/amiga_stormc/src/gl/ADisp_SWFS.c
	mc68030
	mc68881
	XREF	_printf
	XREF	_exit
	XREF	_SWFSD_read_index_pixels_LUT8
	XREF	_SWFSD_read_color_pixels_BGRA
	XREF	_SWFSD_read_color_pixels_ARGB
	XREF	_SWFSD_read_color_pixels_RGB16PC
	XREF	_SWFSD_read_color_pixels_RGB16
	XREF	_SWFSD_read_color_pixels_LUT8
	XREF	_SWFSD_read_index_span_LUT8
	XREF	_SWFSD_read_color_span_BGRA
	XREF	_SWFSD_read_color_span_ARGB
	XREF	_SWFSD_read_color_span_RGB16PC
	XREF	_SWFSD_read_color_span_RGB16
	XREF	_SWFSD_read_color_span_LUT8
	XREF	_SWFSD_write_index_pixels_ARGB
	XREF	_SWFSD_write_index_pixels_RGB16
	XREF	_SWFSD_write_index_pixels_LUT8
	XREF	_SWFSD_write_index_span_ARGB
	XREF	_SWFSD_write_index_span_RGB16
	XREF	_SWFSD_write_index_span_LUT8
	XREF	_SWFSD_write_mono_pixels_ARGB
	XREF	_SWFSD_write_mono_pixels_RGB16
	XREF	_SWFSD_write_mono_pixels_LUT8
	XREF	_SWFSD_write_color_pixels_BGRA
	XREF	_SWFSD_write_color_pixels_ARGB
	XREF	_SWFSD_write_color_pixels_RGB16PC
	XREF	_SWFSD_write_color_pixels_RGB16
	XREF	_SWFSD_write_color_pixels_LUT8
	XREF	_SWFSD_write_mono_span_ARGB
	XREF	_SWFSD_write_mono_span_RGB16
	XREF	_SWFSD_write_mono_span_LUT8
	XREF	_SWFSD_write_color_span_BGRA
	XREF	_SWFSD_write_color_span_ARGB
	XREF	_SWFSD_write_color_span_RGB16PC
	XREF	_SWFSD_write_color_span_RGB16
	XREF	_SWFSD_write_color_span_LUT8
	XREF	_ChunkyToPlanar
	XREF	_FreeTransTable
	XREF	_InitTransTable
	XREF	_DisposeTransTable
	XREF	_CreateTransTable
	XREF	_FindNearestPen
	XREF	_EvalPen
	XREF	_CC
	XREF	_SysBase
	XREF	_IntuitionBase
	XREF	_GfxBase
	XREF	_UtilityBase
	XREF	_CyberGfxBase
	XREF	_std__in
	XREF	_std__out
	XREF	_std__err
	XREF	_LastError

	SECTION "_SWFSDriver_set_buffer:0",CODE


;GLboolean SWFSDriver_set_buffer( GLcontext *ctx,GLenum mode )
	XDEF	_SWFSDriver_set_buffer
_SWFSDriver_set_buffer
L265
	moveq	#1,d0
	rts

	SECTION "_SWFSDriver_resize:0",CODE

	rts

;void SWFSDriver_resize( GLcontext *ctx,GLuint *width, GLuint *height)
	XDEF	_SWFSDriver_resize
_SWFSDriver_resize
L276	EQU	-$98
	link	a5,#L276
	movem.l	d2/d3/a2/a6,-(a7)
	movem.l	$8(a5),a0/a6
	move.l	$10(a5),a1
L267
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),-4(a5)
;    *width=c->width;
	move.l	-4(a5),a0
	move.l	$58(a0),d0
	move.l	d0,(a6)
;    *height=c->height;
	move.l	-4(a5),a0
	move.l	$5C(a0),d0
	move.l	d0,(a1)
;    if (c->rp == NULL)
	move.l	-4(a5),a2
	move.l	$34(a2),a0
	cmp.w	#0,a0
	bne.b	L269
L268
	movem.l	(a7)+,d2/d3/a2/a6
	unlk	a5
	rts
L269
;    if (c->flags & FLAG_DIRECTRENDER)
	move.l	-4(a5),a0
	move.l	$10(a0),d0
	and.l	#$10,d0
	beq	L275
L270
;    if(!((c->width  == (c->rp->Layer->bounds.MaxX-c->rp->Layer->
	move.l	-4(a5),a0
	move.l	$58(a0),d2
	move.l	-4(a5),a2
	move.l	$34(a2),a0
	move.l	(a0),a0
	add.w	#$10,a0
	move.w	4(a0),d0
	ext.l	d0
	move.l	-4(a5),a2
	move.l	$34(a2),a0
	move.l	(a0),a0
	add.w	#$10,a0
	move.w	(a0),d1
	ext.l	d1
	sub.l	d1,d0
	move.l	-4(a5),a0
	move.l	$60(a0),d1
	sub.l	d1,d0
	move.l	-4(a5),a0
	move.l	$68(a0),d1
	sub.l	d1,d0
	addq.l	#1,d0
	cmp.l	d0,d2
	bne.b	L272
L271
	move.l	-4(a5),a0
	move.l	$5C(a0),d2
	move.l	-4(a5),a2
	move.l	$34(a2),a0
	move.l	(a0),a0
	add.w	#$10,a0
	move.w	6(a0),d0
	ext.l	d0
	move.l	-4(a5),a2
	move.l	$34(a2),a0
	move.l	(a0),a0
	add.w	#$10,a0
	move.w	2(a0),d1
	ext.l	d1
	sub.l	d1,d0
	move.l	-4(a5),a0
	move.l	$64(a0),d1
	sub.l	d1,d0
	move.l	-4(a5),a0
	move.l	$6C(a0),d1
	sub.l	d1,d0
	addq.l	#1,d0
	cmp.l	d0,d2
	beq	L275
L272
;	    c->RealWidth =c->rp->Layer->bounds.MaxX-c->rp->Layer->boun
	move.l	-4(a5),a2
	move.l	$34(a2),a0
	move.l	(a0),a0
	add.w	#$10,a0
	move.w	4(a0),d0
	ext.l	d0
	move.l	-4(a5),a2
	move.l	$34(a2),a0
	move.l	(a0),a0
	add.w	#$10,a0
	move.w	(a0),d1
	ext.l	d1
	sub.l	d1,d0
	addq.l	#1,d0
	move.l	-4(a5),a0
	move.l	d0,$70(a0)
;	    c->RealHeight=c->rp->Layer->bounds.MaxY-c->rp->Layer->boun
	move.l	-4(a5),a2
	move.l	$34(a2),a0
	move.l	(a0),a0
	add.w	#$10,a0
	move.w	6(a0),d0
	ext.l	d0
	move.l	-4(a5),a2
	move.l	$34(a2),a0
	move.l	(a0),a0
	add.w	#$10,a0
	move.w	2(a0),d1
	ext.l	d1
	sub.l	d1,d0
	addq.l	#1,d0
	move.l	-4(a5),a0
	move.l	d0,$74(a0)
;	    *width=c->width = c->RealWidth-c->left-c->right;
	move.l	-4(a5),a0
	move.l	$70(a0),d0
	move.l	-4(a5),a0
	move.l	$60(a0),d1
	sub.l	d1,d0
	move.l	-4(a5),a0
	move.l	$68(a0),d1
	sub.l	d1,d0
	move.l	-4(a5),a0
	move.l	d0,$58(a0)
	move.l	d0,(a6)
;	    *height=c->height = c->RealHeight-c->bottom-c->top;
	move.l	-4(a5),a0
	move.l	$74(a0),d0
	move.l	-4(a5),a0
	move.l	$64(a0),d1
	sub.l	d1,d0
	move.l	-4(a5),a0
	move.l	$6C(a0),d1
	sub.l	d1,d0
	move.l	-4(a5),a0
	move.l	d0,$5C(a0)
	move.l	d0,(a1)
;	    FreeBitMap(c->back_rp->BitMap);
	move.l	-4(a5),a1
	move.l	$24(a1),a0
	move.l	4(a0),a0
	move.l	_GfxBase,a6
	jsr	-$39C(a6)
;	    if (!(c->back_rp->BitMap = AllocBitMap(c->width,c->height,
	move.l	-4(a5),a1
	move.l	$34(a1),a0
	move.l	4(a0),a0
	move.l	-4(a5),a1
	move.l	$48(a1),d2
	move.l	-4(a5),a1
	move.l	$5C(a1),d1
	move.l	-4(a5),a1
	move.l	$58(a1),d0
	moveq	#0,d3
	move.l	_GfxBase,a6
	jsr	-$396(a6)
	move.l	-4(a5),a1
	move.l	$24(a1),a0
	move.l	d0,4(a0)
	bne.b	L274
L273
;		printf("Panic! Not enough memory for resizing!\n");
	move.l	#L266,-(a7)
	jsr	_printf
	addq.w	#4,a7
;		exit(0);
	clr.l	-(a7)
	jsr	_exit
	addq.w	#4,a7
L274
;	    SetAPen(c->back_rp,0);
	move.l	-4(a5),a0
	move.l	$24(a0),a1
	moveq	#0,d0
	move.l	_GfxBase,a6
	jsr	-$156(a6)
;	    RectFill(c->back_rp,0,0,c->width-1,c->height-1);
	move.l	-4(a5),a0
	move.l	$5C(a0),d3
	subq.l	#1,d3
	move.l	-4(a5),a0
	move.l	$58(a0),d2
	subq.l	#1,d2
	move.l	-4(a5),a0
	move.l	$24(a0),a1
	moveq	#0,d0
	moveq	#0,d1
	move.l	_GfxBase,a6
	jsr	-$132(a6)
;	    c->bprow = GetCyberMapAttr(c->back_rp->BitMap,CYBRMATTR_XM
	move.l	-4(a5),a1
	move.l	$24(a1),a0
	move.l	4(a0),a0
	move.l	#$80000001,d0
	move.l	_CyberGfxBase,a6
	jsr	-$60(a6)
	move.l	-4(a5),a0
	move.l	d0,$50(a0)
;	    c->BackArray = (unsigned char *)GetCyberMapAttr(c->back_rp
	move.l	-4(a5),a1
	move.l	$24(a1),a0
	move.l	4(a0),a0
	move.l	#$80000003,d0
	move.l	_CyberGfxBase,a6
	jsr	-$60(a6)
	move.l	-4(a5),a1
	move.l	d0,$30(a1)
L275
	movem.l	(a7)+,d2/d3/a2/a6
	unlk	a5
	rts

L266
	dc.b	'Panic! Not enough memory for resizing!',$A,0

	SECTION "_SWFSD_clear_index_LUT8:0",CODE


;void SWFSD_clear_index_LUT8(GLcontext *ctx, GLuint index)
	XDEF	_SWFSD_clear_index_LUT8
_SWFSD_clear_index_LUT8
	move.l	$8(a7),d0
	move.l	4(a7),a0
L277
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a1
;    c->clearpixel = c->penconv[index];
	lea	$88(a1),a0
	add.l	d0,a0
	move.b	(a0),d0
	and.l	#$FF,d0
	move.l	d0,$18(a1)
	rts

	SECTION "_SWFSD_clear_index_RGB:0",CODE


;void SWFSD_clear_index_RGB(GLcontext *ctx, GLuint index)
	XDEF	_SWFSD_clear_index_RGB
_SWFSD_clear_index_RGB
	move.l	$8(a7),d0
	move.l	4(a7),a0
L278
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a1
;    c->clearpixel = c->ColorTable2[index];
	move.l	$84(a1),a0
	lea	0(a0,d0.l*4),a0
	move.l	(a0),d0
	move.l	d0,$18(a1)
	rts

	SECTION "_SWFSD_set_index_LUT8:0",CODE


;void SWFSD_set_index_LUT8(GLcontext *ctx, GLuint index)
	XDEF	_SWFSD_set_index_LUT8
_SWFSD_set_index_LUT8
	move.l	$8(a7),d0
	move.l	4(a7),a0
L279
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a1
;    c->pixel = c->penconv[index];
	lea	$88(a1),a0
	add.l	d0,a0
	move.b	(a0),d0
	and.l	#$FF,d0
	move.l	d0,$14(a1)
	rts

	SECTION "_SWFSD_set_index_RGB:0",CODE


;void SWFSD_set_index_RGB(GLcontext *ctx, GLuint index)
	XDEF	_SWFSD_set_index_RGB
_SWFSD_set_index_RGB
	move.l	$8(a7),d0
	move.l	4(a7),a0
L280
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a1
;    c->pixel = c->ColorTable2[index];
	move.l	$84(a1),a0
	lea	0(a0,d0.l*4),a0
	move.l	(a0),d0
	move.l	d0,$14(a1)
	rts

	SECTION "_SWFSD_clear_color_LUT8:0",CODE


;void SWFSD_clear_color_LUT8(GLcontext *ctx,
	XDEF	_SWFSD_clear_color_LUT8
_SWFSD_clear_color_LUT8
	movem.l	d2/a2,-(a7)
	move.b	$10(a7),d0
	move.b	$12(a7),d1
	move.b	$14(a7),d2
	move.l	$C(a7),a0
L281
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a2
;    c->clearpixel = EvalPen(c,r,g,b);
	move.b	d2,-(a7)
	move.b	d1,-(a7)
	move.b	d0,-(a7)
	move.l	a2,-(a7)
	jsr	_EvalPen
	add.w	#$A,a7
	move.l	d0,$18(a2)
	movem.l	(a7)+,d2/a2
	rts

	SECTION "_SWFSD_clear_color_RGB15:0",CODE


;void SWFSD_clear_color_RGB15(GLcontext *ctx,
	XDEF	_SWFSD_clear_color_RGB15
_SWFSD_clear_color_RGB15
	movem.l	d2/d3,-(a7)
	move.b	$14(a7),d0
	move.b	$12(a7),d1
	move.b	$10(a7),d2
	move.l	$C(a7),a0
L282
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    c->clearpixel = TC_RGB15(r,g,b);
	and.l	#$FF,d0
	moveq	#3,d3
	asr.l	d3,d0
	and.l	#$FF,d1
	moveq	#3,d3
	asr.l	d3,d1
	moveq	#5,d3
	asl.l	d3,d1
	or.l	d1,d0
	moveq	#0,d1
	move.b	d2,d1
	moveq	#3,d2
	asr.l	d2,d1
	moveq	#$A,d2
	asl.l	d2,d1
	or.l	d1,d0
	move.l	d0,$18(a0)
	movem.l	(a7)+,d2/d3
	rts

	SECTION "_SWFSD_clear_color_RGB15PC:0",CODE


;void SWFSD_clear_color_RGB15PC(GLcontext *ctx,
	XDEF	_SWFSD_clear_color_RGB15PC
_SWFSD_clear_color_RGB15PC
	movem.l	d2-d4,-(a7)
	move.b	$18(a7),d0
	move.b	$16(a7),d2
	move.b	$14(a7),d3
	move.l	$10(a7),a0
L283
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    c->clearpixel = TC_RGB15PC(r,g,b);
	and.l	#$FF,d0
	moveq	#3,d1
	asr.l	d1,d0
	moveq	#$8,d1
	asl.l	d1,d0
	moveq	#0,d1
	move.b	d2,d1
	moveq	#6,d4
	asr.l	d4,d1
	or.l	d1,d0
	moveq	#0,d1
	move.b	d2,d1
	moveq	#3,d2
	asr.l	d2,d1
	moveq	#$D,d2
	asl.l	d2,d1
	or.l	d1,d0
	moveq	#0,d1
	move.b	d3,d1
	moveq	#3,d2
	asr.l	d2,d1
	moveq	#2,d2
	asl.l	d2,d1
	or.l	d1,d0
	move.l	d0,$18(a0)
	movem.l	(a7)+,d2-d4
	rts

	SECTION "_SWFSD_clear_color_RGB16:0",CODE


;void SWFSD_clear_color_RGB16(GLcontext *ctx,
	XDEF	_SWFSD_clear_color_RGB16
_SWFSD_clear_color_RGB16
	movem.l	d2/d3,-(a7)
	move.b	$14(a7),d0
	move.b	$12(a7),d1
	move.b	$10(a7),d2
	move.l	$C(a7),a0
L284
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    c->clearpixel = TC_RGB16(r,g,b);
	and.l	#$FF,d0
	moveq	#3,d3
	asr.l	d3,d0
	and.l	#$FF,d1
	moveq	#2,d3
	asr.l	d3,d1
	moveq	#5,d3
	asl.l	d3,d1
	or.l	d1,d0
	moveq	#0,d1
	move.b	d2,d1
	moveq	#3,d2
	asr.l	d2,d1
	moveq	#$B,d2
	asl.l	d2,d1
	or.l	d1,d0
	move.l	d0,$18(a0)
	movem.l	(a7)+,d2/d3
	rts

	SECTION "_SWFSD_clear_color_RGB16PC:0",CODE


;void SWFSD_clear_color_RGB16PC(GLcontext *ctx,
	XDEF	_SWFSD_clear_color_RGB16PC
_SWFSD_clear_color_RGB16PC
	movem.l	d2-d4,-(a7)
	move.b	$18(a7),d0
	move.b	$16(a7),d2
	move.b	$14(a7),d3
	move.l	$10(a7),a0
L285
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    c->clearpixel = TC_RGB16PC(r,g,b);
	and.l	#$FF,d0
	moveq	#3,d1
	asr.l	d1,d0
	moveq	#$8,d1
	asl.l	d1,d0
	moveq	#0,d1
	move.b	d2,d1
	moveq	#5,d4
	asr.l	d4,d1
	or.l	d1,d0
	moveq	#0,d1
	move.b	d2,d1
	moveq	#2,d2
	asr.l	d2,d1
	moveq	#$D,d2
	asl.l	d2,d1
	or.l	d1,d0
	moveq	#0,d1
	move.b	d3,d1
	moveq	#3,d2
	asr.l	d2,d1
	moveq	#3,d2
	asl.l	d2,d1
	or.l	d1,d0
	move.l	d0,$18(a0)
	movem.l	(a7)+,d2-d4
	rts

	SECTION "_SWFSD_clear_color_BGR15PC:0",CODE


;void SWFSD_clear_color_BGR15PC(GLcontext *ctx,
	XDEF	_SWFSD_clear_color_BGR15PC
_SWFSD_clear_color_BGR15PC
	movem.l	d2-d4,-(a7)
	move.b	$14(a7),d0
	move.b	$16(a7),d2
	move.b	$18(a7),d3
	move.l	$10(a7),a0
L286
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    c->clearpixel = TC_BGR15PC(r,g,b);
	and.l	#$FF,d0
	moveq	#3,d1
	asr.l	d1,d0
	moveq	#$8,d1
	asl.l	d1,d0
	moveq	#0,d1
	move.b	d2,d1
	moveq	#6,d4
	asr.l	d4,d1
	or.l	d1,d0
	moveq	#0,d1
	move.b	d2,d1
	moveq	#3,d2
	asr.l	d2,d1
	moveq	#$D,d2
	asl.l	d2,d1
	or.l	d1,d0
	moveq	#0,d1
	move.b	d3,d1
	moveq	#3,d2
	asr.l	d2,d1
	moveq	#2,d2
	asl.l	d2,d1
	or.l	d1,d0
	move.l	d0,$18(a0)
	movem.l	(a7)+,d2-d4
	rts

	SECTION "_SWFSD_clear_color_BGR16PC:0",CODE


;void SWFSD_clear_color_BGR16PC(GLcontext *ctx,
	XDEF	_SWFSD_clear_color_BGR16PC
_SWFSD_clear_color_BGR16PC
	movem.l	d2-d4,-(a7)
	move.b	$14(a7),d0
	move.b	$16(a7),d2
	move.b	$18(a7),d3
	move.l	$10(a7),a0
L287
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    c->clearpixel = TC_BGR16PC(r,g,b);
	and.l	#$FF,d0
	moveq	#3,d1
	asr.l	d1,d0
	moveq	#$8,d1
	asl.l	d1,d0
	moveq	#0,d1
	move.b	d2,d1
	moveq	#5,d4
	asr.l	d4,d1
	or.l	d1,d0
	moveq	#0,d1
	move.b	d2,d1
	moveq	#2,d2
	asr.l	d2,d1
	moveq	#$D,d2
	asl.l	d2,d1
	or.l	d1,d0
	moveq	#0,d1
	move.b	d3,d1
	moveq	#3,d2
	asr.l	d2,d1
	moveq	#3,d2
	asl.l	d2,d1
	or.l	d1,d0
	move.l	d0,$18(a0)
	movem.l	(a7)+,d2-d4
	rts

	SECTION "_SWFSD_clear_color_ARGB:0",CODE


;void SWFSD_clear_color_ARGB(GLcontext *ctx,
	XDEF	_SWFSD_clear_color_ARGB
_SWFSD_clear_color_ARGB
	movem.l	d2-d4,-(a7)
	move.b	$16(a7),d0
	move.b	$18(a7),d1
	move.b	$1A(a7),d2
	move.b	$14(a7),d3
	move.l	$10(a7),a0
L288
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    c->clearpixel = b | (g << 8) | (r << 16) + (a << 24);
	and.l	#$FF,d1
	and.l	#$FF,d0
	moveq	#$8,d4
	asl.l	d4,d0
	or.l	d0,d1
	moveq	#0,d0
	move.b	d3,d0
	moveq	#$10,d3
	asl.l	d3,d0
	and.l	#$FF,d2
	moveq	#$18,d3
	asl.l	d3,d2
	add.l	d2,d0
	or.l	d0,d1
	move.l	d1,$18(a0)
	movem.l	(a7)+,d2-d4
	rts

	SECTION "_SWFSD_clear_color_BGRA:0",CODE


;void SWFSD_clear_color_BGRA(GLcontext *ctx,
	XDEF	_SWFSD_clear_color_BGRA
_SWFSD_clear_color_BGRA
	movem.l	d2-d4,-(a7)
	move.b	$14(a7),d0
	move.b	$1A(a7),d1
	move.b	$18(a7),d2
	move.b	$16(a7),d3
	move.l	$10(a7),a0
L289
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    c->clearpixel = a | (r << 8) | (g << 16) + (b << 24);
	and.l	#$FF,d1
	and.l	#$FF,d0
	moveq	#$8,d4
	asl.l	d4,d0
	or.l	d0,d1
	moveq	#0,d0
	move.b	d3,d0
	moveq	#$10,d3
	asl.l	d3,d0
	and.l	#$FF,d2
	moveq	#$18,d3
	asl.l	d3,d2
	add.l	d2,d0
	or.l	d0,d1
	move.l	d1,$18(a0)
	movem.l	(a7)+,d2-d4
	rts

	SECTION "_SWFSD_set_color_LUT8:0",CODE


;void SWFSD_set_color_LUT8(GLcontext *ctx,
	XDEF	_SWFSD_set_color_LUT8
_SWFSD_set_color_LUT8
	movem.l	d2/a2,-(a7)
	move.b	$10(a7),d0
	move.b	$12(a7),d1
	move.b	$14(a7),d2
	move.l	$C(a7),a0
L290
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a2
;    c->pixel = EvalPen(c,r,g,b);
	move.b	d2,-(a7)
	move.b	d1,-(a7)
	move.b	d0,-(a7)
	move.l	a2,-(a7)
	jsr	_EvalPen
	add.w	#$A,a7
	move.l	d0,$14(a2)
	movem.l	(a7)+,d2/a2
	rts

	SECTION "_SWFSD_set_color_RGB15:0",CODE


;void SWFSD_set_color_RGB15(GLcontext *ctx,
	XDEF	_SWFSD_set_color_RGB15
_SWFSD_set_color_RGB15
	movem.l	d2/d3,-(a7)
	move.b	$14(a7),d0
	move.b	$12(a7),d1
	move.b	$10(a7),d2
	move.l	$C(a7),a0
L291
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    c->pixel = TC_RGB15(r,g,b);
	and.l	#$FF,d0
	moveq	#3,d3
	asr.l	d3,d0
	and.l	#$FF,d1
	moveq	#3,d3
	asr.l	d3,d1
	moveq	#5,d3
	asl.l	d3,d1
	or.l	d1,d0
	moveq	#0,d1
	move.b	d2,d1
	moveq	#3,d2
	asr.l	d2,d1
	moveq	#$A,d2
	asl.l	d2,d1
	or.l	d1,d0
	move.l	d0,$14(a0)
	movem.l	(a7)+,d2/d3
	rts

	SECTION "_SWFSD_set_color_RGB15PC:0",CODE


;void SWFSD_set_color_RGB15PC(GLcontext *ctx,
	XDEF	_SWFSD_set_color_RGB15PC
_SWFSD_set_color_RGB15PC
	movem.l	d2-d4,-(a7)
	move.b	$18(a7),d0
	move.b	$16(a7),d2
	move.b	$14(a7),d3
	move.l	$10(a7),a0
L292
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    c->pixel = TC_RGB15PC(r,g,b);
	and.l	#$FF,d0
	moveq	#3,d1
	asr.l	d1,d0
	moveq	#$8,d1
	asl.l	d1,d0
	moveq	#0,d1
	move.b	d2,d1
	moveq	#6,d4
	asr.l	d4,d1
	or.l	d1,d0
	moveq	#0,d1
	move.b	d2,d1
	moveq	#3,d2
	asr.l	d2,d1
	moveq	#$D,d2
	asl.l	d2,d1
	or.l	d1,d0
	moveq	#0,d1
	move.b	d3,d1
	moveq	#3,d2
	asr.l	d2,d1
	moveq	#2,d2
	asl.l	d2,d1
	or.l	d1,d0
	move.l	d0,$14(a0)
	movem.l	(a7)+,d2-d4
	rts

	SECTION "_SWFSD_set_color_RGB16:0",CODE


;void SWFSD_set_color_RGB16(GLcontext *ctx,
	XDEF	_SWFSD_set_color_RGB16
_SWFSD_set_color_RGB16
	movem.l	d2/d3,-(a7)
	move.b	$14(a7),d0
	move.b	$12(a7),d1
	move.b	$10(a7),d2
	move.l	$C(a7),a0
L293
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    c->pixel = TC_RGB16(r,g,b);
	and.l	#$FF,d0
	moveq	#3,d3
	asr.l	d3,d0
	and.l	#$FF,d1
	moveq	#2,d3
	asr.l	d3,d1
	moveq	#5,d3
	asl.l	d3,d1
	or.l	d1,d0
	moveq	#0,d1
	move.b	d2,d1
	moveq	#3,d2
	asr.l	d2,d1
	moveq	#$B,d2
	asl.l	d2,d1
	or.l	d1,d0
	move.l	d0,$14(a0)
	movem.l	(a7)+,d2/d3
	rts

	SECTION "_SWFSD_set_color_RGB16PC:0",CODE


;void SWFSD_set_color_RGB16PC(GLcontext *ctx,
	XDEF	_SWFSD_set_color_RGB16PC
_SWFSD_set_color_RGB16PC
	movem.l	d2-d4,-(a7)
	move.b	$18(a7),d0
	move.b	$16(a7),d2
	move.b	$14(a7),d3
	move.l	$10(a7),a0
L294
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    c->pixel = TC_RGB16PC(r,g,b);
	and.l	#$FF,d0
	moveq	#3,d1
	asr.l	d1,d0
	moveq	#$8,d1
	asl.l	d1,d0
	moveq	#0,d1
	move.b	d2,d1
	moveq	#5,d4
	asr.l	d4,d1
	or.l	d1,d0
	moveq	#0,d1
	move.b	d2,d1
	moveq	#2,d2
	asr.l	d2,d1
	moveq	#$D,d2
	asl.l	d2,d1
	or.l	d1,d0
	moveq	#0,d1
	move.b	d3,d1
	moveq	#3,d2
	asr.l	d2,d1
	moveq	#3,d2
	asl.l	d2,d1
	or.l	d1,d0
	move.l	d0,$14(a0)
	movem.l	(a7)+,d2-d4
	rts

	SECTION "_SWFSD_set_color_BGR15PC:0",CODE


;void SWFSD_set_color_BGR15PC(GLcontext *ctx,
	XDEF	_SWFSD_set_color_BGR15PC
_SWFSD_set_color_BGR15PC
	movem.l	d2-d4,-(a7)
	move.b	$14(a7),d0
	move.b	$16(a7),d2
	move.b	$18(a7),d3
	move.l	$10(a7),a0
L295
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    c->pixel = TC_BGR15PC(r,g,b);
	and.l	#$FF,d0
	moveq	#3,d1
	asr.l	d1,d0
	moveq	#$8,d1
	asl.l	d1,d0
	moveq	#0,d1
	move.b	d2,d1
	moveq	#6,d4
	asr.l	d4,d1
	or.l	d1,d0
	moveq	#0,d1
	move.b	d2,d1
	moveq	#3,d2
	asr.l	d2,d1
	moveq	#$D,d2
	asl.l	d2,d1
	or.l	d1,d0
	moveq	#0,d1
	move.b	d3,d1
	moveq	#3,d2
	asr.l	d2,d1
	moveq	#2,d2
	asl.l	d2,d1
	or.l	d1,d0
	move.l	d0,$14(a0)
	movem.l	(a7)+,d2-d4
	rts

	SECTION "_SWFSD_set_color_BGR16PC:0",CODE


;void SWFSD_set_color_BGR16PC(GLcontext *ctx,
	XDEF	_SWFSD_set_color_BGR16PC
_SWFSD_set_color_BGR16PC
	movem.l	d2-d4,-(a7)
	move.b	$14(a7),d0
	move.b	$16(a7),d2
	move.b	$18(a7),d3
	move.l	$10(a7),a0
L296
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    c->pixel = TC_BGR16PC(r,g,b);
	and.l	#$FF,d0
	moveq	#3,d1
	asr.l	d1,d0
	moveq	#$8,d1
	asl.l	d1,d0
	moveq	#0,d1
	move.b	d2,d1
	moveq	#5,d4
	asr.l	d4,d1
	or.l	d1,d0
	moveq	#0,d1
	move.b	d2,d1
	moveq	#2,d2
	asr.l	d2,d1
	moveq	#$D,d2
	asl.l	d2,d1
	or.l	d1,d0
	moveq	#0,d1
	move.b	d3,d1
	moveq	#3,d2
	asr.l	d2,d1
	moveq	#3,d2
	asl.l	d2,d1
	or.l	d1,d0
	move.l	d0,$14(a0)
	movem.l	(a7)+,d2-d4
	rts

	SECTION "_SWFSD_set_color_ARGB:0",CODE


;void SWFSD_set_color_ARGB(GLcontext *ctx,
	XDEF	_SWFSD_set_color_ARGB
_SWFSD_set_color_ARGB
	movem.l	d2-d4,-(a7)
	move.b	$16(a7),d0
	move.b	$18(a7),d1
	move.b	$1A(a7),d2
	move.b	$14(a7),d3
	move.l	$10(a7),a0
L297
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    c->pixel = b | (g << 8) | (r << 16) + (a << 24);
	and.l	#$FF,d1
	and.l	#$FF,d0
	moveq	#$8,d4
	asl.l	d4,d0
	or.l	d0,d1
	moveq	#0,d0
	move.b	d3,d0
	moveq	#$10,d3
	asl.l	d3,d0
	and.l	#$FF,d2
	moveq	#$18,d3
	asl.l	d3,d2
	add.l	d2,d0
	or.l	d0,d1
	move.l	d1,$14(a0)
	movem.l	(a7)+,d2-d4
	rts

	SECTION "_SWFSD_set_color_BGRA:0",CODE


;void SWFSD_set_color_BGRA(GLcontext *ctx,
	XDEF	_SWFSD_set_color_BGRA
_SWFSD_set_color_BGRA
	movem.l	d2-d4,-(a7)
	move.b	$14(a7),d0
	move.b	$1A(a7),d1
	move.b	$18(a7),d2
	move.b	$16(a7),d3
	move.l	$10(a7),a0
L298
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    c->pixel = a | (r << 8) | (g << 16) + (b << 24);
	and.l	#$FF,d1
	and.l	#$FF,d0
	moveq	#$8,d4
	asl.l	d4,d0
	or.l	d0,d1
	moveq	#0,d0
	move.b	d3,d0
	moveq	#$10,d3
	asl.l	d3,d0
	and.l	#$FF,d2
	moveq	#$18,d3
	asl.l	d3,d2
	add.l	d2,d0
	or.l	d0,d1
	move.l	d1,$14(a0)
	movem.l	(a7)+,d2-d4
	rts

	SECTION "_SWFSD_clear_LUT8:0",CODE


;void SWFSD_clear_LUT8(GLcontext *ctx,GLboolean all, GLint x, GLint y
	XDEF	_SWFSD_clear_LUT8
_SWFSD_clear_LUT8
L322	EQU	-$88
	link	a5,#L322
	movem.l	d2-d6/a6,-(a7)
	movem.l	$16(a5),d2/d5
	move.b	$C(a5),d0
	move.l	$12(a5),d4
	move.l	$8(a5),a0
L299
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),-4(a5)
;    unsigned long color = c->clearpixel;
	move.l	-4(a5),a0
	move.l	$18(a0),d3
;    if (c->FrontArray == 0)
	move.l	-4(a5),a1
	move.l	$2C(a1),a0
	cmp.w	#0,a0
	bne	L318
L300
;	if (all)
	tst.b	d0
	beq.b	L308
L301
;	    long* buffer = (long *)c->BackArray;
	move.l	-4(a5),a1
	move.l	$30(a1),a0
;	    unsigned long col = color | (color << 8) | (color << 16) |
	move.l	d3,d1
	moveq	#$8,d0
	asl.l	d0,d1
	or.l	d3,d1
	move.l	d3,d0
	moveq	#$10,d2
	asl.l	d2,d0
	or.l	d0,d1
	move.l	d3,d0
	moveq	#$18,d2
	asl.l	d2,d0
	or.l	d0,d1
;	    rest = (c->height * c->width) & 0x03;
	move.l	-4(a5),a1
	move.l	$5C(a1),d4
	move.l	-4(a5),a1
	move.l	$58(a1),d0
	mulu.l	d0,d4
	and.l	#3,d4
;	    max = (c->height * c->width) >> 2;
	move.l	-4(a5),a1
	move.l	$5C(a1),d2
	move.l	-4(a5),a1
	move.l	$58(a1),d0
	mulu.l	d0,d2
	moveq	#2,d0
	lsr.l	d0,d2
;	    for (x=0;
	moveq	#0,d0
	bra.b	L303
L302
;		*buffer++ = col;
	move.l	a0,a1
	addq.w	#4,a0
	move.l	d1,(a1)
	addq.l	#1,d0
L303
	cmp.l	d2,d0
	blt.b	L302
L304
;	    for (x=0;
	moveq	#0,d0
	bra.b	L306
L305
;		*((char *)buffer)++ = color;
	move.b	d3,d1
	move.l	a0,a1
	addq.w	#1,a0
	move.b	d1,(a1)
	addq.l	#1,d0
L306
	cmp.l	d4,d0
	blt.b	L305
L307
	bra	L317
L308
;	    long* buffer = (long *)(c->BackArray +
	move.l	-4(a5),a1
	move.l	$30(a1),a0
	move.l	-4(a5),a1
	move.l	$5C(a1),d0
	sub.l	d4,d0
	sub.l	d5,d0
	move.l	-4(a5),a1
	move.l	$58(a1),d1
	mulu.l	d1,d0
	add.l	d0,a0
	move.l	$E(a5),d0
	add.l	d0,a0
;	    unsigned long col = color | (color << 8) | (color << 16) |
	move.l	d3,d4
	moveq	#$8,d0
	asl.l	d0,d4
	or.l	d3,d4
	move.l	d3,d0
	moveq	#$10,d1
	asl.l	d1,d0
	or.l	d0,d4
	move.l	d3,d0
	moveq	#$18,d1
	asl.l	d1,d0
	or.l	d0,d4
;	    int mod = c->width - width;
	move.l	-4(a5),a1
	move.l	$58(a1),-$28(a5)
	sub.l	d2,-$28(a5)
;	    ymax = height;
	move.l	d5,-$14(a5)
;	    xrest = width & 0x03;
	move.l	d2,d5
	and.l	#3,d5
;	    xmax = width >> 2;
	moveq	#2,d0
	asr.l	d0,d2
;	    for (y=0;
	clr.l	-$10(a5)
	bra.b	L316
L309
;		for (x=0;
	moveq	#0,d0
	bra.b	L311
L310
;		    *buffer++ = col;
	move.l	a0,a1
	addq.w	#4,a0
	move.l	d4,(a1)
	addq.l	#1,d0
L311
	cmp.l	d2,d0
	blt.b	L310
L312
;		for (x=0;
	moveq	#0,d0
	bra.b	L314
L313
;		    *((char *)buffer)++ = color;
	move.b	d3,d1
	move.l	a0,a1
	addq.w	#1,a0
	move.b	d1,(a1)
	addq.l	#1,d0
L314
	cmp.l	d5,d0
	blt.b	L313
L315
;		(char *)buffer += mod;
	move.l	-$28(a5),d0
	add.l	d0,a0
	addq.l	#1,-$10(a5)
L316
	move.l	-$10(a5),d0
	cmp.l	-$14(a5),d0
	blt.b	L309
L317
	bra	L321
L318
;	if (all)
	tst.b	d0
	beq.b	L320
L319
;	    SetAPen(c->back_rp,c->clearpixel);
	move.l	-4(a5),a0
	move.l	$18(a0),d0
	move.l	-4(a5),a0
	move.l	$24(a0),a1
	move.l	_GfxBase,a6
	jsr	-$156(a6)
;	    RectFill(c->back_rp,0,0,c->width-1,c->height-1);
	move.l	-4(a5),a0
	move.l	$5C(a0),d3
	subq.l	#1,d3
	move.l	-4(a5),a0
	move.l	$58(a0),d2
	subq.l	#1,d2
	move.l	-4(a5),a0
	move.l	$24(a0),a1
	moveq	#0,d0
	moveq	#0,d1
	move.l	_GfxBase,a6
	jsr	-$132(a6)
	bra.b	L321
L320
;	    SetAPen(c->back_rp,c->clearpixel);
	move.l	-4(a5),a0
	move.l	$18(a0),d0
	move.l	-4(a5),a0
	move.l	$24(a0),a1
	move.l	_GfxBase,a6
	jsr	-$156(a6)
;	    RectFill(c->back_rp,x,c->height-y-height,width-1,c->height
	move.l	-4(a5),a0
	move.l	$5C(a0),d3
	sub.l	d4,d3
	subq.l	#1,d3
	subq.l	#1,d2
	move.l	-4(a5),a0
	move.l	$5C(a0),d1
	sub.l	d4,d1
	sub.l	d5,d1
	move.l	-4(a5),a0
	move.l	$24(a0),a1
	move.l	$E(a5),d0
	move.l	_GfxBase,a6
	jsr	-$132(a6)
L321
	movem.l	(a7)+,d2-d6/a6
	unlk	a5
	rts

	SECTION "_SWFSD_clear_RGB15:0",CODE


;void SWFSD_clear_RGB15(GLcontext *ctx,GLboolean all, GLint x, GLint 
	XDEF	_SWFSD_clear_RGB15
_SWFSD_clear_RGB15
L327	EQU	-$8
	link	a5,#L327
	movem.l	d2-d6/a6,-(a7)
	move.l	$E(a5),d0
	move.b	$C(a5),d1
	move.l	$16(a5),d2
	move.l	$1A(a5),d5
	move.l	$8(a5),a0
L323
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    unsigned long color = c->clearpixel;
;    if (all)
	tst.b	d1
	beq.b	L325
L324
;	FillPixelArray(c->back_rp,0,0,c->width,c->height,
	move.l	$18(a0),d4
	and.l	#$7C00,d4
	moveq	#$9,d0
	asl.l	d0,d4
	move.l	$18(a0),d0
	and.l	#$3E0,d0
	moveq	#6,d1
	asl.l	d1,d0
	or.l	d0,d4
	move.l	$18(a0),d0
	and.l	#$1F,d0
	moveq	#3,d1
	asl.l	d1,d0
	or.l	d0,d4
	move.l	$5C(a0),d3
	move.l	$58(a0),d2
	move.l	$24(a0),a1
	moveq	#0,d0
	moveq	#0,d1
	move.l	_CyberGfxBase,a6
	jsr	-$96(a6)
	bra.b	L326
L325
;	FillPixelArray(c->back_rp,x,c->height-y-height,width,height,
	move.l	$18(a0),d4
	and.l	#$7C00,d4
	moveq	#$9,d1
	asl.l	d1,d4
	move.l	$18(a0),d1
	and.l	#$3E0,d1
	moveq	#6,d3
	asl.l	d3,d1
	or.l	d1,d4
	move.l	$18(a0),d1
	and.l	#$1F,d1
	moveq	#3,d3
	asl.l	d3,d1
	or.l	d1,d4
	move.w	d5,d3
	move.l	$5C(a0),d1
	sub.l	$12(a5),d1
	sub.l	d5,d1
	move.l	$24(a0),a1
	move.l	_CyberGfxBase,a6
	jsr	-$96(a6)
L326
	movem.l	(a7)+,d2-d6/a6
	unlk	a5
	rts

	SECTION "_SWFSD_clear_RGB15PC:0",CODE


;void SWFSD_clear_RGB15PC(GLcontext *ctx,GLboolean all, GLint x, GLin
	XDEF	_SWFSD_clear_RGB15PC
_SWFSD_clear_RGB15PC
L332	EQU	-$8
	link	a5,#L332
	movem.l	d2-d6/a6,-(a7)
	move.l	$E(a5),d0
	move.b	$C(a5),d1
	move.l	$16(a5),d2
	move.l	$1A(a5),d5
	move.l	$8(a5),a0
L328
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    unsigned long color = c->clearpixel;
;    if (all)
	tst.b	d1
	beq.b	L330
L329
;	FillPixelArray(c->back_rp,0,0,c->width,c->height,
	move.l	$18(a0),d4
	and.l	#$7C,d4
	moveq	#$11,d0
	asl.l	d0,d4
	move.l	$18(a0),d0
	and.l	#3,d0
	moveq	#$E,d1
	asl.l	d1,d0
	or.l	d0,d4
	move.l	$18(a0),d0
	and.l	#$E000,d0
	moveq	#2,d1
	lsr.l	d1,d0
	or.l	d0,d4
	move.l	$18(a0),d0
	and.l	#$1F00,d0
	moveq	#5,d1
	lsr.l	d1,d0
	or.l	d0,d4
	move.l	$5C(a0),d3
	move.l	$58(a0),d2
	move.l	$24(a0),a1
	moveq	#0,d0
	moveq	#0,d1
	move.l	_CyberGfxBase,a6
	jsr	-$96(a6)
	bra.b	L331
L330
;			((c->clearpixel & 0x1f00) << 11) ) );
	move.l	$18(a0),d4
	and.l	#$7C,d4
	moveq	#$11,d1
	asl.l	d1,d4
	move.l	$18(a0),d1
	and.l	#3,d1
	moveq	#$E,d3
	asl.l	d3,d1
	or.l	d1,d4
	move.l	$18(a0),d1
	and.l	#$E000,d1
	moveq	#2,d3
	lsr.l	d3,d1
	or.l	d1,d4
	move.l	$18(a0),d1
	and.l	#$1F00,d1
	moveq	#5,d3
	lsr.l	d3,d1
	or.l	d1,d4
	move.w	d5,d3
	move.l	$5C(a0),d1
	sub.l	$12(a5),d1
	sub.l	d5,d1
	move.l	$24(a0),a1
	move.l	_CyberGfxBase,a6
	jsr	-$96(a6)
L331
	movem.l	(a7)+,d2-d6/a6
	unlk	a5
	rts

	SECTION "_SWFSD_clear_RGB16:0",CODE


;void SWFSD_clear_RGB16(GLcontext *ctx,GLboolean all, GLint x, GLint 
	XDEF	_SWFSD_clear_RGB16
_SWFSD_clear_RGB16
L337	EQU	-$8
	link	a5,#L337
	movem.l	d2-d6/a6,-(a7)
	move.l	$E(a5),d0
	move.b	$C(a5),d1
	move.l	$16(a5),d2
	move.l	$1A(a5),d5
	move.l	$8(a5),a0
L333
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    unsigned long color = c->clearpixel;
;    if (all)
	tst.b	d1
	beq.b	L335
L334
;	FillPixelArray(c->back_rp,0,0,c->width,c->height,
	move.l	$18(a0),d4
	and.l	#$F800,d4
	moveq	#$8,d0
	asl.l	d0,d4
	move.l	$18(a0),d0
	and.l	#$7E0,d0
	moveq	#5,d1
	asl.l	d1,d0
	or.l	d0,d4
	move.l	$18(a0),d0
	and.l	#$1F,d0
	moveq	#3,d1
	asl.l	d1,d0
	or.l	d0,d4
	move.l	$5C(a0),d3
	move.l	$58(a0),d2
	move.l	$24(a0),a1
	moveq	#0,d0
	moveq	#0,d1
	move.l	_CyberGfxBase,a6
	jsr	-$96(a6)
	bra.b	L336
L335
;	FillPixelArray(c->back_rp,x,c->height-y-height,width,height,
	move.l	$18(a0),d4
	and.l	#$F800,d4
	moveq	#$8,d1
	asl.l	d1,d4
	move.l	$18(a0),d1
	and.l	#$7E0,d1
	moveq	#5,d3
	asl.l	d3,d1
	or.l	d1,d4
	move.l	$18(a0),d1
	and.l	#$1F,d1
	moveq	#3,d3
	asl.l	d3,d1
	or.l	d1,d4
	move.w	d5,d3
	move.l	$5C(a0),d1
	sub.l	$12(a5),d1
	sub.l	d5,d1
	move.l	$24(a0),a1
	move.l	_CyberGfxBase,a6
	jsr	-$96(a6)
L336
	movem.l	(a7)+,d2-d6/a6
	unlk	a5
	rts

	SECTION "_SWFSD_clear_RGB16PC:0",CODE


;void SWFSD_clear_RGB16PC(GLcontext *ctx,GLboolean all, GLint x, GLin
	XDEF	_SWFSD_clear_RGB16PC
_SWFSD_clear_RGB16PC
L342	EQU	-$8
	link	a5,#L342
	movem.l	d2-d6/a6,-(a7)
	move.l	$E(a5),d0
	move.b	$C(a5),d1
	move.l	$16(a5),d2
	move.l	$1A(a5),d5
	move.l	$8(a5),a0
L338
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    unsigned long color = c->clearpixel;
;    if (all)
	tst.b	d1
	beq.b	L340
L339
;	FillPixelArray(c->back_rp,0,0,c->width,c->height,
	move.l	$18(a0),d4
	and.l	#$F8,d4
	moveq	#$10,d0
	asl.l	d0,d4
	move.l	$18(a0),d0
	and.l	#7,d0
	moveq	#$D,d1
	asl.l	d1,d0
	or.l	d0,d4
	move.l	$18(a0),d0
	and.l	#$E000,d0
	moveq	#3,d1
	lsr.l	d1,d0
	or.l	d0,d4
	move.l	$18(a0),d0
	and.l	#$1F00,d0
	moveq	#5,d1
	lsr.l	d1,d0
	or.l	d0,d4
	move.l	$5C(a0),d3
	move.l	$58(a0),d2
	move.l	$24(a0),a1
	moveq	#0,d0
	moveq	#0,d1
	move.l	_CyberGfxBase,a6
	jsr	-$96(a6)
	bra.b	L341
L340
;	FillPixelArray(c->back_rp,x,c->height-y-height,width,height,
	move.l	$18(a0),d4
	and.l	#$F8,d4
	moveq	#$10,d1
	asl.l	d1,d4
	move.l	$18(a0),d1
	and.l	#7,d1
	moveq	#$D,d3
	asl.l	d3,d1
	or.l	d1,d4
	move.l	$18(a0),d1
	and.l	#$E000,d1
	moveq	#3,d3
	lsr.l	d3,d1
	or.l	d1,d4
	move.l	$18(a0),d1
	and.l	#$1F00,d1
	moveq	#5,d3
	lsr.l	d3,d1
	or.l	d1,d4
	move.w	d5,d3
	move.l	$5C(a0),d1
	sub.l	$12(a5),d1
	sub.l	d5,d1
	move.l	$24(a0),a1
	move.l	_CyberGfxBase,a6
	jsr	-$96(a6)
L341
	movem.l	(a7)+,d2-d6/a6
	unlk	a5
	rts

	SECTION "_SWFSD_clear_BGR15PC:0",CODE


;void SWFSD_clear_BGR15PC(GLcontext *ctx,GLboolean all, GLint x, GLin
	XDEF	_SWFSD_clear_BGR15PC
_SWFSD_clear_BGR15PC
L347	EQU	-$8
	link	a5,#L347
	movem.l	d2-d6/a6,-(a7)
	move.l	$E(a5),d0
	move.b	$C(a5),d1
	move.l	$16(a5),d2
	move.l	$1A(a5),d5
	move.l	$8(a5),a0
L343
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    unsigned long color = c->clearpixel;
;    if (all)
	tst.b	d1
	beq.b	L345
L344
;	FillPixelArray(c->back_rp,0,0,c->width,c->height,
	move.l	$18(a0),d4
	and.l	#$7C,d4
	moveq	#1,d0
	asl.l	d0,d4
	move.l	$18(a0),d0
	and.l	#3,d0
	moveq	#$E,d1
	asl.l	d1,d0
	or.l	d0,d4
	move.l	$18(a0),d0
	and.l	#$E000,d0
	moveq	#2,d1
	lsr.l	d1,d0
	or.l	d0,d4
	move.l	$18(a0),d0
	and.l	#$1F00,d0
	moveq	#$B,d1
	asl.l	d1,d0
	or.l	d0,d4
	move.l	$5C(a0),d3
	move.l	$58(a0),d2
	move.l	$24(a0),a1
	moveq	#0,d0
	moveq	#0,d1
	move.l	_CyberGfxBase,a6
	jsr	-$96(a6)
	bra.b	L346
L345
;	FillPixelArray(c->back_rp,x,c->height-y-height,width,height,
	move.l	$18(a0),d4
	and.l	#$7C,d4
	moveq	#1,d1
	asl.l	d1,d4
	move.l	$18(a0),d1
	and.l	#3,d1
	moveq	#$E,d3
	asl.l	d3,d1
	or.l	d1,d4
	move.l	$18(a0),d1
	and.l	#$E000,d1
	moveq	#2,d3
	lsr.l	d3,d1
	or.l	d1,d4
	move.l	$18(a0),d1
	and.l	#$1F00,d1
	moveq	#$B,d3
	asl.l	d3,d1
	or.l	d1,d4
	move.w	d5,d3
	move.l	$5C(a0),d1
	sub.l	$12(a5),d1
	sub.l	d5,d1
	move.l	$24(a0),a1
	move.l	_CyberGfxBase,a6
	jsr	-$96(a6)
L346
	movem.l	(a7)+,d2-d6/a6
	unlk	a5
	rts

	SECTION "_SWFSD_clear_BGR16PC:0",CODE


;void SWFSD_clear_BGR16PC(GLcontext *ctx,GLboolean all, GLint x, GLin
	XDEF	_SWFSD_clear_BGR16PC
_SWFSD_clear_BGR16PC
L352	EQU	-$8
	link	a5,#L352
	movem.l	d2-d6/a6,-(a7)
	move.l	$E(a5),d0
	move.b	$C(a5),d1
	move.l	$16(a5),d2
	move.l	$1A(a5),d5
	move.l	$8(a5),a0
L348
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    unsigned long color = c->clearpixel;
;    if (all)
	tst.b	d1
	beq.b	L350
L349
;	FillPixelArray(c->back_rp,0,0,c->width,c->height,
	move.l	$18(a0),d4
	and.l	#$F8,d4
	move.l	$18(a0),d0
	and.l	#7,d0
	moveq	#$D,d1
	asl.l	d1,d0
	or.l	d0,d4
	move.l	$18(a0),d0
	and.l	#$E000,d0
	moveq	#3,d1
	lsr.l	d1,d0
	or.l	d0,d4
	move.l	$18(a0),d0
	and.l	#$1F00,d0
	moveq	#$B,d1
	asl.l	d1,d0
	or.l	d0,d4
	move.l	$5C(a0),d3
	move.l	$58(a0),d2
	move.l	$24(a0),a1
	moveq	#0,d0
	moveq	#0,d1
	move.l	_CyberGfxBase,a6
	jsr	-$96(a6)
	bra.b	L351
L350
;	FillPixelArray(c->back_rp,x,c->height-y-height,width,height,
	move.l	$18(a0),d4
	and.l	#$F8,d4
	move.l	$18(a0),d1
	and.l	#7,d1
	moveq	#$D,d3
	asl.l	d3,d1
	or.l	d1,d4
	move.l	$18(a0),d1
	and.l	#$E000,d1
	moveq	#3,d3
	lsr.l	d3,d1
	or.l	d1,d4
	move.l	$18(a0),d1
	and.l	#$1F00,d1
	moveq	#$B,d3
	asl.l	d3,d1
	or.l	d1,d4
	move.w	d5,d3
	move.l	$5C(a0),d1
	sub.l	$12(a5),d1
	sub.l	d5,d1
	move.l	$24(a0),a1
	move.l	_CyberGfxBase,a6
	jsr	-$96(a6)
L351
	movem.l	(a7)+,d2-d6/a6
	unlk	a5
	rts

	SECTION "_SWFSD_clear_ARGB:0",CODE


;void SWFSD_clear_ARGB(GLcontext *ctx,GLboolean all, GLint x, GLint y
	XDEF	_SWFSD_clear_ARGB
_SWFSD_clear_ARGB
L357	EQU	-$8
	link	a5,#L357
	movem.l	d2-d6/a6,-(a7)
	move.l	$E(a5),d0
	move.b	$C(a5),d1
	move.l	$16(a5),d2
	move.l	$1A(a5),d5
	move.l	$8(a5),a0
L353
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    unsigned long color = c->clearpixel;
;    if (all)
	tst.b	d1
	beq.b	L355
L354
;	FillPixelArray(c->back_rp,0,0,c->width,c->height,c->clearpixel);
	move.l	$18(a0),d4
	move.l	$5C(a0),d3
	move.l	$58(a0),d2
	move.l	$24(a0),a1
	moveq	#0,d0
	moveq	#0,d1
	move.l	_CyberGfxBase,a6
	jsr	-$96(a6)
	bra.b	L356
L355
;	FillPixelArray(c->back_rp,x,c->height-y-height,width,height,
	move.l	$18(a0),d4
	move.w	d5,d3
	move.l	$5C(a0),d1
	sub.l	$12(a5),d1
	sub.l	d5,d1
	move.l	$24(a0),a1
	move.l	_CyberGfxBase,a6
	jsr	-$96(a6)
L356
	movem.l	(a7)+,d2-d6/a6
	unlk	a5
	rts

	SECTION "_SWFSD_clear_BGRA:0",CODE


;void SWFSD_clear_BGRA(GLcontext *ctx,GLboolean all, GLint x, GLint y
	XDEF	_SWFSD_clear_BGRA
_SWFSD_clear_BGRA
L362	EQU	-$8
	link	a5,#L362
	movem.l	d2-d6/a6,-(a7)
	move.l	$E(a5),d0
	move.b	$C(a5),d1
	move.l	$16(a5),d2
	move.l	$1A(a5),d5
	move.l	$8(a5),a0
L358
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    unsigned long color = c->clearpixel;
;    if (all)
	tst.b	d1
	beq.b	L360
L359
;	FillPixelArray(c->back_rp,0,0,c->width,c->height,
	move.l	$18(a0),d4
	moveq	#$18,d0
	lsr.l	d0,d4
	and.l	#$FF,d4
	move.l	$18(a0),d0
	moveq	#$8,d1
	lsr.l	d1,d0
	and.l	#$FF00,d0
	or.l	d0,d4
	move.l	$18(a0),d0
	moveq	#$8,d1
	asl.l	d1,d0
	and.l	#$FF0000,d0
	or.l	d0,d4
	move.l	$18(a0),d0
	moveq	#$18,d1
	asl.l	d1,d0
	or.l	d0,d4
	move.l	$5C(a0),d3
	move.l	$58(a0),d2
	move.l	$24(a0),a1
	moveq	#0,d0
	moveq	#0,d1
	move.l	_CyberGfxBase,a6
	jsr	-$96(a6)
	bra.b	L361
L360
;	FillPixelArray(c->back_rp,x,c->height-y-height,width,height,
	move.l	$18(a0),d4
	moveq	#$18,d1
	lsr.l	d1,d4
	and.l	#$FF,d4
	move.l	$18(a0),d1
	moveq	#$8,d3
	lsr.l	d3,d1
	and.l	#$FF00,d1
	or.l	d1,d4
	move.l	$18(a0),d1
	moveq	#$8,d3
	asl.l	d3,d1
	and.l	#$FF0000,d1
	or.l	d1,d4
	move.l	$18(a0),d1
	moveq	#$18,d3
	asl.l	d3,d1
	or.l	d1,d4
	move.w	d5,d3
	move.l	$5C(a0),d1
	sub.l	$12(a5),d1
	sub.l	d5,d1
	move.l	$24(a0),a1
	move.l	_CyberGfxBase,a6
	jsr	-$96(a6)
L361
	movem.l	(a7)+,d2-d6/a6
	unlk	a5
	rts

	SECTION "_SWFSD_write_color_span_RGB15:0",CODE


;void SWFSD_write_color_span_RGB15(GLcontext *ctx, GLuint n, GLint x,
	XDEF	_SWFSD_write_color_span_RGB15
_SWFSD_write_color_span_RGB15
L377	EQU	-$70
	link	a5,#L377
	movem.l	d2-d5/a2-a4,-(a7)
	movem.l	$10(a5),d1/d2/a2
	move.l	$C(a5),d3
	move.l	$8(a5),a0
	move.l	$1C(a5),a1
L363
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    short* buffer = (short *)(c->BackArray +
	move.l	$30(a0),a3
	move.l	$5C(a0),d0
	sub.l	d2,d0
	subq.l	#1,d0
	move.l	$50(a0),d2
	mulu.l	d2,d0
	add.l	d0,a3
	moveq	#1,d0
	asl.l	d0,d1
	add.l	d1,a3
;    const GLubyte* r = red;
;    const GLubyte* g = green;
;    const GLubyte* b = blue;
	move.l	$20(a5),a0
;    const GLubyte* a = alpha;
;    const GLubyte* m = mask;
	move.l	$28(a5),-$1C(a5)
;    if (mask)
	tst.l	$28(a5)
	beq.b	L370
L364
;	for (i=0;
	moveq	#0,d0
	bra.b	L368
L365
;	    if (*m++)
	move.l	-$1C(a5),-$70(a5)
	moveq	#1,d1
	add.l	d1,-$1C(a5)
	move.l	-$70(a5),a4
	move.b	(a4),d1
	beq.b	L367
L366
;		*buffer = TC_RGB15(*r,*g,*b);
	move.b	(a0),d1
	and.l	#$FF,d1
	moveq	#3,d2
	asr.l	d2,d1
	move.b	(a1),d2
	and.l	#$FF,d2
	moveq	#3,d4
	asr.l	d4,d2
	moveq	#5,d4
	asl.l	d4,d2
	or.l	d2,d1
	move.b	(a2),d2
	and.l	#$FF,d2
	moveq	#3,d4
	asr.l	d4,d2
	moveq	#$A,d4
	asl.l	d4,d2
	or.l	d2,d1
	move.w	d1,(a3)
L367
;	    r++;
	addq.w	#1,a2
;	    g++;
	addq.w	#1,a1
;	    b++;
	addq.w	#1,a0
;	    buffer++;
	addq.w	#2,a3
	addq.l	#1,d0
L368
	cmp.l	d3,d0
	blo.b	L365
L369
	bra	L376
L370
;	short *ptr = tempbuffer;
	lea	-$24(a5),a4
	move.l	a4,-$28(a5)
;	int n1 = (n >> 1);
	move.l	d3,d4
	moveq	#1,d0
	lsr.l	d0,d4
;	int n2 = (n & 0x01);
	and.l	#1,d3
;	for (i=0;
	moveq	#0,d0
	bra	L372
L371
;	    *ptr++ = TC_RGB15(*r++,*g++,*b++);
	move.l	a0,-$68(a5)
	addq.w	#1,a0
	move.l	-$68(a5),a4
	move.b	(a4),d1
	and.l	#$FF,d1
	moveq	#3,d2
	asr.l	d2,d1
	move.l	a1,-$64(a5)
	addq.w	#1,a1
	move.l	-$64(a5),a4
	move.b	(a4),d2
	and.l	#$FF,d2
	moveq	#3,d5
	asr.l	d5,d2
	moveq	#5,d5
	asl.l	d5,d2
	or.l	d2,d1
	move.l	a2,-$60(a5)
	addq.w	#1,a2
	move.l	-$60(a5),a4
	move.b	(a4),d2
	and.l	#$FF,d2
	moveq	#3,d5
	asr.l	d5,d2
	moveq	#$A,d5
	asl.l	d5,d2
	or.l	d2,d1
	move.l	-$28(a5),-$5C(a5)
	moveq	#2,d2
	add.l	d2,-$28(a5)
	move.l	-$5C(a5),a4
	move.w	d1,(a4)
;	    *ptr++ = TC_RGB15(*r++,*g++,*b++);
	move.l	a0,-$58(a5)
	addq.w	#1,a0
	move.l	-$58(a5),a4
	move.b	(a4),d1
	and.l	#$FF,d1
	moveq	#3,d2
	asr.l	d2,d1
	move.l	a1,-$54(a5)
	addq.w	#1,a1
	move.l	-$54(a5),a4
	move.b	(a4),d2
	and.l	#$FF,d2
	moveq	#3,d5
	asr.l	d5,d2
	moveq	#5,d5
	asl.l	d5,d2
	or.l	d2,d1
	move.l	a2,-$50(a5)
	addq.w	#1,a2
	move.l	-$50(a5),a4
	move.b	(a4),d2
	and.l	#$FF,d2
	moveq	#3,d5
	asr.l	d5,d2
	moveq	#$A,d5
	asl.l	d5,d2
	or.l	d2,d1
	move.l	-$28(a5),a4
	move.w	d1,(a4)
;	    ptr = tempbuffer;
	lea	-$24(a5),a4
	move.l	a4,-$28(a5)
;	    *((long *)buffer)++ = *(long *)ptr;
	move.l	-$28(a5),a4
	move.l	(a4),d1
	move.l	a3,-$44(a5)
	addq.w	#4,a3
	move.l	-$44(a5),a4
	move.l	d1,(a4)
	addq.l	#1,d0
L372
	cmp.l	d4,d0
	blt	L371
L373
;	for (i=0;
	moveq	#0,d0
	bra.b	L375
L374
;	    *buffer++ = TC_RGB15(*r++,*g++,*b++);
	move.l	a0,-$40(a5)
	addq.w	#1,a0
	move.l	-$40(a5),a4
	move.b	(a4),d1
	and.l	#$FF,d1
	moveq	#3,d2
	asr.l	d2,d1
	move.l	a1,-$3C(a5)
	addq.w	#1,a1
	move.l	-$3C(a5),a4
	move.b	(a4),d2
	and.l	#$FF,d2
	moveq	#3,d4
	asr.l	d4,d2
	moveq	#5,d4
	asl.l	d4,d2
	or.l	d2,d1
	move.l	a2,-$38(a5)
	addq.w	#1,a2
	move.l	-$38(a5),a4
	move.b	(a4),d2
	and.l	#$FF,d2
	moveq	#3,d4
	asr.l	d4,d2
	moveq	#$A,d4
	asl.l	d4,d2
	or.l	d2,d1
	move.l	a3,-$34(a5)
	addq.w	#2,a3
	move.l	-$34(a5),a4
	move.w	d1,(a4)
	addq.l	#1,d0
L375
	cmp.l	d3,d0
	blt.b	L374
L376
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts

	SECTION "_SWFSD_write_color_span_RGB15PC:0",CODE


;void SWFSD_write_color_span_RGB15PC(GLcontext *ctx, GLuint n, GLint 
	XDEF	_SWFSD_write_color_span_RGB15PC
_SWFSD_write_color_span_RGB15PC
L392	EQU	-$64
	link	a5,#L392
	movem.l	d2-d5/a2-a4,-(a7)
	movem.l	$10(a5),d1/d2/a2
	move.l	$C(a5),d3
	move.l	$8(a5),a0
	move.l	$20(a5),a1
L378
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    short* buffer = (short *)(c->BackArray +
	move.l	$30(a0),a3
	move.l	$5C(a0),d0
	sub.l	d2,d0
	subq.l	#1,d0
	move.l	$50(a0),d2
	mulu.l	d2,d0
	add.l	d0,a3
	moveq	#1,d0
	asl.l	d0,d1
	add.l	d1,a3
;    const GLubyte* r = red;
;    const GLubyte* g = green;
	move.l	$1C(a5),a0
;    const GLubyte* b = blue;
;    const GLubyte* a = alpha;
;    const GLubyte* m = mask;
	move.l	$28(a5),-$1C(a5)
;    if (mask)
	tst.l	$28(a5)
	beq.b	L385
L379
;	for (i=0;
	moveq	#0,d1
	bra.b	L383
L380
;	    if (*m++)
	move.l	-$1C(a5),-$64(a5)
	moveq	#1,d0
	add.l	d0,-$1C(a5)
	move.l	-$64(a5),a4
	move.b	(a4),d0
	beq.b	L382
L381
;		*buffer = TC_RGB15PC(*r,*g,*b);
	move.b	(a1),d0
	and.l	#$FF,d0
	moveq	#3,d2
	asr.l	d2,d0
	moveq	#$8,d2
	asl.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#6,d4
	asr.l	d4,d2
	or.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#3,d4
	asr.l	d4,d2
	moveq	#$D,d4
	asl.l	d4,d2
	or.l	d2,d0
	move.b	(a2),d2
	and.l	#$FF,d2
	moveq	#3,d4
	asr.l	d4,d2
	moveq	#2,d4
	asl.l	d4,d2
	or.l	d2,d0
	move.w	d0,(a3)
L382
;	    r++;
	addq.w	#1,a2
;	    g++;
	addq.w	#1,a0
;	    b++;
	addq.w	#1,a1
;	    buffer++;
	addq.w	#2,a3
	addq.l	#1,d1
L383
	cmp.l	d3,d1
	blo.b	L380
L384
	bra	L391
L385
;	short *ptr = tempbuffer;
	lea	-$24(a5),a4
	move.l	a4,-$28(a5)
;	int n1 = (n >> 1);
	move.l	d3,d4
	moveq	#1,d0
	lsr.l	d0,d4
;	int n2 = (n & 0x01);
	and.l	#1,d3
;	for (i=0;
	moveq	#0,d1
	bra	L387
L386
;	    *ptr++ = TC_RGB15PC(*r++,*g,*b++);
	move.l	a1,-$5C(a5)
	addq.w	#1,a1
	move.l	-$5C(a5),a4
	move.b	(a4),d0
	and.l	#$FF,d0
	moveq	#3,d2
	asr.l	d2,d0
	moveq	#$8,d2
	asl.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#6,d5
	asr.l	d5,d2
	or.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#3,d5
	asr.l	d5,d2
	moveq	#$D,d5
	asl.l	d5,d2
	or.l	d2,d0
	move.l	a2,-$58(a5)
	addq.w	#1,a2
	move.l	-$58(a5),a4
	move.b	(a4),d2
	and.l	#$FF,d2
	moveq	#3,d5
	asr.l	d5,d2
	moveq	#2,d5
	asl.l	d5,d2
	or.l	d2,d0
	move.l	-$28(a5),-$54(a5)
	moveq	#2,d2
	add.l	d2,-$28(a5)
	move.l	-$54(a5),a4
	move.w	d0,(a4)
;	    g++;
	addq.w	#1,a0
;	    *ptr++ = TC_RGB15PC(*r++,*g,*b++);
	move.l	a1,-$50(a5)
	addq.w	#1,a1
	move.l	-$50(a5),a4
	move.b	(a4),d0
	and.l	#$FF,d0
	moveq	#3,d2
	asr.l	d2,d0
	moveq	#$8,d2
	asl.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#6,d5
	asr.l	d5,d2
	or.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#3,d5
	asr.l	d5,d2
	moveq	#$D,d5
	asl.l	d5,d2
	or.l	d2,d0
	move.l	a2,-$4C(a5)
	addq.w	#1,a2
	move.l	-$4C(a5),a4
	move.b	(a4),d2
	and.l	#$FF,d2
	moveq	#3,d5
	asr.l	d5,d2
	moveq	#2,d5
	asl.l	d5,d2
	or.l	d2,d0
	move.l	-$28(a5),a4
	move.w	d0,(a4)
;	    g++;
	addq.w	#1,a0
;	    ptr = tempbuffer;
	lea	-$24(a5),a4
	move.l	a4,-$28(a5)
;	    *((long *)buffer)++ = *(long *)ptr;
	move.l	-$28(a5),a4
	move.l	(a4),d0
	move.l	a3,-$40(a5)
	addq.w	#4,a3
	move.l	-$40(a5),a4
	move.l	d0,(a4)
	addq.l	#1,d1
L387
	cmp.l	d4,d1
	blt	L386
L388
;	for (i=0;
	moveq	#0,d1
	bra.b	L390
L389
;	    *buffer++ = TC_RGB15PC(*r++,*g,*b++);
	move.l	a1,-$3C(a5)
	addq.w	#1,a1
	move.l	-$3C(a5),a4
	move.b	(a4),d0
	and.l	#$FF,d0
	moveq	#3,d2
	asr.l	d2,d0
	moveq	#$8,d2
	asl.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#6,d4
	asr.l	d4,d2
	or.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#3,d4
	asr.l	d4,d2
	moveq	#$D,d4
	asl.l	d4,d2
	or.l	d2,d0
	move.l	a2,-$38(a5)
	addq.w	#1,a2
	move.l	-$38(a5),a4
	move.b	(a4),d2
	and.l	#$FF,d2
	moveq	#3,d4
	asr.l	d4,d2
	moveq	#2,d4
	asl.l	d4,d2
	or.l	d2,d0
	move.l	a3,-$34(a5)
	addq.w	#2,a3
	move.l	-$34(a5),a4
	move.w	d0,(a4)
;	    g++;
	addq.w	#1,a0
	addq.l	#1,d1
L390
	cmp.l	d3,d1
	blt.b	L389
L391
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts

	SECTION "_SWFSD_write_color_span_BGR15PC:0",CODE


;void SWFSD_write_color_span_BGR15PC(GLcontext *ctx, GLuint n, GLint 
	XDEF	_SWFSD_write_color_span_BGR15PC
_SWFSD_write_color_span_BGR15PC
L407	EQU	-$64
	link	a5,#L407
	movem.l	d2-d5/a2-a4,-(a7)
	movem.l	$10(a5),d1/d2/a2
	move.l	$C(a5),d3
	move.l	$8(a5),a0
	move.l	$20(a5),a1
L393
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    short* buffer = (short *)(c->BackArray +
	move.l	$30(a0),a3
	move.l	$5C(a0),d0
	sub.l	d2,d0
	subq.l	#1,d0
	move.l	$50(a0),d2
	mulu.l	d2,d0
	add.l	d0,a3
	moveq	#1,d0
	asl.l	d0,d1
	add.l	d1,a3
;    const GLubyte* r = red;
;    const GLubyte* g = green;
	move.l	$1C(a5),a0
;    const GLubyte* b = blue;
;    const GLubyte* a = alpha;
;    const GLubyte* m = mask;
	move.l	$28(a5),-$1C(a5)
;    if (mask)
	tst.l	$28(a5)
	beq.b	L400
L394
;	for (i=0;
	moveq	#0,d1
	bra.b	L398
L395
;	    if (*m++)
	move.l	-$1C(a5),-$64(a5)
	moveq	#1,d0
	add.l	d0,-$1C(a5)
	move.l	-$64(a5),a4
	move.b	(a4),d0
	beq.b	L397
L396
;		*buffer = TC_BGR15PC(*r,*g,*b);
	move.b	(a2),d0
	and.l	#$FF,d0
	moveq	#3,d2
	asr.l	d2,d0
	moveq	#$8,d2
	asl.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#6,d4
	asr.l	d4,d2
	or.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#3,d4
	asr.l	d4,d2
	moveq	#$D,d4
	asl.l	d4,d2
	or.l	d2,d0
	move.b	(a1),d2
	and.l	#$FF,d2
	moveq	#3,d4
	asr.l	d4,d2
	moveq	#2,d4
	asl.l	d4,d2
	or.l	d2,d0
	move.w	d0,(a3)
L397
;	    r++;
	addq.w	#1,a2
;	    g++;
	addq.w	#1,a0
;	    b++;
	addq.w	#1,a1
;	    buffer++;
	addq.w	#2,a3
	addq.l	#1,d1
L398
	cmp.l	d3,d1
	blo.b	L395
L399
	bra	L406
L400
;	short *ptr = tempbuffer;
	lea	-$24(a5),a4
	move.l	a4,-$28(a5)
;	int n1 = (n >> 1);
	move.l	d3,d4
	moveq	#1,d0
	lsr.l	d0,d4
;	int n2 = (n & 0x01);
	and.l	#1,d3
;	for (i=0;
	moveq	#0,d1
	bra	L402
L401
;	    *ptr++ = TC_BGR15PC(*r++,*g,*b++);
	move.l	a2,-$5C(a5)
	addq.w	#1,a2
	move.l	-$5C(a5),a4
	move.b	(a4),d0
	and.l	#$FF,d0
	moveq	#3,d2
	asr.l	d2,d0
	moveq	#$8,d2
	asl.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#6,d5
	asr.l	d5,d2
	or.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#3,d5
	asr.l	d5,d2
	moveq	#$D,d5
	asl.l	d5,d2
	or.l	d2,d0
	move.l	a1,-$58(a5)
	addq.w	#1,a1
	move.l	-$58(a5),a4
	move.b	(a4),d2
	and.l	#$FF,d2
	moveq	#3,d5
	asr.l	d5,d2
	moveq	#2,d5
	asl.l	d5,d2
	or.l	d2,d0
	move.l	-$28(a5),-$54(a5)
	moveq	#2,d2
	add.l	d2,-$28(a5)
	move.l	-$54(a5),a4
	move.w	d0,(a4)
;	    g++;
	addq.w	#1,a0
;	    *ptr++ = TC_BGR15PC(*r++,*g,*b++);
	move.l	a2,-$50(a5)
	addq.w	#1,a2
	move.l	-$50(a5),a4
	move.b	(a4),d0
	and.l	#$FF,d0
	moveq	#3,d2
	asr.l	d2,d0
	moveq	#$8,d2
	asl.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#6,d5
	asr.l	d5,d2
	or.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#3,d5
	asr.l	d5,d2
	moveq	#$D,d5
	asl.l	d5,d2
	or.l	d2,d0
	move.l	a1,-$4C(a5)
	addq.w	#1,a1
	move.l	-$4C(a5),a4
	move.b	(a4),d2
	and.l	#$FF,d2
	moveq	#3,d5
	asr.l	d5,d2
	moveq	#2,d5
	asl.l	d5,d2
	or.l	d2,d0
	move.l	-$28(a5),a4
	move.w	d0,(a4)
;	    g++;
	addq.w	#1,a0
;	    ptr = tempbuffer;
	lea	-$24(a5),a4
	move.l	a4,-$28(a5)
;	    *((long *)buffer)++ = *(long *)ptr;
	move.l	-$28(a5),a4
	move.l	(a4),d0
	move.l	a3,-$40(a5)
	addq.w	#4,a3
	move.l	-$40(a5),a4
	move.l	d0,(a4)
	addq.l	#1,d1
L402
	cmp.l	d4,d1
	blt	L401
L403
;	for (i=0;
	moveq	#0,d1
	bra.b	L405
L404
;	    *buffer++ = TC_BGR15PC(*r++,*g,*b++);
	move.l	a2,-$3C(a5)
	addq.w	#1,a2
	move.l	-$3C(a5),a4
	move.b	(a4),d0
	and.l	#$FF,d0
	moveq	#3,d2
	asr.l	d2,d0
	moveq	#$8,d2
	asl.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#6,d4
	asr.l	d4,d2
	or.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#3,d4
	asr.l	d4,d2
	moveq	#$D,d4
	asl.l	d4,d2
	or.l	d2,d0
	move.l	a1,-$38(a5)
	addq.w	#1,a1
	move.l	-$38(a5),a4
	move.b	(a4),d2
	and.l	#$FF,d2
	moveq	#3,d4
	asr.l	d4,d2
	moveq	#2,d4
	asl.l	d4,d2
	or.l	d2,d0
	move.l	a3,-$34(a5)
	addq.w	#2,a3
	move.l	-$34(a5),a4
	move.w	d0,(a4)
;	    g++;
	addq.w	#1,a0
	addq.l	#1,d1
L405
	cmp.l	d3,d1
	blt.b	L404
L406
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts

	SECTION "_SWFSD_write_color_span_BGR16PC:0",CODE


;void SWFSD_write_color_span_BGR16PC(GLcontext *ctx, GLuint n, GLint 
	XDEF	_SWFSD_write_color_span_BGR16PC
_SWFSD_write_color_span_BGR16PC
L422	EQU	-$64
	link	a5,#L422
	movem.l	d2-d5/a2-a4,-(a7)
	movem.l	$10(a5),d1/d2/a2
	move.l	$C(a5),d3
	move.l	$8(a5),a0
	move.l	$20(a5),a1
L408
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    short* buffer = (short *)(c->BackArray +
	move.l	$30(a0),a3
	move.l	$5C(a0),d0
	sub.l	d2,d0
	subq.l	#1,d0
	move.l	$50(a0),d2
	mulu.l	d2,d0
	add.l	d0,a3
	moveq	#1,d0
	asl.l	d0,d1
	add.l	d1,a3
;    const GLubyte* r = red;
;    const GLubyte* g = green;
	move.l	$1C(a5),a0
;    const GLubyte* b = blue;
;    const GLubyte* a = alpha;
;    const GLubyte* m = mask;
	move.l	$28(a5),-$1C(a5)
;    if (mask)
	tst.l	$28(a5)
	beq.b	L415
L409
;	for (i=0;
	moveq	#0,d1
	bra.b	L413
L410
;	    if (*m++)
	move.l	-$1C(a5),-$64(a5)
	moveq	#1,d0
	add.l	d0,-$1C(a5)
	move.l	-$64(a5),a4
	move.b	(a4),d0
	beq.b	L412
L411
;		*buffer = TC_BGR16PC(*r,*g,*b);
	move.b	(a2),d0
	and.l	#$FF,d0
	moveq	#3,d2
	asr.l	d2,d0
	moveq	#$8,d2
	asl.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#5,d4
	asr.l	d4,d2
	or.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#2,d4
	asr.l	d4,d2
	moveq	#$D,d4
	asl.l	d4,d2
	or.l	d2,d0
	move.b	(a1),d2
	and.l	#$FF,d2
	moveq	#3,d4
	asr.l	d4,d2
	moveq	#3,d4
	asl.l	d4,d2
	or.l	d2,d0
	move.w	d0,(a3)
L412
;	    r++;
	addq.w	#1,a2
;	    g++;
	addq.w	#1,a0
;	    b++;
	addq.w	#1,a1
;	    buffer++;
	addq.w	#2,a3
	addq.l	#1,d1
L413
	cmp.l	d3,d1
	blo.b	L410
L414
	bra	L421
L415
;	short *ptr = tempbuffer;
	lea	-$24(a5),a4
	move.l	a4,-$28(a5)
;	int n1 = (n >> 1);
	move.l	d3,d4
	moveq	#1,d0
	lsr.l	d0,d4
;	int n2 = (n & 0x01);
	and.l	#1,d3
;	for (i=0;
	moveq	#0,d1
	bra	L417
L416
;	    *ptr++ = TC_BGR16PC(*r++,*g,*b++);
	move.l	a2,-$5C(a5)
	addq.w	#1,a2
	move.l	-$5C(a5),a4
	move.b	(a4),d0
	and.l	#$FF,d0
	moveq	#3,d2
	asr.l	d2,d0
	moveq	#$8,d2
	asl.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#5,d5
	asr.l	d5,d2
	or.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#2,d5
	asr.l	d5,d2
	moveq	#$D,d5
	asl.l	d5,d2
	or.l	d2,d0
	move.l	a1,-$58(a5)
	addq.w	#1,a1
	move.l	-$58(a5),a4
	move.b	(a4),d2
	and.l	#$FF,d2
	moveq	#3,d5
	asr.l	d5,d2
	moveq	#3,d5
	asl.l	d5,d2
	or.l	d2,d0
	move.l	-$28(a5),-$54(a5)
	moveq	#2,d2
	add.l	d2,-$28(a5)
	move.l	-$54(a5),a4
	move.w	d0,(a4)
;	    g++;
	addq.w	#1,a0
;	    *ptr++ = TC_BGR16PC(*r++,*g,*b++);
	move.l	a2,-$50(a5)
	addq.w	#1,a2
	move.l	-$50(a5),a4
	move.b	(a4),d0
	and.l	#$FF,d0
	moveq	#3,d2
	asr.l	d2,d0
	moveq	#$8,d2
	asl.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#5,d5
	asr.l	d5,d2
	or.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#2,d5
	asr.l	d5,d2
	moveq	#$D,d5
	asl.l	d5,d2
	or.l	d2,d0
	move.l	a1,-$4C(a5)
	addq.w	#1,a1
	move.l	-$4C(a5),a4
	move.b	(a4),d2
	and.l	#$FF,d2
	moveq	#3,d5
	asr.l	d5,d2
	moveq	#3,d5
	asl.l	d5,d2
	or.l	d2,d0
	move.l	-$28(a5),a4
	move.w	d0,(a4)
;	    g++;
	addq.w	#1,a0
;	    ptr = tempbuffer;
	lea	-$24(a5),a4
	move.l	a4,-$28(a5)
;	    *((long *)buffer)++ = *(long *)ptr;
	move.l	-$28(a5),a4
	move.l	(a4),d0
	move.l	a3,-$40(a5)
	addq.w	#4,a3
	move.l	-$40(a5),a4
	move.l	d0,(a4)
	addq.l	#1,d1
L417
	cmp.l	d4,d1
	blt	L416
L418
;	for (i=0;
	moveq	#0,d1
	bra.b	L420
L419
;	    *buffer++ = TC_BGR16PC(*r++,*g,*b++);
	move.l	a2,-$3C(a5)
	addq.w	#1,a2
	move.l	-$3C(a5),a4
	move.b	(a4),d0
	and.l	#$FF,d0
	moveq	#3,d2
	asr.l	d2,d0
	moveq	#$8,d2
	asl.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#5,d4
	asr.l	d4,d2
	or.l	d2,d0
	move.b	(a0),d2
	and.l	#$FF,d2
	moveq	#2,d4
	asr.l	d4,d2
	moveq	#$D,d4
	asl.l	d4,d2
	or.l	d2,d0
	move.l	a1,-$38(a5)
	addq.w	#1,a1
	move.l	-$38(a5),a4
	move.b	(a4),d2
	and.l	#$FF,d2
	moveq	#3,d4
	asr.l	d4,d2
	moveq	#3,d4
	asl.l	d4,d2
	or.l	d2,d0
	move.l	a3,-$34(a5)
	addq.w	#2,a3
	move.l	-$34(a5),a4
	move.w	d0,(a4)
;	    g++;
	addq.w	#1,a0
	addq.l	#1,d1
L420
	cmp.l	d3,d1
	blt.b	L419
L421
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts

	SECTION "_SWFSD_write_color_pixels_RGB15:0",CODE


;void SWFSD_write_color_pixels_RGB15(GLcontext *ctx, GLuint n, const 
	XDEF	_SWFSD_write_color_pixels_RGB15
_SWFSD_write_color_pixels_RGB15
L429	EQU	-$54
	link	a5,#L429
	movem.l	d2-d5/a2-a4,-(a7)
	move.l	$28(a5),a0
	move.l	$20(a5),a1
	move.l	$1C(a5),a2
	move.l	$18(a5),a3
L423
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$8(a5),a4
	move.l	$974(a4),-4(a5)
;    short* buffer = (short *)c->BackArray;
	move.l	-4(a5),a4
	move.l	$30(a4),-$8(a5)
;    const GLint* xpos = x;
	move.l	$10(a5),-$C(a5)
;    const GLint* ypos = y;
	move.l	$14(a5),-$10(a5)
;    const GLubyte* red = r;
;    const GLubyte* green = g;
;    const GLubyte* blue = b;
;    const GLubyte* m = mask;
;    int h = c->height-1;
	move.l	-4(a5),a4
	move.l	$5C(a4),d5
	subq.l	#1,d5
;    int w = c->bprow>>1;
	move.l	-4(a5),a4
	move.l	$50(a4),d4
	moveq	#1,d0
	lsr.l	d0,d4
;    for (i=0;
	moveq	#0,d2
	bra	L427
L424
;	if (*m++)
	move.l	a0,-$3C(a5)
	addq.w	#1,a0
	move.l	-$3C(a5),a4
	move.b	(a4),d0
	beq.b	L426
L425
;	    buffer[(h-(*ypos)) * w + (*xpos)] =
	move.b	(a1),d0
	and.l	#$FF,d0
	moveq	#3,d1
	asr.l	d1,d0
	move.b	(a2),d1
	and.l	#$FF,d1
	moveq	#3,d3
	asr.l	d3,d1
	moveq	#5,d3
	asl.l	d3,d1
	or.l	d1,d0
	move.b	(a3),d1
	and.l	#$FF,d1
	moveq	#3,d3
	asr.l	d3,d1
	moveq	#$A,d3
	asl.l	d3,d1
	or.l	d1,d0
	move.w	d0,d3
	move.l	-$10(a5),a4
	move.l	(a4),d0
	move.l	d5,d1
	sub.l	d0,d1
	move.l	d1,d0
	muls.l	d4,d0
	move.l	-$C(a5),a4
	move.l	(a4),d1
	add.l	d1,d0
	add.l	d0,d0
	add.l	-$8(a5),d0
	move.l	d0,-$38(a5)
	move.l	-$38(a5),a4
	move.w	d3,(a4)
L426
;	xpos++;
	moveq	#4,d0
	add.l	d0,-$C(a5)
;	ypos++;
	moveq	#4,d0
	add.l	d0,-$10(a5)
;	red++;
	addq.w	#1,a3
;	green++;
	addq.w	#1,a2
;	blue++;
	addq.w	#1,a1
	addq.l	#1,d2
L427
	cmp.l	$C(a5),d2
	blo	L424
L428
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts

	SECTION "_SWFSD_write_color_pixels_RGB15PC:0",CODE


;void SWFSD_write_color_pixels_RGB15PC(GLcontext *ctx, GLuint n, cons
	XDEF	_SWFSD_write_color_pixels_RGB15PC
_SWFSD_write_color_pixels_RGB15PC
L436	EQU	-$54
	link	a5,#L436
	movem.l	d2-d5/a2-a4,-(a7)
	movem.l	$1C(a5),a0/a2
	move.l	$28(a5),a1
	move.l	$18(a5),a3
L430
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$8(a5),a4
	move.l	$974(a4),-4(a5)
;    short* buffer = (short *)c->BackArray;
	move.l	-4(a5),a4
	move.l	$30(a4),-$8(a5)
;    const GLint* xpos = x;
	move.l	$10(a5),-$C(a5)
;    const GLint* ypos = y;
	move.l	$14(a5),-$10(a5)
;    const GLubyte* red = r;
;    const GLubyte* green = g;
;    const GLubyte* blue = b;
;    const GLubyte* m = mask;
;    int h = c->height-1;
	move.l	-4(a5),a4
	move.l	$5C(a4),d5
	subq.l	#1,d5
;    int w = c->bprow>>1;
	move.l	-4(a5),a4
	move.l	$50(a4),d4
	moveq	#1,d0
	lsr.l	d0,d4
;    for (i=0;
	moveq	#0,d2
	bra	L434
L431
;	if (*m++)
	move.l	a1,-$3C(a5)
	addq.w	#1,a1
	move.l	-$3C(a5),a4
	move.b	(a4),d0
	beq.b	L433
L432
;	    buffer[(h-(*ypos)) * w + (*xpos)] =
	move.b	(a2),d0
	and.l	#$FF,d0
	moveq	#3,d1
	asr.l	d1,d0
	moveq	#$8,d1
	asl.l	d1,d0
	move.b	(a0),d1
	and.l	#$FF,d1
	moveq	#6,d3
	asr.l	d3,d1
	or.l	d1,d0
	move.b	(a0),d1
	and.l	#$FF,d1
	moveq	#3,d3
	asr.l	d3,d1
	moveq	#$D,d3
	asl.l	d3,d1
	or.l	d1,d0
	move.b	(a3),d1
	and.l	#$FF,d1
	moveq	#3,d3
	asr.l	d3,d1
	moveq	#2,d3
	asl.l	d3,d1
	or.l	d1,d0
	move.w	d0,d3
	move.l	-$10(a5),a4
	move.l	(a4),d0
	move.l	d5,d1
	sub.l	d0,d1
	move.l	d1,d0
	muls.l	d4,d0
	move.l	-$C(a5),a4
	move.l	(a4),d1
	add.l	d1,d0
	add.l	d0,d0
	add.l	-$8(a5),d0
	move.l	d0,-$38(a5)
	move.l	-$38(a5),a4
	move.w	d3,(a4)
L433
;	xpos++;
	moveq	#4,d0
	add.l	d0,-$C(a5)
;	ypos++;
	moveq	#4,d0
	add.l	d0,-$10(a5)
;	red++;
	addq.w	#1,a3
;	green++;
	addq.w	#1,a0
;	blue++;
	addq.w	#1,a2
	addq.l	#1,d2
L434
	cmp.l	$C(a5),d2
	blo	L431
L435
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts

	SECTION "_SWFSD_write_color_pixels_BGR15PC:0",CODE


;void SWFSD_write_color_pixels_BGR15PC(GLcontext *ctx, GLuint n, cons
	XDEF	_SWFSD_write_color_pixels_BGR15PC
_SWFSD_write_color_pixels_BGR15PC
L443	EQU	-$54
	link	a5,#L443
	movem.l	d2-d5/a2-a4,-(a7)
	movem.l	$1C(a5),a0/a2
	move.l	$28(a5),a1
	move.l	$18(a5),a3
L437
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$8(a5),a4
	move.l	$974(a4),-4(a5)
;    short* buffer = (short *)c->BackArray;
	move.l	-4(a5),a4
	move.l	$30(a4),-$8(a5)
;    const GLint* xpos = x;
	move.l	$10(a5),-$C(a5)
;    const GLint* ypos = y;
	move.l	$14(a5),-$10(a5)
;    const GLubyte* red = r;
;    const GLubyte* green = g;
;    const GLubyte* blue = b;
;    const GLubyte* m = mask;
;    int h = c->height-1;
	move.l	-4(a5),a4
	move.l	$5C(a4),d5
	subq.l	#1,d5
;    int w = c->bprow>>1;
	move.l	-4(a5),a4
	move.l	$50(a4),d4
	moveq	#1,d0
	lsr.l	d0,d4
;    for (i=0;
	moveq	#0,d2
	bra	L441
L438
;	if (*m++)
	move.l	a1,-$3C(a5)
	addq.w	#1,a1
	move.l	-$3C(a5),a4
	move.b	(a4),d0
	beq.b	L440
L439
;	    buffer[(h-(*ypos)) * w + (*xpos)] =
	move.b	(a3),d0
	and.l	#$FF,d0
	moveq	#3,d1
	asr.l	d1,d0
	moveq	#$8,d1
	asl.l	d1,d0
	move.b	(a0),d1
	and.l	#$FF,d1
	moveq	#6,d3
	asr.l	d3,d1
	or.l	d1,d0
	move.b	(a0),d1
	and.l	#$FF,d1
	moveq	#3,d3
	asr.l	d3,d1
	moveq	#$D,d3
	asl.l	d3,d1
	or.l	d1,d0
	move.b	(a2),d1
	and.l	#$FF,d1
	moveq	#3,d3
	asr.l	d3,d1
	moveq	#2,d3
	asl.l	d3,d1
	or.l	d1,d0
	move.w	d0,d3
	move.l	-$10(a5),a4
	move.l	(a4),d0
	move.l	d5,d1
	sub.l	d0,d1
	move.l	d1,d0
	muls.l	d4,d0
	move.l	-$C(a5),a4
	move.l	(a4),d1
	add.l	d1,d0
	add.l	d0,d0
	add.l	-$8(a5),d0
	move.l	d0,-$38(a5)
	move.l	-$38(a5),a4
	move.w	d3,(a4)
L440
;	xpos++;
	moveq	#4,d0
	add.l	d0,-$C(a5)
;	ypos++;
	moveq	#4,d0
	add.l	d0,-$10(a5)
;	red++;
	addq.w	#1,a3
;	green++;
	addq.w	#1,a0
;	blue++;
	addq.w	#1,a2
	addq.l	#1,d2
L441
	cmp.l	$C(a5),d2
	blo	L438
L442
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts

	SECTION "_SWFSD_write_color_pixels_BGR16PC:0",CODE


;void SWFSD_write_color_pixels_BGR16PC(GLcontext *ctx, GLuint n, cons
	XDEF	_SWFSD_write_color_pixels_BGR16PC
_SWFSD_write_color_pixels_BGR16PC
L450	EQU	-$54
	link	a5,#L450
	movem.l	d2-d5/a2-a4,-(a7)
	movem.l	$1C(a5),a0/a2
	move.l	$28(a5),a1
	move.l	$18(a5),a3
L444
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$8(a5),a4
	move.l	$974(a4),-4(a5)
;    short* buffer = (short *)c->BackArray;
	move.l	-4(a5),a4
	move.l	$30(a4),-$8(a5)
;    const GLint* xpos = x;
	move.l	$10(a5),-$C(a5)
;    const GLint* ypos = y;
	move.l	$14(a5),-$10(a5)
;    const GLubyte* red = r;
;    const GLubyte* green = g;
;    const GLubyte* blue = b;
;    const GLubyte* m = mask;
;    int h = c->height-1;
	move.l	-4(a5),a4
	move.l	$5C(a4),d5
	subq.l	#1,d5
;    int w = c->bprow>>1;
	move.l	-4(a5),a4
	move.l	$50(a4),d4
	moveq	#1,d0
	lsr.l	d0,d4
;    for (i=0;
	moveq	#0,d2
	bra	L448
L445
;	if (*m++)
	move.l	a1,-$3C(a5)
	addq.w	#1,a1
	move.l	-$3C(a5),a4
	move.b	(a4),d0
	beq.b	L447
L446
;	    buffer[(h-(*ypos)) * w + (*xpos)] =
	move.b	(a3),d0
	and.l	#$FF,d0
	moveq	#3,d1
	asr.l	d1,d0
	moveq	#$8,d1
	asl.l	d1,d0
	move.b	(a0),d1
	and.l	#$FF,d1
	moveq	#5,d3
	asr.l	d3,d1
	or.l	d1,d0
	move.b	(a0),d1
	and.l	#$FF,d1
	moveq	#2,d3
	asr.l	d3,d1
	moveq	#$D,d3
	asl.l	d3,d1
	or.l	d1,d0
	move.b	(a2),d1
	and.l	#$FF,d1
	moveq	#3,d3
	asr.l	d3,d1
	moveq	#3,d3
	asl.l	d3,d1
	or.l	d1,d0
	move.w	d0,d3
	move.l	-$10(a5),a4
	move.l	(a4),d0
	move.l	d5,d1
	sub.l	d0,d1
	move.l	d1,d0
	muls.l	d4,d0
	move.l	-$C(a5),a4
	move.l	(a4),d1
	add.l	d1,d0
	add.l	d0,d0
	add.l	-$8(a5),d0
	move.l	d0,-$38(a5)
	move.l	-$38(a5),a4
	move.w	d3,(a4)
L447
;	xpos++;
	moveq	#4,d0
	add.l	d0,-$C(a5)
;	ypos++;
	moveq	#4,d0
	add.l	d0,-$10(a5)
;	red++;
	addq.w	#1,a3
;	green++;
	addq.w	#1,a0
;	blue++;
	addq.w	#1,a2
	addq.l	#1,d2
L448
	cmp.l	$C(a5),d2
	blo	L445
L449
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts

	SECTION "_SWFSD_read_color_span_RGB15:0",CODE


;void SWFSD_read_color_span_RGB15(GLcontext *ctx, GLuint n, GLint x, 
	XDEF	_SWFSD_read_color_span_RGB15
_SWFSD_read_color_span_RGB15
L458	EQU	-$60
	link	a5,#L458
	movem.l	d2-d6/a2-a4,-(a7)
	movem.l	$10(a5),d1/d3/a2
	move.l	$C(a5),d2
	move.l	$8(a5),a0
	move.l	$1C(a5),a1
L451
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    short *buffer = (short *)(c->BackArray +
	move.l	$30(a0),a3
	move.l	$5C(a0),d0
	sub.l	d3,d0
	subq.l	#1,d0
	move.l	$50(a0),d3
	mulu.l	d3,d0
	add.l	d0,a3
	moveq	#1,d0
	asl.l	d0,d1
	add.l	d1,a3
;    GLubyte* r = red;
;    GLubyte* g = green;
;    GLubyte* b = blue;
	move.l	$20(a5),a0
;    GLubyte* a = alpha;
	move.l	$24(a5),-$18(a5)
;    int n1 = (n >> 1);
	move.l	d2,d5
	moveq	#1,d0
	lsr.l	d0,d5
;    int n2 = (n & 0x01);
	move.l	d2,d4
	and.l	#1,d4
;    for (i=0;
	moveq	#0,d1
	bra	L453
L452
;	*((short *)a)++ = 0xffff;
	move.l	-$18(a5),-$60(a5)
	moveq	#2,d0
	add.l	d0,-$18(a5)
	move.l	-$60(a5),a4
	move.w	#-1,(a4)
;	temp = *((long *)buffer)++;
	move.l	a3,-$5C(a5)
	addq.w	#4,a3
	move.l	-$5C(a5),a4
	move.l	(a4),d3
;	color = temp >> 16;
	move.l	d3,d0
	moveq	#$10,d2
	lsr.l	d2,d0
;	*r++ = (GLubyte)((color >> 7) & 0xf8);
	move.l	d0,d2
	moveq	#7,d6
	lsr.l	d6,d2
	and.l	#$F8,d2
	move.l	a2,-$58(a5)
	addq.w	#1,a2
	move.l	-$58(a5),a4
	move.b	d2,(a4)
;	*g++ = (GLubyte)((color >> 2) & 0xf8);
	move.l	d0,d2
	moveq	#2,d6
	lsr.l	d6,d2
	and.l	#$F8,d2
	move.l	a1,-$54(a5)
	addq.w	#1,a1
	move.l	-$54(a5),a4
	move.b	d2,(a4)
;	*b++ = (GLubyte)((color << 3) & 0xf8);
	moveq	#3,d2
	asl.l	d2,d0
	and.l	#$F8,d0
	move.l	a0,-$50(a5)
	addq.w	#1,a0
	move.l	-$50(a5),a4
	move.b	d0,(a4)
;	color = temp & 0xffff;
	move.l	d3,d0
	and.l	#$FFFF,d0
;	*r++ = (GLubyte)((color >> 7) & 0xf8);
	move.l	d0,d2
	moveq	#7,d3
	lsr.l	d3,d2
	and.l	#$F8,d2
	move.l	a2,-$4C(a5)
	addq.w	#1,a2
	move.l	-$4C(a5),a4
	move.b	d2,(a4)
;	*g++ = (GLubyte)((color >> 2) & 0xf8);
	move.l	d0,d2
	moveq	#2,d3
	lsr.l	d3,d2
	and.l	#$F8,d2
	move.l	a1,-$48(a5)
	addq.w	#1,a1
	move.l	-$48(a5),a4
	move.b	d2,(a4)
;	*b++ = (GLubyte)((color << 3) & 0xf8);
	moveq	#3,d2
	asl.l	d2,d0
	and.l	#$F8,d0
	move.l	a0,-$44(a5)
	addq.w	#1,a0
	move.l	-$44(a5),a4
	move.b	d0,(a4)
	addq.l	#1,d1
L453
	cmp.l	d5,d1
	blt	L452
L454
;    for (i=0;
	moveq	#0,d1
	bra.b	L456
L455
;	*a++ = (GLubyte)0xff;
	move.l	-$18(a5),-$40(a5)
	moveq	#1,d0
	add.l	d0,-$18(a5)
	move.l	-$40(a5),a4
	move.b	#$FF,(a4)
;	color = *buffer++;
	move.l	a3,-$3C(a5)
	addq.w	#2,a3
	move.l	-$3C(a5),a4
	move.w	(a4),d0
	ext.l	d0
;	*r++ = (GLubyte)((color >> 7) & 0xf8);
	move.l	d0,d2
	moveq	#7,d3
	lsr.l	d3,d2
	and.l	#$F8,d2
	move.l	a2,-$38(a5)
	addq.w	#1,a2
	move.l	-$38(a5),a4
	move.b	d2,(a4)
;	*g++ = (GLubyte)((color >> 2) & 0xf8);
	move.l	d0,d2
	moveq	#2,d3
	lsr.l	d3,d2
	and.l	#$F8,d2
	move.l	a1,-$34(a5)
	addq.w	#1,a1
	move.l	-$34(a5),a4
	move.b	d2,(a4)
;	*b++ = (GLubyte)((color << 3) & 0xf8);
	moveq	#3,d2
	asl.l	d2,d0
	and.l	#$F8,d0
	move.l	a0,-$30(a5)
	addq.w	#1,a0
	move.l	-$30(a5),a4
	move.b	d0,(a4)
	addq.l	#1,d1
L456
	cmp.l	d4,d1
	blt.b	L455
L457
	movem.l	(a7)+,d2-d6/a2-a4
	unlk	a5
	rts

	SECTION "_SWFSD_read_color_span_RGB15PC:0",CODE


;void SWFSD_read_color_span_RGB15PC(GLcontext *ctx, GLuint n, GLint x
	XDEF	_SWFSD_read_color_span_RGB15PC
_SWFSD_read_color_span_RGB15PC
L466	EQU	-$64
	link	a5,#L466
	movem.l	d2-d6/a2-a4,-(a7)
	movem.l	$10(a5),d1/d3/a2
	move.l	$C(a5),d2
	move.l	$8(a5),a0
	move.l	$1C(a5),a1
L459
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    short *buffer = (short *)(c->BackArray +
	move.l	$30(a0),a3
	move.l	$5C(a0),d0
	sub.l	d3,d0
	subq.l	#1,d0
	move.l	$50(a0),d3
	mulu.l	d3,d0
	add.l	d0,a3
	moveq	#1,d0
	asl.l	d0,d1
	add.l	d1,a3
;    GLubyte* r = red;
;    GLubyte* g = green;
;    GLubyte* b = blue;
	move.l	$20(a5),a0
;    GLubyte* a = alpha;
	move.l	$24(a5),-$18(a5)
;    int n1 = (n >> 1);
	move.l	d2,d0
	moveq	#1,d1
	lsr.l	d1,d0
	move.l	d0,-$28(a5)
;    int n2 = (n & 0x01);
	move.l	d2,d5
	and.l	#1,d5
;    for (i=0;
	moveq	#0,d1
	bra	L461
L460
;	*((short *)a)++ = 0xffff;
	move.l	-$18(a5),-$60(a5)
	moveq	#2,d0
	add.l	d0,-$18(a5)
	move.l	-$60(a5),a4
	move.w	#-1,(a4)
;	temp = *((long *)buffer)++;
	move.l	a3,-$5C(a5)
	addq.w	#4,a3
	move.l	-$5C(a5),a4
	move.l	(a4),d4
;	color = temp >> 16;
	move.l	d4,d0
	moveq	#$10,d2
	lsr.l	d2,d0
;	*r++ = (GLubyte)((color << 1) & 0xf8);
	move.l	d0,d2
	moveq	#1,d3
	asl.l	d3,d2
	and.l	#$F8,d2
	move.l	a2,-$58(a5)
	addq.w	#1,a2
	move.l	-$58(a5),a4
	move.b	d2,(a4)
;	*g++ = (GLubyte)( ((color << 6) & 0xc0) | ((color >> 10) & 0x38) );
	move.l	d0,d2
	moveq	#6,d3
	asl.l	d3,d2
	and.l	#$C0,d2
	move.l	d0,d3
	moveq	#$A,d6
	lsr.l	d6,d3
	and.l	#$38,d3
	or.l	d3,d2
	move.l	a1,-$54(a5)
	addq.w	#1,a1
	move.l	-$54(a5),a4
	move.b	d2,(a4)
;	*b++ = (GLubyte)((color >> 5) & 0xf8);
	moveq	#5,d2
	lsr.l	d2,d0
	and.l	#$F8,d0
	move.l	a0,-$50(a5)
	addq.w	#1,a0
	move.l	-$50(a5),a4
	move.b	d0,(a4)
;	color = temp & 0xffff;
	move.l	d4,d0
	and.l	#$FFFF,d0
;	*r++ = (GLubyte)((color << 1) & 0xf8);
	move.l	d0,d2
	moveq	#1,d3
	asl.l	d3,d2
	and.l	#$F8,d2
	move.l	a2,-$4C(a5)
	addq.w	#1,a2
	move.l	-$4C(a5),a4
	move.b	d2,(a4)
;	*g++ = (GLubyte)( ((color << 6) & 0xc0) | ((color >> 10) & 0x38) );
	move.l	d0,d2
	moveq	#6,d3
	asl.l	d3,d2
	and.l	#$C0,d2
	move.l	d0,d3
	moveq	#$A,d4
	lsr.l	d4,d3
	and.l	#$38,d3
	or.l	d3,d2
	move.l	a1,-$48(a5)
	addq.w	#1,a1
	move.l	-$48(a5),a4
	move.b	d2,(a4)
;	*b++ = (GLubyte)((color >> 5) & 0xf8);
	moveq	#5,d2
	lsr.l	d2,d0
	and.l	#$F8,d0
	move.l	a0,-$44(a5)
	addq.w	#1,a0
	move.l	-$44(a5),a4
	move.b	d0,(a4)
	addq.l	#1,d1
L461
	cmp.l	-$28(a5),d1
	blt	L460
L462
;    for (i=0;
	moveq	#0,d1
	bra.b	L464
L463
;	*a++ = (GLubyte)0xff;
	move.l	-$18(a5),-$40(a5)
	moveq	#1,d0
	add.l	d0,-$18(a5)
	move.l	-$40(a5),a4
	move.b	#$FF,(a4)
;	color = *buffer++;
	move.l	a3,-$3C(a5)
	addq.w	#2,a3
	move.l	-$3C(a5),a4
	move.w	(a4),d0
	ext.l	d0
;	*r++ = (GLubyte)((color << 1) & 0xf8);
	move.l	d0,d2
	moveq	#1,d3
	asl.l	d3,d2
	and.l	#$F8,d2
	move.l	a2,-$38(a5)
	addq.w	#1,a2
	move.l	-$38(a5),a4
	move.b	d2,(a4)
;	*g++ = (GLubyte)( ((color << 6) & 0xc0) | ((color >> 10) & 0x38) );
	move.l	d0,d2
	moveq	#6,d3
	asl.l	d3,d2
	and.l	#$C0,d2
	move.l	d0,d3
	moveq	#$A,d4
	lsr.l	d4,d3
	and.l	#$38,d3
	or.l	d3,d2
	move.l	a1,-$34(a5)
	addq.w	#1,a1
	move.l	-$34(a5),a4
	move.b	d2,(a4)
;	*b++ = (GLubyte)((color >> 5) & 0xf8);
	moveq	#5,d2
	lsr.l	d2,d0
	and.l	#$F8,d0
	move.l	a0,-$30(a5)
	addq.w	#1,a0
	move.l	-$30(a5),a4
	move.b	d0,(a4)
	addq.l	#1,d1
L464
	cmp.l	d5,d1
	blt	L463
L465
	movem.l	(a7)+,d2-d6/a2-a4
	unlk	a5
	rts

	SECTION "_SWFSD_read_color_span_BGR15PC:0",CODE


;void SWFSD_read_color_span_BGR15PC(GLcontext *ctx, GLuint n, GLint x
	XDEF	_SWFSD_read_color_span_BGR15PC
_SWFSD_read_color_span_BGR15PC
L474	EQU	-$64
	link	a5,#L474
	movem.l	d2-d6/a2-a4,-(a7)
	movem.l	$10(a5),d1/d3/a2
	move.l	$C(a5),d2
	move.l	$8(a5),a0
	move.l	$1C(a5),a1
L467
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    short *buffer = (short *)(c->BackArray +
	move.l	$30(a0),a3
	move.l	$5C(a0),d0
	sub.l	d3,d0
	subq.l	#1,d0
	move.l	$50(a0),d3
	mulu.l	d3,d0
	add.l	d0,a3
	moveq	#1,d0
	asl.l	d0,d1
	add.l	d1,a3
;    GLubyte* r = red;
;    GLubyte* g = green;
;    GLubyte* b = blue;
	move.l	$20(a5),a0
;    GLubyte* a = alpha;
	move.l	$24(a5),-$18(a5)
;    int n1 = (n >> 1);
	move.l	d2,d0
	moveq	#1,d1
	lsr.l	d1,d0
	move.l	d0,-$28(a5)
;    int n2 = (n & 0x01);
	move.l	d2,d5
	and.l	#1,d5
;    for (i=0;
	moveq	#0,d1
	bra	L469
L468
;	*((short *)a)++ = 0xffff;
	move.l	-$18(a5),-$60(a5)
	moveq	#2,d0
	add.l	d0,-$18(a5)
	move.l	-$60(a5),a4
	move.w	#-1,(a4)
;	temp = *((long *)buffer)++;
	move.l	a3,-$5C(a5)
	addq.w	#4,a3
	move.l	-$5C(a5),a4
	move.l	(a4),d4
;	color = temp >> 16;
	move.l	d4,d0
	moveq	#$10,d2
	lsr.l	d2,d0
;	*b++ = (GLubyte)((color << 1) & 0xf8);
	move.l	d0,d2
	moveq	#1,d3
	asl.l	d3,d2
	and.l	#$F8,d2
	move.l	a0,-$58(a5)
	addq.w	#1,a0
	move.l	-$58(a5),a4
	move.b	d2,(a4)
;	*g++ = (GLubyte)( ((color << 6) & 0xc0) | ((color >> 10) & 0x38) );
	move.l	d0,d2
	moveq	#6,d3
	asl.l	d3,d2
	and.l	#$C0,d2
	move.l	d0,d3
	moveq	#$A,d6
	lsr.l	d6,d3
	and.l	#$38,d3
	or.l	d3,d2
	move.l	a1,-$54(a5)
	addq.w	#1,a1
	move.l	-$54(a5),a4
	move.b	d2,(a4)
;	*r++ = (GLubyte)((color >> 5) & 0xf8);
	moveq	#5,d2
	lsr.l	d2,d0
	and.l	#$F8,d0
	move.l	a2,-$50(a5)
	addq.w	#1,a2
	move.l	-$50(a5),a4
	move.b	d0,(a4)
;	color = temp & 0xffff;
	move.l	d4,d0
	and.l	#$FFFF,d0
;	*b++ = (GLubyte)((color << 1) & 0xf8);
	move.l	d0,d2
	moveq	#1,d3
	asl.l	d3,d2
	and.l	#$F8,d2
	move.l	a0,-$4C(a5)
	addq.w	#1,a0
	move.l	-$4C(a5),a4
	move.b	d2,(a4)
;	*g++ = (GLubyte)( ((color << 6) & 0xc0) | ((color >> 10) & 0x38) );
	move.l	d0,d2
	moveq	#6,d3
	asl.l	d3,d2
	and.l	#$C0,d2
	move.l	d0,d3
	moveq	#$A,d4
	lsr.l	d4,d3
	and.l	#$38,d3
	or.l	d3,d2
	move.l	a1,-$48(a5)
	addq.w	#1,a1
	move.l	-$48(a5),a4
	move.b	d2,(a4)
;	*r++ = (GLubyte)((color >> 5) & 0xf8);
	moveq	#5,d2
	lsr.l	d2,d0
	and.l	#$F8,d0
	move.l	a2,-$44(a5)
	addq.w	#1,a2
	move.l	-$44(a5),a4
	move.b	d0,(a4)
	addq.l	#1,d1
L469
	cmp.l	-$28(a5),d1
	blt	L468
L470
;    for (i=0;
	moveq	#0,d1
	bra.b	L472
L471
;	*a++ = (GLubyte)0xff;
	move.l	-$18(a5),-$40(a5)
	moveq	#1,d0
	add.l	d0,-$18(a5)
	move.l	-$40(a5),a4
	move.b	#$FF,(a4)
;	color = *buffer++;
	move.l	a3,-$3C(a5)
	addq.w	#2,a3
	move.l	-$3C(a5),a4
	move.w	(a4),d0
	ext.l	d0
;	*b++ = (GLubyte)((color << 1) & 0xf8);
	move.l	d0,d2
	moveq	#1,d3
	asl.l	d3,d2
	and.l	#$F8,d2
	move.l	a0,-$38(a5)
	addq.w	#1,a0
	move.l	-$38(a5),a4
	move.b	d2,(a4)
;	*g++ = (GLubyte)( ((color << 6) & 0xc0) | ((color >> 10) & 0x38) );
	move.l	d0,d2
	moveq	#6,d3
	asl.l	d3,d2
	and.l	#$C0,d2
	move.l	d0,d3
	moveq	#$A,d4
	lsr.l	d4,d3
	and.l	#$38,d3
	or.l	d3,d2
	move.l	a1,-$34(a5)
	addq.w	#1,a1
	move.l	-$34(a5),a4
	move.b	d2,(a4)
;	*r++ = (GLubyte)((color >> 5) & 0xf8);
	moveq	#5,d2
	lsr.l	d2,d0
	and.l	#$F8,d0
	move.l	a2,-$30(a5)
	addq.w	#1,a2
	move.l	-$30(a5),a4
	move.b	d0,(a4)
	addq.l	#1,d1
L472
	cmp.l	d5,d1
	blt	L471
L473
	movem.l	(a7)+,d2-d6/a2-a4
	unlk	a5
	rts

	SECTION "_SWFSD_read_color_span_BGR16PC:0",CODE


;void SWFSD_read_color_span_BGR16PC(GLcontext *ctx, GLuint n, GLint x
	XDEF	_SWFSD_read_color_span_BGR16PC
_SWFSD_read_color_span_BGR16PC
L482	EQU	-$64
	link	a5,#L482
	movem.l	d2-d6/a2-a4,-(a7)
	movem.l	$10(a5),d1/d3/a2
	move.l	$C(a5),d2
	move.l	$8(a5),a0
	move.l	$1C(a5),a1
L475
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a0
;    short *buffer = (short *)(c->BackArray +
	move.l	$30(a0),a3
	move.l	$5C(a0),d0
	sub.l	d3,d0
	subq.l	#1,d0
	move.l	$50(a0),d3
	mulu.l	d3,d0
	add.l	d0,a3
	moveq	#1,d0
	asl.l	d0,d1
	add.l	d1,a3
;    GLubyte* r = red;
;    GLubyte* g = green;
;    GLubyte* b = blue;
	move.l	$20(a5),a0
;    GLubyte* a = alpha;
	move.l	$24(a5),-$18(a5)
;    int n1 = (n >> 1);
	move.l	d2,d0
	moveq	#1,d1
	lsr.l	d1,d0
	move.l	d0,-$28(a5)
;    int n2 = (n & 0x01);
	move.l	d2,d5
	and.l	#1,d5
;    for (i=0;
	moveq	#0,d1
	bra	L477
L476
;	*((short *)a)++ = 0xffff;
	move.l	-$18(a5),-$60(a5)
	moveq	#2,d0
	add.l	d0,-$18(a5)
	move.l	-$60(a5),a4
	move.w	#-1,(a4)
;	temp = *((long *)buffer)++;
	move.l	a3,-$5C(a5)
	addq.w	#4,a3
	move.l	-$5C(a5),a4
	move.l	(a4),d4
;	color = temp >> 16;
	move.l	d4,d0
	moveq	#$10,d2
	lsr.l	d2,d0
;	*b++ = (GLubyte)(color & 0xf8);
	move.l	d0,d2
	and.l	#$F8,d2
	move.l	a0,-$58(a5)
	addq.w	#1,a0
	move.l	-$58(a5),a4
	move.b	d2,(a4)
;	*g++ = (GLubyte)( ((color << 5) & 0xe0) | ((color >> 11) & 0x1c) );
	move.l	d0,d2
	moveq	#5,d3
	asl.l	d3,d2
	and.l	#$E0,d2
	move.l	d0,d3
	moveq	#$B,d6
	lsr.l	d6,d3
	and.l	#$1C,d3
	or.l	d3,d2
	move.l	a1,-$54(a5)
	addq.w	#1,a1
	move.l	-$54(a5),a4
	move.b	d2,(a4)
;	*r++ = (GLubyte)((color >> 5) & 0xf8);
	moveq	#5,d2
	lsr.l	d2,d0
	and.l	#$F8,d0
	move.l	a2,-$50(a5)
	addq.w	#1,a2
	move.l	-$50(a5),a4
	move.b	d0,(a4)
;	color = temp & 0xffff;
	move.l	d4,d0
	and.l	#$FFFF,d0
;	*b++ = (GLubyte)(color & 0xf8);
	move.l	d0,d2
	and.l	#$F8,d2
	move.l	a0,-$4C(a5)
	addq.w	#1,a0
	move.l	-$4C(a5),a4
	move.b	d2,(a4)
;	*g++ = (GLubyte)( ((color << 5) & 0xe0) | ((color >> 11) & 0x1c) );
	move.l	d0,d2
	moveq	#5,d3
	asl.l	d3,d2
	and.l	#$E0,d2
	move.l	d0,d3
	moveq	#$B,d4
	lsr.l	d4,d3
	and.l	#$1C,d3
	or.l	d3,d2
	move.l	a1,-$48(a5)
	addq.w	#1,a1
	move.l	-$48(a5),a4
	move.b	d2,(a4)
;	*r++ = (GLubyte)((color >> 5) & 0xf8);
	moveq	#5,d2
	lsr.l	d2,d0
	and.l	#$F8,d0
	move.l	a2,-$44(a5)
	addq.w	#1,a2
	move.l	-$44(a5),a4
	move.b	d0,(a4)
	addq.l	#1,d1
L477
	cmp.l	-$28(a5),d1
	blt	L476
L478
;    for (i=0;
	moveq	#0,d1
	bra.b	L480
L479
;	*a++ = (GLubyte)0xff;
	move.l	-$18(a5),-$40(a5)
	moveq	#1,d0
	add.l	d0,-$18(a5)
	move.l	-$40(a5),a4
	move.b	#$FF,(a4)
;	color = *buffer++;
	move.l	a3,-$3C(a5)
	addq.w	#2,a3
	move.l	-$3C(a5),a4
	move.w	(a4),d0
	ext.l	d0
;	*b++ = (GLubyte)(color & 0xf8);
	move.l	d0,d2
	and.l	#$F8,d2
	move.l	a0,-$38(a5)
	addq.w	#1,a0
	move.l	-$38(a5),a4
	move.b	d2,(a4)
;	*g++ = (GLubyte)( ((color << 5) & 0xe0) | ((color >> 11) & 0x1c) );
	move.l	d0,d2
	moveq	#5,d3
	asl.l	d3,d2
	and.l	#$E0,d2
	move.l	d0,d3
	moveq	#$B,d4
	lsr.l	d4,d3
	and.l	#$1C,d3
	or.l	d3,d2
	move.l	a1,-$34(a5)
	addq.w	#1,a1
	move.l	-$34(a5),a4
	move.b	d2,(a4)
;	*r++ = (GLubyte)((color >> 5) & 0xf8);
	moveq	#5,d2
	lsr.l	d2,d0
	and.l	#$F8,d0
	move.l	a2,-$30(a5)
	addq.w	#1,a2
	move.l	-$30(a5),a4
	move.b	d0,(a4)
	addq.l	#1,d1
L480
	cmp.l	d5,d1
	blt.b	L479
L481
	movem.l	(a7)+,d2-d6/a2-a4
	unlk	a5
	rts

	SECTION "_SWFSD_read_index_span_RGB15:0",CODE


;void SWFSD_read_index_span_RGB15(GLcontext *ctx, GLuint n, GLint x, 
	XDEF	_SWFSD_read_index_span_RGB15
_SWFSD_read_index_span_RGB15
L490	EQU	-$40
	link	a5,#L490
	movem.l	d2-d6/a2,-(a7)
	movem.l	$10(a5),d1/d3/a0
	move.l	$C(a5),d2
	move.l	$8(a5),a1
L483
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a1),-4(a5)
;    short* buffer = (short *)(c->BackArray +
	move.l	-4(a5),a1
	move.l	$30(a1),-$8(a5)
	move.l	-4(a5),a1
	move.l	$5C(a1),d0
	sub.l	d3,d0
	subq.l	#1,d0
	move.l	-4(a5),a1
	move.l	$50(a1),d3
	mulu.l	d3,d0
	add.l	d0,-$8(a5)
	moveq	#1,d0
	asl.l	d0,d1
	move.l	d1,d0
	add.l	d0,-$8(a5)
;    GLuint* i = index;
	move.l	a0,a2
;    int n1 = (n >> 1);
	move.l	d2,d5
	moveq	#1,d0
	lsr.l	d0,d5
;    int n2 = (n & 0x01);
	move.l	d2,d4
	and.l	#1,d4
;    for (z=0;
	moveq	#0,d2
	bra	L485
L484
;	temp = *((long *)buffer)++;
	move.l	-$8(a5),a0
	moveq	#4,d0
	add.l	d0,-$8(a5)
	move.l	(a0),d3
;	color = temp >> 16;
	move.l	d3,d0
	moveq	#$10,d1
	lsr.l	d1,d0
;	*i++ = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#3,d6
	asl.l	d6,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#2,d6
	lsr.l	d6,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#7,d1
	lsr.l	d1,d0
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	a2,a0
	addq.w	#4,a2
	move.l	d0,(a0)
;	color = temp & 0xffff;
	move.l	d3,d0
	and.l	#$FFFF,d0
;	*i++ = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#3,d3
	asl.l	d3,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#2,d3
	lsr.l	d3,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#7,d1
	lsr.l	d1,d0
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	a2,a0
	addq.w	#4,a2
	move.l	d0,(a0)
	addq.l	#1,d2
L485
	cmp.l	d5,d2
	blt	L484
L486
;    for (z=0;
	moveq	#0,d2
	bra.b	L488
L487
;	color = *buffer++;
	move.l	-$8(a5),a0
	moveq	#2,d0
	add.l	d0,-$8(a5)
	move.w	(a0),d0
	ext.l	d0
;	*i++ = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#3,d3
	asl.l	d3,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#2,d3
	lsr.l	d3,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#7,d1
	lsr.l	d1,d0
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	a2,a0
	addq.w	#4,a2
	move.l	d0,(a0)
	addq.l	#1,d2
L488
	cmp.l	d4,d2
	blt.b	L487
L489
	movem.l	(a7)+,d2-d6/a2
	unlk	a5
	rts

	SECTION "_SWFSD_read_index_span_RGB15PC:0",CODE


;void SWFSD_read_index_span_RGB15PC(GLcontext *ctx, GLuint n, GLint x
	XDEF	_SWFSD_read_index_span_RGB15PC
_SWFSD_read_index_span_RGB15PC
L498	EQU	-$44
	link	a5,#L498
	movem.l	d2-d6/a2,-(a7)
	movem.l	$10(a5),d1/d3/a0
	move.l	$C(a5),d2
	move.l	$8(a5),a1
L491
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a1),-4(a5)
;    short* buffer = (short *)(c->BackArray +
	move.l	-4(a5),a1
	move.l	$30(a1),-$8(a5)
	move.l	-4(a5),a1
	move.l	$5C(a1),d0
	sub.l	d3,d0
	subq.l	#1,d0
	move.l	-4(a5),a1
	move.l	$50(a1),d3
	mulu.l	d3,d0
	add.l	d0,-$8(a5)
	moveq	#1,d0
	asl.l	d0,d1
	move.l	d1,d0
	add.l	d0,-$8(a5)
;    GLuint* i = index;
	move.l	a0,a2
;    int n1 = (n >> 1);
	move.l	d2,d0
	moveq	#1,d1
	lsr.l	d1,d0
	move.l	d0,-$1C(a5)
;    int n2 = (n & 0x01);
	move.l	d2,d5
	and.l	#1,d5
;    for (z=0;
	moveq	#0,d2
	bra	L493
L492
;	temp = *((long *)buffer)++;
	move.l	-$8(a5),a0
	moveq	#4,d0
	add.l	d0,-$8(a5)
	move.l	(a0),d4
;	color = temp >> 16;
	move.l	d4,d0
	moveq	#$10,d1
	lsr.l	d1,d0
;	*i++ = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#5,d3
	lsr.l	d3,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#6,d3
	asl.l	d3,d1
	and.l	#$C0,d1
	move.l	d0,d3
	moveq	#$A,d6
	lsr.l	d6,d3
	and.l	#$38,d3
	or.l	d3,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#1,d1
	asl.l	d1,d0
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	a2,a0
	addq.w	#4,a2
	move.l	d0,(a0)
;	color = temp & 0xffff;
	move.l	d4,d0
	and.l	#$FFFF,d0
;	*i++ = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#5,d3
	lsr.l	d3,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#6,d3
	asl.l	d3,d1
	and.l	#$C0,d1
	move.l	d0,d3
	moveq	#$A,d4
	lsr.l	d4,d3
	and.l	#$38,d3
	or.l	d3,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#1,d1
	asl.l	d1,d0
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	a2,a0
	addq.w	#4,a2
	move.l	d0,(a0)
	addq.l	#1,d2
L493
	cmp.l	-$1C(a5),d2
	blt	L492
L494
;    for (z=0;
	moveq	#0,d2
	bra.b	L496
L495
;	color = *buffer++;
	move.l	-$8(a5),a0
	moveq	#2,d0
	add.l	d0,-$8(a5)
	move.w	(a0),d0
	ext.l	d0
;	*i++ = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#5,d3
	lsr.l	d3,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#6,d3
	asl.l	d3,d1
	and.l	#$C0,d1
	move.l	d0,d3
	moveq	#$A,d4
	lsr.l	d4,d3
	and.l	#$38,d3
	or.l	d3,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#1,d1
	asl.l	d1,d0
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	a2,a0
	addq.w	#4,a2
	move.l	d0,(a0)
	addq.l	#1,d2
L496
	cmp.l	d5,d2
	blt.b	L495
L497
	movem.l	(a7)+,d2-d6/a2
	unlk	a5
	rts

	SECTION "_SWFSD_read_index_span_RGB16:0",CODE


;void SWFSD_read_index_span_RGB16(GLcontext *ctx, GLuint n, GLint x, 
	XDEF	_SWFSD_read_index_span_RGB16
_SWFSD_read_index_span_RGB16
L506	EQU	-$40
	link	a5,#L506
	movem.l	d2-d6/a2,-(a7)
	movem.l	$10(a5),d1/d3/a0
	move.l	$C(a5),d2
	move.l	$8(a5),a1
L499
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a1),-4(a5)
;    short* buffer = (short *)(c->BackArray +
	move.l	-4(a5),a1
	move.l	$30(a1),-$8(a5)
	move.l	-4(a5),a1
	move.l	$5C(a1),d0
	sub.l	d3,d0
	subq.l	#1,d0
	move.l	-4(a5),a1
	move.l	$50(a1),d3
	mulu.l	d3,d0
	add.l	d0,-$8(a5)
	moveq	#1,d0
	asl.l	d0,d1
	move.l	d1,d0
	add.l	d0,-$8(a5)
;    GLuint* i = index;
	move.l	a0,a2
;    int n1 = (n >> 1);
	move.l	d2,d5
	moveq	#1,d0
	lsr.l	d0,d5
;    int n2 = (n & 0x01);
	move.l	d2,d4
	and.l	#1,d4
;    for (z=0;
	moveq	#0,d2
	bra	L501
L500
;	temp = *((long *)buffer)++;
	move.l	-$8(a5),a0
	moveq	#4,d0
	add.l	d0,-$8(a5)
	move.l	(a0),d3
;	color = temp >> 16;
	move.l	d3,d0
	moveq	#$10,d1
	lsr.l	d1,d0
;	*i++ = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#3,d6
	asl.l	d6,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#3,d6
	lsr.l	d6,d1
	and.l	#$FC,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#$8,d1
	lsr.l	d1,d0
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	a2,a0
	addq.w	#4,a2
	move.l	d0,(a0)
;	color = temp & 0xffff;
	move.l	d3,d0
	and.l	#$FFFF,d0
;		      (unsigned long *)c->ColorTable2);
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#3,d3
	asl.l	d3,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#3,d3
	lsr.l	d3,d1
	and.l	#$FC,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#$8,d1
	lsr.l	d1,d0
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	a2,a0
	addq.w	#4,a2
	move.l	d0,(a0)
	addq.l	#1,d2
L501
	cmp.l	d5,d2
	blt	L500
L502
;    for (z=0;
	moveq	#0,d2
	bra.b	L504
L503
;	color = *buffer++;
	move.l	-$8(a5),a0
	moveq	#2,d0
	add.l	d0,-$8(a5)
	move.w	(a0),d0
	ext.l	d0
;	*i++ = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#3,d3
	asl.l	d3,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#3,d3
	lsr.l	d3,d1
	and.l	#$FC,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#$8,d1
	lsr.l	d1,d0
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	a2,a0
	addq.w	#4,a2
	move.l	d0,(a0)
	addq.l	#1,d2
L504
	cmp.l	d4,d2
	blt.b	L503
L505
	movem.l	(a7)+,d2-d6/a2
	unlk	a5
	rts

	SECTION "_SWFSD_read_index_span_RGB16PC:0",CODE


;void SWFSD_read_index_span_RGB16PC(GLcontext *ctx, GLuint n, GLint x
	XDEF	_SWFSD_read_index_span_RGB16PC
_SWFSD_read_index_span_RGB16PC
L514	EQU	-$44
	link	a5,#L514
	movem.l	d2-d6/a2,-(a7)
	movem.l	$10(a5),d1/d3/a0
	move.l	$C(a5),d2
	move.l	$8(a5),a1
L507
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a1),-4(a5)
;    short* buffer = (short *)(c->BackArray +
	move.l	-4(a5),a1
	move.l	$30(a1),-$8(a5)
	move.l	-4(a5),a1
	move.l	$5C(a1),d0
	sub.l	d3,d0
	subq.l	#1,d0
	move.l	-4(a5),a1
	move.l	$50(a1),d3
	mulu.l	d3,d0
	add.l	d0,-$8(a5)
	moveq	#1,d0
	asl.l	d0,d1
	move.l	d1,d0
	add.l	d0,-$8(a5)
;    GLuint* i = index;
	move.l	a0,a2
;    int n1 = (n >> 1);
	move.l	d2,d0
	moveq	#1,d1
	lsr.l	d1,d0
	move.l	d0,-$1C(a5)
;    int n2 = (n & 0x01);
	move.l	d2,d5
	and.l	#1,d5
;    for (z=0;
	moveq	#0,d2
	bra	L509
L508
;	temp = *((long *)buffer)++;
	move.l	-$8(a5),a0
	moveq	#4,d0
	add.l	d0,-$8(a5)
	move.l	(a0),d4
;	color = temp >> 16;
	move.l	d4,d0
	moveq	#$10,d1
	lsr.l	d1,d0
;	*i++ = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#5,d3
	lsr.l	d3,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#5,d3
	asl.l	d3,d1
	and.l	#$E0,d1
	move.l	d0,d3
	moveq	#$B,d6
	lsr.l	d6,d3
	and.l	#$1C,d3
	or.l	d3,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	a2,a0
	addq.w	#4,a2
	move.l	d0,(a0)
;	color = temp & 0xffff;
	move.l	d4,d0
	and.l	#$FFFF,d0
;	*i++ = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#5,d3
	lsr.l	d3,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#5,d3
	asl.l	d3,d1
	and.l	#$E0,d1
	move.l	d0,d3
	moveq	#$B,d4
	lsr.l	d4,d3
	and.l	#$1C,d3
	or.l	d3,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	a2,a0
	addq.w	#4,a2
	move.l	d0,(a0)
	addq.l	#1,d2
L509
	cmp.l	-$1C(a5),d2
	blt	L508
L510
;    for (z=0;
	moveq	#0,d2
	bra.b	L512
L511
;	color = *buffer++;
	move.l	-$8(a5),a0
	moveq	#2,d0
	add.l	d0,-$8(a5)
	move.w	(a0),d0
	ext.l	d0
;	*i++ = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#5,d3
	lsr.l	d3,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#5,d3
	asl.l	d3,d1
	and.l	#$E0,d1
	move.l	d0,d3
	moveq	#$B,d4
	lsr.l	d4,d3
	and.l	#$1C,d3
	or.l	d3,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	a2,a0
	addq.w	#4,a2
	move.l	d0,(a0)
	addq.l	#1,d2
L512
	cmp.l	d5,d2
	blt.b	L511
L513
	movem.l	(a7)+,d2-d6/a2
	unlk	a5
	rts

	SECTION "_SWFSD_read_index_span_BGR15PC:0",CODE


;void SWFSD_read_index_span_BGR15PC(GLcontext *ctx, GLuint n, GLint x
	XDEF	_SWFSD_read_index_span_BGR15PC
_SWFSD_read_index_span_BGR15PC
L522	EQU	-$44
	link	a5,#L522
	movem.l	d2-d6/a2,-(a7)
	movem.l	$10(a5),d1/d3/a0
	move.l	$C(a5),d2
	move.l	$8(a5),a1
L515
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a1),-4(a5)
;    short* buffer = (short *)(c->BackArray +
	move.l	-4(a5),a1
	move.l	$30(a1),-$8(a5)
	move.l	-4(a5),a1
	move.l	$5C(a1),d0
	sub.l	d3,d0
	subq.l	#1,d0
	move.l	-4(a5),a1
	move.l	$50(a1),d3
	mulu.l	d3,d0
	add.l	d0,-$8(a5)
	moveq	#1,d0
	asl.l	d0,d1
	move.l	d1,d0
	add.l	d0,-$8(a5)
;    GLuint* i = index;
	move.l	a0,a2
;    int n1 = (n >> 1);
	move.l	d2,d0
	moveq	#1,d1
	lsr.l	d1,d0
	move.l	d0,-$1C(a5)
;    int n2 = (n & 0x01);
	move.l	d2,d5
	and.l	#1,d5
;    for (z=0;
	moveq	#0,d2
	bra	L517
L516
;	temp = *((long *)buffer)++;
	move.l	-$8(a5),a0
	moveq	#4,d0
	add.l	d0,-$8(a5)
	move.l	(a0),d4
;	color = temp >> 16;
	move.l	d4,d0
	moveq	#$10,d1
	lsr.l	d1,d0
;	*i++ = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#1,d3
	asl.l	d3,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#6,d3
	asl.l	d3,d1
	and.l	#$C0,d1
	move.l	d0,d3
	moveq	#$A,d6
	lsr.l	d6,d3
	and.l	#$38,d3
	or.l	d3,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#5,d1
	lsr.l	d1,d0
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	a2,a0
	addq.w	#4,a2
	move.l	d0,(a0)
;	color = temp & 0xffff;
	move.l	d4,d0
	and.l	#$FFFF,d0
;// SWFSD_read_index_span_BGRA
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#1,d3
	asl.l	d3,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#6,d3
	asl.l	d3,d1
	and.l	#$C0,d1
	move.l	d0,d3
	moveq	#$A,d4
	lsr.l	d4,d3
	and.l	#$38,d3
	or.l	d3,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#5,d1
	lsr.l	d1,d0
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	a2,a0
	addq.w	#4,a2
	move.l	d0,(a0)
	addq.l	#1,d2
L517
	cmp.l	-$1C(a5),d2
	blt	L516
L518
;    for (z=0;
	moveq	#0,d2
	bra.b	L520
L519
;	color = *buffer++;
	move.l	-$8(a5),a0
	moveq	#2,d0
	add.l	d0,-$8(a5)
	move.w	(a0),d0
	ext.l	d0
;	*i++ = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#1,d3
	asl.l	d3,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#6,d3
	asl.l	d3,d1
	and.l	#$C0,d1
	move.l	d0,d3
	moveq	#$A,d4
	lsr.l	d4,d3
	and.l	#$38,d3
	or.l	d3,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#5,d1
	lsr.l	d1,d0
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	a2,a0
	addq.w	#4,a2
	move.l	d0,(a0)
	addq.l	#1,d2
L520
	cmp.l	d5,d2
	blt.b	L519
L521
	movem.l	(a7)+,d2-d6/a2
	unlk	a5
	rts

	SECTION "_SWFSD_read_index_span_BGR16PC:0",CODE


;void SWFSD_read_index_span_BGR16PC(GLcontext *ctx, GLuint n, GLint x
	XDEF	_SWFSD_read_index_span_BGR16PC
_SWFSD_read_index_span_BGR16PC
L530	EQU	-$44
	link	a5,#L530
	movem.l	d2-d6/a2,-(a7)
	movem.l	$10(a5),d1/d3/a0
	move.l	$C(a5),d2
	move.l	$8(a5),a1
L523
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a1),-4(a5)
;    short* buffer = (short *)(c->BackArray +
	move.l	-4(a5),a1
	move.l	$30(a1),-$8(a5)
	move.l	-4(a5),a1
	move.l	$5C(a1),d0
	sub.l	d3,d0
	subq.l	#1,d0
	move.l	-4(a5),a1
	move.l	$50(a1),d3
	mulu.l	d3,d0
	add.l	d0,-$8(a5)
	moveq	#1,d0
	asl.l	d0,d1
	move.l	d1,d0
	add.l	d0,-$8(a5)
;    GLuint* i = index;
	move.l	a0,a2
;    int n1 = (n >> 1);
	move.l	d2,d0
	moveq	#1,d1
	lsr.l	d1,d0
	move.l	d0,-$1C(a5)
;    int n2 = (n & 0x01);
	move.l	d2,d5
	and.l	#1,d5
;    for (z=0;
	moveq	#0,d2
	bra	L525
L524
;	temp = *((long *)buffer)++;
	move.l	-$8(a5),a0
	moveq	#4,d0
	add.l	d0,-$8(a5)
	move.l	(a0),d4
;	color = temp >> 16;
	move.l	d4,d0
	moveq	#$10,d1
	lsr.l	d1,d0
;	*i++ = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#5,d3
	asl.l	d3,d1
	and.l	#$E0,d1
	move.l	d0,d3
	moveq	#$B,d6
	lsr.l	d6,d3
	and.l	#$1C,d3
	or.l	d3,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#5,d1
	lsr.l	d1,d0
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	a2,a0
	addq.w	#4,a2
	move.l	d0,(a0)
;	color = temp & 0xffff;
	move.l	d4,d0
	and.l	#$FFFF,d0
;	*i++ = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#5,d3
	asl.l	d3,d1
	and.l	#$E0,d1
	move.l	d0,d3
	moveq	#$B,d4
	lsr.l	d4,d3
	and.l	#$1C,d3
	or.l	d3,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#5,d1
	lsr.l	d1,d0
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	a2,a0
	addq.w	#4,a2
	move.l	d0,(a0)
	addq.l	#1,d2
L525
	cmp.l	-$1C(a5),d2
	blt	L524
L526
;    for (z=0;
	moveq	#0,d2
	bra.b	L528
L527
;	color = *buffer++;
	move.l	-$8(a5),a0
	moveq	#2,d0
	add.l	d0,-$8(a5)
	move.w	(a0),d0
	ext.l	d0
;	*i++ = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#5,d3
	asl.l	d3,d1
	and.l	#$E0,d1
	move.l	d0,d3
	moveq	#$B,d4
	lsr.l	d4,d3
	and.l	#$1C,d3
	or.l	d3,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#5,d1
	lsr.l	d1,d0
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	a2,a0
	addq.w	#4,a2
	move.l	d0,(a0)
	addq.l	#1,d2
L528
	cmp.l	d5,d2
	blt.b	L527
L529
	movem.l	(a7)+,d2-d6/a2
	unlk	a5
	rts

	SECTION "_SWFSD_read_index_span_ARGB:0",CODE


;void SWFSD_read_index_span_ARGB(GLcontext *ctx, GLuint n, GLint x, G
	XDEF	_SWFSD_read_index_span_ARGB
_SWFSD_read_index_span_ARGB
L535	EQU	-$28
	link	a5,#L535
	movem.l	d2-d4/a2,-(a7)
	movem.l	$10(a5),d1/d2/a0
	move.l	$C(a5),d3
	move.l	$8(a5),a1
L531
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a1),-4(a5)
;    long* buffer = (long *)(c->BackArray +
	move.l	-4(a5),a1
	move.l	$30(a1),a2
	move.l	-4(a5),a1
	move.l	$5C(a1),d0
	sub.l	d2,d0
	subq.l	#1,d0
	move.l	-4(a5),a1
	move.l	$50(a1),d2
	mulu.l	d2,d0
	add.l	d0,a2
	moveq	#2,d0
	asl.l	d0,d1
	add.l	d1,a2
;    GLuint* i = index;
	move.l	a0,-$10(a5)
;    for (z=0;
	moveq	#0,d2
	bra.b	L533
L532
;	color = *buffer++;
	move.l	a2,a0
	addq.w	#4,a2
	move.l	(a0),d0
;	*i++ = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	and.l	#$FF,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#$8,d4
	lsr.l	d4,d1
	and.l	#$FF,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#$10,d1
	lsr.l	d1,d0
	and.l	#$FF,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	-$10(a5),a0
	moveq	#4,d1
	add.l	d1,-$10(a5)
	move.l	d0,(a0)
	addq.l	#1,d2
L533
	cmp.l	d3,d2
	blo.b	L532
L534
	movem.l	(a7)+,d2-d4/a2
	unlk	a5
	rts

	SECTION "_SWFSD_read_index_span_BGRA:0",CODE


;void SWFSD_read_index_span_BGRA(GLcontext *ctx, GLuint n, GLint x, G
	XDEF	_SWFSD_read_index_span_BGRA
_SWFSD_read_index_span_BGRA
L540	EQU	-$28
	link	a5,#L540
	movem.l	d2-d4/a2,-(a7)
	movem.l	$10(a5),d1/d2/a0
	move.l	$C(a5),d3
	move.l	$8(a5),a1
L536
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a1),-4(a5)
;    long* buffer = (long *)(c->BackArray +
	move.l	-4(a5),a1
	move.l	$30(a1),a2
	move.l	-4(a5),a1
	move.l	$5C(a1),d0
	sub.l	d2,d0
	subq.l	#1,d0
	move.l	-4(a5),a1
	move.l	$50(a1),d2
	mulu.l	d2,d0
	add.l	d0,a2
	moveq	#2,d0
	asl.l	d0,d1
	add.l	d1,a2
;    GLuint* i = index;
	move.l	a0,-$10(a5)
;    for (z=0;
	moveq	#0,d2
	bra.b	L538
L537
;	color = *buffer++;
	move.l	a2,a0
	addq.w	#4,a2
	move.l	(a0),d0
;	*i++ = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#$18,d4
	lsr.l	d4,d1
	and.l	#$FF,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#$10,d4
	lsr.l	d4,d1
	and.l	#$FF,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#$8,d1
	lsr.l	d1,d0
	and.l	#$FF,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	-$10(a5),a0
	moveq	#4,d1
	add.l	d1,-$10(a5)
	move.l	d0,(a0)
	addq.l	#1,d2
L538
	cmp.l	d3,d2
	blo.b	L537
L539
	movem.l	(a7)+,d2-d4/a2
	unlk	a5
	rts

	SECTION "_SWFSD_read_color_pixels_RGB15:0",CODE


;void SWFSD_read_color_pixels_RGB15(GLcontext *ctx, GLuint n, const G
	XDEF	_SWFSD_read_color_pixels_RGB15
_SWFSD_read_color_pixels_RGB15
L547	EQU	-$60
	link	a5,#L547
	movem.l	d2-d6/a2-a4,-(a7)
	move.l	$C(a5),d5
	move.l	$28(a5),a0
	move.l	$24(a5),a1
	move.l	$20(a5),a2
	move.l	$1C(a5),a3
L541
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$8(a5),a4
	move.l	$974(a4),-4(a5)
;    short* buffer = (short *)c->BackArray;
	move.l	-4(a5),a4
	move.l	$30(a4),-$8(a5)
;    const GLint* xpos = x;
	move.l	$10(a5),-$C(a5)
;    const GLint* ypos = y;
	move.l	$14(a5),-$10(a5)
;    GLubyte* r = red;
	move.l	$18(a5),-$14(a5)
;    GLubyte* g = green;
;    GLubyte* b = blue;
;    GLubyte* a = alpha;
;    const GLubyte* m = mask;
;    int h = c->height-1;
	move.l	-4(a5),a4
	move.l	$5C(a4),d4
	subq.l	#1,d4
;    int w = c->bprow>>1;
	move.l	-4(a5),a4
	move.l	$50(a4),d3
	moveq	#1,d0
	lsr.l	d0,d3
;    for (i=0;
	moveq	#0,d2
	bra	L545
L542
;	if (*m++)
	move.l	a0,-$48(a5)
	addq.w	#1,a0
	move.l	-$48(a5),a4
	move.b	(a4),d0
	beq.b	L544
L543
;	    color = buffer[(h-(*ypos)) * w + (*xpos)];
	move.l	-$10(a5),a4
	move.l	(a4),d0
	move.l	d4,d1
	sub.l	d0,d1
	move.l	d1,d0
	muls.l	d3,d0
	move.l	-$C(a5),a4
	move.l	(a4),d1
	add.l	d1,d0
	add.l	d0,d0
	add.l	-$8(a5),d0
	move.l	d0,-$44(a5)
	move.l	-$44(a5),a4
	move.w	(a4),d1
;	    *a = (GLubyte)0xff;
	move.b	#$FF,(a1)
;	    *r = (GLubyte)((color >> 7) & 0xf8);
	moveq	#0,d0
	move.w	d1,d0
	moveq	#7,d6
	asr.l	d6,d0
	and.l	#$F8,d0
	move.l	-$14(a5),a4
	move.b	d0,(a4)
;	    *g = (GLubyte)((color >> 2) & 0xf8);
	moveq	#0,d0
	move.w	d1,d0
	moveq	#2,d6
	asr.l	d6,d0
	and.l	#$F8,d0
	move.b	d0,(a3)
;	    *b = (GLubyte)((color << 3) & 0xf8);
	moveq	#0,d0
	move.w	d1,d0
	moveq	#3,d1
	asl.l	d1,d0
	and.l	#$F8,d0
	move.b	d0,(a2)
L544
;	xpos++;
	moveq	#4,d0
	add.l	d0,-$C(a5)
;	ypos++;
	moveq	#4,d0
	add.l	d0,-$10(a5)
;	a++;
	addq.w	#1,a1
;	r++;
	moveq	#1,d0
	add.l	d0,-$14(a5)
;	g++;
	addq.w	#1,a3
;	b++;
	addq.w	#1,a2
	addq.l	#1,d2
L545
	cmp.l	d5,d2
	blo	L542
L546
	movem.l	(a7)+,d2-d6/a2-a4
	unlk	a5
	rts

	SECTION "_SWFSD_read_color_pixels_RGB15PC:0",CODE


;void SWFSD_read_color_pixels_RGB15PC(GLcontext *ctx, GLuint n, const
	XDEF	_SWFSD_read_color_pixels_RGB15PC
_SWFSD_read_color_pixels_RGB15PC
L554	EQU	-$60
	link	a5,#L554
	movem.l	d2-d6/a2-a4,-(a7)
	move.l	$28(a5),a0
	move.l	$24(a5),a1
	move.l	$20(a5),a2
	move.l	$1C(a5),a3
L548
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$8(a5),a4
	move.l	$974(a4),-4(a5)
;    short* buffer = (short *)c->BackArray;
	move.l	-4(a5),a4
	move.l	$30(a4),-$8(a5)
;    const GLint* xpos = x;
	move.l	$10(a5),-$C(a5)
;    const GLint* ypos = y;
	move.l	$14(a5),-$10(a5)
;    GLubyte* r = red;
	move.l	$18(a5),-$14(a5)
;    GLubyte* g = green;
;    GLubyte* b = blue;
;    GLubyte* a = alpha;
;    const GLubyte* m = mask;
;    int h = c->height-1;
	move.l	-4(a5),a4
	move.l	$5C(a4),d5
	subq.l	#1,d5
;    int w = c->bprow>>1;
	move.l	-4(a5),a4
	move.l	$50(a4),d4
	moveq	#1,d0
	lsr.l	d0,d4
;    for (i=0;
	moveq	#0,d3
	bra	L552
L549
;	if (*m++)
	move.l	a0,-$48(a5)
	addq.w	#1,a0
	move.l	-$48(a5),a4
	move.b	(a4),d0
	beq.b	L551
L550
;	    color = buffer[(h-(*ypos)) * w + (*xpos)];
	move.l	-$10(a5),a4
	move.l	(a4),d0
	move.l	d5,d1
	sub.l	d0,d1
	move.l	d1,d0
	muls.l	d4,d0
	move.l	-$C(a5),a4
	move.l	(a4),d1
	add.l	d1,d0
	add.l	d0,d0
	add.l	-$8(a5),d0
	move.l	d0,-$44(a5)
	move.l	-$44(a5),a4
	move.w	(a4),d2
;	    *a = (GLubyte)0xff;
	move.b	#$FF,(a1)
;	    *r = (GLubyte)((color << 1)& 0xf8);
	moveq	#0,d0
	move.w	d2,d0
	moveq	#1,d1
	asl.l	d1,d0
	and.l	#$F8,d0
	move.l	-$14(a5),a4
	move.b	d0,(a4)
;	    *g = (GLubyte)( ((color << 6) & 0xc0) | ((color >> 10) & 0
	moveq	#0,d0
	move.w	d2,d0
	moveq	#6,d1
	asl.l	d1,d0
	and.l	#$C0,d0
	moveq	#0,d1
	move.w	d2,d1
	moveq	#$A,d6
	asr.l	d6,d1
	and.l	#$38,d1
	or.l	d1,d0
	move.b	d0,(a3)
;	    *b = (GLubyte)((color >> 5) & 0xf8);
	moveq	#0,d0
	move.w	d2,d0
	moveq	#5,d1
	asr.l	d1,d0
	and.l	#$F8,d0
	move.b	d0,(a2)
L551
;	xpos++;
	moveq	#4,d0
	add.l	d0,-$C(a5)
;	ypos++;
	moveq	#4,d0
	add.l	d0,-$10(a5)
;	a++;
	addq.w	#1,a1
;	r++;
	moveq	#1,d0
	add.l	d0,-$14(a5)
;	g++;
	addq.w	#1,a3
;	b++;
	addq.w	#1,a2
	addq.l	#1,d3
L552
	cmp.l	$C(a5),d3
	blo	L549
L553
	movem.l	(a7)+,d2-d6/a2-a4
	unlk	a5
	rts

	SECTION "_SWFSD_read_color_pixels_BGR15PC:0",CODE


;void SWFSD_read_color_pixels_BGR15PC(GLcontext *ctx, GLuint n, const
	XDEF	_SWFSD_read_color_pixels_BGR15PC
_SWFSD_read_color_pixels_BGR15PC
L561	EQU	-$60
	link	a5,#L561
	movem.l	d2-d6/a2-a4,-(a7)
	move.l	$28(a5),a0
	move.l	$24(a5),a1
	move.l	$20(a5),a2
	move.l	$1C(a5),a3
L555
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$8(a5),a4
	move.l	$974(a4),-4(a5)
;    short* buffer = (short *)c->BackArray;
	move.l	-4(a5),a4
	move.l	$30(a4),-$8(a5)
;    const GLint* xpos = x;
	move.l	$10(a5),-$C(a5)
;    const GLint* ypos = y;
	move.l	$14(a5),-$10(a5)
;    GLubyte* r = red;
	move.l	$18(a5),-$14(a5)
;    GLubyte* g = green;
;    GLubyte* b = blue;
;    GLubyte* a = alpha;
;    const GLubyte* m = mask;
;    int h = c->height-1;
	move.l	-4(a5),a4
	move.l	$5C(a4),d5
	subq.l	#1,d5
;    int w = c->bprow>>1;
	move.l	-4(a5),a4
	move.l	$50(a4),d4
	moveq	#1,d0
	lsr.l	d0,d4
;    for (i=0;
	moveq	#0,d3
	bra	L559
L556
;	if (*m++)
	move.l	a0,-$48(a5)
	addq.w	#1,a0
	move.l	-$48(a5),a4
	move.b	(a4),d0
	beq.b	L558
L557
;	    color = buffer[(h-(*ypos)) * w + (*xpos)];
	move.l	-$10(a5),a4
	move.l	(a4),d0
	move.l	d5,d1
	sub.l	d0,d1
	move.l	d1,d0
	muls.l	d4,d0
	move.l	-$C(a5),a4
	move.l	(a4),d1
	add.l	d1,d0
	add.l	d0,d0
	add.l	-$8(a5),d0
	move.l	d0,-$44(a5)
	move.l	-$44(a5),a4
	move.w	(a4),d2
;	    *a = (GLubyte)0xff;
	move.b	#$FF,(a1)
;	    *b = (GLubyte)((color << 1)& 0xf8);
	moveq	#0,d0
	move.w	d2,d0
	moveq	#1,d1
	asl.l	d1,d0
	and.l	#$F8,d0
	move.b	d0,(a2)
;	    *g = (GLubyte)( ((color << 6) & 0xc0) | ((color >> 10) & 0
	moveq	#0,d0
	move.w	d2,d0
	moveq	#6,d1
	asl.l	d1,d0
	and.l	#$C0,d0
	moveq	#0,d1
	move.w	d2,d1
	moveq	#$A,d6
	asr.l	d6,d1
	and.l	#$38,d1
	or.l	d1,d0
	move.b	d0,(a3)
;	    *r = (GLubyte)((color >> 5) & 0xf8);
	moveq	#0,d0
	move.w	d2,d0
	moveq	#5,d1
	asr.l	d1,d0
	and.l	#$F8,d0
	move.l	-$14(a5),a4
	move.b	d0,(a4)
L558
;	xpos++;
	moveq	#4,d0
	add.l	d0,-$C(a5)
;	ypos++;
	moveq	#4,d0
	add.l	d0,-$10(a5)
;	a++;
	addq.w	#1,a1
;	r++;
	moveq	#1,d0
	add.l	d0,-$14(a5)
;	g++;
	addq.w	#1,a3
;	b++;
	addq.w	#1,a2
	addq.l	#1,d3
L559
	cmp.l	$C(a5),d3
	blo	L556
L560
	movem.l	(a7)+,d2-d6/a2-a4
	unlk	a5
	rts

	SECTION "_SWFSD_read_color_pixels_BGR16PC:0",CODE


;void SWFSD_read_color_pixels_BGR16PC(GLcontext *ctx, GLuint n, const
	XDEF	_SWFSD_read_color_pixels_BGR16PC
_SWFSD_read_color_pixels_BGR16PC
L568	EQU	-$60
	link	a5,#L568
	movem.l	d2-d6/a2-a4,-(a7)
	move.l	$28(a5),a0
	move.l	$24(a5),a1
	move.l	$20(a5),a2
	move.l	$1C(a5),a3
L562
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$8(a5),a4
	move.l	$974(a4),-4(a5)
;    short* buffer = (short *)c->BackArray;
	move.l	-4(a5),a4
	move.l	$30(a4),-$8(a5)
;    const GLint* xpos = x;
	move.l	$10(a5),-$C(a5)
;    const GLint* ypos = y;
	move.l	$14(a5),-$10(a5)
;    GLubyte* r = red;
	move.l	$18(a5),-$14(a5)
;    GLubyte* g = green;
;    GLubyte* b = blue;
;    GLubyte* a = alpha;
;    const GLubyte* m = mask;
;    int h = c->height-1;
	move.l	-4(a5),a4
	move.l	$5C(a4),d5
	subq.l	#1,d5
;    int w = c->bprow>>1;
	move.l	-4(a5),a4
	move.l	$50(a4),d4
	moveq	#1,d0
	lsr.l	d0,d4
;    for (i=0;
	moveq	#0,d3
	bra	L566
L563
;	if (*m++)
	move.l	a0,-$48(a5)
	addq.w	#1,a0
	move.l	-$48(a5),a4
	move.b	(a4),d0
	beq.b	L565
L564
;	    color = buffer[(h-(*ypos)) * w + (*xpos)];
	move.l	-$10(a5),a4
	move.l	(a4),d0
	move.l	d5,d1
	sub.l	d0,d1
	move.l	d1,d0
	muls.l	d4,d0
	move.l	-$C(a5),a4
	move.l	(a4),d1
	add.l	d1,d0
	add.l	d0,d0
	add.l	-$8(a5),d0
	move.l	d0,-$44(a5)
	move.l	-$44(a5),a4
	move.w	(a4),d2
;	    *a = (GLubyte)0xff;
	move.b	#$FF,(a1)
;	    *b = (GLubyte)(color & 0xf8);
	moveq	#0,d0
	move.w	d2,d0
	and.l	#$F8,d0
	move.b	d0,(a2)
;	    *g = (GLubyte)( ((color << 5) & 0xe0) | ((color >> 11) & 0
	moveq	#0,d0
	move.w	d2,d0
	moveq	#5,d1
	asl.l	d1,d0
	and.l	#$E0,d0
	moveq	#0,d1
	move.w	d2,d1
	moveq	#$B,d6
	asr.l	d6,d1
	and.l	#$1C,d1
	or.l	d1,d0
	move.b	d0,(a3)
;	    *r = (GLubyte)((color >> 5) & 0xf8);
	moveq	#0,d0
	move.w	d2,d0
	moveq	#5,d1
	asr.l	d1,d0
	and.l	#$F8,d0
	move.l	-$14(a5),a4
	move.b	d0,(a4)
L565
;	xpos++;
	moveq	#4,d0
	add.l	d0,-$C(a5)
;	ypos++;
	moveq	#4,d0
	add.l	d0,-$10(a5)
;	a++;
	addq.w	#1,a1
;	r++;
	moveq	#1,d0
	add.l	d0,-$14(a5)
;	g++;
	addq.w	#1,a3
;	b++;
	addq.w	#1,a2
	addq.l	#1,d3
L566
	cmp.l	$C(a5),d3
	blo	L563
L567
	movem.l	(a7)+,d2-d6/a2-a4
	unlk	a5
	rts

	SECTION "_SWFSD_read_index_pixels_RGB15:0",CODE


;void SWFSD_read_index_pixels_RGB15( GLcontext *ctx,GLuint n, const G
	XDEF	_SWFSD_read_index_pixels_RGB15
_SWFSD_read_index_pixels_RGB15
L575	EQU	-$50
	link	a5,#L575
	movem.l	d2-d6/a2/a3,-(a7)
	move.l	$C(a5),d5
	move.l	$1C(a5),a0
	move.l	$18(a5),a1
	move.l	$14(a5),a2
L569
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$8(a5),a3
	move.l	$974(a3),-4(a5)
;    short* buffer = (short *)c->BackArray;
	move.l	-4(a5),a3
	move.l	$30(a3),-$8(a5)
;    const GLint* xpos = x;
	move.l	$10(a5),-$C(a5)
;    const GLint* ypos = y;
	move.l	a2,-$10(a5)
;    GLuint* i = index;
	move.l	a1,-$14(a5)
;    const GLubyte* m = mask;
	move.l	a0,a2
;    int h = c->height-1;
	move.l	-4(a5),a0
	move.l	$5C(a0),d4
	subq.l	#1,d4
;    int w = c->bprow>>1;
	move.l	-4(a5),a0
	move.l	$50(a0),d3
	moveq	#1,d0
	lsr.l	d0,d3
;    for (z=0;
	moveq	#0,d2
	bra	L573
L570
;	if (*m++)
	move.l	a2,a0
	addq.w	#1,a2
	move.b	(a0),d0
	beq	L572
L571
;	    color = buffer[(h-(*ypos)) * w + (*xpos)];
	move.l	-$10(a5),a0
	move.l	(a0),d0
	move.l	d4,d1
	sub.l	d0,d1
	move.l	d1,d0
	muls.l	d3,d0
	move.l	-$C(a5),a0
	move.l	(a0),d1
	add.l	d1,d0
	move.l	-$8(a5),a1
	lea	0(a1,d0.l*2),a0
	move.w	(a0),d0
	ext.l	d0
;	    *i = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#3,d6
	asl.l	d6,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#2,d6
	lsr.l	d6,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#7,d1
	lsr.l	d1,d0
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	-$14(a5),a0
	move.l	d0,(a0)
L572
;	i++;
	moveq	#4,d0
	add.l	d0,-$14(a5)
;	xpos++;
	moveq	#4,d0
	add.l	d0,-$C(a5)
;	ypos++;
	moveq	#4,d0
	add.l	d0,-$10(a5)
	addq.l	#1,d2
L573
	cmp.l	d5,d2
	blo	L570
L574
	movem.l	(a7)+,d2-d6/a2/a3
	unlk	a5
	rts

	SECTION "_SWFSD_read_index_pixels_RGB15PC:0",CODE


;void SWFSD_read_index_pixels_RGB15PC( GLcontext *ctx,GLuint n, const
	XDEF	_SWFSD_read_index_pixels_RGB15PC
_SWFSD_read_index_pixels_RGB15PC
L582	EQU	-$50
	link	a5,#L582
	movem.l	d2-d6/a2/a3,-(a7)
	move.l	$1C(a5),a0
	move.l	$18(a5),a1
	move.l	$14(a5),a2
L576
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$8(a5),a3
	move.l	$974(a3),-4(a5)
;    short* buffer = (short *)c->BackArray;
	move.l	-4(a5),a3
	move.l	$30(a3),-$8(a5)
;    const GLint* xpos = x;
	move.l	$10(a5),-$C(a5)
;    const GLint* ypos = y;
	move.l	a2,-$10(a5)
;    GLuint* i = index;
	move.l	a1,-$14(a5)
;    const GLubyte* m = mask;
	move.l	a0,a2
;    int h = c->height-1;
	move.l	-4(a5),a0
	move.l	$5C(a0),d5
	subq.l	#1,d5
;    int w = c->bprow>>1;
	move.l	-4(a5),a0
	move.l	$50(a0),d4
	moveq	#1,d0
	lsr.l	d0,d4
;    for (z=0;
	moveq	#0,d3
	bra	L580
L577
;	if (*m++)
	move.l	a2,a0
	addq.w	#1,a2
	move.b	(a0),d0
	beq	L579
L578
;	    color = buffer[(h-(*ypos)) * w + (*xpos)];
	move.l	-$10(a5),a0
	move.l	(a0),d0
	move.l	d5,d1
	sub.l	d0,d1
	move.l	d1,d0
	muls.l	d4,d0
	move.l	-$C(a5),a0
	move.l	(a0),d1
	add.l	d1,d0
	move.l	-$8(a5),a1
	lea	0(a1,d0.l*2),a0
	move.w	(a0),d0
	ext.l	d0
;	    *i = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#5,d2
	lsr.l	d2,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#6,d2
	asl.l	d2,d1
	and.l	#$C0,d1
	move.l	d0,d2
	moveq	#$A,d6
	lsr.l	d6,d2
	and.l	#$38,d2
	or.l	d2,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#1,d1
	asl.l	d1,d0
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	-$14(a5),a0
	move.l	d0,(a0)
L579
;	i++;
	moveq	#4,d0
	add.l	d0,-$14(a5)
;	xpos++;
	moveq	#4,d0
	add.l	d0,-$C(a5)
;	ypos++;
	moveq	#4,d0
	add.l	d0,-$10(a5)
	addq.l	#1,d3
L580
	cmp.l	$C(a5),d3
	blo	L577
L581
	movem.l	(a7)+,d2-d6/a2/a3
	unlk	a5
	rts

	SECTION "_SWFSD_read_index_pixels_RGB16:0",CODE


;void SWFSD_read_index_pixels_RGB16( GLcontext *ctx,GLuint n, const G
	XDEF	_SWFSD_read_index_pixels_RGB16
_SWFSD_read_index_pixels_RGB16
L589	EQU	-$50
	link	a5,#L589
	movem.l	d2-d6/a2/a3,-(a7)
	move.l	$C(a5),d5
	move.l	$1C(a5),a0
	move.l	$18(a5),a1
	move.l	$14(a5),a2
L583
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$8(a5),a3
	move.l	$974(a3),-4(a5)
;    short* buffer = (short *)c->BackArray;
	move.l	-4(a5),a3
	move.l	$30(a3),-$8(a5)
;    const GLint* xpos = x;
	move.l	$10(a5),-$C(a5)
;    const GLint* ypos = y;
	move.l	a2,-$10(a5)
;    GLuint* i = index;
	move.l	a1,-$14(a5)
;    const GLubyte* m = mask;
	move.l	a0,a2
;    int h = c->height-1;
	move.l	-4(a5),a0
	move.l	$5C(a0),d4
	subq.l	#1,d4
;    int w = c->bprow>>1;
	move.l	-4(a5),a0
	move.l	$50(a0),d3
	moveq	#1,d0
	lsr.l	d0,d3
;    for (z=0;
	moveq	#0,d2
	bra	L587
L584
;	if (*m++)
	move.l	a2,a0
	addq.w	#1,a2
	move.b	(a0),d0
	beq	L586
L585
;	    color = buffer[(h-(*ypos)) * w + (*xpos)];
	move.l	-$10(a5),a0
	move.l	(a0),d0
	move.l	d4,d1
	sub.l	d0,d1
	move.l	d1,d0
	muls.l	d3,d0
	move.l	-$C(a5),a0
	move.l	(a0),d1
	add.l	d1,d0
	move.l	-$8(a5),a1
	lea	0(a1,d0.l*2),a0
	move.w	(a0),d0
	ext.l	d0
;	    *i = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#3,d6
	asl.l	d6,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#3,d6
	lsr.l	d6,d1
	and.l	#$FC,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#$8,d1
	lsr.l	d1,d0
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	-$14(a5),a0
	move.l	d0,(a0)
L586
;	i++;
	moveq	#4,d0
	add.l	d0,-$14(a5)
;	xpos++;
	moveq	#4,d0
	add.l	d0,-$C(a5)
;	ypos++;
	moveq	#4,d0
	add.l	d0,-$10(a5)
	addq.l	#1,d2
L587
	cmp.l	d5,d2
	blo	L584
L588
	movem.l	(a7)+,d2-d6/a2/a3
	unlk	a5
	rts

	SECTION "_SWFSD_read_index_pixels_RGB16PC:0",CODE


;void SWFSD_read_index_pixels_RGB16PC( GLcontext *ctx,GLuint n, const
	XDEF	_SWFSD_read_index_pixels_RGB16PC
_SWFSD_read_index_pixels_RGB16PC
L596	EQU	-$50
	link	a5,#L596
	movem.l	d2-d6/a2/a3,-(a7)
	move.l	$1C(a5),a0
	move.l	$18(a5),a1
	move.l	$14(a5),a2
L590
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$8(a5),a3
	move.l	$974(a3),-4(a5)
;    short* buffer = (short *)c->BackArray;
	move.l	-4(a5),a3
	move.l	$30(a3),-$8(a5)
;    const GLint* xpos = x;
	move.l	$10(a5),-$C(a5)
;    const GLint* ypos = y;
	move.l	a2,-$10(a5)
;    GLuint* i = index;
	move.l	a1,-$14(a5)
;    const GLubyte* m = mask;
	move.l	a0,a2
;    int h = c->height-1;
	move.l	-4(a5),a0
	move.l	$5C(a0),d5
	subq.l	#1,d5
;    int w = c->bprow>>1;
	move.l	-4(a5),a0
	move.l	$50(a0),d4
	moveq	#1,d0
	lsr.l	d0,d4
;    for (z=0;
	moveq	#0,d3
	bra	L594
L591
;	if (*m++)
	move.l	a2,a0
	addq.w	#1,a2
	move.b	(a0),d0
	beq	L593
L592
;	    color = buffer[(h-(*ypos)) * w + (*xpos)];
	move.l	-$10(a5),a0
	move.l	(a0),d0
	move.l	d5,d1
	sub.l	d0,d1
	move.l	d1,d0
	muls.l	d4,d0
	move.l	-$C(a5),a0
	move.l	(a0),d1
	add.l	d1,d0
	move.l	-$8(a5),a1
	lea	0(a1,d0.l*2),a0
	move.w	(a0),d0
	ext.l	d0
;	    *i = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#5,d2
	lsr.l	d2,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#5,d2
	asl.l	d2,d1
	and.l	#$E0,d1
	move.l	d0,d2
	moveq	#$B,d6
	lsr.l	d6,d2
	and.l	#$1C,d2
	or.l	d2,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	-$14(a5),a0
	move.l	d0,(a0)
L593
;	i++;
	moveq	#4,d0
	add.l	d0,-$14(a5)
;	xpos++;
	moveq	#4,d0
	add.l	d0,-$C(a5)
;	ypos++;
	moveq	#4,d0
	add.l	d0,-$10(a5)
	addq.l	#1,d3
L594
	cmp.l	$C(a5),d3
	blo	L591
L595
	movem.l	(a7)+,d2-d6/a2/a3
	unlk	a5
	rts

	SECTION "_SWFSD_read_index_pixels_BGR15PC:0",CODE


;void SWFSD_read_index_pixels_BGR15PC( GLcontext *ctx,GLuint n, const
	XDEF	_SWFSD_read_index_pixels_BGR15PC
_SWFSD_read_index_pixels_BGR15PC
L603	EQU	-$50
	link	a5,#L603
	movem.l	d2-d6/a2/a3,-(a7)
	move.l	$1C(a5),a0
	move.l	$18(a5),a1
	move.l	$14(a5),a2
L597
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$8(a5),a3
	move.l	$974(a3),-4(a5)
;    short* buffer = (short *)c->BackArray;
	move.l	-4(a5),a3
	move.l	$30(a3),-$8(a5)
;    const GLint* xpos = x;
	move.l	$10(a5),-$C(a5)
;    const GLint* ypos = y;
	move.l	a2,-$10(a5)
;    GLuint* i = index;
	move.l	a1,-$14(a5)
;    const GLubyte* m = mask;
	move.l	a0,a2
;    int h = c->height-1;
	move.l	-4(a5),a0
	move.l	$5C(a0),d5
	subq.l	#1,d5
;    int w = c->bprow>>1;
	move.l	-4(a5),a0
	move.l	$50(a0),d4
	moveq	#1,d0
	lsr.l	d0,d4
;    for (z=0;
	moveq	#0,d3
	bra	L601
L598
;	if (*m++)
	move.l	a2,a0
	addq.w	#1,a2
	move.b	(a0),d0
	beq	L600
L599
;	    color = buffer[(h-(*ypos)) * w + (*xpos)];
	move.l	-$10(a5),a0
	move.l	(a0),d0
	move.l	d5,d1
	sub.l	d0,d1
	move.l	d1,d0
	muls.l	d4,d0
	move.l	-$C(a5),a0
	move.l	(a0),d1
	add.l	d1,d0
	move.l	-$8(a5),a1
	lea	0(a1,d0.l*2),a0
	move.w	(a0),d0
	ext.l	d0
;	    *i = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#1,d2
	asl.l	d2,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#6,d2
	asl.l	d2,d1
	and.l	#$C0,d1
	move.l	d0,d2
	moveq	#$A,d6
	lsr.l	d6,d2
	and.l	#$38,d2
	or.l	d2,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#5,d1
	lsr.l	d1,d0
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	-$14(a5),a0
	move.l	d0,(a0)
L600
;	i++;
	moveq	#4,d0
	add.l	d0,-$14(a5)
;	xpos++;
	moveq	#4,d0
	add.l	d0,-$C(a5)
;	ypos++;
	moveq	#4,d0
	add.l	d0,-$10(a5)
	addq.l	#1,d3
L601
	cmp.l	$C(a5),d3
	blo	L598
L602
	movem.l	(a7)+,d2-d6/a2/a3
	unlk	a5
	rts

	SECTION "_SWFSD_read_index_pixels_BGR16PC:0",CODE


;void SWFSD_read_index_pixels_BGR16PC( GLcontext *ctx,GLuint n, const
	XDEF	_SWFSD_read_index_pixels_BGR16PC
_SWFSD_read_index_pixels_BGR16PC
L610	EQU	-$50
	link	a5,#L610
	movem.l	d2-d6/a2/a3,-(a7)
	move.l	$1C(a5),a0
	move.l	$18(a5),a1
	move.l	$14(a5),a2
L604
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$8(a5),a3
	move.l	$974(a3),-4(a5)
;    short* buffer = (short *)c->BackArray;
	move.l	-4(a5),a3
	move.l	$30(a3),-$8(a5)
;    const GLint* xpos = x;
	move.l	$10(a5),-$C(a5)
;    const GLint* ypos = y;
	move.l	a2,-$10(a5)
;    GLuint* i = index;
	move.l	a1,-$14(a5)
;    const GLubyte* m = mask;
	move.l	a0,a2
;    int h = c->height-1;
	move.l	-4(a5),a0
	move.l	$5C(a0),d5
	subq.l	#1,d5
;    int w = c->bprow>>1;
	move.l	-4(a5),a0
	move.l	$50(a0),d4
	moveq	#1,d0
	lsr.l	d0,d4
;    for (z=0;
	moveq	#0,d3
	bra	L608
L605
;	if (*m++)
	move.l	a2,a0
	addq.w	#1,a2
	move.b	(a0),d0
	beq	L607
L606
;	    color = buffer[(h-(*ypos)) * w + (*xpos)];
	move.l	-$10(a5),a0
	move.l	(a0),d0
	move.l	d5,d1
	sub.l	d0,d1
	move.l	d1,d0
	muls.l	d4,d0
	move.l	-$C(a5),a0
	move.l	(a0),d1
	add.l	d1,d0
	move.l	-$8(a5),a1
	lea	0(a1,d0.l*2),a0
	move.w	(a0),d0
	ext.l	d0
;	    *i = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	and.l	#$F8,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#5,d2
	asl.l	d2,d1
	and.l	#$E0,d1
	move.l	d0,d2
	moveq	#$B,d6
	lsr.l	d6,d2
	and.l	#$1C,d2
	or.l	d2,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#5,d1
	lsr.l	d1,d0
	and.l	#$F8,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	-$14(a5),a0
	move.l	d0,(a0)
L607
;	i++;
	moveq	#4,d0
	add.l	d0,-$14(a5)
;	xpos++;
	moveq	#4,d0
	add.l	d0,-$C(a5)
;	ypos++;
	moveq	#4,d0
	add.l	d0,-$10(a5)
	addq.l	#1,d3
L608
	cmp.l	$C(a5),d3
	blo	L605
L609
	movem.l	(a7)+,d2-d6/a2/a3
	unlk	a5
	rts

	SECTION "_SWFSD_read_index_pixels_ARGB:0",CODE


;void SWFSD_read_index_pixels_ARGB( GLcontext *ctx,GLuint n, const GL
	XDEF	_SWFSD_read_index_pixels_ARGB
_SWFSD_read_index_pixels_ARGB
L617	EQU	-$50
	link	a5,#L617
	movem.l	d2-d6/a2/a3,-(a7)
	move.l	$C(a5),d5
	move.l	$1C(a5),a0
	move.l	$18(a5),a1
	move.l	$14(a5),a2
L611
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$8(a5),a3
	move.l	$974(a3),-4(a5)
;    char* buffer = (char *)c->BackArray;
	move.l	-4(a5),a3
	move.l	$30(a3),-$8(a5)
;    const GLint* xpos = x;
	move.l	$10(a5),-$C(a5)
;    const GLint* ypos = y;
	move.l	a2,-$10(a5)
;    GLuint* i = index;
	move.l	a1,-$14(a5)
;    const GLubyte* m = mask;
	move.l	a0,a2
;    int h = c->height-1;
	move.l	-4(a5),a0
	move.l	$5C(a0),d4
	subq.l	#1,d4
;    int w = c->bprow>>2;
	move.l	-4(a5),a0
	move.l	$50(a0),d3
	moveq	#2,d0
	lsr.l	d0,d3
;    for (z=0;
	moveq	#0,d2
	bra	L615
L612
;	if (*m++)
	move.l	a2,a0
	addq.w	#1,a2
	move.b	(a0),d0
	beq.b	L614
L613
;	    color = buffer[(h-(*ypos)) * w + (*xpos)];
	move.l	-$10(a5),a0
	move.l	(a0),d0
	move.l	d4,d1
	sub.l	d0,d1
	move.l	d1,d0
	muls.l	d3,d0
	move.l	-$C(a5),a0
	move.l	(a0),d1
	add.l	d1,d0
	move.l	-$8(a5),a1
	lea	0(a1,d0.l),a0
	move.b	(a0),d0
	extb.l	d0
;	    *i = FindNearestPen(c,
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	and.l	#$FF,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#$8,d6
	lsr.l	d6,d1
	and.l	#$FF,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#$10,d1
	lsr.l	d1,d0
	and.l	#$FF,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	-$14(a5),a0
	move.l	d0,(a0)
L614
;	i++;
	moveq	#4,d0
	add.l	d0,-$14(a5)
;	xpos++;
	moveq	#4,d0
	add.l	d0,-$C(a5)
;	ypos++;
	moveq	#4,d0
	add.l	d0,-$10(a5)
	addq.l	#1,d2
L615
	cmp.l	d5,d2
	blo	L612
L616
	movem.l	(a7)+,d2-d6/a2/a3
	unlk	a5
	rts

	SECTION "_SWFSD_read_index_pixels_BGRA:0",CODE


;void SWFSD_read_index_pixels_BGRA( GLcontext *ctx,GLuint n, const GL
	XDEF	_SWFSD_read_index_pixels_BGRA
_SWFSD_read_index_pixels_BGRA
L624	EQU	-$50
	link	a5,#L624
	movem.l	d2-d6/a2/a3,-(a7)
	move.l	$C(a5),d5
	move.l	$1C(a5),a0
	move.l	$18(a5),a1
	move.l	$14(a5),a2
L618
;    AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$8(a5),a3
	move.l	$974(a3),-4(a5)
;    char* buffer = (char *)c->BackArray;
	move.l	-4(a5),a3
	move.l	$30(a3),-$8(a5)
;    const GLint* xpos = x;
	move.l	$10(a5),-$C(a5)
;    const GLint* ypos = y;
	move.l	a2,-$10(a5)
;    GLuint* i = index;
	move.l	a1,-$14(a5)
;    const GLubyte* m = mask;
	move.l	a0,a2
;    int h = c->height-1;
	move.l	-4(a5),a0
	move.l	$5C(a0),d4
	subq.l	#1,d4
;    int w = c->bprow>>2;
	move.l	-4(a5),a0
	move.l	$50(a0),d3
	moveq	#2,d0
	lsr.l	d0,d3
;    for (z=0;
	moveq	#0,d2
	bra	L622
L619
;	if (*m++)
	move.l	a2,a0
	addq.w	#1,a2
	move.b	(a0),d0
	beq	L621
L620
;	    color = buffer[(h-(*ypos)) * w + (*xpos)];
	move.l	-$10(a5),a0
	move.l	(a0),d0
	move.l	d4,d1
	sub.l	d0,d1
	move.l	d1,d0
	muls.l	d3,d0
	move.l	-$C(a5),a0
	move.l	(a0),d1
	add.l	d1,d0
	move.l	-$8(a5),a1
	lea	0(a1,d0.l),a0
	move.b	(a0),d0
	extb.l	d0
;tx->Driver.ReadIn
	move.l	-4(a5),a1
	move.l	$84(a1),a0
	move.l	a0,-(a7)
	move.l	d0,d1
	moveq	#$18,d6
	lsr.l	d6,d1
	and.l	#$FF,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	move.l	d0,d1
	moveq	#$10,d6
	lsr.l	d6,d1
	and.l	#$FF,d1
	and.l	#$FF,d1
	move.l	d1,-(a7)
	moveq	#$8,d1
	lsr.l	d1,d0
	and.l	#$FF,d0
	and.l	#$FF,d0
	move.l	d0,-(a7)
	move.l	-4(a5),-(a7)
	jsr	_FindNearestPen
	add.w	#$14,a7
	move.l	-$14(a5),a0
	move.l	d0,(a0)
L621
;	i++;
	moveq	#4,d0
	add.l	d0,-$14(a5)
;	xpos++;
	moveq	#4,d0
	add.l	d0,-$C(a5)
;	ypos++;
	moveq	#4,d0
	add.l	d0,-$10(a5)
	addq.l	#1,d2
L622
	cmp.l	d5,d2
	blo	L619
L623
	movem.l	(a7)+,d2-d6/a2/a3
	unlk	a5
	rts

	SECTION "_SWFSDriver_DD_pointers:0",CODE


;void SWFSDriver_DD_pointers( GLcontext *ctx )
	XDEF	_SWFSDriver_DD_pointers
_SWFSDriver_DD_pointers
	move.l	a2,-(a7)
	move.l	$8(a7),a0
L625
;   AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a1
;   ctx->Driver.UpdateState = SWFSDriver_DD_pointers;
	move.l	#_SWFSDriver_DD_pointers,$8A4(a0)
;   ctx->Driver.SetBuffer = SWFSDriver_set_buffer;
	move.l	#_SWFSDriver_set_buffer,$8BC(a0)
;   ctx->Driver.GetBufferSize = SWFSDriver_resize;
	move.l	#_SWFSDriver_resize,$8C0(a0)
;   switch (c->fmt)
	move.l	$54(a1),d0
	cmp.l	#$C,d0
	bhi	L635
	move.l	L636(pc,d0.l*4),a1
	jmp	(a1)
L636
	dc.l	L626
	dc.l	L627
	dc.l	L635
	dc.l	L628
	dc.l	L631
	dc.l	L629
	dc.l	L635
	dc.l	L630
	dc.l	L632
	dc.l	L635
	dc.l	L635
	dc.l	L633
	dc.l	L634
;      
L626
;	ctx->Driver.ClearIndex = SWFSD_clear_index_LUT8;
	move.l	#_SWFSD_clear_index_LUT8,$8A8(a0)
;	ctx->Driver.ClearColor = SWFSD_clear_color_LUT8;
	move.l	#_SWFSD_clear_color_LUT8,$8AC(a0)
;	ctx->Driver.Index = SWFSD_set_index_LUT8;
	move.l	#_SWFSD_set_index_LUT8,$8B4(a0)
;	ctx->Driver.Color = SWFSD_set_color_LUT8;
	move.l	#_SWFSD_set_color_LUT8,$8B8(a0)
;	ctx->Driver.Clear = SWFSD_clear_LUT8;
	move.l	#_SWFSD_clear_LUT8,$8B0(a0)
;	ctx->Driver.WriteColorSpan = SWFSD_write_color_span_LUT8;
	move.l	#_SWFSD_write_color_span_LUT8,$8C4(a0)
;	ctx->Driver.WriteMonocolorSpan = SWFSD_write_mono_span_LUT8;
	move.l	#_SWFSD_write_mono_span_LUT8,$8C8(a0)
;	ctx->Driver.WriteColorPixels = SWFSD_write_color_pixels_LUT8;
	move.l	#_SWFSD_write_color_pixels_LUT8,$8CC(a0)
;	ctx->Driver.WriteMonocolorPixels = SWFSD_write_mono_pixels_LUT8;
	move.l	#_SWFSD_write_mono_pixels_LUT8,$8D0(a0)
;	ctx->Driver.WriteIndexSpan = SWFSD_write_index_span_LUT8;
	move.l	#_SWFSD_write_index_span_LUT8,$8D4(a0)
;	ctx->Driver.WriteMonoindexSpan = SWFSD_write_mono_span_LUT8;
	move.l	#_SWFSD_write_mono_span_LUT8,$8D8(a0)
;	ctx->Driver.WriteIndexPixels = SWFSD_write_index_pixels_LUT8;
	move.l	#_SWFSD_write_index_pixels_LUT8,$8DC(a0)
;	ctx->Driver.WriteMonoindexPixels = SWFSD_write_mono_pixels_LUT8;
	move.l	#_SWFSD_write_mono_pixels_LUT8,$8E0(a0)
;	ctx->Driver.ReadIndexSpan = SWFSD_read_index_span_LUT8;
	move.l	#_SWFSD_read_index_span_LUT8,$8E4(a0)
;	ctx->Driver.ReadColorSpan = SWFSD_read_color_span_LUT8;
	move.l	#_SWFSD_read_color_span_LUT8,$8E8(a0)
;	ctx->Driver.ReadIndexPixels = SWFSD_read_index_pixels_LUT8;
	move.l	#_SWFSD_read_index_pixels_LUT8,$8EC(a0)
;	ctx->Driver.ReadColorPixels = SWFSD_read_color_pixels_LUT8;
	move.l	#_SWFSD_read_color_pixels_LUT8,$8F0(a0)
;	
	bra	L635
L627
;	ctx->Driver.ClearIndex = SWFSD_clear_index_RGB;
	move.l	#_SWFSD_clear_index_RGB,$8A8(a0)
;	ctx->Driver.ClearColor = SWFSD_clear_color_RGB15;
	move.l	#_SWFSD_clear_color_RGB15,$8AC(a0)
;	ctx->Driver.Index = SWFSD_set_index_RGB;
	move.l	#_SWFSD_set_index_RGB,$8B4(a0)
;	ctx->Driver.Color = SWFSD_set_color_RGB15;
	move.l	#_SWFSD_set_color_RGB15,$8B8(a0)
;	ctx->Driver.Clear = SWFSD_clear_RGB15;
	move.l	#_SWFSD_clear_RGB15,$8B0(a0)
;	ctx->Driver.WriteColorSpan = SWFSD_write_color_span_RGB15;
	move.l	#_SWFSD_write_color_span_RGB15,$8C4(a0)
;	ctx->Driver.WriteMonocolorSpan = SWFSD_write_mono_span_RGB16;
	move.l	#_SWFSD_write_mono_span_RGB16,$8C8(a0)
;	ctx->Driver.WriteColorPixels = SWFSD_write_color_pixels_RGB15;
	move.l	#_SWFSD_write_color_pixels_RGB15,$8CC(a0)
;	ctx->Driver.WriteMonocolorPixels = SWFSD_write_mono_pixels_RGB16;
	move.l	#_SWFSD_write_mono_pixels_RGB16,$8D0(a0)
;	ctx->Driver.WriteIndexSpan = SWFSD_write_index_span_RGB16;
	move.l	#_SWFSD_write_index_span_RGB16,$8D4(a0)
;	ctx->Driver.WriteMonoindexSpan = SWFSD_write_mono_span_RGB16;
	move.l	#_SWFSD_write_mono_span_RGB16,$8D8(a0)
;	ctx->Driver.WriteIndexPixels = SWFSD_write_index_pixels_RGB16;
	move.l	#_SWFSD_write_index_pixels_RGB16,$8DC(a0)
;	ctx->Driver.WriteMonoindexPixels = SWFSD_write_mono_pixels_RGB16;
	move.l	#_SWFSD_write_mono_pixels_RGB16,$8E0(a0)
;	ctx->Driver.ReadIndexSpan = SWFSD_read_index_span_RGB15;
	move.l	#_SWFSD_read_index_span_RGB15,$8E4(a0)
;	ctx->Driver.ReadColorSpan = SWFSD_read_color_span_RGB15;
	move.l	#_SWFSD_read_color_span_RGB15,$8E8(a0)
;	ctx->Driver.ReadIndexPixels = SWFSD_read_index_pixels_RGB15;
	move.l	#_SWFSD_read_index_pixels_RGB15,$8EC(a0)
;	ctx->Driver.ReadColorPixels = SWFSD_read_color_pixels_RGB15;
	move.l	#_SWFSD_read_color_pixels_RGB15,$8F0(a0)
;	
	bra	L635
L628
;	ctx->Driver.ClearIndex = SWFSD_clear_index_RGB;
	move.l	#_SWFSD_clear_index_RGB,$8A8(a0)
;	ctx->Driver.ClearColor = SWFSD_clear_color_RGB15PC;
	move.l	#_SWFSD_clear_color_RGB15PC,$8AC(a0)
;	ctx->Driver.Index = SWFSD_set_index_RGB;
	move.l	#_SWFSD_set_index_RGB,$8B4(a0)
;	ctx->Driver.Color = SWFSD_set_color_RGB15PC;
	move.l	#_SWFSD_set_color_RGB15PC,$8B8(a0)
;	ctx->Driver.Clear = SWFSD_clear_RGB15PC;
	move.l	#_SWFSD_clear_RGB15PC,$8B0(a0)
;	ctx->Driver.WriteColorSpan = SWFSD_write_color_span_RGB15PC;
	move.l	#_SWFSD_write_color_span_RGB15PC,$8C4(a0)
;	ctx->Driver.WriteMonocolorSpan = SWFSD_write_mono_span_RGB16;
	move.l	#_SWFSD_write_mono_span_RGB16,$8C8(a0)
;	ctx->Driver.WriteColorPixels = SWFSD_write_color_pixels_RGB15PC;
	move.l	#_SWFSD_write_color_pixels_RGB15PC,$8CC(a0)
;	ctx->Driver.WriteMonocolorPixels = SWFSD_write_mono_pixels_RGB16;
	move.l	#_SWFSD_write_mono_pixels_RGB16,$8D0(a0)
;	ctx->Driver.WriteIndexSpan = SWFSD_write_index_span_RGB16;
	move.l	#_SWFSD_write_index_span_RGB16,$8D4(a0)
;	ctx->Driver.WriteMonoindexSpan = SWFSD_write_mono_span_RGB16;
	move.l	#_SWFSD_write_mono_span_RGB16,$8D8(a0)
;	ctx->Driver.WriteIndexPixels = SWFSD_write_index_pixels_RGB16;
	move.l	#_SWFSD_write_index_pixels_RGB16,$8DC(a0)
;	ctx->Driver.WriteMonoindexPixels = SWFSD_write_mono_pixels_RGB16;
	move.l	#_SWFSD_write_mono_pixels_RGB16,$8E0(a0)
;	ctx->Driver.ReadIndexSpan = SWFSD_read_index_span_RGB15PC;
	move.l	#_SWFSD_read_index_span_RGB15PC,$8E4(a0)
;	ctx->Driver.ReadColorSpan = SWFSD_read_color_span_RGB15PC;
	move.l	#_SWFSD_read_color_span_RGB15PC,$8E8(a0)
;	ctx->Driver.ReadIndexPixels = SWFSD_read_index_pixels_RGB15PC;
	move.l	#_SWFSD_read_index_pixels_RGB15PC,$8EC(a0)
;	ctx->Driver.ReadColorPixels = SWFSD_read_color_pixels_RGB15PC;
	move.l	#_SWFSD_read_color_pixels_RGB15PC,$8F0(a0)
;	
	bra	L635
L629
;	ctx->Driver.ClearIndex = SWFSD_clear_index_RGB;
	move.l	#_SWFSD_clear_index_RGB,$8A8(a0)
;	ctx->Driver.ClearColor = SWFSD_clear_color_RGB16;
	move.l	#_SWFSD_clear_color_RGB16,$8AC(a0)
;	ctx->Driver.Index = SWFSD_set_index_RGB;
	move.l	#_SWFSD_set_index_RGB,$8B4(a0)
;	ctx->Driver.Color = SWFSD_set_color_RGB16;
	move.l	#_SWFSD_set_color_RGB16,$8B8(a0)
;	ctx->Driver.Clear = SWFSD_clear_RGB16;
	move.l	#_SWFSD_clear_RGB16,$8B0(a0)
;	ctx->Driver.WriteColorSpan = SWFSD_write_color_span_RGB16;
	move.l	#_SWFSD_write_color_span_RGB16,$8C4(a0)
;	ctx->Driver.WriteMonocolorSpan = SWFSD_write_mono_span_RGB16;
	move.l	#_SWFSD_write_mono_span_RGB16,$8C8(a0)
;	ctx->Driver.WriteColorPixels = SWFSD_write_color_pixels_RGB16;
	move.l	#_SWFSD_write_color_pixels_RGB16,$8CC(a0)
;	ctx->Driver.WriteMonocolorPixels = SWFSD_write_mono_pixels_RGB16;
	move.l	#_SWFSD_write_mono_pixels_RGB16,$8D0(a0)
;	ctx->Driver.WriteIndexSpan = SWFSD_write_index_span_RGB16;
	move.l	#_SWFSD_write_index_span_RGB16,$8D4(a0)
;	ctx->Driver.WriteMonoindexSpan = SWFSD_write_mono_span_RGB16;
	move.l	#_SWFSD_write_mono_span_RGB16,$8D8(a0)
;	ctx->Driver.WriteIndexPixels = SWFSD_write_index_pixels_RGB16;
	move.l	#_SWFSD_write_index_pixels_RGB16,$8DC(a0)
;	ctx->Driver.WriteMonoindexPixels = SWFSD_write_mono_pixels_RGB16;
	move.l	#_SWFSD_write_mono_pixels_RGB16,$8E0(a0)
;	ctx->Driver.ReadIndexSpan = SWFSD_read_index_span_RGB16;
	move.l	#_SWFSD_read_index_span_RGB16,$8E4(a0)
;	ctx->Driver.ReadColorSpan = SWFSD_read_color_span_RGB16;
	move.l	#_SWFSD_read_color_span_RGB16,$8E8(a0)
;	ctx->Driver.ReadIndexPixels = SWFSD_read_index_pixels_RGB16;
	move.l	#_SWFSD_read_index_pixels_RGB16,$8EC(a0)
;	ctx->Driver.ReadColorPixels = SWFSD_read_color_pixels_RGB16;
	move.l	#_SWFSD_read_color_pixels_RGB16,$8F0(a0)
;	
	bra	L635
L630
;	ctx->Driver.ClearIndex = SWFSD_clear_index_RGB;
	move.l	#_SWFSD_clear_index_RGB,$8A8(a0)
;	ctx->Driver.ClearColor = SWFSD_clear_color_RGB16PC;
	move.l	#_SWFSD_clear_color_RGB16PC,$8AC(a0)
;	ctx->Driver.Index = SWFSD_set_index_RGB;
	move.l	#_SWFSD_set_index_RGB,$8B4(a0)
;	ctx->Driver.Color = SWFSD_set_color_RGB16PC;
	move.l	#_SWFSD_set_color_RGB16PC,$8B8(a0)
;	ctx->Driver.Clear = SWFSD_clear_RGB16PC;
	move.l	#_SWFSD_clear_RGB16PC,$8B0(a0)
;	ctx->Driver.WriteColorSpan = SWFSD_write_color_span_RGB16PC;
	move.l	#_SWFSD_write_color_span_RGB16PC,$8C4(a0)
;	ctx->Driver.WriteMonocolorSpan = SWFSD_write_mono_span_RGB16;
	move.l	#_SWFSD_write_mono_span_RGB16,$8C8(a0)
;	ctx->Driver.WriteColorPixels = SWFSD_write_color_pixels_RGB16PC;
	move.l	#_SWFSD_write_color_pixels_RGB16PC,$8CC(a0)
;	ctx->Driver.WriteMonocolorPixels = SWFSD_write_mono_pixels_RGB16;
	move.l	#_SWFSD_write_mono_pixels_RGB16,$8D0(a0)
;	ctx->Driver.WriteIndexSpan = SWFSD_write_index_span_RGB16;
	move.l	#_SWFSD_write_index_span_RGB16,$8D4(a0)
;	ctx->Driver.WriteMonoindexSpan = SWFSD_write_mono_span_RGB16;
	move.l	#_SWFSD_write_mono_span_RGB16,$8D8(a0)
;	ctx->Driver.WriteIndexPixels = SWFSD_write_index_pixels_RGB16;
	move.l	#_SWFSD_write_index_pixels_RGB16,$8DC(a0)
;	ctx->Driver.WriteMonoindexPixels = SWFSD_write_mono_pixels_RGB16;
	move.l	#_SWFSD_write_mono_pixels_RGB16,$8E0(a0)
;	ctx->Driver.ReadIndexSpan = SWFSD_read_index_span_RGB16PC;
	move.l	#_SWFSD_read_index_span_RGB16PC,$8E4(a0)
;	ctx->Driver.ReadColorSpan = SWFSD_read_color_span_RGB16PC;
	move.l	#_SWFSD_read_color_span_RGB16PC,$8E8(a0)
;	ctx->Driver.ReadIndexPixels = SWFSD_read_index_pixels_RGB16PC;
	move.l	#_SWFSD_read_index_pixels_RGB16PC,$8EC(a0)
;	ctx->Driver.ReadColorPixels = SWFSD_read_color_pixels_RGB16PC;
	move.l	#_SWFSD_read_color_pixels_RGB16PC,$8F0(a0)
;	
	bra	L635
L631
;	ctx->Driver.ClearIndex = SWFSD_clear_index_RGB;
	move.l	#_SWFSD_clear_index_RGB,$8A8(a0)
;	ctx->Driver.ClearColor = SWFSD_clear_color_BGR15PC;
	move.l	#_SWFSD_clear_color_BGR15PC,$8AC(a0)
;	ctx->Driver.Index = SWFSD_set_index_RGB;
	move.l	#_SWFSD_set_index_RGB,$8B4(a0)
;	ctx->Driver.Color = SWFSD_set_color_BGR15PC;
	move.l	#_SWFSD_set_color_BGR15PC,$8B8(a0)
;	ctx->Driver.Clear = SWFSD_clear_BGR15PC;
	move.l	#_SWFSD_clear_BGR15PC,$8B0(a0)
;	ctx->Driver.WriteColorSpan = SWFSD_write_color_span_BGR15PC;
	move.l	#_SWFSD_write_color_span_BGR15PC,$8C4(a0)
;	ctx->Driver.WriteMonocolorSpan = SWFSD_write_mono_span_RGB16;
	move.l	#_SWFSD_write_mono_span_RGB16,$8C8(a0)
;	ctx->Driver.WriteColorPixels = SWFSD_write_color_pixels_BGR15PC;
	move.l	#_SWFSD_write_color_pixels_BGR15PC,$8CC(a0)
;	ctx->Driver.WriteMonocolorPixels = SWFSD_write_mono_pixels_RGB16;
	move.l	#_SWFSD_write_mono_pixels_RGB16,$8D0(a0)
;	ctx->Driver.WriteIndexSpan = SWFSD_write_index_span_RGB16;
	move.l	#_SWFSD_write_index_span_RGB16,$8D4(a0)
;	ctx->Driver.WriteMonoindexSpan = SWFSD_write_mono_span_RGB16;
	move.l	#_SWFSD_write_mono_span_RGB16,$8D8(a0)
;	ctx->Driver.WriteIndexPixels = SWFSD_write_index_pixels_RGB16;
	move.l	#_SWFSD_write_index_pixels_RGB16,$8DC(a0)
;	ctx->Driver.WriteMonoindexPixels = SWFSD_write_mono_pixels_RGB16;
	move.l	#_SWFSD_write_mono_pixels_RGB16,$8E0(a0)
;	ctx->Driver.ReadIndexSpan = SWFSD_read_index_span_BGR15PC;
	move.l	#_SWFSD_read_index_span_BGR15PC,$8E4(a0)
;	ctx->Driver.ReadColorSpan = SWFSD_read_color_span_BGR15PC;
	move.l	#_SWFSD_read_color_span_BGR15PC,$8E8(a0)
;	ctx->Driver.ReadIndexPixels = SWFSD_read_index_pixels_BGR15PC;
	move.l	#_SWFSD_read_index_pixels_BGR15PC,$8EC(a0)
;	ctx->Driver.ReadColorPixels = SWFSD_read_color_pixels_BGR15PC;
	move.l	#_SWFSD_read_color_pixels_BGR15PC,$8F0(a0)
;	
	bra	L635
L632
;	ctx->Driver.ClearIndex = SWFSD_clear_index_RGB;
	move.l	#_SWFSD_clear_index_RGB,$8A8(a0)
;	ctx->Driver.ClearColor = SWFSD_clear_color_BGR16PC;
	move.l	#_SWFSD_clear_color_BGR16PC,$8AC(a0)
;	ctx->Driver.Index = SWFSD_set_index_RGB;
	move.l	#_SWFSD_set_index_RGB,$8B4(a0)
;	ctx->Driver.Color = SWFSD_set_color_BGR16PC;
	move.l	#_SWFSD_set_color_BGR16PC,$8B8(a0)
;	ctx->Driver.Clear = SWFSD_clear_BGR16PC;
	move.l	#_SWFSD_clear_BGR16PC,$8B0(a0)
;	ctx->Driver.WriteColorSpan = SWFSD_write_color_span_BGR16PC;
	move.l	#_SWFSD_write_color_span_BGR16PC,$8C4(a0)
;	ctx->Driver.WriteMonocolorSpan = SWFSD_write_mono_span_RGB16;
	move.l	#_SWFSD_write_mono_span_RGB16,$8C8(a0)
;	ctx->Driver.WriteColorPixels = SWFSD_write_color_pixels_BGR16PC;
	move.l	#_SWFSD_write_color_pixels_BGR16PC,$8CC(a0)
;	ctx->Driver.WriteMonocolorPixels = SWFSD_write_mono_pixels_RGB16;
	move.l	#_SWFSD_write_mono_pixels_RGB16,$8D0(a0)
;	ctx->Driver.WriteIndexSpan = SWFSD_write_index_span_RGB16;
	move.l	#_SWFSD_write_index_span_RGB16,$8D4(a0)
;	ctx->Driver.WriteMonoindexSpan = SWFSD_write_mono_span_RGB16;
	move.l	#_SWFSD_write_mono_span_RGB16,$8D8(a0)
;	ctx->Driver.WriteIndexPixels = SWFSD_write_index_pixels_RGB16;
	move.l	#_SWFSD_write_index_pixels_RGB16,$8DC(a0)
;	ctx->Driver.WriteMonoindexPixels = SWFSD_write_mono_pixels_RGB16;
	move.l	#_SWFSD_write_mono_pixels_RGB16,$8E0(a0)
;	ctx->Driver.ReadIndexSpan = SWFSD_read_index_span_BGR16PC;
	move.l	#_SWFSD_read_index_span_BGR16PC,$8E4(a0)
;	ctx->Driver.ReadColorSpan = SWFSD_read_color_span_BGR16PC;
	move.l	#_SWFSD_read_color_span_BGR16PC,$8E8(a0)
;	ctx->Driver.ReadIndexPixels = SWFSD_read_index_pixels_BGR16PC;
	move.l	#_SWFSD_read_index_pixels_BGR16PC,$8EC(a0)
;	ctx->Driver.ReadColorPixels = SWFSD_read_color_pixels_BGR16PC;
	move.l	#_SWFSD_read_color_pixels_BGR16PC,$8F0(a0)
;	
	bra	L635
L633
;	ctx->Driver.ClearIndex = SWFSD_clear_index_RGB;
	move.l	#_SWFSD_clear_index_RGB,$8A8(a0)
;	ctx->Driver.ClearColor = SWFSD_clear_color_ARGB;
	move.l	#_SWFSD_clear_color_ARGB,$8AC(a0)
;	ctx->Driver.Index = SWFSD_set_index_RGB;
	move.l	#_SWFSD_set_index_RGB,$8B4(a0)
;	ctx->Driver.Color = SWFSD_set_color_ARGB;
	move.l	#_SWFSD_set_color_ARGB,$8B8(a0)
;	ctx->Driver.Clear = SWFSD_clear_ARGB;
	move.l	#_SWFSD_clear_ARGB,$8B0(a0)
;	ctx->Driver.WriteColorSpan = SWFSD_write_color_span_ARGB;
	move.l	#_SWFSD_write_color_span_ARGB,$8C4(a0)
;	ctx->Driver.WriteMonocolorSpan = SWFSD_write_mono_span_ARGB;
	move.l	#_SWFSD_write_mono_span_ARGB,$8C8(a0)
;	ctx->Driver.WriteColorPixels = SWFSD_write_color_pixels_ARGB;
	move.l	#_SWFSD_write_color_pixels_ARGB,$8CC(a0)
;	ctx->Driver.WriteMonocolorPixels = SWFSD_write_mono_pixels_ARGB;
	move.l	#_SWFSD_write_mono_pixels_ARGB,$8D0(a0)
;	ctx->Driver.WriteIndexSpan = SWFSD_write_index_span_ARGB;
	move.l	#_SWFSD_write_index_span_ARGB,$8D4(a0)
;	ctx->Driver.WriteMonoindexSpan = SWFSD_write_mono_span_ARGB;
	move.l	#_SWFSD_write_mono_span_ARGB,$8D8(a0)
;	ctx->Driver.WriteIndexPixels = SWFSD_write_index_pixels_ARGB;
	move.l	#_SWFSD_write_index_pixels_ARGB,$8DC(a0)
;	ctx->Driver.WriteMonoindexPixels = SWFSD_write_mono_pixels_ARGB;
	move.l	#_SWFSD_write_mono_pixels_ARGB,$8E0(a0)
;	ctx->Driver.ReadIndexSpan = SWFSD_read_index_span_ARGB;
	move.l	#_SWFSD_read_index_span_ARGB,$8E4(a0)
;	ctx->Driver.ReadColorSpan = SWFSD_read_color_span_ARGB;
	move.l	#_SWFSD_read_color_span_ARGB,$8E8(a0)
;	ctx->Driver.ReadIndexPixels = SWFSD_read_index_pixels_ARGB;
	move.l	#_SWFSD_read_index_pixels_ARGB,$8EC(a0)
;	ctx->Driver.ReadColorPixels = SWFSD_read_color_pixels_ARGB;
	move.l	#_SWFSD_read_color_pixels_ARGB,$8F0(a0)
;	
	bra	L635
L634
;	ctx->Driver.ClearIndex = SWFSD_clear_index_RGB;
	move.l	#_SWFSD_clear_index_RGB,$8A8(a0)
;	ctx->Driver.ClearColor = SWFSD_clear_color_BGRA;
	move.l	#_SWFSD_clear_color_BGRA,$8AC(a0)
;	ctx->Driver.Index = SWFSD_set_index_RGB;
	move.l	#_SWFSD_set_index_RGB,$8B4(a0)
;	ctx->Driver.Color = SWFSD_set_color_BGRA;
	move.l	#_SWFSD_set_color_BGRA,$8B8(a0)
;	ctx->Driver.Clear = SWFSD_clear_BGRA;
	move.l	#_SWFSD_clear_BGRA,$8B0(a0)
;	ctx->Driver.WriteColorSpan = SWFSD_write_color_span_BGRA;
	move.l	#_SWFSD_write_color_span_BGRA,$8C4(a0)
;	ctx->Driver.WriteMonocolorSpan = SWFSD_write_mono_span_ARGB;
	move.l	#_SWFSD_write_mono_span_ARGB,$8C8(a0)
;	ctx->Driver.WriteColorPixels = SWFSD_write_color_pixels_BGRA;
	move.l	#_SWFSD_write_color_pixels_BGRA,$8CC(a0)
;	ctx->Driver.WriteMonocolorPixels = SWFSD_write_mono_pixels_ARGB;
	move.l	#_SWFSD_write_mono_pixels_ARGB,$8D0(a0)
;	ctx->Driver.WriteIndexSpan = SWFSD_write_index_span_ARGB;
	move.l	#_SWFSD_write_index_span_ARGB,$8D4(a0)
;	ctx->Driver.WriteMonoindexSpan = SWFSD_write_mono_span_ARGB;
	move.l	#_SWFSD_write_mono_span_ARGB,$8D8(a0)
;	ctx->Driver.WriteIndexPixels = SWFSD_write_index_pixels_ARGB;
	move.l	#_SWFSD_write_index_pixels_ARGB,$8DC(a0)
;	ctx->Driver.WriteMonoindexPixels = SWFSD_write_mono_pixels_ARGB;
	move.l	#_SWFSD_write_mono_pixels_ARGB,$8E0(a0)
;	ctx->Driver.ReadIndexSpan = SWFSD_read_index_span_BGRA;
	move.l	#_SWFSD_read_index_span_BGRA,$8E4(a0)
;	ctx->Driver.ReadColorSpan = SWFSD_read_color_span_BGRA;
	move.l	#_SWFSD_read_color_span_BGRA,$8E8(a0)
;	ctx->Driver.ReadIndexPixels = SWFSD_read_index_pixels_BGRA;
	move.l	#_SWFSD_read_index_pixels_BGRA,$8EC(a0)
;	ctx->Driver.ReadColorPixels = SWFSD_read_color_pixels_BGRA;
	move.l	#_SWFSD_read_color_pixels_BGRA,$8F0(a0)
;	
L635
	move.l	(a7)+,a2
	rts

	SECTION "_SWFSDriver_SwapBuffer_FS:0",CODE


;void SWFSDriver_SwapBuffer_FS(struct amigamesa_context *c)
	XDEF	_SWFSDriver_SwapBuffer_FS
_SWFSDriver_SwapBuffer_FS
L638	EQU	-$34
	link	a5,#L638
	movem.l	a2/a6,-(a7)
L637
;	WaitBlit();
	move.l	_GfxBase,a6
	jsr	-$E4(a6)
;	WaitBOVP(&c->Screen->ViewPort);
	move.l	$8(a5),a1
	move.l	$38(a1),a0
	add.w	#$2C,a0
	move.l	_GfxBase,a6
	jsr	-$192(a6)
;	ChangeVPBitMap(&c->Screen->ViewPort,c->back_rp->BitMap,c->dbufinfo)
	move.l	$8(a5),a0
	move.l	$44(a0),a6
	move.l	$8(a5),a1
	move.l	$24(a1),a0
	move.l	4(a0),a1
	move.l	$8(a5),a2
	move.l	$38(a2),a0
	add.w	#$2C,a0
	move.l	a6,a2
	move.l	_GfxBase,a6
	jsr	-$3AE(a6)
;	temp = c->back_rp->BitMap;
	move.l	$8(a5),a1
	move.l	$24(a1),a0
	move.l	4(a0),a6
;	c->back_rp->BitMap = c->front_rp->BitMap;
	move.l	$8(a5),a1
	move.l	$20(a1),a0
	move.l	4(a0),a1
	move.l	$8(a5),a2
	move.l	$24(a2),a0
	move.l	a1,4(a0)
;	c->front_rp->BitMap = temp;
	move.l	$8(a5),a1
	move.l	$20(a1),a0
	move.l	a6,4(a0)
;	temp2 = c->BackArray;
	move.l	$8(a5),a0
	move.l	$30(a0),a1
;	c->BackArray = c->FrontArray;
	move.l	$8(a5),a2
	move.l	$2C(a2),a0
	move.l	$8(a5),a2
	move.l	a0,$30(a2)
;	c->FrontArray = temp2;
	move.l	$8(a5),a0
	move.l	a1,$2C(a0)
;	c->SwapCounter = ((c->SwapCounter + 1) % 2);
	move.l	$8(a5),a0
	move.l	$28(a0),d0
	addq.l	#1,d0
	divsl.l	#2,d1:d0
	move.l	d1,d0
	move.l	$8(a5),a0
	move.l	d0,$28(a0)
	movem.l	(a7)+,a2/a6
	unlk	a5
	rts

	SECTION "_SWFSDriver_SwapBuffer_DR:0",CODE


;void SWFSDriver_SwapBuffer_DR(struct amigamesa_context *c)
	XDEF	_SWFSDriver_SwapBuffer_DR
_SWFSDriver_SwapBuffer_DR
L642	EQU	-$20
	link	a5,#L642
	movem.l	d2-d6/a2/a6,-(a7)
L639
;	if (c->rp == NULL)
	move.l	$8(a5),a1
	move.l	$34(a1),a0
	cmp.w	#0,a0
	bne.b	L641
L640
	movem.l	(a7)+,d2-d6/a2/a6
	unlk	a5
	rts
L641
;	WaitBOVP(&c->Screen->ViewPort);
	move.l	$8(a5),a1
	move.l	$38(a1),a0
	add.w	#$2C,a0
	move.l	_GfxBase,a6
	jsr	-$192(a6)
;	BltBitMapRastPort(c->back_rp->BitMap,
	move.l	$8(a5),a0
	move.l	$5C(a0),d5
	move.l	$8(a5),a0
	move.l	$58(a0),d4
	move.l	$8(a5),a0
	move.l	$6C(a0),d3
	move.l	$8(a5),a0
	move.l	$60(a0),d2
	move.l	$8(a5),a0
	move.l	$20(a0),a1
	move.l	$8(a5),a2
	move.l	$24(a2),a0
	move.l	4(a0),a0
	moveq	#0,d0
	moveq	#0,d1
	move.l	#$C0,d6
	move.l	_GfxBase,a6
	jsr	-$25E(a6)
	movem.l	(a7)+,d2-d6/a2/a6
	unlk	a5
	rts

	SECTION "_SWFSDriver_SwapBuffer_AGA:0",CODE


;void SWFSDriver_SwapBuffer_AGA(struct amigamesa_context *c)
	XDEF	_SWFSDriver_SwapBuffer_AGA
_SWFSDriver_SwapBuffer_AGA
L644	EQU	-$38
	link	a5,#L644
	movem.l	a2/a6,-(a7)
L643
;	ChunkyToPlanar(c->BackArray,c->back_rp->BitMap,c->width,c->height);
	move.l	$8(a5),a0
	move.l	$5C(a0),d0
	move.l	d0,-(a7)
	move.l	$8(a5),a0
	move.l	$58(a0),d0
	move.l	d0,-(a7)
	move.l	$8(a5),a1
	move.l	$24(a1),a0
	move.l	4(a0),a0
	move.l	a0,-(a7)
	move.l	$8(a5),a1
	move.l	$30(a1),a0
	move.l	a0,-(a7)
	jsr	_ChunkyToPlanar
	add.w	#$10,a7
;	WaitBlit();
	move.l	_GfxBase,a6
	jsr	-$E4(a6)
;	WaitBOVP(&c->Screen->ViewPort);
	move.l	$8(a5),a1
	move.l	$38(a1),a0
	add.w	#$2C,a0
	move.l	_GfxBase,a6
	jsr	-$192(a6)
;	ChangeVPBitMap(&c->Screen->ViewPort,c->back_rp->BitMap,c->dbufinfo)
	move.l	$8(a5),a0
	move.l	$44(a0),a6
	move.l	$8(a5),a1
	move.l	$24(a1),a0
	move.l	4(a0),a1
	move.l	$8(a5),a2
	move.l	$38(a2),a0
	add.w	#$2C,a0
	move.l	a6,a2
	move.l	_GfxBase,a6
	jsr	-$3AE(a6)
;	temp = c->back_rp->BitMap;
	move.l	$8(a5),a1
	move.l	$24(a1),a0
	move.l	4(a0),a6
;	c->back_rp->BitMap = c->front_rp->BitMap;
	move.l	$8(a5),a1
	move.l	$20(a1),a0
	move.l	4(a0),a1
	move.l	$8(a5),a2
	move.l	$24(a2),a0
	move.l	a1,4(a0)
;	c->front_rp->BitMap = temp;
	move.l	$8(a5),a1
	move.l	$20(a1),a0
	move.l	a6,4(a0)
;	c->SwapCounter = ((c->SwapCounter + 1) % 2);
	move.l	$8(a5),a0
	move.l	$28(a0),d0
	addq.l	#1,d0
	divsl.l	#2,d1:d0
	move.l	d1,d0
	move.l	$8(a5),a0
	move.l	d0,$28(a0)
	movem.l	(a7)+,a2/a6
	unlk	a5
	rts

	SECTION "_SWFSDriver_Dispose:0",CODE


;void SWFSDriver_Dispose(struct amigamesa_context *c)
	XDEF	_SWFSDriver_Dispose
_SWFSDriver_Dispose
L659	EQU	-$4C
	link	a5,#L659
	movem.l	a2/a6,-(a7)
L645
;    if (c->depth <= 8)
	move.l	$8(a5),a0
	move.l	$48(a0),d0
	cmp.l	#$8,d0
	bhi.b	L650
L646
;	if (c->visual->rgb_flag)
	move.l	$8(a5),a1
	move.l	4(a1),a0
	move.b	5(a0),d0
	beq.b	L648
L647
;	    DisposeTransTable(c);
	move.l	$8(a5),-(a7)
	jsr	_DisposeTransTable
	addq.w	#4,a7
	bra.b	L649
L648
;	    FreeTransTable(c);
	move.l	$8(a5),-(a7)
	jsr	_FreeTransTable
	addq.w	#4,a7
L649
	bra.b	L652
L650
;	if (!(c->visual->rgb_flag))
	move.l	$8(a5),a1
	move.l	4(a1),a0
	move.b	5(a0),d0
	bne.b	L652
L651
;	    FreeTransTable(c);
	move.l	$8(a5),-(a7)
	jsr	_FreeTransTable
	addq.w	#4,a7
L652
;    if (c->SwapCounter != 0)
	move.l	$8(a5),a0
	move.l	$28(a0),d0
	beq	L654
L653
;	WaitBlit();
	move.l	_GfxBase,a6
	jsr	-$E4(a6)
;	WaitBOVP(&c->Screen->ViewPort);
	move.l	$8(a5),a1
	move.l	$38(a1),a0
	add.w	#$2C,a0
	move.l	_GfxBase,a6
	jsr	-$192(a6)
;	ChangeVPBitMap(&c->Screen->ViewPort,c->back_rp->BitMap,c->dbufinfo)
	move.l	$8(a5),a0
	move.l	$44(a0),a6
	move.l	$8(a5),a1
	move.l	$24(a1),a0
	move.l	4(a0),a1
	move.l	$8(a5),a2
	move.l	$38(a2),a0
	add.w	#$2C,a0
	move.l	a6,a2
	move.l	_GfxBase,a6
	jsr	-$3AE(a6)
;	temp = c->back_rp->BitMap;
	move.l	$8(a5),a1
	move.l	$24(a1),a0
	move.l	4(a0),a6
;	c->back_rp->BitMap = c->front_rp->BitMap;
	move.l	$8(a5),a1
	move.l	$20(a1),a0
	move.l	4(a0),a1
	move.l	$8(a5),a2
	move.l	$24(a2),a0
	move.l	a1,4(a0)
;	c->front_rp->BitMap = temp;
	move.l	$8(a5),a1
	move.l	$20(a1),a0
	move.l	a6,4(a0)
L654
;    if (c->dbufinfo)
	move.l	$8(a5),a1
	move.l	$44(a1),a0
	cmp.w	#0,a0
	beq.b	L656
L655
;	FreeDBufInfo(c->dbufinfo);
	move.l	$8(a5),a0
	move.l	$44(a0),a1
	move.l	_GfxBase,a6
	jsr	-$3CC(a6)
L656
;    FreeBitMap(c->back_rp->BitMap);
	move.l	$8(a5),a1
	move.l	$24(a1),a0
	move.l	4(a0),a0
	move.l	_GfxBase,a6
	jsr	-$39C(a6)
;    FreeVec(c->back_rp);
	move.l	$8(a5),a0
	move.l	$24(a0),a1
	move.l	_SysBase,a6
	jsr	-$2B2(a6)
;    if (c->FrontArray == 0)
	move.l	$8(a5),a1
	move.l	$2C(a1),a0
	cmp.w	#0,a0
	bne.b	L658
L657
;	FreeVec(c->BackArray);
	move.l	$8(a5),a0
	move.l	$30(a0),a1
	move.l	_SysBase,a6
	jsr	-$2B2(a6)
L658
	movem.l	(a7)+,a2/a6
	unlk	a5
	rts

	SECTION "_LaunchGfxboardDriver:0",CODE


;static BOOL LaunchGfxboardDriver(struct amigamesa_context *c,struct 
_LaunchGfxboardDriver
L682	EQU	-$98
	link	a5,#L682
	movem.l	d2/d3/a6,-(a7)
L660
;    c->depth = GetCyberMapAttr(c->rp->BitMap,CYBRMATTR_DEPTH);
	move.l	$8(a5),a1
	move.l	$34(a1),a0
	move.l	4(a0),a0
	move.l	#$80000007,d0
	move.l	_CyberGfxBase,a6
	jsr	-$60(a6)
	move.l	$8(a5),a0
	move.l	d0,$48(a0)
;    c->RealWidth =c->rp->Layer->bounds.MaxX-c->rp->Layer->bounds
	move.l	$8(a5),a1
	move.l	$34(a1),a0
	move.l	(a0),a0
	add.w	#$10,a0
	move.w	4(a0),d0
	ext.l	d0
	move.l	$8(a5),a1
	move.l	$34(a1),a0
	move.l	(a0),a0
	add.w	#$10,a0
	move.w	(a0),d1
	ext.l	d1
	sub.l	d1,d0
	addq.l	#1,d0
	move.l	$8(a5),a0
	move.l	d0,$70(a0)
;    c->RealHeight=c->rp->Layer->bounds.MaxY-c->rp->Layer->bounds
	move.l	$8(a5),a1
	move.l	$34(a1),a0
	move.l	(a0),a0
	add.w	#$10,a0
	move.w	6(a0),d0
	ext.l	d0
	move.l	$8(a5),a1
	move.l	$34(a1),a0
	move.l	(a0),a0
	add.w	#$10,a0
	move.w	2(a0),d1
	ext.l	d1
	sub.l	d1,d0
	addq.l	#1,d0
	move.l	$8(a5),a0
	move.l	d0,$74(a0)
;    if (c->flags & FLAG_DIRECTRENDER)
	move.l	$8(a5),a0
	move.l	$10(a0),d0
	and.l	#$10,d0
	beq	L662
L661
;	c->left = GetTagData(AMA_Left,0,tagList);
	move.l	#$80000021,d0
	moveq	#0,d1
	move.l	$C(a5),a0
	move.l	_UtilityBase,a6
	jsr	-$24(a6)
	move.l	$8(a5),a0
	move.l	d0,$60(a0)
;	c->bottom = GetTagData(AMA_Bottom,0,tagList);
	move.l	#$80000022,d0
	moveq	#0,d1
	move.l	$C(a5),a0
	move.l	_UtilityBase,a6
	jsr	-$24(a6)
	move.l	$8(a5),a0
	move.l	d0,$64(a0)
;	c->width = GetTagData(AMA_Width,c->RealWidth-c->left,tagList);
	move.l	$8(a5),a0
	move.l	$70(a0),d1
	move.l	$8(a5),a0
	move.l	$60(a0),d0
	sub.l	d0,d1
	move.l	#$80000023,d0
	move.l	$C(a5),a0
	move.l	_UtilityBase,a6
	jsr	-$24(a6)
	move.l	$8(a5),a0
	move.l	d0,$58(a0)
;	c->height= GetTagData(AMA_Height,c->RealHeight-c->bottom,tagList);
	move.l	$8(a5),a0
	move.l	$74(a0),d1
	move.l	$8(a5),a0
	move.l	$64(a0),d0
	sub.l	d0,d1
	move.l	#$80000024,d0
	move.l	$C(a5),a0
	move.l	_UtilityBase,a6
	jsr	-$24(a6)
	move.l	$8(a5),a0
	move.l	d0,$5C(a0)
	bra.b	L663
L662
;	c->width = c->RealWidth;
	move.l	$8(a5),a0
	move.l	$70(a0),d0
	move.l	$8(a5),a0
	move.l	d0,$58(a0)
;	c->height = c->RealHeight;
	move.l	$8(a5),a0
	move.l	$74(a0),d0
	move.l	$8(a5),a0
	move.l	d0,$5C(a0)
;	c->left = 0;
	move.l	$8(a5),a0
	clr.l	$60(a0)
;	c->bottom = 0;
	move.l	$8(a5),a0
	clr.l	$64(a0)
L663
;    c->right = c->RealWidth - c->width - c->left;
	move.l	$8(a5),a0
	move.l	$70(a0),d0
	move.l	$8(a5),a0
	move.l	$58(a0),d1
	sub.l	d1,d0
	move.l	$8(a5),a0
	move.l	$60(a0),d1
	sub.l	d1,d0
	move.l	$8(a5),a0
	move.l	d0,$68(a0)
;    c->top = c->RealHeight - c->height - c->bottom;
	move.l	$8(a5),a0
	move.l	$74(a0),d0
	move.l	$8(a5),a0
	move.l	$5C(a0),d1
	sub.l	d1,d0
	move.l	$8(a5),a0
	move.l	$64(a0),d1
	sub.l	d1,d0
	move.l	$8(a5),a0
	move.l	d0,$6C(a0)
;    if (!(c->back_rp = AllocVec(sizeof(struct RastPort),MEMF_PUB
	moveq	#$64,d0
	move.l	#$10001,d1
	move.l	_SysBase,a6
	jsr	-$2AC(a6)
	move.l	$8(a5),a1
	move.l	d0,$24(a1)
	bne.b	L665
L664
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L665
;    InitRastPort(c->back_rp);
	move.l	$8(a5),a0
	move.l	$24(a0),a1
	move.l	_GfxBase,a6
	jsr	-$C6(a6)
;    if (!(c->back_rp->BitMap = AllocBitMap(c->width,c->height,c-
	move.l	$8(a5),a1
	move.l	$34(a1),a0
	move.l	4(a0),a0
	move.l	$8(a5),a1
	move.l	$48(a1),d2
	move.l	$8(a5),a1
	move.l	$5C(a1),d1
	move.l	$8(a5),a1
	move.l	$58(a1),d0
	moveq	#0,d3
	move.l	_GfxBase,a6
	jsr	-$396(a6)
	move.l	$8(a5),a1
	move.l	$24(a1),a0
	move.l	d0,4(a0)
	bne.b	L667
L666
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L667
;    SetAPen(c->back_rp,0);
	move.l	$8(a5),a0
	move.l	$24(a0),a1
	moveq	#0,d0
	move.l	_GfxBase,a6
	jsr	-$156(a6)
;    RectFill(c->back_rp,0,0,c->width-1,c->height-1);
	move.l	$8(a5),a0
	move.l	$5C(a0),d3
	subq.l	#1,d3
	move.l	$8(a5),a0
	move.l	$58(a0),d2
	subq.l	#1,d2
	move.l	$8(a5),a0
	move.l	$24(a0),a1
	moveq	#0,d0
	moveq	#0,d1
	move.l	_GfxBase,a6
	jsr	-$132(a6)
;    c->FrontArray = (unsigned char *)GetCyberMapAttr(c->front_rp
	move.l	$8(a5),a1
	move.l	$20(a1),a0
	move.l	4(a0),a0
	move.l	#$80000003,d0
	move.l	_CyberGfxBase,a6
	jsr	-$60(a6)
	move.l	$8(a5),a1
	move.l	d0,$2C(a1)
;    c->BackArray = (unsigned char *)GetCyberMapAttr(c->back_rp->
	move.l	$8(a5),a1
	move.l	$24(a1),a0
	move.l	4(a0),a0
	move.l	#$80000003,d0
	move.l	_CyberGfxBase,a6
	jsr	-$60(a6)
	move.l	$8(a5),a1
	move.l	d0,$30(a1)
;    c->bprow = GetCyberMapAttr(c->back_rp->BitMap,CYBRMATTR_XMOD)
	move.l	$8(a5),a1
	move.l	$24(a1),a0
	move.l	4(a0),a0
	move.l	#$80000001,d0
	move.l	_CyberGfxBase,a6
	jsr	-$60(a6)
	move.l	$8(a5),a0
	move.l	d0,$50(a0)
;    c->bppix = GetCyberMapAttr(c->back_rp->BitMap,CYBRMATTR_BPPI
	move.l	$8(a5),a1
	move.l	$24(a1),a0
	move.l	4(a0),a0
	move.l	#$80000002,d0
	move.l	_CyberGfxBase,a6
	jsr	-$60(a6)
	move.l	$8(a5),a0
	move.l	d0,$4C(a0)
;    c->fmt = GetCyberMapAttr(c->back_rp->BitMap,CYBRMATTR_PIXFMT)
	move.l	$8(a5),a1
	move.l	$24(a1),a0
	move.l	4(a0),a0
	move.l	#$80000004,d0
	move.l	_CyberGfxBase,a6
	jsr	-$60(a6)
	move.l	$8(a5),a0
	move.l	d0,$54(a0)
;    if (c->depth <= 8)
	move.l	$8(a5),a0
	move.l	$48(a0),d0
	cmp.l	#$8,d0
	bhi.b	L675
L668
;	if (c->visual->rgb_flag)
	move.l	$8(a5),a1
	move.l	4(a1),a0
	move.b	5(a0),d0
	beq.b	L672
L669
;	    if (!(CreateTransTable(c)))
	move.l	$8(a5),-(a7)
	jsr	_CreateTransTable
	addq.w	#4,a7
	tst.l	d0
	bne.b	L671
L670
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L671
;		return
	bra.b	L674
L672
;	    if (!(InitTransTable(c)))
	move.l	$8(a5),-(a7)
	jsr	_InitTransTable
	addq.w	#4,a7
	tst.l	d0
	bne.b	L674
L673
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L674
;		return
	bra.b	L678
L675
;	if (!(c->visual->rgb_flag))
	move.l	$8(a5),a1
	move.l	4(a1),a0
	move.b	5(a0),d0
	bne.b	L678
L676
;	    if (!(InitTransTable(c)))
	move.l	$8(a5),-(a7)
	jsr	_InitTransTable
	addq.w	#4,a7
	tst.l	d0
	bne.b	L678
L677
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L678
;    c->gl_ctx->Color.DrawBuffer = GL_BACK;
	move.l	$8(a5),a1
	move.l	(a1),a0
	move.l	#$405,$1E92(a0)
;    c->InitDD = SWFSDriver_DD_pointers;
	move.l	$8(a5),a1
	move.l	#_SWFSDriver_DD_pointers,$490(a1)
;    c->Dispose = SWFSDriver_Dispose;
	move.l	$8(a5),a1
	move.l	#_SWFSDriver_Dispose,$494(a1)
;    if (c->flags & FLAG_FULLSCREEN)
	move.l	$8(a5),a0
	move.l	$10(a0),d0
	and.l	#$8,d0
	beq.b	L680
L679
;	c->SwapBuffer = SWFSDriver_SwapBuffer_FS;
	move.l	$8(a5),a1
	move.l	#_SWFSDriver_SwapBuffer_FS,$498(a1)
	bra.b	L681
L680
;	c->SwapBuffer = SWFSDriver_SwapBuffer_DR;
	move.l	$8(a5),a1
	move.l	#_SWFSDriver_SwapBuffer_DR,$498(a1)
L681
	moveq	#1,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts

	SECTION "_LaunchAGADriver:0",CODE


;static BOOL LaunchAGADriver(struct amigamesa_context *c,struct TagIt
_LaunchAGADriver
L698	EQU	-$70
	link	a5,#L698
	movem.l	d2/d3/a6,-(a7)
L683
;    if ((c->depth = GetBitMapAttr(c->rp->BitMap,BMA_DEPTH)) < 8)
	move.l	$8(a5),a1
	move.l	$34(a1),a0
	move.l	4(a0),a0
	moveq	#4,d1
	move.l	_GfxBase,a6
	jsr	-$3C0(a6)
	move.l	$8(a5),a0
	move.l	d0,$48(a0)
	cmp.l	#$8,d0
	bhs.b	L685
L684
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L685
;    c->RealWidth =c->rp->Layer->bounds.MaxX-c->rp->Layer->bounds
	move.l	$8(a5),a1
	move.l	$34(a1),a0
	move.l	(a0),a0
	add.w	#$10,a0
	move.w	4(a0),d0
	ext.l	d0
	move.l	$8(a5),a1
	move.l	$34(a1),a0
	move.l	(a0),a0
	add.w	#$10,a0
	move.w	(a0),d1
	ext.l	d1
	sub.l	d1,d0
	addq.l	#1,d0
	move.l	$8(a5),a0
	move.l	d0,$70(a0)
;    c->RealHeight=c->rp->Layer->bounds.MaxY-c->rp->Layer->bounds
	move.l	$8(a5),a1
	move.l	$34(a1),a0
	move.l	(a0),a0
	add.w	#$10,a0
	move.w	6(a0),d0
	ext.l	d0
	move.l	$8(a5),a1
	move.l	$34(a1),a0
	move.l	(a0),a0
	add.w	#$10,a0
	move.w	2(a0),d1
	ext.l	d1
	sub.l	d1,d0
	addq.l	#1,d0
	move.l	$8(a5),a0
	move.l	d0,$74(a0)
;    c->width = c->RealWidth;
	move.l	$8(a5),a0
	move.l	$70(a0),d0
	move.l	$8(a5),a0
	move.l	d0,$58(a0)
;    c->height = c->RealHeight;
	move.l	$8(a5),a0
	move.l	$74(a0),d0
	move.l	$8(a5),a0
	move.l	d0,$5C(a0)
;    c->left = 0;
	move.l	$8(a5),a0
	clr.l	$60(a0)
;    c->bottom = 0;
	move.l	$8(a5),a0
	clr.l	$64(a0)
;    c->right = c->RealWidth - c->width - c->left;
	move.l	$8(a5),a0
	move.l	$70(a0),d0
	move.l	$8(a5),a0
	move.l	$58(a0),d1
	sub.l	d1,d0
	move.l	$8(a5),a0
	move.l	$60(a0),d1
	sub.l	d1,d0
	move.l	$8(a5),a0
	move.l	d0,$68(a0)
;    c->top = c->RealHeight - c->height - c->bottom;
	move.l	$8(a5),a0
	move.l	$74(a0),d0
	move.l	$8(a5),a0
	move.l	$5C(a0),d1
	sub.l	d1,d0
	move.l	$8(a5),a0
	move.l	$64(a0),d1
	sub.l	d1,d0
	move.l	$8(a5),a0
	move.l	d0,$6C(a0)
;    c->FrontArray = 0;
	move.l	$8(a5),a1
	clr.l	$2C(a1)
;    if (!(c->BackArray = AllocVec(c->width*c->height,MEMF_PUBLIC
	move.l	$8(a5),a0
	move.l	$58(a0),d0
	move.l	$8(a5),a0
	move.l	$5C(a0),d1
	mulu.l	d1,d0
	move.l	#$10001,d1
	move.l	_SysBase,a6
	jsr	-$2AC(a6)
	move.l	$8(a5),a1
	move.l	d0,$30(a1)
	bne.b	L687
L686
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L687
;    if (!(c->back_rp = AllocVec(sizeof(struct RastPort),MEMF_PUB
	moveq	#$64,d0
	move.l	#$10001,d1
	move.l	_SysBase,a6
	jsr	-$2AC(a6)
	move.l	$8(a5),a1
	move.l	d0,$24(a1)
	bne.b	L689
L688
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L689
;    InitRastPort(c->back_rp);
	move.l	$8(a5),a0
	move.l	$24(a0),a1
	move.l	_GfxBase,a6
	jsr	-$C6(a6)
;    if (!(c->back_rp->BitMap = AllocBitMap(c->width,c->height,c-
	move.l	$8(a5),a1
	move.l	$34(a1),a0
	move.l	4(a0),a0
	move.l	$8(a5),a1
	move.l	$48(a1),d2
	move.l	$8(a5),a1
	move.l	$5C(a1),d1
	move.l	$8(a5),a1
	move.l	$58(a1),d0
	moveq	#0,d3
	move.l	_GfxBase,a6
	jsr	-$396(a6)
	move.l	$8(a5),a1
	move.l	$24(a1),a0
	move.l	d0,4(a0)
	bne.b	L691
L690
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L691
;    SetAPen(c->back_rp,0);
	move.l	$8(a5),a0
	move.l	$24(a0),a1
	moveq	#0,d0
	move.l	_GfxBase,a6
	jsr	-$156(a6)
;    RectFill(c->back_rp,0,0,c->width-1,c->height-1);
	move.l	$8(a5),a0
	move.l	$5C(a0),d3
	subq.l	#1,d3
	move.l	$8(a5),a0
	move.l	$58(a0),d2
	subq.l	#1,d2
	move.l	$8(a5),a0
	move.l	$24(a0),a1
	moveq	#0,d0
	moveq	#0,d1
	move.l	_GfxBase,a6
	jsr	-$132(a6)
;    c->bprow = c->width;
	move.l	$8(a5),a0
	move.l	$58(a0),d0
	move.l	$8(a5),a0
	move.l	d0,$50(a0)
;    c->bppix = 1;
	move.l	$8(a5),a0
	move.l	#1,$4C(a0)
;    c->fmt = PIXFMT_LUT8;
	move.l	$8(a5),a0
	clr.l	$54(a0)
;    if (c->visual->rgb_flag)
	move.l	$8(a5),a1
	move.l	4(a1),a0
	move.b	5(a0),d0
	beq.b	L695
L692
;	if (!(CreateTransTable(c)))
	move.l	$8(a5),-(a7)
	jsr	_CreateTransTable
	addq.w	#4,a7
	tst.l	d0
	bne.b	L694
L693
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L694
;	    return
	bra.b	L697
L695
;	if (!(InitTransTable(c)))
	move.l	$8(a5),-(a7)
	jsr	_InitTransTable
	addq.w	#4,a7
	tst.l	d0
	bne.b	L697
L696
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L697
;    c->gl_ctx->Color.DrawBuffer = GL_BACK;
	move.l	$8(a5),a1
	move.l	(a1),a0
	move.l	#$405,$1E92(a0)
;    c->InitDD = SWFSDriver_DD_pointers;
	move.l	$8(a5),a1
	move.l	#_SWFSDriver_DD_pointers,$490(a1)
;    c->Dispose = SWFSDriver_Dispose;
	move.l	$8(a5),a1
	move.l	#_SWFSDriver_Dispose,$494(a1)
;    c->SwapBuffer = SWFSDriver_SwapBuffer_AGA;
	move.l	$8(a5),a1
	move.l	#_SWFSDriver_SwapBuffer_AGA,$498(a1)
	moveq	#1,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts

	SECTION "_SWFSDriver_init:0",CODE


;BOOL SWFSDriver_init(struct amigamesa_context *c,struct TagItem *tag
	XDEF	_SWFSDriver_init
_SWFSDriver_init
L706	EQU	-$10
	link	a5,#L706
	move.l	a6,-(a7)
L699
;    c->front_rp = c->rp;
	move.l	$8(a5),a1
	move.l	$34(a1),a0
	move.l	$8(a5),a1
	move.l	a0,$20(a1)
;    if (c->flags & FLAG_FULLSCREEN)
	move.l	$8(a5),a0
	move.l	$10(a0),d0
	and.l	#$8,d0
	beq.b	L702
L700
;	if (!(c->dbufinfo = AllocDBufInfo(&c->Screen->ViewPort)))
	move.l	$8(a5),a1
	move.l	$38(a1),a0
	add.w	#$2C,a0
	move.l	_GfxBase,a6
	jsr	-$3C6(a6)
	move.l	$8(a5),a1
	move.l	d0,$44(a1)
	bne.b	L702
L701
	moveq	#0,d0
	move.l	(a7)+,a6
	unlk	a5
	rts
L702
;    if (CyberGfxBase)
	tst.l	_CyberGfxBase
	beq.b	L705
L703
;	if (IsCyberModeID(GetVPModeID(&c->Screen->ViewPort)))
	move.l	$8(a5),a1
	move.l	$38(a1),a0
	add.w	#$2C,a0
	move.l	_GfxBase,a6
	jsr	-$318(a6)
	move.l	_CyberGfxBase,a6
	jsr	-$36(a6)
	tst.w	d0
	beq.b	L705
L704
	move.l	$C(a5),-(a7)
	move.l	$8(a5),-(a7)
	jsr	_LaunchGfxboardDriver
	addq.w	#$8,a7
	move.l	(a7)+,a6
	unlk	a5
	rts
L705
	move.l	$C(a5),-(a7)
	move.l	$8(a5),-(a7)
	jsr	_LaunchAGADriver
	addq.w	#$8,a7
	move.l	(a7)+,a6
	unlk	a5
	rts

	END
