
; Storm C Compiler
; TEMP:Mesa_2_5/amiga_stormc/src/gl/ADisp_SW.c
	mc68030
	mc68881
	XREF	_printf
	XREF	_exit
	XREF	_SWFSD_read_index_pixels_ARGB
	XREF	_SWFSD_read_index_pixels_LUT8
	XREF	_SWFSD_read_color_pixels_ARGB
	XREF	_SWFSD_read_color_pixels_LUT8
	XREF	_SWFSD_read_index_span_ARGB
	XREF	_SWFSD_read_index_span_LUT8
	XREF	_SWFSD_read_color_span_ARGB
	XREF	_SWFSD_read_color_span_LUT8
	XREF	_SWFSD_write_index_pixels_ARGB
	XREF	_SWFSD_write_index_pixels_LUT8
	XREF	_SWFSD_write_index_span_ARGB
	XREF	_SWFSD_write_index_span_LUT8
	XREF	_SWFSD_write_mono_pixels_ARGB
	XREF	_SWFSD_write_mono_pixels_LUT8
	XREF	_SWFSD_write_color_pixels_ARGB
	XREF	_SWFSD_write_color_pixels_LUT8
	XREF	_SWFSD_write_mono_span_ARGB
	XREF	_SWFSD_write_mono_span_LUT8
	XREF	_SWFSD_write_color_span_ARGB
	XREF	_SWFSD_write_color_span_LUT8
	XREF	_SWFSD_set_color_ARGB
	XREF	_SWFSD_set_color_LUT8
	XREF	_SWFSD_clear_color_ARGB
	XREF	_SWFSD_clear_color_LUT8
	XREF	_SWFSD_set_index_RGB
	XREF	_SWFSD_set_index_LUT8
	XREF	_SWFSD_clear_index_RGB
	XREF	_SWFSD_clear_index_LUT8
	XREF	_SWD_clear_ARGB
	XREF	_SWD_clear_LUT8
	XREF	_CC
	XREF	_SysBase
	XREF	_IntuitionBase
	XREF	_GfxBase
	XREF	_UtilityBase
	XREF	_CyberGfxBase
	XREF	_std__in
	XREF	_std__out
	XREF	_std__err
	XREF	_LastError

	SECTION "_dithertable:1",DATA

	XDEF	_dithertable
_dithertable
	dc.b	0,0,0,0,0,0,0,0,0,0,0
	dc.b	0,0,0,0,0,1,0,0,0,0,0
	dc.b	0,0,0,0,0,0,0,0,0,0,1
	dc.b	0,0,0,0,0,0,0,0,0,1,0
	dc.b	0,0,0,0,1,0,1,0,0,0,0
	dc.b	0,1,0,1,0,0,0,0,0,1,0
	dc.b	1,0,0,0,0,0,1,0,1,0,0
	dc.b	0,0,0,1,0,1,0,0,0,0,0
	dc.b	1,0,1,0,0,0,0,0,1,0,1
	dc.b	0,0,1,0,0,1,0,1,0,0,0
	dc.b	0,1,1,0,1,0,0,1,0,1,1
	dc.b	0,1,0,0,1,0,1,1,0,1,0
	dc.b	0,1,0,1,1,0,1,0,0,1,0
	dc.b	1,1,0,1,0,1,1,0,1,1,0
	dc.b	1,0,0,1,1,1,1,0,1,0,1
	dc.b	1,1,1,1,0,1,0,1,1,1,1
	dc.b	1,0,1,0,1,1,1,1,1,0,1
	dc.b	0,1,1,1,1,1,0,1,0,1,1
	dc.b	1,1,1,0,1,0,1,1,1,1,1
	dc.b	1,1,0,1,1,1,1,1,0,1,1
	dc.b	1,1,1,1,1,1,1,0,1,1,1
	dc.b	1,1,1,1,1,1,1,1,1,1,1
	dc.b	1,1,1,1,1,1,1,1,1,1,1
	dc.b	1,1,1

	SECTION "_SWDriver_set_buffer:0",CODE

	rts

;static GLboolean SWDriver_set_buffer( GLcontext *ctx,GLenum mode )
_SWDriver_set_buffer
L107
	moveq	#1,d0
	rts

	SECTION "_SWDriver_resize:0",CODE


