*************************************************
*	Demonstrace blitteru (kresleni car)	*	
*************************************************
	SECTION copper_demo,CODE_P
**********************************************
	lea	$dff000,a6
**************************************************
* zde inicializujeme  copper list resp. ukazovtka
* bitplanu
	lea	bp,a0			;ukazovatko na obrazovku
	move.l	#screen,d0		
	moveq	#1,d1
planes
	move.w	d0,6(a0)
	swap	d0
	move.w	d0,2(a0)
	swap	d0
	add.l	#10240,d0
	addq.l	#8,a0
	dbf	d1,planes
********************************************** 
	lea	buffer,a0
	lea	screen,a1
	move.w	#5119,d0
copy
	move.l (a1)+,(a0)+
	dbf d0,copy
**********************************************
	move.w	#$7fff,$9a(a6)		;zakazat preruseni
	move.w	#$83c0,$96(a6)		;povolit DMA copperu,bitplanu a blitteru
	move.l	#copper,$80(a6)		;zapsat pocatek copper listu 
	clr.w	$88(a6)			;restart

	moveq	#10,d0
	moveq	#10,d1
	moveq	#1,d2
	moveq	#0,d3
loop
cekam	
	cmp.b	#$f0,$6(a6)		;cekani na vertikalni pozici el. paprsku
	bne.b	cekam

	movem.l d0-d7,-(a7)
	bsr	Refresh
	movem.l	(a7)+,d0-d7
	movem.l d0-d7,-(a7)
	bsr	Put
	movem.l	(a7)+,d0-d7
	bsr Pohyb

	btst	#$6,$bfe001		;cekani na mys
	bne.b	loop
	rts

*****************************************************************
Pohyb
	add.l	d2,d0
	add.l	d3,d1

	cmp.l	#200,d0
	ble.b	nenivice
	subq.l	#1,d0
	exg.l	d2,d3
nenivice
	cmp.l	#100,d1
	ble.b	nenivice1
	subq.l	#1,d1
	neg.l	d3
	exg.l	d2,d3
nenivice1
	cmp.l	#5,d0
	bge.b	.nenimene
	addq.l	#1,d0
	exg.l	d2,d3
.nenimene
	cmp.l	#10,d1
	bge.b	.nenimene1
	addq.l	#1,d1
	neg.l	d3
	exg.l	d2,d3
.nenimene1
	rts
*****************************************************************
* D0.l = x, D1.l = y
Put
	add.l	#2,d1
	add.l	#2,d0
	move.l	#screen,d7
	mulu	#40,d1
	move.l	d0,d2
	and.l	#$fffffff0,d2
	sub.l 	d2,d0
	lsr.l	#3,d2
	add.l	d2,d1
	add.l	d1,d7

	lsl.w	#8,d0				;rotace pro zdroj A
	lsl.w	#4,d0
	move.l	d0,d1
	or.w #%0000111111100010,d0		; pouzite ABCD a minterm
	
	move.l	#hlava,d6
	moveq	#1,d5
.bitplany
	btst	#14,$2(a6)		; pockat na blitter
	bne.b	.bitplany

	move.l	d6,$50(a6)		;zdroj A
	move.l	#hlava_mask,$4c(a6)	;zdroj B
	move.l	d7,$48(a6)		;zdroj C
	move.l	d7,$54(a6)		;cil D

	move.w	#0,$64(a6)		;modulo A
	move.w	#0,$62(a6)		;modulo B
	move.w	#28,$60(a6)		;modulo C
	move.w	#28,$66(a6)		;modulo D

	move.l	#-1,$44(a6)		;maskovani zdroje A
	move.w	d0,$40(a6)		;rizeni blitteru (minterm...)
	move.w	d1,$42(a6)			

	move.w	#6+64*73,$58(a6)	;zapsat velikost =>START Blitteru
	
	add.l	#10240,d7		;posun na dalsi bitplan
	add.l	#12*73,d6		;posun na druhy bitplan hlavy
					;tj. velikost=(X/8)xY =>(96/8)*73
	dbf	d5,.bitplany
	rts
*****************************************************************
* D0.l = x, D1.l = y
Refresh
	move.l	#screen,d7
	move.l	#buffer,d6
	mulu	#40,d1
	and.l	#$fffffff0,d0
	lsr.l	#3,d0
	add.l	d0,d1
	add.l	d1,d7
	add.l	d1,d6

	moveq	#1,d5
.bitplany
	btst	#14,$2(a6)		; pockat na blitter
	bne.b	.bitplany

	move.l	d6,$50(a6)		;zdroj A
	move.l	d7,$54(a6)		;cil D
	move.w	#28,$64(a6)		;modulo A
	move.w	#28,$66(a6)		;modulo D
	move.l	#-1,$44(a6)		;maskovani zdroje A
	move.w	#%0000100111110000,$40(a6)		;rizeni blitteru (minterm...)
	clr.w	$42(a6)			

	move.w	#6+64*77,$58(a6)	;zapsat velikost =>START Blitteru
	
	add.l	#10240,d7		;posun na dalsi bitplan
	add.l	#10240,d6		;posun na dalsi bitplan
	dbf	d5,.bitplany
	rts
*****************************************************************
	SECTION chip_data,DATA_C
copper	
	dc.w	$96,$20			;zakazani spritu
	dc.w	$008E,$2c75		;velikost zobraz. okna
	dc.w	$0090,$2cc5
	dc.w	$0092,$0038		;prenos dat
	dc.w	$0094,$00d0
	dc.w	$0108,0			; vynulovat modulo pro liche
	dc.w	$010A,0			; vynulovat modulo pro sude
	dc.w	$1fc,0			; vynulovat (kvuli kompatibilty s AGA)
	dc.w	$100,$2000		; dva bitplany 
	dc.w	$0102,$0
	dc.w	$0104,$0
bp
	dc.w	$00E0,$0,$00E2,$0
	dc.w	$00E4,$0,$00E6,$0

	dc.w	$180,$0FFF,$182,$0ccc	;paleta barev
	dc.w	$184,$0888,$186,$0444

	dc.w	$ffff,$fffe	;konec copper listu (cekani na konec snimku)

*************************************************************
*	Rozmery
*	pozadi	=	320x256 	2 bitplany
*	hlava   =	96*73		2 bitplany
*	maska	=	96*73		1 bitplan
*	doplnte cesty k temto souborum
screen		incbin "pozadi.bp"
hlava		incbin "hlava.bp"
hlava_mask	incbin "hlava_mask.bp"
buffer		ds.b 10240*2
