ORG $30000	;EMPLACEMENT EN MEMOIRE
LOAD $30000	;DE NOTRE PROGRAMME

BEGIN:
JMP START
;=====================================================================
EXECBASE=4
OPENLIBRARY=-408
CLOSELIBRARY=-414
SUPERSTATE=-150
USERSTATE=-156	
FORBID=-132
PERMIT=-138
ADDINTSERVER=-168
REMINTSERVER=-174
Open=-30
Close=-36
Read=-42

;=====================================================================
BLTCON0=$DFF040		
BLTCON1=$DFF042
BLTAFWM=$DFF044
BLTALWM=$DFF046
BLTCPTH=$DFF048
BLTCPTL=$DFF04A
BLTBPTH=$DFF04C
BLTBPTL=$DFF04E
BLTAPTH=$DFF050
BLTAPTL=$DFF052
BLTDPTH=$DFF054
BLTDPTL=$DFF056
BLTSIZE=$DFF058
BLTCMOD=$DFF060
BLTBMOD=$DFF062
BLTAMOD=$DFF064
BLTDMOD=$DFF066
BLTCDAT=$DFF070
BLTBDAT=$DFF072
BLTADAT=$DFF074
DMACONR=$DFF002
;==================================

;==================================
START:    
MOVEM.L D0-D7/A0-A6,-(A7)	;SAUVE REGISTRES
MOVE.L EXECBASE,A6		;CHARGE ADRESSE EXECBASE DANS A6
JSR FORBID(A6)    		;SAUTE SOUS PROGRAMME: INTERDIT MULTITACHE
JSR OPENLIB  			;SAUTE SOUS PROGRAMME: OUVERTURE LIBRAIRIES

BSR.L INIT_COPPER		;INITIALISE LISTE DES WAITS

BSR.L SETCOPPER			;SAUTE SOUS PROGRAMME: MET EN PLACE LISTE COPPER
BSR.s NEWIRQ3			;SAUTE SOUS PROGRAMME: MET EN PLACE ROUTINE D'INTERRRUPTION

WAIT:
CMP.B #$E0,$DFF006		;ATTENDANT 200 IEME LIGNE RASTER
BNE.S WAIT			;SINON RETOURNE A WAIT

BSR.L RASTERBARS		;VA A LA ROUTINE DE RASTERBARS

BTST	#6,$BFE001		;ATTENDANT PRESSION SUR BOUTON GAUCHE SOURIS
BNE.S	WAIT			;SINON RETOURNE A WAIT
 				;SI OUI  FIN
END: 				;FIN:	
BSR.s STOPIRQ3        		;SAUTE SOUS PROGRAMME: STOPPE INTERRUPTION
BSR.L CLRCOPPER       		;SAUTE SOUS PROGRAMME: RESTAURE ANCIENNE LISTE COPPER
BSR.L CLOSELIB        		;SAUTE SOUS PROGRAMME: FERME LIBRAIRIES 
MOVE.L EXECBASE,A6		;CHARGE ADRESSE EXECBASE DANS A6
JSR PERMIT(A6)      		;AUTORISE MULTITACHE
                      
MOVEM.L (A7)+,D0-D7/A0-A6	;RESTAURE REGISTRES
RTS
;========================
NEWIRQ3:			;MET EN PLACE NOTRE ROUTINE 
MOVE.L	EXECBASE,A6		;D'INTERRUPTION
lea	irqstr,a1
move.l	#5,d0
jsr	addintserver(a6)
move.l	d0,irq
beq.s	irqerror
rts
irqerror:
rts
;==========================
STOPIRQ3:			;RESTAURE ANCIENNE ROUTINE
movem.l	a0-a6/d0-d7,-(sp)	;D'INTERRUPTION
	tst.l	irq
	beq.s	irqoff1
	move.l	execbase,a6
	lea	irqstr,a1
	move.l	#32,d0
	jsr	remintserver(a6)
irqoff1:movem.l	(sp)+,a0-a6/d0-d7
	rts
irqstr:
	dc.l	0,0
	dc.b	2,-127
	dc.l	0,irqdat,interrupt
irqdat:	dc.l	0,0,0,0
irq:	dc.l	0
;============================
interrupt:			;NOTRE ROUTINE D'INTERRUPTION	
movem.l	a0-a6/d0-d7,-(sp)

	
movem.l	(sp)+,a0-a6/d0-d7
rts
;============================
OPENLIB:  			;OUVERTURE DE LA LIBRAIRIE GRAPHIQUE
move.l execbase,a6      	;MET ADRESSE EXECBASE DANS A6
lea gfxname,a1			;MET NOM DE LA LIBRAIRIE DANS A1
move.l #$0,d0           	;MET 0 DANS D0
jsr openlibrary(a6)		;OUVRE LIBRAIRIE
tst d0				;TESTE D0
beq.s error			;SI = A 0   VA A ERROR = SORTIE
move.l d0,gfxbase       	;SI NON, MET ADRESSE D0 DANS GFXBASE
add.l #$32,d0			;AJOUTE $32 A CETTE ADRESSE
move.l d0,coppertr      	;MET D0=ADRESSE ACTUELLE LISTE COPPER
rts				;DANS COPPERTR
even
gfxname: dc.b 'graphics.library',0 	;NOM DE LA LIBRAIRIE
even
gfxbase: dc.l 0				;POINTEUR POUR LA GRAPHICS LIBRARY
coppertr: dc.l 0			;POINTEUR POUR ADRESSE LISTE COPPER
;====================
CLOSELIB: 			;FERMETURE LIBRAIRIE
move.l execbase,a6      	;MET ADRESSE EXECBASE DANS A6
move.l gfxbase,a1		;MET NOM DE LA LIBRAIRIE DANS A1
jsr closelibrary(a6)		;FERME LIBRAIRIE
rts
;====================
ERROR:				;SI ERREUR
illegal				;SORTIE
rts
;====================
SETCOPPER:			;MET EN PLACE NOTRE LISTE COPPER
move.l coppertr,a0		;MET ADRESSE ACTUEL COPPER DANS A0
move.l (a0),oldcopper		;MET CONTENU DANS OLDCOPPER
move.l #newcopper,(a0)		;MET NOTRE LISTE COPPER DANS A0
move.w #$81c0,$dff096		;ACTIVE LISTE COPPER
rts		
oldcopper: dc.l 0
;====================
CLRCOPPER:			;RESTAURE ANCIENNE LISTE COPPER
move.l coppertr,a0		;MET ANCIENNE ADRESSE DANS A0
move.l oldcopper,(a0)		;MET CONTENU DANS A0
move.w #$80a0,$dff096		;REACTIVE ANCIENNE COPPER
rts
;====================
WAIT_BLITTER:			;ROUTINE POUR ATTENDRE QUE LE BLITTER
BTST #14,DMACONR		;EST FINI SON PRECEDENT TRAVAIL
BNE.S WAIT_BLITTER
RTS
;===================
INIT_COPPER:		;INITIALISE LISTE DE 210 WAITS
			;SOUS LA FORME
MOVE.W	#210,D1		;$XX01,$FFFE,$0180,$0000
LEA LISTE_WAIT,A0
MOVE.W #$3001,D0
MOVE.W D0,(A0)+
MOVE.W #$FFFE,(A0)+
COPLP:
MOVE.W	#$0180,(A0)+
MOVE.W	#0,(A0)+
ADD.W	#$0100,D0
MOVE.W	D0,(A0)+
MOVE.W	#$FFFE,(A0)+
DBF	D1,COPLP
RTS
;====================
RASTERBARS:

LEA	LISTE_WAIT+4,A0		;EFFACE VALEURS ACTUELLES
MOVE.W	#210,D0			;DE $0180 A CHAQUE LIGNE DE LA
CLEARLP:			;LISTE DES WAITS
CLR.W	2(A0)
ADDQ.W	#8,A0
DBF	D0,CLEARLP

LEA	INFRONT,A6		;
LEA	INTABLE,A5		;
LEA	THYCOLS,A4
LEA	SINE,A3
MOVEQ	#0,D0				; PREMIER BARRE
BLP:
LEA	LISTE_WAIT+4,A2
MOVE.W	(A5)+,D7
TST.B	(A6)+
BNE.S	NONOW
ADDQ.B	#1,-1(A5)
MOVE.B	(A3,D7.W),D1			; POSITION Y
AND.W	#$FF,D1
ASL.W	#3,D1
MOVE.W	D0,D6
ASL.W	#5,D6
MOVEQ	#15,D5

MCLP:					
MOVE.W	(A4,D6.W),2(A2,D1.W)		
ADDQ.L	#8,A2
ADDQ.L	#2,D6
DBF	D5,MCLP

