ůúůú˙÷˙÷˙÷˙÷˙÷˙÷˙÷˙÷˙÷	section prg,code_c
	include "df1:sources/registres.s"

;*************** INDEX FONCTIONS ***************

openlib=-552
closelib=-414
allocmem=-198
freemem=-210
permit=-138
forbid=-132

;*************** PARAMETRES DE L'ECRAN ***************

nbplane=8
sizex=320
sizey=256

startx=129				;depart horizontal du tracé
starty=45				;depart vertical du tracé

tracex=320				;largeur de l'image a tracer ŕ ...
					;... partir de startx

displayx=320				;largeur de l'image a visualiser ŕ ...
					;... partir de startdisplayx
displayy=sizey				;hauteur de l'image a visualiser ŕ ...
					;... partir de starty

startdisplayx=129			;debut horizontal visible de l'image

stopx=displayx+startdisplayx-256	;fin horizontale visible de l'image 
stopy=displayy+starty-256		;fin verticale visible de l'image

ddf_strt=(startx-17)/2 
ddf_stop=ddf_strt+(tracex/2-8)

modulo_pair=(sizex-tracex)/8
modulo_impair=(sizex-tracex)/8

planesize=sizey*sizex/8

;*************** CONSTANTES ***************

;----- pas d'incrementation des couleurs -----

step_R=1
step_G=1
step_B=0

;----- divers -----

execbase=$4
memory=2+$10000
copsize=8*2*(32+1)*4+10*4+8*nbplane+4

;8*2*(32+1)*4 (palette de 256 couleurs)
;10*4 (parametres ecran)
;8*nbplane (adresses bitplanes)
;4 (FFFFFFFE)

;*************** PROGRAMME PRINCIPAL ***************

	bsr.w init

;----- attente -----

boucle:
	btst #6,$bfe001
	bne boucle

	bsr fin
	rts

;*************** INITIALISATION ***************

init:

;----- forbid -----

	move.l execbase,a6
	jsr forbid(a6)

;----- reservation de la memoire copper -----

	move.l execbase,a6
	move.l #copsize,d0
	move.l #memory,d1
	jsr allocmem(a6)
	move.l d0,copadr

;----- creation de la copperlist -----

	move.l copadr,a0

	moveq #0,d0		;R
	moveq #0,d1		;G
	moveq #0,d2		;B
	movea.l a0,a1
	add.w #8*(32+1)*4,a0
	moveq #8-1,d7

coploop1:
	move.w buffer,d6
	move.w #$0106,(a1)+
	move.w d6,(a1)+
	move.w #$0106,(a0)+
	or.w #$0200,d6
	move.w d6,(a0)+
	add.w #$2000,buffer
	move.w #$0180,d3
	moveq #32-1,d6

coploop0:
	move.w d3,(a1)+
	move.w d0,d4
	and.w #$00F0,d4
	lsl.w #4,d4
	move.w d1,d5
	and.w #$00F0,d5
	or.w d5,d4
	move.w d2,d5
	and.w #$00F0,d5
	lsr.w #4,d5
	or.w d5,d4
	move.w d4,(a1)+

	move.w d3,(a0)+
	move.w d0,d4
	and.w #$000F,d4
	lsl.w #8,d4
	move.w d1,d5
	and.w #$000F,d5
	lsl.w #4,d5
	or.w d5,d4
	move.w d2,d5
	and.w #$000F,d5
	or.w d5,d4
	move.w d4,(a0)+

	addq.w #step_R,d0
	addq.w #step_G,d1
;	addq.w #step_B,d2
	addq.w #2,d3

	dbf d6,coploop0
	dbf d7,coploop1

	move.w #$008E,(a0)+		;DIWSTRT
	move.w #starty*256+startdisplayx,(a0)+
	move.w #$0090,(a0)+		;DIWSTOP
	move.w #stopy*256+stopx,(a0)+
	move.w #$0100,(a0)+		;BPLCON0
	moveq #0,d0
	bset #4,d0
	bset #9,d0
	move.w d0,(a0)+
	move.w #$0102,(a0)+		;BPLCON1
	move.w #$0000,(a0)+
	move.w #$0104,(a0)+		;BPLCON2
	move.w #$0000,(a0)+
	move.w #$0092,(a0)+		;DDFSTRT
	move.w #ddf_strt,(a0)+
	move.w #$0094,(a0)+		;DDFSTOP
	move.w #ddf_stop,(a0)+
	move.w #$0108,(a0)+		;BPL1MOD
	move.w #modulo_pair,(a0)+
	move.w #$010A,(a0)+		;BPL2MOD
	move.w #modulo_impair,(a0)+
	move.l #$01FC0000,(a0)+

	move.l #plane0adr,d0
	move.w #$E0,(a0)+
	swap d0
	move.w d0,(a0)+
	move.w #$E2,(a0)+
	swap d0
	move.w d0,(a0)+

	move.l #plane1adr,d0
	move.w #$E4,(a0)+
	swap d0
	move.w d0,(a0)+
	move.w #$E6,(a0)+
	swap d0
	move.w d0,(a0)+

	move.l #plane2adr,d0
	move.w #$E8,(a0)+
	swap d0
	move.w d0,(a0)+
	move.w #$EA,(a0)+
	swap d0
	move.w d0,(a0)+

	move.l #plane3adr,d0
	move.w #$EC,(a0)+
	swap d0
	move.w d0,(a0)+
	move.w #$EE,(a0)+
	swap d0
	move.w d0,(a0)+

	move.l #plane4adr,d0
	move.w #$F0,(a0)+
	swap d0
	move.w d0,(a0)+
	move.w #$F2,(a0)+
	swap d0
	move.w d0,(a0)+

	move.l #plane5adr,d0
	move.w #$F4,(a0)+
	swap d0
	move.w d0,(a0)+
	move.w #$F6,(a0)+
	swap d0
	move.w d0,(a0)+

	move.l #plane6adr,d0
	move.w #$F8,(a0)+
	swap d0
	move.w d0,(a0)+
	move.w #$FA,(a0)+
	swap d0
	move.w d0,(a0)+

	move.l #plane7adr,d0
	move.w #$FC,(a0)+
	swap d0
	move.w d0,(a0)+
	move.w #$FE,(a0)+
	swap d0
	move.w d0,(a0)+

	move.l #$FFFFFFFE,(a0)

;modif DMA,...
	
	move.w #$03F0,dmacon		;couper tous les DMA
	move.l copadr,cop1lch		;adresse coplist1
	clr.w copjmp1			;copjump1
	move.w #$87C0,dmacon		;COPEN et BPLEN et BLTPRI et BLTEN

	rts

;*************** FIN DE PROGRAMME ***************

fin:	

;----- restaurer la copperlist dos -----

	move.l execbase,a6
	move.l #gfxname,a1
	jsr openlib(a6)
	move.l d0,a1
	move.l 38(a1),cop1lch
	clr.w copjmp1
	jsr closelib(a6)

;----- liberation de la memoire copper -----

	move.l copadr,a1
	move.l #copsize,d0
	jsr freemem(a6)

;----- restaurer les canaux DMA -----

	move.w #$83F0,dmacon

;----- permit -----

	jsr permit(a6)

	rts

;*************** VARIABLES ***************

buffer:		dc.w 0
plane0adr:	incbin "df1:graphics/plane0.raw"
plane1adr:	incbin "df1:graphics/plane1.raw"
plane2adr:	incbin "df1:graphics/plane2.raw"
plane3adr:	incbin "df1:graphics/plane3.raw"
plane4adr:	incbin "df1:graphics/plane4.raw"
plane5adr:	incbin "df1:graphics/plane5.raw"
plane6adr:	incbin "df1:graphics/plane6.raw"
plane7adr:	incbin "df1:graphics/plane7.raw"
copadr:		dc.l 0
gfxname:	dc.b "graphics.library",0
	even
