		
@drawc:
@:
@:	@***
@:	stmfd	sp!,{r0-r11,lr}
@:	
@:	ldr	r2,=font_tab
@:	ldrb	r2,[r2,r1]
@:	
@:	mov	r3,r2,lsr #4	@Start
@:	and	r2,r2,#0xf	@End
@:	sub	r2,r2,r3	@End-Start
@:	
@:	ldr	r0,=font_16
@:	add	r0,r0,r1,lsl #5	@*32
@:	
@:	
@:	mov	r3,r3,lsl #2	@r3*4
@:	
@:	mov	r6,r12			@X-Verschiebung
@:	add	r12,r12,r2,lsl #2	@+Breite
@:
@:	bic	r5,r6,#0x1f		@/32 
@:	add	r2,r5,r11 		@*32 (/32*32 gleiche wie &~0x1f)
@:	
@:	and	r6,r6,#0x1f		@r6%32
@:	rsb	r7,r6,#32
	
@:	mvn	r10,#0
	
	
@rlline:	
@:	ldr	r4,[r0],#4
@:	mov	r4,r4,lsr r3	@nach links an rand
@:	mov	r4,r4,ror r7	@+verschiebung
@:	mov	r8,r10,lsl r6	@maske auch verschieben
@:	and	r11,r4,r8	@teil1 raus
	
@:	ldr	r1,[r2]
@:	orr	r1,r1,r11
@:	str	r1,[r2],#4	
	
@:	bics	r4,r4,r8	@wenn 32bit überlauf dann schreibe den
@:	ldrne	r1,[r2,#32-4]	
@:	orrne	r1,r1,r4
@:	strne	r1,[r2,#32-4]	
	
@:	subs	r5,r5,#1
@:	bne	rlline

@:	ldmfd	sp!,{r0-r11,lr}
@:	bx	lr

	.align	4
	.thumb

@****************************************************************************:
@*:
@*: drawc8X4_th (zeichnet Buchstabe in Dest (nichtsymetrisch))
@*:
@*: r0  = font 		(8*X 4Bit)
@*: r1  = buchstabe	(auch mehr als 8Bit erlaubt)
@*: r2  = font_tab	(buchstaben infos (start,breite))
@* r9  = tileoffset	(bei höhe > 8 (fonttilelinesize:screentilelinesize)
@*: r10 = font_höhe	
@*: r11 = destination	(es wird 8*8 4Bit Teile gezeichnet)
@*: r12 = XStart		(X Beginn)
@*:
@* return:
@*:
@*: r12 = neuer XWert
@*:
@*: wastes r0-r3,r8-r11
@*: saves  r4-r7
@*:

	.global		drawc8X4_th
	.type		drawc8X4_th,function	

drawc8X4_th:

	mov	r3,lr
	push	{r3-r7}

	ldrb	r2,[r2,r1]
	
	mov	r5,#0xf
	lsr	r3,r2,#4	@Start
	and	r2,r5		@End
	sub	r2,r2,r3	@End-Start

	
	lsl	r5,r1,#5
	add	r0,r0,r5	@r0+r1*32
	
	lsl	r3,r3,#2	@r3*4
	
	mov	r6,r12		@X-Verschiebung
	lsl	r2,r2,#2	@+Breite
	add	r12,r2

	lsr	r2,r6,#5	@add basepointer + x-versiebung (bic 0x1f)
	lsl	r2,r2,#5
	add	r2,r11	
	
	@r11 = free
	
	mov	r4,#32
	mov	r5,r9		@r5 = CHAR:FONT
	lsl	r4,r4,#16
	sub	r5,r5,#32	@FONT - 32 (-1 Teil)
	sub	r5,r5,r4	@CHAR - 32 (-1 Teil)
	mov	r11,r5		@r11 = CHAR-32:FONT-32

	mov	r5,#0x1f
	and	r6,r5		@r6%32
	
	mov	r5,#32
	sub	r7,r5,r6
	
	@r10 = anzahl
	

	mov	lr,r10		@r11=anzahl
	mov	r5,r10
	lsr	r5,r5,#3
	add	r5,r5,#1
	mov	r10,r5		@r10 = count = (anzahl/8)+1@

rltile_th:	

	mov	r4,#1
	mov	r5,#8		@rest = default = 8
	
	cmp	r10,r4		@count = 1 dann letzter durchlauf (rest bestimmen)		
	bne	nicht_letzter
		
	mov	r5,lr
	mov	r4,#0x7
	and	r5,r4		@rest = anzahl%8@
	beq	no_rest		@rest == 0
	
nicht_letzter:
rlline_th:	
	
	ldmia	r0!,{r4}
		
	lsr	r4,r3		@nach links an rand (und test ob null)
	beq	no_normal_draw
	
	mov	r1,#0		@maske = 0
	ror	r4,r7		@+verschiebung	(rolle)	

	mvn	r1,r1		@maske (sets no flags) = maske = 0xffffffff
	lsl	r1,r1,r6	@maske auch verschieben
	mov	r8,r1
	mov	r9,r4
	and	r4,r4,r1	@teil1 raus
	beq	no_first_draw	@leer
	
	ldr	r1,[r2]
	orr	r1,r4
	str	r1,[r2]
	
no_first_draw:	

	mov	r1,r8		@maske
	mov	r4,r9		@daten
	
	bic	r4,r1		@lösch alte daten
	beq	no_overlay_draw	@wenn null da kein overlay
	
	ldr	r1,[r2,#32]
	orr	r1,r4
	str	r1,[r2,#32]
	
no_normal_draw:	
no_overlay_draw:
		
	add	r2,r2,#4	@nächste zeile
	sub	r5,r5,#1
	bne	rlline_th

	@fonttilelinesize:screentilelinesize=r11

	mov	r5,r11
	lsr	r4,r5,#16	@r4 = fonttilelinesize
	add	r0,r0,r4	@font+=r4
	
	lsl	r5,r5,#16
	lsr	r5,r5,#16	@screentilelinesize
	add	r2,r2,r5
	
no_rest:	
	mov	r5,r10
	sub	r5,r5,#1
	mov	r10,r5
	bne	rltile_th
	
	
	pop	{r3-r7}
	bx	r3