;static void SWDriver_resize( GLcontext *ctx,GLuint *width, GLuint *h
_SWDriver_resize
L122	EQU	-$B4
	link	a5,#L122
	movem.l	d2/d3/a6,-(a7)
	move.l	$8(a5),a0
L109
;    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	$C(a5),a0
	move.l	d0,(a0)
;    *height=c->height;
	move.l	-4(a5),a0
	move.l	$5C(a0),d0
	move.l	$10(a5),a0
	move.l	d0,(a0)
;    if (c->rp == NULL)
	move.l	-4(a5),a1
	move.l	$34(a1),a0
	cmp.w	#0,a0
	bne.b	L111
L110
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L111
;    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),a1
	move.l	$34(a1),a0
	move.l	(a0),a0
	add.w	#$10,a0
	move.w	4(a0),d0
	ext.l	d0
	move.l	-4(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
	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	L113
L112
	move.l	-4(a5),a0
	move.l	$5C(a0),d2
	move.l	-4(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	-4(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
	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	L121
L113
;	    c->RealWidth =c->rp->Layer->bounds.MaxX-c->rp->Layer->boun
	move.l	-4(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	-4(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	-4(a5),a0
	move.l	d0,$70(a0)
;	    c->RealHeight=c->rp->Layer->bounds.MaxY-c->rp->Layer->boun
	move.l	-4(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	-4(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	-4(a5),a0
	move.l	d0,$74(a0)
;	    if (c->depth <= 8)
	move.l	-4(a5),a0
	move.l	$48(a0),d0
	cmp.l	#$8,d0
	bhi	L119
L114
;		FreeBitMap(c->temprp->BitMap);
	move.l	-4(a5),a1
	move.l	$40(a1),a0
	move.l	4(a0),a0
	move.l	_GfxBase,a6
	jsr	-$39C(a6)
;		*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	$C(a5),a0
	move.l	d0,(a0)
;		*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	$10(a5),a0
	move.l	d0,(a0)
;		c->bprow = c->width;
	move.l	-4(a5),a0
	move.l	$58(a0),d0
	move.l	-4(a5),a0
	move.l	d0,$50(a0)
;		FreeVec(c->BackArray);
	move.l	-4(a5),a0
	move.l	$30(a0),a1
	move.l	_SysBase,a6
	jsr	-$2B2(a6)
;		if (!(c->BackArray = AllocVec(c->width*c->height,MEMF_PUBLIC|MEM
	move.l	-4(a5),a0
	move.l	$58(a0),d0
	move.l	-4(a5),a0
	move.l	$5C(a0),d1
	mulu.l	d1,d0
	move.l	#$10001,d1
	move.l	_SysBase,a6
	jsr	-$2AC(a6)
	move.l	-4(a5),a1
	move.l	d0,$30(a1)
	bne.b	L116
L115
;		    printf("Panic! Not enough memory for resizing!\n");
	move.l	#L108,-(a7)
	jsr	_printf
	addq.w	#4,a7
;		    exit(0);
	clr.l	-(a7)
	jsr	_exit
	addq.w	#4,a7
L116
;		if (!(c->temprp->BitMap = AllocBitMap((((c->width+15)>>4)<<4),1,
	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	$58(a1),d0
	add.l	#$F,d0
	moveq	#4,d1
	lsr.l	d1,d0
	moveq	#4,d1
	asl.l	d1,d0
	moveq	#1,d1
	moveq	#0,d3
	move.l	_GfxBase,a6
	jsr	-$396(a6)
	move.l	-4(a5),a1
	move.l	$40(a1),a0
	move.l	d0,4(a0)
	bne.b	L118
L117
;		    printf("Panic! Not enough memory for resizing!\n");
	move.l	#L108,-(a7)
	jsr	_printf
	addq.w	#4,a7
;		    exit(0);
	clr.l	-(a7)
	jsr	_exit
	addq.w	#4,a7
L118
	bra	L121
L119
;		*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	$C(a5),a0
	move.l	d0,(a0)
;		*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	$10(a5),a0
	move.l	d0,(a0)
;		c->bprow = c->width * 4;
	move.l	-4(a5),a0
	move.l	$58(a0),d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	-4(a5),a0
	move.l	d0,$50(a0)
;		FreeVec(c->BackArray);
	move.l	-4(a5),a0
	move.l	$30(a0),a1
	move.l	_SysBase,a6
	jsr	-$2B2(a6)
;		if (!(c->BackArray = AllocVec(c->width*c->height*4,MEMF_PUBLIC|M
	move.l	-4(a5),a0
	move.l	$58(a0),d0
	move.l	-4(a5),a0
	move.l	$5C(a0),d1
	mulu.l	d1,d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	#$10001,d1
	move.l	_SysBase,a6
	jsr	-$2AC(a6)
	move.l	-4(a5),a1
	move.l	d0,$30(a1)
	bne.b	L121
L120
;		    printf("Panic! Not enough memory for resizing!\n");
	move.l	#L108,-(a7)
	jsr	_printf
	addq.w	#4,a7
;		    exit(0);
	clr.l	-(a7)
	jsr	_exit
	addq.w	#4,a7
L121
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts

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

	SECTION "_SWDriver_DD_pointers:0",CODE


;void SWDriver_DD_pointers( GLcontext *ctx )
	XDEF	_SWDriver_DD_pointers
_SWDriver_DD_pointers
	move.l	a2,-(a7)
	move.l	$8(a7),a0
L123
;   AmigaMesaContext c = (AmigaMesaContext) ctx->DriverCtx;
	move.l	$974(a0),a1
;   ctx->Driver.UpdateState = SWDriver_DD_pointers;
	move.l	#_SWDriver_DD_pointers,$8A4(a0)
;   ctx->Driver.SetBuffer = SWDriver_set_buffer;
	move.l	#_SWDriver_set_buffer,$8BC(a0)
;   ctx->Driver.GetBufferSize = SWDriver_resize;
	move.l	#_SWDriver_resize,$8C0(a0)
;   if (c->depth <= 8)
	move.l	$48(a1),d0
	cmp.l	#$8,d0
	bhi	L125
L124
;	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 = SWD_clear_LUT8;
	move.l	#_SWD_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	L126
L125
;	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 = SWD_clear_ARGB;
	move.l	#_SWD_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)
L126
	move.l	(a7)+,a2
	rts

	SECTION "_SWDriver_SwapBuffer_LUT8:0",CODE


;void SWDriver_SwapBuffer_LUT8(struct amigamesa_context *c)
	XDEF	_SWDriver_SwapBuffer_LUT8
_SWDriver_SwapBuffer_LUT8
L130	EQU	-$28
	link	a5,#L130
	movem.l	d2-d7/a2/a6,-(a7)
L127
;	if (c->rp == NULL)
	move.l	$8(a5),a1
	move.l	$34(a1),a0
	cmp.w	#0,a0
	bne.b	L129
L128
	movem.l	(a7)+,d2-d7/a2/a6
	unlk	a5
	rts
L129
;	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)
;	WritePixelArray(c->BackArray,
	move.l	$8(a5),a0
	move.l	$5C(a0),d0
	move.w	d0,-$1E(a5)
	move.l	$8(a5),a0
	move.l	$58(a0),d5
	move.l	$8(a5),a0
	move.l	$6C(a0),d4
	move.l	$8(a5),a0
	move.l	$60(a0),d3
	move.l	$8(a5),a0
	move.l	$34(a0),a1
	move.l	$8(a5),a0
	move.l	$58(a0),d2
	move.l	$8(a5),a2
	move.l	$30(a2),a0
	moveq	#0,d0
	moveq	#0,d1
	move.w	-$1E(a5),d6
	moveq	#3,d7
	move.l	_CyberGfxBase,a6
	jsr	-$7E(a6)
	movem.l	(a7)+,d2-d7/a2/a6
	unlk	a5
	rts

	SECTION "_SWDriver_SwapBuffer_AGA:0",CODE


;void SWDriver_SwapBuffer_AGA(struct amigamesa_context *c)
	XDEF	_SWDriver_SwapBuffer_AGA
_SWDriver_SwapBuffer_AGA
L134	EQU	-$2C
	link	a5,#L134
	movem.l	d2-d4/a2/a6,-(a7)
L131
;	if (c->rp == NULL)
	move.l	$8(a5),a1
	move.l	$34(a1),a0
	cmp.w	#0,a0
	bne.b	L133
L132
	movem.l	(a7)+,d2-d4/a2/a6
	unlk	a5
	rts
L133
;	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)
;	WriteChunkyPixels(c->rp,
	move.l	$8(a5),a0
	move.l	$58(a0),d4
	move.l	$8(a5),a0
	move.l	$30(a0),a1
	move.l	$8(a5),a0
	move.l	$6C(a0),d3
	move.l	$8(a5),a0
	move.l	$5C(a0),d0
	add.l	d0,d3
	subq.l	#1,d3
	move.l	$8(a5),a0
	move.l	$60(a0),d2
	move.l	$8(a5),a0
	move.l	$58(a0),d0
	add.l	d0,d2
	subq.l	#1,d2
	move.l	$8(a5),a0
	move.l	$6C(a0),d1
	move.l	$8(a5),a0
	move.l	$60(a0),d0
	move.l	$8(a5),a2
	move.l	$34(a2),a0
	move.l	a1,a2
	move.l	_GfxBase,a6
	jsr	-$420(a6)
	movem.l	(a7)+,d2-d4/a2/a6
	unlk	a5
	rts

	SECTION "_SWDriver_SwapBuffer_ARGB:0",CODE


;void SWDriver_SwapBuffer_ARGB(struct amigamesa_context *c)
	XDEF	_SWDriver_SwapBuffer_ARGB
_SWDriver_SwapBuffer_ARGB
L138	EQU	-$28
	link	a5,#L138
	movem.l	d2-d7/a2/a6,-(a7)
L135
;	if (c->rp == NULL)
	move.l	$8(a5),a1
	move.l	$34(a1),a0
	cmp.w	#0,a0
	bne.b	L137
L136
	movem.l	(a7)+,d2-d7/a2/a6
	unlk	a5
	rts
L137
;	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)
;	WritePixelArray(c->BackArray,
	move.l	$8(a5),a0
	move.l	$5C(a0),d0
	move.w	d0,-$1E(a5)
	move.l	$8(a5),a0
	move.l	$58(a0),d5
	move.l	$8(a5),a0
	move.l	$6C(a0),d4
	move.l	$8(a5),a0
	move.l	$60(a0),d3
	move.l	$8(a5),a0
	move.l	$34(a0),a1
	move.l	$8(a5),a0
	move.l	$58(a0),d2
	moveq	#2,d0
	asl.l	d0,d2
	move.l	$8(a5),a2
	move.l	$30(a2),a0
	moveq	#0,d0
	moveq	#0,d1
	move.w	-$1E(a5),d6
	moveq	#2,d7
	move.l	_CyberGfxBase,a6
	jsr	-$7E(a6)
	movem.l	(a7)+,d2-d7/a2/a6
	unlk	a5
	rts

	SECTION "_EvalPen:0",CODE


;long EvalPen(struct amigamesa_context *c, unsigned char r, unsigned 
	XDEF	_EvalPen
_EvalPen
L143	EQU	-$2C
	link	a5,#L143
	movem.l	d2-d6,-(a7)
	move.b	$10(a5),d0
	move.b	$E(a5),d1
	move.b	$C(a5),d2
	move.l	$8(a5),a0
L139
;	red = (unsigned short)r;
	moveq	#0,d4
	move.b	d2,d4
;	green = (unsigned short)g;
	moveq	#0,d3
	move.b	d1,d3
;	blue = (unsigned short)b;
	moveq	#0,d2
	move.b	d0,d2
;	red1 = (red + 0x20) & 0xffc0;
	moveq	#0,d0
	move.w	d4,d0
	add.l	#$20,d0
	and.l	#$FFC0,d0
	move.w	d0,-$8(a5)
;	green1 = (green + 0x20) & 0xffc0;
	moveq	#0,d0
	move.w	d3,d0
	add.l	#$20,d0
	and.l	#$FFC0,d0
	move.w	d0,-$A(a5)
;	blue1 = (blue + 0x20) & 0xffc0;
	moveq	#0,d0
	move.w	d2,d0
	add.l	#$20,d0
	and.l	#$FFC0,d0
	move.w	d0,-$C(a5)
;	red2 = (red & 0xffc0) + 0x20;
	moveq	#0,d0
	move.w	d4,d0
	and.l	#$FFC0,d0
	add.l	#$20,d0
	move.w	d0,-$E(a5)
;	green2 = (green & 0xffc0) + 0x20;
	moveq	#0,d0
	move.w	d3,d0
	and.l	#$FFC0,d0
	add.l	#$20,d0
	move.w	d0,-$10(a5)
;	blue2 = (blue & 0xffc0) + 0x20;
	moveq	#0,d0
	move.w	d2,d0
	and.l	#$FFC0,d0
	add.l	#$20,d0
	move.w	d0,-$12(a5)
;	if ( ((red1-red)*(red1-red)+(green1-green)*(green1-green)+(blue1-b
	moveq	#0,d1
	move.w	-$8(a5),d1
	moveq	#0,d0
	move.w	d4,d0
	sub.l	d0,d1
	moveq	#0,d0
	move.w	-$8(a5),d0
	moveq	#0,d5
	move.w	d4,d5
	sub.l	d5,d0
	muls.l	d0,d1
	moveq	#0,d0
	move.w	-$A(a5),d0
	moveq	#0,d5
	move.w	d3,d5
	sub.l	d5,d0
	moveq	#0,d5
	move.w	-$A(a5),d5
	moveq	#0,d6
	move.w	d3,d6
	move.l	d6,-$20(a5)
	sub.l	-$20(a5),d5
	muls.l	d5,d0
	add.l	d0,d1
	moveq	#0,d0
	move.w	-$C(a5),d0
	moveq	#0,d5
	move.w	d2,d5
	sub.l	d5,d0
	moveq	#0,d5
	move.w	-$C(a5),d5
	moveq	#0,d6
	move.w	d2,d6
	move.l	d6,-$1C(a5)
	sub.l	-$1C(a5),d5
	muls.l	d5,d0
	add.l	d0,d1
	moveq	#0,d0
	move.w	-$E(a5),d0
	moveq	#0,d5
	move.w	d4,d5
	sub.l	d5,d0
	moveq	#0,d5
	move.w	-$E(a5),d5
	and.l	#$FFFF,d4
	sub.l	d4,d5
	muls.l	d5,d0
	moveq	#0,d4
	move.w	-$10(a5),d4
	moveq	#0,d5
	move.w	d3,d5
	sub.l	d5,d4
	moveq	#0,d5
	move.w	-$10(a5),d5
	and.l	#$FFFF,d3
	sub.l	d3,d5
	muls.l	d5,d4
	add.l	d4,d0
	moveq	#0,d3
	move.w	-$12(a5),d3
	moveq	#0,d4
	move.w	d2,d4
	sub.l	d4,d3
	moveq	#0,d4
	move.w	-$12(a5),d4
	and.l	#$FFFF,d2
	sub.l	d2,d4
	muls.l	d4,d3
	add.l	d3,d0
	cmp.l	d0,d1
	bge.b	L141
L140
;	    index = (blue1 >> 5) | ((green1 >> 5) << 4) | ((red1 >> 5)
	moveq	#0,d0
	move.w	-$C(a5),d0
	moveq	#5,d1
	asr.l	d1,d0
	moveq	#0,d1
	move.w	-$A(a5),d1
	moveq	#5,d2
	asr.l	d2,d1
	moveq	#4,d2
	asl.l	d2,d1
	or.l	d1,d0
	moveq	#0,d1
	move.w	-$8(a5),d1
	moveq	#5,d2
	asr.l	d2,d1
	moveq	#$8,d2
	asl.l	d2,d1
	or.l	d1,d0
	bra.b	L142
L141
;	    index = ((blue2 >> 5) | ((green2 >> 5) << 4) | ((red2 >> 5)
	moveq	#0,d0
	move.w	-$12(a5),d0
	moveq	#5,d1
	asr.l	d1,d0
	moveq	#0,d1
	move.w	-$10(a5),d1
	moveq	#5,d2
	asr.l	d2,d1
	moveq	#4,d2
	asl.l	d2,d1
	or.l	d1,d0
	moveq	#0,d1
	move.w	-$E(a5),d1
	moveq	#5,d2
	asr.l	d2,d1
	moveq	#$8,d2
	asl.l	d2,d1
	or.l	d1,d0
	or.l	#$111,d0
L142
	move.l	$80(a0),a0
	lea	0(a0,d0.l*4),a0
	move.l	(a0),d0
	movem.l	(a7)+,d2-d6
	unlk	a5
	rts

	SECTION "_EvalPen_D:0",CODE


;long EvalPen_D(struct amigamesa_context *c, unsigned char r, unsigne
	XDEF	_EvalPen_D
_EvalPen_D
L151	EQU	-$18
	link	a5,#L151
	movem.l	d2-d6/a2,-(a7)
	move.l	$16(a5),d0
	move.l	$12(a5),d1
	move.b	$10(a5),d2
	move.b	$E(a5),d3
	move.b	$C(a5),d4
	move.l	$8(a5),a1
L144
;	temp = (x & 3) | ((y & 3) << 2);
	and.l	#3,d1
	and.l	#3,d0
	moveq	#2,d5
	asl.l	d5,d0
	or.l	d0,d1
;	red = (unsigned short)r;
	moveq	#0,d0
	move.b	d4,d0
	move.w	d0,-2(a5)
;	green = (unsigned short)g;
	moveq	#0,d0
	move.b	d3,d0
	move.w	d0,-4(a5)
;	blue = (unsigned short)b;
	moveq	#0,d5
	move.b	d2,d5
;	red1 = red & 0xffc0;
	moveq	#0,d0
	move.w	-2(a5),d0
	and.l	#$FFC0,d0
	move.w	d0,d4
;	green1 = green & 0xffc0;
	moveq	#0,d0
	move.w	-4(a5),d0
	and.l	#$FFC0,d0
	move.w	d0,d3
;	blue1 = blue & 0xffc0;
	moveq	#0,d0
	move.w	d5,d0
	and.l	#$FFC0,d0
	move.w	d0,d2
;	if (dithertable[( ((red << 2) & 0xf0) | temp)])
	moveq	#0,d0
	move.w	-2(a5),d0
	moveq	#2,d6
	asl.l	d6,d0
	and.l	#$F0,d0
	or.l	d1,d0
	move.l	#_dithertable,a2
	lea	0(a2,d0.l),a0
	move.b	(a0),d0
	beq.b	L146
L145
;		red1 = red1 + 0x40;
	moveq	#0,d0
	move.w	d4,d0
	add.l	#$40,d0
	move.w	d0,d4
L146
;	if (dithertable[( ((green << 2) & 0xf0) | temp)])
	moveq	#0,d0
	move.w	-4(a5),d0
	moveq	#2,d6
	asl.l	d6,d0
	and.l	#$F0,d0
	or.l	d1,d0
	move.l	#_dithertable,a2
	lea	0(a2,d0.l),a0
	move.b	(a0),d0
	beq.b	L148
L147
;		green1 = green1 + 0x40;
	moveq	#0,d0
	move.w	d3,d0
	add.l	#$40,d0
	move.w	d0,d3
L148
;	if (dithertable[( ((blue << 2) & 0xf0) | temp)])
	moveq	#0,d0
	move.w	d5,d0
	moveq	#2,d5
	asl.l	d5,d0
	and.l	#$F0,d0
	or.l	d1,d0
	move.l	#_dithertable,a2
	lea	0(a2,d0.l),a0
	move.b	(a0),d0
	beq.b	L150
L149
;		blue1 = blue1 + 0x40;
	moveq	#0,d0
	move.w	d2,d0
	add.l	#$40,d0
	move.w	d0,d2
L150
;	index = (blue1 >> 5) | ((green1 >> 5) << 4) | ((red1 >> 5) << 8);
	moveq	#0,d0
	move.w	d2,d0
	moveq	#5,d1
	asr.l	d1,d0
	moveq	#0,d1
	move.w	d3,d1
	moveq	#5,d2
	asr.l	d2,d1
	moveq	#4,d2
	asl.l	d2,d1
	or.l	d1,d0
	moveq	#0,d1
	move.w	d4,d1
	moveq	#5,d2
	asr.l	d2,d1
	moveq	#$8,d2
	asl.l	d2,d1
	or.l	d1,d0
	move.l	$80(a1),a0
	lea	0(a0,d0.l*4),a0
	move.l	(a0),d0
	movem.l	(a7)+,d2-d6/a2
	unlk	a5
	rts

	SECTION "_FindNearestPen:0",CODE


;long FindNearestPen(struct amigamesa_context *c, unsigned long r, un
	XDEF	_FindNearestPen
_FindNearestPen
L161	EQU	-$20
	link	a5,#L161
	movem.l	d2-d6,-(a7)
	move.l	$18(a5),a1
L152
;	int cn = -1;
	moveq	#-1,d0
;	long dist=0x7ffffff;
	move.l	#$7FFFFFF,-$10(a5)
;	for (i=0;
	moveq	#0,d4
	bra.b	L159
L153
;	    col = tab[i];
	lea	0(a1,d4.l*4),a0
	move.l	(a0),d1
;	    if (col != 0xffffffff)
	cmp.l	#-1,d1
	beq.b	L158
L154
;		pr = (col >> 16) & 0xff;
	move.l	d1,d3
	moveq	#$10,d2
	lsr.l	d2,d3
	and.l	#$FF,d3
;		pg = (col >> 8) & 0xff;
	move.l	d1,d2
	moveq	#$8,d5
	lsr.l	d5,d2
	and.l	#$FF,d2
;		pb = col & 0xff;
	move.l	d1,d5
	and.l	#$FF,d5
;		if(!(x = (pr-r)*(pr-r)+(pg-g)*(pg-g)+(pb-b)*(pb-b)))
	move.l	d3,d1
	sub.l	$C(a5),d1
	sub.l	$C(a5),d3
	mulu.l	d3,d1
	move.l	d2,d3
	sub.l	$10(a5),d3
	sub.l	$10(a5),d2
	mulu.l	d2,d3
	add.l	d3,d1
	move.l	d5,d2
	sub.l	$14(a5),d2
	sub.l	$14(a5),d5
	mulu.l	d5,d2
	add.l	d2,d1
	bne.b	L156
L155
;			cn = i;
	move.l	d4,d0
;			
	bra.b	L160
L156
;		if(x < dist)
	cmp.l	-$10(a5),d1
	bge.b	L158
L157
;			dist = x;
	move.l	d1,-$10(a5)
;			cn = i;
	move.l	d4,d0
L158
	addq.l	#1,d4
L159
	cmp.l	#$100,d4
	ble.b	L153
L160
	movem.l	(a7)+,d2-d6
	unlk	a5
	rts

	SECTION "_CreateTransTable:0",CODE


;int CreateTransTable(struct amigamesa_context* c)
	XDEF	_CreateTransTable
_CreateTransTable
L206	EQU	-$40
	link	a5,#L206
	movem.l	d2-d7/a6,-(a7)
L162
;	short red = -1;
	move.w	#-1,-$A(a5)
;	short green = -1;
	move.w	#-1,-$C(a5)
;	short blue = -1;
	moveq	#-1,d5
;	if (!(c->ColorTable = table = AllocVec(16*16*16*sizeof(long),MEMF_
	move.l	#$4000,d0
	move.l	#$10001,d1
	move.l	_SysBase,a6
	jsr	-$2AC(a6)
	move.l	d0,-4(a5)
	move.l	$8(a5),a1
	move.l	-4(a5),$80(a1)
	tst.l	-4(a5)
	bne.b	L164
L163
	moveq	#0,d0
	movem.l	(a7)+,d2-d7/a6
	unlk	a5
	rts
L164
;ble2 = AllocVecPP
	move.l	#$400,d0
	move.l	#$10001,d1
	move.l	_SysBase,a6
	jsr	-$2AC(a6)
	move.l	d0,-$8(a5)
	move.l	$8(a5),a1
	move.l	-$8(a5),$84(a1)
	tst.l	-$8(a5)
	bne.b	L166
L165
	moveq	#0,d0
	movem.l	(a7)+,d2-d7/a6
	unlk	a5
	rts
L166
;	for (i=0;
	clr.l	-$1E(a5)
	bra	L183
L167
;	    for (j=0;
	clr.l	-$22(a5)
	bra	L181
L168
;		for (k=0;
	clr.l	-$26(a5)
	bra	L179
L169
;			r = (red < 0) ? 0 : (unsigned)red << 24;
	tst.w	-$A(a5)
	bpl.b	L171
L170
	moveq	#0,d4
	bra.b	L172
L171
	move.w	-$A(a5),d4
	ext.l	d4
	moveq	#$18,d0
	asl.l	d0,d4
L172
;			g = (green < 0) ? 0 : (unsigned)green << 24;
	tst.w	-$C(a5)
	bpl.b	L174
L173
	moveq	#0,d2
	bra.b	L175
L174
	move.w	-$C(a5),d2
	ext.l	d2
	moveq	#$18,d0
	asl.l	d0,d2
L175
;			b = (blue < 0) ? 0 : (unsigned)blue << 24;
	tst.w	d5
	bpl.b	L177
L176
	moveq	#0,d3
	bra.b	L178
L177
	move.w	d5,d3
	ext.l	d3
	moveq	#$18,d0
	asl.l	d0,d3
L178
;			pen = ObtainBestPen(c->Screen->ViewPort.ColorMap,r,g,b,OBP_Pre
	clr.l	-(a7)
	move.l	#-1,-(a7)
	move.l	#$84000000,-(a7)
	move.l	$8(a5),a1
	move.l	$38(a1),a0
	add.w	#$2C,a0
	move.l	4(a0),a0
	move.l	d4,d1
	move.l	a7,a1
	move.l	_GfxBase,a6
	jsr	-$348(a6)
	add.w	#$C,a7
;			table[i*16*16+j*16+k] = pen;
	move.l	-$1E(a5),d1
	moveq	#4,d6
	asl.l	d6,d1
	moveq	#4,d6
	asl.l	d6,d1
	move.l	-$22(a5),d6
	moveq	#4,d7
	asl.l	d7,d6
	move.l	d6,-$3C(a5)
	add.l	-$3C(a5),d1
	add.l	-$26(a5),d1
	move.l	-4(a5),a1
	lea	0(a1,d1.l*4),a0
	move.l	d0,(a0)
;			table2[pen] = (r >> 8) | (g >> 16) | (b >> 24);
	moveq	#$8,d1
	lsr.l	d1,d4
	moveq	#$10,d1
	lsr.l	d1,d2
	or.l	d2,d4
	moveq	#$18,d1
	lsr.l	d1,d3
	or.l	d3,d4
	move.l	-$8(a5),a1
	lea	0(a1,d0.l*4),a0
	move.l	d4,(a0)
	addq.l	#2,-$26(a5)
	add.w	#$40,d5
L179
	move.l	-$26(a5),d0
	cmp.l	#$9,d0
	blt	L169
L180
;		blue = -1;
	moveq	#-1,d5
	addq.l	#2,-$22(a5)
	add.w	#$40,-$C(a5)
L181
	move.l	-$22(a5),d0
	cmp.l	#$9,d0
	blt	L168
L182
;	    green = -1;
	move.w	#-1,-$C(a5)
	addq.l	#2,-$1E(a5)
	add.w	#$40,-$A(a5)
L183
	move.l	-$1E(a5),d0
	cmp.l	#$9,d0
	blt	L167
L184
;	red = 0x1f;
	move.w	#$1F,-$A(a5)
;	green = 0x1f;
	move.w	#$1F,-$C(a5)
;	blue = 0x1f;
	moveq	#$1F,d5
;	for (i=1;
	move.l	#1,-$1E(a5)
	bra	L201
L185
;	    for (j=1;
	move.l	#1,-$22(a5)
	bra	L199
L186
;		for (k=1;
	move.l	#1,-$26(a5)
	bra	L197
L187
;			r = (red < 0) ? 0 : (unsigned long)red << 24;
	tst.w	-$A(a5)
	bpl.b	L189
L188
	moveq	#0,d4
	bra.b	L190
L189
	move.w	-$A(a5),d4
	ext.l	d4
	moveq	#$18,d0
	asl.l	d0,d4
L190
;			g = (green < 0) ? 0 : (unsigned long)green << 24;
	tst.w	-$C(a5)
	bpl.b	L192
L191
	moveq	#0,d2
	bra.b	L193
L192
	move.w	-$C(a5),d2
	ext.l	d2
	moveq	#$18,d0
	asl.l	d0,d2
L193
;			b = (blue < 0) ? 0 : (unsigned long)blue << 24;
	tst.w	d5
	bpl.b	L195
L194
	moveq	#0,d3
	bra.b	L196
L195
	move.w	d5,d3
	ext.l	d3
	moveq	#$18,d0
	asl.l	d0,d3
L196
;			pen = ObtainBestPen(c->Screen->ViewPort.ColorMap,r,g,b,OBP_Pre
	clr.l	-(a7)
	move.l	#-1,-(a7)
	move.l	#$84000000,-(a7)
	move.l	$8(a5),a1
	move.l	$38(a1),a0
	add.w	#$2C,a0
	move.l	4(a0),a0
	move.l	d4,d1
	move.l	a7,a1
	move.l	_GfxBase,a6
	jsr	-$348(a6)
	add.w	#$C,a7
;			table[i*16*16+j*16+k] = pen;
	move.l	-$1E(a5),d1
	moveq	#4,d6
	asl.l	d6,d1
	moveq	#4,d6
	asl.l	d6,d1
	move.l	-$22(a5),d6
	moveq	#4,d7
	asl.l	d7,d6
	move.l	d6,-$34(a5)
	add.l	-$34(a5),d1
	add.l	-$26(a5),d1
	move.l	-4(a5),a1
	lea	0(a1,d1.l*4),a0
	move.l	d0,(a0)
;			table2[pen] = (r >> 8) | (g >> 16) | (b >> 24);
	moveq	#$8,d1
	lsr.l	d1,d4
	moveq	#$10,d1
	lsr.l	d1,d2
	or.l	d2,d4
	moveq	#$18,d1
	lsr.l	d1,d3
	or.l	d3,d4
	move.l	-$8(a5),a1
	lea	0(a1,d0.l*4),a0
	move.l	d4,(a0)
	addq.l	#2,-$26(a5)
	add.w	#$40,d5
L197
	move.l	-$26(a5),d0
	cmp.l	#$9,d0
	blt	L187
L198
;		blue = 0x1f;
	moveq	#$1F,d5
	addq.l	#2,-$22(a5)
	add.w	#$40,-$C(a5)
L199
	move.l	-$22(a5),d0
	cmp.l	#$9,d0
	blt	L186
L200
;	    green = 0x1f;
	move.w	#$1F,-$C(a5)
	addq.l	#2,-$1E(a5)
	add.w	#$40,-$A(a5)
L201
	move.l	-$1E(a5),d0
	cmp.l	#$9,d0
	blt	L185
L202
;	for (i=0;
	clr.l	-$1E(a5)
	bra.b	L204
L203
;		c->dtable[i] = dithertable[i];
	move.l	-$1E(a5),d0
	move.l	#_dithertable,a1
	lea	0(a1,d0.l),a0
	move.b	(a0),d0
	move.l	$8(a5),a1
	lea	$288(a1),a0
	move.l	-$1E(a5),d1
	add.l	d1,a0
	move.b	d0,(a0)
	addq.l	#1,-$1E(a5)
L204
	move.l	-$1E(a5),d0
	cmp.l	#$100,d0
	blt.b	L203
L205
	moveq	#1,d0
	movem.l	(a7)+,d2-d7/a6
	unlk	a5
	rts

	SECTION "_DisposeTransTable:0",CODE


;void DisposeTransTable(struct amigamesa_context* c)
	XDEF	_DisposeTransTable
_DisposeTransTable
L226	EQU	-$24
	link	a5,#L226
	movem.l	d2-d5/a6,-(a7)
L207
;	for (i=0;
	moveq	#0,d4
	bra.b	L215
L208
;	    for (j=0;
	moveq	#0,d3
	bra.b	L213
L209
;		for (k=0;
	moveq	#0,d2
	bra.b	L211
L210
;		     ReleasePen(c->Screen->ViewPort.ColorMap,c->ColorTable[
	move.l	$8(a5),a1
	move.l	$80(a1),a0
	move.l	d4,d0
	moveq	#4,d1
	asl.l	d1,d0
	moveq	#4,d1
	asl.l	d1,d0
	move.l	d3,d1
	moveq	#4,d5
	asl.l	d5,d1
	add.l	d1,d0
	add.l	d2,d0
	lea	0(a0,d0.l*4),a0
	move.l	(a0),d0
	move.l	$8(a5),a1
	move.l	$38(a1),a0
	add.w	#$2C,a0
	move.l	4(a0),a0
	move.l	_GfxBase,a6
	jsr	-$3B4(a6)
	addq.l	#2,d2
L211
	cmp.l	#$9,d2
	blt.b	L210
L212
	addq.l	#2,d3
L213
	cmp.l	#$9,d3
	blt.b	L209
L214
	addq.l	#2,d4
L215
	cmp.l	#$9,d4
	blt.b	L208
L216
;	for (i=1;
	moveq	#1,d4
	bra.b	L224
L217
;	    for (j=1;
	moveq	#1,d3
	bra.b	L222
L218
;		for (k=1;
	moveq	#1,d2
	bra.b	L220
L219
;		     ReleasePen(c->Screen->ViewPort.ColorMap,c->ColorTable[
	move.l	$8(a5),a1
	move.l	$80(a1),a0
	move.l	d4,d0
	moveq	#4,d1
	asl.l	d1,d0
	moveq	#4,d1
	asl.l	d1,d0
	move.l	d3,d1
	moveq	#4,d5
	asl.l	d5,d1
	add.l	d1,d0
	add.l	d2,d0
	lea	0(a0,d0.l*4),a0
	move.l	(a0),d0
	move.l	$8(a5),a1
	move.l	$38(a1),a0
	add.w	#$2C,a0
	move.l	4(a0),a0
	move.l	_GfxBase,a6
	jsr	-$3B4(a6)
	addq.l	#2,d2
L220
	cmp.l	#$9,d2
	blt.b	L219
L221
	addq.l	#2,d3
L222
	cmp.l	#$9,d3
	blt.b	L218
L223
	addq.l	#2,d4
L224
	cmp.l	#$9,d4
	blt.b	L217
L225
;	FreeVec(c->ColorTable);
	move.l	$8(a5),a0
	move.l	$80(a0),a1
	move.l	_SysBase,a6
	jsr	-$2B2(a6)
;	FreeVec(c->ColorTable2);
	move.l	$8(a5),a0
	move.l	$84(a0),a1
	move.l	_SysBase,a6
	jsr	-$2B2(a6)
	movem.l	(a7)+,d2-d5/a6
	unlk	a5
	rts

	SECTION "_InitTransTable:0",CODE


;int InitTransTable(struct amigamesa_context* c)
	XDEF	_InitTransTable
_InitTransTable
L233	EQU	-$8
	link	a5,#L233
	move.l	a6,-(a7)
L227
;	if (!(c->ColorTable2 = AllocVec(256*sizeof(long),MEMF_PUBLIC|MEMF_
	move.l	#$400,d0
	move.l	#$10001,d1
	move.l	_SysBase,a6
	jsr	-$2AC(a6)
	move.l	$8(a5),a1
	move.l	d0,$84(a1)
	bne.b	L229
L228
	moveq	#0,d0
	move.l	(a7)+,a6
	unlk	a5
	rts
L229
;	for (i=0;
	moveq	#0,d0
	bra.b	L231
L230
;	    c->ColorTable2[i] = -1;
	move.l	$8(a5),a1
	move.l	$84(a1),a0
	lea	0(a0,d0.l*4),a0
	move.l	#-1,(a0)
	addq.l	#1,d0
L231
	cmp.l	#$100,d0
	blt.b	L230
L232
	moveq	#1,d0
	move.l	(a7)+,a6
	unlk	a5
	rts

	SECTION "_FreeTransTable:0",CODE


;void FreeTransTable(struct amigamesa_context* c)
	XDEF	_FreeTransTable
_FreeTransTable
L244	EQU	-$20
	link	a5,#L244
	movem.l	d2/d3/a6,-(a7)
L234
;	if ( (!(c->visual->rgb_flag)) && (c->depth <= 8) )
	move.l	$8(a5),a1
	move.l	4(a1),a0
	move.b	5(a0),d0
	bne.b	L243
L235
	move.l	$8(a5),a0
	move.l	$48(a0),d0
	cmp.l	#$8,d0
	bhi.b	L243
L236
;	    for (i=0;
	moveq	#0,d3
	bra.b	L242
L237
;		if (c->ColorTable2[i] >= 0)
	move.l	$8(a5),a1
	move.l	$84(a1),a0
	lea	0(a0,d3.l*4),a0
	move.l	(a0),d0
	bmi.b	L241
L238
;		    for (j=0;
	moveq	#0,d2
	bra.b	L240
L239
;			ReleasePen(c->Screen->ViewPort.ColorMap,i);
	move.l	$8(a5),a1
	move.l	$38(a1),a0
	add.w	#$2C,a0
	move.l	4(a0),a0
	move.l	d3,d0
	move.l	_GfxBase,a6
	jsr	-$3B4(a6)
	addq.l	#1,d2
L240
	move.l	$8(a5),a1
	move.l	$84(a1),a0
	lea	0(a0,d3.l*4),a0
	move.l	(a0),d0
	cmp.l	d0,d2
	ble.b	L239
L241
	addq.l	#1,d3
L242
	cmp.l	#$100,d3
	blt.b	L237
L243
;	FreeVec(c->ColorTable2);
	move.l	$8(a5),a0
	move.l	$84(a0),a1
	move.l	_SysBase,a6
	jsr	-$2B2(a6)
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts

	SECTION "_SWDriver_Dispose:0",CODE


;void SWDriver_Dispose(struct amigamesa_context *c)
	XDEF	_SWDriver_Dispose
_SWDriver_Dispose
L253	EQU	-$18
	link	a5,#L253
	move.l	a6,-(a7)
L245
;    if (c->depth <= 8)
	move.l	$8(a5),a0
	move.l	$48(a0),d0
	cmp.l	#$8,d0
	bhi.b	L250
L246
;	if (c->visual->rgb_flag)
	move.l	$8(a5),a1
	move.l	4(a1),a0
	move.b	5(a0),d0
	beq.b	L248
L247
;	    DisposeTransTable(c);
	move.l	$8(a5),-(a7)
	jsr	_DisposeTransTable
	addq.w	#4,a7
	bra.b	L249
L248
;	    FreeTransTable(c);
	move.l	$8(a5),-(a7)
	jsr	_FreeTransTable
	addq.w	#4,a7
L249
;	FreeBitMap(c->temprp->BitMap);
	move.l	$8(a5),a1
	move.l	$40(a1),a0
	move.l	4(a0),a0
	move.l	_GfxBase,a6
	jsr	-$39C(a6)
;	FreeVec(c->temprp);
	move.l	$8(a5),a0
	move.l	$40(a0),a1
	move.l	_SysBase,a6
	jsr	-$2B2(a6)
	bra.b	L252
L250
;	if (!(c->visual->rgb_flag))
	move.l	$8(a5),a1
	move.l	4(a1),a0
	move.b	5(a0),d0
	bne.b	L252
L251
;	    FreeTransTable(c);
	move.l	$8(a5),-(a7)
	jsr	_FreeTransTable
	addq.w	#4,a7
L252
;    FreeVec(c->BackArray);
	move.l	$8(a5),a0
	move.l	$30(a0),a1
	move.l	_SysBase,a6
	jsr	-$2B2(a6)
	move.l	(a7)+,a6
	unlk	a5
	rts

	SECTION "_LaunchGfxboardDriver:0",CODE


;static BOOL LaunchGfxboardDriver(struct amigamesa_context *c,struct 
_LaunchGfxboardDriver
L277	EQU	-$7C
	link	a5,#L277
	movem.l	d2/d3/a6,-(a7)
L254
;    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)
;    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,tag
	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)
;    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->depth <= 8)
	move.l	$8(a5),a0
	move.l	$48(a0),d0
	cmp.l	#$8,d0
	bhi	L268
L255
;	c->bprow = c->width;
	move.l	$8(a5),a0
	move.l	$58(a0),d0
	move.l	$8(a5),a0
	move.l	d0,$50(a0)
;	if (!(c->BackArray = AllocVec(c->width*c->height,MEMF_PUBLIC|MEMF_
	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	L257
L256
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L257
;	if (c->visual->rgb_flag)
	move.l	$8(a5),a1
	move.l	4(a1),a0
	move.b	5(a0),d0
	beq.b	L261
L258
;	    if (!(CreateTransTable(c)))
	move.l	$8(a5),-(a7)
	jsr	_CreateTransTable
	addq.w	#4,a7
	tst.l	d0
	bne.b	L260
L259
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L260
;		return
	bra.b	L263
L261
;	    if (!(InitTransTable(c)))
	move.l	$8(a5),-(a7)
	jsr	_InitTransTable
	addq.w	#4,a7
	tst.l	d0
	bne.b	L263
L262
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L263
;	if (!(c->temprp = AllocVec(sizeof(struct RastPort),MEMF_PUBLIC|MEM
	moveq	#$64,d0
	move.l	#$10001,d1
	move.l	_SysBase,a6
	jsr	-$2AC(a6)
	move.l	$8(a5),a1
	move.l	d0,$40(a1)
	bne.b	L265
L264
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L265
;	InitRastPort(c->temprp);
	move.l	$8(a5),a0
	move.l	$40(a0),a1
	move.l	_GfxBase,a6
	jsr	-$C6(a6)
;	if (!(c->temprp->BitMap = AllocBitMap((((c->width+15)>>4)<<4),1,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	$58(a1),d0
	add.l	#$F,d0
	moveq	#4,d1
	lsr.l	d1,d0
	moveq	#4,d1
	asl.l	d1,d0
	moveq	#1,d1
	moveq	#0,d3
	move.l	_GfxBase,a6
	jsr	-$396(a6)
	move.l	$8(a5),a1
	move.l	$40(a1),a0
	move.l	d0,4(a0)
	bne.b	L267
L266
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L267
;		return
	bra.b	L273
L268
;	c->bprow = c->width*4;
	move.l	$8(a5),a0
	move.l	$58(a0),d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	$8(a5),a0
	move.l	d0,$50(a0)
;	if (!(c->BackArray = AllocVec(c->width*c->height*4,MEMF_PUBLIC|MEM
	move.l	$8(a5),a0
	move.l	$58(a0),d0
	move.l	$8(a5),a0
	move.l	$5C(a0),d1
	mulu.l	d1,d0
	moveq	#2,d1
	asl.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	L270
L269
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L270
;	if (!(c->visual->rgb_flag))
	move.l	$8(a5),a1
	move.l	4(a1),a0
	move.b	5(a0),d0
	bne.b	L273
L271
;	    if (!(InitTransTable(c)))
	move.l	$8(a5),-(a7)
	jsr	_InitTransTable
	addq.w	#4,a7
	tst.l	d0
	bne.b	L273
L272
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L273
;    c->gl_ctx->Color.DrawBuffer = GL_BACK;
	move.l	$8(a5),a1
	move.l	(a1),a0
	move.l	#$405,$1E92(a0)
;    c->InitDD = SWDriver_DD_pointers;
	move.l	$8(a5),a1
	move.l	#_SWDriver_DD_pointers,$490(a1)
;    c->Dispose = SWDriver_Dispose;
	move.l	$8(a5),a1
	move.l	#_SWDriver_Dispose,$494(a1)
;    if (c->depth <= 8)
	move.l	$8(a5),a0
	move.l	$48(a0),d0
	cmp.l	#$8,d0
	bhi.b	L275
L274
;	c->SwapBuffer = SWDriver_SwapBuffer_LUT8;
	move.l	$8(a5),a1
	move.l	#_SWDriver_SwapBuffer_LUT8,$498(a1)
	bra.b	L276
L275
;	c->SwapBuffer = SWDriver_SwapBuffer_ARGB;
	move.l	$8(a5),a1
	move.l	#_SWDriver_SwapBuffer_ARGB,$498(a1)
L276
	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
L291	EQU	-$64
	link	a5,#L291
	movem.l	d2/d3/a6,-(a7)
L278
;    c->depth = GetBitMapAttr(c->rp->BitMap,BMA_DEPTH);
	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)
;    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->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->bprow = c->width;
	move.l	$8(a5),a0
	move.l	$58(a0),d0
	move.l	$8(a5),a0
	move.l	d0,$50(a0)
;    c->height= GetTagData(AMA_Height,c->RealHeight-c->bottom,tag
	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)
;    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->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	L280
L279
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L280
;    if (!(c->temprp = AllocVec(sizeof(struct RastPort),MEMF_PUBL
	moveq	#$64,d0
	move.l	#$10001,d1
	move.l	_SysBase,a6
	jsr	-$2AC(a6)
	move.l	$8(a5),a1
	move.l	d0,$40(a1)
	bne.b	L282
L281
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L282
;    InitRastPort(c->temprp);
	move.l	$8(a5),a0
	move.l	$40(a0),a1
	move.l	_GfxBase,a6
	jsr	-$C6(a6)
;    if (!(c->temprp->BitMap = AllocBitMap((((c->width+15)>>4)<<4)
	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	$58(a1),d0
	add.l	#$F,d0
	moveq	#4,d1
	lsr.l	d1,d0
	moveq	#4,d1
	asl.l	d1,d0
	moveq	#1,d1
	moveq	#0,d3
	move.l	_GfxBase,a6
	jsr	-$396(a6)
	move.l	$8(a5),a1
	move.l	$40(a1),a0
	move.l	d0,4(a0)
	bne.b	L284
L283
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L284
;    if (c->visual->rgb_flag)
	move.l	$8(a5),a1
	move.l	4(a1),a0
	move.b	5(a0),d0
	beq.b	L288
L285
;	if (!(CreateTransTable(c)))
	move.l	$8(a5),-(a7)
	jsr	_CreateTransTable
	addq.w	#4,a7
	tst.l	d0
	bne.b	L287
L286
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L287
;	    return
	bra.b	L290
L288
;	if (!(InitTransTable(c)))
	move.l	$8(a5),-(a7)
	jsr	_InitTransTable
	addq.w	#4,a7
	tst.l	d0
	bne.b	L290
L289
	moveq	#0,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts
L290
;    c->gl_ctx->Color.DrawBuffer = GL_BACK;
	move.l	$8(a5),a1
	move.l	(a1),a0
	move.l	#$405,$1E92(a0)
;    c->InitDD = SWDriver_DD_pointers;
	move.l	$8(a5),a1
	move.l	#_SWDriver_DD_pointers,$490(a1)
;    c->Dispose = SWDriver_Dispose;
	move.l	$8(a5),a1
	move.l	#_SWDriver_Dispose,$494(a1)
;    c->SwapBuffer = SWDriver_SwapBuffer_AGA;
	move.l	$8(a5),a1
	move.l	#_SWDriver_SwapBuffer_AGA,$498(a1)
	moveq	#1,d0
	movem.l	(a7)+,d2/d3/a6
	unlk	a5
	rts

	SECTION "_SWDriver_init:0",CODE


;BOOL SWDriver_init(struct amigamesa_context *c,struct TagItem *tagLi
	XDEF	_SWDriver_init
_SWDriver_init
L296	EQU	-4
	link	a5,#L296
	move.l	a6,-(a7)
L292
;    if (CyberGfxBase)
	tst.l	_CyberGfxBase
	beq.b	L295
L293
;	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	L295
L294
	move.l	$C(a5),-(a7)
	move.l	$8(a5),-(a7)
	jsr	_LaunchGfxboardDriver
	addq.w	#$8,a7
	move.l	(a7)+,a6
	unlk	a5
	rts
L295
	move.l	$C(a5),-(a7)
	move.l	$8(a5),-(a7)
	jsr	_LaunchAGADriver
	addq.w	#$8,a7
	move.l	(a7)+,a6
	unlk	a5
	rts

	END
