
 ****   ****  *    * *****   ****      ****   ****  *     *   **   ******
*    * *    * *    * *    * *    *    *    * *    * **   **   **  *      *
*      *    * *    * *    * *         *    * *      * * * *       *      *
*      *    * *    * *****   ****     ******  ****  *  *  *        ******
*      *    * *    * *  *        *    *    *      * *     *       *      *
*    * *    * *    * *   *  *    *    *    * *    * *     *       *      *
 ****   ****   ****  *    *  ****     *    *  ****  *     *        ****** 

=============================================================================
=									    =
=			SPECIAL EFFETS SPECIAUX	II			    =
=									    =
=============================================================================

NOUS VOICI ENCORE UNE FOIS REUNIS POUR UN NOUVEAU NUMERO D'ASM SPECIAL EFFETS
SPECIAUX.

ENTRONS TOUT DE SUITE DANS LE VIF DU SUJET, EN COMMENCANT PAR UNE ROUTINE DE
TRACE DE DESSINS FRACTALS. LA REPRESENTATION DES DESSINS SE FAIT DANS UN 
ECRAN DE 32 COULEURS DE 320 PIXELS SUR 256, MAIS VOUS POUVEZ FACILEMNT CHAN
GER LA RESOLUTION VERTICALE.
ON SORT DU PROGRAMME EN APPUYANT SUR LE BOUTON DROIT DE LA SOURIS, EN APPU
YANT SUR LE BOUTON GAUCHE, VOUS CREEZ DE NOUVELLES IMAGES....

=============================================================================
		PROGRAMME DE DESSINS FRACTALS
=============================================================================

;POUR CHARGER LES DATAS TAPEZ:
;
;
;RI		RETURN
;MODULE		RETURN
;MT_DATA	RETURN RETURN
;
;PUIS TAPEZ
;G BEGIN	RETURN RETURN
;
;SUPPRIMEZ LES LIGNES SUIVANTES SI VOTRE VERSION DU SEKA
;NE COMPORTE PAS LA COMMANDE Y

>EXTERN "MODULE",MT_DATA

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
;==================================
ARRAY=$35000			;ZONE DE STOCKAGE

DISPLAY=ARRAY+$10000		;ECRAN A AFFICHER

MT_DATA=DISPLAY+[40*256*5]	;MODULE

FINDATA=MT_DATA+124472		;FIN DES DATAS
			
;==================================
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 SETUP			;MISE EN PLACE

BSR.L INIT_MUSIQUE		;INITIALISATION DE LA MUSIQUE

BSR.L SETCOPPER			;SAUTE SOUS PROGRAMME: MET EN PLACE LISTE COPPER
BSR.L 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	#$0A,$DFF016	;TESTE BOUTON DROIT SOURIS
	BEQ.S	END
	BTST	#6,$BFE001	;TESTE BOUTON GAUCHE SOURIS
	BNE.S	WAIT

	MOVE.L	#ARRAY,A0	;Clear Array
	MOVE.W	#8192,D0
	MOVEQ.L	#0,D1
ClrAr2:	MOVE.L	D1,(A0)+
	DBF	D0,ClrAr2

	MOVE.L	#Display,A5
	MOVE.L	#Array,A6
	MOVE.W	#128,Dist
	MOVE.W	#64,XPos
	MOVE.W	#64,YPos
	JSR	Plot
	JSR	CalGrid
	JSR	DoPlot
	BRA	WAIT

END: 				;FIN:	
BSR.L STOP_MUSIQUE		;ARRET DE LA MUSIQUE
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)

BSR.L PLAY_MUSIQUE		;VA A LA ROUTINE POUR JOUER LA MUSIQUE
	
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
;====================
************************************************************************
*             Set Up - Clear BitPlanes Used For Display                *
************************************************************************

SetUp:	

	MOVE.L	#Array,A0		;Clear Array
	MOVE.W	#$10000/2,D0
	MOVE.W	#0,D1
ClrAr:	MOVE.W	D1,(A0)+
	SUB.W	#1,D0
	BNE.S	ClrAr


	MOVE.L	#Display,A0		;Place Display Pointers
	LEA	ScreenPtrs,A1		;In Copper List
	MOVE.L	#10240,D0		;Plane Length
	MOVE.L	A0,D2
	MOVE.W	#4,D1
BplLoop:MOVE.W	D2,6(A1)
	SWAP	D2
	MOVE.W	D2,2(A1)
	SWAP	D2
	ADD.L	D0,D2
	ADDQ.W	#8,A1
	DBRA	D1,BplLoop


	MOVE.L	#Display,A0		;Clear Display
	MOVE.W	#25600,D0
	MOVE.W	#0,D1
ClrLoop:MOVE.W	D1,(A0)+
	DBRA	D0,ClrLoop	

	MOVE.L	#Display,A5
	MOVE.L	#Array,A6

	MOVE.W	#128,Dist
	MOVE.W	#64,XPos
	MOVE.W	#64,YPos
	MOVE.W	#0,Colour
	JSR	Plot
	JSR	CalGrid
	JSR	DoPlot
	RTS

*************************************************************************
*		Custom Pixel Plot Routine For 32 Colours                *
*************************************************************************

Plot:	MOVE.W	XPos,D1		;D1 - X Position
	MOVE.W	YPos,D2		;D2 - Y Position
	MOVE.W	D1,D6
	MOVE.W	D2,D7
	ASL	#8,D7
	ASL	#1,D6
	ADD.W	D6,D7
	MOVE.L	A6,A0
	ADD.W	D7,A0
	MOVE.W	(A0),D6
	ASR	#6,D6
	MOVE.W	D6,Colour
	MOVE.W	D1,D3
	ASR	#3,D3		;D3 - Whole X Words
	MOVE.W	D3,D4		;D4 - Whole X Words
	ADD.B	#$C,D4
	MOVE.W	D1,D3
	ASR	#4,D3
	ASL	#4,D3
	SUB.W	D3,D1		;D1 - Pixel Offset From Word
	MOVE.W	#15,D5
	SUB.W	D1,D5		;D5 - X Inverted Pixel Value
	ADD.B	#10,D2
	MULU	#40,D2		;D2 - Y Line Set in Words
	ADD.W	D4,D2		;D2 - Y Line + X Word
	MOVE.L	A5,A0		;DISPLAY
	ADD.W	D2,A0		;DISPLAY + Y Line + X Word
	MOVE.W	Colour,D1	;D1 - Binary Colour 0-31
	MOVE.W	#1,D2		;D2 - Plane Mask
	MOVE.W	#4,D3		;D3 - Counter For 5 Planes
PixSet:	BTST	D2,D1		;Test Colour
	BEQ.S	SkipSet
	BSET	D5,(A0)		;Set Pixel
	BRA.S	Next
SkipSet:	BCLR	D5,(A0)
Next:	ADD.W	#10240,A0	;Move To Next Plane
	ADDQ.W	#1,D2		;Adjust Plane Mask
	DBRA	D3,PixSet
	RTS

*************************************************************************
*		Generate Pseudo-Random Number From Seed			*
*************************************************************************

Random:	MOVE.W	Seed,D0
	MOVE.W	LastSeed,D1
	MOVE.B	$BFE401,D4
	MOVE.B	$BFD800,D5
	ADD.W	D0,D1
	ROL.W	D4,D1
	ADDI.W	#25186,D1
	ROL.W	D5,D1
	MOVE.W	D1,Seed
	MOVE.W	D0,LastSeed
	AND.W	#$1000,D1
	RTS	

*************************************************************************
*		 Midpoint Displacement on Fractal Grid			*		
*************************************************************************
*  FOR I=D TO 256-D STEP D : X(I)=.5*(X(D-I)+X(D+I))+(RANDOM/(8-LOOP))	*
*************************************************************************

CalGrid:	MOVE.W	#6,D7			;Iterations
Iterate:	MOVE.W	D7,Iterations
	MOVE.W	Dist,D0			;D0=D
	MOVE.W	#128,D1
	DIVU	D0,D1			;D1 = No of Iterations
	MOVE.W	D0,D2
	ASR	#1,D2
XIter:	MOVE.W	D2,XPos
	MOVEM.W	D0-D7,-(A7)	
YIter:	MOVE.W	Dist,D0
	MOVE.W	#128,D1
	DIVU	D0,D1
	MOVE.W	D0,D2
	ASR	#1,D2
YIter2:	MOVE.W	D2,YPos
	MOVEM.W	D0-D7,-(A7)	
	JSR	MidPt
	MOVEM.W	(A7)+,D0-D7
	ADD.W	D0,D2
	SUBQ.W	#1,D1
	BNE.S	YIter2
	MOVEM.W	(A7)+,D0-D7
	ADD.W	D0,D2
	SUBQ.W	#1,D1
	BNE.S	XIter
	MOVE.W	Dist,D0
	ASR	#1,D0
	MOVE.W	D0,Dist
	DBRA	D7,Iterate
	RTS
	
*************************************************************************
*			    MidPoint Displacement			*
*************************************************************************

MidPt:	MOVE.W	XPos,D0
	MOVE.W	YPos,D1
	MOVE.W	Dist,D3
	ASR	#1,D3
	SUB.W	D3,D1
	ASL	#1,D0
	ASL	#8,D1	
	ADD.W	D1,D0
	MOVE.L	A6,A0
	ADD.W	D0,A0
	MOVE.L	A0,A1
	MOVE.W	(A1),D0
	CMP.W	#0,D0
	BNE.S	Bottom
	MOVE.W	Dist,D1
	MOVE.L	A0,A1
	MOVE.L	A0,A2
	ADD.W	D1,A1
	SUB.W	D1,A2
	MOVE.W	(A1),D1
	MOVE.W	(A2),D2
	ADD.W	D1,D2
	ASR	#1,D2
	MOVE.W	D2,Pixel
	JSR	Random
	MOVE.W	Iterations,D3
	MOVE.W	#7,D4
	SUB.W	D3,D4
	ASR.W	D4,D1
	ADD.W	D1,Pixel
	MOVE.W	Pixel,(A0)
Bottom:	MOVE.W	XPos,D0
	MOVE.W	YPos,D1
	MOVE.W	Dist,D3
	ASR	#1,D3
	ADD.W	D3,D1
	ASL	#1,D0
	ASL	#8,D1	
	ADD.W	D1,D0
	MOVE.L	A6,A0
	ADD.W	D0,A0
	MOVE.L	A0,A1
	MOVE.W	(A1),D0
	CMP.W	#0,D0
	BNE.S	Left
	MOVE.W	Dist,D1
	MOVE.L	A0,A1
	MOVE.L	A0,A2
	ADD.W	D1,A1
	SUB.W	D1,A2
	MOVE.W	(A1),D1
	MOVE.W	(A2),D2
	ADD.W	D1,D2
	ASR	#1,D2
	MOVE.W	D2,Pixel
	JSR	Random
	MOVE.W	Iterations,D3
	MOVE.W	#7,D4
	SUB.W	D3,D4
	ASR.W	D4,D1
	ADD.W	D1,Pixel
	MOVE.W	Pixel,(A0)
Left:	MOVE.W	XPos,D0
	MOVE.W	YPos,D1
	MOVE.W	Dist,D3
	ASL	#1,D0
	SUB.W	D3,D0
	ASL	#8,D1	
	ADD.W	D1,D0
	MOVE.L	A6,A0
	ADD.W	D0,A0
	MOVE.L	A0,A1
	MOVE.W	(A1),D0
	CMP.W	#0,D0
	BNE.S	Right
	MOVE.W	Dist,D1
	ASR	#1,D1
	ASL	#8,D1
	MOVE.L	A0,A1
	MOVE.L	A0,A2
	ADD.W	D1,A1
	SUB.W	D1,A2
	MOVE.W	(A1),D1
	MOVE.W	(A2),D2
	ADD.W	D1,D2
	ASR	#1,D2
	MOVE.W	D2,Pixel
	JSR	Random
	MOVE.W	Iterations,D3
	MOVE.W	#7,D4
	SUB.W	D3,D4
	ASR.W	D4,D1
	ADD.W	D1,Pixel
	MOVE.W	Pixel,(A0)
Right:	MOVE.W	XPos,D0
	MOVE.W	YPos,D1
	MOVE.W	Dist,D3
	ASL	#1,D0
	ADD.W	D3,D0
	ASL	#8,D1	
	ADD.W	D1,D0
	MOVE.L	A6,A0
	ADD.W	D0,A0
	MOVE.L	A0,A1
	MOVE.W	(A1),D0
	CMP.W	#0,D0
	BNE.S	Middle
	MOVE.W	Dist,D1
	ASR	#1,D1
	ASL	#8,D1
	MOVE.L	A0,A1
	MOVE.L	A0,A2
	ADD.W	D1,A1
	SUB.W	D1,A2
	MOVE.W	(A1),D1
	MOVE.W	(A2),D2
	ADD.W	D1,D2
	ASR	#1,D2
	MOVE.W	D2,Pixel
	JSR	Random
	MOVE.W	Iterations,D3
	MOVE.W	#7,D4
	SUB.W	D3,D4
	ASR.W	D4,D1
	ADD.W	D1,Pixel
	MOVE.W	Pixel,(A0)
Middle:	MOVE.W	XPos,D0
	MOVE.W	YPos,D1
	ASL	#1,D0
	ASL	#8,D1	
	ADD.W	D1,D0
	MOVE.L	A6,A0
	ADD.W	D0,A0
	MOVE.L	A0,A1
	MOVE.W	(A1),D0
	CMP.W	#0,D0
	BNE.S	FMiddle
	MOVE.W	Dist,D1
	MOVE.L	A0,A1
	MOVE.L	A0,A2
	MOVE.L	A0,A3
	MOVE.L	A0,A4
	SUB.W	D1,A1
	SUB.W	D1,A2
	ADD.W	D1,A3
	ADD.W	D1,A4
	ASR	#1,D1
	ASL	#8,D1
	SUB.W	D1,A1
	SUB.W	D1,A3
	ADD.W	D1,A2
	ADD.W	D1,A4
	MOVE.W	(A1),D1
	MOVE.W	(A2),D2
	MOVE.W	(A3),D3
	MOVE.W	(A4),D4
	ADD.W	D1,D2
	ASR	#1,D2
	ADD.W	D3,D4
	ASR	#1,D4
	ADD.W	D2,D4
	ASR	#1,D4
	MOVE.W	D4,Pixel
	JSR	Random
	MOVE.W	Iterations,D3
	MOVE.W	#7,D4
	SUB.W	D3,D4
	ASR.W	D4,D1
	ADD.W	D1,Pixel
	MOVE.W	Pixel,(A0)
FMiddle:	RTS

*************************************************************************
*				 Do Plot				*
*************************************************************************

DoPlot:	MOVE.W	#1,XPos
	MOVE.W	#1,YPos
PlLoop:	JSR	Plot
	ADDQ.W	#1,XPos
	CMP.W	#127,XPos
	BNE.S	PlLoop
	MOVE.W	#1,XPos
	ADDQ.W	#1,YPos
	CMP.W	#127,YPos
	BNE.S	PlLoop
	RTS
;==============================
XPos		DC.W	0
YPos		DC.W	0
Colour		DC.W	0	

RandomNum	DC.W	0
Seed		DC.W	$1564
LastSeed	DC.W	$7461

Dist		DC.W	0
Iterations	DC.W	0
Pixel		DC.W	0
;===================================================
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
		................

STOP_MUSIQUE:			;ARRET DE LA MUSIQUE
		................

PLAY_MUSIQUE:			;JOUE LA MUSIQUE
		................

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

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

	;POINTEURS ADRESSE DES PLANS DE L'IMAGE

	SCREENPTRS:
	DC.W $00E0,0
	DC.W $00E2,0  
	DC.W $00E4,0
	DC.W $00E6,0
	DC.W $00E8,0
	DC.W $00EA,0
	DC.W $00EC,0
	DC.W $00EE,0
	DC.W $00F0,0
	DC.W $00F2,0


	;REGISTRE POUR CHOISIR RESOLUTION	

	DC.W	$0100,$5200		;5 PLANS+MODE COULEURS

	;DECALAGE ECRAN - INUTILISE ICI

	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

	SCREENCOLS:
	DC.W	$0180,$0000	;COULEUR 00
	DC.W	$0182,$020F	;COULEUR 01
	DC.W	$0184,$004F	;COULEUR 02
	DC.W	$0186,$006F	;COULEUR 03
	DC.W	$0188,$008F	;COULEUR 04
	DC.W	$018A,$00F9	;COULEUR 05
	DC.W	$018C,$05F0	;COULEUR 06
	DC.W	$018E,$04E0	;COULEUR 07
	DC.W	$0190,$04D0	;COULEUR 08
	DC.W	$0192,$03C0	;COULEUR 09
	DC.W	$0194,$03B0	;COULEUR 10
	DC.W	$0196,$03A0	;COULEUR 11
	DC.W	$0198,$0290	;COULEUR 12
	DC.W	$019A,$0280	;COULEUR 13
	DC.W	$019C,$0270	;COULEUR 14
	DC.W	$019E,$0260	;COULEUR 15
	DC.W	$01A0,$0460	;COULEUR 16	;LES COULEURS DE 16 A 31 SONT
	DC.W	$01A2,$0561	;COULEUR 17	;AUSSI CELLES DES SPRITES
	DC.W	$01A4,$0661	;COULEUR 18
	DC.W	$01A6,$0650	;COULEUR 19	;LES COULEURS 16 A 31 NE SONT
	DC.W	$01A8,$0541	;COULEUR 20	;PAS UTILISEES DANS LE MODE
	DC.W	$01AA,$0642	;COULEUR 21	;HOLD AND MODIFY (HAM)
	DC.W	$01AC,$0753	;COULEUR 22
	DC.W	$01AE,$0865	;COULEUR 23
	DC.W	$01B0,$0876	;COULEUR 24
	DC.W	$01B2,$0988	;COULEUR 25
	DC.W	$01B4,$0BA9	;COULEUR 26
	DC.W	$01B6,$0BBB	;COULEUR 27
	DC.W	$01B8,$0CCC	;COULEUR 28
	DC.W	$01BA,$0DDD	;COULEUR 29
	DC.W	$01BC,$0EEE	;COULEUR 30
	DC.W	$01BE,$0FFF	;COULEUR 31

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

	DC.W $FFDF,$FFFE


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


VOICI UNE ROUTINE DE PLASMA.... D'APRES CE QUE L'ON VOIT A L'ECRAN, ON POUR
RAIT CROIRE A UNE ROUTINE ABSOLUMENT GIGANTESQUE.... IL N'EN EST RIEN......
EN EFFET CE TYPE DE PLASMA N'EST QU'UN SIMPLE CYCLE DE COULEUR....
LA DIFFICULTE MAJEURE EST EN FAIT LE TRACE DU DESSIN D'APRES UNE FORMULE MA
THEMATIQUE.
ON SORT DU PROGRAMME EN APPUYANT SUR LA BOUTON GAUCHE DE LA SOURIS.
EN APPUYANT SUR LA BOUTON DROIT, ON CALCUL UN AUTRE DESSIN EN CHANGEANT UNE
SIMPLE VARIABLE DE LA FORMULE. J'AI NOTE DANS LE SOURCE LES DIFFERENTES CONS
TANTES QUE VOUS POUVEZ MODIFIER SANS EFFETS DRAMATIQUES, POUR CHANGER LES
DESSINS A AFFICHER.

=============================================================================
		PROGRAMME DE PSEUDO PLASMA
=============================================================================

;POUR CHARGER LES DATAS TAPEZ:
;
;RI		RETURN
;MODULE		RETURN
;MT_DATA	RETURN RETURN
;
;PUIS TAPEZ
;G BEGIN	RETURN RETURN
;
;SUPPRIMEZ LES LIGNES SUIVANTES SI VOTRE VERSION DU SEKA
;NE COMPORTE PAS LA COMMANDE Y

>EXTERN "MODULE",MT_DATA

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
;==================================
BPL_X		=	320		;LARGEUR
BPL_Y		=	256		;HAUTEUR
BPL_DEPTH	=	4		;NOMBRE DE PLAN
BPL_WIDTH	=	BPL_X/8		;LARGEUR EN MOTS
BPL_SIZE	=	BPL_WIDTH*BPL_Y	;TAILLE ECRAN

NB_COLOR	=	16		;NOMBRE DE COULEUR
;==================================
SCREEN=$40000			;L'IMAGE SE TROUVE A $40000

MT_DATA=SCREEN+[40*256*4]	;MODULE MUSIQUE

FINDATA=MT_DATA+141898

;==================================
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	CLR_SCREEN		;EFFACE ECRAN

BSR.L INIT_MUSIQUE		;INITIALISATION DE LA MUSIQUE

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

INIT_CALCULS:

CLR.W	COOR_Y			;INIT LES PARAMETRES DE
CLR.W	COOR_X			;LA FONCTION
CLR.L	CURRENT_ADR_Y		;

BSR	CYCLE_COURBE_COULEUR	;VA A ROUTINE CYCLE COULEURS


PAS_FINI:
CMP.W	#BPL_Y,COOR_Y
BGE.S	WAIT
BSR	CALCUL_FONCTION		;1 LIGNE A CHAQUE FOIS.
CLR.W	TIME_BETWEEN_2_CYCLE
BRA	PAS_FINI		

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

BSR.L	CYCLE_COURBE_COULEUR

BTST #$0A,$DFF016
BNE PASTEST
ADD.W #1,ITI
CMP.W #8,ITI
BNE OKITI
MOVE.W #0,ITI
OKITI:
JMP INIT_CALCULS
PASTEST:

BTST	#6,$BFE001		;ATTENDANT PRESSION SUR BOUTON GAUCHE SOURIS
BNE.S	WAIT			;SINON RETOURNE A WAIT
 				;SI OUI  FIN
END: 				;FIN:	
BSR.L STOP_MUSIQUE		;ARRET DE LA MUSIQUE
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)

BSR.L PLAY_MUSIQUE		;VA A LA ROUTINE POUR JOUER LA MUSIQUE
	
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
;===================
even
iti: dc.w 0
even
******************************************************************
CALCUL_FONCTION:
	MOVE.L	#SCREEN,D3		;*\D3= ADR DE LA LIGNE A
	ADD.L	CURRENT_ADR_Y,D3	;*/ TRACER

	LEA	SIN_TAB,A1		;* A1 = TABLE SINUS
	LEA	$100(A1),A2		;* A2 = TABLE COS
	CLR.W	COOR_X

	MOVE.L	#BPL_WIDTH-1,D7		;* D7 = NB D'OCTET

LOOP_CALCUL_FONCTION_EACH_BYTE:
	MOVEQ	#8-1,D6			;* D6 = NB DE BIT

LOOP_CALCUL_FONCTION_EACH_BIT:
	MOVEQ	#0,D0
	MOVEQ	#0,D1
	MOVE.W	COOR_X,D0
	MOVE.W	COOR_Y,D1

;* CALCUL DES DIFFERENTS PARAMETRES DE LA FONCTION
	MOVE.W	D0,D2		;* D2= ANGLE DU FUTUR COSINUS

	MOVE.W ITI,D5

	LSL.W	D5,D2		;*\X2 POUR OBTENIR LE MOT DU COS
				;*/ET PAR D5 POUR UN BEAU DESSIN.
	AND.W	#$3FE,D2	;* L'ANGLE DOIT ETRE ENTRE 0 ET 512 
	MOVE.W	(A2,D2.W),D2	;* D2= LE COSINUS
	MULS	#40,D2		;* ON LE MULTIPLIE PAR 40
	LSL.L	#1,D2		;*\ SAVANTE MANIPULATION POUR AVOIR
	CLR.W	D2		;* >LA VERITABLE VALEUR DE D2
	SWAP	D2		;*/

;* LES CALCULS CI-DESSOUS SONT SUR LE MEME PRINCIPE QUE CI-DESSUS
	MOVE.W	D2,D4		
	MOVE.W	D1,D2
	SUB.W	D4,D2
	LSL.W	#3,D2		;VALEUR 3 PEUT ETRE CHANGEE
	AND.W	#$3FE,D2
	MOVE.W	(A2,D2.W),D2
	MULS	#32,D2
	LSL.L	#1,D2
	CLR.W	D2
	SWAP	D2
	MOVE.W	D2,D4
;* LES CALCULS CI-DESSOUS SONT SUR LE MEME PRINCIPE QUE CI-DESSUS

	MOVE.W	D1,D2 
	LSL.W	#2,D2		;VALEUR 2 PEUT ETRE CHANGEE
	AND.W	#$3FE,D2
	MOVE.W	(A1,D2.W),D2
	MULS	#40,D2
	LSL.L	#1,D2
	CLR.W	D2
	SWAP	D2

;* LES CALCULS CI-DESSOUS SONT SUR LE MEME PRINCIPE QUE CI-DESSUS
	SUB.W	D2,D0
	MOVE.W	D0,D2
	LSL.W	#3,D2		;VALEUR 3 PEUT ETRE CHANGEE
	AND.W	#$3FE,D2
	MOVE.W	(A1,D2.W),D2
	MULS	#64,D2
	LSL.L	#1,D2
	CLR.W	D2
	SWAP	D2
	ADD.W	D4,D2
	
;* ARRIVE ICI ON A LA COULEUR DANS D2.
;* ON NE RACALCULE PAS A CHAQUE FOIS L'ADRESSE DU POINT POUR GAGNER
;* DU TEMPS D'EXECUTION.
	MOVE.W	COOR_X,D0	;*\
	AND.W	#$0007,D0	;* >D0= DU BIT OU SE TROUVE LE POINT
	NEG.W	D0		;* /
	ADDQ.W	#7,D0		;*/
	AND.W	#NB_COLOR-1,D2	;*\ -1 POUR QUE LA COULEUR RESTE
	OR.W	#1,D2		;*/ ENTRE 1 ET NB_COLOR
	
	MOVE.L	D3,A0		;*\A0= ADR DE L'OCTET OU SE TROUVE
			 	;*/ LE POINT ACTUEL
;* TRACE LE POINT DONT LA COULEUR EST DANS D2	
	MOVEQ	#BPL_DEPTH-1,D4
EACH_BPL:
	LSR.W	#1,D2
	BCC.S	CLR_BIT_IN_THIS_BPL
	BSET	D0,(A0)
	ADD.L	#BPL_SIZE,A0
	DBF	D4,EACH_BPL
	BRA.S	POINT_FINISH
CLR_BIT_IN_THIS_BPL:
	BCLR	D0,(A0)
	ADD.L	#BPL_SIZE,A0
	DBF	D4,EACH_BPL
POINT_FINISH:

;* CONTINUE DE TRACER DES POINTS DANS L'OCTET COURANT
;* ET SI ILS SONT TOUS FAITS ON PASSE APRES.
	ADDQ.W	#1,COOR_X
	DBF	D6,LOOP_CALCUL_FONCTION_EACH_BIT

;* CONTINUE DE TRACER DANS LES OCTETS
;* ET SI ILS SONT TOUS FAIT ON S'EN VA.
	ADDQ.L	#1,D3
	DBF	D7,LOOP_CALCUL_FONCTION_EACH_BYTE

;* ON INCREMENTE LES PARAMETRES POUR FAIRE
;* LA LIGNE SUIVANTE LA PROCHAINE FOIS
	ADD.L	#BPL_WIDTH,CURRENT_ADR_Y
	ADDQ.W	#1,COOR_Y
	RTS

COOR_X:		DC.W	1
COOR_Y:		DC.W	1
CURRENT_ADR_Y:	DC.L	1

***********************************************************
* CETTE ROUTINE S'OCCUPE DU CYCLE COULEUR
CYCLE_COURBE_COULEUR:
	SUBQ.W	#1,TIME_BETWEEN_2_CYCLE
	TST.W	TIME_BETWEEN_2_CYCLE
	BGT	FIN_CYCLE_COURBE_COULEUR

	LEA	ADR_CMAP_IN_CLIST,A0
	ADDQ.L	#2,A0		;* A0 --> REGISTRE COULEUR.

	LEA	TAB_DEGRADE_COULEUR,A1

	MOVE.W	CURRENT_POS_TAB_DEGRADE_COULEUR,D0

	MOVEQ	#NB_COLOR-1,D2

LOOP_CYCLE_COURBE_COULEUR:
	AND.W	#NB_COLOR-1,D0
	MOVE.W	D0,D1
	ADD.W	D1,D1
	MOVE.W	(A1,D1.W),(A0)
	ADDQ.L	#4,A0
	ADDQ.W	#1,D0

	DBF	D2,LOOP_CYCLE_COURBE_COULEUR

	ADDQ.W	#1,CURRENT_POS_TAB_DEGRADE_COULEUR
	MOVE.W	#5,TIME_BETWEEN_2_CYCLE
FIN_CYCLE_COURBE_COULEUR:
	RTS

TIME_BETWEEN_2_CYCLE:			DC.W	1
CURRENT_POS_TAB_DEGRADE_COULEUR:	DC.W	1
TAB_DEGRADE_COULEUR:
	DC.W	$0F00,$0D02,$0B04,$0906
	DC.W	$0708,$050A,$030C,$010E,$F
	DC.W	$010E,$030C,$050A,$0708
	DC.W	$0906,$0B04,$0D02

***************************************************************
* CETTE ROUTINE EFFACE LES BITPLANS
CLR_SCREEN:
	MOVE.W	#BPL_WIDTH*BPL_Y*BPL_DEPTH/4-1,D0

	LEA	SCREEN,A0
LOOP_CLR_SCREEN:
	CLR.L	(A0)+
	DBF	D0,LOOP_CLR_SCREEN
	RTS	

***************************************************************
SIN_TAB	DC.w  $0000,$0192,$0324,$04B6,$0647,$07D9,$096A,$0AFB
	dc.w  $0C8B,$0E1B,$0FAB,$1139,$12C8,$1455,$15E2,$176D
	dc.w  $18F8,$1A82,$1C0B,$1D93,$1F19,$209F,$2223,$23A6
	dc.w  $2528,$26A8,$2826,$29A3,$2B1F,$2C98,$2E11,$2F87
	dc.w  $30FB,$326E,$33DE,$354D,$36BA,$3824,$398C,$3AF2
	dc.w  $3C56,$3DB8,$3F17,$4073,$41CE,$4325,$447A,$45CD
	dc.w  $471C,$4869,$49B4,$4AFB,$4C3F,$4D81,$4EBF,$4FFB
	dc.w  $5133,$5269,$539B,$54CA,$55F5,$571D,$5842,$5964
	dc.w  $5A82,$5B9D,$5CB4,$5DC7,$5ED7,$5FE3,$60EC,$61F1
	dc.w  $62F2,$63EF,$64E8,$65DD,$66CF,$67BD,$68A6,$698C
	dc.w  $6A6D,$6B4A,$6C24,$6CF9,$6DCA,$6E96,$6F5F,$7023
	dc.w  $70E2,$719E,$7255,$7307,$73B5,$745F,$7504,$75A5
	dc.w  $7641,$76D9,$776C,$77FA,$7884,$7909,$798A,$7A05
	dc.w  $7A7D,$7AEF,$7B5D,$7BC5,$7C29,$7C89,$7CE3,$7D39
	dc.w  $7D8A,$7DD6,$7E1D,$7E5F,$7E9D,$7ED5,$7F09,$7F38
	dc.w  $7F62,$7F87,$7FA7,$7FC2,$7FD8,$7FE9,$7FF6,$7FFD
	dc.w  $7fff,$7FFD,$7FF6,$7FE9,$7FD8,$7FC2,$7FA7,$7F87
	dc.w  $7F62,$7F38,$7F09,$7ED5,$7E9D,$7E5F,$7E1D,$7DD6
	dc.w  $7D8A,$7D39,$7CE3,$7C89,$7C29,$7BC5,$7B5D,$7AEF
	dc.w  $7A7D,$7A05,$798A,$7909,$7884,$77FA,$776C,$76D9
	dc.w  $7641,$75A5,$7504,$745F,$73B5,$7307,$7255,$719E
	dc.w  $70E2,$7023,$6F5F,$6E96,$6DCA,$6CF9,$6C24,$6B4A
	dc.w  $6A6D,$698C,$68A6,$67BD,$66CF,$65DD,$64E8,$63EF
	dc.w  $62F2,$61F1,$60EC,$5FE3,$5ED7,$5DC7,$5CB4,$5B9D
	dc.w  $5A82,$5964,$5842,$571D,$55F5,$54CA,$539B,$5269
	dc.w  $5133,$4FFB,$4EBF,$4D81,$4C3F,$4AFB,$49B4,$4869
	dc.w  $471C,$45CD,$447A,$4325,$41CE,$4073,$3F17,$3DB8
	dc.w  $3C56,$3AF2,$398C,$3824,$36BA,$354D,$33DE,$326E
	dc.w  $30FB,$2F87,$2E11,$2C98,$2B1F,$29A3,$2826,$26A8
	dc.w  $2528,$23A6,$2223,$209F,$1F19,$1D93,$1C0B,$1A82
	dc.w  $18F8,$176D,$15E2,$1455,$12C8,$1139,$0FAB,$0E1B
	dc.w  $0C8B,$0AFB,$096A,$07D9,$0647,$04B6,$0324,$0192
	dc.w  $0000,$FE6E,$FCDC,$FB4A,$F9B9,$F827,$F696,$F505
	dc.w  $F375,$F1E5,$F055,$EEC7,$ED38,$EBAB,$EA1E,$E893
	dc.w  $E708,$E57E,$E3F5,$E26D,$E0E7,$DF61,$DDDD,$DC5A
	dc.w  $DAD8,$D958,$D7DA,$D65D,$D4E1,$D368,$D1EF,$D079
	dc.w  $CF05,$CD92,$CC22,$CAB3,$C946,$C7DC,$C674,$C50E
	dc.w  $C3AA,$C248,$C0E9,$BF8D,$BE32,$BCDB,$BB86,$BA33
	dc.w  $B8E4,$B797,$B64C,$B505,$B3C1,$B27F,$B141,$B005
	dc.w  $AECD,$AD97,$AC65,$AB36,$AA0B,$A8E3,$A7BE,$A69C
	dc.w  $A57E,$A463,$A34C,$A239,$A129,$A01D,$9F14,$9E0F
	dc.w  $9D0E,$9C11,$9B18,$9A23,$9931,$9843,$975A,$9674
	dc.w  $9593,$94B6,$93DC,$9307,$9236,$916A,$90A1,$8FDD
	dc.w  $8F1E,$8E62,$8DAB,$8CF9,$8C4B,$8BA1,$8AFC,$8A5B
	dc.w  $89BF,$8927,$8894,$8806,$877C,$86F7,$8676,$85FB
	dc.w  $8583,$8511,$84A3,$843B,$83D7,$8377,$831D,$82C7
	dc.w  $8276,$822A,$81E3,$81A1,$8163,$812B,$80F7,$80C8
	dc.w  $809E,$8079,$8059,$803E,$8028,$8017,$800A,$8003
	dc.w  $8000,$8003,$800A,$8017,$8028,$803E,$8059,$8079
	dc.w  $809E,$80C8,$80F7,$812B,$8163,$81A1,$81E3,$822A
	dc.w  $8276,$82C7,$831D,$8377,$83D7,$843B,$84A3,$8511
	dc.w  $8583,$85FB,$8676,$86F7,$877C,$8806,$8894,$8927
	dc.w  $89BF,$8A5B,$8AFC,$8BA1,$8C4B,$8CF9,$8DAB,$8E62
	dc.w  $8F1E,$8FDD,$90A1,$916A,$9236,$9307,$93DC,$94B6
	dc.w  $9593,$9674,$975A,$9843,$9931,$9A23,$9B18,$9C11
	dc.w  $9D0E,$9E0F,$9F14,$A01D,$A129,$A239,$A34C,$A463
	dc.w  $A57E,$A69C,$A7BE,$A8E3,$AA0B,$AB36,$AC65,$AD97
	dc.w  $AECD,$B005,$B141,$B27F,$B3C1,$B505,$B64C,$B797
	dc.w  $B8E4,$BA33,$BB86,$BCDB,$BE32,$BF8D,$C0E9,$C248
	dc.w  $C3AA,$C50E,$C674,$C7DC,$C946,$CAB3,$CC22,$CD92
	dc.w  $CF05,$D079,$D1EF,$D368,$D4E1,$D65D,$D7DA,$D958
	dc.w  $DAD8,$DC5A,$DDDD,$DF61,$E0E7,$E26D,$E3F5,$E57E
	dc.w  $E708,$E893,$EA1E,$EBAB,$ED38,$EEC7,$F055,$F1E5
	dc.w  $F375,$F505,$F696,$F827,$F9B9,$FB4A,$FCDC,$FE6E
	dc.w  $0000,$0192,$0324,$04B6,$0647,$07D9,$096A,$0AFB
	dc.w  $0C8B,$0E1B,$0FAB,$1139,$12C8,$1455,$15E2,$176D
	dc.w  $18F8,$1A82,$1C0B,$1D93,$1F19,$209F,$2223,$23A6
	dc.w  $2528,$26A8,$2826,$29A3,$2B1F,$2C98,$2E11,$2F87
	dc.w  $30FB,$326E,$33DE,$354D,$36BA,$3824,$398C,$3AF2
	dc.w  $3C56,$3DB8,$3F17,$4073,$41CE,$4325,$447A,$45CD
	dc.w  $471C,$4869,$49B4,$4AFB,$4C3F,$4D81,$4EBF,$4FFB
	dc.w  $5133,$5269,$539B,$54CA,$55F5,$571D,$5842,$5964
	dc.w  $5A82,$5B9D,$5CB4,$5DC7,$5ED7,$5FE3,$60EC,$61F1
	dc.w  $62F2,$63EF,$64E8,$65DD,$66CF,$67BD,$68A6,$698C
	dc.w  $6A6D,$6B4A,$6C24,$6CF9,$6DCA,$6E96,$6F5F,$7023
	dc.w  $70E2,$719E,$7255,$7307,$73B5,$745F,$7504,$75A5
	dc.w  $7641,$76D9,$776C,$77FA,$7884,$7909,$798A,$7A05
	dc.w  $7A7D,$7AEF,$7B5D,$7BC5,$7C29,$7C89,$7CE3,$7D39
	dc.w  $7D8A,$7DD6,$7E1D,$7E5F,$7E9D,$7ED5,$7F09,$7F38
	dc.w  $7F62,$7F87,$7FA7,$7FC2,$7FD8,$7FE9,$7FF6,$7FFD

************************************************************************
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
		................

STOP_MUSIQUE:			;ARRET DE LA MUSIQUE
		................

PLAY_MUSIQUE:			;JOUE LA MUSIQUE
		................

;====================
EVEN				;NOTRE LISTE COPPER
NEWCOPPER:
	DC.W	$008E,$2B81	;DIMENSIONS DE L'ECRAN
	DC.W	$0090,$2BD1	;256 LIGNES

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

	;POINTEURS ADRESSE DES PLANS DE L'IMAGE

	DC.W $00E0,SCREEN+[40*256*0]/65536
	DC.W $00E2,SCREEN+[40*256*0] & 65535   
	DC.W $00E4,SCREEN+[40*256*1]/65536
	DC.W $00E6,SCREEN+[40*256*1] & 65535
	DC.W $00E8,SCREEN+[40*256*2]/65536
	DC.W $00EA,SCREEN+[40*256*2] & 65535
	DC.W $00EC,SCREEN+[40*256*3]/65536
	DC.W $00EE,SCREEN+[40*256*3] & 65535

	;REGISTRE POUR CHOISIR RESOLUTION	

	DC.W	$0100,$4200		;4 PLANS + MODE COULEURS

	;DECALAGE ECRAN - INUTILISE ICI

	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

	ADR_CMAP_IN_CLIST:

	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

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

	DC.W $FFDF,$FFFE


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

VOICI UNE ROUTINE FORT INTERRESSANTE, UN EFFET DE ZOOM TEXT.
LES PAGES DE TEXTE PARTENT DU FOND DE L'ECRAN EN AUGMENTANT EN TAILLE.
CECI EST UN FAUX EFFET 3D, CAR IL N'Y A AUCUN CALCUL 3D. TOUTES LES LETTRES
DE L'ALPHABET SONT STOCKEES DANS TOUTES LES TAILLES, ET DES TABLES DE POSI
TIONS DES LETTRES SONT UTILISEES. CE QUI PERMET UNE TRES GRANDE RAPIDITE
D'AFFICHAGE.
LES CARACTERES SONT EN 1 SEUL PLAN (320 PIXELS DE LARGESUR 768 PIXELS DE HAUT)
MAIS DEUX PLANS DE 320 PIXELS SUR 128 DE HAUT, SONT AFFICHES AVEC UN LEGER DE
CALAGE (REGISTRE 102).
2 ECRANS SONT UTILISES POUR LE DOUBLE BUFFERING.

=============================================================================
		PROGRAMME D'EFFET DE ZOOM 
=============================================================================

;POUR CHARGER LES DATAS TAPEZ:
;
;
;RI		RETURN
;FONT_RAW	RETURN
;FONT		RETURN RETURN
;
;RI		RETURN
;MODULE		RETURN
;MT_DATA	RETURN RETURN
;
;PUIS TAPEZ
;G BEGIN	RETURN RETURN
;
;SUPPRIMEZ LES LIGNES SUIVANTES SI VOTRE VERSION DU SEKA
;NE COMPORTE PAS LA COMMANDE Y

>EXTERN "FONT_RAW",FONT
>EXTERN "MODULE",MT_DATA

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
;==================================
FONT=$40000			;IMAGE DES CARACTERS
	
SCREEN=FONT+32004		;ECRAN
	
MT_DATA=SCREEN+[40*128*2]	;MODULE

FINDATA=MT_DATA+110240		;FIN DES DATAS

;==================================
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 SETUP			;MISE EN PLACE ECRANS ET TEXTE

BSR.L INIT_MUSIQUE		;INITIALISATION DE LA MUSIQUE

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	DOUBLEB			;SWAPPING ECRANS = BOUBLE BUFFERING
BSR.L	DOTEXT			;MISE EN PLACE TEXTE
BSR.L	GROW			;ROUTINE ZOOM

BTST	#6,$BFE001		;ATTENDANT PRESSION SUR BOUTON GAUCHE SOURIS
BNE.S	WAIT			;SINON RETOURNE A WAIT
 				;SI OUI  FIN
FIN: 				;FIN:	
BSR.L STOP_MUSIQUE		;ARRET DE LA MUSIQUE
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)

BSR.L PLAY_MUSIQUE		;VA A LA ROUTINE POUR JOUER LA MUSIQUE
	
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
;====================
************************************************************************
*             Set Up - Clear BitPlanes Used For Display                *
************************************************************************

SetUp:	MOVE.L	#Screen,A0
	MOVE.W	#[40*128],D0
	MOVE.W	#0,D1
ClrScr:	MOVE.W	D1,(A0)+
	DBRA	D0,ClrScr
	MOVE.L	#Screen,A0

	LEA	ScreenPtrs,A1
	MOVE.L	A0,D0
	MOVE.L	D0,D1
	ADD.W	#40,D1
SetBpls:MOVE.W	D0,6(A1)
	MOVE.W	D1,14(A1)
	SWAP	D0
	SWAP	D1
	MOVE.W	D0,2(A1)
	MOVE.W	D1,10(A1)

	MOVE.L	#Text,MessagePos
	LEA	ConvertText,A0
Again2:	MOVE.L	MessagePos,A1
	MOVE.L	#Checker,A2
	CLR.L	D0
	MOVE.B	(A1),D0
	MOVE.W	#0,D1
Char:	CMP.B	(A2)+,D0
	BEQ	Match2
	ADDQ.B	#1,D1
	CMP.B	#50,D1			
	BNE.S	Char
	CMP.B	#$FF,D0
	BEQ.S	WrapTxt
Reset2:	BRA	End2
WrapTxt:MOVE.W	#$0000FFFF,A4
	BRA	End2		
Match2:	CMP.B	#48,D1
	BEQ.S	Space
	MOVE.L	D1,D0
	MULU	#640,D1
	MOVE.L	#Font,A4
	ADD.W	D1,A4
	BRA.S	SkSpace
Space:	MOVE.L	#$00000000,A4
SkSpace:MOVE.L	A4,(A0)+
Next2:	ADD.L	#1,MessagePos
	BRA.S	Again2
End2:	MOVE.L	A4,(A0)+	
	LEA	Positions,A0
	MOVE.W	#127,D0
	MOVE.W	#0,D1
PosLoop:MOVE.W	D1,(A0)+
	DBRA	D0,PosLoop
	rts

*************************************************************************
*			Grow/Shrink Text Display			*
*************************************************************************

Grow:	MOVE.W	TextPointer,D0
	CMP.W	#15,D0
	BLE.S	Bigger
	CMP.W	#180,D0
	BGE.S	Smaller
	ADD.W	#1,D0
	MOVE.W	D0,TextPointer
	RTS
	
Bigger:	LEA	Positions,A0
	MOVE.W	#127,D1
BigLoop:MOVE.W	D0,(A0)+
	DBRA	D1,BigLoop
	ADD.W	#1,TextPointer
	RTS
	
Smaller:CMP.W	#196,D0
	BGE.S	Set
	LEA	Positions,A0
	MOVE.W	D0,D1
	MOVE.W	#195,D2
	SUB.W	D1,D2
	MOVE.W	#127,D3
SmallLp:MOVE.W	D2,(A0)+
	DBRA	D3,SmallLp
	ADD.W	#1,TextPointer
	RTS

Set:	MOVE.W	#0,TextPointer
	ADD.W	#512,TextPos
	CMP.W	#2560,TextPos
	BNE.S	SkSet
	MOVE.W	#0,TextPos
SkSet:	RTS
	
*************************************************************************
*		         Do Font Perspective Effects			*
*************************************************************************
	
DoText:	LEA	Table1,A2
	LEA	Positions,A3
	LEA	ConvertText,A5
	MOVE.W	TextPos,D0
	ADD.W	D0,A5
	MOVE.W	#0,D7			;How Many Y Positions
YLoop:	MOVE.W	#0,D6			;How Many X Positions
XLoop:	MOVE.L	Current(pc),A4
	MOVE.L	(A5)+,A0
	CMP.L	#0,A0
	BEQ	End
	MOVE.W	(A3)+,D0
	CMP.W	#0,D0
	BEQ	End
	SUB.W	#1,D0
	MOVE.W	D0,D1
	ASL	#1,D0
	ADD.W	D0,A0			;A0 Points to Source (Char)
	ASL	#8,D1
	ASL	#1,D1			;Which Table To Use
	MOVE.W	D6,D3
	ASL	#2,D3
	MOVE.W	D7,D4
	ASL	#6,D4
	ADD.W	D4,D1
	ADD.W	D3,D1
	MOVE.L	A2,A6
	ADD.W	D1,A6
	MOVE.W	(A6)+,D0		;X Position
	MOVE.W	(A6)+,D1		;Y Position
	MULU	#40,D1
	MOVE.W	D0,D2
	ASR	#3,D2
	ADD.W	D2,D1
	MOVE.W	D0,D2
	ASR	#4,D2
	ASL	#4,D2
	SUB.W	D2,D0
	MULU	#4096,D0
	ADD.W	#$0DFC,D0
	ADD.W	D1,A4
WaitR:	BTST	#14,DMACONR
	BNE.S	WaitR
DoChar:	MOVE.W	#$FFFF,BLTAFWM
	MOVE.W	#$0000,BLTALWM
BltWait:BTST	#14,DMACONR
	BNE.S	BltWait
	MOVE.W	D0,BLTCON0
	MOVE.W	#$0000,BLTCON1
	MOVE.L	A0,BLTAPTH
	MOVE.L	A4,BLTBPTH
	MOVE.L	A4,BLTDPTH
	MOVE.W	#$24,BLTAMOD
	MOVE.W	#$24,BLTBMOD
	MOVE.W	#$24,BLTDMOD
	MOVE.W	#[16*64]+2,BLTSIZE
End:	ADD.L	#1,MessagePos
	ADD.W	#2,A4
	ADD.W	#1,D6
	CMP.W	#16,D6
	BNE	XLoop
	ADD.W	#648,A4
	ADD.W	#1,D7
	CMP.W	#8,D7
	BNE	YLoop
MessSkp:RTS

*************************************************************************
*			  Double Buffer Display				*
*************************************************************************

DoubleB:MOVE.L	Current(pc),D0
	LEA	ScreenPtrs,A0
	MOVE.L	D0,D1
	ADD.W	#40,D1
	MOVE.W	D0,6(A0)
	MOVE.W	D1,14(A0)
	SWAP	D0
	SWAP	D1
	MOVE.W	D0,2(A0)
	MOVE.W	D1,10(A0)
	MOVE.W	DBuffer,D1
	EOR.W	#1,D1
	CMP.W	#1,D1
	BNE.S	Screen1
Screen2:MOVE.L	#SCREEN,D0
	BRA.S	SkipScr
Screen1:MOVE.L	#SCREEN+[40*128],D0
SkipScr:MOVE.L	D0,Current
	MOVE.W	D1,DBuffer
	MOVE.L	Current(pc),A0
Wait2:	BTST	#14,DMACONR
	BNE.S	Wait2
	MOVE.L	#$1f00000,BLTCON0
	MOVE.L	A0,BLTDPTH
	CLR	BLTADAT
	CLR	BLTDMOD
	MOVE.W	#[128*64]+20,BLTSIZE
	RTS

Current:		DC.L	SCREEN
DBuffer:		DC.W	1


Checker: DC.B	"ABCDEFGHIJKLMNOPQRSTUVWXYZ.,/()*'!?-:+0123456789 "

;			 ----------------
Text:
		DC.B	"****************"
		DC.B	"*  PHOENIX-DP  *"
		DC.B	"****************"
		DC.B	"                "
		DC.B	"    PRESENTE    "
		DC.B	"                "
		DC.B	"  ZOOM ROUTINE  "
		DC.B	"                "

		DC.B	"****************"
		DC.B	"*              *"
		DC.B	"*  PHOENIX DP  *"  
		DC.B	"*90  RUE DRAGON*" 
		DC.B	"*     13006    *"
		DC.B	"*   MARSEILLE  *"
		DC.B	"*  91 53 19 72 *"
		DC.B	"****************"

		DC.B	"****************"
		DC.B	"*  PHOENIX-DP  *"
		DC.B	"****************"
		DC.B	"                "
		DC.B	"    PRESENTE    "
		DC.B	"                "
		DC.B	"  ZOOM ROUTINE  "
		DC.B	"                "

		DC.B	"****************"
		DC.B	"*              *"
		DC.B	"*  PHOENIX DP  *"  
		DC.B	"*90  RUE DRAGON*" 
		DC.B	"*     13006    *"
		DC.B	"*   MARSEILLE  *"
		DC.B	"*  91 53 19 72 *"
		DC.B	"****************"

		DC.B	"****************"
		DC.B	"*  PHOENIX-DP  *"
		DC.B	"****************"
		DC.B	"                "
		DC.B	"    PRESENTE    "
		DC.B	"                "
		DC.B	"  ZOOM ROUTINE  "
		DC.B	"                "

		DC.B	"****************"
		DC.B	"*              *"
		DC.B	"*  PHOENIX DP  *"  
		DC.B	"*90  RUE DRAGON*" 
		DC.B	"*     13006    *"
		DC.B	"*   MARSEILLE  *"
		DC.B	"*  91 53 19 72 *"
		DC.B	"****************"

		DC.B	$FF		;MARQUE FIN TEXTE

ConvertText:	Blk.L	2500
MessagePos:	DC.L	0
TextPos:	DC.W	0
TextPointer:	DC.W	0

Positions:	DC.W	$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
		DC.W	$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
		DC.W	$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
		DC.W	$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
		DC.W	$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
		DC.W	$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
		DC.W	$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
		DC.W	$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
	

*************************************************************************
*		 	      Data Tables				*
*************************************************************************

Table1:	DC.W	144,056,146,056,148,056,150,056,152,056,154,056,156,056,158,056
	DC.W	160,056,162,056,164,056,166,056,168,056,170,056,172,056,174,056
	DC.W	144,058,146,058,148,058,150,058,152,058,154,058,156,058,158,058
	DC.W	160,058,162,058,164,058,166,058,168,058,170,058,172,058,174,058
	DC.W	144,060,146,060,148,060,150,060,152,060,154,060,156,060,158,060
	DC.W	160,060,162,060,164,060,166,060,168,060,170,060,172,060,174,060
	DC.W	144,062,146,062,148,062,150,062,152,062,154,062,156,062,158,062
	DC.W	160,062,162,062,164,062,166,062,168,062,170,062,172,062,174,062
	DC.W	144,064,146,064,148,064,150,064,152,064,154,064,156,064,158,064
	DC.W	160,064,162,064,164,064,166,064,168,064,170,064,172,064,174,064
	DC.W	144,066,146,066,148,066,150,066,152,066,154,066,156,066,158,066
	DC.W	160,066,162,066,164,066,166,066,168,066,170,066,172,066,174,066
	DC.W	144,068,146,068,148,068,150,068,152,068,154,068,156,068,158,068
	DC.W	160,068,162,068,164,068,166,068,168,068,170,068,172,068,174,068
	DC.W	144,070,146,070,148,070,150,070,152,070,154,070,156,070,158,070
	DC.W	160,070,162,070,164,070,166,070,168,070,170,070,172,070,174,070

Table2:	DC.W	136,052,139,052,142,052,145,052,148,052,151,052,154,052,157,052
	DC.W	160,052,163,052,166,052,169,052,172,052,175,052,178,052,181,052
	DC.W	136,055,139,055,142,055,145,055,148,055,151,055,154,055,157,055
	DC.W	160,055,163,055,166,055,169,055,172,055,175,055,178,055,181,055
	DC.W	136,058,139,058,142,058,145,058,148,058,151,058,154,058,157,058
	DC.W	160,058,163,058,166,058,169,058,172,058,175,058,178,058,181,058
	DC.W	136,061,139,061,142,061,145,061,148,061,151,061,154,061,157,061
	DC.W	160,061,163,061,166,061,169,061,172,061,175,061,178,061,181,061
	DC.W	136,064,139,064,142,064,145,064,148,064,151,064,154,064,157,064
	DC.W	160,064,163,064,166,064,169,064,172,064,175,064,178,064,181,064
	DC.W	136,067,139,067,142,067,145,067,148,067,151,067,154,067,157,067
	DC.W	160,067,163,067,166,067,169,067,172,067,175,067,178,067,181,067
	DC.W	136,070,139,070,142,070,145,070,148,070,151,070,154,070,157,070
	DC.W	160,070,163,070,166,070,169,070,172,070,175,070,178,070,181,070
	DC.W	136,073,139,073,142,073,145,073,148,073,151,073,154,073,157,073
	DC.W	160,073,163,073,166,073,169,073,172,073,175,073,178,073,181,073

Table3:	DC.W	128,048,132,048,136,048,140,048,144,048,148,048,152,048,156,048
	DC.W	160,048,164,048,168,048,172,048,176,048,180,048,184,048,188,048
	DC.W	128,052,132,052,136,052,140,052,144,052,148,052,152,052,156,052
	DC.W	160,052,164,052,168,052,172,052,176,052,180,052,184,052,188,052
	DC.W	128,056,132,056,136,056,140,056,144,056,148,056,152,056,156,056
	DC.W	160,056,164,056,168,056,172,056,176,056,180,056,184,056,188,056
	DC.W	128,060,132,060,136,060,140,060,144,060,148,060,152,060,156,060
	DC.W	160,060,164,060,168,060,172,060,176,060,180,060,184,060,188,060
	DC.W	128,064,132,064,136,064,140,064,144,064,148,064,152,064,156,064
	DC.W	160,064,164,064,168,064,172,064,176,064,180,064,184,064,188,064
	DC.W	128,068,132,068,136,068,140,068,144,068,148,068,152,068,156,068
	DC.W	160,068,164,068,168,068,172,068,176,068,180,068,184,068,188,068
	DC.W	128,072,132,072,136,072,140,072,144,072,148,072,152,072,156,072
	DC.W	160,072,164,072,168,072,172,072,176,072,180,072,184,072,188,072
	DC.W	128,076,132,076,136,076,140,076,144,076,148,076,152,076,156,076
	DC.W	160,076,164,076,168,076,172,076,176,076,180,076,184,076,188,076
	

Table4:	DC.W	120,044,125,044,130,044,135,044,140,044,145,044,150,044,155,044
	DC.W	160,044,165,044,170,044,175,044,180,044,185,044,190,044,195,044
	DC.W	120,049,125,049,130,049,135,049,140,049,145,049,150,049,155,049
	DC.W	160,049,165,049,170,049,175,049,180,049,185,049,190,049,195,049
	DC.W	120,054,125,054,130,054,135,054,140,054,145,054,150,054,155,054
	DC.W	160,054,165,054,170,054,175,054,180,054,185,054,190,054,195,054
	DC.W	120,059,125,059,130,059,135,059,140,059,145,059,150,059,155,059
	DC.W	160,059,165,059,170,059,175,059,180,059,185,059,190,059,195,059
	DC.W	120,064,125,064,130,064,135,064,140,064,145,064,150,064,155,064
	DC.W	160,064,165,064,170,064,175,064,180,064,185,064,190,064,195,064
	DC.W	120,069,125,069,130,069,135,069,140,069,145,069,150,069,155,069
	DC.W	160,069,165,069,170,069,175,069,180,069,185,069,190,069,195,069
	DC.W	120,074,125,074,130,074,135,074,140,074,145,074,150,074,155,074
	DC.W	160,074,165,074,170,074,175,074,180,074,185,074,190,074,195,074
	DC.W	120,079,125,079,130,079,135,079,140,079,145,079,150,079,155,079
	DC.W	160,079,165,079,170,079,175,079,180,079,185,079,190,079,195,079

Table5:	DC.W	112,040,118,040,124,040,130,040,136,040,142,040,148,040,154,040
	DC.W	160,040,166,040,172,040,178,040,184,040,190,040,196,040,202,040
	DC.W	112,046,118,046,124,046,130,046,136,046,142,046,148,046,154,046
	DC.W	160,046,166,046,172,046,178,046,184,046,190,046,196,046,202,046
	DC.W	112,052,118,052,124,052,130,052,136,052,142,052,148,052,154,052
	DC.W	160,052,166,052,172,052,178,052,184,052,190,052,196,052,202,052
	DC.W	112,058,118,058,124,058,130,058,136,058,142,058,148,058,154,058
	DC.W	160,058,166,058,172,058,178,058,184,058,190,058,196,058,202,058
	DC.W	112,064,118,064,124,064,130,064,136,064,142,064,148,064,154,064
	DC.W	160,064,166,064,172,064,178,064,184,064,190,064,196,064,202,064
	DC.W	112,070,118,070,124,070,130,070,136,070,142,070,148,070,154,070
	DC.W	160,070,166,070,172,070,178,070,184,070,190,070,196,070,202,070
	DC.W	112,076,118,076,124,076,130,076,136,076,142,076,148,076,154,076
	DC.W	160,076,166,076,172,076,178,076,184,076,190,076,196,076,202,076
	DC.W	112,082,118,082,124,082,130,082,136,082,142,082,148,082,154,082
	DC.W	160,082,166,082,172,082,178,082,184,082,190,082,196,082,202,082
	
Table6:	DC.W	104,036,111,036,118,036,125,036,132,036,139,036,146,036,153,036
	DC.W	160,036,167,036,174,036,181,036,188,036,195,036,202,036,209,036
	DC.W	104,043,111,043,118,043,125,043,132,043,139,043,146,043,153,043
	DC.W	160,043,167,043,174,043,181,043,188,043,195,043,202,043,209,043
	DC.W	104,050,111,050,118,050,125,050,132,050,139,050,146,050,153,050
	DC.W	160,050,167,050,174,050,181,050,188,050,195,050,202,050,209,050
	DC.W	104,057,111,057,118,057,125,057,132,057,139,057,146,057,153,057
	DC.W	160,057,167,057,174,057,181,057,188,057,195,057,202,057,209,057
	DC.W	104,064,111,064,118,064,125,064,132,064,139,064,146,064,153,064
	DC.W	160,064,167,064,174,064,181,064,188,064,195,064,202,064,209,064
	DC.W	104,071,111,071,118,071,125,071,132,071,139,071,146,071,153,071
	DC.W	160,071,167,071,174,071,181,071,188,071,195,071,202,071,209,071
	DC.W	104,078,111,078,118,078,125,078,132,078,139,078,146,078,153,078
	DC.W	160,078,167,078,174,078,181,078,188,078,195,078,202,078,209,078
	DC.W	104,085,111,085,118,085,125,085,132,085,139,085,146,085,153,085
	DC.W	160,085,167,085,174,085,181,085,188,085,195,085,202,085,209,085

Table7:	DC.W	096,032,104,032,112,032,120,032,128,032,136,032,144,032,152,032
	DC.W	160,032,168,032,176,032,184,032,192,032,200,032,208,032,216,032
	DC.W	096,040,104,040,112,040,120,040,128,040,136,040,144,040,152,040
	DC.W	160,040,168,040,176,040,184,040,192,040,200,040,208,040,216,040
	DC.W	096,048,104,048,112,048,120,048,128,048,136,048,144,048,152,048
	DC.W	160,048,168,048,176,048,184,048,192,048,200,048,208,048,216,048
	DC.W	096,056,104,056,112,056,120,056,128,056,136,056,144,056,152,056
	DC.W	160,056,168,056,176,056,184,056,192,056,200,056,208,056,216,056
	DC.W	096,064,104,064,112,064,120,064,128,064,136,064,144,064,152,064
	DC.W	160,064,168,064,176,064,184,064,192,064,200,064,208,064,216,064
	DC.W	096,072,104,072,112,072,120,072,128,072,136,072,144,072,152,072
	DC.W	160,072,168,072,176,072,184,072,192,072,200,072,208,072,216,072
	DC.W	096,080,104,080,112,080,120,080,128,080,136,080,144,080,152,080
	DC.W	160,080,168,080,176,080,184,080,192,080,200,080,208,080,216,080
	DC.W	096,088,104,088,112,088,120,088,128,088,136,088,144,088,152,088
	DC.W	160,088,168,088,176,088,184,088,192,088,200,088,208,088,216,088
	
Table8:	DC.W	088,028,097,028,106,028,115,028,124,028,133,028,142,028,151,028
	DC.W	160,028,169,028,178,028,187,028,196,028,205,028,214,028,223,028
	DC.W	088,037,097,037,106,037,115,037,124,037,133,037,142,037,151,037
	DC.W	160,037,169,037,178,037,187,037,196,037,205,037,214,037,223,037
	DC.W	088,046,097,046,106,046,115,046,124,046,133,046,142,046,151,046
	DC.W	160,046,169,046,178,046,187,046,196,046,205,046,214,046,223,046
	DC.W	088,055,097,055,106,055,115,055,124,055,133,055,142,055,151,055
	DC.W	160,055,169,055,178,055,187,055,196,055,205,055,214,055,223,055
	DC.W	088,064,097,064,106,064,115,064,124,064,133,064,142,064,151,064
	DC.W	160,064,169,064,178,064,187,064,196,064,205,064,214,064,223,064
	DC.W	088,073,097,073,106,073,115,073,124,073,133,073,142,073,151,073
	DC.W	160,073,169,073,178,073,187,073,196,073,205,073,214,073,223,073
	DC.W	088,082,097,082,106,082,115,082,124,082,133,082,142,082,151,082
	DC.W	160,082,169,082,178,082,187,082,196,082,205,082,214,082,223,082
	DC.W	088,091,097,091,106,091,115,091,124,091,133,091,142,091,151,091
	DC.W	160,091,169,091,178,091,187,091,196,091,205,091,214,091,223,091
	
Table9:	DC.W	080,024,090,024,100,024,110,024,120,024,130,024,140,024,150,024
	DC.W	160,024,170,024,180,024,190,024,200,024,210,024,220,024,230,024
	DC.W	080,034,090,034,100,034,110,034,120,034,130,034,140,034,150,034
	DC.W	160,034,170,034,180,034,190,034,200,034,210,034,220,034,230,034
	DC.W	080,044,090,044,100,044,110,044,120,044,130,044,140,044,150,044
	DC.W	160,044,170,044,180,044,190,044,200,044,210,044,220,044,230,044
	DC.W	080,054,090,054,100,054,110,054,120,054,130,054,140,054,150,054
	DC.W	160,054,170,054,180,054,190,054,200,054,210,054,220,054,230,054
	DC.W	080,064,090,064,100,064,110,064,120,064,130,064,140,064,150,064
	DC.W	160,064,170,064,180,064,190,064,200,064,210,064,220,064,230,064
	DC.W	080,074,090,074,100,074,110,074,120,074,130,074,140,074,150,074
	DC.W	160,074,170,074,180,074,190,074,200,074,210,074,220,074,230,074
	DC.W	080,084,090,084,100,084,110,084,120,084,130,084,140,084,150,084
	DC.W	160,084,170,084,180,084,190,084,200,084,210,084,220,084,230,084
	DC.W	080,094,090,094,100,094,110,094,120,094,130,094,140,094,150,094
	DC.W	160,094,170,094,180,094,190,094,200,094,210,094,220,094,230,094
	
Table10:DC.W	072,020,083,020,094,020,105,020,116,020,127,020,138,020,149,020
	DC.W	160,020,171,020,182,020,193,020,204,020,215,020,226,020,237,020
	DC.W	072,031,083,031,094,031,105,031,116,031,127,031,138,031,149,031
	DC.W	160,031,171,031,182,031,193,031,204,031,215,031,226,031,237,031
	DC.W	072,042,083,042,094,042,105,042,116,042,127,042,138,042,149,042
	DC.W	160,042,171,042,182,042,193,042,204,042,215,042,226,042,237,042
	DC.W	072,053,083,053,094,053,105,053,116,053,127,053,138,053,149,053
	DC.W	160,053,171,053,182,053,193,053,204,053,215,053,226,053,237,053
	DC.W	072,064,083,064,094,064,105,064,116,064,127,064,138,064,149,064
	DC.W	160,064,171,064,182,064,193,064,204,064,215,064,226,064,237,064
	DC.W	072,075,083,075,094,075,105,075,116,075,127,075,138,075,149,075
	DC.W	160,075,171,075,182,075,193,075,204,075,215,075,226,075,237,075
	DC.W	072,086,083,086,094,086,105,086,116,086,127,086,138,086,149,086
	DC.W	160,086,171,086,182,086,193,086,204,086,215,086,226,086,237,086
	DC.W	072,097,083,097,094,097,105,097,116,097,127,097,138,097,149,097
	DC.W	160,097,171,097,182,097,193,097,204,097,215,097,226,097,237,097
	
Table11:DC.W	064,016,076,016,088,016,100,016,112,016,124,016,136,016,148,016
	DC.W	160,016,172,016,184,016,196,016,208,016,220,016,232,016,244,016
	DC.W	064,028,076,028,088,028,100,028,112,028,124,028,136,028,148,028
	DC.W	160,028,172,028,184,028,196,028,208,028,220,028,232,028,244,028
	DC.W	064,040,076,040,088,040,100,040,112,040,124,040,136,040,148,040
	DC.W	160,040,172,040,184,040,196,040,208,040,220,040,232,040,244,040
	DC.W	064,052,076,052,088,052,100,052,112,052,124,052,136,052,148,052
	DC.W	160,052,172,052,184,052,196,052,208,052,220,052,232,052,244,052
	DC.W	064,064,076,064,088,064,100,064,112,064,124,064,136,064,148,064
	DC.W	160,064,172,064,184,064,196,064,208,064,220,064,232,064,244,064
	DC.W	064,076,076,076,088,076,100,076,112,076,124,076,136,076,148,076
	DC.W	160,076,172,076,184,076,196,076,208,076,220,076,232,076,244,076
	DC.W	064,088,076,088,088,088,100,088,112,088,124,088,136,088,148,088
	DC.W	160,088,172,088,184,088,196,088,208,088,220,088,232,088,244,088
	DC.W	064,100,076,100,088,100,100,100,112,100,124,100,136,100,148,100
	DC.W	160,100,172,100,184,100,196,100,208,100,220,100,232,100,244,100
	
Table12:DC.W	056,012,069,012,082,012,095,012,108,012,121,012,134,012,147,012
	DC.W	160,012,173,012,186,012,199,012,212,012,225,012,238,012,251,012
	DC.W	056,025,069,025,082,025,095,025,108,025,121,025,134,025,147,025
	DC.W	160,025,173,025,186,025,199,025,212,025,225,025,238,025,251,025
	DC.W	056,038,069,038,082,038,095,038,108,038,121,038,134,038,147,038
	DC.W	160,038,173,038,186,038,199,038,212,038,225,038,238,038,251,038
	DC.W	056,051,069,051,082,051,095,051,108,051,121,051,134,051,147,051
	DC.W	160,051,173,051,186,051,199,051,212,051,225,051,238,051,251,051
	DC.W	056,064,069,064,082,064,095,064,108,064,121,064,134,064,147,064
	DC.W	160,064,173,064,186,064,199,064,212,064,225,064,238,064,251,064
	DC.W	056,077,069,077,082,077,095,077,108,077,121,077,134,077,147,077
	DC.W	160,077,173,077,186,077,199,077,212,077,225,077,238,077,251,077
	DC.W	056,090,069,090,082,090,095,090,108,090,121,090,134,090,147,090
	DC.W	160,090,173,090,186,090,199,090,212,090,225,090,238,090,251,090
	DC.W	056,103,069,103,082,103,095,103,108,103,121,103,134,103,147,103
	DC.W	160,103,173,103,186,103,199,103,212,103,225,103,238,103,251,103
	
Table13:DC.W	048,008,062,008,076,008,090,008,104,008,118,008,132,008,146,008
	DC.W	160,008,174,008,188,008,202,008,216,008,230,008,244,008,258,008	
	DC.W	048,022,062,022,076,022,090,022,104,022,118,022,132,022,146,022
	DC.W	160,022,174,022,188,022,202,022,216,022,230,022,244,022,258,022	
	DC.W	048,036,062,036,076,036,090,036,104,036,118,036,132,036,146,036
	DC.W	160,036,174,036,188,036,202,036,216,036,230,036,244,036,258,036	
	DC.W	048,050,062,050,076,050,090,050,104,050,118,050,132,050,146,050
	DC.W	160,050,174,050,188,050,202,050,216,050,230,050,244,050,258,050	
	DC.W	048,064,062,064,076,064,090,064,104,064,118,064,132,064,146,064
	DC.W	160,064,174,064,188,064,202,064,216,064,230,064,244,064,258,064	
	DC.W	048,078,062,078,076,078,090,078,104,078,118,078,132,078,146,078
	DC.W	160,078,174,078,188,078,202,078,216,078,230,078,244,078,258,078	
	DC.W	048,092,062,092,076,092,090,092,104,092,118,092,132,092,146,092
	DC.W	160,092,174,092,188,092,202,092,216,092,230,092,244,092,258,092	
	DC.W	048,106,062,106,076,106,090,106,104,106,118,106,132,106,146,106
	DC.W	160,106,174,106,188,106,202,106,216,106,230,106,244,106,258,106	
	
Table14:DC.W	040,004,055,004,070,004,085,004,100,004,115,004,130,004,145,004
	DC.W	160,004,175,004,190,004,205,004,220,004,235,004,250,004,265,004
	DC.W	040,019,055,019,070,019,085,019,100,019,115,019,130,019,145,019
	DC.W	160,019,175,019,190,019,205,019,220,019,235,019,250,019,265,019
	DC.W	040,034,055,034,070,034,085,034,100,034,115,034,130,034,145,034
	DC.W	160,034,175,034,190,034,205,034,220,034,235,034,250,034,265,034
	DC.W	040,049,055,049,070,049,085,049,100,049,115,049,130,049,145,049
	DC.W	160,049,175,049,190,049,205,049,220,049,235,049,250,049,265,049
	DC.W	040,064,055,064,070,064,085,064,100,064,115,064,130,064,145,064
	DC.W	160,064,175,064,190,064,205,064,220,064,235,064,250,064,265,064
	DC.W	040,079,055,079,070,079,085,079,100,079,115,079,130,079,145,079
	DC.W	160,079,175,079,190,079,205,079,220,079,235,079,250,079,265,079
	DC.W	040,094,055,094,070,094,085,094,100,094,115,094,130,094,145,094
	DC.W	160,094,175,094,190,094,205,094,220,094,235,094,250,094,265,094
	DC.W	040,109,055,109,070,109,085,109,100,109,115,109,130,109,145,109
	DC.W	160,109,175,109,190,109,205,109,220,109,235,109,250,109,265,109
	
Table15:DC.W	032,000,048,000,064,000,080,000,096,000,112,000,128,000,144,000
	DC.W	160,000,176,000,192,000,208,000,224,000,240,000,256,000,272,000
	DC.W	032,016,048,016,064,016,080,016,096,016,112,016,128,016,144,016
	DC.W	160,016,176,016,192,016,208,016,224,016,240,016,256,016,272,016
	DC.W	032,032,048,032,064,032,080,032,096,032,112,032,128,032,144,032
	DC.W	160,032,176,032,192,032,208,032,224,032,240,032,256,032,272,032
	DC.W	032,048,048,048,064,048,080,048,096,048,112,048,128,048,144,048
	DC.W	160,048,176,048,192,048,208,048,224,048,240,048,256,048,272,048
	DC.W	032,064,048,064,064,064,080,064,096,064,112,064,128,064,144,064
	DC.W	160,064,176,064,192,064,208,064,224,064,240,064,256,064,272,064
	DC.W	032,080,048,080,064,080,080,080,096,080,112,080,128,080,144,080
	DC.W	160,080,176,080,192,080,208,080,224,080,240,080,256,080,272,080
	DC.W	032,096,048,096,064,096,080,096,096,096,112,096,128,096,144,096
	DC.W	160,096,176,096,192,096,208,096,224,096,240,096,256,096,272,096
	DC.W	032,112,048,112,064,112,080,112,096,112,112,112,128,112,144,112
	DC.W	160,112,176,112,192,112,208,112,224,112,240,112,256,112,272,112
	
Table16:DC.W	032,000,048,000,064,000,080,000,096,000,112,000,128,000,144,000
	DC.W	160,000,176,000,192,000,208,000,224,000,240,000,256,000,272,000
	DC.W	032,016,048,016,064,016,080,016,096,016,112,016,128,016,144,016
	DC.W	160,016,176,016,192,016,208,016,224,016,240,016,256,016,272,016
	DC.W	032,032,048,032,064,032,080,032,096,032,112,032,128,032,144,032
	DC.W	160,032,176,032,192,032,208,032,224,032,240,032,256,032,272,032
	DC.W	032,048,048,048,064,048,080,048,096,048,112,048,128,048,144,048
	DC.W	160,048,176,048,192,048,208,048,224,048,240,048,256,048,272,048
	DC.W	032,064,048,064,064,064,080,064,096,064,112,064,128,064,144,064
	DC.W	160,064,176,064,192,064,208,064,224,064,240,064,256,064,272,064
	DC.W	032,080,048,080,064,080,080,080,096,080,112,080,128,080,144,080
	DC.W	160,080,176,080,192,080,208,080,224,080,240,080,256,080,272,080
	DC.W	032,096,048,096,064,096,080,096,096,096,112,096,128,096,144,096
	DC.W	160,096,176,096,192,096,208,096,224,096,240,096,256,096,272,096
	DC.W	032,112,048,112,064,112,080,112,096,112,112,112,128,112,144,112
	DC.W	160,112,176,112,192,112,208,112,224,112,240,112,256,112,272,112
	
;====================
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
		................

STOP_MUSIQUE:			;ARRET DE LA MUSIQUE
		................

PLAY_MUSIQUE:			;JOUE LA MUSIQUE
		................

;====================
EVEN				;NOTRE LISTE COPPER
NEWCOPPER:   

	DC.W	$008E,$2C81	;DIMENSIONS DE L'ECRAN
	DC.W	$0090,$2CD1	;

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

	;POINTEURS ADRESSE DES PLANS DE L'IMAGE

	SCREENPTRS:

	DC.W $00E0,0
	DC.W $00E2,0
	DC.W $00E4,0
	DC.W $00E6,0   


	;REGISTRE POUR CHOISIR RESOLUTION	

	DC.W	$0100,$0200		;0 PLANS+MODE COULEURS

	;DECALAGE ECRAN 

	DC.W	$0102,$0010

	;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,$0444	;COULEUR 01
	DC.W	$0184,$0FFF	;COULEUR 02
	DC.W	$0186,$0777	;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


	;RESOLUTION 2 PLANS + COULEURS

	DC.W $7001,$FFFE,$100,$2200,$180,$0111


	;RESOLUTION 0 PLAN

	DC.W $EF01,$FFFE,$100,$0000,$180,$0000


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


VOICI UN AUTRE PROGRAMME DE DESSIN FRACTAL. CELUI-CI PERMET LA REPRESENTATION
EN PERSPECTIVE CAVALIERE D'UN PAYSAGE MONTAGNEUX.
ON SORT DU PROGRAMME EN APPUYANT SUR LE BOUTON GAUCHE DE LA SOURIS, EN APPU
YANT SUR LE BOUTON DROIT, ON AFFICHE UNE AUTRE IMAGE.

(CETTE ROUTINE A ETE UTILISEE EN COMBINAISON AVEC LA ROUTINE DE ZOOM TEXT
DANS UNE DEMO DE PHOENIX EN 1990)

=============================================================================
		PROGRAMME DE DESSIN FRACTAL 3D
=============================================================================

;POUR CHARGER LES DATAS TAPEZ:
;
;
;RI		RETURN
;MODULE		RETURN
;MT_DATA	RETURN RETURN
;
;PUIS TAPEZ
;G BEGIN	RETURN RETURN
;
;SUPPRIMEZ LES LIGNES SUIVANTES SI VOTRE VERSION DU SEKA
;NE COMPORTE PAS LA COMMANDE Y

>EXTERN "MODULE",MT_DATA

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
;==================================
IMAGE=$40000			;L'IMAGE SE TROUVE A $40000

FINIMAGE=IMAGE+[48*256*5]	;FIN DE L'IMAGE

MT_DATA=IMAGE+[48*256*5]	;LA MUSIQUE SE TROUVE JUSTE APRES
				;LES CARACTERES
FINDATA=MT_DATA+80580		;FIN DES DATAS APRES LA MUSIQUE
			
;==================================
TLIGNE=384/8			;LARGEUR EN MOTS
TBITPLANES=TLIGNE*256		;TAILLE BITPLANS
NBRPLANS=5			;NOMBRES DE PLANS
;==================================
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 CLEAR_IMAGE		;EFFACE IMAGE

BSR.L INIT_MUSIQUE		;INITIALISATION DE LA MUSIQUE

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

INIT_FRACTAL:

BSR.L CLEAR_IMAGE		;EFFACE IMAGE

LEA FINIMAGE,A5			;INITIALISATION VARIABLES
MOVE.W $DFF006,A4
CLR.L -(A5)
MOVE.W #256,-(A5)
MOVE.L #200,D0
MOVE.L D0,-(A5)
MOVE.L D0,-(A5)

BSR.L RECURRENCE		;ROUTINE CALCUL

WAIT:
BTST	#6,$BFE001		;TESTE BOUTON GAUCHE SOURIS
BEQ.s	END

BTST	#10,$DFF016		;TESTE BOUTON DROIT SOURIS
BEQ.S INIT_FRACTAL		;POUR NOUVELLE IMAGE
JMP WAIT


END: 				;FIN:	
BSR.L STOP_MUSIQUE		;ARRET DE LA MUSIQUE
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)

BSR.L PLAY_MUSIQUE		;VA A LA ROUTINE POUR JOUER LA MUSIQUE

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
;====================
CLEAR_IMAGE:		;EFFACE IMAGE
LEA IMAGE,A0
MOVE.W #[24*256*5]-1,D0
CLRI:
MOVE.W #0,(A0)+
DBF D0,CLRI
RTS
;=============================
RECURRENCE:			;ROUTINE DE CALCUL FRACTAL
BTST	#6,$BFE001
BEQ.L	END
BTST	#10,$DFF016
BEQ.L INIT_FRACTAL

TST.W 8(A5)
BNE.S CONTINUER
MOVE.W (A5),D0
ADD.W #10,A5
MOVEM.W (A5)+,D1/D2

ASR.W #1,D1
ADD.W D1,D2

ASR.W #1,D0
SUB.W D0,D1
ADD.W #128,D1
ASR.W #2,D0
CMP.W #32,D0
BMI.S PASDEPASSEMENT
MOVE.W #31,D0

PASDEPASSEMENT:
LSL.W #4,D1
MOVE.W D1,D7
ADD.W D1,D1
ADD.W D7,D1

MOVE.W D2,D3
LSR.W #3,D2
ADD.W D2,D1
LEA IMAGE,A0
ADD.W D1,A0
AND.W #7,D3
EOR.W #7,D3

MOVEQ #0,D1
BOUCLEPLOT:
BCLR D3,(A0)
BCLR D3,TLIGNE(A0)
BCLR D3,TLIGNE*2(A0)
BTST D1,D0
BEQ.s FINBOUCLEPLOT
BSET D3,(A0)
BSET D3,TLIGNE(A0)
BSET D3,TLIGNE*2(A0)

FINBOUCLEPLOT:
ADD.W #TBITPLANES,A0
ADDQ.W #1,D1
CMP.W #NBRPLANS,D1
BMI.S BOUCLEPLOT
;MOVE.W A4,COLOR
RTS

CONTINUER:
MOVEM.W (A5)+,D0-D6
MOVE.W D3,D7
ADD.W D2,D7
ASR.W #1,D7
MOVE.W D7,A0

MOVE.W D2,D7
ADD.W D1,D7
ASR.W #1,D7
MOVE.W D7,A1

MOVE.W D1,D7
ADD.W D0,D7
ASR.W #1,D7
MOVE.W D7,A2

MOVE.W D0,D7
ADD.W D3,D7
ASR.W #1,D7
MOVE.W D7,A3

ADD.L $DFF006,A4
MOVE.L A4,D7
LSL.L #2,D7
ADD.L D7,A4

MOVE.W D4,D7
SWAP D4
ADD.W D7,D7
MOVE.W D7,D4
SUBQ.W #1,D4
MOVE.W A4,D7
AND.W D4,D7
SWAP D4
ASR.W #1,D4
SUB.W D4,D7

ADD.W A0,D7
ADD.W A2,D7
ASR.W #1,D7

MOVE.W D6,-(A5)
MOVE.W D5 ,-(A5)
ADD.W D4,(A5)
MOVE.W D4,-(A5)
MOVE.W A3,-(A5)
MOVE.W D7,-(A5)
MOVE.W A2,-(A5)
MOVE.W D0,-(A5)

MOVE.W D6,-(A5)
ADD.W D4,(A5)
MOVE.W D5,-(A5)
ADD.W D4,(A5)
MOVE.W D4,-(A5)
MOVE.W D7,-(A5)
MOVE.W A1,-(A5)
MOVE.W D1,-(A5)
MOVE.W A2,-(A5)

MOVEM.W D3-D6,-(A5)
MOVE.W A0,-(A5)
MOVE.W D7,-(A5)
MOVE.W A3,-(A5)


MOVE.W D6,-(A5)
ADD.W D4,(A5)
MOVE.W D5,-(A5)
MOVE.W D4,-(A5)
MOVE.W A0,-(A5)
MOVE.W D2,-(A5)
MOVE.W A1,-(A5)
MOVE.W D7,-(A5)


BSR.L RECURRENCE
BSR.L RECURRENCE
BSR.L RECURRENCE
BRA.L RECURRENCE
rts
;====================
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
		................

STOP_MUSIQUE:			;ARRET DE LA MUSIQUE
		................

PLAY_MUSIQUE:			;JOUE LA MUSIQUE
		................

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

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

	;POINTEURS ADRESSE DES PLANS DE L'IMAGE

	DC.W $00E0,IMAGE+[48*256*0]/65536
	DC.W $00E2,IMAGE+[48*256*0] & 65535
	DC.W $00E4,IMAGE+[48*256*1]/65536
	DC.W $00E6,IMAGE+[48*256*1] & 65535
	DC.W $00E8,IMAGE+[48*256*2]/65536
	DC.W $00EA,IMAGE+[48*256*2] & 65535
	DC.W $00EC,IMAGE+[48*256*3]/65536
	DC.W $00EE,IMAGE+[48*256*3] & 65535
	DC.W $00F0,IMAGE+[48*256*4]/65536
	DC.W $00F2,IMAGE+[48*256*4] & 65535


	;REGISTRE POUR CHOISIR RESOLUTION

	DC.W	$0100,$5200		;5 PLANS+MODE COULEURS

	;DECALAGE ECRAN - INUTILISE ICI

	DC.W	$0102,$0000

	;PRIORITE DES PLANS ET SPRITES - INUTILISE ICI

	DC.W 	$0104,$0000

	;MODULOS DES PLANS

	DC.W	$0108,$0008	;MODULOS PLANS PAIRS
	DC.W 	$010A,$0008	;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,$0001	;COULEUR 01
	DC.W	$0184,$0002	;COULEUR 02
	DC.W	$0186,$0003	;COULEUR 03
	DC.W	$0188,$0004	;COULEUR 04
	DC.W	$018A,$0005	;COULEUR 05
	DC.W	$018C,$0006	;COULEUR 06
	DC.W	$018E,$0007	;COULEUR 07
	DC.W	$0190,$0008	;COULEUR 08
	DC.W	$0192,$0009	;COULEUR 09
	DC.W	$0194,$000A	;COULEUR 10
	DC.W	$0196,$000B	;COULEUR 11
	DC.W	$0198,$000C	;COULEUR 12
	DC.W	$019A,$000D	;COULEUR 13
	DC.W	$019C,$000E	;COULEUR 14
	DC.W	$019E,$000F	;COULEUR 15
	DC.W	$01A0,$011F	;COULEUR 16	;LES COULEURS DE 16 A 31 SONT
	DC.W	$01A2,$022F	;COULEUR 17	;AUSSI CELLES DES SPRITES
	DC.W	$01A4,$033F	;COULEUR 18
	DC.W	$01A6,$044F	;COULEUR 19	;LES COULEURS 16 A 31 NE SONT
	DC.W	$01A8,$055F	;COULEUR 20	;PAS UTILISEES DANS LE MODE
	DC.W	$01AA,$066F	;COULEUR 21	;HOLD AND MODIFY (HAM)
	DC.W	$01AC,$077F	;COULEUR 22
	DC.W	$01AE,$088F	;COULEUR 23
	DC.W	$01B0,$099F	;COULEUR 24
	DC.W	$01B2,$0AAF	;COULEUR 25
	DC.W	$01B4,$0BBF	;COULEUR 26
	DC.W	$01B6,$0CCF	;COULEUR 27
	DC.W	$01B8,$0DDF	;COULEUR 28
	DC.W	$01BA,$0EEF	;COULEUR 29
	DC.W	$01BC,$0FFF	;COULEUR 30
	DC.W	$01BE,$0FFF	;COULEUR 31

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

	DC.W $FFDF,$FFFE

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



VOICI ENFIN LA REPLAY ROUTINE DE L'OKTALYZER 8 VOIES.
EN FAIT CE N'EST PAS UNE VRAI REPLAY ROUTINE, MAIS UN PLAYER.
POUR L'UTILISER, VOUS DEVEZ IMPERATIVEMENT UTILISER LE PROGRAMME RELOX.
CELUI PERMET DE DONNER UNE ADRESSE ABSOLU AU PLAYER... SANS CELA PAS DE 8
VOIES.....

LE PROGRAMME REPLAY_ABS EST LE FAMEUX PLAYER..

A PARTIR DU CLI, TAPEZ   RELOX
UNE FOIS CHARGE, LE PROGRAMME VOUS DEMANDE LE NOM DU PLAYER, TAPEZ 
	REPLAY_ABS

ENSUITE LE PROGRAMME DEMANDE L'ADRESSE ABSOLUE, A LAQUELLE LE PLAYER SERA
PLACE (DANS NOTRE EXEMPLE $40000)

PUIS LE PROGRAMME DEMANDE LE NOM DU PROGRAMME A SAUVER....

DANS LE SOURCE VOUS N'AUREZ PLUS QU'A APPELER:


INIT_MUSIQUE:			;INITIALISATION DE LA MUSIQUE
	
		LEA MUSIC,A0	;ADRESSE DU MODULE DANS A0
		JSR PLAYER+00	;ADRESSE SAUT POUR INITIALISATION
		RTS	

STOP_MUSIQUE:			;ARRET DE LA MUSIQUE

		JSR PLAYER+12	;ADRESSE SAUT POUR ARRET
		RTS

PLAY_MUSIQUE:			;JOUE LA MUSIQUE
		
		JSR PLAYER+06	;ADRESSE SAUT POUR JOUER MUSIQUE
		RTS

LE PLAYER ETANT CHARGE A L'ADRESSE $40000

(ATTENTION VOUS NE POUVEZ PAS UTILISER LE PROGRAMME SAUVE, A UNE AUTRE
ADRESSE QUE $40000)



=============================================================================
		REPLAY ROUTINE POUR OKTALYZER 8 VOIES
=============================================================================
;POUR CHARGER LES DATAS TAPEZ:
;
;RI		RETURN
;PLAYER		RETURN
;PLAYER		RETURN RETURN
;
;RI		RETURN
;PIC_RAW	RETURN
;IMAGE		RETURN RETURN
;
;RI		RETURN
;FONT_RAW	RETURN
;FONT		RETURN RETURN
;
;RI		RETURN
;MODULE		RETURN
;MUSIC		RETURN RETURN
;
;PUIS TAPEZ
;G BEGIN	RETURN RETURN
;
;SUPPRIMEZ LES LIGNES SUIVANTES SI VOTRE VERSION DU SEKA
;NE COMPORTE PAS LA COMMANDE Y

>EXTERN "PLAYER",PLAYER
>EXTERN "PIC_RAW",IMAGE
>EXTERN "FONT_RAW",FONT
>EXTERN "MODULE",MUSIC

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
;==================================
PLAYER=$40000			;PLAYER OKTALYSER 8 VOIES

IMAGE=PLAYER+10640		;L'IMAGE DE FOND

SCROLL=IMAGE+[40*256*5]		;LE FOND DU SCROLL SE TROUVE JUSTE
				;APRES L'IMAGE
FONT=SCROLL+[50*35*3]		;LE DESSIN DES CARACTERES SE TROUVE
				;JUSTE APRES LE FOND DU SCROLL
MUSIC=FONT+[40*256*3]		;LA MUSIQUE SE TROUVE JUSTE APRES
				;LES CARACTERES
FINDATA=MUSIC+149354		;FIN DES DATAS APRES LA MUSIQUE
				
;==================================
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

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

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.L INIT_MUSIQUE		;INITIALISATION DE LA MUSIQUE

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 #$f0,$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.L STOP_MUSIQUE		;ARRET DE LA MUSIQUE
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)

BSR.L PLAY_MUSIQUE		;VA A LA ROUTINE POUR JOUER LA MUSIQUE

BSR.L 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
;====================
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.L SEARCH_CHAR		;AFFICHE UN NOUVEAU CARACTERE
BSR.L SCROLLTEXT		;SCROLLE LE FOND DU SCROLL
RTS
;===================	
SCROLLTEXT:			
LEA SCROLL,A0 			;ON POINTE A0 SUR LE FOND DU SCROLL
	
BSR.L 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 #[35*64*3]+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.L 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
LEA 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.L 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 #$09F00000,BLTCON0	;$0 -> PAS DE DECALAGE DE LA SOURCE A
				;$9 -> POUR 1 SOURCE BLITTER A
				;$F0 -> MINTERM POUR COPIE DIRECTE

MOVE.W #[35*3*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 ' ABCDEFGHI'	;TABLE DES CARACTERES
	       DC.B 'JKLMNOPQRS'	;TELS QU'ILS SONT DISPOSES
	       DC.B 'TUVWXYZ.,:'	;DANS NOTRE IMAGE	
	       DC.B '()@#!?-*^/'
	       DC.B '0123456789%'
         
EVEN
FONT1=FONT		;ADRESSES DES LETTRES PAR LIGNES
FONT2=FONT+[3*35*40] 
FONT3=FONT+[6*35*40]
FONT4=FONT+[9*35*40]
FONT5=FONT+[12*35*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 'VOICI UN PETIT EXEMPLE DE PLAYER POUR MUSIQUES'
DC.B 'OKTALYSER REALISEES SUR 8 VOIES '

dc.b '    ',0
fin:
;====================
EVEN
INIT_MUSIQUE:			;INITIALISATION DE LA MUSIQUE
	
		LEA MUSIC,A0	;ADRESSE DU MODULE DANS A0
		JSR PLAYER+00	;ADRESSE SAUT POUR INITIALISATION
		RTS	

STOP_MUSIQUE:			;ARRET DE LA MUSIQUE

		JSR PLAYER+12	;ADRESSE SAUT POUR ARRET
		RTS

PLAY_MUSIQUE:			;JOUE LA MUSIQUE
		
		JSR PLAYER+06	;ADRESSE SAUT POUR JOUER MUSIQUE
		RTS

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

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

	;POINTEURS ADRESSE DES PLANS DE L'IMAGE

	DC.W $00E0,IMAGE+[40*256*0]/65536
	DC.W $00E2,IMAGE+[40*256*0] & 65535   
	DC.W $00E4,IMAGE+[40*256*1]/65536
	DC.W $00E6,IMAGE+[40*256*1] & 65535
	DC.W $00E8,IMAGE+[40*256*2]/65536
	DC.W $00EA,IMAGE+[40*256*2] & 65535
	DC.W $00EC,IMAGE+[40*256*3]/65536
	DC.W $00EE,IMAGE+[40*256*3] & 65535
	DC.W $00F0,IMAGE+[40*256*4]/65536
	DC.W $00F2,IMAGE+[40*256*4] & 65535


	;REGISTRE POUR CHOISIR RESOLUTION	

	DC.W	$0100,$5200		;5 PLANS+MODE COULEURS

	;DECALAGE ECRAN - INUTILISE ICI

	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

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

	DC.W $FFDF,$FFFE

DC.W $1101,$FFFE

DC.W $0100,0		;MET RESOLUTION NULLE

DC.W $0180,$0000	;REGISTRES DES COULEURS
DC.W $0182,$0a50	;POUR LE SCROLL
DC.W $0184,$0dc0
DC.W $0186,$0606
DC.W $0188,$0818
DC.W $018a,$0a2a
DC.W $018c,$0d3d
DC.W $018e,$0f5f

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


DC.W $1201,$FFFE

		DC.W $0100,$3200	;RESOLUTION 3 PLANS = 8 COULEURS

		DC.W $10A,110-4		;MODULO = 10 + 50 + 50 - 4
					;-4 POUR PASSAGE EN OVERSCAN
		DC.W $108,110-4		;MODULO POUR FORMAT RAW BLITTER

		;POINTEURS DE PLANS DU FOND DE SCROLL

		DC.W $00E0,SCROLL+[50*0]/65536	
		DC.W $00E2,SCROLL+[50*0] & 65535
		DC.W $00E4,SCROLL+[50*1]/65536
		DC.W $00E6,SCROLL+[50*1] & 65535
		DC.W $00E8,SCROLL+[50*2]/65536  
		DC.W $00EA,SCROLL+[50*2] & 65535

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

CE PROGRAMME PERMET L'AFFICHAGE D'UN NOMBRE ILLIMITE DE BOBS.
EN FAIT CELA EST FAUX......

ON DISPOSE DE 8 ECRANS, SUR LESQUELS ON AFFICHE  1  BOB   A DIFFERENTES POSI
TIONS (SUIVANT UNE COURBE), ON N'EFFACE JAMAIS LES ECRANS, MAIS ON LES AFFI
CHE LES UNS APRES LES AUTRES, DONNANT AINSI UNE EFFET DE MOUVEMENT DES BOBS
ET UN NOMBRE APPAREMENT CROISSANT......


=============================================================================
		PROGRAMME D'UNLIMITED BOBS
=============================================================================
;POUR CHARGER LES DATAS TAPEZ:
;RI		RETURN
;BOB_RAW	RETURN
;BOBDATA	RETURN RETURN
;
;RI		RETURN
;BOB_MASK	RETURN
;BOBMASK	RETURN RETURN
;
;RI
;MODULE		RETURN
;MT_DATA	RETURN RETURN
;
;PUIS TAPEZ
;G BEGIN	RETURN RETURN
;
;SUPPRIMEZ LES LIGNES SUIVANTES SI VOTRE VERSION DU SEKA
;NE COMPORTE PAS LA COMMANDE Y

>EXTERN "BOB_RAW",BOBDATA
>EXTERN "BOB_MASK",BOBMASK
>EXTERN "MODULE",MT_DATA

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
;==================================
BITPLANES=$35000		;IMAGES POUR ANIMATIONS

BOBDATA=BITPLANES+[40*256*3*8]	;IMAGE DU BOB

BOBMASK=BOBDATA+192		;MASQUE DU BOB
	
MT_DATA=BOBMASK+192		;MODULE MUSIQUE

FINDATA=MT_DATA+39498		;FIN DES DATAS

;==================================
BUFFERS=7			;NOMBRE D'ECRANS -1
PLANES=3			;NOMBRE DE PLANS
PLANEWIDTH=40			;LARGEUR IMAGE EN MOTS
PLANEHIGH=256			;HAUTEUR IMAGE EN PIXELS
PLANESIZE=PLANEWIDTH*PLANEHIGH	;TAILLE PLAN 256*40
BITPLANESIZE=PLANEWIDTH*PLANES*PLANEHIGH ;TAILLE IMAGE 256*40*3
		
;==================================
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

CLEAR_PLANES_1:
	
LEA.L	BITPLANES,A0		; ADRESSE BITPLANES DANS A0
MOVE.w	#PLANES,D2		; COMBIEN DE PLANS ? -> D2
ADD.W	#BUFFERS,D2		; COMBIEN D'ECRANS -> D2

CLEAR_PLANES_2:
	
MOVE.W	#PLANESIZE-1,D1		; TAILLE PLAN DANS D1
	
CLEAR_PLANES_3:
	
MOVE.W	#0,(A0)+		; EFFACE PLAN	

DBF	D1,CLEAR_PLANES_3
DBF	D2,CLEAR_PLANES_2

BSR.L INIT_MUSIQUE		;INITIALISATION DE LA MUSIQUE

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	NEXT_BOB		;VA A ROUTINE DE CALCUL ET D'AFFICHAGE

BTST	#6,$BFE001		;ATTENDANT PRESSION SUR BOUTON GAUCHE SOURIS
BNE.S	WAIT			;SINON RETOURNE A WAIT
 				;SI OUI  FIN
END: 				;FIN:	
BSR.L STOP_MUSIQUE		;ARRET DE LA MUSIQUE
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)

BSR.L PLAY_MUSIQUE		;VA A LA ROUTINE POUR JOUER LA MUSIQUE

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
;====================
WHICH_PLANE:	DC.W	6	; NUMERO DE L'ECRAN VISIBLE

YPOS:		DC.W	0	;POSITION X
XPOS:		DC.W	0	;POSITION Y

BLTCON0BOB:	DC.W	%0000111111000010
BLTCON1BOB:	DC.W	%0000000000000000

STATUS:		DC.B	0

EVEN
; -------------------------------

NEXT_BOB:

	MOVEM.L	D0-D7/A0-A6,-(A7)	; SAUVE REGISTRES
	MOVE	WHICH_PLANE,D0		; NOMBRE DE PLANE -> D0
	ADDQ	#1,D0			; +1
	CMP.W	#BUFFERS,D0		; SI = 7
	BNE.S	ALL_RIGHT		; SINON ...
	MOVEQ	#0,D0			; EFFACE D0

ALL_RIGHT:

	LEA	WHICH_PLANE,A0
	MOVE.W	D0,(A0)			; SAUVE COMPTEUR PLANS
	
	MOVE.L	#BITPLANESIZE,D1			
	MULU.W	D0,D1			; CALCUL NOUVELLE ADDRESSE 
	MOVE.L	D1,D0	

	MOVE.L	#BITPLANES,D1		; BITPLANE ADDRESSE DANS D1
	ADD.L	D0,D1
	
	MOVEQ	#PLANES-1,D4		; COMPTEUR PLANS - 1
	LEA.L	COP_PLANE,A0		; COPPERLIST
	MOVE.W	#$00E0,D3		; BPL1PTH -> D3
	
INST_BOBPLANES:

	MOVE.W	D3,(A0)+		; BPLXPTH DANS COPPERLISTE
	ADDQ.W	#2,D3			; REGISTRE SUIVANT
	SWAP	D1			; CHANGE MOTS LOW/HIGH 
	MOVE.W	D1,(A0)+		; MOT HI DANS COPPERLISTE
	MOVE.W	D3,(A0)+		; BPLXPTL DANS COPPERLISTE
	ADDQ.W	#2,D3			; REGISTRE SUIVANT	
	SWAP	D1			; CHANGE LOW/HIGH MOTS
	MOVE.W	D1,(A0)+		; MOT LO DANS COPPERLISTE
	ADD.W	#PLANEWIDTH,D1		; CALCUL ADRESSE PLAN SUIVANT
	DBF	D4,INST_BOBPLANES

	MOVE.W	WHICH_PLANE,D0		; COMPTEUR PLAN -> D0
	MOVE.W	#BUFFERS,D2
CONT:
	ADDQ	#1,D0			; +1
	CMP.W	#BUFFERS,D0		; SI = 7
	BNE.S	ALL_RIGHT2		; SINON ...

	MOVEQ	#0,D0			; EFFACE D0

ALL_RIGHT2:

	MOVEM.L	D0-D7/A0-A6,-(A7)	; SAUVE REGISTRES
	BSR	DOBOBY
	MOVEM.L	(A7)+,D0-D7/A0-A6	; RESTAURE REGISTRES

	DBF	D2,CONT

	MOVEM.L	(A7)+,D0-D7/A0-A6	; RESTAURE REGISTRES

	RTS

; -------------------------------

DOBOBY:

	MOVE.L	#BITPLANESIZE,D1			
	MULU.W	D0,D1			; CALCUL NOUVELLE ADDRESSE PLAN 
	MOVE.L	D1,D0	

	LEA.L	BITPLANES,A0		; BITPLANE ADDRESSE DANS D1
	ADD.L	D0,A0

	MOVEQ	#0,D0			; CLEAR D0
	LEA.L	COSINTABX,A1		; A1 POINTE SUR TABLE COSINUS 
	LEA.L	XPOS,A2			; A2 POINTE SUR XPOS
	ADD.W	(A2),A1	
	ADD.W	#2,(A2)			; POSITION SUIVANTE
	LEA.L	COSINTABXEND-4,A3	; FIN DE COSINUS TABLE -> A3
 	CMP.L	A3,A1			; TEST SI FIN TABLE
	BLS.S	NOCOSTABEND2		; SINON ...
	MOVE.W	#4,(A2)			; ECRIT 4 DANS XPOS

NOCOSTABEND2:
	
	MOVE.W	(A1),D0			; ECRIT NOUVELLE XPOSITION DANS D0

NOMIN1:

	BSR.W	FINESCROLL

	MOVEQ	#0,D1			; CLEAR D1
	LEA.L	SINTABY,A1		; A1 POINTE SUR SINUS TABLE
	LEA.L	YPOS,A2			; COMPTEUR YPOS DANS A2
	ADD.W	(A2),A1				
	ADD.W	#2,(A2)			; POSITION SUIVANTE
	LEA.L	SINTABYEND-4,A3		; FIN DE SINUSTABLE -> A3
	CMP.L	A3,A1			; TEST SI FIN TABLE ATTEINTE
	BLS.S	NOSINTABYEND		; SINON ...
	MOVE.W	#0,(A2)			; DOIT ETRE A 0 !

NOSINTABYEND:
	
	MOVE.W	(A1),D1			; ECRIT NOUVELLE YPOITION DANS D1

	ADD.L	D0,D1			; AJOUTE LES MOTS DE XPOS

	LEA.L	BOBDATA,A1		; ADRESSE DESSIN -> A1
	LEA.L	BOBMASK,A2		; ADRESSE MASQUEBOB => A2

	BSR.S	INSERT_BOB		; COPIE BOB DANS LES PLANS

	RTS

; -------------------------------

INSERT_BOB:

	BSR.L	BLITTER_WAIT		; TEST SI BLITTER FINI TRAVAIL

* A0 BITPLANE ADDRESS
* A1 BOBIMAGEDATA	
* A2 BOBDATAMASK
* D0 X-POSITION	
* D1 Y-POSITION	

	ADD.L	D1,A0			; AJOUTE YPOS + XPOS(MOTS) A A0

	MOVE.L	A1,BLTAPTH
	MOVE.L	A2,BLTBPTH
	MOVE.L	A0,BLTCPTH
	MOVE.L	A0,BLTDPTH

	MOVE.L	#$FFFFFFFF,BLTAFWM

	MOVE.W	BLTCON0BOB,BLTCON0
	MOVE.W	BLTCON1BOB,BLTCON1
	MOVE.W	#0,BLTAMOD
	MOVE.W	#0,BLTBMOD
	MOVE.W	#PLANEWIDTH-4,BLTCMOD
	MOVE.W	#PLANEWIDTH-4,BLTDMOD
	MOVE.W	#[PLANES*16]*64+2,BLTSIZE

	RTS

; -------------------------------
		
FINESCROLL:
	
	MOVE.W	d0,d1			; COPIE D0 DANS D1
	LSR.W	#4,d0			; >> 4 D0 
	LSL.W	#1,d0			; << 1 D0

	ANDI.W	#%0000000000001111,d1	; SEULS LES 4 DERNIERS BITS !!!
	LSL.W	#8,d1			; << 8 D1
	LSL.W	#4,d1			; << 4 D1
	LEA.L	BLTCON1BOB,A2		; BLTCON1 DANS A2 
	MOVE.W	D1,(A2)			; ECRIT D1 DANS BLTCON1BOB

	ORI.W	#%0000111111100010,d1	; 
	LEA.L	BLTCON0BOB,A2		; 
	MOVE.W	d1,(a2)			; ECRIT D1 DANS BLTCON0BOB
	RTS				; RETURN

; -------------------------------

BLITTER_WAIT:

	BTST	#14,DMACONR		;TEST BLITTER
	BNE.S	BLITTER_WAIT		
	RTS				

; -------------------------------

; ===============================

COSINTABX:

  dc.w  304,304,304,304,304,303,303,303,303,302,302,301,301,300,299,299
  dc.w  298,297,297,296,295,294,293,292,291,290,289,287,286,285,284,282
  dc.w  281,279,278,277,275,273,272,270,268,267,265,263,261,259,258,256
  dc.w  254,252,250,248,246,243,241,239,237,235,233,230,228,226,223,221
  dc.w  219,216,214,211,209,206,204,201,199,196,194,191,189,186,184,181
  dc.w  178,176,173,171,168,165,163,160,157,155,152,149,147,144,141,139
  dc.w  136,133,131,128,126,123,120,118,115,113,110,108,105,103,100,98
  dc.w  95,93,90,88,85,83,81,78,76,74,71,69,67,65,63,61
  dc.w  58,56,54,52,50,48,46,45,43,41,39,37,36,34,32,31
  dc.w  29,27,26,25,23,22,20,19,18,17,15,14,13,12,11,10
  dc.w  9,8,7,7,6,5,5,4,3,3,2,2,1,1,1,1
  dc.w  0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3
  dc.w  3,4,5,5,6,7,7,8,9,10,11,12,13,14,15,17
  dc.w  18,19,20,22,23,25,26,27,29,31,32,34,36,37,39,41
  dc.w  43,45,46,48,50,52,54,56,58,61,63,65,67,69,71,74
  dc.w  76,78,81,83,85,88,90,93,95,98,100,103,105,108,110,113
  dc.w  115,118,120,123,126,128,131,133,136,139,141,144,147,149,152,155
  dc.w  157,160,163,165,168,171,173,176,178,181,184,186,189,191,194,196
  dc.w  199,201,204,206,209,211,214,216,219,221,223,226,228,230,233,235
  dc.w  237,239,241,243,246,248,250,252,254,256,258,259,261,263,265,267
  dc.w  268,270,272,273,275,277,278,279,281,282,284,285,286,287,289,290
  dc.w  291,292,293,294,295,296,297,297,298,299,299,300,301,301,302,302
  dc.w  303,303,303,303,304,304,304,304

COSINTABXEND:

; ------------------------

SINTABY:

  dc.w  14400,14640,14880,15120,15360,15600,15960,16200,16440,16680,16920
  dc.w  17160,17400,17640,17880,18120,18360,18600,18840,19080,19320,19560
  dc.w  19800,20040,20280,20520,20760,20880,21120,21360,21600,21840,22080
  dc.w  22200,22440,22680,22920,23040,23280,23520,23640,23880,24000,24240
  dc.w  24360,24600,24720,24960,25080,25320,25440,25560,25800,25920,26040
  dc.w  26160,26280,26520,26640,26760,26880,27000,27120,27240,27360,27480
  dc.w  27600,27600,27720,27840,27960,27960,28080,28200,28200,28320,28320
  dc.w  28440,28440,28560,28560,28680,28680,28680,28680,28800,28800,28800
  dc.w  28800,28800,28800,28800,28800,28800,28800,28800,28680,28680,28680
  dc.w  28680,28560,28560,28440,28440,28320,28320,28200,28200,28080,27960
  dc.w  27960,27840,27720,27600,27600,27480,27360,27240,27120,27000,26880
  dc.w  26760,26640,26520,26280,26160,26040,25920,25800,25560,25440,25320
  dc.w  25080,24960,24720,24600,24360,24240,24000,23880,23640,23520,23280
  dc.w  23040,22920,22680,22440,22200,22080,21840,21600,21360,21120,20880
  dc.w  20760,20520,20280,20040,19800,19560,19320,19080,18840,18600,18360
  dc.w  18120,17880,17640,17400,17160,16920,16680,16440,16200,15960,15600
  dc.w  15360,15120,14880,14640,14400,14160,13920,13680,13440,13200,12840
  dc.w  12600,12360,12120,11880,11640,11400,11160,10920,10680,10440,10200
  dc.w  9960,9720,9480,9240,9000,8760,8520,8280,8040,7920,7680
  dc.w  7440,7200,6960,6720,6600,6360,6120,5880,5760,5520,5280
  dc.w  5160,4920,4800,4560,4440,4200,4080,3840,3720,3480,3360
  dc.w  3240,3000,2880,2760,2640,2520,2280,2160,2040,1920,1800
  dc.w  1680,1560,1440,1320,1200,1200,1080,960,840,840,720
  dc.w  600,600,480,480,360,360,240,240,120,120,120
  dc.w  120,0,0,0,0,0,0,0,0,0,0
  dc.w  0,120,120,120,120,240,240,360,360,480,480
  dc.w  600,600,720,840,840,960,1080,1200,1200,1320,1440
  dc.w  1560,1680,1800,1920,2040,2160,2280,2520,2640,2760,2880
  dc.w  3000,3240,3360,3480,3720,3840,4080,4200,4440,4560,4800
  dc.w  4920,5160,5280,5520,5760,5880,6120,6360,6600,6720,6960
  dc.w  7200,7440,7680,7920,8040,8280,8520,8760,9000,9240,9480
  dc.w  9720,9960,10200,10440,10680,10920,11160,11400,11640,11880,12120
  dc.w  12360,12600,12840,13200,13440,13680,13920,14160

SINTABYEND:
;====================
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
		................

STOP_MUSIQUE:			;ARRET DE LA MUSIQUE
		................

PLAY_MUSIQUE:			;JOUE LA MUSIQUE
		................

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

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

	;POINTEURS ADRESSE DES PLANS DE L'IMAGE

	COP_PLANE:

	DC.W $00E0,BITPLANES+[40*0]/65536
	DC.W $00E2,BITPLANES+[40*0] & 65535   
	DC.W $00E4,BITPLANES+[40*1]/65536
	DC.W $00E6,BITPLANES+[40*1] & 65535
	DC.W $00E8,BITPLANES+[40*2]/65536
	DC.W $00EA,BITPLANES+[40*2] & 65535
	

	;REGISTRE POUR CHOISIR RESOLUTION	

	DC.W	$0100,$3200		;3 PLANS+MODE COULEURS

	;DECALAGE ECRAN - INUTILISE ICI

	DC.W	$0102,$0000

	;PRIORITE DES PLANS ET SPRITES - INUTILISE ICI

	DC.W 	$0104,$0000

	;MODULOS DES PLANS

	DC.W	$0108,80	;MODULOS PLANS PAIRS
	DC.W 	$010A,80	;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,$0260	;COULEUR 01
	DC.W	$0184,$0472	;COULEUR 02
	DC.W	$0186,$0CFC	;COULEUR 03
	DC.W	$0188,$0AC9	;COULEUR 04
	DC.W	$018A,$08B7	;COULEUR 05
	DC.W	$018C,$06A4	;COULEUR 06
	DC.W	$018E,$0582	;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

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

	DC.W $FFDF,$FFFE


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


VOICI UN EXEMPLE DE MENU, C'EST A DIRE QUE L'ON PEUT LANCER D'AUTRES DEMOS A
PARTIR DE CELLE-CI.

LE PRINCIPE EST SIMPLE : ON SELECTIONNE A PARTIR DES TOUCHES DE FONCTIONS
PUIS GRACE A LA COMMANDE EXECUTE DE LA LIBRAIRIE DOS ON LANCE LE PROGRAMME.
LA COMMANDE RUN DOIT ETRE IMPERATIVEMENT PRESENTE DANS LE DIRECTORY C DE VO
TRE DISQUETTE.

VOUS POUVEZ VOIR CE QUE CELA DONNE EN BOOTANT DIRECTEMENT LA DISQUETTE 4 DE
CE COURS D'ASSEMBLEUR.


=============================================================================
		PROGRAMME DE MENU
=============================================================================
;POUR CHARGER LES DATAS TAPEZ:
;
;
;RI		RETURN
;PIC_RAW	RETURN
;IMAGE		RETURN RETURN
;
;PUIS TAPEZ
;G BEGIN	RETURN RETURN
;
;SUPPRIMEZ LES LIGNES SUIVANTES SI VOTRE VERSION DU SEKA
;NE COMPORTE PAS LA COMMANDE Y

>EXTERN "PIC_RAW",IMAGE

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
;==================================
IMAGE=$40000			;L'IMAGE SE TROUVE A $40000

FINDATA=IMAGE+[40*256*5]	;FIN DES DATAS APRES L'IMAGE
			
;==================================
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 SETCOPPER			;SAUTE SOUS PROGRAMME: MET EN PLACE LISTE COPPER
BSR.s NEWIRQ3			;SAUTE SOUS PROGRAMME: MET EN PLACE ROUTINE D'INTERRRUPTION

WAIT:
CMP.B #$F0,$DFF006
BNE.S WAIT

BSR.L SELECTION			;VA A ROUTINE DE SELECTION PROGRAMMES

BTST	#6,$BFE001		;TESTE BOUTON GAUCHE SOURIS
BEQ.S	END

BTST 	#10,$DFF016		;TESTE BOUTON DROIT SOURIS
BEQ.S	END

JMP WAIT

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

JSR LOADANDRUN			;CHARGEMENT ET EXECUTION SELECTION

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
;====================
even
FileHD:		dc.l 0
DosBase:	dc.l 0
DosName:	dc.b 'dos.library',0
even
;====================
SELECTION:


CMP.B #$5F,$BFEC01      ;TESTE TOUCHE F1
BNE.S L1 		;SINON VA A L1
MOVE.W #0,SELECT	;MET 0 DANS SELECT
JMP END			;SAUTE A LA FIN 
L1:

CMP.B #$5D,$BFEC01      ;F2
BNE.S L2
MOVE.W #1,SELECT
JMP END
L2: 

CMP.B #$5B,$BFEC01      ;F3
BNE.S L3 
MOVE.W #2,SELECT
JMP END
L3:

CMP.B #$59,$BFEC01	;F4
BNE.S L4
MOVE.W #3,SELECT
JMP END
L4:

CMP.B #$57,$BFEC01	;F5
BNE.S L5
MOVE.W #4,SELECT
JMP END
L5: 

CMP.B #$55,$BFEC01	;F6
BNE.S L6
MOVE.W #5,SELECT
JMP END
L6: 

CMP.B #$53,$BFEC01	;F7
BNE.S L7
MOVE.W #6,SELECT
JMP END
L7:

CMP.B #$51,$BFEC01	;F8
BNE.S L8
MOVE.W #7,SELECT
JMP END
L8:

CMP.B #$4F,$BFEC01	;F9
BNE.S L9
MOVE.W #8,SELECT
JMP END
L9:

CMP.B #$4D,$BFEC01	;F10
BNE.S L10
MOVE.W #9,SELECT
JMP END
L10:

RTS
EVEN
SELECT: DC.W 0
EVEN
;====================
LOADANDRUN:

move.l execbase,a6	;ADRESSE EXECBASE EN A6
lea dosname,a1		;NOM DE LA LIBRAIRIE DOS EN A1
jsr openlibrary(a6)	;OUVRE LIBRAIRIE DOS
move.l d0,dosbase	;ADRESSE DOS LIBRAIRIE EN D0

LEA LISTE_PRG,A0	;LISTE DES PROGRAMME EN A0
MOVE.W SELECT,D0	;SELECTION DANS D0
LSL.W #2,D0		;MULTIPLIE PAR 4
MOVE.L (A0,D0.W),D1	;MET NOM PROGRAMME SELECTIONNE DANS D1
move.l dosbase,a6	;ADRESSE LIBRAIRIE DOS EN A6
moveq	#0,d2		;0
moveq	#0,d3		;0
jsr	-222(a6)	;EXECUTE COMMANDE 

move.l execbase,a6	;ADRESSE EXECBASE EN A6
move.l dosbase,a1	;ADRESSE LIBRAIRIE DOS EN A1
jsr closelibrary(a6)	;FERME LIBRAIRIE DOS
move.l #0,d0

RTS

EVEN
LISTE_PRG:		;LISTE DES PROGRAMME
DC.L PRG1,PRG2,PRG3,PRG4,PRG5
DC.L PRG6,PRG7,PRG8,PRG9,PRG10
EVEN

PRG1:	DC.B	"1",0	;NOMS DES PROGRAMMES
PRG2:	DC.B	"2",0	;A LANCER
PRG3:	DC.B	"3",0	;ON PEUT CHANGER LES NOMS
PRG4:	DC.B	"4",0
PRG5:	DC.B	"5",0
PRG6:	DC.B	"6",0
PRG7:	DC.B	"7",0
PRG8:	DC.B	"8",0
PRG9:	DC.B	"9",0
PRG10:	DC.B	"10",0

;====================
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+[40*256*0]/65536
	DC.W $00E2,IMAGE+[40*256*0] & 65535
	DC.W $00E4,IMAGE+[40*256*1]/65536
	DC.W $00E6,IMAGE+[40*256*1] & 65535
	DC.W $00E8,IMAGE+[40*256*2]/65536
	DC.W $00EA,IMAGE+[40*256*2] & 65535
	DC.W $00EC,IMAGE+[40*256*3]/65536
	DC.W $00EE,IMAGE+[40*256*3] & 65535
	DC.W $00F0,IMAGE+[40*256*4]/65536
	DC.W $00F2,IMAGE+[40*256*4] & 65535


	;REGISTRE POUR CHOISIR RESOLUTION

	DC.W	$0100,$5200		;5 PLANS+MODE COULEURS

	;DECALAGE ECRAN - INUTILISE ICI

	DC.W	$0102,$0000

	;PRIORITE DES PLANS ET SPRITES - INUTILISE ICI

	DC.W 	$0104,$0000

	;MODULOS DES PLANS

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

	;POINTEURS DES 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,$0fc4	;COULEUR 01
	DC.W	$0184,$0ea3	;COULEUR 02
	DC.W	$0186,$0d82	;COULEUR 03
	DC.W	$0188,$0b62	;COULEUR 04
	DC.W	$018A,$0a51	;COULEUR 05
	DC.W	$018C,$0940	;COULEUR 06
	DC.W	$018E,$0830	;COULEUR 07
	DC.W	$0190,$0799	;COULEUR 08
	DC.W	$0192,$0688	;COULEUR 09
	DC.W	$0194,$0577	;COULEUR 10
	DC.W	$0196,$0466	;COULEUR 11
	DC.W	$0198,$0355	;COULEUR 12
	DC.W	$019A,$0244	;COULEUR 13
	DC.W	$019C,$0133	;COULEUR 14
	DC.W	$019E,$0022	;COULEUR 15
	DC.W	$01A0,$0620	;COULEUR 16	;LES COULEURS DE 16 A 31 SONT
	DC.W	$01A2,$0e52	;COULEUR 17	;AUSSI CELLES DES SPRITES
	DC.W	$01A4,$0a52	;COULEUR 18
	DC.W	$01A6,$0fca	;COULEUR 19	;LES COULEURS 16 A 31 NE SONT
	DC.W	$01A8,$0333	;COULEUR 20	;PAS UTILISEES DANS LE MODE
	DC.W	$01AA,$0444	;COULEUR 21	;HOLD AND MODIFY (HAM)
	DC.W	$01AC,$0555	;COULEUR 22
	DC.W	$01AE,$0666	;COULEUR 23
	DC.W	$01B0,$0777	;COULEUR 24
	DC.W	$01B2,$0888	;COULEUR 25
	DC.W	$01B4,$0999	;COULEUR 26
	DC.W	$01B6,$0aaa	;COULEUR 27
	DC.W	$01B8,$0ccc	;COULEUR 28
	DC.W	$01BA,$0ddd	;COULEUR 29
	DC.W	$01BC,$0eee	;COULEUR 30
	DC.W	$01BE,$0fff	;COULEUR 31

	DC.W $FFDF,$FFFE

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

VOICI UNE AUTRE VERSION DE MENU. CELUI CI EST PREVU POUR FONCTIONNER A PARTIR
DU BOOT BLOCK.

VOUS DEVEZ POUR CELA L'INSTALLER SUR LA DISQUETTE EN NON-DOS. (VOIR LE COURS
NUMERO 6)

LE PROBLEME PRINCIPAL EST QUE L'ON NE PEUT LANCER UN AUTRE PROGRAMME A PARTIR
DU BOOT.

POUR CONTOURNER CELA, LE MENU LAISSE TOUT SIMPLEMENT EN MEMOIRE UNE VALEUR
QUE LE PREMIER PROGRAMME (LOADER) LANCE A PARTIR DE LA STARTUP-SEQUENCE VA
RECUPERER. A PARTIR DE CETTE VALEUR LE LOADER VA CHARGER LE PROGRAMME DESIRE

SIMPLE.... MAIS EFFICACE......


=============================================================================
		PROGRAMME DE MENU PLACE EN BOOT
=============================================================================
;POUR CHARGER LES DATAS TAPEZ:
;
;
;RI		RETURN
;PIC_RAW	RETURN
;IMAGE		RETURN RETURN
;
;PUIS TAPEZ
;G BEGIN	RETURN RETURN
;
;SUPPRIMEZ LES LIGNES SUIVANTES SI VOTRE VERSION DU SEKA
;NE COMPORTE PAS LA COMMANDE Y

>EXTERN "PIC_RAW",IMAGE

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
;==================================
IMAGE=$40000			;L'IMAGE SE TROUVE A $40000

FINDATA=IMAGE+[40*256*5]	;FIN DES DATAS APRES L'IMAGE
			
;==================================
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 SETCOPPER			;SAUTE SOUS PROGRAMME: MET EN PLACE LISTE COPPER
BSR.s NEWIRQ3			;SAUTE SOUS PROGRAMME: MET EN PLACE ROUTINE D'INTERRRUPTION

WAIT:
CMP.B #$F0,$DFF006
BNE.S WAIT

BSR.L SELECTION			;VA A ROUTINE DE SELECTION

BTST	#6,$BFE001		;TESTE BOUTON GAUCHE SOURIS
BEQ.S	END

BTST 	#10,$DFF016		;TESTE BOUTON DROIT SOURIS
BEQ.S	END

JMP WAIT

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


CMP.B #$5F,$BFEC01      ;TESTE TOUCHE F1
BNE.S L1 		;SINON VA A L1
MOVE.W #0,$100		;MET 0 DANS SELECT
JMP END			;SAUTE A LA FIN
L1:

CMP.B #$5D,$BFEC01      ;F2
BNE.S L2
MOVE.W #1,$100
JMP END
L2: 

CMP.B #$5B,$BFEC01      ;F3
BNE.S L3 
MOVE.W #2,$100
JMP END
L3:

CMP.B #$59,$BFEC01	;F4
BNE.S L4
MOVE.W #3,$100
JMP END
L4:

CMP.B #$57,$BFEC01	;F5
BNE.S L5
MOVE.W #4,$100
JMP END
L5: 

CMP.B #$55,$BFEC01	;F6
BNE.S L6
MOVE.W #5,$100
JMP END
L6: 

CMP.B #$53,$BFEC01	;F7
BNE.S L7
MOVE.W #6,$100
JMP END
L7:

CMP.B #$51,$BFEC01	;F8
BNE.S L8
MOVE.W #7,$100
JMP END
L8:

CMP.B #$4F,$BFEC01	;F9
BNE.S L9
MOVE.W #8,$100
JMP END
L9:

CMP.B #$4D,$BFEC01	;F10
BNE.S L10
MOVE.W #9,$100
JMP END
L10:


;$100	;PLACE VALEUR DE SELECTION DANS L'ADRESSE MEMOIRE
	;$100 POUR ETRE RECUPERE PAR LE LOADER

RTS

;====================
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+[40*256*0]/65536
	DC.W $00E2,IMAGE+[40*256*0] & 65535
	DC.W $00E4,IMAGE+[40*256*1]/65536
	DC.W $00E6,IMAGE+[40*256*1] & 65535
	DC.W $00E8,IMAGE+[40*256*2]/65536
	DC.W $00EA,IMAGE+[40*256*2] & 65535
	DC.W $00EC,IMAGE+[40*256*3]/65536
	DC.W $00EE,IMAGE+[40*256*3] & 65535
	DC.W $00F0,IMAGE+[40*256*4]/65536
	DC.W $00F2,IMAGE+[40*256*4] & 65535


	;REGISTRE POUR CHOISIR RESOLUTION

	DC.W	$0100,$5200		;5 PLANS+MODE COULEURS

	;DECALAGE ECRAN - INUTILISE ICI

	DC.W	$0102,$0000

	;PRIORITE DES PLANS ET SPRITES - INUTILISE ICI

	DC.W 	$0104,$0000

	;MODULOS DES PLANS

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

	;POINTEURS DES 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,$0AAA	;COULEUR 01
	DC.W	$0184,$006B	;COULEUR 02
	DC.W	$0186,$04A0	;COULEUR 03
	DC.W	$0188,$0C80	;COULEUR 04
	DC.W	$018A,$0E90	;COULEUR 05
	DC.W	$018C,$0FA0	;COULEUR 06
	DC.W	$018E,$0EC0	;COULEUR 07
	DC.W	$0190,$0DE0	;COULEUR 08
	DC.W	$0192,$0CD0	;COULEUR 09
	DC.W	$0194,$08D0	;COULEUR 10
	DC.W	$0196,$05C0	;COULEUR 11
	DC.W	$0198,$0DED	;COULEUR 12
	DC.W	$019A,$0BDB	;COULEUR 13
	DC.W	$019C,$09B9	;COULEUR 14
	DC.W	$019E,$0EE9	;COULEUR 15
	DC.W	$01A0,$0F01	;COULEUR 16	;LES COULEURS DE 16 A 31 SONT
	DC.W	$01A2,$0F80	;COULEUR 17	;AUSSI CELLES DES SPRITES
	DC.W	$01A4,$0FF0	;COULEUR 18
	DC.W	$01A6,$00F0	;COULEUR 19	;LES COULEURS 16 A 31 NE SONT
	DC.W	$01A8,$00FF	;COULEUR 20	;PAS UTILISEES DANS LE MODE
	DC.W	$01AA,$000F	;COULEUR 21	;HOLD AND MODIFY (HAM)
	DC.W	$01AC,$080F	;COULEUR 22
	DC.W	$01AE,$0F0F	;COULEUR 23
	DC.W	$01B0,$0111	;COULEUR 24
	DC.W	$01B2,$0333	;COULEUR 25
	DC.W	$01B4,$0555	;COULEUR 26
	DC.W	$01B6,$0777	;COULEUR 27
	DC.W	$01B8,$0999	;COULEUR 28
	DC.W	$01BA,$0BBB	;COULEUR 29
	DC.W	$01BC,$0DDD	;COULEUR 30
	DC.W	$01BE,$0FFF	;COULEUR 31

	DC.W $FFDF,$FFFE

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

VOICI LE SOURCE DU LOADER.

CELUI CI DOIT ETRE LANCE A PARTIR DE LA STARTUP-SEQUENCE.

IL DOIT ETRE SAUVE PAR WO A PARTIR DU SEKA.

LA COMMANDE RUN DOIT ETRE PRESENTE DANS LE DIRECTORY C DE LA DISQUETTE.


=============================================================================
		PROGRAMME DU LOADER PLACE DANS LA STARTUP-SEQUENCE
=============================================================================
;CE PROGRAMME DOIT ETRE SAUVE
;AVEC LA COMMANDE WO DU SEKS


move.l execbase,a6	;ADRESSE EXEC EN A6
lea dosname,a1		;NOM LIBRAIRIE DOS EN A1
jsr openlibrary(a6)	;OUVRE LIBRAIRIE DOS
move.l d0,dosbase	;ADRESSE LIBRAIRIE DANS LABLE DOSBASE

LEA LISTE_PRG,A0	;LISTE DES PROGRAMMES EN A0
MOVE.W $100,D0		;MET CONTENU ADRESSE $100 EN D0
LSL.W #2,D0		;MULTIPLIE PAR 4
MOVE.L (A0,D0.W),D1	;MET D0 IEME NOM DE LA LISTE EN D1
move.l dosbase,a6	;ADRESSE LIBRAIRIE DOS EN 16
moveq	#0,d2		;0
moveq	#0,d3		;0
jsr	-222(a6)	; RUN PROGRAMME

move.l execbase,a6	;ADRESSE EXEC EN A6
move.l dosbase,a1	;ADRESSE LIBRAIRIE DOS EN A1
jsr closelibrary(a6)	;FERME LIBRAIRIE
move.l #0,d0

rts

EVEN
LISTE_PRG:			;LISTE DES PROGRAMMES
DC.L PRG1,PRG2,PRG3,PRG4,PRG5
DC.L PRG6,PRG7,PRG8,PRG9,PRG10
EVEN
PRG1:	DC.B	"1",0	;NOMS DES PROGRAMMES
PRG2:	DC.B	"2",0	;A LANCER
PRG3:	DC.B	"3",0	;ON PEUT CHANGER LES NOMS
PRG4:	DC.B	"4",0
PRG5:	DC.B	"5",0
PRG6:	DC.B	"6",0
PRG7:	DC.B	"7",0
PRG8:	DC.B	"8",0
PRG9:	DC.B	"9",0
PRG10:	DC.B	"10",0
even
FileHD:		dc.l 0
DosBase:	dc.l 0
DosName:	dc.b 'dos.library',0
even
=============================================================================

A LA DEMANDE GENERALE, VOICI UNE ROUTINE DE SCROLLING PARAMETRABLE.

C'EST A DIRE, QUE L'ON PEUT LANCER DIVERSES ROUTINES A PARTIR DU TEXTE DU
SCROLLING.

NOUS N'AVONS ICI QUE PEU D'EFFETS DIVERS, MAIS JE N'AI PAS VOULU QUE LA ROU
TINE SOIT LA PLUS CLAIRE POSSIBLE.

POUR LANCER DIVERSES ROUTINES A PARTIR DU TEXTE, ON DOIT UTILISER DES LETTRES
NON AFFICHABLES, C'EST A DIRE DES LETTRES NON REPRESENTEES DANS L'IMAGE DES
CARACTERES.

POUR DES RAISONS DE SIMPLICITE, ON UTILISE LES MINUSCULES.

VOUS DEVEZ LEUR DONNER UNE ADRESSE D'IMAGE, ET CELLE CI DOIT ETRE L'ADRESSE 
DE L'IMAGE DE L'ESPACE (VIDE)

CES MINUSCULES NE SERONT PAS VISIBLES CAR REMPLACEES PAR DES ESPACES.

DANS NOTRE EXEMPLE, LE TEST DES MINUSCULES PERMET L'ACCELERATION, LE RALENTI
L'ARRET, ET LE SCROLLING DE HAUT EN BAS.

LA VITESSE DU SCROLLING EST GERE PAR UNE MODIFICATION DU SCHIFTING ET DU COMP
TEUR D'ATTENTE.

LE SCROLLING HAUT-BAS, EST GERE PAR LA MISE A 0 OU A 1 D'UN FLAG.

C'EST DE CETTE DERNIERE FACON QUE VOUS DEVREZ REALISER LA PLUPART DES EFFETS
QUE VOUS VOUDREZ PLACER POUR VOTRE SCROLLING.

=============================================================================
		PROGRAMME DE SCROLLING TEXT PARAMETRABLE
=============================================================================
;POUR CHARGER LES DATAS TAPEZ:
;RI		RETURN
;PIC_RAW	RETURN
;IMAGE		RETURN RETURN
;
;RI		RETURN
;FONT_RAW	RETURN
;FONT		RETURN RETURN
;
;
;PUIS TAPEZ
;G BEGIN	RETURN RETURN
;
;SUPPRIMEZ LES LIGNES SUIVANTES SI VOTRE VERSION DU SEKA
;NE COMPORTE PAS LA COMMANDE Y

>EXTERN "PIC_RAW",IMAGE
>EXTERN "FONT_RAW",FONT

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
;==================================
IMAGE=$40000			;L'IMAGE SE TROUVE A $40000

VIDE=IMAGE+[40*256*3]		;UNE LIGNE VIDE

SCROLL=vide+40			;LE FOND DU SCROLL SE TROUVE JUSTE
				;APRES L'IMAGE
FONT=SCROLL+[50*35*3]		;LE DESSIN DES CARACTERES SE TROUVE
				;JUSTE APRES LE FOND DU SCROLL
FINDATA=FONT+[40*256*3]		;FIN DES DATAS
				
;==================================
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

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

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.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 SCROLLING			;VA A LA ROUTINE DE SCROLLING

BSR.L SCROLLING_UP_DOWN		;VA A ROUTINE SCROLLING HAUT BAS

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

EVEN
CPTSCROLL: DC.W 1		;COMPTEUR POUR ATTENTE
EVEN

SCROLLING:			;ROUTINE DU SCROLLING
SUB.W #1,CPTSCROLL		;SOUTRAIT 1 AU COMPTEUR
CMP.W #0,CPTSCROLL		;COMPARE A 0
BNE PAS_DE_SCROLL		;SI PAS =   PAS DE SCROLLING
MOVE.W #1,CPTSCROLL		;MET VALEUR 1 DANS COMPTEUR
BSR.L SEARCH_CHAR		;AFFICHE UN NOUVEAU CARACTERE
BSR.L SCROLLTEXT		;SCROLLE LE FOND DU SCROLL
PAS_DE_SCROLL:
RTS
;===================	
SCROLLTEXT:			
LEA SCROLL,A0 			;ON POINTE A0 SUR LE FOND DU SCROLL
	
BSR.L 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.W #$09F0,D5		;VALEUR 9F0 POUR BLTCON1 DANS D5
ADD.W VITESSE2,D5		;AJOUTE VALEUR DECALAGE

MOVE.W D5,BLTCON0 	   	;MET MIMTERN ET DECALAGE DANS BLTCON0
MOVE.W #$0000,BLTCON1		;$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 #[35*64*3]+25,BLTSIZE	;MET TAILLE A SCROLLER DANS BLTSIZE
				;TAILLE = [HAUTEUR * 64]+[LARGEUR/2]
RTS
;============
EVEN
VITESSE:  DC.W 8		;COMPTEUR POUR NOUVELLE LETTRE
VITESSE2: DC.W $C000		;DECALAGE
EVEN

SEARCH_CHAR:
ADD.W #1,COMPT			;AJOUTE 1 AU COMPTEUR
MOVE.W VITESSE,D6		;MET VALEUR VITESSE DANS D6
MOVE.W COMPT,D5			;MET VALEUR COMPTEUR DANS D5
CMP.W D6,D5			;COMPARE A 8 CAR 8 * 4 PIXELS DE DECALAGE
				;EGALE A 32 SOIT LA LARGEUR D'UNE LETTRE
BNE.L 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

CMP.B #'s',D0			;COMPARE LETTRE DU SCROLL AVEC SIGNE
BNE PAS_STOP			;SI PAS = ON CONTINU
MOVE.W #200,CPTSCROLL		;SINON MET 200 DANS COMPTEUR
PAS_STOP:

CMP.B #'a',D0
BNE VITESSEA
MOVE.W #32,VITESSE
MOVE.W #$F000,VITESSE2
VITESSEA:

CMP.B #'b',D0
BNE VITESSEB
MOVE.W #16,VITESSE
MOVE.W #$E000,VITESSE2
VITESSEB:

CMP.B #'c',D0
BNE VITESSEC
MOVE.W #8,VITESSE
MOVE.W #$C000,VITESSE2
VITESSEC:

CMP.B #'d',D0
BNE VITESSED
MOVE.W #4,VITESSE
MOVE.W #$8000,VITESSE2
VITESSED:

CMP.B #'e',D0
BNE VITESSEE
MOVE.W #2,VITESSE
MOVE.W #$0000,VITESSE2
VITESSEE:

CMP.B #'f',D0
BNE UPDOWN
MOVE.W #1,FLAG_SUP
UPDOWN:

MULU #4,D1			;ON MULTIPLIE D1 PAR 4
LEA 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.L 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 #$09F00000,BLTCON0	;$0 -> PAS DE DECALAGE DE LA SOURCE A
				;$9 -> POUR 1 SOURCE BLITTER A
				;$F0 -> MINTERM POUR COPIE DIRECTE

MOVE.W #[35*3*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 ' ABCDEFGHI'	;TABLE DES CARACTERES
		DC.B 'JKLMNOPQRS'	;TELS QU'ILS SONT DISPOSES
		DC.B 'TUVWXYZ.,:'	;DANS NOTRE IMAGE	
		DC.B '()@#!?-*^/'
		DC.B '0123456789'
		DC.B 'abcdefghis'	;CARACTERES SPECIAUX
					;NON AFFICHABLES

EVEN
FONT1=FONT		;ADRESSES DES LETTRES PAR LIGNES
FONT2=FONT+[3*35*40] 
FONT3=FONT+[6*35*40]
FONT4=FONT+[9*35*40]
FONT5=FONT+[12*35*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

DC.L FONT1,FONT1,FONT1,FONT1,FONT1,FONT1,FONT1,FONT1,FONT1
DC.L FONT1,FONT1,FONT1,FONT1,FONT1,FONT1,FONT1,FONT1,FONT1

EVEN

EVEN		;TEXTE A SCROLLER

TEXT: DC.B '             '
DC.B ' VOICI DONC NOTRE aPREMIER ESSAI DE SCROLLINGf AU BLITTER '
DC.B ' b  CECI REPRESENTE cUNE VERITABLE DEMO d   SIMPLE MAIS UNE DEMO'
DC.B ' QUAND MEME    VOUS POUVEZ MODIFIER L IMAGE e'
DC.B ' LA MUSIQUE  LES CARACTERES  LE TEXTEs A VOUS DE JOUER '
DC.B '      POUR FINIR VOICI LA LISTE DES CARACTERES UTILISABLES '
DC.B ' ABCDEFGHIJKLMNOPQRSTUVWXYZ'
DC.B '.,:()@#!?-*^/0123456789'
dc.b '    ',0
fin:
EVEN
;====================
SCROLLING_UP_DOWN:		;ROUTINE SCROLLING HAUT BAS
CMP.W #1,FLAG_SUP		;TEST SI FLAG EST A 1 
BNE SCROLLING_UP_DOWN_FIN	;SINON PAS DE SCROLLING

MOVE.W FLAG_UD,D0		;MET VALEUR COMPTEUR DANS D0

ADD.W D0,BARRE1			;AJOUTE VALEUR A BARRE 1
ADD.W D0,BARRE2			;AJOUTE VALEUR A BARRE 2

CMP.W #$3001,BARRE1		;COMPARE BARRE1 A LIGNE $30
BNE SCR1			;SI PAS = ON CONTINU
NEG FLAG_UD			;SINON ON INVERSE SIGNE DU COMPTEUR
SCR1:

CMP.W #$F001,BARRE2		;COMPARE BARRE2 A LIGNE $F0
BNE SCR2			;SI PAS = ON CONTINU
NEG.W FLAG_UD			;SINON ON INVERSE SIGNE DU COMPTEUR
SCR2:

SCROLLING_UP_DOWN_FIN:
RTS

EVEN
FLAG_UD: DC.W $100		;VALEUR DU COMPTEUR
EVEN
FLAG_SUP: DC.W 0		;FLAG SCROLLING 
EVEN


;====================
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 $00E4,IMAGE+[40*0]/65536
	DC.W $00E6,IMAGE+[40*0] & 65535   
	DC.W $00EC,IMAGE+[40*1]/65536
	DC.W $00EE,IMAGE+[40*1] & 65535
	DC.W $00F4,IMAGE+[40*2]/65536
	DC.W $00F6,IMAGE+[40*2] & 65535

	DC.W $00E0,VIDE/65536
	DC.W $00E2,VIDE & 65535
	DC.W $00E8,VIDE/65536
	DC.W $00EA,VIDE & 65535
	DC.W $00F0,VIDE/65536
	DC.W $00F2,VIDE & 65535
	


	;REGISTRE POUR CHOISIR RESOLUTION	

	DC.W	$0100,$6600		;6 PLANS DUAL PLAYFIELDS

	;DECALAGE ECRAN - INUTILISE ICI

	DC.W	$0102,$0000

	;PRIORITE DES PLANS ET SPRITES - INUTILISE ICI

	DC.W 	$0104,$0000

	;MODULOS DES PLANS

	DC.W	$0108,-40	;MODULOS PLANS PAIRS
	DC.W 	$010A, 80	;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,$0A50	;COULEUR 01
	DC.W	$0184,$0DC0	;COULEUR 02
	DC.W	$0186,$0606	;COULEUR 03
	DC.W	$0188,$0818	;COULEUR 04
	DC.W	$018A,$0A2A	;COULEUR 05
	DC.W	$018C,$0D3D	;COULEUR 06
	DC.W	$018E,$0F5F	;COULEUR 07

	DC.W	$0190,$0000	;COULEUR 08
	DC.W	$0192,$0bbf	;COULEUR 09
	DC.W	$0194,$0f72	;COULEUR 10
	DC.W	$0196,$0611	;COULEUR 11
	DC.W	$0198,$0a31	;COULEUR 12
	DC.W	$019A,$0f51	;COULEUR 13
	DC.W	$019C,$0744	;COULEUR 14
	DC.W	$019E,$0f61	;COULEUR 15

BARRE1: DC.W $A001,$FFFE

DC.W $108,110		;MODULO = 10 + 50 + 50 

		;POINTEURS DE PLANS DU FOND DE SCROLL

		DC.W $00E0,SCROLL+[50*0]/65536	
		DC.W $00E2,SCROLL+[50*0] & 65535
		DC.W $00E8,SCROLL+[50*1]/65536
		DC.W $00EA,SCROLL+[50*1] & 65535
		DC.W $00F0,SCROLL+[50*2]/65536  
		DC.W $00F2,SCROLL+[50*2] & 65535


BARRE2: DC.W $A001+[$100*35],$FFFE

	DC.W $108,-40		
	
	DC.W $00E0,VIDE/65536
	DC.W $00E2,VIDE & 65535
	DC.W $00E8,VIDE/65536
	DC.W $00EA,VIDE & 65535
	DC.W $00F0,VIDE/65536
	DC.W $00F2,VIDE & 65535
	


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

	DC.W $FFDF,$FFFE

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

VOICI UNE ROUTINE DE PSEUDO ROTATION DU SCROLLING TEXT AUTOUR D'UN AXE HORI
ZONTAL.

LE PRINCIPE EST SIMPLE :

ON ARRONDI LE SCROLL EN UTILISANT LE REGISTRE $102.

ON UTILISE UN ECRAN DE SCROLL DE 3 FOIS LA HAUTEUR DES LETTRE, SOIT ICI, UN
ECRAN DE 105 PIXELS DE HAUT.

ON UTILISE LE DUAL PLAYFIELD = 2 FOIS 3 PLANS.

ON INVERSE L'ECRAN QUI SE TROUVE DERRIERE, EN MODIFIANT LES MODULOS.

IL NE NOUS RESTE PLUS QU'A FAIRE UN SCROLLING DE BAS EN HAUT, EN AUGMENTANT
LES POINTEURS DE PLAN D'UNE LIGNE POUR AVOIR UN PSEUDO EFFET DE ROTATION. 

=============================================================================
		PROGRAMME DE PSEUDO ROTATION DU SCROLLING TEXT
=============================================================================
;POUR CHARGER LES DATAS TAPEZ:
;
;RI		RETURN
;FONT_RAW	RETURN
;FONT		RETURN RETURN
;
;
;PUIS TAPEZ
;G BEGIN	RETURN RETURN
;
;SUPPRIMEZ LES LIGNES SUIVANTES SI VOTRE VERSION DU SEKA
;NE COMPORTE PAS LA COMMANDE Y

>EXTERN "FONT_RAW",FONT

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
;==================================
SCROLL=$41000			;LE FOND DU SCROLL
				;
FONT=SCROLL+[50*35*3*3]		;LE DESSIN DES CARACTERES SE TROUVE
				;JUSTE APRES LE FOND DU SCROLL

FINDATA=FONT+[40*256*3]		;FIN DES DATAS
				
;==================================
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

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

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.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 SCROLLING			;VA A LA ROUTINE DE SCROLLING

BSR.L SCROLLING_ROT		;VA A ROUTINE DE ROTATION

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
;===================
SCROLLING:			;ROUTINE DU SCROLLING
BSR.L SEARCH_CHAR		;AFFICHE UN NOUVEAU CARACTERE
BSR.L SCROLLTEXT		;SCROLLE LE FOND DU SCROLL
RTS
;===================	
SCROLLTEXT:			
LEA SCROLL+[50*35*3],A0		;ON POINTE A0 SUR LE FOND DU SCROLL
	
BSR.L WAIT_BLITTER		;ON ATTEND QUE LE BLITTER EST FINI SON 
				;PRECEDENT TRAVAIL

LEA SCROLL+[50*35*3]-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 #[35*64*3]+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.L 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
LEA 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+[50*35*3],A3			;ON POINTE A3 SUR LA POSITION SCROLL+46
ADD.L #44,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.L 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 #$09F00000,BLTCON0	;$0 -> PAS DE DECALAGE DE LA SOURCE A
				;$9 -> POUR 1 SOURCE BLITTER A
				;$F0 -> MINTERM POUR COPIE DIRECTE

MOVE.W #[35*3*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 ' ABCDEFGHI'	;TABLE DES CARACTERES
		DC.B 'JKLMNOPQRS'	;TELS QU'ILS SONT DISPOSES
		DC.B 'TUVWXYZ.,:'	;DANS NOTRE IMAGE	
		DC.B '()@#!?-*^/'
		DC.B '0123456789'

EVEN
FONT1=FONT		;ADRESSES DES LETTRES PAR LIGNES
FONT2=FONT+[3*35*40] 
FONT3=FONT+[6*35*40]
FONT4=FONT+[9*35*40]
FONT5=FONT+[12*35*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 ' VOICI DONC NOTRE PREMIER ESSAI DE SCROLLING AU BLITTER '
DC.B '   CECI REPRESENTE UNE VERITABLE DEMO    SIMPLE MAIS UNE DEMO'
DC.B ' QUAND MEME    VOUS POUVEZ MODIFIER L IMAGE '
DC.B ' LA MUSIQUE  LES CARACTERES  LE TEXTE A VOUS DE JOUER '
DC.B '      POUR FINIR VOICI LA LISTE DES CARACTERES UTILISABLES '
DC.B ' ABCDEFGHIJKLMNOPQRSTUVWXYZ'
DC.B '.,:()@#!?-*^/0123456789'
dc.b '    ',0
fin:
EVEN
;====================
SCROLLING_ROT:		;ROUTINE DE ROTATION

ADD.W #1,CPT1		;AJOUTE 1 AU COMPTEUR

ADD.W #150,LO11		;AJOUTE 1 LIGNE (3*50) AU POINTEUR DE PLAN
ADD.W #150,LO12		
ADD.W #150,LO13		

CMP.W #70,CPT1		;COMPTEUR = A 70 ( = 2 FOIS LA HAUTEUR DES LETTRE)
BNE OK			;SINON VA A OK
MOVE.W #0,CPT1		;SI OUI  MET COMPTEUR A 0

SUB.W #150*70,LO11	;SOUSTRAIT 70 LIGNES AU POINTEUR PLAN
SUB.W #150*70,LO12	;
SUB.W #150*70,LO13	;

OK:

ADD.W #1,CPT2		;IDEM......

ADD.W #150,LO21
ADD.W #150,LO22
ADD.W #150,LO23

CMP.W #70,CPT2
BNE OK2
MOVE.W #0,CPT2

SUB.W #150*70,LO21
SUB.W #150*70,LO22
SUB.W #150*70,LO23

OK2:

RTS

EVEN
CPT1: DC.W 0
EVEN
CPT2: DC.W -35
EVEN

;====================
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,	SCROLL+000-2/65536
	DC.W $00E2
LO11:	DC.W 		SCROLL+000-2 & 65535
	DC.W $00E8,	SCROLL+050-2/65536
	DC.W $00EA
LO12:	DC.W 		SCROLL+050-2 & 65535
	DC.W $00F0,	SCROLL+100-2/65536
	DC.W $00F2
LO13:	DC.W 		SCROLL+100-2 & 65535
	
	DC.W $00E4,	SCROLL+000/65536
	DC.W $00E6
LO21:	DC.W 		SCROLL+000 & 65535
	DC.W $00EC,	SCROLL+050/65536
	DC.W $00EE
LO22:	DC.W 		SCROLL+050 & 65535
	DC.W $00F4,	SCROLL+100/65536
	DC.W $00F6
LO23:	DC.W 		SCROLL+100 & 65535


	;REGISTRE POUR CHOISIR RESOLUTION	

	DC.W	$0100,$0000		;6 PLANS DUAL PLAYFIELS

	;DECALAGE ECRAN - INUTILISE ICI

	DC.W	$0102,$0000

	;PRIORITE DES PLANS ET SPRITES - INUTILISE ICI

	DC.W 	$0104,$0000

	;MODULOS DES PLANS

	DC.W	$0108,110		;MODULOS PLANS PAIRS
	DC.W 	$010A,-40-50-50-50 	;MODULOS INVERSE 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,$0A50	;COULEUR 01
	DC.W	$0184,$0DC0	;COULEUR 02
	DC.W	$0186,$0606	;COULEUR 03
	DC.W	$0188,$0818	;COULEUR 04
	DC.W	$018A,$0A2A	;COULEUR 05
	DC.W	$018C,$0D3D	;COULEUR 06
	DC.W	$018E,$0F5F	;COULEUR 07

	DC.W	$0190,$0000	;COULEUR 08
	DC.W	$0192,$0A50	;COULEUR 09
	DC.W	$0194,$0DC0	;COULEUR 10
	DC.W	$0196,$0606	;COULEUR 11
	DC.W	$0198,$0818	;COULEUR 12
	DC.W	$019A,$0A2A	;COULEUR 13
	DC.W	$019C,$0D3D	;COULEUR 14
	DC.W	$019E,$0F5F	;COULEUR 15

BARRE1: DC.W $A001,$FFFE,$0100,$6600

		DC.W $0102,$00F0
DC.W $A101,$FFFE,$0102,$00A5
DC.W $A201,$FFFE,$0102,$0087
DC.W $A301,$FFFE,$0102,$0069
DC.W $A401,$FFFE,$0102,$005A
DC.W $A501,$FFFE,$0102,$004B
DC.W $A601,$FFFE,$0102,$004B
DC.W $A701,$FFFE,$0102,$003C
DC.W $A801,$FFFE,$0102,$002D
DC.W $A901,$FFFE,$0102,$002D
DC.W $AA01,$FFFE,$0102,$001E
DC.W $AB01,$FFFE,$0102,$001E
DC.W $AC01,$FFFE,$0102,$000F
DC.W $AD01,$FFFE,$0102,$000F
DC.W $AE01,$FFFE,$0102,$000F
DC.W $AF01,$FFFE,$0102,$000F
DC.W $B001,$FFFE,$0102,$000F
DC.W $B101,$FFFE,$0102,$000F
DC.W $B201,$FFFE,$0102,$000F
DC.W $B301,$FFFE,$0102,$000F
DC.W $B401,$FFFE,$0102,$000F
DC.W $B501,$FFFE,$0102,$000F
DC.W $B601,$FFFE,$0102,$000F
DC.W $B701,$FFFE,$0102,$001E
DC.W $B801,$FFFE,$0102,$001E
DC.W $B901,$FFFE,$0102,$002D
DC.W $BA01,$FFFE,$0102,$002D
DC.W $BB01,$FFFE,$0102,$003C
DC.W $BC01,$FFFE,$0102,$004B
DC.W $BD01,$FFFE,$0102,$004B
DC.W $BE01,$FFFE,$0102,$005A
DC.W $BF01,$FFFE,$0102,$0069
DC.W $C001,$FFFE,$0102,$0087
DC.W $C101,$FFFE,$0102,$00A5
DC.W $C201,$FFFE,$0102,$00F0
DC.W $C301,$FFFE,$0102,$00F0

DC.W $0100,$0000		;RESOLUTION A 0

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

	DC.W $FFDF,$FFFE

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

VOICI UN PROGRAMME DE GESTION DE LA SOURIS, CELUI CI GERE LES DEPLACEMENTS
D'UN POINTEUR REPRESENTE PAR UN SPRITE.

SI VOUS LE DESIREZ VOUS POUVEZ REMPLACER CE SPRITE PAR UN BOB DE N'IMPORTE
QUELLE TAILLE.

ATTENTION LES COORDONNEES DU SPRITES CORRESPONDENT AUX COORDONNEES DE L'AFFI
CHAGE VIDEO ET NON PAS AUX COORDONNEES DE L'ECRAN AFFICHE. 


=============================================================================
		PROGRAMME DE GESTION DE LA SOURIS
=============================================================================
;POUR CHARGER LES DATAS TAPEZ:
;
;
;RI		RETURN
;PIC_RAW	RETURN
;IMAGE		RETURN RETURN
;
;PUIS TAPEZ
;G BEGIN	RETURN RETURN
;
;SUPPRIMEZ LES LIGNES SUIVANTES SI VOTRE VERSION DU SEKA
;NE COMPORTE PAS LA COMMANDE Y

>EXTERN "PIC_RAW",IMAGE

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
;==================================
IMAGE=$40000			;L'IMAGE SE TROUVE A $40000

FINDATA=IMAGE+[40*200*5]	;FIN DES DATAS APRES L'IMAGE
			
;==================================
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 SETCOPPER			;SAUTE SOUS PROGRAMME: MET EN PLACE LISTE COPPER
BSR.s NEWIRQ3			;SAUTE SOUS PROGRAMME: MET EN PLACE ROUTINE D'INTERRRUPTION

WAIT:
CMP.B #$F0,$DFF006
BNE.S WAIT

BTST	#6,$BFE001		;TESTE BOUTON GAUCHE SOURIS
BEQ.S	END

BTST 	#10,$DFF016		;TESTE BOUTON DROIT SOURIS
BEQ.S	END

JMP WAIT

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)

BSR.L SOURIS
	
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
;====================
SOURIS:
	BSR	MOUSE		;VA A ROUTINE DE CALCUL POSITION

	LEA	MOUSEX,A0	;POSITION X DANS A0
	BTST	#0,D7		;SI PAS VERS LA DROITE
	BEQ.S	MOV_M2		;ON PASSE
	ADD.W	D6,(A0)		;AJOUTE DEPLACEMENT A POSITION X
	CMP.W	#450,(A0)	;SI INFERIEUR A 450
	BLE.S	MOV_M3		;ON PASSE
	MOVE.W	#450,(A0)	;SINON MET POSITION X A 450 
	BRA.S	MOV_M3		;VA A TEST POSITION Y
MOV_M2:
	BTST	#1,D7		;SI PAS VERS LA GAUCHE
	BEQ.S	MOV_M3		;ON PASSE
	SUB.W	D6,(A0)		;SOUSTRAIT DEPLACEMENT A POSITION X
	CMP.W	#126,(A0)	;SI SUPERIEUR A 126
	BGE.S	MOV_M3		;ON PASSE
	MOVE.W	#126,(A0)	;SINON MET POSITION X A 126        
MOV_M3:
	LEA	MOUSEY,A0	;POSITION Y DANS A0
	BTST	#2,D7		;SI PAS VERS LE BAS
	BEQ.S	MOV_M4		;ON PASSE
	ADD.W	D5,(A0)		;AJOUTE DEPLACEMENT A POSITION Y
	CMP.W	#$f0,(A0)	;SI INFERIEUR A $F0 (200)
	BLE.S	MOV_M5		;ON PASSE
	MOVE.W	#$f0,(A0)	;SINON MET POSITION Y A 200 
	BRA.S	MOV_M5		;VA A FIN TEST
MOV_M4:
	BTST	#3,D7		;SI PAS VERS LE HAUT
	BEQ.S	MOV_M5		;ON PASSE
	SUB.W	D5,(A0)		;SOUSTRAIT DEPLACEMENT A POSITION Y
	CMP.W	#$29,(A0)	;SI SUPERIEUR A $29
	BGE.S	MOV_M5		;ON PASSE
	MOVE.W	#$29,(A0)	;SINON MET POSITION Y A $29        
MOV_M5:

	LEA	SPRDATA,A4	;POINTE A4 SUR STRCUTURE SPRITE
	MOVE.W	MOUSEX,D7	;POSITION X EN D7
	MOVE.W	MOUSEY,D6	;POSITION Y EN D6
	MOVE.W	#16,D5		;HAUTEUR DU SPRITE EN D5
	BSR.L	SPRITES		;VA A ROUTINE CALCUL COORDONNEES SPRITE
	rts

;ROUTINE DE DETECTION DE MOUVEMENT DE LA SOURIE
MOUSE:
	MOVEQ	#0,D7
	MOVE.W	$dff00a,D0
	MOVE.W	D0,D1
	AND.W	#%11111111,D1
	MOVE.W	OLD_MX,D2
	MOVE.W	D1,OLD_MX
	CMP.W	D2,D1		;OLDX=OLDX-CURRENT
	BGT.S	MOUSE2		;BR SI CURRENT PLUS GRAND
	BLT.S	MOUSE3		;BR SI CURRENT PLUS PETIT
				;AUCUN CHANGEMENT
	MOVEQ	#0,D6		;D6=XSPEED
	BRA.S	MOUSE4
MOUSE2:
	SUB.W	D2,D1		;CURRENT=CURRENT-OLD
	CMP.W	#127,D1		;EST-CE PLUS GRAND QUE 127
	BGT.S	MOUSE2B		;BR SI OUI
				;C'EST PLUS PETIT
	MOVE.W	D1,D6		;D6=XSPEED
	BSET	#0,D7		;DIRECTION
	BRA.S	MOUSE4
MOUSE2B:
				;C'EST PLUS PETIT QUE 127
	MOVE.W	#256,D6
	SUB.W	D1,D6		;256-(>127)
	BSET	#1,D7
	BRA.S	MOUSE4
MOUSE3:
	SUB.W	D1,D2		;OLD=OLD-CURRENT
	CMP.W	#127,D2		;EST-CE PLUS GRAND QUE 127
	BGT.S	MOUSE3B
				;C'EST PLUS PETIT
	MOVE.W	D2,D6
	BSET	#1,D7
	BRA.S	MOUSE4
MOUSE3B:
				;C'EST PLUS PETIT QUE 127
	MOVE.W	#256,D6
	SUB.W	D2,D6		;256-(>127)
	BSET	#0,D7
	BRA.S	MOUSE4

MOUSE4:
	LSR.W	#8,D0
	MOVE.W	OLD_MY,D2
	MOVE.W	D0,OLD_MY
	CMP.W	D2,D0		;OLDX=OLDX-CURRENT
	BGT.S	MOUSE5		;BR SI CURRENT PLUS GRAND
	BLT.S	MOUSE6		;BR SI CURRENT PLUS PETIT
				;AUCUN CHANGEMENT
	MOVEQ	#0,D5		;D5=XSPEED
	BRA.S	MOUSE7
MOUSE5:
	SUB.W	D2,D0		;CURRENT=CURRENT-OLD
	CMP.W	#127,D0		;EST-CE PLUS GRAND QUE 127
	BGT.S	MOUSE5B		;BR SI OUI
				;C'EST PLUS PETIT
	MOVE.W	D0,D5		;D5=XSPEED
	BSET	#2,D7		;DIRECTION
	BRA.S	MOUSE7
MOUSE5B:
				;C'EST PLUS PETIT QUE 127
	MOVE.W	#256,D5
	SUB.W	D0,D5		;256-(>127)
	BSET	#3,D7
	BRA.S	MOUSE7
MOUSE6:
	SUB.W	D0,D2		;OLD=OLD-CURRENT
	CMP.W	#127,D2		;EST-CE PLUS GRAND QUE 127
	BGT.S	MOUSE6B
				;C'EST PLUS PETIT
	MOVE.W	D2,D5
	BSET	#3,D7
	BRA.S	MOUSE7
MOUSE6B:
				;C'EST PLUS PETIT QUE 127
	MOVE.W	#256,D5
	SUB.W	D2,D5		;256-(>127)
	BSET	#2,D7
MOUSE7:
	RTS

;RETOUR: D7=DIRECTION BIT# N. 0=DROITE , 1=GAUCHE , 2=BAS , 3=HAUT
;D6=SPEED EN X , D5=SPEED EN Y

;=================================================================

;A4=ADRESSE OU SE TROUVE LES DATAS
;D7 ET D6 SONT LES POSITION X ET Y (WORDS), D5 HAUTEUR DU SPRITE
;USE : A4,D7,D6,D5,D4=LES DEUX 16 BITS DE CONTROLE A METTRE

SPRITES:
			;CREER VARIABLE VSTOP D'APRES LA HAUTEUR
	MOVEQ	#0,D4
	ADDA.W	D6,D5
	ADD.W	#1,D5	;TROUVE BONNE HAUTEUR
	MOVE.W	D5,D4
	ROL.W	#8,D4
	LSL.B	#1,D4	;OK VSTOP
	SWAP	D4 
	MOVE.B	D6,D4
	BTST	#8,D6
	BEQ.S	SPRITES2
	BSET	#18,D4
SPRITES2:
	LSL.W	#8,D4	;OK POUR VSTART
	BTST	#0,D7
	BEQ.S	SPRITES3
	BSET	#16,D4
SPRITES3:
	LSR.W	#1,D7
	MOVE.B	D7,D4
	SWAP	D4	;ET LE TOUR EST JOUE ! RAPIDE ET SIMPLE
	MOVE.L	D4,(A4)
	RTS


EVEN
SPRDATA:	;IMAGE DE NOTRE SPRITE
DC.W	0,0	;VSTART,VSTOP,HSTART
dc.w %1111111111100000,%1111111111100000
dc.w %1111111111000000,%1000000001000000
dc.w %1111111110000000,%1000000010000000
dc.w %1111111100000000,%1000000100000000
dc.w %1111111100000000,%1000001100000000
dc.w %1111111110000000,%1000010010000000
dc.w %1111111111000000,%1000100001000000
dc.w %1111011111100000,%1001010000100000
dc.w %1110001111110000,%1010001000010000
dc.w %1100000111111000,%1100000100001000
dc.w %1000000011111100,%1000000010000100
dc.w %0000000001111110,%0000000001000010
dc.w %0000000000111111,%0000000000100001
dc.w %0000000000011111,%0000000000010001
dc.w %0000000000001111,%0000000000001001
dc.w %0000000000000111,%0000000000000101
DC.W	0,0 
EVEN

MOUSEX:	DC.W	0
MOUSEY:	DC.W	0
OLD_MX:	DC.W	1
OLD_MY:	DC.W	1

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

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

	;POINTEURS ADRESSE DES PLANS DE L'IMAGE

	DC.W $00E0,IMAGE+[40*200*0]/65536
	DC.W $00E2,IMAGE+[40*200*0] & 65535
	DC.W $00E4,IMAGE+[40*200*1]/65536
	DC.W $00E6,IMAGE+[40*200*1] & 65535
	DC.W $00E8,IMAGE+[40*200*2]/65536
	DC.W $00EA,IMAGE+[40*200*2] & 65535
	DC.W $00EC,IMAGE+[40*200*3]/65536
	DC.W $00EE,IMAGE+[40*200*3] & 65535
	DC.W $00F0,IMAGE+[40*200*4]/65536
	DC.W $00F2,IMAGE+[40*200*4] & 65535


	;REGISTRE POUR CHOISIR RESOLUTION	

	DC.W	$0100,$5200		;5 PLANS+MODE COULEURS

	;DECALAGE ECRAN - INUTILISE ICI

	DC.W	$0102,$0000

	;PRIORITE DES PLANS ET SPRITES - SPRITE DEVANT IMAGE

	DC.W 	$0104,$003f
	;DC.W $104,%0000000000111111

	;MODULOS DES PLANS

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

	;POINTEURS DES SPRITES 

	DC.W	$0120,SPRDATA/65536
	DC.W	$0122,SPRDATA&65535


	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,$0AAA	;COULEUR 01
	DC.W	$0184,$006B	;COULEUR 02
	DC.W	$0186,$04A0	;COULEUR 03
	DC.W	$0188,$0C80	;COULEUR 04
	DC.W	$018A,$0E90	;COULEUR 05
	DC.W	$018C,$0FA0	;COULEUR 06
	DC.W	$018E,$0EC0	;COULEUR 07
	DC.W	$0190,$0DE0	;COULEUR 08
	DC.W	$0192,$0CD0	;COULEUR 09
	DC.W	$0194,$08D0	;COULEUR 10
	DC.W	$0196,$05C0	;COULEUR 11
	DC.W	$0198,$0DED	;COULEUR 12
	DC.W	$019A,$0BDB	;COULEUR 13
	DC.W	$019C,$09B9	;COULEUR 14
	DC.W	$019E,$0EE9	;COULEUR 15
	DC.W	$01A0,$0F01	;COULEUR 16	;LES COULEURS DE 16 A 31 SONT
	DC.W	$01A2,$0F80	;COULEUR 17	;AUSSI CELLES DES SPRITES
	DC.W	$01A4,$0FF0	;COULEUR 18
	DC.W	$01A6,$00F0	;COULEUR 19	;LES COULEURS 16 A 31 NE SONT
	DC.W	$01A8,$00FF	;COULEUR 20	;PAS UTILISEES DANS LE MODE
	DC.W	$01AA,$000F	;COULEUR 21	;HOLD AND MODIFY (HAM)
	DC.W	$01AC,$080F	;COULEUR 22
	DC.W	$01AE,$0F0F	;COULEUR 23
	DC.W	$01B0,$0111	;COULEUR 24
	DC.W	$01B2,$0333	;COULEUR 25
	DC.W	$01B4,$0555	;COULEUR 26
	DC.W	$01B6,$0777	;COULEUR 27
	DC.W	$01B8,$0999	;COULEUR 28
	DC.W	$01BA,$0BBB	;COULEUR 29
	DC.W	$01BC,$0DDD	;COULEUR 30
	DC.W	$01BE,$0FFF	;COULEUR 31

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


VOILA NOUS VOICI ARRIVE AU TERME DE CE NUMERO 8 D'ASM....

	J'AURAIS AIME VOUS PARLER DE BEAUCOUP D'AUTRES CHOSES, MAIS LE TEMPS
NOUS EST COMPTE... JE VOUS RESERVE TOUT CA POUR UN AUTRE NUMERO D'ASM...
SPECIAL EFFETS SPECIAUX.....LA REVANCHE......

	SUR CE, JE VOUS LAISSE VOUS AMUSEZ AVEC TOUT CE FRATRAS D'OCTETS, ET
JE VOUS DONNE RENDEZ-VOUS LE 15 FEVRIER 1992


		AMIGALEMENT

		FUNX / PHOENIX-DP (C) 1991	