NONOW:
ADDQ.L	#1,D0			;BARRE SUIVANTE
CMPI.B	#8,D0			;8IEME BARRE	
BNE.S	BLP			;SI NON RETOURNE A BLP

LEA	INFRONT,A6
LEA	INTABLE,A5
LEA	THYCOLS,A4
LEA	SINE,A3
MOVEQ	#0,D0				; FIRST BAR
BLP2:
LEA	LISTE_WAIT+4,A2
MOVE.W	(A5)+,D7
TST.B	(A6)+
BEQ.S	NONOW2
ADDQ.B	#1,-1(A5)
MOVE.B	(A3,D7.W),D1			; POSITION Y
AND.W	#$FF,D1
ASL.W	#3,D1
MOVE.W	D0,D6
ASL.W	#5,D6
MOVEQ	#15,D5
MCLP2:
MOVE.W	(A4,D6.W),2(A2,D1.W)
ADDQ.L	#8,A2
ADDQ.L	#2,D6
DBF	D5,MCLP2
NONOW2:
ADDQ.L	#1,D0
CMPI.B	#8,D0
BNE.S	BLP2

LEA	INTABLE,A0
MOVEQ	#7,D2
CHECKLP:
MOVE.W	(A0)+,D0
SUB.B	#$40,D0
DBF	D2,CHECKLP
RTS

INFRONT:	DC.B 1,1,1,1,1,1,1,1

INTABLE:	DC.W $8,$10,$18,$20,$28,$30,$38,$40

THYCOLS:	;COULEURS DE CHAQUE BARRE
	DC.W $0000,$0202,$0404,$0606,$0808,$0A0A,$0C0C,$0E0E	;BARRE1
	DC.W $0E0E,$0C0C,$0A0A,$0808,$0606,$0404,$0202,$0000

	DC.W $0000,$0002,$0004,$0006,$0008,$000A,$000C,$000E	;BARRE2
	DC.W $000E,$000C,$000A,$0008,$0006,$0004,$0002,$0000

	DC.W $0000,$0022,$0044,$0066,$0088,$00AA,$00CC,$00EE	;BARRE3
	DC.W $00EE,$00CC,$00AA,$0088,$0066,$0044,$0022,$0000

	DC.W $0000,$0020,$0040,$0060,$0080,$00A0,$00C0,$00E0	;BARRE4
	DC.W $00E0,$00C0,$00A0,$0080,$0060,$0040,$0020,$0000

	DC.W $0000,$0220,$0440,$0660,$0880,$0AA0,$0CC0,$0EE0	;BARRE5
	DC.W $0EE0,$0CC0,$0AA0,$0880,$0660,$0440,$0220,$0000

	DC.W $0000,$0200,$0400,$0600,$0800,$0A00,$0C00,$0E00	;BARRE6
	DC.W $0E00,$0C00,$0A00,$0800,$0600,$0400,$0200,$0000

	DC.W $0000,$0222,$0444,$0666,$0888,$0AAA,$0CCC,$0EEE	;BARRE7
	DC.W $0EEE,$0CCC,$0AAA,$0888,$0666,$0444,$0222,$0000

	DC.W $0000,$0002,$0004,$0006,$0008,$000A,$000C,$000E	;BARRE8
	DC.W $000E,$000C,$000A,$0008,$0006,$0004,$0002,$0000

SINE: ;TABLE DES POSITIONS Y

DC.B 95,93,91,89,86,84,82,79,77,75,72,70,68,66,63
DC.B 61,59,57,55,53,51,49,47,45,43,41,39,37,35,33
DC.B 32,30,28,27,25,24,22,21,19,18,17,15,14,13,12
DC.B 11,10,09,08,07,06,05,05,04,03,03,02,02,02,01
DC.B 01,01,01,01,00,01,01,01,01,01,02,02,02,03,03
DC.B 04,05,05,06,07,08,09,10,11,12,13,14,15,17,18
DC.B 19,21,22,24,25,27,28,30,32,33,35,37,39,41,43
DC.B 45,47,49,51,53,55,57,59,61,63,66,68,70,72,75
DC.B 77,79,82,84,86,89,91,93,95,92,90,88,85,83,81
DC.B 78,76,74,71,69,67,65,62,60,58,56,54,52,50,48
DC.B 46,44,42,40,38,36,34,32,31,29,27,26,24,23,21
DC.B 20,18,17,16,14,13,12,11,10,09,08,07,06,05,04
DC.B 04,03,02,02,01,01,01,00,00,00,00,00,00,00,00
DC.B 00,00,00,01,01,01,02,02,03,04,04,05,06,07,08
DC.B 09,10,11,12,13,14,16,17,18,20,21,23,24,26,27
DC.B 29,31,32,34,36,38,40,42,44,46,48,50,52,54,56
DC.B 58,60,62,65,67,69,71,74,76,78,81,83,85,88,90
DC.B 92

;====================
EVEN				;NOTRE LISTE COPPER
NEWCOPPER:   
	DC.W	$008E,$2981	;DIMENSIONS DE L'ECRAN
	DC.W	$0090,$29D1	;256 LIGNES

	DC.W	$0092,$0038,$0094,$00D0

	;POINTEURS ADRESSE DES PLANS DE L'IMAGE

	DC.W $00E0,IMAGE/65536
	DC.W $00E2,IMAGE & 65535   


	;REGISTRE POUR CHOISIR RESOLUTION	

	DC.W	$0100,$1200		;1 PLAN + MODE COULEURS

	DC.W	$0102,$0000

	;PRIORITE DES PLANS ET SPRITES - INUTILISE ICI

	DC.W 	$0104,$0000

	;MODULOS DES PLANS

	DC.W	$0108,$000	;MODULOS PLANS PAIRS
	DC.W 	$010A,$000	;MODULOS PLANS IMPAIRS

	;POINTEURS DES SPRITES - MIS A 0 SI PAS DE SPRITES

	DC.W	$0120,$0000,$0122,$0000
	DC.W	$0124,$0000,$0126,$0000
	DC.W	$0128,$0000,$012A,$0000	;PAS DE SPRITES
	DC.W	$012C,$0000,$012E,$0000
	DC.W	$0130,$0000,$0132,$0000
	DC.W	$0134,$0000,$0136,$0000
	DC.W	$0138,$0000,$013A,$0000
	DC.W	$013C,$0000,$013E,$0000

	;REGISTRES DES COULEURS

	DC.W	$0180,$0000	;COULEUR 00
	DC.W	$0182,$0FFF	;COULEUR 01
	DC.W	$0184,$0BDD	;COULEUR 02
	DC.W	$0186,$0899	;COULEUR 03
	DC.W	$0188,$0455	;COULEUR 04
	DC.W	$018A,$0333	;COULEUR 05
	DC.W	$018C,$0222	;COULEUR 06
	DC.W	$018E,$0111	;COULEUR 07
	DC.W	$0190,$0EEF	;COULEUR 08
	DC.W	$0192,$0CCF	;COULEUR 09
	DC.W	$0194,$099F	;COULEUR 10
	DC.W	$0196,$055F	;COULEUR 11
	DC.W	$0198,$000F	;COULEUR 12
	DC.W	$019A,$000A	;COULEUR 13
	DC.W	$019C,$0006	;COULEUR 14
	DC.W	$019E,$0003	;COULEUR 15
	DC.W	$01A0,$0DEF	;COULEUR 16	;LES COULEURS DE 16 A 31 SONT
	DC.W	$01A2,$0BEF	;COULEUR 17	;AUSSI CELLES DES SPRITES
	DC.W	$01A4,$0ADF	;COULEUR 18
	DC.W	$01A6,$07BD	;COULEUR 19	;LES COULEURS 16 A 31 NE SONT
	DC.W	$01A8,$058A	;COULEUR 20	;PAS UTILISEES DANS LE MODE
	DC.W	$01AA,$0357	;COULEUR 21	;HOLD AND MODIFY (HAM)
	DC.W	$01AC,$0234	;COULEUR 22
	DC.W	$01AE,$0011	;COULEUR 23
	DC.W	$01B0,$0FD0	;COULEUR 24
	DC.W	$01B2,$0FA0	;COULEUR 25
	DC.W	$01B4,$0E80	;COULEUR 26
	DC.W	$01B6,$0C60	;COULEUR 27
	DC.W	$01B8,$0A30	;COULEUR 28
	DC.W	$01BA,$0720	;COULEUR 29
	DC.W	$01BC,$0510	;COULEUR 30
	DC.W	$01BE,$0300	;COULEUR 31


LISTE_WAIT:	BLK.W 200*4,0
		


	;INSTRUCTIONS POUR AVOIR UN ECRAN PAL (256 LIGNES DE HAUT)

	DC.W $FFDF,$FFFE


DC.L $FFFFFFFE ;FIN LISTE COPPER
EVEN
FINDEMO:
