
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src/drawpix.c
	mc68030
	mc68881
	XREF	_gl_write_zoomed_stencil_span
	XREF	_gl_write_zoomed_index_span
	XREF	_gl_write_zoomed_rgb_span
	XREF	_gl_write_zoomed_rgba_span
	XREF	_gl_write_stencil_span
	XREF	_gl_write_rgba_span
	XREF	_gl_write_index_span
	XREF	_gl_map_stencil
	XREF	_gl_shift_and_offset_stencil
	XREF	_gl_map_ci8_to_rgba
	XREF	_gl_map_ci_to_rgba
	XREF	_gl_map_ci
	XREF	_gl_shift_and_offset_ci
	XREF	_gl_map_color
	XREF	_gl_scale_and_bias_color
	XREF	_gl_image_error_test
	XREF	_gl_update_hitflag
	XREF	_gl_feedback_vertex
	XREF	_gl_update_state
	XREF	_gl_error
	XREF	_gl_problem
	XREF	_q_memcpy
	XREF	_CC

	SECTION "_gl_direct_DrawPixels:0",CODE


;GLboolean gl_direct_DrawPixels( GLcontext *ctx,
	XDEF	_gl_direct_DrawPixels
_gl_direct_DrawPixels
L388	EQU	-$38A4
	link	a5,#L388
	movem.l	d2-d7/a2-a4,-(a7)
	move.l	$14(a5),d4
	move.l	$10(a5),d5
	move.l	$8(a5),a2
	move.l	$C(a5),a3
	move.l	$20(a5),a4
L256
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a2,a0
	add.l	#$E968,a0
	move.l	(a0),d0
	cmp.l	#$1A00,d0
	beq.b	L258
L257
;      gl_error( ctx, GL_INVALID_OPERATION, "glDrawPixels" );
	move.l	#L255,-(a7)
	pea	$502.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	moveq	#1,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L258
;   if (!ctx->Current.RasterPosValid) 
	tst.b	$229A(a2)
	bne.b	L260
L259
	moveq	#1,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L260
;   if (ctx->NewState) 
	move.l	a2,a0
	add.l	#$E960,a0
	tst.l	(a0)
	beq.b	L262
L261
;      gl_update_state(ctx);
	move.l	a2,-(a7)
	jsr	_gl_update_state
	addq.w	#4,a7
L262
;   if (ctx->Driver.DrawPixels) 
	tst.l	$9AC(a2)
	beq.b	L265
L263
;      GLint x = (GLint) (ctx->Current.RasterPos[0] + 0.5F);
	fmove.s	$224E(a2),fp0
	fadd.s	#$.3F000000,fp0
	fmove.l	fp0,d1
;      GLint y = (GLint) (ctx->Current.RasterPos[1] + 0.5F);
	lea	$224E(a2),a0
	fmove.s	4(a0),fp0
	fadd.s	#$.3F000000,fp0
	fmove.l	fp0,d0
;      if ((*ctx->Driver.DrawPixels)(ctx, x, y, width, height, 
	move.l	a4,-(a7)
	move.l	a3,-(a7)
	move.l	$1C(a5),-(a7)
	move.l	$18(a5),-(a7)
	move.l	d4,-(a7)
	move.l	d5,-(a7)
	move.l	d0,-(a7)
	move.l	d1,-(a7)
	move.l	a2,-(a7)
	move.l	$9AC(a2),a0
	jsr	(a0)
	add.w	#$24,a7
	tst.b	d0
	beq.b	L265
L264
	moveq	#1,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L265
;   if ((ctx->RasterMask&(~(SCISSOR_BIT|WINCLIP_BIT)))==0
	move.l	a2,a0
	add.l	#$E974,a0
	move.l	(a0),d0
	and.l	#-$221,d0
	bne	L387
L266
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	4(a0),fp0
	ftst.d	fp0
	fbne.b	L387
L267
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$8(a0),fp0
	fcmp.d	#$.3FF00000.00000000,fp0
	fbne.b	L387
L268
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$C(a0),fp0
	ftst.d	fp0
	fbne.b	L387
L269
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$10(a0),fp0
	fcmp.d	#$.3FF00000.00000000,fp0
	fbne.b	L387
L270
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$14(a0),fp0
	ftst.d	fp0
	fbne.b	L387
L271
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$18(a0),fp0
	fcmp.d	#$.3FF00000.00000000,fp0
	fbne.b	L387
L272
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$1C(a0),fp0
	ftst.d	fp0
	fbne.b	L387
L273
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$20(a0),fp0
	fcmp.d	#$.3FF00000.00000000,fp0
	fbne.b	L387
L274
	move.l	a2,a0
	add.l	#$B168,a0
	tst.l	$2E(a0)
	bne	L387
L275
	move.l	a2,a0
	add.l	#$B168,a0
	tst.l	$32(a0)
	bne	L387
L276
	move.l	a2,a0
	add.l	#$B168,a0
	tst.b	$36(a0)
	bne	L387
L277
	move.l	a3,a0
	move.l	(a0),d0
	cmp.l	#1,d0
	bne	L387
L278
	move.l	a3,a0
	tst.b	$18(a0)
	bne	L387
L279
	move.l	a3,a0
	tst.b	$19(a0)
	bne	L387
L280
;      GLint destX = (GLint) (ctx->Current.RasterPos[0] + 0.5F);
	fmove.s	$224E(a2),fp0
	fadd.s	#$.3F000000,fp0
	fmove.l	fp0,d0
	move.l	d0,d7
;      GLint destY = (GLint) (ctx->Current.RasterPos[1] + 0.5F);
	lea	$224E(a2),a0
	fmove.s	4(a0),fp0
	fadd.s	#$.3F000000,fp0
	fmove.l	fp0,d2
;      GLint drawWidth = width;
	move.l	d5,d3
;      GLint drawHeight = height;
;      GLint skipPixels = unpack->SkipPixels;
	move.l	a3,a0
	move.l	$8(a0),-$2BD4(a5)
;      GLint skipRows = unpack->SkipRows;
	move.l	a3,a0
	move.l	$C(a0),d0
;      if (unpack->RowLength > 0)
	move.l	a3,a0
	move.l	4(a0),d1
	cmp.l	#0,d1
	ble.b	L283
L281
;	 rowLength = unpack->RowLength;
	move.l	a3,a0
	move.l	4(a0),d5
L282
;	 rowLength = width;
L283
;      if (ctx->Pixel.ZoomX==1.0F && ctx->Pixel.ZoomY==1.0F) 
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$38(a0),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L298
L284
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$3C(a0),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L298
L285
;	 if (destX < ctx->Buffer->Xmin) 
	move.l	$8FC(a2),a0
	move.l	d7,d6
	cmp.l	$24(a0),d6
	bge.b	L287
L286
;	    skipPixels += (ctx->Buffer->Xmin - destX);
	move.l	$8FC(a2),a0
	move.l	$24(a0),d1
	sub.l	d7,d1
	add.l	d1,-$2BD4(a5)
;	    drawWidth  -= (ctx->Buffer->Xmin - destX);
	move.l	$8FC(a2),a0
	move.l	$24(a0),d1
	sub.l	d7,d1
	sub.l	d1,d3
;	    destX = ctx->Buffer->Xmin;
	move.l	$8FC(a2),a0
	move.l	$24(a0),d7
L287
;	 if (destX + drawWidth > ctx->Buffer->Xmax)
	move.l	d7,d1
	add.l	d3,d1
	move.l	d1,d6
	move.l	$8FC(a2),a0
	cmp.l	$28(a0),d6
	ble.b	L289
L288
;	    drawWidth -= (destX + drawWidth - ctx->Buffer->Xmax - 1);
	move.l	d7,d1
	add.l	d3,d1
	move.l	$8FC(a2),a0
	sub.l	$28(a0),d1
	subq.l	#1,d1
	sub.l	d1,d3
L289
;	 if (drawWidth <= 0)
	cmp.l	#0,d3
	bgt.b	L291
L290
	moveq	#1,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L291
;	 if (destY < ctx->Buffer->Ymin) 
	move.l	$8FC(a2),a0
	cmp.l	$2C(a0),d2
	bge.b	L293
L292
;	    skipRows   += (ctx->Buffer->Ymin - destY);
	move.l	$8FC(a2),a0
	move.l	$2C(a0),d1
	sub.l	d2,d1
	add.l	d1,d0
;	    drawHeight -= (ctx->Buffer->Ymin - destY);
	move.l	$8FC(a2),a0
	move.l	$2C(a0),d1
	sub.l	d2,d1
	sub.l	d1,d4
;	    destY = ctx->Buffer->Ymin;
	move.l	$8FC(a2),a0
	move.l	$2C(a0),d2
L293
;	 if (destY + drawHeight > ctx->Buffer->Ymax)
	move.l	d2,d1
	add.l	d4,d1
	move.l	d1,d6
	move.l	$8FC(a2),a0
	cmp.l	$30(a0),d6
	ble.b	L295
L294
;	    drawHeight -= (destY + drawHeight - ctx->Buffer->Ymax - 1);
	move.l	d2,d1
	add.l	d4,d1
	move.l	$8FC(a2),a0
	sub.l	$30(a0),d1
	subq.l	#1,d1
	sub.l	d1,d4
L295
;	 if (drawHeight <= 0)
	cmp.l	#0,d4
	bgt.b	L302
L296
	moveq	#1,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L297
;	    return 
	bra.b	L302
L298
;	 GLdepth z = (GLdepth) (ctx->Current.RasterPos[2] * DEPTH_SCALE);
	lea	$224E(a2),a0
	fmove.s	$8(a0),fp0
	fmul.s	#$.477FFF00,fp0
	fmove.l	fp0,d1
	move.w	d1,-$3862(a5)
;	 for (i=0;
	moveq	#0,d1
	bra.b	L300
L299
;	    zSpan[i] = z;
	lea	-$385C(a5),a0
	move.w	-$3862(a5),0(a0,d1.l*2)
	addq.l	#1,d1
L300
	cmp.l	d3,d1
	blt.b	L299
L301
;	 zoomY0 = (GLint) (ctx->Current.RasterPos[1] + 0.5F);
	lea	$224E(a2),a0
	fmove.s	4(a0),fp0
	fadd.s	#$.3F000000,fp0
	fmove.l	fp0,d1
	move.l	d1,-$3860(a5)
L302
;      if (format==GL_RGBA && type==GL_UNSIGNED_BYTE) 
	move.l	$18(a5),d1
	cmp.l	#$1908,d1
	bne	L315
L303
	move.l	$1C(a5),d1
	cmp.l	#$1401,d1
	bne	L315
L304
;	 if (ctx->Visual->RGBAflag) 
	move.l	$8F8(a2),a0
	tst.b	(a0)
	beq	L314
L305
;	    GLubyte *src = (GLubyte *) pixels
	muls.l	d5,d0
	add.l	-$2BD4(a5),d0
	moveq	#2,d1
	asl.l	d1,d0
	add.l	a4,d0
	move.l	d0,a3
;	    if (ctx->Pixel.ZoomX==1.0F && ctx->Pixel.ZoomY==1.0F) 
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$38(a0),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L311
L306
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$3C(a0),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L311
L307
;	       for (row=0;
	moveq	#0,d6
	bra.b	L309
L308
;		  (*ctx->Driver.WriteRGBASpan)(ctx, drawWidth, destX, destY,
	clr.l	-(a7)
	move.l	a3,-(a7)
	move.l	d2,-(a7)
	move.l	d7,-(a7)
	move.l	d3,-(a7)
	move.l	a2,-(a7)
	move.l	$924(a2),a0
	jsr	(a0)
	add.w	#$18,a7
;		  src += rowLength * 4;
	move.l	d5,d0
	moveq	#2,d1
	asl.l	d1,d0
	add.l	a3,d0
	move.l	d0,a3
;		  destY++;
	addq.l	#1,d2
	move.l	d6,d0
	addq.l	#1,d0
	move.l	d0,d6
L309
	move.l	d6,d0
	cmp.l	d4,d0
	blt.b	L308
L310
	bra.b	L314
L311
;	       for (row=0;
	moveq	#0,d6
	bra.b	L313
L312
;		  gl_write_zoomed_rgba_span(ctx, drawWidth, destX, destY,
	move.l	-$3860(a5),-(a7)
	move.l	a3,-(a7)
	pea	-$385C(a5)
	move.l	d2,-(a7)
	move.l	d7,-(a7)
	move.l	d3,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_write_zoomed_rgba_span
	add.w	#$1C,a7
;		  src += rowLength * 4;
	move.l	d5,d0
	moveq	#2,d1
	asl.l	d1,d0
	add.l	a3,d0
	move.l	d0,a3
;		  destY++;
	addq.l	#1,d2
	move.l	d6,d0
	addq.l	#1,d0
	move.l	d0,d6
L313
	move.l	d6,d0
	cmp.l	d4,d0
	blt.b	L312
L314
	moveq	#1,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L315
;      else if (format==GL_RGB && type==GL_UNSIGNED_BYTE) 
	move.l	$18(a5),d1
	cmp.l	#$1907,d1
	bne	L328
L316
	move.l	$1C(a5),d1
	cmp.l	#$1401,d1
	bne	L328
L317
;	 if (ctx->Visual->RGBAflag) 
	move.l	$8F8(a2),a0
	tst.b	(a0)
	beq	L327
L318
;	    GLubyte *src = (GLubyte *) pixels
	muls.l	d5,d0
	add.l	-$2BD4(a5),d0
	muls.l	#3,d0
	add.l	a4,d0
	move.l	d0,a3
;	    if (ctx->Pixel.ZoomX==1.0F && ctx->Pixel.ZoomY==1.0F) 
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$38(a0),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L324
L319
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$3C(a0),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L324
L320
;	       for (row=0;
	moveq	#0,d6
	bra.b	L322
L321
;		  (*ctx->Driver.WriteRGBSpan)(ctx, drawWidth, destX, destY,
	clr.l	-(a7)
	move.l	a3,-(a7)
	move.l	d2,-(a7)
	move.l	d7,-(a7)
	move.l	d3,-(a7)
	move.l	a2,-(a7)
	move.l	$928(a2),a0
	jsr	(a0)
	add.w	#$18,a7
;		  src += rowLength * 3;
	move.l	d5,d0
	muls.l	#3,d0
	add.l	a3,d0
	move.l	d0,a3
;		  destY++;
	addq.l	#1,d2
	move.l	d6,d0
	addq.l	#1,d0
	move.l	d0,d6
L322
	move.l	d6,d0
	cmp.l	d4,d0
	blt.b	L321
L323
	bra.b	L327
L324
;	       for (row=0;
	moveq	#0,d6
	bra.b	L326
L325
;		  gl_write_zoomed_rgb_span(ctx, drawWidth, destX, destY,
	move.l	-$3860(a5),-(a7)
	move.l	a3,-(a7)
	pea	-$385C(a5)
	move.l	d2,-(a7)
	move.l	d7,-(a7)
	move.l	d3,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_write_zoomed_rgb_span
	add.w	#$1C,a7
;		  src += rowLength * 3;
	move.l	d5,d0
	muls.l	#3,d0
	add.l	a3,d0
	move.l	d0,a3
;		  destY++;
	addq.l	#1,d2
	move.l	d6,d0
	addq.l	#1,d0
	move.l	d0,d6
L326
	move.l	d6,d0
	cmp.l	d4,d0
	blt.b	L325
L327
	moveq	#1,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L328
;      else if (format==GL_LUMINANCE && type==GL_UNSIGNED_
	move.l	$18(a5),d1
	cmp.l	#$1909,d1
	bne	L347
L329
	move.l	$1C(a5),d1
	cmp.l	#$1401,d1
	bne	L347
L330
;	 if (ctx->Visual->RGBAflag) 
	move.l	$8F8(a2),a0
	tst.b	(a0)
	beq	L346
L331
;	    GLubyte *src = (GLubyte *) pixels
	muls.l	d5,d0
	add.l	-$2BD4(a5),d0
	add.l	a4,d0
	move.l	d0,a3
;	    if (ctx->Pixel.ZoomX==1.0F && ctx->Pixel.ZoomY==1.0F) 
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$38(a0),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L340
L332
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$3C(a0),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L340
L333
;	       for (row=0;
	clr.l	-$3872(a5)
	bra	L338
L334
;		  for (i=0;
	moveq	#0,d0
	bra.b	L336
L335
;		     rgb[i][0] = src[i];
	lea	-$12C0(a5),a0
	move.l	d0,d6
	muls.l	#3,d6
	move.b	0(a3,d0.l),0(a0,d6.l)
;		     rgb[i][1] = src[i];
	lea	-$12C0(a5),a0
	move.l	d0,d6
	muls.l	#3,d6
	lea	0(a0,d6.l),a0
	move.b	0(a3,d0.l),1(a0)
;		     rgb[i][2] = src[i];
	lea	-$12C0(a5),a0
	move.l	d0,d6
	muls.l	#3,d6
	lea	0(a0,d6.l),a0
	move.b	0(a3,d0.l),2(a0)
	addq.l	#1,d0
L336
	cmp.l	d3,d0
	blt.b	L335
L337
;		  (*ctx->Driver.WriteRGBSpan)(ctx, drawWidth, destX, destY,
	clr.l	-(a7)
	pea	-$12C0(a5)
	move.l	d2,-(a7)
	move.l	d7,-(a7)
	move.l	d3,-(a7)
	move.l	a2,-(a7)
	move.l	$928(a2),a0
	jsr	(a0)
	add.w	#$18,a7
;		  src += rowLength;
	move.l	d5,d0
	add.l	a3,d0
	move.l	d0,a3
;		  destY++;
	addq.l	#1,d2
	addq.l	#1,-$3872(a5)
L338
	move.l	-$3872(a5),d0
	cmp.l	d4,d0
	blt.b	L334
L339
	bra	L346
L340
;	       for (row=0;
	clr.l	-$3872(a5)
	bra	L345
L341
;		  for (i=0;
	moveq	#0,d0
	bra.b	L343
L342
;		     rgb[i][0] = src[i];
	lea	-$12C0(a5),a0
	move.l	d0,d6
	muls.l	#3,d6
	move.b	0(a3,d0.l),0(a0,d6.l)
;		     rgb[i][1] = src[i];
	lea	-$12C0(a5),a0
	move.l	d0,d6
	muls.l	#3,d6
	lea	0(a0,d6.l),a0
	move.b	0(a3,d0.l),1(a0)
;		     rgb[i][2] = src[i];
	lea	-$12C0(a5),a0
	move.l	d0,d6
	muls.l	#3,d6
	lea	0(a0,d6.l),a0
	move.b	0(a3,d0.l),2(a0)
	addq.l	#1,d0
L343
	cmp.l	d3,d0
	blt.b	L342
L344
;		  gl_write_zoomed_rgb_span(ctx, drawWidth, destX, destY,
	move.l	-$3860(a5),-(a7)
	pea	-$12C0(a5)
	pea	-$385C(a5)
	move.l	d2,-(a7)
	move.l	d7,-(a7)
	move.l	d3,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_write_zoomed_rgb_span
	add.w	#$1C,a7
;		  src += rowLength;
	move.l	d5,d0
	add.l	a3,d0
	move.l	d0,a3
;		  destY++;
	addq.l	#1,d2
	addq.l	#1,-$3872(a5)
L345
	move.l	-$3872(a5),d0
	cmp.l	d4,d0
	blt.b	L341
L346
	moveq	#1,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L347
;      else if (format==GL_LUMINANCE_ALPHA && type==GL_UNS
	move.l	$18(a5),d1
	cmp.l	#$190A,d1
	bne	L366
L348
	move.l	$1C(a5),d1
	cmp.l	#$1401,d1
	bne	L366
L349
;	 if (ctx->Visual->RGBAflag) 
	move.l	$8F8(a2),a0
	tst.b	(a0)
	beq	L365
L350
;	    GLubyte *src = (GLubyte *) pixels
	muls.l	d5,d0
	add.l	-$2BD4(a5),d0
	moveq	#1,d1
	asl.l	d1,d0
	add.l	a4,d0
	move.l	d0,a3
;	    if (ctx->Pixel.ZoomX==1.0F && ctx->Pixel.ZoomY==1.0F) 
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$38(a0),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L359
L351
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$3C(a0),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L359
L352
;	       for (row=0;
	clr.l	-$3876(a5)
	bra.b	L357
L353
;		  GLubyte *ptr = src;
	move.l	a3,a0
;		  for (i=0;
	moveq	#0,d0
	bra.b	L355
L354
;		     rgba[i][0] = *ptr;
	lea	-$2BC0(a5),a1
	move.b	(a0),0(a1,d0.l*4)
;		     rgba[i][1] = *ptr;
	lea	-$2BC0(a5),a1
	lea	0(a1,d0.l*4),a1
	move.b	(a0),1(a1)
;		     rgba[i][2] = *ptr++;
	lea	-$2BC0(a5),a1
	lea	0(a1,d0.l*4),a1
	move.b	(a0)+,2(a1)
;		     rgba[i][3] = *ptr++;
	lea	-$2BC0(a5),a1
	lea	0(a1,d0.l*4),a1
	move.b	(a0)+,3(a1)
	addq.l	#1,d0
L355
	cmp.l	d3,d0
	blt.b	L354
L356
;		  (*ctx->Driver.WriteRGBASpan)(ctx, drawWidth, destX, destY,
	clr.l	-(a7)
	pea	-$2BC0(a5)
	move.l	d2,-(a7)
	move.l	d7,-(a7)
	move.l	d3,-(a7)
	move.l	a2,-(a7)
	move.l	$924(a2),a0
	jsr	(a0)
	add.w	#$18,a7
;		  src += rowLength*2;
	move.l	d5,d0
	moveq	#1,d1
	asl.l	d1,d0
	add.l	a3,d0
	move.l	d0,a3
;		  destY++;
	addq.l	#1,d2
	addq.l	#1,-$3876(a5)
L357
	move.l	-$3876(a5),d0
	cmp.l	d4,d0
	blt.b	L353
L358
	bra	L365
L359
;	       for (row=0;
	clr.l	-$387A(a5)
	bra	L364
L360
;		  GLubyte *ptr = src;
	move.l	a3,a0
;		  for (i=0;
	moveq	#0,d0
	bra.b	L362
L361
;		     rgba[i][0] = *ptr;
	lea	-$2BC0(a5),a1
	move.b	(a0),0(a1,d0.l*4)
;		     rgba[i][1] = *ptr;
	lea	-$2BC0(a5),a1
	lea	0(a1,d0.l*4),a1
	move.b	(a0),1(a1)
;		     rgba[i][2] = *ptr++;
	lea	-$2BC0(a5),a1
	lea	0(a1,d0.l*4),a1
	move.b	(a0)+,2(a1)
;		     rgba[i][3] = *ptr++;
	lea	-$2BC0(a5),a1
	lea	0(a1,d0.l*4),a1
	move.b	(a0)+,3(a1)
	addq.l	#1,d0
L362
	cmp.l	d3,d0
	blt.b	L361
L363
;		  gl_write_zoomed_rgba_span(ctx, drawWidth, destX, destY,
	move.l	-$3860(a5),-(a7)
	pea	-$2BC0(a5)
	pea	-$385C(a5)
	move.l	d2,-(a7)
	move.l	d7,-(a7)
	move.l	d3,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_write_zoomed_rgba_span
	add.w	#$1C,a7
;		  src += rowLength*2;
	move.l	d5,d0
	moveq	#1,d1
	asl.l	d1,d0
	add.l	a3,d0
	move.l	d0,a3
;		  destY++;
	addq.l	#1,d2
	addq.l	#1,-$387A(a5)
L364
	move.l	-$387A(a5),d0
	cmp.l	d4,d0
	blt.b	L360
L365
	moveq	#1,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L366
;      else if (format==GL_COLOR_INDEX && type==GL_UNSIGNE
	move.l	$18(a5),d1
	cmp.l	#$1900,d1
	bne	L386
L367
	move.l	$1C(a5),d1
	cmp.l	#$1401,d1
	bne	L386
L368
;	 GLubyte *src = (GLubyte *) pixels + skipRows * rowLength + skipP
	muls.l	d5,d0
	lea	0(a4,d0.l),a0
	move.l	-$2BD4(a5),d0
	add.l	a0,d0
	move.l	d0,a3
;	 if (ctx->Visual->RGBAflag) 
	move.l	$8F8(a2),a0
	tst.b	(a0)
	beq	L379
L369
;	    if (ctx->Pixel.ZoomX==1.0F && ctx->Pixel.ZoomY==1.0F) 
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$38(a0),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L375
L370
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$3C(a0),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L375
L371
;	       for (row=0;
	moveq	#0,d6
	bra.b	L373
L372
;		  gl_map_ci8_to_rgba(ctx, drawWidth, src, rgba);
	pea	-$2BC0(a5)
	move.l	a3,-(a7)
	move.l	d3,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_map_ci8_to_rgba
	add.w	#$10,a7
;		  (*ctx->Driver.WriteRGBASpan)(ctx, drawWidth, destX, destY,
	clr.l	-(a7)
	pea	-$2BC0(a5)
	move.l	d2,-(a7)
	move.l	d7,-(a7)
	move.l	d3,-(a7)
	move.l	a2,-(a7)
	move.l	$924(a2),a0
	jsr	(a0)
	add.w	#$18,a7
;		  src += rowLength;
	move.l	d5,d0
	add.l	a3,d0
	move.l	d0,a3
;		  destY++;
	addq.l	#1,d2
	move.l	d6,d0
	addq.l	#1,d0
	move.l	d0,d6
L373
	move.l	d6,d0
	cmp.l	d4,d0
	blt.b	L372
L374
	moveq	#1,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L375
;	       for (row=0;
	moveq	#0,d6
	bra.b	L377
L376
;		  gl_map_ci8_to_rgba(ctx, drawWidth, src, rgba);
	pea	-$2BC0(a5)
	move.l	a3,-(a7)
	move.l	d3,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_map_ci8_to_rgba
	add.w	#$10,a7
;		  gl_write_zoomed_rgba_span(ctx, drawWidth, destX, destY,
	move.l	-$3860(a5),-(a7)
	pea	-$2BC0(a5)
	pea	-$385C(a5)
	move.l	d2,-(a7)
	move.l	d7,-(a7)
	move.l	d3,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_write_zoomed_rgba_span
	add.w	#$1C,a7
;		  src += rowLength;
	move.l	d5,d0
	add.l	a3,d0
	move.l	d0,a3
;		  destY++;
	addq.l	#1,d2
	move.l	d6,d0
	addq.l	#1,d0
	move.l	d0,d6
L377
	move.l	d6,d0
	cmp.l	d4,d0
	blt.b	L376
L378
	moveq	#1,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L379
;	    if (ctx->Pixel.ZoomX==1.0F && ctx->Pixel.ZoomY==1.0F) 
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$38(a0),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L385
L380
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$3C(a0),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L385
L381
;	       for (row=0;
	moveq	#0,d6
	bra.b	L383
L382
;		  (*ctx->Driver.WriteCI8Span)(ctx, drawWidth, destX, destY,
	clr.l	-(a7)
	move.l	a3,-(a7)
	move.l	d2,-(a7)
	move.l	d7,-(a7)
	move.l	d3,-(a7)
	move.l	a2,-(a7)
	move.l	$93C(a2),a0
	jsr	(a0)
	add.w	#$18,a7
;		  src += rowLength;
	move.l	d5,d0
	add.l	a3,d0
	move.l	d0,a3
;		  destY++;
	addq.l	#1,d2
	move.l	d6,d0
	addq.l	#1,d0
	move.l	d0,d6
L383
	move.l	d6,d0
	cmp.l	d4,d0
	blt.b	L382
L384
	moveq	#1,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L385
	moveq	#0,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L386
	moveq	#0,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L387
	moveq	#0,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts

L255
	dc.b	'glDrawPixels',0

	SECTION "_draw_index_pixels:0",CODE

	rts

;static void draw_index_pixels( GLcontext *ctx, GLint x, GLint y,
_draw_index_pixels
L431	EQU	-$3EB2
	link	a5,#L431
	movem.l	d2-d7/a2/a3,-(a7)
	movem.l	$10(a5),d5/a3
	move.l	$C(a5),d7
	move.l	$8(a5),a2
L390
;   const GLint desty = y;
	move.l	d5,-$10(a5)
;   const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.Zoo
	moveq	#1,d0
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$38(a0),fp0
	fcmp.d	#$.3FF00000.00000000,fp0
	fbne.b	L393
L391
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$3C(a0),fp0
	fcmp.d	#$.3FF00000.00000000,fp0
	fbne.b	L393
L392
	moveq	#0,d0
L393
	move.b	d0,-$C99(a5)
;   width = image->Width;
	move.l	a3,a0
	move.l	(a0),d2
;   height = image->Height;
	move.l	a3,a0
	move.l	4(a0),-$8(a5)
;   if (image->Type == GL_BITMAP)
	move.l	a3,a0
	move.l	$14(a0),d0
	cmp.l	#$1A00,d0
	bne.b	L395
L394
;      widthInBytes = (width + 7) / 8;
	move.l	d2,d0
	addq.l	#7,d0
	move.l	d0,-$C(a5)
	move.l	-$C(a5),d0
	divsl.l	#$8,d0
	move.l	d0,-$C(a5)
	bra.b	L396
L395
;      widthInBytes = width;
	move.l	d2,-$C(a5)
L396
;   if (ctx->Depth.Test) 
	tst.b	$22A4(a2)
	beq.b	L400
L397
;      GLdepth zval = (GLdepth) (ctx->Current.RasterPos[2] * DE
	lea	$224E(a2),a0
	fmove.s	$8(a0),fp0
	fmul.s	#$.477FFF00,fp0
	fmove.l	fp0,d0
;      for (i=0;
	moveq	#0,d3
	bra.b	L399
L398
;	 zspan[i] = zval;
	lea	-$C98(a5),a0
	move.w	d0,0(a0,d3.l*2)
	addq.l	#1,d3
L399
	cmp.l	d2,d3
	blt.b	L398
L400
;   for (i=0;
	moveq	#0,d3
	bra	L429
L401
;      switch (image->Type)
	move.l	a3,a0
	move.l	$14(a0),d0
	cmp.l	#$1406,d0
	beq.b	L406
	bgt.b	L432
	cmp.l	#$1401,d0
	beq.b	L402
	bra	L414
L432
	cmp.l	#$1A00,d0
	beq.b	L410
	bra	L414
;	 
L402
;	       GLubyte *src = (GLubyte *) image->Data + i * width;
	move.l	a3,a1
	move.l	d3,d0
	muls.l	d2,d0
	move.l	$18(a1),a0
	add.l	d0,a0
;	       for (j=0;
	moveq	#0,d0
	bra.b	L404
L403
;		  ispan[j] = (GLuint) *src++;
	moveq	#0,d1
	move.b	(a0)+,d1
	lea	-$259A(a5),a1
	move.l	d1,0(a1,d0.l*4)
	addq.l	#1,d0
L404
	cmp.l	d2,d0
	blt.b	L403
L405
;	    
	bra	L415
L406
;	       GLfloat *src = (GLfloat *) image->Data + i * width;
	move.l	a3,a1
	move.l	d3,d0
	muls.l	d2,d0
	move.l	$18(a1),a0
	lea	0(a0,d0.l*4),a0
;	       for (j=0;
	moveq	#0,d0
	bra.b	L408
L407
;		  ispan[j] = (GLuint) (GLint) *src++;
	fmove.s	(a0)+,fp0
	fmove.l	fp0,d1
	lea	-$259A(a5),a1
	move.l	d1,0(a1,d0.l*4)
	addq.l	#1,d0
L408
	cmp.l	d2,d0
	blt.b	L407
L409
;	    
	bra.b	L415
L410
;	       GLubyte *src = (GLubyte *) image->Data + i * widthIn
	move.l	a3,a1
	move.l	d3,d0
	muls.l	-$C(a5),d0
	move.l	$18(a1),a0
	lea	0(a0,d0.l),a1
;	       for (j=0;
	moveq	#0,d0
	bra.b	L412
L411
;		  ispan[j] = ( src[j >> 3] >> (7 - (j & 0x7)) ) & 1;
	move.l	d0,d1
	moveq	#3,d4
	asr.l	d4,d1
	move.b	0(a1,d1.l),d1
	and.l	#$FF,d1
	move.l	d0,d4
	and.l	#7,d4
	moveq	#7,d6
	sub.l	d4,d6
	asr.l	d6,d1
	and.l	#1,d1
	lea	-$259A(a5),a0
	move.l	d1,0(a0,d0.l*4)
	addq.l	#1,d0
L412
	cmp.l	d2,d0
	blt.b	L411
L413
;	    
	bra.b	L415
L414
;	    gl_problem( ctx, "draw_index_pixels type" );
	move.l	#L389,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_problem
	addq.w	#$8,a7
	movem.l	(a7)+,d2-d7/a2/a3
	unlk	a5
	rts
L415
;	    return;
;      if (ctx->Pixel.IndexOffset || ctx->Pixel.IndexShift) 
	move.l	a2,a0
	add.l	#$B168,a0
	tst.l	$32(a0)
	bne.b	L417
L416
	move.l	a2,a0
	add.l	#$B168,a0
	tst.l	$2E(a0)
	beq.b	L418
L417
;	 gl_shift_and_offset_ci( ctx, width, ispan );
	pea	-$259A(a5)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_shift_and_offset_ci
	add.w	#$C,a7
L418
;      if (ctx->Visual->RGBAflag) 
	move.l	$8F8(a2),a0
	tst.b	(a0)
	beq.b	L423
L419
;	 gl_map_ci_to_rgba( ctx, width, ispan, rgba );
	pea	-$3EA2(a5)
	pea	-$259A(a5)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_map_ci_to_rgba
	add.w	#$10,a7
;	 if (zoom) 
	tst.b	-$C99(a5)
	beq.b	L421
L420
;	    gl_write_zoomed_rgba_span( ctx, width, x, y, zspan, (CONST
	move.l	-$10(a5),-(a7)
	pea	-$3EA2(a5)
	pea	-$C98(a5)
	move.l	d5,-(a7)
	move.l	d7,-(a7)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_write_zoomed_rgba_span
	add.w	#$1C,a7
	bra.b	L422
L421
;	    gl_write_rgba_span( ctx, width, x, y, zspan, rgba, GL_BITM
	pea	$1A00.w
	pea	-$3EA2(a5)
	pea	-$C98(a5)
	move.l	d5,-(a7)
	move.l	d7,-(a7)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_write_rgba_span
	add.w	#$1C,a7
L422
	bra.b	L428
L423
;	 if (ctx->Pixel.MapColorFlag) 
	move.l	a2,a0
	add.l	#$B168,a0
	tst.b	$36(a0)
	beq.b	L425
L424
;	    gl_map_ci(ctx, width, ispan);
	pea	-$259A(a5)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_map_ci
	add.w	#$C,a7
L425
;	 if (zoom) 
	tst.b	-$C99(a5)
	beq.b	L427
L426
;	    gl_write_zoomed_index_span( ctx, width, x, y, zspan, ispan
	move.l	-$10(a5),-(a7)
	pea	-$259A(a5)
	pea	-$C98(a5)
	move.l	d5,-(a7)
	move.l	d7,-(a7)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_write_zoomed_index_span
	add.w	#$1C,a7
	bra.b	L428
L427
;	    gl_write_index_span( ctx, width, x, y, zspan, ispan, GL_BI
	pea	$1A00.w
	pea	-$259A(a5)
	pea	-$C98(a5)
	move.l	d5,-(a7)
	move.l	d7,-(a7)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_write_index_span
	add.w	#$1C,a7
L428
	addq.l	#1,d3
	addq.l	#1,d5
L429
	cmp.l	-$8(a5),d3
	blt	L401
L430
	movem.l	(a7)+,d2-d7/a2/a3
	unlk	a5
	rts

L389
	dc.b	'draw_index_pixels type',0

	SECTION "_draw_stencil_pixels:0",CODE


;static void draw_stencil_pixels( GLcontext *ctx, GLint x, GLint y,
_draw_stencil_pixels
L463	EQU	-$66A
	link	a5,#L463
	movem.l	d2-d7/a2/a3,-(a7)
	movem.l	$10(a5),d5/a3
	move.l	$8(a5),a2
L433
;   const GLint desty = y;
	move.l	d5,-$10(a5)
;   const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.Zoo
	moveq	#1,d0
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$38(a0),fp0
	fcmp.d	#$.3FF00000.00000000,fp0
	fbne.b	L436
L434
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$3C(a0),fp0
	fcmp.d	#$.3FF00000.00000000,fp0
	fbne.b	L436
L435
	moveq	#0,d0
L436
	move.b	d0,-$15(a5)
;   if (image->Type == GL_UNSIGNED_BYTE)
	move.l	a3,a0
	move.l	$14(a0),d0
	cmp.l	#$1401,d0
	bne.b	L438
L437
;      widthInBytes = image->Width;
	move.l	a3,a0
	move.l	(a0),d7
	bra.b	L439
L438
;      widthInBytes = (image->Width + 7) / 8;
	move.l	a3,a0
	move.l	(a0),d0
	addq.l	#7,d0
	divsl.l	#$8,d0
	move.l	d0,d7
L439
;   width = image->Width;
	move.l	a3,a0
	move.l	(a0),d2
;   height = image->Height;
	move.l	a3,a0
	move.l	4(a0),-$C(a5)
;   for (i=0;
	moveq	#0,d4
	bra	L461
L440
;      GLstencil *src = (GLstencil*)image->Data + i * widthInBy
	move.l	a3,a1
	move.l	d4,d0
	muls.l	d7,d0
	move.l	$18(a1),a0
	add.l	d0,a0
;      if (image->Type == GL_BITMAP) 
	move.l	a3,a1
	move.l	$14(a1),d0
	cmp.l	#$1A00,d0
	bne.b	L445
L441
;	 for (j = 0;
	moveq	#0,d0
	bra.b	L443
L442
;	    stencilCopy[j] = ( src[j >> 3] >> (7 - (j & 0x7)) ) & 1;
	move.l	d0,d1
	moveq	#3,d3
	asr.l	d3,d1
	move.b	0(a0,d1.l),d1
	and.l	#$FF,d1
	move.l	d0,d3
	and.l	#7,d3
	moveq	#7,d6
	sub.l	d3,d6
	asr.l	d6,d1
	and.l	#1,d1
	lea	-$65E(a5),a1
	move.b	d1,0(a1,d0.l)
	addq.l	#1,d0
L443
	cmp.l	d2,d0
	blt.b	L442
L444
;	 src = stencilCopy;
	lea	-$65E(a5),a0
L445
;      if (ctx->Pixel.IndexOffset || ctx->Pixel.IndexShift
	move.l	a2,a1
	add.l	#$B168,a1
	tst.l	$32(a1)
	bne.b	L448
L446
	move.l	a2,a1
	add.l	#$B168,a1
	tst.l	$2E(a1)
	bne.b	L448
L447
	move.l	a2,a1
	add.l	#$B168,a1
	tst.b	$37(a1)
	beq.b	L456
L448
;	 if (src != stencilCopy)
	lea	-$65E(a5),a1
	cmp.l	a1,a0
	beq.b	L450
L449
;MEMCPY( stencilCo
	move.l	d2,-(a7)
	move.l	a0,-(a7)
	pea	-$65E(a5)
	jsr	_q_memcpy
	add.w	#$C,a7
L450
;	 if (ctx->Pixel.IndexOffset || ctx->Pixel.IndexShift) 
	move.l	a2,a0
	add.l	#$B168,a0
	tst.l	$32(a0)
	bne.b	L452
L451
	move.l	a2,a0
	add.l	#$B168,a0
	tst.l	$2E(a0)
	beq.b	L453
L452
;	    gl_shift_and_offset_stencil( ctx, width, stencilCopy );
	pea	-$65E(a5)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_shift_and_offset_stencil
	add.w	#$C,a7
L453
;	 if (ctx->Pixel.MapStencilFlag) 
	move.l	a2,a0
	add.l	#$B168,a0
	tst.b	$37(a0)
	beq.b	L455
L454
;	    gl_map_stencil( ctx, width, stencilCopy );
	pea	-$65E(a5)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_map_stencil
	add.w	#$C,a7
L455
;	 stencilValues = stencilCopy;
	lea	-$65E(a5),a0
L456
;	 stencilValues = src;
L457
;      if (zoom) 
	tst.b	-$15(a5)
	beq.b	L459
L458
;	 gl_write_zoomed_stencil_span( ctx, (GLuint) width, x, y,
	move.l	-$10(a5),-(a7)
	move.l	a0,-(a7)
	move.l	d5,-(a7)
	move.l	$C(a5),-(a7)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_write_zoomed_stencil_span
	add.w	#$18,a7
	bra.b	L460
L459
;	 gl_write_stencil_span( ctx, (GLuint) width, x, y, stencilValues )
	move.l	a0,-(a7)
	move.l	d5,-(a7)
	move.l	$C(a5),-(a7)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_write_stencil_span
	add.w	#$14,a7
L460
	addq.l	#1,d4
	addq.l	#1,d5
L461
	cmp.l	-$C(a5),d4
	blt	L440
L462
	movem.l	(a7)+,d2-d7/a2/a3
	unlk	a5
	rts

	SECTION "_draw_depth_pixels:0",CODE


;static void draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,
_draw_depth_pixels
L537	EQU	-$57CE
	link	a5,#L537
	movem.l	d2-d7/a2/a3,-(a7)
	movem.l	$10(a5),d3/a3
	move.l	$C(a5),d5
	move.l	$8(a5),a2
L465
;   const GLint desty = y;
	move.l	d3,-$C(a5)
;   const GLboolean bias_or_scale = ctx->Pixel.DepthBias!=0.0 || c
	moveq	#1,d0
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$26(a0),fp0
	ftst.d	fp0
	fbne.b	L468
L466
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$2A(a0),fp0
	fcmp.d	#$.3FF00000.00000000,fp0
	fbne.b	L468
L467
	moveq	#0,d0
L468
	move.b	d0,-$320D(a5)
;   const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.Zoo
	moveq	#1,d0
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$38(a0),fp0
	fcmp.d	#$.3FF00000.00000000,fp0
	fbne.b	L471
L469
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$3C(a0),fp0
	fcmp.d	#$.3FF00000.00000000,fp0
	fbne.b	L471
L470
	moveq	#0,d0
L471
	move.b	d0,d7
;   width = image->Width;
	move.l	a3,a0
	move.l	(a0),d2
;   height = image->Height;
	move.l	a3,a0
	move.l	4(a0),-$8(a5)
;   if (ctx->Visual->RGBAflag) 
	move.l	$8F8(a2),a0
	tst.b	(a0)
	beq	L476
L472
;      GLint r = (GLint) (ctx->Current.RasterColor[0] * 255.0F);
	fmove.s	$2262(a2),fp0
	fmul.s	#$.437F0000,fp0
	fmove.l	fp0,d0
	move.l	d0,-$3212(a5)
;      GLint g = (GLint) (ctx->Current.RasterColor[1] * 255.0F);
	lea	$2262(a2),a0
	fmove.s	4(a0),fp0
	fmul.s	#$.437F0000,fp0
	fmove.l	fp0,d0
	move.l	d0,-$3216(a5)
;      GLint b = (GLint) (ctx->Current.RasterColor[2] * 255.0F);
	lea	$2262(a2),a0
	fmove.s	$8(a0),fp0
	fmul.s	#$.437F0000,fp0
	fmove.l	fp0,d0
	move.l	d0,-$321A(a5)
;      GLint a = (GLint) (ctx->Current.RasterColor[3] * 255.0F);
	lea	$2262(a2),a0
	fmove.s	$C(a0),fp0
	fmul.s	#$.437F0000,fp0
	fmove.l	fp0,d4
;      for (i=0;
	moveq	#0,d0
	bra.b	L474
L473
;	 rgba[i][RCOMP] = r;
	lea	-$190C(a5),a0
	move.b	-$320F(a5),0(a0,d0.l*4)
;	 rgba[i][GCOMP] = g;
	lea	-$190C(a5),a0
	lea	0(a0,d0.l*4),a0
	move.b	-$3213(a5),1(a0)
;	 rgba[i][BCOMP] = b;
	lea	-$190C(a5),a0
	lea	0(a0,d0.l*4),a0
	move.b	-$3217(a5),2(a0)
;	 rgba[i][ACOMP] = a;
	lea	-$190C(a5),a0
	lea	0(a0,d0.l*4),a0
	move.b	d4,3(a0)
	addq.l	#1,d0
L474
	cmp.l	d2,d0
	blt.b	L473
L475
	bra.b	L479
L476
;      for (i=0;
	moveq	#0,d0
	bra.b	L478
L477
;	 ispan[i] = ctx->Current.RasterIndex;
	lea	-$320C(a5),a0
	move.l	$2272(a2),0(a0,d0.l*4)
	addq.l	#1,d0
L478
	cmp.l	d2,d0
	blt.b	L477
L479
;   if (image->Type==GL_UNSIGNED_SHORT && sizeof(GLdepth)==sizeof(
	move.l	a3,a0
	move.l	$14(a0),d0
	cmp.l	#$1403,d0
	bne.b	L487
L480
	tst.b	-$320D(a5)
	bne.b	L487
L481
	tst.b	d7
	bne.b	L487
L482
	move.l	$8F8(a2),a0
	tst.b	(a0)
	beq.b	L487
L483
;      for (j=0;
	moveq	#0,d4
	bra.b	L485
L484
;	 GLdepth *zptr = (GLdepth *) image->Data + j * width;
	move.l	a3,a1
	move.l	d4,d0
	muls.l	d2,d0
	move.l	$18(a1),a0
	lea	0(a0,d0.l*2),a1
;	 gl_write_rgba_span( ctx, width, x, y, zptr, rgba, GL_BITMAP );
	pea	$1A00.w
	pea	-$190C(a5)
	move.l	a1,-(a7)
	move.l	d3,-(a7)
	move.l	d5,-(a7)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_write_rgba_span
	add.w	#$1C,a7
	addq.l	#1,d4
	addq.l	#1,d3
L485
	cmp.l	-$8(a5),d4
	blt.b	L484
L486
	bra	L536
L487
;   else if (image->Type==GL_UNSIGNED_INT && sizeof(GLdepth)=
	move.l	a3,a0
	move.l	$14(a0),d0
	cmp.l	#$1405,d0
	bne.b	L497
L488
	bra.b	L497
L489
;	 max = max << 1;
	moveq	#1,d1
	asl.l	d1,d0
;	 shift++;
	addq.l	#1,d4
	move.l	d0,d1
	and.l	#$80000000,d1
	beq.b	L489
L490
;      for (j=0;
	moveq	#0,d7
	bra.b	L495
L491
;	 GLuint *zptr = (GLuint *) image->Data + j * width;
	move.l	a3,a1
	move.l	d7,d0
	muls.l	d2,d0
	move.l	$18(a1),a0
	lea	0(a0,d0.l*4),a1
;	 for (i=0;
	moveq	#0,d0
	bra.b	L493
L492
;	    zspan[i] = zptr[i] >> shift;
	move.l	0(a1,d0.l*4),d1
	lsr.l	d4,d1
	lea	-$3EB2(a5),a0
	move.w	d1,0(a0,d0.l*2)
	addq.l	#1,d0
L493
	cmp.l	d2,d0
	blt.b	L492
L494
;	 gl_write_rgba_span( ctx, width, x, y, zspan, rgba, GL_BITMAP );
	pea	$1A00.w
	pea	-$190C(a5)
	pea	-$3EB2(a5)
	move.l	d3,-(a7)
	move.l	d5,-(a7)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_write_rgba_span
	add.w	#$1C,a7
	move.l	d7,d0
	addq.l	#1,d0
	move.l	d0,d7
	addq.l	#1,d3
L495
	move.l	d7,d0
	cmp.l	-$8(a5),d0
	blt.b	L491
L496
	bra	L536
L497
;      for (i=0;
	moveq	#0,d4
	bra	L535
L498
;	 switch (image->Type)
	move.l	a3,a0
	move.l	$14(a0),d0
	cmp.l	#$1405,d0
	beq.b	L503
	bgt.b	L538
	cmp.l	#$1403,d0
	beq.b	L499
	bra	L511
L538
	cmp.l	#$1406,d0
	beq.b	L507
	bra	L511
;	    
L499
;		  GLushort *src = (GLushort *) image->Data + i * width;
	move.l	a3,a1
	move.l	d4,d0
	muls.l	d2,d0
	move.l	$18(a1),a0
	lea	0(a0,d0.l*2),a0
;		  for (j=0;
	moveq	#0,d0
	bra.b	L501
L500
;		     depth[j] = USHORT_TO_FLOAT( *src++ );
	moveq	#0,d1
	move.w	(a0)+,d1
	fmove.l	d1,fp0
	fmul.s	#$.37800080,fp0
	lea	-$4B32(a5),a1
	fmove.s	fp0,0(a1,d0.l*4)
	addq.l	#1,d0
L501
	cmp.l	d2,d0
	blt.b	L500
L502
;	       
	bra.b	L512
L503
;		  GLuint *src = (GLuint *) image->Data + i * width;
	move.l	a3,a1
	move.l	d4,d0
	muls.l	d2,d0
	move.l	$18(a1),a0
	lea	0(a0,d0.l*4),a0
;		  for (j=0;
	moveq	#0,d0
	bra.b	L505
L504
;		     depth[j] = UINT_TO_FLOAT( *src++ );
	fmove.l	(a0)+,fp0
	fmul.s	#$.2F800000,fp0
	lea	-$4B32(a5),a1
	fmove.s	fp0,0(a1,d0.l*4)
	addq.l	#1,d0
L505
	cmp.l	d2,d0
	blt.b	L504
L506
;	       
	bra.b	L512
L507
;		  GLfloat *src = (GLfloat *) image->Data + i * width;
	move.l	a3,a1
	move.l	d4,d0
	muls.l	d2,d0
	move.l	$18(a1),a0
	lea	0(a0,d0.l*4),a0
;		  for (j=0;
	moveq	#0,d0
	bra.b	L509
L508
;		     depth[j] = *src++;
	lea	-$4B32(a5),a1
	move.l	(a0)+,0(a1,d0.l*4)
	addq.l	#1,d0
L509
	cmp.l	d2,d0
	blt.b	L508
L510
;	       
	bra.b	L512
L511
;	       gl_problem(ctx, "Bad type in draw_depth_pixels");
	move.l	#L464,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_problem
	addq.w	#$8,a7
	movem.l	(a7)+,d2-d7/a2/a3
	unlk	a5
	rts
L512
;	       return;
;	 if (ctx->Pixel.DepthScale!=1.0 || ctx->Pixel.DepthBias!=0.0) 
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$2A(a0),fp0
	fcmp.d	#$.3FF00000.00000000,fp0
	fbne.b	L514
L513
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$26(a0),fp0
	ftst.d	fp0
	fbeq.b	L517
L514
;	    for (j=0;
	moveq	#0,d0
	bra.b	L516
L515
;	       depth[j] = depth[j] * ctx->Pixel.DepthScale + ctx->P
	lea	-$4B32(a5),a0
	fmove.s	0(a0,d0.l*4),fp0
	move.l	a2,a0
	add.l	#$B168,a0
	fmul.s	$2A(a0),fp0
	move.l	a2,a0
	add.l	#$B168,a0
	fadd.s	$26(a0),fp0
	lea	-$4B32(a5),a0
	fmove.s	fp0,0(a0,d0.l*4)
	addq.l	#1,d0
L516
	cmp.l	d2,d0
	blt.b	L515
L517
;	 for (j=0;
	moveq	#0,d0
	bra.b	L525
L518
;	    zspan[j] = (GLdepth) (CLAMP( depth[j], 0.0F, 1.0F ) * DEPT
	lea	-$4B32(a5),a0
	fmove.s	0(a0,d0.l*4),fp0
	fcmp.s	#$.00000000,fp0
	fboge.b	L520
L519
	fmove.s	#$.00000000,fp0
	bra.b	L524
L520
	lea	-$4B32(a5),a0
	fmove.s	0(a0,d0.l*4),fp0
	fcmp.s	#$.3F800000,fp0
	fbole.b	L522
L521
	fmove.s	#$.3F800000,fp0
	bra.b	L523
L522
	lea	-$4B32(a5),a0
	fmove.s	0(a0,d0.l*4),fp0
L523
L524
	fmul.s	#$.477FFF00,fp0
	fmove.l	fp0,d1
	lea	-$57B2(a5),a0
	move.w	d1,0(a0,d0.l*2)
	addq.l	#1,d0
L525
	cmp.l	d2,d0
	blt.b	L518
L526
;	 if (ctx->Visual->RGBAflag) 
	move.l	$8F8(a2),a0
	tst.b	(a0)
	beq.b	L531
L527
;	    if (zoom) 
	tst.b	d7
	beq.b	L529
L528
;	       gl_write_zoomed_rgba_span( ctx, width, x, y, zspan,
	move.l	-$C(a5),-(a7)
	pea	-$190C(a5)
	pea	-$57B2(a5)
	move.l	d3,-(a7)
	move.l	d5,-(a7)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_write_zoomed_rgba_span
	add.w	#$1C,a7
	bra.b	L530
L529
;	       gl_write_rgba_span( ctx, width, x, y, zspan, rgba, G
	pea	$1A00.w
	pea	-$190C(a5)
	pea	-$57B2(a5)
	move.l	d3,-(a7)
	move.l	d5,-(a7)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_write_rgba_span
	add.w	#$1C,a7
L530
	bra.b	L534
L531
;	    if (zoom) 
	tst.b	d7
	beq.b	L533
L532
;	       gl_write_zoomed_index_span( ctx, width, x, y, zspan,
	pea	$1A00.w
	pea	-$320C(a5)
	pea	-$57B2(a5)
	move.l	d3,-(a7)
	move.l	d5,-(a7)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_write_zoomed_index_span
	add.w	#$1C,a7
	bra.b	L534
L533
;	       gl_write_index_span( ctx, width, x, y, zspan, ispan,
	pea	$1A00.w
	pea	-$320C(a5)
	pea	-$57B2(a5)
	move.l	d3,-(a7)
	move.l	d5,-(a7)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_write_index_span
	add.w	#$1C,a7
L534
	addq.l	#1,d4
	addq.l	#1,d3
L535
	cmp.l	-$8(a5),d4
	blt	L498
L536
	movem.l	(a7)+,d2-d7/a2/a3
	unlk	a5
	rts

L464
	dc.b	'Bad type in draw_depth_pixels',0

	SECTION "_NoUnpack:1",DATA

_NoUnpack
	dc.l	1,0,0,0,0,0
	dc.b	0,0

	SECTION "_draw_rgba_pixels:0",CODE


;static void draw_rgba_pixels( GLcontext *ctx, GLint x, GLint y,
_draw_rgba_pixels
L625	EQU	-$89BA
	link	a5,#L625
	movem.l	d2-d7/a2/a3,-(a7)
	move.l	$8(a5),a2
	move.l	$14(a5),a3
L542
;   const GLint desty = y;
	move.l	$10(a5),-$18(a5)
;   const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.Zoo
	moveq	#1,d0
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$38(a0),fp0
	fcmp.d	#$.3FF00000.00000000,fp0
	fbne.b	L545
L543
	move.l	a2,a0
	add.l	#$B168,a0
	fmove.s	$3C(a0),fp0
	fcmp.d	#$.3FF00000.00000000,fp0
	fbne.b	L545
L544
	moveq	#0,d0
L545
	move.b	d0,-$1A(a5)
;   if (gl_direct_DrawPixels(ctx, &NoUnpack, image->Width, image->
	move.l	a3,a1
	move.l	$18(a1),-(a7)
	move.l	a3,a0
	move.l	$14(a0),-(a7)
	move.l	a3,a0
	move.l	$10(a0),-(a7)
	move.l	a3,a0
	move.l	4(a0),-(a7)
	move.l	a3,a0
	move.l	(a0),-(a7)
	pea	_NoUnpack(a6)
	move.l	a2,-(a7)
	jsr	_gl_direct_DrawPixels
	add.w	#$1C,a7
	tst.b	d0
	beq.b	L547
L546
	movem.l	(a7)+,d2-d7/a2/a3
	unlk	a5
	rts
L547
;   width = image->Width;
	move.l	a3,a0
	move.l	(a0),d2
;   height = image->Height;
	move.l	a3,a0
	move.l	4(a0),-$10(a5)
;   if (ctx->Depth.Test) 
	tst.b	$22A4(a2)
	beq.b	L551
L548
;      GLdepth z = (GLdepth) (ctx->Current.RasterPos[2] * DEPTH
	lea	$224E(a2),a0
	fmove.s	$8(a0),fp0
	fmul.s	#$.477FFF00,fp0
	fmove.l	fp0,d0
;      for (i=0;
	clr.l	-$14(a5)
	bra.b	L550
L549
;	 zspan[i] = z;
	lea	-$CA0(a5),a0
	move.l	-$14(a5),d1
	move.w	d0,0(a0,d1.l*2)
	addq.l	#1,-$14(a5)
L550
	move.l	-$14(a5),d1
	cmp.l	d2,d1
	blt.b	L549
L551
;   if (ctx->RasterMask==0 && !zoom && x>=0 && y>=0
	move.l	a2,a0
	add.l	#$E974,a0
	tst.l	(a0)
	bne.b	L558
L552
	tst.b	-$1A(a5)
	bne.b	L558
L553
	tst.l	$C(a5)
	bmi.b	L558
L554
	tst.l	$10(a5)
	bmi.b	L558
L555
	move.l	$C(a5),d1
	add.l	d2,d1
	move.l	$8FC(a2),a0
	cmp.l	4(a0),d1
	bgt.b	L558
L556
	move.l	$10(a5),d1
	add.l	-$10(a5),d1
	move.l	$8FC(a2),a0
	cmp.l	$8(a0),d1
	bgt.b	L558
L557
;      quickDraw = GL_TRUE;
	move.b	#1,-$19(a5)
	bra.b	L559
L558
;      quickDraw = GL_FALSE;
	clr.b	-$19(a5)
L559
;      r_flag = g_flag = b_flag = a_flag = l_flag = GL_FALSE;
	moveq	#0,d3
	move.b	d3,-$1B(a5)
	move.b	d3,d5
	move.b	d3,d4
	move.b	d3,d7
;      switch (image->Format)
	move.l	a3,a0
	move.l	$10(a0),d0
	sub.l	#$1903,d0
	cmp.l	#7,d0
	bhi	L568
	move.l	L626(pc,d0.l*4),a0
	jmp	(a0)
L626
	dc.l	L560
	dc.l	L561
	dc.l	L562
	dc.l	L563
	dc.l	L564
	dc.l	L567
	dc.l	L565
	dc.l	L566
;	 
L560
;	    r_flag = GL_TRUE;
	moveq	#1,d7
;	    components = 1;
	move.l	#1,-$20(a5)
;	    
	bra	L569
L561
;	    g_flag = GL_TRUE;
	moveq	#1,d3
;	    components = 1;
	move.l	#1,-$20(a5)
;	    
	bra.b	L569
L562
;	    b_flag = GL_TRUE;
	moveq	#1,d4
;	    components = 1;
	move.l	#1,-$20(a5)
;	    
	bra.b	L569
L563
;	    a_flag = GL_TRUE;
	moveq	#1,d5
;	    components = 1;
	move.l	#1,-$20(a5)
;	    
	bra.b	L569
L564
;	    r_flag = g_flag = b_flag = GL_TRUE;
	moveq	#1,d7
	move.b	d7,d4
	move.b	d7,d3
;	    components = 3;
	move.l	#3,-$20(a5)
;	    
	bra.b	L569
L565
;	    l_flag = GL_TRUE;
	move.b	#1,-$1B(a5)
;	    components = 1;
	move.l	#1,-$20(a5)
;	    
	bra.b	L569
L566
;	    l_flag = a_flag = GL_TRUE;
	move.b	#1,-$1B(a5)
	move.b	-$1B(a5),d5
;	    components = 2;
	move.l	#2,-$20(a5)
;	    
	bra.b	L569
L567
;	    r_flag = g_flag = b_flag = a_flag = GL_TRUE;
	moveq	#1,d7
	move.b	d7,d5
	move.b	d7,d4
	move.b	d7,d3
;	    components = 4;
	move.l	#4,-$20(a5)
;	    
	bra.b	L569
L568
;	    gl_problem(ctx, "Bad type in draw_rgba_pixels");
	move.l	#L540,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_problem
	addq.w	#$8,a7
;	    goto 
	bra	L624
L569
;      for (i=0;
	clr.l	-$14(a5)
	bra	L623
L570
;	 switch (image->Type)
	move.l	a3,a0
	move.l	$14(a0),d0
	cmp.l	#$1401,d0
	beq.b	L571
	cmp.l	#$1406,d0
	beq	L590
	bra	L609
;	    
L571
;		  GLubyte *src = (GLubyte *) image->Data + i * width * compone
	move.l	a3,a1
	move.l	-$14(a5),d0
	muls.l	d2,d0
	mulu.l	-$20(a5),d0
	move.l	$18(a1),a0
	add.l	d0,a0
;		  for (j=0;
	moveq	#0,d0
	bra	L588
L572
;		     if (l_flag) 
	tst.b	-$1B(a5)
	beq.b	L574
L573
;			rf[j] = gf[j] = bf[j] = UBYTE_TO_FLOAT(*src++);
	moveq	#0,d1
	move.b	(a0)+,d1
	fmove.l	d1,fp0
	fmul.s	#$.3B808080,fp0
	lea	-$57A0(a5),a1
	fmove.s	fp0,0(a1,d0.l*4)
	lea	-$3EA0(a5),a1
	fmove.s	fp0,0(a1,d0.l*4)
	lea	-$25A0(a5),a1
	fmove.s	fp0,0(a1,d0.l*4)
	bra	L584
L574
;			rf[j] = r_flag ? UBYTE_TO_FLOAT(*src++) : 0.0;
	tst.b	d7
	beq.b	L576
L575
	moveq	#0,d1
	move.b	(a0)+,d1
	fmove.l	d1,fp0
	fmul.s	#$.3B808080,fp0
	bra.b	L577
L576
	fmove.d	#$.00000000.00000000,fp0
L577
	lea	-$25A0(a5),a1
	fmove.s	fp0,0(a1,d0.l*4)
;			gf[j] = g_flag ? UBYTE_TO_FLOAT(*src++) : 0.0;
	tst.b	d3
	beq.b	L579
L578
	moveq	#0,d1
	move.b	(a0)+,d1
	fmove.l	d1,fp0
	fmul.s	#$.3B808080,fp0
	bra.b	L580
L579
	fmove.d	#$.00000000.00000000,fp0
L580
	lea	-$3EA0(a5),a1
	fmove.s	fp0,0(a1,d0.l*4)
;			bf[j] = b_flag ? UBYTE_TO_FLOAT(*src++) : 0.0;
	tst.b	d4
	beq.b	L582
L581
	moveq	#0,d1
	move.b	(a0)+,d1
	fmove.l	d1,fp0
	fmul.s	#$.3B808080,fp0
	bra.b	L583
L582
	fmove.d	#$.00000000.00000000,fp0
L583
	lea	-$57A0(a5),a1
	fmove.s	fp0,0(a1,d0.l*4)
L584
;		     af[j] = a_flag ? UBYTE_TO_FLOAT(*src++) : 1.0;
	tst.b	d5
	beq.b	L586
L585
	moveq	#0,d1
	move.b	(a0)+,d1
	fmove.l	d1,fp0
	fmul.s	#$.3B808080,fp0
	bra.b	L587
L586
	fmove.d	#$.3FF00000.00000000,fp0
L587
	lea	-$70A0(a5),a1
	fmove.s	fp0,0(a1,d0.l*4)
	addq.l	#1,d0
L588
	cmp.l	d2,d0
	blt	L572
L589
;	       
	bra	L610
L590
;		  GLfloat *src = (GLfloat *) image->Data + i * width * compone
	move.l	a3,a1
	move.l	-$14(a5),d0
	muls.l	d2,d0
	mulu.l	-$20(a5),d0
	move.l	$18(a1),a0
	lea	0(a0,d0.l*4),a0
;		  for (j=0;
	moveq	#0,d0
	bra	L607
L591
;		     if (l_flag) 
	tst.b	-$1B(a5)
	beq.b	L593
L592
;			rf[j] = gf[j] = bf[j] = *src++;
	fmove.s	(a0)+,fp0
	lea	-$57A0(a5),a1
	fmove.s	fp0,0(a1,d0.l*4)
	lea	-$3EA0(a5),a1
	fmove.s	fp0,0(a1,d0.l*4)
	lea	-$25A0(a5),a1
	fmove.s	fp0,0(a1,d0.l*4)
	bra.b	L603
L593
;			rf[j] = r_flag ? *src++ : 0.0;
	tst.b	d7
	beq.b	L595
L594
	fmove.s	(a0)+,fp0
	bra.b	L596
L595
	fmove.d	#$.00000000.00000000,fp0
L596
	lea	-$25A0(a5),a1
	fmove.s	fp0,0(a1,d0.l*4)
;			gf[j] = g_flag ? *src++ : 0.0;
	tst.b	d3
	beq.b	L598
L597
	fmove.s	(a0)+,fp0
	bra.b	L599
L598
	fmove.d	#$.00000000.00000000,fp0
L599
	lea	-$3EA0(a5),a1
	fmove.s	fp0,0(a1,d0.l*4)
;			bf[j] = b_flag ? *src++ : 0.0;
	tst.b	d4
	beq.b	L601
L600
	fmove.s	(a0)+,fp0
	bra.b	L602
L601
	fmove.d	#$.00000000.00000000,fp0
L602
	lea	-$57A0(a5),a1
	fmove.s	fp0,0(a1,d0.l*4)
L603
;		     af[j] = a_flag ? *src++ : 1.0;
	tst.b	d5
	beq.b	L605
L604
	fmove.s	(a0)+,fp0
	bra.b	L606
L605
	fmove.d	#$.3FF00000.00000000,fp0
L606
	lea	-$70A0(a5),a1
	fmove.s	fp0,0(a1,d0.l*4)
	addq.l	#1,d0
L607
	cmp.l	d2,d0
	blt	L591
L608
;	       
	bra.b	L610
L609
;	       gl_problem( ctx, "draw_rgba_pixels type" );
	move.l	#L541,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_problem
	addq.w	#$8,a7
;	       goto 
	bra	L624
L610
;	 if (ctx->Pixel.ScaleOrBiasRGBA) 
	move.l	a2,a0
	add.l	#$B168,a0
	tst.b	$24(a0)
	beq.b	L612
L611
;	    gl_scale_and_bias_color(ctx, width, rf, gf, bf, af);
	pea	-$70A0(a5)
	pea	-$57A0(a5)
	pea	-$3EA0(a5)
	pea	-$25A0(a5)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_scale_and_bias_color
	add.w	#$18,a7
L612
;	 if (ctx->Pixel.MapColorFlag) 
	move.l	a2,a0
	add.l	#$B168,a0
	tst.b	$36(a0)
	beq.b	L614
L613
;	    gl_map_color(ctx, width, rf, gf, bf, af);
	pea	-$70A0(a5)
	pea	-$57A0(a5)
	pea	-$3EA0(a5)
	pea	-$25A0(a5)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_map_color
	add.w	#$18,a7
L614
;	 for (j=0;
	moveq	#0,d0
	bra	L616
L615
;	    rgba[j][RCOMP] = (GLint) (rf[j] * 255.0F);
	lea	-$25A0(a5),a0
	fmove.s	0(a0,d0.l*4),fp0
	fmul.s	#$.437F0000,fp0
	fmove.l	fp0,d1
	move.l	a5,a0
	sub.l	#$89A0,a0
	move.b	d1,0(a0,d0.l*4)
;	    rgba[j][GCOMP] = (GLint) (gf[j] * 255.0F);
	lea	-$3EA0(a5),a0
	fmove.s	0(a0,d0.l*4),fp0
	fmul.s	#$.437F0000,fp0
	fmove.l	fp0,d1
	move.l	a5,a0
	sub.l	#$89A0,a0
	lea	0(a0,d0.l*4),a0
	move.b	d1,1(a0)
;	    rgba[j][BCOMP] = (GLint) (bf[j] * 255.0F);
	lea	-$57A0(a5),a0
	fmove.s	0(a0,d0.l*4),fp0
	fmul.s	#$.437F0000,fp0
	fmove.l	fp0,d1
	move.l	a5,a0
	sub.l	#$89A0,a0
	lea	0(a0,d0.l*4),a0
	move.b	d1,2(a0)
;	    rgba[j][ACOMP] = (GLint) (af[j] * 255.0F);
	lea	-$70A0(a5),a0
	fmove.s	0(a0,d0.l*4),fp0
	fmul.s	#$.437F0000,fp0
	fmove.l	fp0,d1
	move.l	a5,a0
	sub.l	#$89A0,a0
	lea	0(a0,d0.l*4),a0
	move.b	d1,3(a0)
	addq.l	#1,d0
L616
	cmp.l	d2,d0
	blt	L615
L617
;	 if (quickDraw) 
	tst.b	-$19(a5)
	beq.b	L619
L618
;	    (*ctx->Driver.WriteRGBASpan)( ctx, width, x, y, (CONST GLu
	clr.l	-(a7)
	move.l	a5,a0
	sub.l	#$89A0,a0
	pea	(a0)
	move.l	$10(a5),-(a7)
	move.l	$C(a5),-(a7)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	move.l	$924(a2),a0
	jsr	(a0)
	add.w	#$18,a7
	bra.b	L622
L619
;	 else if (zoom) 
	tst.b	-$1A(a5)
	beq.b	L621
L620
;	    gl_write_zoomed_rgba_span( ctx, width, x, y, zspan, (CONST
	move.l	-$18(a5),-(a7)
	move.l	a5,a0
	sub.l	#$89A0,a0
	pea	(a0)
	pea	-$CA0(a5)
	move.l	$10(a5),-(a7)
	move.l	$C(a5),-(a7)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_write_zoomed_rgba_span
	add.w	#$1C,a7
	bra.b	L622
L621
;	    gl_write_rgba_span( ctx, (GLuint) width, x, y, zspan, rgba
	pea	$1A00.w
	move.l	a5,a0
	sub.l	#$89A0,a0
	pea	(a0)
	pea	-$CA0(a5)
	move.l	$10(a5),-(a7)
	move.l	$C(a5),-(a7)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_write_rgba_span
	add.w	#$1C,a7
L622
	addq.l	#1,-$14(a5)
	addq.l	#1,$10(a5)
L623
	move.l	-$14(a5),d0
	cmp.l	-$10(a5),d0
	blt	L570
L624
;cleanup
	movem.l	(a7)+,d2-d7/a2/a3
	unlk	a5
	rts

L540
	dc.b	'Bad type in draw_rgba_pixels',0
L541
	dc.b	'draw_rgba_pixels type',0

	SECTION "_gl_DrawPixels:0",CODE


;void gl_DrawPixels( GLcontext* ctx, struct gl_image *image )
	XDEF	_gl_DrawPixels
_gl_DrawPixels
L652	EQU	-$24
	link	a5,#L652
	movem.l	d2/a2/a3,-(a7)
	fmovem.x fp2,-(a7)
	movem.l	$8(a5),a2/a3
L628
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a2,a0
	add.l	#$E968,a0
	move.l	(a0),d0
	cmp.l	#$1A00,d0
	beq.b	L630
L629
;      gl_error( ctx, GL_INVALID_OPERATION, "glDrawPixels" );
	move.l	#L627,-(a7)
	pea	$502.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts
L630
;   if (gl_image_error_test( ctx, image, "glDrawPixels" ))
	move.l	#L627,-(a7)
	move.l	a3,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_image_error_test
	add.w	#$C,a7
	tst.b	d0
	beq.b	L632
L631
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts
L632
;   if (ctx->RenderMode==GL_RENDER) 
	move.l	a2,a0
	add.l	#$E964,a0
	move.l	(a0),d0
	cmp.l	#$1C00,d0
	bne	L642
L633
;      if (!ctx->Current.RasterPosValid) 
	tst.b	$229A(a2)
	bne.b	L635
L634
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts
L635
;      x = (GLint) (ctx->Current.RasterPos[0] + 0.5F);
	fmove.s	$224E(a2),fp0
	fadd.s	#$.3F000000,fp0
	fmove.l	fp0,d1
;      y = (GLint) (ctx->Current.RasterPos[1] + 0.5F);
	lea	$224E(a2),a0
	fmove.s	4(a0),fp0
	fadd.s	#$.3F000000,fp0
	fmove.l	fp0,d0
;      switch (image->Format)
	move.l	a3,a0
	move.l	$10(a0),d2
	sub.l	#$1900,d2
	cmp.l	#$A,d2
	bhi	L640
	move.l	L653(pc,d2.l*4),a0
	jmp	(a0)
L653
	dc.l	L636
	dc.l	L637
	dc.l	L638
	dc.l	L639
	dc.l	L639
	dc.l	L639
	dc.l	L639
	dc.l	L639
	dc.l	L639
	dc.l	L639
	dc.l	L639
;	 
L636
;	    draw_index_pixels( ctx, x, y, image );
	move.l	a3,-(a7)
	move.l	d0,-(a7)
	move.l	d1,-(a7)
	move.l	a2,-(a7)
	jsr	_draw_index_pixels
	add.w	#$10,a7
;	    
	bra.b	L641
L637
;	    draw_stencil_pixels( ctx, x, y, image );
	move.l	a3,-(a7)
	move.l	d0,-(a7)
	move.l	d1,-(a7)
	move.l	a2,-(a7)
	jsr	_draw_stencil_pixels
	add.w	#$10,a7
;	    
	bra.b	L641
L638
;	    draw_depth_pixels( ctx, x, y, image );
	move.l	a3,-(a7)
	move.l	d0,-(a7)
	move.l	d1,-(a7)
	move.l	a2,-(a7)
	jsr	_draw_depth_pixels
	add.w	#$10,a7
;	    
	bra.b	L641
L639
;	    draw_rgba_pixels( ctx, x, y, image );
	move.l	a3,-(a7)
	move.l	d0,-(a7)
	move.l	d1,-(a7)
	move.l	a2,-(a7)
	jsr	_draw_rgba_pixels
	add.w	#$10,a7
;	    
	bra.b	L641
L640
;	    gl_error( ctx, GL_INVALID_ENUM, "glDrawPixels" );
	move.l	#L627,-(a7)
	pea	$500.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts
L641
;	    return;
	bra	L651
L642
;   else if (ctx->RenderMode==GL_FEEDBACK) 
	move.l	a2,a0
	add.l	#$E964,a0
	move.l	(a0),d0
	cmp.l	#$1C01,d0
	bne	L648
L643
;      if (ctx->Current.RasterPosValid) 
	tst.b	$229A(a2)
	beq	L647
L644
;	 color[0] = (GLfloat) ctx->Current.ByteColor[0] / 255.0;
	moveq	#0,d0
	move.b	$2216(a2),d0
	fmove.l	d0,fp0
	fdiv.d	#$.406FE000.00000000,fp0
	fmove.s	fp0,-$10(a5)
;	 color[1] = (GLfloat) ctx->Current.ByteColor[1] / 255.0;
	lea	$2216(a2),a0
	moveq	#0,d0
	move.b	1(a0),d0
	fmove.l	d0,fp0
	fdiv.d	#$.406FE000.00000000,fp0
	lea	-$10(a5),a0
	fmove.s	fp0,4(a0)
;	 color[2] = (GLfloat) ctx->Current.ByteColor[2] / 255.0;
	lea	$2216(a2),a0
	moveq	#0,d0
	move.b	2(a0),d0
	fmove.l	d0,fp0
	fdiv.d	#$.406FE000.00000000,fp0
	lea	-$10(a5),a0
	fmove.s	fp0,$8(a0)
;	 color[3] = (GLfloat) ctx->Current.ByteColor[3] / 255.0;
	lea	$2216(a2),a0
	moveq	#0,d0
	move.b	3(a0),d0
	fmove.l	d0,fp0
	fdiv.d	#$.406FE000.00000000,fp0
	lea	-$10(a5),a0
	fmove.s	fp0,$C(a0)
;	 invq = 1.0F / ctx->Current.TexCoord[3];
	move.l	$222A(a2),a0
	fmove.s	#$.3F800000,fp1
	fdiv.s	$C(a0),fp1
;	 texcoord[0] = ctx->Current.TexCoord[0] * invq;
	move.l	$222A(a2),a0
	fmove.s	(a0),fp0
	fmul.x	fp1,fp0
	fmove.s	fp0,-$20(a5)
;	 texcoord[1] = ctx->Current.TexCoord[1] * invq;
	move.l	$222A(a2),a0
	fmove.s	4(a0),fp0
	fmul.x	fp1,fp0
	lea	-$20(a5),a0
	fmove.s	fp0,4(a0)
;	 texcoord[2] = ctx->Current.TexCoord[2] * invq;
	move.l	$222A(a2),a0
	fmove.s	$8(a0),fp0
	fmul.x	fp1,fp0
	lea	-$20(a5),a0
	fmove.s	fp0,$8(a0)
;	 texcoord[3] = ctx->Current.TexCoord[3];
	move.l	$222A(a2),a0
	fmove.s	$C(a0),fp0
	lea	-$20(a5),a0
	fmove.s	fp0,$C(a0)
;_TOKEN( ctx, (GLf
	move.l	a2,a0
	add.l	#$E828,a0
	move.l	$10(a0),d1
	move.l	a2,a0
	add.l	#$E828,a0
	cmp.l	$C(a0),d1
	bhs.b	L646
L645
;_TOKEN( ctx, (GLf
	move.l	a2,a0
	add.l	#$E828,a0
	move.l	$8(a0),a1
	move.l	a2,a0
	add.l	#$E828,a0
	move.l	$10(a0),d0
	move.l	#$44E0A000,0(a1,d0.l*4)
L646
;_TOKEN( ctx, (GLf
	move.l	a2,a0
	add.l	#$E838,a0
	move.l	(a0),d0
	addq.l	#1,d0
	move.l	a2,a0
	add.l	#$E838,a0
	move.l	d0,(a0)
;	 gl_feedback_vertex( ctx,
	pea	-$20(a5)
	fmove.l	$221A(a2),fp0
	fmove.s	fp0,-(a7)
	pea	-$10(a5)
	lea	$224E(a2),a0
	move.l	$C(a0),-(a7)
	lea	$224E(a2),a0
	move.l	$8(a0),-(a7)
	lea	$224E(a2),a0
	move.l	4(a0),-(a7)
	move.l	$224E(a2),-(a7)
	move.l	a2,-(a7)
	jsr	_gl_feedback_vertex
	add.w	#$20,a7
L647
	bra.b	L651
L648
;   else if (ctx->RenderMode==GL_SELECT) 
	move.l	a2,a0
	add.l	#$E964,a0
	move.l	(a0),d0
	cmp.l	#$1C02,d0
	bne.b	L651
L649
;      if (ctx->Current.RasterPosValid) 
	tst.b	$229A(a2)
	beq.b	L651
L650
;	 gl_update_hitflag( ctx, ctx->Current.RasterPos[2] );
	lea	$224E(a2),a0
	move.l	$8(a0),-(a7)
	move.l	a2,-(a7)
	jsr	_gl_update_hitflag
	addq.w	#$8,a7
L651
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2/a2/a3
	unlk	a5
	rts

L627
	dc.b	'glDrawPixels',0

	END
