
	OPT C-

	SECTION PROG,CODE_C




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
;==================================

ECRAN1:		DCB.B	40*256*3,0

ECRAN2:		DCB.B	40*256*3,0

SPR:		INCBIN	ASM3-DISK1:BOBS/BOBS_RAW

MSPR:		INCBIN	ASM3-DISK1:BOBS/BOBS_MASK

FONT:		INCBIN ASM3-DISK1:BOBS/FONT_RAW

SCROLL:		DCB.B 50*32*4,0

MT_DATA:	INCBIN ASM3-DISK1:BOBS/MODULE

;==================================
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

	JSR PLACE_ADRESSE_IMAGE		;PLACE ADRESSE ECRAN DANS LISTE COPPER
	JSR PLACE_ADRESSE_SCROLL	;PLACE ADRESSE SCROLL DANS LISTE COPPER


CLEARSCROLL:			;ON EFFACE LE FOND DU SCROLL POUR EVITER
	LEA SCROLL,A1			;D'AVOIR DES BIZARRERIES A L'ECRAN 
	MOVE.W #25*35*3,D0
CLS:
	MOVE.W #0,(A1)+
	DBF D0,CLS
	
CLEARFOND1BOB:			;IDEM POUR LES ECRANS DES BOBS
	LEA ECRAN1,A1
	MOVE.W #20*256*3,D0
CLSE1:
	MOVE.W #0,(A1)+
	DBF D0,CLSE1

CLEARFOND2BOB:			;IDEM POUR LES ECRANS DES BOBS
	LEA ECRAN2,A1
	MOVE.W #20*256*3,D0
CLSE2:
	MOVE.W #0,(A1)+
	DBF D0,CLSE2


	MOVE.L #TEXT,PTEXT		;ON MET LE POINTEUR DE LETTRE SUR LE DEBUT
	MOVE.W #0,COMPT			;DU TEXTE. ET LE COMPTEUR A 0
	
	BSR.W INIT_MUSIQUE		;INITIALISATION DE LA MUSIQUE
	
	BSR.W 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
	
	BTST	#6,$BFE001		;ATTENDANT PRESSION SUR BOUTON GAUCHE SOURIS
	BNE.S	WAIT			;SINON RETOURNE A WAIT
	 				;SI OUI  FIN
END: 				;FIN:	
	BSR.W STOP_MUSIQUE		;ARRET DE LA MUSIQUE
	BSR.s STOPIRQ3        		;SAUTE SOUS PROGRAMME: STOPPE INTERRUPTION
	BSR.W CLRCOPPER       		;SAUTE SOUS PROGRAMME: RESTAURE ANCIENNE LISTE COPPER
	BSR.W 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)
	
	BSR.W CLEAR_ALL			;VA A LA ROUTINE DE SWAPPING ECRAN
	BSR.W ANIMATIONS		;VA A LA ROUTINE D'ANIMATION DES BOBS
	BSR.W PLAY_MUSIQUE		;VA A LA ROUTINE POUR JOUER LA MUSIQUE
	BSR.W CALCUL			;VA A LA ROUTINE DE CALCUL DE TRAJECTOIRE
	BSR.W PLACEBOBS			;VA A LA ROUTINE D'AFFICHAGE DES BOBS
	BSR.W SCROLLING			;VA A LA ROUTINE DE SCROLLING
		
	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
;====================
PLACE_ADRESSE_IMAGE:

				;CHARGE ADRESSE DE L'IMAGE DANS LA COPPER LIST
	MOVE.L #ECRAN1,D0 	;MET ADRESSE DE L'IMAGE DANS D0 (MOT LONG =
				;PAR EXEMPLE $0005 0000 = D0

	PLACE2:
	
	MOVE.W D0,IMAGE_LO1	;MET $0000 DANS LO1
	SWAP D0			;INVERSE D0 = $0000 0005
	MOVE.W D0,IMAGE_HI1	;MET $0005 DANS HI1
	SWAP D0			;INVERSE D0 = $0005 0000
	ADD.L #40,D0		;AJOUTE LA LONGUEUR D'UN PLAN DANS D0
				;ET RECOMMENCE POUR LE PLAN SUIVANT
	MOVE.W D0,IMAGE_LO2
	SWAP D0
	MOVE.W D0,IMAGE_HI2
	SWAP D0
	ADD.L #40,D0
	
	MOVE.W D0,IMAGE_LO3
	SWAP D0
	MOVE.W D0,IMAGE_HI3     
	RTS
;===============================
PLACE_ADRESSE_SCROLL:

	MOVE.L #SCROLL,D0 		;IDEM POUR SCROLL
				
	MOVE.W D0,SCROLL_LO1		
	SWAP D0			
	MOVE.W D0,SCROLL_HI1		
	SWAP D0			
	ADD.L #50,D0	
				
	MOVE.W D0,SCROLL_LO2
	SWAP D0
	MOVE.W D0,SCROLL_HI2
	SWAP D0
	ADD.L #50,D0
	
	MOVE.W D0,SCROLL_LO3
	SWAP D0
	MOVE.W D0,SCROLL_HI3     
	SWAP D0
	ADD.L #50,D0

	MOVE.W D0,SCROLL_LO4
	SWAP D0
	MOVE.W D0,SCROLL_HI4     


	RTS
;====================
WAIT_BLITTER:			;ROUTINE POUR ATTENDRE QUE LE BLITTER
	BTST #14,DMACONR		;EST FINI SON PRECEDENT TRAVAIL
	BNE.S WAIT_BLITTER
	RTS
;===================
SCROLLING:			;ROUTINE DU SCROLLING
	BSR.W SEARCH_CHAR		;AFFICHE UN NOUVEAU CARACTERE
	BSR.W SCROLLTEXT		;SCROLLE LE FOND DU SCROLL
	RTS
;===================	
SCROLLTEXT:			
	LEA SCROLL,A0 			;ON POINTE A0 SUR LE FOND DU SCROLL
		
	BSR.W WAIT_BLITTER		;ON ATTEND QUE LE BLITTER EST FINI SON 
					;PRECEDENT TRAVAIL
	
	LEA SCROLL-2,A1			;ON POINTE A1 SUR 16 PIXELS AVANT 
					;LE FOND DU SCROLL. 2 = 16 PIXELS
	
	MOVE.L A0,BLTAPTH		;MET ADRESSE DE A0 DANS SOURCE BLITTER A
	MOVE.L A1,BLTDPTH		;MET ADRESSE DE A1 DANS DESTINATION BLITTER D
	MOVE.W #0,BLTAMOD  		;MET 0 DANS MODULO SOURCE A
	MOVE.W #0,BLTDMOD		;MET 0 DANS MODULO DESTINATION D
	MOVE.L #$FFFFFFFF,BLTAFWM	;MASQUE DU 1ER ET DU DERNIER MOT
	MOVE.L #$C9F00000,BLTCON0    	;MET MIMTERN ET DECALAGE DANS BLTCON0
					;$C = $F - $4 = 16 - 4 = 12
					;4 PIXELS DE DECALAGE VERS LA GAUCHE
	
					;$9 -> POUR 1 SOURCE BLITTER
					;$F0 -> MINTERM POUR COPIE DIRECTE
					;$0000 -> MIS A 0 CAR SOURCE B INITULISE	
	
	MOVE.W #(32*64*4)+25,BLTSIZE	;MET TAILLE A SCROLLER DANS BLTSIZE
					;TAILLE = (HAUTEUR * 64)+(LARGEUR/2)
	RTS
;============
SEARCH_CHAR:
	ADD.W #1,COMPT			;AJOUTE 1 AU COMPTEUR
	CMP.W #8,COMPT           	;COMPARE A 8 CAR 8 * 4 PIXELS DE DECALAGE
					;EGALE A 32 SOIT LA LARGEUR D'UNe LETTRE
	BNE.W SEARCHAR3			;SI PAS EGAL A 8 ON SORT
	MOVE.W #0,COMPT			;SI OUI ON REMET COMPTEUR A 0
					;ET ON CONTINU
	
	MOVE.L PTEXT,A0          	;MET POINTEUR TEXTE DANS A0
	CLR.L D0			;ON EFFACE CONTENU DE D0
	MOVE.B (A0),D0			;MET LE CONTENU DU POINTEUR TEXTE DANS D0
	LEA COMPTEUR_CHAR,A1		;EN POINTE A1 SUR LA TABLE DES LETTRES
	CLR.L D1			;ON EFFACE CONTENU DE D1
	MOVE.B #-1,D1			;ON MET -1 DANS D1

