
**	WRITE WITH 20 PIXEL WIDE FONT
**	CODE BY CRADON/MATRIX
**	ASM-ONE FORMAT

	SECTION	A,CODE_C

START	MOVEM.L	D0-A6,-(A7)
	MOVE.W	$DFF01C,INTENA
	MOVE.W	$DFF002,DMACON
	MOVE.W	$DFF010,ADKCON
	MOVE.W	#%0111111111111111,$DFF096
	MOVE.W	#%0111111111111111,$DFF09A
	MOVE.W	#%0111111111111111,$DFF09C
	JSR	INITCOP
	JSR	INITIRQ
	MOVE.W	#%1000001111000000,$DFF096
	MOVE.W 	#%1100000000110000,$DFF09A

	lea.l	text1,a1
	jsr	write20

LOOP	BTST	#6,$BFE001
	BNE.B	LOOP
ENDE	MOVE.W	#%0111111111111111,$DFF096
	MOVE.W	#%0111111111111111,$DFF09A
	MOVE.W	#%0111111111111111,$DFF09C
	MOVE.L	OLDIRQ,$00006C
	MOVE.W	DMACON,D0			
	OR.W	#$8000,D0			
	MOVE.W	D0,$DFF096
	MOVE.W	ADKCON,D0			
	OR.W	#$8000,D0
	MOVE.W	D0,$DFF09E
	MOVE.W	INTENA,D0			
	OR.W	#$C000,D0
	MOVE.W	D0,$DFF09A
	MOVE.W	#0,$DFF088
	MOVEM.L	(A7)+,D0-A6
	RTS

** WRITE TEXT WITH 20 PIXEL WIDE FONT *****************************************

write20	lea.l	font,a0
	lea.l	screen1,a2

read_position
	moveq	#0,d0
	moveq	#0,d1
	move.b	(a1)+,d0
	move.b	(a1)+,d1
	move.w	d0,x
	move.w	d1,y

calc_destination
	move.w	x,d0
	move.w	y,d1
	ext.l	d0
	ext.l	d1
	mulu	#20,d0
	divu	#16,d0
	swap	d0
	move.w	d0,d2		; d2.w = x rest
	swap	d0		; d0.w = x i 16 pixel opløsning
	mulu	#2,d0
	ext.l	d0
	mulu	#24,d1
	mulu	#40,d1		; d1 = y*23*40
	add.w	d1,d0
	lea.l	(a2,d0.w),a5

read_ascii
	moveq	#0,d3
	move.b	(a1)+,d3
	tst.b	d3			; end of text?
	beq	wrtout

	cmp.w	#1,d3
	bne	noy
	add.w	#1,y
	bra	read_position

noy	cmp.b	#32,d3
	beq	next

find_font	
	sub.w	#65,d3
	cmp.b	#19,d3
	ble	nxt1
	mulu	#4,d3	
	lea.l	(a0,d3.w),a4
	add.w	#44*40,a4
	bra	minterm
nxt1	cmp.b	#9,d3
	ble	nxt2
	mulu	#4,d3	
	lea.l	(a0,d3.w),a4
	add.w	#22*40,a4
	bra	minterm
nxt2	mulu	#4,d3	
	lea.l	(a0,d3.w),a4

minterm
	move.w	#%0000110111111100,d4	; minterm d= a + b
	ror.w	#4,d2
	or.w	d2,d4			; source 'a' shift value
	jsr	blit
next	add.w	#1,x
	bra	calc_destination
wrtout	rts

text1	dc.b	0,0,'MATRIX PRODUCTS',1
	dc.b	0,1,'MATRIX PRODUCTS',1
	dc.b	0,2,'MATRIX PRODUCTS',1
	dc.b	0,3,'MATRIX PRODUCTS',1
	dc.b	0,4,'MATRIX PRODUCTS',1
	dc.b	0,5,'MATRIX PRODUCTS',1
	dc.b	0,6,'MATRIX PRODUCTS',1
	dc.b	0,7,'MATRIX PRODUCTS',1
	dc.b	0,8,'MATRIX PRODUCTS',1
	dc.b	0,9,'MATRIX PRODUCTS',0
	even
x	dc.w	0
y	dc.w	0

BLIT	BTST	#6,$DFF002
	BNE.B	BLIT
	MOVE.W	D4,$DFF040		; BLTCON0
	MOVE.W	#0,$DFF042		; BLTCON1
	MOVE.W	#$FFFFFFFF,$DFF044	; MASK
	MOVE.L	a4,$DFF050		; A POINTER
	MOVE.L	A5,$DFF04C		; B POINTER
	MOVE.L	A5,$DFF054		; D POINTER
	MOVE.W	#36,$DFF062		; B MODULO
	MOVE.W	#36,$DFF064		; A MODULO [320-32]/8
	MOVE.W	#36,$DFF066		; D MODULO
	MOVE.W	#[23*64+32/16],$DFF058	; SIZE
	ADD.L	#10240,A5
	ADD.L	#3*23*40,a4	
READY2	BTST	#6,$DFF002
	BNE.B	READY2
	MOVE.W	D4,$DFF040		; BLTCON0
	MOVE.W	#0,$DFF042		; BLTCON1
	MOVE.W	#$FFFFFFFF,$DFF044	; MASK
	MOVE.L	a4,$DFF050		; A POINTER
	MOVE.L	A5,$DFF04C		; B POINTER
	MOVE.L	A5,$DFF054		; D POINTER
	MOVE.W	#36,$DFF062		; B MODULO
	MOVE.W	#36,$DFF064		; A MODULO [320-32]/8
	MOVE.W	#36,$DFF066		; D MODULO
	MOVE.W	#[23*64+32/16],$DFF058	; SIZE
	RTS

** THIRD LEVEL INTERRUPT ******************************************************

MYIRQ	MOVEM.L	D0-A6,-(A7)

	MOVE.W	#$20,$DFF09C
	MOVEM.L	(A7)+,D0-A6 		
	RTE

OLDIRQ	DC.L	0
INTENA	DC.W	0
DMACON	DC.W	0
ADKCON	DC.W	0

** SET COPPER FOR SELFACTIVATION **********************************************

INITCOP	LEA     PLANE1,A0
	MOVE.L  #SCREEN1,D0
	MOVE.W  D0,6(A0)
	SWAP    D0
	MOVE.W  D0,2(A0)
	SWAP    D0
	LEA     PLANE2,A0
	MOVE.L  #SCREEN1+10240,D0
	MOVE.W  D0,6(A0)
	SWAP    D0
	MOVE.W  D0,2(A0)
	SWAP    D0
	MOVE.L	#COPPER,D0
	LEA.L	ADRESS,A0
	MOVE.W	D0,6(A0)
	SWAP	D0
	MOVE.W	D0,2(A0)
	MOVE.L	#COPPER,$DFF084
	MOVE.B	#$00,$DFF08A
	RTS
INITIRQ	MOVE.L 	$6C,OLDIRQ
	MOVE.L 	#MYIRQ,$6C
	RTS
	
** COPPERLIST *****************************************************************

	SECTION	B,DATA_C

COPPER	DC.W	$0106,$0000,$01FC,$0000
	DC.W    $008E,$2C81,$0090,$2CC1
	DC.W    $0092,$0038,$0094,$00D0
	DC.W    $0102,$0000,$0104,$0000
	DC.W	$0108,$0000,$010A,$0000

COLOUR	DC.W	$0180,$0FFF,$0182,$0000
	DC.W	$0184,$0686,$0186,$00B0
	DC.W	$0188,$080f,$018A,$0000
	DC.W	$018C,$0fF0,$018E,$0813

PLANE1	DC.W    $00E0,$0000,$00E2,$0000
PLANE2	DC.W    $00E4,$0000,$00E6,$0000
	DC.W	$00E8,$0000,$00EA,$0000
	DC.W    $3001,$FF00,$0100,$2200
	DC.W	$FFE1,$FFFE,$2901,$FF00
	DC.W	$0100,$0200

ADRESS	DC.W	$0084,$0000,$0086,$0000
	DC.W	$008A,$0000,$FFFF,$FFFE	; FORCE RESTART

** SCREEN *********************************************************************

FONT	INCBIN	"DH0:CODING/SOURCE/SCROLLER/GREENFONT2.BIT"
SCREEN1	BLK.B	[320/8*512],$00