SEARCHAR1:
	
	ADD.B #1,D1     		;ON AJOUTE 1 A D1         
	CMP.B (A1)+,D0			;ON COMPARE LES LETTRES DE LA TABLE
					;AVEC CELLE CONTENU DANS D0
	BNE SEARCHAR1			;SI PAS LA MEME ON RECOMMENCE AVEC LA
					;LETTRE SIUVANTE DANS LA TABLE
					;SI C'EST LA MEME ON CONTINU
	MULU #4,D1              	;ON MULTIPLIE D1 PAR 4
	MOVE.L #TABLE_CHAR,A0       	;ON POINTE A0 SUR LE DEBUT DE LA TABLE
					;D'ADRESSE DES IMAGES DES LETTRES
	MOVE.L (A0,D1),A2       	;ET ON MET L'ADRESSE DE LA LETTRE DANS A2
	
	LEA SCROLL,A3			;ON POINTE A3 SUR LA POSITION SCROLL+46
	ADD.L #46,A3        		;SOIT A 46*8 = 368 PIXELS A DROITE DU 
					;COIN SUPERIEUR DROIT DU FOND DE SCROLL
					;SOIT DANS LA PARTIE INVISIBLE DU SCROLL	
	
	BSR.W WAIT_BLITTER        	;ON ATTENDS LE BLITTER	
	MOVE.L A2,BLTAPTH       	;ON MET ADRESSE DE A2 DANS SOURCE BLITTER A
	MOVE.L A3,BLTDPTH       	;ON MET ADRESSE DE A3 DANS DESTINATION BLITTER D
	
	MOVE.W #40-4,BLTAMOD  		;ON MET 40-4 DANS MODULO SOURCE A
					;CAR NOTRE LETTRE FAIT 32 PIXELS DE LARGE SOIT
					;4 MOTS (4*8=32) ET L'IMAGE QUI LA CONTIENT
					;FAIT 320 PIXELS DE LARGE SOIT 40 MOTS
		
	MOVE.W #50-4,BLTDMOD   	        ;ON MET 50-4 DANS MODULO DESTINATION D
					;CAR LE FOND DE SCROLL FAIT 400 PIXELS DE LARGE
					;SOIT 50 MOTS

	MOVE.L #$FFFFFFFF,BLTAFWM	;MASQUE DU 1ER ET DU DERNIER MOT

	MOVE.L #$09F00000,BLTCON0	;$0 -> PAS DE DECALAGE DE LA SOURCE A
					;$9 -> POUR 1 SOURCE BLITTER A
					;$F0 -> MINTERM POUR COPIE DIRECTE
	
	MOVE.W #(32*4*64)+2,BLTSIZE	;MET TAILLE A SCROLLER DANS BLTSIZE
					;TAILLE = (HAUTEUR * 64)+(LARGEUR/2)
	
	ADD.L #1,PTEXT          	;ON AJOUTE 1 AU POINTEUR DE TEXTE
	MOVE.L PTEXT,A0			;ON MET POINTEUR DE TEXTE DANS A0
	TST.B (A0)              	;SI PAS EGAL A 0
	BNE SEARCHAR3			;ON VA A SEARCHAR3
	MOVE.L #TEXT,PTEXT		;SINON ON REMET POINTEUR DE TEXTE AU DEBUT
					;DU TEXTE A SCROLLER

SEARCHAR3:
	RTS
	
	EVEN
COMPT: DC.W 0			;COMPTEUR 
PTEXT: DC.L 0			;POINTEUR DE TEXTE
;=================================================================

COMPTEUR_CHAR: DC.B 'ABCDEFGHIJ'	;TABLE DES CARACTERES
	       DC.B 'KLMNOPQRST'	;TELS QU'ILS SONT DISPOSES
	       DC.B 'UVWXYZ0123'	;DANS NOTRE IMAGE	
	       DC.B '456789@?!.'
	       DC.B '()#       '
         
	EVEN
FONT1=FONT		;ADRESSES DES LETTRES PAR LIGNES
FONT2=FONT+(1*4*32*40) 
FONT3=FONT+(2*4*32*40)
FONT4=FONT+(3*4*32*40)
FONT5=FONT+(4*4*32*40)
	EVEN 
TABLE_CHAR: 		;ADRESSES DES LETTRES

	DC.L FONT1,FONT1+4,FONT1+8,FONT1+12,FONT1+16,FONT1+20
	DC.L FONT1+24,FONT1+28,FONT1+32,FONT1+36
	DC.L FONT2,FONT2+4,FONT2+8,FONT2+12,FONT2+16,FONT2+20
	DC.L FONT2+24,FONT2+28,FONT2+32,FONT2+36
	DC.L FONT3,FONT3+4,FONT3+8,FONT3+12,FONT3+16,FONT3+20
	DC.L FONT3+24,FONT3+28,FONT3+32,FONT3+36
	DC.L FONT4,FONT4+4,FONT4+8,FONT4+12,FONT4+16,FONT4+20
	DC.L FONT4+24,FONT4+28,FONT4+32,FONT4+36
	DC.L FONT5,FONT5+4,FONT5+8,FONT5+12,FONT5+16,FONT5+20
	DC.L FONT5+24,FONT5+28,FONT5+32,FONT5+36
	EVEN

	EVEN		;TEXTE A SCROLLER

TEXT: 
	DC.B '             '
	DC.B ' QUELQUES BOBS ANIMES EN DOUBLE BUFFERING '
	DC.B ' JUSTE POUR VOIR QUE L ON PEUT AFFICHER UN NOMBRE IMPORTANT'
	DC.B ' DE BOBS SANS PROBLEMES  '
	dc.b '    ',0
fin:
;====================
	EVEN
FLAGSCREEN: DC.W 0		;POINTEUR DE L'ECRAN VISIBLE
	EVEN

CLEAR_ALL:
	CMP.W #0,FLAGSCREEN		;SI POINTEUR EST DIFFERENT DE 0
	BNE.S CE1			;VA A CE1
	BSR.W CLEAR_ALL2		;SINON VA A CLEAR_ALL2
	RTS				;RETOUR
CE1:

	CMP.W #1,FLAGSCREEN		;SI POINTEUR EST DIFFERENT DE 1
	BNE.S CE2			;VA A CE2
	BSR.s CLEAR_ALL1		;SINON VA A CLEAR_ALL2
	RTS				;RETOUR
CE2:	

RTS


CLEAR_ALL1:
	MOVE.W #0,FLAGSCREEN		;MET 0 DANS POINTEUR ECRAN

	MOVE.L #ECRAN2,D0		;PLACE ADRESSE ECRAN 2 DANS LISTE COPPER
	BSR.W PLACE2

	LEA BOBS,A0			;POINTE A0 SUR DEBUT STRUCTURE DES BOBS
	MOVE.W NBRBOBS,D0		;MET NOMBRE DES BOBS DANS D0
CPL1:
	BSR.W WAIT_BLITTER		;ATTENDS BLITTER
	LEA ECRAN1,A1			;MET ADRESSE ECRAN1 DANS A1
	ADD.W 8(A0),A1			;AJOUTE NOMBRE DE MOTS
	MOVE.L A1,BLTDPTH		;MET A1 DANS ADRESSE DESTINATION D
	MOVE.W #34,BLTDMOD   	  	;MET 40-6 DANS MODULO D
	MOVE.L #$FFFFFFFF,$DFF044 	;PAS DE MASQUE 1ER ET DERNIER MOT
	MOVE.L #$01000000,BLTCON0	;PAS DE SOURCE     1 DESTINATION
					;MINTERM A 0 POUR EFFACEMENT	
	MOVE.W #(32*3*64)+(6/2),BLTSIZE	;MET TAILLE TRANSFERT POUR DEMARRER BLITTER
	ADD.W #40,A0			;AJOUTE 40 MOTS AU POINTEUR A0
					;POUR RETROUVER DEBUT PROCHAIN BOB
	DBF D0,CPL1			;DECREMENTE D0   RETOURNE A CPL1
					;SI D0 N'EST PAS EGAL A 0                   
	RTS
;==============================
CLEAR_ALL2:
	MOVE.W #1,FLAGSCREEN			;MET 0 DANS POINTEUR ECRAN

	MOVE.L #ECRAN1,D0		;CHARGE ADRESSE ECRAN 1 DANS
	BSR.W PLACE2			;LA LISTE COPPER           

	LEA BOBS,A0			;POINTE A0 SUR DEBUT STRUCTURE DES BOBS
	MOVE.W NBRBOBS,D0		;MET NOMBRE DES BOBS DANS D0
CPL2:				
	BSR.W WAIT_BLITTER		;ATTENDS BLITTER
	LEA ECRAN2,A1			;MET ADRESSE ECRAN2 DANS A1
	ADD.W 8(A0),A1			;AJOUTE NOMBRE DE MOTS
	MOVE.L A1,BLTDPTH		;MET A1 DANS ADRESSE DESTINATION D
	MOVE.W #34,BLTDMOD		;MET 40-6 DANS MODULO D
	MOVE.L #$FFFFFFFF,$DFF044	;PAS DE MASQUE 1ER ET DERNIER MOT
	MOVE.L #$01000000,BLTCON0	;PAS DE SOURCE     1 DESTINATION
					;MINTERM A 0 POUR EFFACEMENT	
	MOVE.W #(32*3*64)+(6/2),BLTSIZE	;MET TAILLE TRANSFERT POUR DEMARRER BLITTER
	ADD.W #40,A0			;AJOUTE 40 MOTS AU POINTEUR A0
					;POUR RETROUVER DEBUT PROCHAIN BOB
	DBF D0,CPL2			;DECREMENTE D0   RETOURNE A CPL1
	RTS				;SI D0 N'EST PAS EGAL A 0                   
;======================
PLACEBOBS:
	LEA BOBS,A1			;POINTE A1 SUR DEBUT STRUCTURE DES BOBS
	
	MOVE.W NBRBOBS,D6		;MET NOMBRE DE BOBS DANS D6

PLACEBOBBIS:
	MOVE.W 4(A1),8(A1)		;MET NOMBRE DE MOTS DANS BOB+38
					;POUR EFFECEMNT ULTERIEUR
	MOVE.W (A1),D1			;MET POSITION X DANS D1
	sub.w #16,d1			;SOUSTRAIT 16 A X  (POUR CENTRER ANIM)
	MOVE.W 2(A1),D3			;MET POSITION Y DANS D3
	MULU #120,D3			;MULTIPLIE PAR 40 MOTS * A PLANS
	MOVE.W	D1,D2			;MET X DANS D2
	AND.W	#$FFF0,D1		;MASQUE 4 BITS INFERIEUR
	LSR.W	#3,D1			;DIVISE PAR 8
	ADD.W D3,D1			;AJOUTE D3 A D1 POUR AVOIR LE NOMBRE DE
					;MOTS A AJOUTER AU DEBUT DE L'IMAGE
	
	AND.W	#$000F,D2		;MASQUE 12 BITS SUPERIEURS
	MULU	#$1000,D2		;MULTIPLIE PAR $1000
					;POUR OBTENIR DECALAGE A DROITE
	MOVE.W D1,4(A1)			;MET NOMBRE DE MOTS DANS BOB+4
	MOVE.W D2,6(A1)			;MET DECALAGE DANS BOB+6
	
	CMP.W #0,FLAGSCREEN		;SI POINTEUR ECRAN N'EST PAS EGAL A 0
	BNE.S DADA			;VA A DADA 
	LEA ECRAN1,A4			;MET ADRESSE ECRAN 1 DANS A4         
DADA:
	CMP.W #1,FLAGSCREEN		;SI POINTEUR ECRAN N'EST PAS EGAL A 0
	BNE.S DADA2			;VA A DADA2 
	LEA ECRAN2,A4			;MET ADRESSE ECRAN 2 DANS A4         
DADA2:

	ADD.W 4(A1),A4			;AJOUTE NOMBRE DE MOTS A A4
	MOVE.W 10(A1),D0		;MET BOB+10 DANS D0
	LSL.W #2,D0			;MULTIPLIE PAR 4
	LEA TABLEBOBS,A2		;POINTE A2 SUR DEBUT TABLE IMAGE DES BOBS
	MOVE.L (A2,D0.W),A3		;MET LA N IEME VALEUR DE LA TABLE DANS A3
	LEA TABLEMASKBOBS,A2		;POINTE A2 SUR DEBUT TABLE MASK DES BOBS
	MOVE.L (A2,D0.W),A5		;MET LA N IEME VALEUR DE LA TABLE DANS A3
					;D0 ETANT EGAL A N


	BSR.W WAIT_BLITTER		;ATTENDS BLITTER
	MOVE.L A5,BLTAPTH		;MET ADRESSE MASK DU BOB DANS POINTEUR SOURCE A
	MOVE.L A3,BLTBPTH		;MET ADRESSE IMAGE DU BOB DANS POINTEUR SOURCE B
	MOVE.L A4,BLTCPTH		;MET ADRESSE POSITION DU BOB DANS SOURCE C
	MOVE.L A4,BLTDPTH		;MET ADRESSE POSITION DU BOB DANS DEST D

	MOVE.W #34,BLTAMOD		;MET 40 - 6 DANS MODULO SOURCE A
	MOVE.W #34,BLTBMOD		;MET 40 - 6 DANS MODULO SOURCE B
	MOVE.W #34,BLTCMOD		;MET 40 - 6 DANS MODULO SOURCE C
	MOVE.W #34,BLTDMOD		;MET 40 - 6 DANS MODULO DESTINATION D
	
	MOVE.L #$FFFF0000,d2		;MET MASQUE DERNIER MOT DANS D2 
	MOVE.W 6(A1),D3			;MET DECALAGE DANS D3
	ROR.L D3,D2			;DECALE D3 FOIS LE MASQUE
	MOVE.L D2,$DFF044 		;ET LE PLACE DANS REGISTRE MASQUE
	
	MOVE.W 6(A1),BLTCON1		;MET DECALAGE DANS BLTCON1
	MOVE.W #$0FCA,D4		;$F = 3 SOURCE + DESTINATION  ACTIVES
					;$CA = MINTERM POUR COPIE AVEC DECOUPAGE
	ADD.W 6(A1),D4			;AJOUTE LE DECALAGE
	MOVE.W D4,BLTCON0		;MET LE RESULTAT DANS BLTCON0
	
	MOVE.W #(32*3*64)+(6/2),BLTSIZE	;CHARGE TAILLE POUR DEMARRER BLITTER
	
KTM:
	ADD.W #40,A1			;AJOUTE LONGUEUR STRUCTURE BOB
	DBF D6,PLACEBOBBIS		;DECREMENT D6
					;RETOURNE A PLACEBOBBIS SI D6 EST DIFFERENT DE 0
	
	RTS

;====================
	EVEN
;BOB01:
;DC.W 0	; X			;0  POSITION X
;DC.W 0	; Y			;2  POSITION Y
;DC.W 0	;MOTS EN +		;4  NOMBRE DE MOTS DEPUIS DEBUT IMAGE
;DC.W 0	; SHIFT			;6  DECALAGE A DROITE
;DC.W 0	;			;8
;DC.W 0	;QUEL BOB?		;10 NUMERO DU BOB
;DC.W 0	;			;12
;DC.W 0	;			;14
;DC.W 0 ;PT ANIM		;16 POINTEUR ANIMATION
;DC.L 0	;SEQUENCE ANIM		;18 SEQUENCE ANIMATION UTILISEE
;	;			;
;DC.W 0 ;			;22
;DC.W 0 ;			;24
;DC.W 0 ;			;26
;DC.W 0 ;			;28
;DC.W 0 ;			;30
;DC.W 0 ;			;32
;DC.W 0 ;			;34
;DC.W 0 ;			;36
;DC.W 0 ;ANCIEN MOTS EN PLUS	;38 PRECEDENT NOMBRE DE MOTS DEPUIS DEBUT IMAGE

BOBS:
BOB01:	DC.W  20, 54,0,0,0, 0,1,0,0
	DC.L ANIM1
	DC.W 32,6,0,0,0,0,0,0,0
BOB02: 	DC.W  30, 54,0,0, 0, 0,1,0,0
	DC.L ANIM2
	DC.W 32,6,1,0,0,0,0,0,0
BOB03: 	DC.W  50, 54,0,0, 1, 0,1,0,0
	DC.L ANIM3
	DC.W 32,6,1,0,0,0,0,0,0
BOB04: 	DC.W  70, 54,0,0, 0, 0,1,0,0
	DC.L ANIM1
	DC.W 32,6,1,0,0,0,0,0,0
BOB05: 	DC.W  90, 54,0,0,-1, 0,1,0,0
	DC.L ANIM2
	DC.W 32,6,1,0,0,0,0,0,0
BOB06: 	DC.W 110, 54,0,0,-1, 0,1,0,0
	DC.L ANIM3
	DC.W 32,6,2,0,0,0,0,0,0
BOB07: 	DC.W 115, 54,0,0, 1, 0,1,0,0
	DC.L ANIM1
	DC.W 32,6,1,0,0,0,0,0,0
BOB08: DC.W 120, 54,0,0, 1, 0,1,0,0
	DC.L ANIM2
	DC.W 32,6,2,0,0,0,0,0,0
BOB09: 	DC.W 125, 54,0,0, 1, 0,1,0,0	
	DC.L ANIM3
	DC.W 32,6,1,0,0,0,0,0,0
BOB10: 	DC.W 150, 54,0,0,-1, 0,1,0,0
	DC.L ANIM1
	DC.W 32,6,1,0,0,0,0,0,0
BOB11: 	DC.W 160, 54,0,0, 1, 0,1,0,0
	DC.L ANIM2
	DC.W 32,6,2,0,0,0,0,0,0
BOB12: 	DC.W 180, 54,0,0, 1, 0,1,0,0
	DC.L ANIM3
	DC.W 32,6,1,0,0,0,0,0,0
BOB13: 	DC.W 180, 54,0,0, 1, 0,1,0,0
	DC.L ANIM1
	DC.W 32,6,1,0,0,0,0,0,0
BOB14: 	DC.W 180, 54,0,0, 1, 0,1,0,0
	DC.L ANIM2
	DC.W 32,6,1,0,0,0,0,0,0
BOB15: 	DC.W 180, 54,0,0, 1, 0,1,0,0
	DC.L ANIM3
	DC.W 32,6,1,0,0,0,0,0,0
BOB16: 	DC.W 180, 54,0,0, 1, 0,1,0,0
	DC.L ANIM1
	DC.W 32,6,1,0,0,0,0,0,0

EVEN
TABLEBOBS: 		;TABLE DES ADRESSE DE TOUS LES BOBS DANS L'IMAGE DES BOBS 
	DC.L SPR		;1ER BOB A LA POSITION X=0 ET Y=0	
	DC.L SPR+4		;2IEME BOB A LA POSITION X=32 ET Y=0	
	DC.L SPR+8		;ETC.. ETC...                                             	
	DC.L SPR+12	
	DC.L SPR+16		
	DC.L SPR+20		
	DC.L SPR+24	
	DC.L SPR+28	
	DC.L SPR+32	
	DC.L SPR+36	

	DC.L SPR+(40*32*3)			
	DC.L SPR+(40*32*3)+4			
	DC.L SPR+(40*32*3)+8		
	DC.L SPR+(40*32*3)+12	
	DC.L SPR+(40*32*3)+16		
	DC.L SPR+(40*32*3)+20		
	DC.L SPR+(40*32*3)+24	
	DC.L SPR+(40*32*3)+28	
	DC.L SPR+(40*32*3)+32	
	DC.L SPR+(40*32*3)+36
		
	DC.L SPR+(40*32*6)			
	DC.L SPR+(40*32*6)+4			
	DC.L SPR+(40*32*6)+8		
	DC.L SPR+(40*32*6)+12	
	DC.L SPR+(40*32*6)+16			
	DC.L SPR+(40*32*6)+20		
	DC.L SPR+(40*32*6)+24	
	DC.L SPR+(40*32*6)+28	
	DC.L SPR+(40*32*6)+32	
	DC.L SPR+(40*32*6)+36	

	DC.L SPR+(40*32*9)			
	DC.L SPR+(40*32*9)+4			
	DC.L SPR+(40*32*9)+8		
	DC.L SPR+(40*32*9)+12	
	DC.L SPR+(40*32*9)+16		
	DC.L SPR+(40*32*9)+20		
	DC.L SPR+(40*32*9)+24	
	DC.L SPR+(40*32*9)+28	
	DC.L SPR+(40*32*9)+32	
	DC.L SPR+(40*32*9)+36	

	DC.L SPR+(40*32*12)			
	DC.L SPR+(40*32*12)+4			
	DC.L SPR+(40*32*12)+8		
	DC.L SPR+(40*32*12)+12	
	DC.L SPR+(40*32*12)+16		
	DC.L SPR+(40*32*12)+20		
	DC.L SPR+(40*32*12)+24	
	DC.L SPR+(40*32*12)+28	
	DC.L SPR+(40*32*12)+32	
	DC.L SPR+(40*32*12)+36	

	DC.L SPR+(40*32*15)			
	DC.L SPR+(40*32*15)+4			
	DC.L SPR+(40*32*15)+8		
	DC.L SPR+(40*32*15)+12	
	DC.L SPR+(40*32*15)+16		
	DC.L SPR+(40*32*15)+20		
	DC.L SPR+(40*32*15)+24	
	DC.L SPR+(40*32*15)+28	
	DC.L SPR+(40*32*15)+32	
	DC.L SPR+(40*32*15)+36	

	DC.L SPR+(40*32*18)			
	DC.L SPR+(40*32*18)+4			
	DC.L SPR+(40*32*18)+8		
	DC.L SPR+(40*32*18)+12	
	DC.L SPR+(40*32*18)+16		
	DC.L SPR+(40*32*18)+20		
	DC.L SPR+(40*32*18)+24	
	DC.L SPR+(40*32*18)+28	
	DC.L SPR+(40*32*18)+32	
	DC.L SPR+(40*32*18)+36	

	DC.L SPR+(40*32*21)			
	DC.L SPR+(40*32*21)+4			
	DC.L SPR+(40*32*21)+8		
	DC.L SPR+(40*32*21)+12	
	DC.L SPR+(40*32*21)+16		
	DC.L SPR+(40*32*21)+20		
	DC.L SPR+(40*32*21)+24	
	DC.L SPR+(40*32*21)+28	
	DC.L SPR+(40*32*21)+32	
	DC.L SPR+(40*32*21)+36	
	
	EVEN
TABLEMASKBOBS: 			;TABLE DES ADRESSE DE TOUS LES MASQUES DES BOBS DANS L'IMAGE DES BOBS 
	DC.L MSPR			;1ER MASQUE A LA POSITION X=0 ET Y=0	
	DC.L MSPR+4			;2IEME MASQUE A LA POSITION X=32 ET Y=0	
	DC.L MSPR+8			;ETC.. ETC...                                             
	DC.L MSPR+12	
	DC.L MSPR+16		
	DC.L MSPR+20		
	DC.L MSPR+24	
	DC.L MSPR+28	
	DC.L MSPR+32	
	DC.L MSPR+36	
	
	DC.L MSPR+(40*32*3)			
	DC.L MSPR+(40*32*3)+4			
	DC.L MSPR+(40*32*3)+8		
	DC.L MSPR+(40*32*3)+12	
	DC.L MSPR+(40*32*3)+16		
	DC.L MSPR+(40*32*3)+20		
	DC.L MSPR+(40*32*3)+24	
	DC.L MSPR+(40*32*3)+28	
	DC.L MSPR+(40*32*3)+32	
	DC.L MSPR+(40*32*3)+36
		
	DC.L MSPR+(40*32*6)			
	DC.L MSPR+(40*32*6)+4			
	DC.L MSPR+(40*32*6)+8		
	DC.L MSPR+(40*32*6)+12	
	DC.L MSPR+(40*32*6)+16		
	DC.L MSPR+(40*32*6)+20		
	DC.L MSPR+(40*32*6)+24	
	DC.L MSPR+(40*32*6)+28	
	DC.L MSPR+(40*32*6)+32	
	DC.L MSPR+(40*32*6)+36	
	
	DC.L MSPR+(40*32*9)			
	DC.L MSPR+(40*32*9)+4			
	DC.L MSPR+(40*32*9)+8		
	DC.L MSPR+(40*32*9)+12	
	DC.L MSPR+(40*32*9)+16		
	DC.L MSPR+(40*32*9)+20		
	DC.L MSPR+(40*32*9)+24	
	DC.L MSPR+(40*32*9)+28	
	DC.L MSPR+(40*32*9)+32	
	DC.L MSPR+(40*32*9)+36	
	
	DC.L MSPR+(40*32*12)			
	DC.L MSPR+(40*32*12)+4			
	DC.L MSPR+(40*32*12)+8		
	DC.L MSPR+(40*32*12)+12	
	DC.L MSPR+(40*32*12)+16		
	DC.L MSPR+(40*32*12)+20		
	DC.L MSPR+(40*32*12)+24	
	DC.L MSPR+(40*32*12)+28	
	DC.L MSPR+(40*32*12)+32	
	DC.L MSPR+(40*32*12)+36	
	
	DC.L MSPR+(40*32*15)			
	DC.L MSPR+(40*32*15)+4			
	DC.L MSPR+(40*32*15)+8		
	DC.L MSPR+(40*32*15)+12	
	DC.L MSPR+(40*32*15)+16		
	DC.L MSPR+(40*32*15)+20		
	DC.L MSPR+(40*32*15)+24	
	DC.L MSPR+(40*32*15)+28	
	DC.L MSPR+(40*32*15)+32	
	DC.L MSPR+(40*32*15)+36	
	
	DC.L MSPR+(40*32*18)			
	DC.L MSPR+(40*32*18)+4			
	DC.L MSPR+(40*32*18)+8		
	DC.L MSPR+(40*32*18)+12	
	DC.L MSPR+(40*32*18)+16		
	DC.L MSPR+(40*32*18)+20		
	DC.L MSPR+(40*32*18)+24	
	DC.L MSPR+(40*32*18)+28	
	DC.L MSPR+(40*32*18)+32	
	DC.L MSPR+(40*32*18)+36	
	
	DC.L MSPR+(40*32*21)			
	DC.L MSPR+(40*32*21)+4			
	DC.L MSPR+(40*32*21)+8		
	DC.L MSPR+(40*32*21)+12	
	DC.L MSPR+(40*32*21)+16		
	DC.L MSPR+(40*32*21)+20		
	DC.L MSPR+(40*32*21)+24	
	DC.L MSPR+(40*32*21)+28	
	DC.L MSPR+(40*32*21)+32	
	DC.L MSPR+(40*32*21)+36	
		
	EVEN

;SEQUENCES ANIMATION
;LES SEQUENCES D'ANIMATION SONT CONSTITUEES DES NUMEROS DES BOBS
;DE NOTRE IMAGE GLOBALE DES BOBS
;ELLES SE TERMINENT PAR -1

ANIM1: DC.W 2,12,22,32,42,52,62,-1 	
ANIM2: DC.W 0,10,20,30,40,50,60,50,40,30,20,10,0,-1
ANIM3: DC.W 1,11,21,31,41,51,61,51,41,31,21,11,1,-1

	EVEN
;==========================
	EVEN
CCAB: DC.W 0
FLB: DC.W 0
TXBOB: DC.W 400
TTABLE: DC.W 0
NBRBOBS: DC.W 10 
;==========================
CALCUL:				;ROUTINE DE CALCUL DE TRAJECTOIRE
	SUBQ.W #1,TXBOB			;SERVANT SIMPLEMENT D'EXEMPLE
	CMP.W #-300,TXBOB
	BNE.S TTXBOB
	MOVE.W #400,TXBOB
	
	CMP.W #11*2*11,TTABLE
	BNE.S PASZERO
	MOVE.W #0,TTABLE
PASZERO:
	LEA CBX1,A0
	LEA CBY1,A1
	LEA BBTABLEX,A2
	ADD.W TTABLE,A2
	LEA BBTABLEY,A3
	ADD.W TTABLE,A3
	MOVE.W NBRBOBS,D6
REMETTABLE:
	MOVE.W (A2)+,(A0)+
	MOVE.W (A3)+,(A1)+
	DBF D6,REMETTABLE
	ADD.W #11*2,TTABLE
TTXBOB:
	MOVE.W #0,D6


	LEA TABLEX,A2
	LEA TABLEY,A3
	LEA BOBS,A0
	
BX1:
	ADDQ #2,CBX1
	MOVE.W CBX1,D0
	CMP.W #-1,(A2,D0.W)
	BNE.S ABX1
	CLR CBX1
	CLR CCAB
	MOVE.W #1,FLB
	BRA.S BX1
ABX1:
	MOVE.W (A2,D0.W),(A0)
	ADD.W D6,(A0)
BY1:
	ADDQ #2,CBY1
	MOVE.W CBY1,D0
	CMP.W #-1,(A3,D0.W)
	BNE.S ABY1
	CLR CBY1
	BRA.S BY1
ABY1:
	MOVE.W (A3,D0.W),2(A0)


	LEA 40(A0),A0
BX2:
	ADDQ #2,CBX2
	MOVE.W CBX2,D0
	CMP.W #-1,(A2,D0.W)
	BNE.S ABX2
	CLR CBX2
	BRA.S BX2
ABX2:
	MOVE.W (A2,D0.W),(A0)
	ADD.W D6,(A0)
BY2:
	ADDQ #2,CBY2
	MOVE.W CBY2,D0
	CMP.W #-1,(A3,D0.W)
	BNE.S ABY2
	CLR CBY2
	BRA.S BY2
ABY2:
	MOVE.W (A3,D0.W),2(A0)

	lea 40(a0),a0
bx3:
	addQ #2,cbx3
	move.w cbx3,d0
	cmp.w #-1,(a2,d0.w)
	bne.s abx3
	clr cbx3
	bra.s bx3
abx3:
	move.w (a2,d0.w),(a0)
	ADD.W D6,(A0)
by3:
	addQ #2,cby3
	move cby3,d0
	cmp.w #-1,(a3,d0.w)
	bne.s aby3
	clr cby3
	bra.s by3
aby3:
	move.w (a3,d0.w),2(a0)
	
	lea 40(a0),a0
bx4:
	addQ #2,cbx4
	move.w cbx4,d0
	cmp.w #-1,(a2,d0.w)
	bne.s abx4
	clr cbx4
	bra.s bx4
abx4:
	move.w (a2,d0.w),(a0)
	ADD.W D6,(A0)
by4:
	addQ #2,cby4
	move.w cby4,d0
	cmp.w #-1,(a3,d0.w)
	bne.s aby4
	clr cby4
	bra.s by4
aby4:
	move.w (a3,d0.w),2(a0)
	
	lea 40(a0),a0
bx5:
	addQ #2,cbx5
	move.w cbx5,d0
	cmp.w #-1,(a2,d0.w)
	bne.s abx5
	clr cbx5
	bra.s bx5
abx5:
	move.w (a2,d0.w),(a0)
	ADD.W D6,(A0)
by5:
	addQ #2,cby5
	move.w cby5,d0
	cmp.w #-1,(a3,d0.w)
	bne.s aby5
	clr cby5
	bra.s by5
aby5:
	move.w (a3,d0.w),2(a0)
	
	lea 40(a0),a0
bx6:
	addQ #2,cbx6
	move.w cbx6,d0
	cmp.w #-1,(a2,d0.w)
	bne.s abx6
	clr cbx6
	bra.s bx6
abx6:
	move.w (a2,d0.w),(a0)
	ADD.W D6,(A0)
by6:
	addQ #2,cby6
	move.w cby6,d0
	cmp.w #-1,(a3,d0.w)
	bne.s aby6
	clr cby6
	bra.s by6
aby6:
	move.w (a3,d0.w),2(a0)
	
	lea 40(a0),a0
bx7:
	addQ #2,cbx7
	move.w cbx7,d0
	cmp.w #-1,(a2,d0.w)
	bne.s abx7
	clr cbx7
	bra.s bx7
abx7:
	move.w (a2,d0.w),(a0)
	ADD.W D6,(A0)
by7:
	addQ #2,cby7
	move.w cby7,d0
	cmp.w #-1,(a3,d0.w)
	bne.s aby7
	clr cby7
	bra.s by7
aby7:
	move.w (a3,d0.w),2(a0)
	
	lea 40(a0),a0
bx8:
	addQ #2,cbx8
	move.w cbx8,d0
	cmp.w #-1,(a2,d0.w)
	bne.s abx8
	clr cbx8
	bra.s bx8
abx8:
	move.w (a2,d0.w),(a0)
	ADD.W D6,(A0)
by8:
	addQ #2,cby8
	move.w cby8,d0
	cmp.w #-1,(a3,d0.w)
	bne.s aby8
	clr cby8
	bra.s by8
aby8:
	move.w (a3,d0.w),2(a0)
	
	lea 40(a0),a0
bx9:
	addQ #2,cbx9
	move.w cbx9,d0
	cmp.w #-1,(a2,d0.w)
	bne.s abx9
	clr cbx9
	bra.s bx9
abx9:
	move.w (a2,d0.w),(a0)
	ADD.W D6,(A0)
by9:
	addQ #2,cby9
	move.w cby9,d0
	cmp.w #-1,(a3,d0.w)
	bne.s aby9
	clr cby9
	bra.s by9
aby9:
	move.w (a3,d0.w),2(a0)
	
	lea 40(a0),a0
bx10:
	addQ #2,cbx10
	move.w cbx10,d0
	cmp.w #-1,(a2,d0.w)
	bne.s abx10
	clr cbx10
	bra.s bx10
abx10:
	move.w (a2,d0.w),(a0)
	ADD.W D6,(A0)
by10:
	addQ #2,cby10
	move.w cby10,d0
	cmp.w #-1,(a3,d0.w)
	bne.s aby10
	clr cby10
	bra.s by10
aby10:
	move.w (a3,d0.w),2(a0)
	
	lea 40(a0),a0
bx11:
	addQ #2,cbx11
	move.w cbx11,d0
	cmp.w #-1,(a2,d0.w)
	bne.s abx11
	clr cbx11
	bra.s bx11
abx11:
	move.w (a2,d0.w),0(a0)
	ADD.W D6,(A0)
by11:
	addQ #2,cby11
	move.w cby11,d0
	cmp.w #-1,(a3,d0.w)
	bne.s aby11
	clr cby11
	bra.s by11
aby11:
	move.w (a3,d0.w),2(a0)
	
	rts

cbx1: dc.w 4*0
cbx2: dc.w 4*2
cbx3: dc.w 4*4
cbx4: dc.w 4*6
cbx5: dc.w 4*8
cbx6: dc.w 4*10
cbx7: dc.w 4*12
cbx8: dc.w 4*14
cbx9: dc.w 4*16
cbx10:dc.w 4*18
cbx11:dc.w 4*20

cby1: dc.w 4*0
cby2: dc.w 4*2
cby3: dc.w 4*4
cby4: dc.w 4*6
cby5: dc.w 4*8
cby6: dc.w 4*10
cby7: dc.w 4*12
cby8: dc.w 4*14
CBY9: DC.W 4*16
cby10:dc.w 4*18
cby11:dc.w 4*20
  
	even
;=========================================
tablex:
	dc.w $104,$104,$104,$103,$102,$101,$100,$FE,$FC,$FA,$F8
	dc.w $F5,$F3,$F0,$EC,$E9,$E6,$E2,$DE,$DA,$D6,$D2,$CD,$C9
	dc.w $C4,$C0,$BB,$B6,$B1,$AC,$A7,$A2,$9D,$98,$93,$8E,$89
	dc.w $84,$80,$7B,$76,$72,$6E,$69,$65,$61,$5D,$5A,$56,$53
	dc.w $50,$4D,$4A,$48,$46,$44,$42,$40,$3F,$3E,$3D,$3C,$3C
	dc.w $3C,$3C,$3D,$3D,$3E,$3F,$41,$42,$44,$46,$49,$4B,$4E
	dc.w $51,$54,$57,$5B,$5F,$62,$67,$6B,$6F,$73,$78,$7D,$81
	dc.w $86,$8B,$90,$95,$9A,$9F,$A4,$A9,$AE,$B3,$B8,$BC,$C1
	dc.w $C6,$CA,$CF,$D3,$D7,$DC,$DF,$E3,$E7,$EA,$EE,$F1,$F3
	dc.w $F6,$F9,$FB,$FD,$FF,$100,$101,$102,$103,$104,$104
	
	
	dc.w $104,$104,$104,$103,$102,$101,$100,$FE,$FC,$FA,$F8,$F5,$F3
	dc.w $F0,$EC,$E9,$E6,$E2,$DE,$DA,$D6,$D2,$CD,$C9,$C4,$C0,$BB,$B6
	dc.w $B1,$AC,$A7,$A2,$9D,$98,$93,$8E,$89,$84,$80,$7B,$76,$72,$6E
	dc.w $69,$65,$61,$5D,$5A,$56,$53,$50,$4D,$4A,$48,$46,$44,$42,$40
	dc.w $3F,$3E,$3D,$3C,$3C,$3C,$3C,$3D,$3D,$3E,$3F,$41,$42,$44,$46
	dc.w $49,$4B,$4E,$51,$54,$57,$5B,$5F,$62,$67,$6B,$6F,$73,$78,$7D
	dc.w $81,$86,$8B,$90,$95,$9A,$9F,$A4,$A9,$AE,$B3,$B8,$BC,$C1,$C6
	dc.w $CA,$CF,$D3,$D7,$DC,$DF,$E3,$E7,$EA,$EE,$F1,$F3,$F6,$F9,$FB
	dc.w $FD,$FF,$100,$101,$102,$103,$104,$104
	
	dc.w $104,$104,$104,$103,$102,$101,$100,$FE,$FC,$FA,$F8,$F5,$F3
	dc.w $F0,$EC,$E9,$E6,$E2,$DE,$DA,$D6,$D2,$CD,$C9,$C4,$C0,$BB,$B6
	dc.w $B1,$AC,$A7,$A2,$9D,$98,$93,$8E,$89,$84,$80,$7B,$76,$72,$6E
	dc.w $69,$65,$61,$5D,$5A,$56,$53,$50,$4D,$4A,$48,$46,$44,$42,$40
	dc.w $3F,$3E,$3D,$3C,$3C,$3C,$3C,$3D,$3D,$3E,$3F,$41,$42,$44,$46
	dc.w $49,$4B,$4E,$51,$54,$57,$5B,$5F,$62,$67,$6B,$6F,$73,$78,$7D
	dc.w $81,$86,$8B,$90,$95,$9A,$9F,$A4,$A9,$AE,$B3,$B8,$BC,$C1,$C6
	dc.w $CA,$CF,$D3,$D7,$DC,$DF,$E3,$E7,$EA,$EE,$F1,$F3,$F6,$F9,$FB
	dc.w $FD,$FF,$100,$101,$102,$103,$104,$104
	
	dc.w $104,-1
	
	
tabley:

	dc.w $64,$66,$69,$6B,$6E,$70,$73,$75,$77,$7A,$7C,$7E,$80,$82
	dc.w $84,$86,$88,$8A,$8B,$8D,$8E,$8F,$91,$92,$93,$93,$94,$95
	dc.w $95,$96,$96,$96,$96,$96,$96,$95,$95,$94,$93,$92,$91,$90
	dc.w $8F,$8E,$8C,$8B,$89,$88,$86,$84,$82,$80,$7E,$7C,$79,$77
	dc.w $75,$72,$70,$6E,$6B,$69,$66,$64,$61,$5F,$5C,$5A,$57,$55
	dc.w $52,$50,$4E,$4C,$4A,$47,$45,$43,$42,$40,$3E,$3D,$3B,$3A
	dc.w $38,$37,$36,$35,$34,$34,$33,$33,$32,$32,$32,$32,$32,$32
	dc.w $33,$33,$34,$35,$36,$37,$38,$39,$3A,$3C,$3D,$3F,$41,$43
	dc.w $44,$46,$48,$4B,$4D,$4F,$51,$54,$56,$58,$5B,$5D,$60,$62
	
	dc.w $64,$66,$69,$6B,$6E,$70,$73,$75,$77,$7A,$7C,$7E,$80,$82
	dc.w $84,$86,$88,$8A,$8B,$8D,$8E,$8F,$91,$92,$93,$93,$94,$95
	dc.w $95,$96,$96,$96,$96,$96,$96,$95,$95,$94,$93,$92,$91,$90
	dc.w $8F,$8E,$8C,$8B,$89,$88,$86,$84,$82,$80,$7E,$7C,$79,$77
	dc.w $75,$72,$70,$6E,$6B,$69,$66,$64,$61,$5F,$5C,$5A,$57,$55
	dc.w $52,$50,$4E,$4C,$4A,$47,$45,$43,$42,$40,$3E,$3D,$3B,$3A
	dc.w $38,$37,$36,$35,$34,$34,$33,$33,$32,$32,$32,$32,$32,$32
	dc.w $33,$33,$34,$35,$36,$37,$38,$39,$3A,$3C,$3D,$3F,$41,$43
	dc.w $44,$46,$48,$4B,$4D,$4F,$51,$54,$56,$58,$5B,$5D,$60,$62
	
	
	dc.w $64,$69,$6E,$73,$77,$7C,$80,$84,$88,$8B,$8E,$91,$93,$94
	dc.w $95,$96,$96,$96,$95,$93,$91,$8F,$8C,$89,$86,$82,$7E,$79
	dc.w $75,$70,$6B,$66,$61,$5C,$57,$52,$4E,$4A,$45,$42,$3E,$3B
	dc.w $38,$36,$34,$33,$32,$32,$32,$33,$34,$36,$38,$3A,$3D,$41
	dc.w $44,$48,$4D,$51,$56,$5B,$60,$65,$6A,$6F,$74,$78,$7D,$81
	dc.w $85,$88,$8C,$8F,$91,$93,$94,$95,$96,$96,$95,$94,$93,$91
	dc.w $8F,$8C,$89,$85,$81,$7D,$79,$74,$6F,$6A,$65,$60,$5B,$56
	dc.w $52,$4D,$49,$45,$41,$3E,$3B,$38,$36,$34,$33,$32,$32,$32
	dc.w $33,$34,$36,$38,$3B,$3E,$41,$45,$49,$4E,$52,$57,$5C,$61
	
	dc.w $62, -1
	
	
bbtablex:
	dc.w   0, 10, 20, 30, 40, 50, 60, 70, 80, 90,100
	dc.w   0, 10, 20, 30, 40, 50, 60, 70, 80, 90,100
	dc.w 150,160,170,180,190,200,190,180,170,160,150
	dc.w   0, 20, 40, 60, 80,100,120,140,160,180,200
	dc.w   0,  6, 10, 16, 20, 26, 30, 36, 40, 46, 50
	dc.w   0,  2,  4,  6,  8, 10, 12, 14, 16, 18, 20
	dc.w   0, 22, 44, 66, 88,110,132,154,176,198,220
	dc.w   0, 10, 20, 30, 40, 50, 60, 70, 80, 90,100
	dc.w   0, 10, 20, 30, 40,120,130,140,150,160,150
	dc.w   0,  0, 20, 20, 40, 40, 60, 60, 80, 80,100
	dc.w   0,200, 10,190, 20,180, 30,170, 40,160, 50
	
bbtabley:
	dc.w   0, 10, 20, 30, 40, 50, 60, 70, 80, 90,100
	dc.w 330,308,286,264,242,220,198,176,154,132,110
	dc.w 150,140,130,120,110,100, 90, 80, 70, 60, 50
	dc.w   0, 24, 46, 68, 90,112,134,156,178,200,222
	dc.w  76, 70, 66, 60, 56, 50, 46, 40, 36, 30, 26
	dc.w   0, 20, 40, 60, 80,100,120,140,160,180,200
	dc.w 300,280,260,240,220,200,180,160,140,120,100
	dc.w   0,  0, 20, 20, 40, 40, 60, 60, 80, 80,100
	dc.w   0, 10, 20, 30, 40,120,130,140,150,160,170
	dc.w   0,  8, 30, 38, 60, 68, 90, 98,120,128,150
	dc.w   0,260, 10,250, 20,240, 30,230, 40,220, 50

;====================
ANIMATIONS:			;ROUTINE D'ANIMATION DES BOBS
	ADDQ #1,CPTANIM			;BOUCLE POUR RALENTIR ANIMATION
	CMP.W #3,CPTANIM
	BNE.S FINANIM
	MOVE.W #0,CPTANIM
	
	LEA BOBS,A0			;POINTE A0 SUR DEBUT STRUCTURE DES BOBS
	MOVE.w nbrbobs,D0		;MET NOMBRE DE BOBS DANS D0
XXXX:
	
	MOVE.L 18(A0),A1		;MET SEQUENCE ANIM DANS A1
	MOVE.W 16(A0),D1		;MET POINTEUR ANIM DANS D1
	MOVE.W (A1,D1.W),10(A0)		;MET LA D1 IEME VALEUR DE LA SEQUENCE
					;DANS BOB+10  = NUMERO DU BOB UTILISE
	CMP.W #-1,10(A0)		;SI VALEUR N'EST EGALE A -1  ON CONTINU 
	BNE.S FINANIM2			;SINON ON VA A FINANIM2
	MOVE.W #0,16(A0)		;MET POINTEUR ANIM A 0
	MOVE.W #0,D1			;MET 0 DANS D1
	MOVE.W (A1,D1.W),10(A0)		;MET PREMIER VALEUR DE LA LISTE
					;DANS BOB+10 = NUMERO DU BOB UTILISE
FINANIM2:			
	ADDQ #2,16(A0)			;AJOUTE 2 AU POINTEUR ANIM
	ADD.W #40,A0			;AJOUTE 40 A A0 POUR POINTER SUR LE DEBUT
					;DE LA STRUCTURE DU BOB SUIVANT
	DBF D0,XXXX			;DECREMENTE D0. SI EGAL A 0  ON SORT
					;SINON RETOURNE A XXXX
FINANIM:
	RTS
	EVEN
CPTANIM: DC.W 0		;VALEUR SERVANT AU RALENTISSEMENT DE L'ANIMATION

;====================
	EVEN
;CETTE ROUTINE PERMET DE JOUER TOUS LES MODULES DE SOUNDTRACKERS
;DE LA VERSION 1.0 A LA VERSION 2.6  AINSI QUE CERTAINS MODULES
;NOISETRACKER.

INIT_MUSIQUE:			;INITIALISATION DE LA MUSIQUE
mt_init:move.l	mt_rdata(pc),a0
	cmp.l	#"M.K.",$438(a0)
	bne	mt_st20
	lea	mt_forst23(pc),a2
	move.l	a2,mt_forst
	bra	ok1st23
mt_st20:
	lea	mt_forst20(pc),a2
	move.l	a2,mt_forst
ok1st23:	
	add.l	(a2),a0
	moveq	#$7f,d0
	moveq	#0,d1
mt_init1:
	move.l	d1,d2
	subq.w	#1,d0
mt_init2:
	move.b	(a0)+,d1
	cmp.b	d2,d1
	bgt.s	mt_init1
	dbf	d0,mt_init2
	addq.b	#1,d2

mt_init3:
	move.l	mt_rdata(pc),a0
	lea	mt_sample1(pc),a1
	asl.l	#8,d2
	asl.l	#2,d2
	add.l	4(a2),d2
	add.l	a0,d2
	move.l	8(a2),d0
mt_init4:
	move.l	d2,(a1)+
	moveq	#0,d1
	move.w	42(a0),d1
	asl.l	#1,d1
	add.l	d1,d2
	add.l	#$1e,a0
	dbf	d0,mt_init4

	lea	mt_sample1(PC),a0
	moveq	#0,d0
mt_clear:
	move.l	(a0,d0.w),a1
	clr.l	(a1)
	addq.w	#4,d0
	cmp.w	#$7c,d0
	bne.s	mt_clear

	clr.w	$dff0a8
	clr.w	$dff0b8
	clr.w	$dff0c8
	clr.w	$dff0d8
	clr.l	mt_partnrplay
	clr.l	mt_partnote
	clr.l	mt_partpoint
	move.l	mt_rdata(pc),a1
	add.l	12(a2),a1
	move.b	(a1),mt_maxpart+1
	rts

STOP_MUSIQUE:			;ARRET DE LA MUSIQUE
mt_end:	clr.w	$dff0a8
	clr.w	$dff0b8
	clr.w	$dff0c8
	clr.w	$dff0d8
	move.w	#$f,$dff096
	rts

PLAY_MUSIQUE:			;JOUE LA MUSIQUE
mt_music:
	addq.w	#1,mt_counter
mt_cool:cmp.w	#6,mt_counter
	bne.s	mt_notsix
	clr.w	mt_counter
	bra	mt_rout2

mt_notsix:
	lea	mt_aud1temp(PC),a6
	tst.b	3(a6)
	beq.s	mt_arp1
	lea	$dff0a0,a5		
	bsr.s	mt_arprout
mt_arp1:lea	mt_aud2temp(PC),a6
	tst.b	3(a6)
	beq.s	mt_arp2
	lea	$dff0b0,a5
	bsr.s	mt_arprout
mt_arp2:lea	mt_aud3temp(PC),a6
	tst.b	3(a6)
	beq.s	mt_arp3
	lea	$dff0c0,a5
	bsr.s	mt_arprout
mt_arp3:lea	mt_aud4temp(PC),a6
	tst.b	3(a6)
	beq.s	mt_arp4
	lea	$dff0d0,a5
	bra.s	mt_arprout
mt_arp4:rts

mt_arprout:
	move.b	2(a6),d0
	and.b	#$0f,d0
	tst.b	d0
	beq	mt_arpegrt
	cmp.b	#$01,d0
	beq.s	mt_portup
	cmp.b	#$02,d0
	beq.s	mt_portdwn
	cmp.b	#$0a,d0
	beq.s	mt_volslide
	rts

mt_portup:
	moveq	#0,d0
	move.b	3(a6),d0
	sub.w	d0,22(a6)
	cmp.w	#$71,22(a6)
	bpl.s	mt_ok1
	move.w	#$71,22(a6)
mt_ok1:	move.w	22(a6),6(a5)
	rts

mt_portdwn:
	moveq	#0,d0
	move.b	3(a6),d0
	add.w	d0,22(a6)
	cmp.w	#$538,22(a6)
	bmi.s	mt_ok2
	move.w	#$538,22(a6)
mt_ok2:	move.w	22(a6),6(a5)
	rts

mt_volslide:
	moveq	#0,d0
	move.b	3(a6),d0
	lsr.b	#4,d0
	tst.b	d0
	beq.s	mt_voldwn
	add.w	d0,18(a6)
	cmp.w	#64,18(a6)
	bmi.s	mt_ok3
	move.w	#64,18(a6)
mt_ok3:	move.w	18(a6),8(a5)
	rts
mt_voldwn:
	moveq	#0,d0
	move.b	3(a6),d0
	and.b	#$0f,d0
	sub.w	d0,18(a6)
	bpl.s	mt_ok4
	clr.w	18(a6)
mt_ok4:	move.w	18(a6),8(a5)
	rts

mt_arpegrt:
	move.w	mt_counter(PC),d0
	cmp.w	#1,d0
	beq.s	mt_loop2
	cmp.w	#2,d0
	beq.s	mt_loop3
	cmp.w	#3,d0
	beq.s	mt_loop4
	cmp.w	#4,d0
	beq.s	mt_loop2
	cmp.w	#5,d0
	beq.s	mt_loop3
	rts

mt_loop2:
	moveq	#0,d0
	move.b	3(a6),d0
	lsr.b	#4,d0
	bra.s	mt_cont
mt_loop3:
	moveq	#$00,d0
	move.b	3(a6),d0
	and.b	#$0f,d0
	bra.s	mt_cont
mt_loop4:
	move.w	16(a6),d2
	bra.s	mt_endpart
mt_cont:
	add.w	d0,d0
	moveq	#0,d1
	move.w	16(a6),d1
	lea	mt_arpeggio(PC),a0
mt_loop5:
	move.w	(a0,d0),d2
	cmp.w	(a0),d1
	beq.s	mt_endpart
	addq.l	#2,a0
	bra.s	mt_loop5
mt_endpart:
	move.w	d2,6(a5)
	rts

mt_rout2:
	move.l	mt_rdata(pc),a0
	move.l	a0,a3
	add.l	#$0c,a3
	move.l	a0,a2
	move.l	mt_forst,a4
	add.l	(a4),a2
	add.l	16(a4),a0
	move.l	mt_partnrplay(PC),d0
	moveq	#0,d1
	move.b	(a2,d0),d1
	asl.l	#8,d1
	asl.l	#2,d1
	add.l	mt_partnote(PC),d1
	move.l	d1,mt_partpoint
	clr.w	mt_dmacon

	lea	$dff0a0,a5
	lea	mt_aud1temp(PC),a6
	bsr	mt_playit
	lea	$dff0b0,a5
	lea	mt_aud2temp(PC),a6
	bsr	mt_playit
	lea	$dff0c0,a5
	lea	mt_aud3temp(PC),a6
	bsr	mt_playit
	lea	$dff0d0,a5
	lea	mt_aud4temp(PC),a6
	bsr	mt_playit
	move.w	#$01f4,d0
mt_rls:	dbf	d0,mt_rls

	move.w	#$8000,d0
	or.w	mt_dmacon,d0
	move.w	d0,$dff096

	lea	mt_aud4temp(PC),a6
	cmp.w	#1,14(a6)
	bne.s	mt_voice3
	move.l	10(a6),$dff0d0
	move.w	#1,$dff0d4
mt_voice3:
	lea	mt_aud3temp(PC),a6
	cmp.w	#1,14(a6)
	bne.s	mt_voice2
	move.l	10(a6),$dff0c0
	move.w	#1,$dff0c4
mt_voice2:
	lea	mt_aud2temp(PC),a6
	cmp.w	#1,14(a6)
	bne.s	mt_voice1
	move.l	10(a6),$dff0b0
	move.w	#1,$dff0b4
mt_voice1:
	lea	mt_aud1temp(PC),a6
	cmp.w	#1,14(a6)
	bne.s	mt_voice0
	move.l	10(a6),$dff0a0
	move.w	#1,$dff0a4
mt_voice0:
	move.l	mt_partnote(PC),d0
	add.l	#$10,d0
	move.l	d0,mt_partnote
	cmp.l	#$400,d0
	bne.s	mt_stop
mt_higher:
	clr.l	mt_partnote
	addq.l	#1,mt_partnrplay
	moveq	#0,d0
	move.w	mt_maxpart(PC),d0
	move.l	mt_partnrplay(PC),d1
	cmp.l	d0,d1
	bne.s	mt_stop
	clr.l	mt_partnrplay
mt_stop:tst.w	mt_status
	beq.s	mt_stop2
	clr.w	mt_status
	bra.s	mt_higher
mt_stop2:
	rts

mt_playit:
	move.l	(a0,d1.l),(a6)
	addq.l	#4,d1
	moveq	#0,d2
	move.b	2(a6),d2
	and.b	#$f0,d2
	lsr.b	#4,d2

	move.b	(a6),d0
	and.b	#$f0,d0
	or.b	d0,d2
	tst.b	d2
	beq.s	mt_nosamplechange

	moveq	#0,d3
	lea	mt_samples(PC),a1
	move.l	d2,d4
	lsl.l	#2,d2
	mulu	#$1e,d4
	move.l	(a1,d2),4(a6)
	move.w	(a3,d4.l),8(a6)
	move.w	2(a3,d4.l),18(a6)
	move.w	4(a3,d4.l),d3
	tst.w	d3
	beq.s	mt_displace
	move.l	4(a6),d2
	add.l	d3,d2
	move.l	d2,4(a6)
	move.l	d2,10(a6)
	move.w	6(a3,d4.l),8(a6)
	move.w	6(a3,d4.l),14(a6)
	move.w	18(a6),8(a5)
	bra.s	mt_nosamplechange

mt_displace:
	move.l	4(a6),d2
	add.l	d3,d2
	move.l	d2,10(a6)
	move.w	6(a3,d4.l),14(a6)
	move.w	18(a6),8(a5)
mt_nosamplechange:
	move.w (a6),d0
	andi.w #$fff,d0			;it's the bug
	tst.w	d0			;of the real
	beq.s	mt_retrout		;source replay
	move.w	(a6),16(a6)
	move.w	20(a6),$dff096
	move.l	4(a6),(a5)
	move.w	8(a6),4(a5)
	move.w	(a6),d0
	andi.w #$fff,d0			;second bug
	move.w d0,6(a5)			;of the source
	move.w	20(a6),d0
	or.w	d0,mt_dmacon

mt_retrout:
	tst.w	(a6)
	beq.s	mt_nonewper
	move.w	(a6),22(a6)

mt_nonewper:
	move.b	2(a6),d0
	and.b	#$0f,d0
	cmp.b	#$0b,d0
	beq.s	mt_posjmp
	cmp.b	#$0c,d0
	beq.s	mt_setvol
	cmp.b	#$0d,d0
	beq.s	mt_break
	cmp.b	#$0e,d0
	beq.s	mt_setfil
	cmp.b	#$0f,d0
	beq.s	mt_setspeed
	rts

mt_posjmp:
	not.w	mt_status
	moveq	#0,d0
	move.b	3(a6),d0
	subq.b	#1,d0
	move.l	d0,mt_partnrplay
	rts

mt_setvol:
	move.b	3(a6),8(a5)
	rts

mt_break:
	not.w	mt_status
	rts

mt_setfil:
	moveq	#0,d0
	move.b	3(a6),d0
	and.b	#1,d0
	rol.b	#1,d0
	and.b	#$fd,$bfe001
	or.b	d0,$bfe001
	rts

mt_setspeed:
	move.b	3(a6),d0
	and.b	#$0f,d0
	beq.s	mt_back
	clr.w	mt_counter
	move.b	d0,mt_cool+3
mt_back:rts

mt_aud1temp:
	dcb.w	10,0
	dc.w	1
	dcb.w	2,0
mt_aud2temp:
	dcb.w	10,0
	dc.w	2
	dcb.w	2,0
mt_aud3temp:
	dcb.w	10,0
	dc.w	4
	dcb.w	2,0
mt_aud4temp:
	dcb.w	10,0
	dc.w	8
	dcb.w	2,0
mt_partnote:	dc.l	0
mt_partnrplay:	dc.l	0
mt_counter:	dc.w	0
mt_partpoint:	dc.l	0
mt_samples:	dc.l	0
mt_sample1:	dcb.l	31,0
mt_maxpart:	dc.w	0
mt_dmacon:	dc.w	0
mt_status:	dc.w	0
mt_forst:	dc.l	0

mt_forst20:	dc.l 472,600,14,470,600
mt_forst23:	dc.l $3b8,$438,$1e,$3b6,$43c
mt_arpeggio:
	dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c
	dc.w $023a,$021a,$01fc,$01e0,$01c5,$01ac,$0194,$017d
	dc.w $0168,$0153,$0140,$012e,$011d,$010d,$00fe,$00f0
	dc.w $00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097
	dc.w $008f,$0087,$007f,$0078,$0071,$0000,$0000,$0000
mt_rdata:	dc.l mt_data
;====================
	EVEN				;NOTRE LISTE COPPER
NEWCOPPER:   
	DC.W $008E,$2871,$0090,$28D1
	DC.W $0092,$0038
	DC.W $0094,$00D0
	DC.W $100,0
	DC.W $102,0
	DC.W $104,0

	DC.W	$120,0,$122,0

;COULEURS DES BOBS

	DC.W 	$0180,$0000,$0182,$0950,$0184,$000f,$0186,$0840
	DC.W 	$0188,$000c,$018A,$0f00,$018C,$0f80,$018E,$0fd0

	DC.W $2911,$FFFE,$100,0		;RESOLUTION A 0
	DC.W $108,80		;MODULO ENTRELACE =
	DC.W $10A,80		;(LARGEUR ECRAN - 40)+(NOMBRE DE PLANS - 1)* 40

		DC.W $00E0		;POINTEURS ADRESSES ECRAN D'AFFICHAGE
IMAGE_HI1:	DC.W 0	
		DC.W $00E2
IMAGE_LO1:    	DC.W 0 
		DC.W $00E4
IMAGE_HI2:    	DC.W 0	
		DC.W $00E6
IMAGE_LO2:    	DC.W 0 
		DC.W $00E8
IMAGE_HI3:    	DC.W 0	
		DC.W $00EA
IMAGE_LO3:    	DC.W 0


	DC.W $2a11,$FFFE,$100,$3200	;MET RESOLUTION  DUAL PLAYFIELD

	dc.w $ffDF,$fffe		;PASSAGE EN PAL


	DC.W $0811,$FFFE,$0100,0	;MET RESOLUTION A 0

;COULEURS DES CARACTERES DU SCROLLTEXT

	dc.w	$0180,$0000,$0182,$0fff,$0184,$0cce,$0186,$0aac
	dc.w	$0188,$077b,$018a,$055a,$018c,$0448,$018e,$0227
	dc.w	$0190,$0116,$0192,$0014,$0194,$0003,$0196,$0ccc
	dc.w	$0198,$0999,$019a,$0666,$019c,$0333,$019e,$0000

	DC.W $0092,$0030	;PASSAGE EN OVERSCAN
	DC.W $0094,$00D8

	DC.W $108,160-4		;MODULO ENTRELACE OVERSCAN
	DC.W $10A,160-4		;(LARGEUR ECRAN - 40)+(NOMBRE DE PLANS - 1)* 40 - 4
			

		DC.W $00E0
SCROLL_HI1:	DC.W 0	
		DC.W $00E2
SCROLL_LO1:	DC.W 0
		DC.W $00E4
SCROLL_HI2:	DC.W 0
		DC.W $00E6
SCROLL_LO2:	DC.W 0
		DC.W $00E8
SCROLL_HI3:	DC.W 0  
		DC.W $00EA
SCROLL_LO3:	DC.W 0
		DC.W $00EC
SCROLL_HI4:	DC.W 0
		DC.W $00EE
SCROLL_LO4:	DC.W 0

	DC.W $0911,$FFFE,$0100,$4200		;MET RESOLUTION A 4 PLANS

	DC.L $FFFFFFFE 				;FIN LISTE COPPER

	EVEN


FINDEMO:
