ùúùú  ‰Û  ¼  •Œ  =@ ¬  ¢  ¢  ¢  ¢;====================================================================
;	RRip 0.82A Par Arnaud GUYON	14 Septembre 1994
;	* Faire un Menu pour les Sprites
;	(recherche des sprites, leurs couleurs, si attaches...)
;	Les repositionner,etc...
;	* Reperer Modules ProTracker , puis instruments

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

	IncDir	"hd1:langages/asm/include/"
	Include	"RLHeader.i"

;====================================================================
;	Erreur lors de la sauvegarde (Error.b)
;	Bits:	7 6 5 4 3 2 1 0
;		 \ \ \ \ \ \ \ \_ Librairie absente
;		  \ \ \ \ \ \ \__ Pas de nom de fichier
;		   \ \ \ \ \ \___ Pas assez de place sur le disk
;		    \ \ \ \ \____ Fichier deja existant (ecraser)
;====================================================================
r:	move.l	4.w,a6
	jsr	-132(a6)	; Forbid MultiTask

	move.l	4.w,a6
	lea	DosName,a1
	jsr	-408(a6)
	move.l	d0,DosBase


	move.l	$6c.w,saveirq3+2
	move.l	#irq3,$6c.w

	move.l	4.w,a6
	lea	GfxName(pc),a1
	jsr	-408(a6)
	move.l	d0,GfxBase

;====================================================================
	Lea	Palette,a0
	moveq	#0,d3		; No Palette

	moveq	#8-1,d4		; 8 palettes
InitPal16M:
	moveq	#2-1,d2		; *2 (poids fort / poids faible)
InitPal256:
	move	#32-1,d1
	move	#$0106,(a0)+
	move	d3,(a0)+
	move	#$180,d0
InitPal:move	d0,(a0)+
	clr	(a0)+
	addq	#2,d0
	dbf	d1,InitPal
	eor	#%0000001000000000,d3		; Hi/Low
	dbf	d2,InitPal256
	add.w	#%0010000000000000,d3	; Next Pal
	dbf	d4,InitPal16M

;====================================================================
	Lea	Menus(pc),a0
	Lea	Menu,a1
	move	#[20*36*2]-1,d0
CopyMenus:
	move.l	(a0)+,(a1)+
	dbf	d0,CopyMenus
;====================================================================
	move.l	#Pointeur,d0
	lea	Sprt+6,a0
	move	d0,(a0)
	swap	d0
	move	d0,-4(a0)

	move.l	#Menu,d0
	lea	MenuBpl+6,a0
	moveq	#2-1,d1
CopyMenuBpl:
	move	d0,(a0)
	swap	d0
	move	d0,-4(a0)
	swap	d0
	add.l	#80,d0
	addq.l	#8,a0
	dbf	d1,CopyMenuBpl

	BRA	ACTIVECLONE

Exit:	move	#$000F,$dff096		; Sons OFF
	lea	Requester,a0
	bsr	RitLib+RL_Requete
	cmp.l	#1,d0
	beq	Quitter
	bra	ACTIVECLONE

Quitter:move.l	GfxBase(pc),a0
	move.l	38(a0),$dff080
	clr	$dff088

	sub.l	a0,a0
	bsr	RitLib+RL_FreeMem
	move.l	saveirq3+2,$6c.w

	move.l	4.w,a6
	jsr	-138(a6)	; Permit MultiTask
	move	#$F,$dff096
	move	#0,$dff0a8
	moveq	#0,d0
	rts

;====================================================================
WaitVBL:cmp.b	#77,$dff006
	bne	WaitVBL
VBL:	cmp.b	#77,$dff006
	beq	VBL
	rts
;====================================================================
Delay:		dc.w	0
MouseSTOP:	dc.w	0
;====================================================================
ActiveClone:
	move	#$3C,Copper2+10		; 38/d0 LowRes | 3C/d4 HiRes
	move	#$D4,Copper2+14
	move	#$5A81,Copper2+2
	move	#$37C1,Copper2+6

	bsr	CopyBPLCON
	bsr	CopyBPLS
	bsr	CopyModulo
	bsr	CopyTailleX
	move.l	#CopperRipper,$dff080
	clr	$dff088

Souris:	clr.w	MouseSTOP
	move	MouseX,d0
	move	MouseY,d1
	btst	#6,$bfe001
	bne	FinMouse

	move.w	#-1,MouseSTOP

	cmp	#$90,d0
	bhs	PasHautGauche
	cmp	#$119-223,d1
	bhi	PasHaut
;================================ // Haut
	move.l	AddScroll,SAddScroll

HAUT:	clr.w	Delay

	moveq	#0,d2
	move.l	#36,d3
	moveq	#4,d4
	moveq	#0,d5
	moveq	#0,d6
	bsr	CopyGraph3
	moveq	#0,d2
	move.l	#36+9,d3
	moveq	#4,d4
	moveq	#0,d5
	moveq	#9,d6
	bsr	CopyGraph3

	bra	HautTurbo
HautNoTurbo:
	bsr	WaitVBL
	addq.w	#1,Delay
	cmp	#25,Delay
	blo	HautMouse
	move	#25,Delay
HautTurbo:
	lea	Bpls+6,a0
	moveq	#8-1,d0
	moveq	#0,d2		; Bit a tester pour Scr ou non
ScrBas:	btst.b	d2,BplActifs
	beq	ScrBnon
	move	-4(a0),d1
	swap	d1
	move	(a0),d1
	sub.l	AddScroll,d1	; Largeur ecran
	move	d1,(a0)
	swap	d1
	move	d1,-4(a0)
ScrBnon:addq	#1,d2
	addq.l	#8,a0
	dbf	d0,ScrBas

	move.l	SAddScroll,AddScroll
	btst	#10,$dff016	; "Turbo"
	bne	HautMouse
	move.l	#$1000,AddScroll
HautMouse:
	bsr	CopyBPLS
	btst	#6,$bfe001	; "Normal"
	beq	HautNoTurbo

	move.l	SAddScroll,AddScroll

	moveq	#0,d2
	move.l	#0,d3
	moveq	#4,d4
	moveq	#0,d5
	moveq	#0,d6
	bsr	CopyGraph3
	moveq	#0,d2
	move.l	#9,d3
	moveq	#4,d4
	moveq	#0,d5
	moveq	#9,d6
	bsr	CopyGraph3

	bsr	CopyBPLS
	bra	FinMouse

;================================ // Droite
PasBas:	clr.w	Delay

	moveq	#4,d2
	move.l	#36+18,d3
	moveq	#4,d4
	moveq	#4,d5
	moveq	#18,d6
	bsr	CopyGraph3
	moveq	#4,d2
	move.l	#36+9+18,d3
	moveq	#4,d4
	moveq	#4,d5
	moveq	#9+18,d6
	bsr	CopyGraph3

	bra	TurboGauche
NoTurboGauche:
	bsr	WaitVBL
	addq.w	#1,Delay
	cmp	#25,Delay
	blo	DroiteMouse
	move	#25,Delay
TurboGauche:
	lea	Bpls+6,a0
	moveq	#8-1,d0
	moveq	#0,d2
ScrGauche:
	btst.b	d2,BplActifs
	beq	ScrGnon
	move	-4(a0),d1
	swap	d1
	move	(a0),d1
	addq.l	#2,d1
	move	d1,(a0)
	swap	d1
	move	d1,-4(a0)
ScrGnon:addq	#1,d2
	addq.l	#8,a0
	dbf	d0,ScrGauche
	bsr	CopyBPLS
DroiteMouse:
	btst	#6,$bfe001
	beq	NoTurboGauche


	moveq	#4,d2
	move.l	#18,d3
	moveq	#4,d4
	moveq	#4,d5
	moveq	#18,d6
	bsr	CopyGraph3
	moveq	#4,d2
	move.l	#9+18,d3
	moveq	#4,d4
	moveq	#4,d5
	moveq	#9+18,d6
	bsr	CopyGraph3

	bra	FinMouse
;================================ // Gauche
PasHaut:clr.w	Delay

	moveq	#0,d2
	move.l	#36+18,d3
	moveq	#4,d4
	moveq	#0,d5
	moveq	#18,d6
	bsr	CopyGraph3
	moveq	#0,d2
	move.l	#36+9+18,d3
	moveq	#4,d4
	moveq	#0,d5
	moveq	#9+18,d6
	bsr	CopyGraph3

	bra	TurboDroite
NoTurboDroite:
	bsr	WaitVBL
	addq.w	#1,Delay
	cmp	#25,Delay
	blo	GaucheMouse
	move	#25,Delay
TurboDroite:
	lea	Bpls+6,a0
	moveq	#8-1,d0
	moveq	#0,d2
ScrDroite:
	btst.b	d2,BplActifs
	beq	ScrDnon
	move	-4(a0),d1
	swap	d1
	move	(a0),d1
	subq.l	#2,d1
	move	d1,(a0)
	swap	d1
	move	d1,-4(a0)
ScrDnon:addq	#1,d2
	addq.l	#8,a0
	dbf	d0,ScrDroite
	bsr	CopyBPLS
GaucheMouse:
	btst	#6,$bfe001
	beq	NoTurboDroite

	moveq	#0,d2
	move.l	#18,d3
	moveq	#4,d4
	moveq	#0,d5
	moveq	#18,d6
	bsr	CopyGraph3
	moveq	#0,d2
	move.l	#9+18,d3
	moveq	#4,d4
	moveq	#0,d5
	moveq	#9+18,d6
	bsr	CopyGraph3

	bra	FinMouse
;================================
PasHautGauche:
	cmp	#$A0,d0
	bhs	PasFleches
	cmp	#$119-223,d1
	bhi	PasBas
;================================ // Bas
	move.l	AddScroll,SAddScroll

BAS:	clr.w	Delay

	moveq	#4,d2
	move.l	#36,d3
	moveq	#4,d4
	moveq	#4,d5
	moveq	#0,d6
	bsr	CopyGraph3
	moveq	#4,d2
	move.l	#36+9,d3
	moveq	#4,d4
	moveq	#4,d5
	moveq	#9,d6
	bsr	CopyGraph3

	bra	BasTurbo
BasNoTurbo:
	bsr	WaitVBL
	addq.w	#1,Delay
	cmp	#25,Delay	; 1/2 seconde
	blo	BasMouse
	move	#25,Delay
BasTurbo:
	lea	Bpls+6,a0
	moveq	#8-1,d0
	moveq	#0,d2
ScrHaut:btst.b	d2,BplActifs
	beq	ScrHnon
	move	-4(a0),d1
	swap	d1
	move	(a0),d1
	add.l	AddScroll,d1
	move	d1,(a0)
	swap	d1
	move	d1,-4(a0)
ScrHnon:addq	#1,d2
	addq.l	#8,a0
	dbf	d0,ScrHaut

	move.l	SAddScroll,AddScroll
	btst	#10,$dff016
	bne	BASMouse
	move.l	#$1000,AddScroll
BasMouse:
	bsr	CopyBPLS
	btst	#6,$bfe001	; "Normal"
	beq	BASNoTurbo

	move.l	SAddScroll,AddScroll

	moveq	#4,d2
	moveq	#0,d3
	moveq	#4,d4
	moveq	#4,d5
	moveq	#0,d6
	bsr	CopyGraph3
	moveq	#4,d2
	move.l	#9,d3
	moveq	#4,d4
	moveq	#4,d5
	moveq	#9,d6
	bsr	CopyGraph3

	bsr	CopyBPLS

	bra	FinMouse

PasFleches:
	cmp	#$C0,d0
	bhs	PasNbBpls
	cmp	#$32,d1
	blo	PasChercheBitmap
	cmp	#$3B,d1
	bhs	PasChercheBitmap

;================================ // Cherche Bitmap Sous Menu RRip
	moveq	#24,d2
	moveq	#36,d3
	moveq	#8,d4
	moveq	#8,d5
	moveq	#9,d6
	bsr	CopyGraph3

	move	#320,TailleX
	move	#256,TailleY

	bsr	SearchMain
	tst.l	Current
	beq	WWWW			; Nothing !
	bsr	CopyCopperColors

WWWW:	bsr	WaitVBL
	btst	#6,$bfe001
	beq	WWWW

	moveq	#8,d2
	moveq	#9,d3
	moveq	#8,d4
	moveq	#8,d5
	moveq	#9,d6
	bsr	CopyGraph3

	bra	FinMouse

PasChercheBitmap:
	cmp	#$44,d1
	blo	PasNbBpls
	cmp	#$B0,d0
	blo	PasNbBpls
	cmp	#$B8,d0
	bhs	PasBplPlus
;================================ // Nombre Bpl Plus
	cmp.l	#8,NbBpls
	bhs	FinMouse
	addq.l	#1,NbBpls

	moveq	#20,d2
	moveq	#36,d3
	moveq	#2,d4
	moveq	#12,d5
	moveq	#27,d6
	bsr	CopyGraph3

	bra	BplPlusMoins
PasBplPlus:
;================================ // Nombre Bpl Moins
	cmp.l	#1,NbBpls
	bls	FinMouse
	subq.l	#1,NbBpls

	moveq	#22,d2
	moveq	#36,d3
	moveq	#2,d4
	moveq	#14,d5
	moveq	#27,d6
	bsr	CopyGraph3

BplPlusMoins:
	move.l	NbBpls,d0	; 1 a 8
	move	BPLCON+2,d1
	and.w	#%1000111111101111,d1	; tout sauf NbBpls
	cmp	#8,d0
	blo	BplA500
	bset	#4,d1
	subq.l	#8,d0
BplA500:ror.w	#4,d0
	or.w	d0,d1
	move	d1,BPLCON+2
	bsr	CopyBPLCON
	bsr	CopyBPLS
BplMouse:
	bsr	WaitVBL
	btst	#6,$bfe001
	beq	BplMouse

	moveq	#22,d2
	moveq	#0,d3
	moveq	#4,d4
	moveq	#12,d5
	moveq	#27,d6
	bsr	CopyGraph3

	bra	FinMouse
PasNbBpls:
	cmp	#$C0,d0
	blo	PasActiveBpl14
	cmp	#$D8,d0
	bhs	PasActiveBpl14

	sub	#$29,d1
	and.l	#$FFFF,d1
	divu	#9,d1		; 0-3
	btst.b	d1,BplActifs
	beq	ActiverBPL
;================================ Desactive Bitplan (0|1|2|3)
DesactiverBPL:
	bclr.b	d1,BplActifs
	and.l	#$FFFF,d1
	mulu	#9,d1
	move.l	d1,d3

	add.l	#36,d3	; Y1
	move.l	d1,d6	; Y2
	moveq	#8,d2	; X1
	moveq	#16,d5	; X2
	moveq	#6,d4	; TX
	bsr	CopyGraph3
	bra	LacherSouris
;================================ Active Bitplan (0|1|2|3)
ActiverBPL:
	bset.b	d1,BplActifs
	and.l	#$FFFF,d1
	mulu	#9,d1
	move.l	d1,d3	; Y1
	moveq	#16,d2	; X1
	moveq	#16,d5	; X2
	move.l	d1,d6	; Y2
	moveq	#6,d4	; TX
	bsr	CopyGraph3

LacherSouris:
	bsr	WaitVBL
	btst	#6,$bfe001
	beq	LacherSouris
	bra	FinMouse

PasActiveBpl14:
	clr.w	Delay
	cmp	#$E8,d0
	bhs	PasBP14plusmoins
	cmp	#$D8,d0
	blo	PasBP14plusmoins

TurboBitPlans:
	moveq	#0,d0
	moveq	#0,d1
	move	MouseX,d0
	move	MouseY,d1
	cmp	#$E8,d0			; Redondant expres
	bhs	PasBP14plusmoins	; Car si "Turbo" il
	cmp	#$D8,d0			; Faut savoir si 1-4
	blo	PasBP14plusmoins	; ou si 5-8

	cmp	#$E0,d0
	blo	PasBP14Plus
;================================ Bpl 1 a 4 MOINS
; $108 a $12C (36 de haut)
	sub	#$29,d1
	divu	#9,d1		; d1.W = Bp 0|1|2|3

	and.l	#$0000000F,d1
	cmp.l	NbBpls,d1
	bhs	FinMouse

	moveq	#22,d2	; X1
	moveq	#36,d3	; Y1
	moveq	#2,d4	; TX
	moveq	#0,d6
	move	d1,d6
	mulu	#9,d6	; Y2
	moveq	#24,d5	; X2
	bsr	CopyGraph3

	moveq	#-2,d2		; Enlever 2

BP18PM:	lea	Bpls+6,a0
	lsl	#3,d1
	add.l	d1,a0
	move	-4(a0),d1
	swap	d1
	move	(a0),d1
	add.l	d2,d1		; Nouvelle Adresse
	move	d1,(a0)
	swap	d1
	move	d1,-4(a0)
WaitBPL:
	cmp	#25,Delay
	bhs	OkDelayBP
	addq.w	#1,Delay
	bsr	WaitVBL
	bsr	CopyBPLS
	btst	#6,$bfe001
	beq	WaitBPL

OkDelayBP:
	btst	#6,$bfe001
	beq	TurboBitPlans

	bsr	CopyBPLS

	move	MouseX,d0
	cmp	#$80+160,d0
	bhs	Bout58
	moveq	#22,d5
	bra	Bout14
Bout58:	moveq	#42,d5		; X2
Bout14:	moveq	#22,d2		; X1
	moveq	#4,d4		; TX
	moveq	#0,d3		; Y1
	moveq	#0,d6
	move	MouseY,d6
	sub	#$29,d6
	divu	#9,d6
	ext.l	d6
	mulu	#9,d6		; Y bouton
	bsr	CopyGraph3

	bra	FinMouse
PasBP14Plus:
;================================ Bpl 1 a 4 PLUS
	sub.w	#$29,d1
	divu	#9,d1

	and.l	#$0000000F,d1
	cmp.l	NbBpls,d1
	bhs	FinMouse

	moveq	#20,d2	; X1
	moveq	#36,d3	; Y1
	moveq	#2,d4	; TX
	moveq	#0,d6
	move	d1,d6
	mulu	#9,d6	; Y2
	moveq	#22,d5	; X2
	bsr	CopyGraph3

	moveq	#2,d2
	bra	BP18PM

PasBP14plusmoins:
	cmp	#$128,d0
	blo	PasBP58plusmoins
	cmp	#$130,d0
	bhs	PasBP58Plus
;================================ Bpl 5 a 8 PLUS
	sub.w	#$29,d1
	divu	#9,d1
	add.w	#4,d1

	and.l	#$0000000F,d1
	cmp.l	NbBpls,d1
	bhs	FinMouse

	subq	#4,d1
	moveq	#20,d2	; X1
	moveq	#36,d3	; Y1
	moveq	#2,d4	; TX
	moveq	#0,d6
	move	d1,d6
	mulu	#9,d6	; Y2
	moveq	#42,d5	; X2
	bsr	CopyGraph3

	moveq	#2,d2
	addq	#4,d1
	bra	BP18PM

PasBP58Plus:
	cmp	#$138,d0
	bhs	PasBP58plusmoins
;================================ Bpl 5 a 8 MOINS
	sub.w	#$29,d1
	divu	#9,d1
	add.w	#4,d1

	and.l	#$0000000F,d1
	cmp.l	NbBpls,d1
	bhs	FinMouse


	subq	#4,d1
	moveq	#22,d2	; X1
	moveq	#36,d3	; Y1
	moveq	#2,d4	; TX
	moveq	#0,d6
	move	d1,d6
	mulu	#9,d6	; Y2
	moveq	#44,d5	; X2
	bsr	CopyGraph3

	moveq	#-2,d2
	addq	#4,d1
	bra	BP18PM

PasBP58plusmoins:

	cmp	#$110,d0
	blo	PasActive58
	cmp	#$128,d0
	bhs	PasActive58

	sub	#$29,d1
	and.l	#$FFFF,d1
	divu	#9,d1		; 0-3
	addq	#4,d1
	btst.b	d1,BplActifs
	beq	ActiverBPL58
;================================ Desactive Bitplan (4|5|6|7)
	bclr.b	d1,BplActifs
	subq	#4,d1
	and.l	#$FFFF,d1
	mulu	#9,d1

	move.l	d1,d6	; Y2
	move.l	d1,d3
	add.l	#36,d3	; Y1
	moveq	#14,d2	; X1
	moveq	#36,d5	; X2
	moveq	#6,d4	; TX
	bsr	CopyGraph3

	bra	LacherSouris
;================================ Active Bitplan (0|1|2|3)
ActiverBPL58:
	bset.b	d1,BplActifs
	subq	#4,d1
	and.l	#$FFFF,d1
	mulu	#9,d1

	move.l	d1,d6	; Y2
	move.l	d1,d3	; Y1
	moveq	#36,d2	; X1
	moveq	#36,d5	; X2
	moveq	#6,d4	; TX
	bsr	CopyGraph3

	bra	LacherSouris

PasActive58:
	cmp	#$1A0,d0
	blo	PasOptions
	cmp	#$111-223,d1
	bhs	PasQuitterMenu
;================================ // QUITTER
	moveq	#72,d2
	moveq	#36,d3
	moveq	#72,d5
	moveq	#0,d6
	moveq	#8,d4
	bsr	CopyGraph3

WaitQuitter:
	bsr	WaitVBL
	btst	#6,$bfe001
	beq	WaitQuitter

	moveq	#72,d2
	moveq	#0,d3
	moveq	#8,d4
	moveq	#72,d5
	moveq	#0,d6
	bsr	CopyGraph3

	bra	QuitterMenu

PasQuitterMenu:
	cmp	#$11A-223,d1
	bhs	PasSauver
;================================ // Sauver
	moveq	#72,d2
	moveq	#45,d3
	moveq	#8,d4
	moveq	#72,d5
	moveq	#9,d6
	bsr	CopyGraph3

WaitSave:
	bsr	WaitVBL
	btst	#6,$bfe001
	beq	WaitSave

	BSR	SAVEMENU

	Lea	Menus(pc),a0
	Lea	Menu,a1
	move	#[20*36*2]-1,d0
CopyMenuRRip:
	move.l	(a0)+,(a1)+
	dbf	d0,CopyMenuRRip

	bsr	CopyBPLCON
	bsr	CopyBPLS
	bsr	CopyModulo
	bsr	CopyTailleX

	bra	FinMouse

PasSauver:
	cmp	#$123-223,d1
	bhs	PasMenuColor
;================================ // Menu Couleurs
	moveq	#72,d2
	moveq	#54,d3
	moveq	#8,d4
	moveq	#72,d5
	moveq	#18,d6
	bsr	CopyGraph3

WaitMC:	bsr	WaitVBL
	btst	#6,$bfe001
	beq	WaitMC

	clr.w	MouseSTOP

	lea	MenuS+[36*160*2],a0
	lea	Menu,a1
	move	#([640*36*2]/32)-1,d0
CopyMenuColor:
	move.l	(a0)+,(a1)+
	dbf	d0,CopyMenuColor

	bsr	CopyNoCouleur
	bsr	CopyRouge
	bsr	CopyVert
	bsr	CopyBleu
	bsr	CopyCurseurs

;============================================= MENU COLOR LOOP
MainMenuColor:
	clr.w	MouseSTOP
	btst	#6,$bfe001
	bne	FinMenuColor

	move.w	#-1,MouseSTOP
	move	MouseX,d0
	move	MouseY,d1

	cmp	#$32,d1
	bhs	MC_PasLigne1
	cmp	#$140,d0
	blo	MC_PasQuitter
	cmp	#$160,d0
	bhs	MC_PasQuitter
;======================================== // Quitter Menu Color
	moveq	#72,d2
	moveq	#36,d3
	moveq	#8,d4
	moveq	#48,d5
	moveq	#0,d6
	bsr	CopyGraph3

MC_QuitLoop:
	bsr	WaitVBL
	btst	#6,$bfe001
	beq	MC_QuitLoop

	move	#$BB,PalPointeur+6
	move	#$BB,PalPointeur+14
	bra	ExitMenuColor

MC_PasQuitter:
	cmp	#$120,d0
	blo	MC_PasSauver
	cmp	#$140,d0
	bhs	MC_PasSauver
;======================================== // Sauver Couleurs
	moveq	#72,d2
	moveq	#45,d3
	moveq	#8,d4
	moveq	#40,d5
	moveq	#0,d6
	bsr	CopyGraph3

MC_SCwait:
	bsr	WaitVBL
	btst	#6,$bfe001
	beq	MC_SCwait

	bsr	SAVEMENU

	lea	MenuS+[160*36*2],a0
	lea	Menu,a1
	move	#(40*36)-1,d0
MS_CopyMenu2:
	move.l	(a0)+,(a1)+
	dbf	d0,MS_CopyMenu2

	bsr	CopyNoCouleur
	bsr	CopyRouge
	bsr	CopyVert
	bsr	CopyBleu
	bsr	CopyCurseurs

	bra	FinMenuColor


MC_PasSauver:
	cmp	#$180,d0
	bhs	MC_PasChercherColors
	cmp	#$160,d0
	blo	MC_PasChercherColors
;======================================== // Chercher Couleurs
	moveq	#24,d2
	moveq	#36,d3
	moveq	#8,d4
	moveq	#56,d5
	moveq	#0,d6
	bsr	CopyGraph3

MC_ReCherchePAL:
	move.l	CurrentFin,a0
	addq.l	#4,a0
MC_CherchePAL:
	move	$dff006,$dff180
	cmp.l	#-2,(a0)
	beq	FoundEndOfPalette
	addq.l	#2,a0
	cmp.l	#$200000,a0
	blo	MC_CherchePAL
	clr.l	Current
	clr.l	CurrentFin
	bra	MC_ChercheLoop

FoundEndOfPalette:
	move.l	a0,CurrentFin
	cmp.l	#FinCopper,a0	; Pas la notre... (c'est pas grave sinon)
	bne	MC_NotBeginPal
	addq.l	#4,a0
	bra	MC_CherchePAL

MC_NotBeginPal:
	subq.l	#4,a0
	move	(a0),d2
	btst	#0,d2
	bne	MC_BeginPal	; Move Multiple de 2
	cmp	#$200,d2
	bhs	MC_BeginPal	; Move < $200
	cmp	#$8E,d2
	blo	MC_BeginPal	; Move >= $8E
	bra	MC_NotBeginPal
MC_BeginPal:
	cmp	#$FFFE,2(a0)
	beq	MC_NotBeginPal	; C'est un Wait
	cmp.l	#-1,(a0)
	beq	MC_NotBeginPal	; C'est un Nop

	move.l	CurrentFin,d7
	sub.l	a0,d7
	cmp.l	#20,d7
	bls	MC_ReCherchePAL

	move.l	a0,Current

	bsr	CopyCopperColors
	bsr	CopyInitRGB
	bsr	CopyRouge
	bsr	CopyVert
	bsr	CopyBleu
	bsr	CopyCurseurs

MC_ChercheLoop:
	bsr	WaitVBL
	btst	#6,$bfe001
	beq	MC_ChercheLoop

	moveq	#56,d2
	moveq	#72,d3
	moveq	#8,d4
	moveq	#56,d5
	moveq	#0,d6
	bsr	CopyGraph3

	bra	FinMenuColor

MC_PasChercherColors:
	cmp	#$198,d0
	blo	FinMenuColor
	cmp	#$1A8,d0
	bhs	FinMenuColor

	clr	Delay
MC_BoucleColorPM:
	moveq	#0,d0
	move	MouseX,d0

	cmp	#$1A0,d0
	bhs	MC_ColorMoins
;======================================== // Couleur PLUS
	moveq	#20,d2
	moveq	#36,d3
	moveq	#2,d4
	moveq	#70,d5
	moveq	#0,d6
	bsr	CopyGraph3

	addq	#1,MC_C
	and	#$FF,MC_C
	bsr	CopyNoCouleur

MC_ColorPMloop:
	bsr	CopyInitRGB
	bsr	CopyRouge
	bsr	CopyVert
	bsr	CopyBleu
	bsr	CopyCurseurs

MC_ColorPMloop2:
	bsr	WaitVBL
	btst	#6,$bfe001
	bne	MC_ColorExit
	addq.w	#1,Delay
	cmp	#25,Delay
	blo	MC_ColorPMloop2
	move	#25,Delay
	btst	#6,$bfe001
	beq	MC_BoucleColorPM
MC_ColorExit:

	moveq	#22,d2
	moveq	#0,d3
	moveq	#4,d4
	moveq	#70,d5
	moveq	#0,d6
	bsr	CopyGraph3

	bra	FinMenuColor
;======================================== // Couleur MOINS
MC_ColorMoins:
	moveq	#22,d2
	moveq	#36,d3
	moveq	#2,d4
	moveq	#72,d5
	moveq	#0,d6
	bsr	CopyGraph3

	subq	#1,MC_C
	and	#$FF,MC_C
	bsr	CopyNoCouleur
	bra	MC_ColorPMloop

MC_PasLigne1:
	cmp	#$80+256+8,d0
	bhs	PasRGB

;======================================== // Regle composantes
	move	#-2,MouseSTOP	; Y bloque

	moveq	#0,d2
	move	MouseY,d2
	sub	#$29+9,d2
	divu	#9,d2		; 0|1|2
	ext.l	d2
	lsl	#2,d2		; 0|4|8

	lea	DelAdr1(pc),a0
	add.l	d2,a0		; DelAdrX
	move.l	a0,PTdeladr

	moveq	#0,d2
	move	MouseY,d2
	sub	#$29+9,d2
	divu	#9,d2
	ext.l	d2
	lsl	#1,d2		; 0|2|4
	lea	MC_R(pc),a0
	add.l	d2,a0		; a0 sur composante...

	move	MouseX,d2
	sub	#$80,d2
MC_Cok:	cmp	#255,d2
	blo	MC_CompoOK
	move	#255,d2
MC_CompoOK:
	move	d2,(a0)		; Sauve Composante

	bsr	WaitVBL
	bsr	CopyCurseurs
	bsr	CopyRouge
	bsr	CopyVert
	bsr	CopyBleu

MC_TresDangereux_APPEL:

	move	MC_R,d0		; $00FF
	and	#$00F0,d0
	lsl	#4,d0
	move	MC_G,d1
	and	#$00F0,d1
	move	MC_B,d2
	lsr	#4,d2
	or	d1,d0
	or	d2,d0
	move	d0,d3		; d3=Poids Forts

	move	MC_R,d0		; $00FF
	and	#$000F,d0
	lsl	#8,d0
	move	MC_G,d1
	and	#$000F,d1
	lsl	#4,d1
	move	MC_B,d2
	and	#$000F,d2
	or	d1,d0
	or	d2,d0		; d0=Poids Faibles

	lea	PalPointeur,a0
	move	d3,6(a0)
	move	d0,14(a0)

	lea	Palette,a0
	moveq	#0,d1
	moveq	#0,d2
	move	MC_C,d1
	move	d1,d2

	and	#$1F,d1		; 0 - 31
	lsl	#2,d1
	add.l	d1,a0		; a0 sur Bonne Composante, Palette ?

	lsr	#5,d2		; Palette 0-7
	mulu	#132*2,d2
	add.l	d2,a0		; a0 sur bonne Palette, Bonne Composante

	move	d3,6(a0)	; Poids fort
	move	d0,132+6(a0)	; Poids faible
	bra	FinMenuColor

PasRGB:	cmp	#$1a8,d0
	bhs	FinMenuColor
	cmp	#$198,d0
	blo	FinMenuColor

	cmp	#$1a0,d0
	bhs	RGB_ManualM

;================================ Reglage Manuel R,V,B +++
RGB_ManualP:
	moveq	#0,d6
	move	MouseY,d6
	sub	#$29+9,d6
	divu	#9,d6
	ext.l	d6
	mulu	#9,d6
	add.l	#9,d6		; Y2
	moveq	#20,d2		; X1
	moveq	#36,d3		; Y1
	moveq	#2,d4		; Taille X
	moveq	#70,d5		; X2
	bsr	CopyGraph3

	moveq	#1,d1		; Composante + 1
RGB_Manual_Commun:
	moveq	#0,d6
	move	MouseY,d6
	sub	#$29+9,d6
	divu	#9,d6
	ext.l	d6		; 0|1|2 (rgb)
	lsl	#1,d6
	lea	MC_R(pc),a0
	add.l	d6,a0		; a0 sur bonne composante

	moveq	#0,d0
	move	(a0),d0
	add	d1,d0
	and	#$FF,d0
	move	d0,(a0)		; Sauve new Composante...

	bsr	CopyRouge
	bsr	CopyVert
	bsr	CopyBleu
	bsr	CopyCurseurs

RGB_Manual_Loop:
	bsr	WaitVBL
	btst	#6,$bfe001
	beq	RGB_Manual_Loop

	moveq	#0,d6
	move	MouseY,d6
	sub	#$29+9,d6
	divu	#9,d6
	ext.l	d6
	mulu	#9,d6
	add.l	#9,d6		; Y2
	move.l	#22,d2		; X1
	moveq	#0,d3		; Y1
	moveq	#4,d4		; Taille X
	move.l	#70,d5		; X2
	bsr	CopyGraph3
	bra	MC_TresDangereux_APPEL

;================================ Reglage Manuel R,V,B ---
RGB_ManualM:
	moveq	#0,d6
	move	MouseY,d6
	sub	#$29+9,d6
	divu	#9,d6
	ext.l	d6
	mulu	#9,d6
	add.l	#9,d6		; Y2
	moveq	#22,d2		; X1
	moveq	#36,d3		; Y1
	moveq	#2,d4		; Taille X
	moveq	#72,d5		; X2
	bsr	CopyGraph3

	moveq	#-1,d1		; Composante - 1
	bra	RGB_Manual_Commun

FinMenuColor:
	bra	MainMenuColor

PTdeladr:	dc.l	DelAdr1
DelAdr1:	dc.l	Menu+[9*160]
DelAdr2:	dc.l	Menu+[9*160*2]
DelAdr3:	dc.l	Menu+[9*160*3]
MC_C:		dc.w	0
MC_R:		dc.w	0
MC_G:		dc.w	0
MC_B:		dc.w	0
;============================================= MENU COLOR END LOOP
ExitMenuColor:
	Lea	MenuS,a0
	lea	Menu,a1
	move	#[(640*36*2)/32]-1,d0
ReCopyMenuColor:
	move.l	(a0)+,(a1)+
	dbf	d0,ReCopyMenuColor

	bsr	CopyBPLCON
	bsr	CopyBPLS
	bsr	CopyModulo
	bsr	CopyTailleX
	bra	FinMouse
PasMenuColor:
;================================ // Menu Sounds
	moveq	#72,d2
	moveq	#63,d3
	moveq	#8,d4
	moveq	#72,d5
	moveq	#27,d6
	bsr	CopyGraph3

WaitInfos:
	bsr	WaitVBL
	btst	#6,$bfe001
	beq	WaitInfos

	lea	Menus+[108*160],a0
	lea	Menu,a1
	move	#([640*36*2]/32)-1,d0
MS_CopyMenu:
	move.l	(a0)+,(a1)+
	dbf	d0,MS_CopyMenu

	bsr	CopyCourbe
	bsr	CopySoundStart
	bsr	CopySoundLen
	bsr	CopySoundLoop

	clr.w	MouseSTOP
MS_Main:
	btst	#6,$bfe001
	bne	MS_EndMain

	move.w	#-1,MouseSTOP
	moveq	#0,d0
	moveq	#0,d1
	move	MouseX,d0
	move	MouseY,d1


	cmp	#$100,d0
	bhs	MS_PasRANGE

;======================================= // Select Range...
	move	MouseX,d0
	move	#-2,MouseSTOP	; Bloque Y

	sub	#$80,d0
	lsl	#1,d0		; X*2 (HiRes)
	move	d0,Mstart
	move	d0,Mend

MS_Range_Loop:
	bsr	WaitVBL

	lea	Menu+[160*2]+80,a0
	moveq	#32-1,d0
	moveq	#0,d1
DelRange:
	move.l	d1,(a0)+
	move.l	d1,(a0)+
	move.l	d1,(a0)+
	move.l	d1,(a0)+
	move.l	d1,(a0)+
	move.l	d1,(a0)+
	move.l	d1,(a0)+
	move.l	d1,(a0)+
	lea	128(a0),a0
	dbf	d0,DelRange

	Move	MouseX,d0
	sub	#$80,d0
	lsl	#1,d0		; X*2 (HiRes)
	cmp	#256,d0
	blo	RangeIsOk
	move	#255,d0
	move	#$80+$7F,MouseX
RangeIsOk:
	move	d0,MEnd
	move	d0,d1
	move	Mstart,d1
	sub	d1,d0
	bpl	MrangeLenP
	move	Mend,d1		; d1=Start Show Range
	neg	d0		; d0=Len Range
MrangeLenP:
	move	d1,d2
	move	d2,d3
	and.l	#7,d2	; Decalage
	lsr	#3,d3
	ext.l	d3	; Offset

	lea	Menu+320+80,a0
	add.l	d3,a0
	move.b	#%10000000,d3
	lsr.b	d2,d3

	moveq	#32-1,d4
MakeRange:
	or.b	d3,(a0)
	lea	160(a0),a0	; Ligne suivante
	dbf	d4,MakeRange
	addq.l	#1,d1		; X+1
	dbf	d0,MrangeLenP

	btst	#6,$bfe001
	beq	MS_Range_Loop

	move	Mend,d0
	sub	Mstart,d0
	bpl	RangePriOk
	move	Mstart,d0
	move	Mend,Mstart
	move	d0,Mend
RangePriOk:

	bra	MS_EndMain

Mstart:	dc.w	0		; X debut
Mend:	dc.w	0		; X fin

MS_PasRANGE:
	cmp	#$29+9,d1
	bhs	MS_PasL1

	cmp	#$108,d0
	blo	MS_PasChercher
	cmp	#$128,d0
	bhs	MS_PasChercher
;======================================== // Sound Cherche
	moveq	#24,d2
	moveq	#36,d3
	moveq	#8,d4
	moveq	#34,d5
	moveq	#0,d6
	bsr	CopyGraph3

	move.l	CurrentSound,a0
	addq.l	#4,a0
MS_SoundSearch:
	cmp.l	#'FORM',(a0)
	beq	MS_SoundF1
	addq.l	#2,a0
	cmp.l	#$200000,a0
	blo	MS_SoundSearch
	clr.l	CurrentSound
	bra	MS_SoundChercheWait
MS_SoundF1:
	cmp.l	#'8SVX',8(a0)
	beq	MS_SoundF2
	add.l	#2,a0
	bra	MS_SoundSearch
MS_SoundF2:
	cmp.l	#'VHDR',12(a0)
	beq	MS_SoundF3
	add.l	#2,a0
	bra	MS_SoundSearch
MS_SoundF3:
	cmp.l	#HeaderSonIFF,a0	; Pas nous-meme !!!
	bne	MS_SoundF4
	add.l	#2,a0
	bra	MS_SoundSearch
MS_SoundF4:
	move.l	a0,CurrentSound

	lea	16(a0),a0	; Sur Hunk1
	move.l	4(a0),HSOR	; Offset Repeat
	move.l	8(a0),HSLR	; Lenght Repeat
NextFonc:
	move.l	(a0)+,d0
	add.l	d0,a0		; Nouvelle Fonc
	cmp.l	#'BODY',(a0)+
	bne	NextFonc
	move.l	(a0)+,HSLB

	move.l	a0,d0
	move.l	d0,SoundStart
	add.l	HSLB,d0
	move.l	d0,SoundEnd

	tst.l	HSLR
	bne	MS_YesRepeat
	move.l	#NULL,SoundReStart
	move	#2,SoundLoop
	bra	MS_YNrepeat
MS_YesRepeat:
	move.l	SoundStart,d0
	add.l	HSOR,d0
	move.l	d0,SoundReStart
	move.l	HSLR,d0
	lsr.l	#1,d0
	move	d0,SoundLoop
MS_YNrepeat:
	bsr	CopyCourbe
	bsr	CopySoundStart
	bsr	CopySoundLen
	bsr	CopySoundLoop


MS_SoundChercheWait:
	bsr	WaitVBL
	btst	#6,$bfe001
	beq	MS_SoundChercheWait

	moveq	#8,d2
	moveq	#9,d3
	moveq	#8,d4
	moveq	#34,d5
	moveq	#0,d6
	bsr	CopyGraph3

	bra	MS_EndMain

CurrentSound:	dc.l	0


MS_PasChercher:
	cmp	#$150,d0
	blo	MS_PasOpL1
	cmp	#$170,d0
	bhs	MS_PasQuitter
;======================================== // Sound QUIT
	moveq	#72,d2
	moveq	#36,d3
	moveq	#8,d4
	moveq	#52,d5
	moveq	#0,d6
	bsr	CopyGraph3

MS_WaitQuit:
	bsr	WaitVBL
	btst	#6,$bfe001
	beq	MS_WaitQuit

	bra	MS_QUITTER
MS_PasQuitter:
	cmp	#$190,d0
	bhs	MS_EndMain
;======================================== // Sound OPTIMIZE
	moveq	#32,d2
	moveq	#36,d3
	moveq	#8,d4
	moveq	#60,d5
	moveq	#0,d6
	bsr	CopyGraph3

	move.l	SoundStart,a0
	tst.b	(a0)
	bne	MS_FoundStart
MS_ChercheStart:
	tst.b	(a0)+
	beq	MS_ChercheStart
MS_FoundStart:
	move.l	a0,d0
	and.l	#-2,d0
	move.l	d0,SoundStart

	move.l	SoundEnd,a0
	tst.b	-1(a0)
	bne	MS_FoundEnd
MS_ChercheEnd:
	tst.b	-(a0)
	beq	MS_ChercheEnd
	addq.l	#1,a0
MS_FoundEnd:
	move.l	a0,d0
	and.l	#-2,d0
	move.l	d0,SoundEnd

	bsr	CopyCourbe
	bsr	CopySoundStart
	bsr	CopySoundLen
	bsr	CopySoundLoop

MS_WaitOpti:
	bsr	WaitVBL
	btst	#6,$bfe001
	beq	MS_WaitOpti

	moveq	#60,d2
	moveq	#108,d3
	moveq	#8,d4
	moveq	#60,d5
	moveq	#0,d6
	bsr	CopyGraph3

	bra	MS_EndMain
MS_PasOpL1:
	cmp	#$128,d0
	blo	MS_PasL1
;======================================= // AutoLoop
	move	Mend,d0
	sub	Mstart,d0
	beq	MS_EndMain

	moveq	#20,d2
	moveq	#63,d3
	moveq	#10,d4
	moveq	#42,d5
	moveq	#0,d6
	bsr	CopyGraph3

	clr.w	ALmaxRep

	move.l	SoundEnd,d0
	sub.l	SoundStart,d0	; Longueur
	lsr.l	#8,d0		; /256 (Longueur par pixel)

	moveq	#0,d1
	move	Mstart,d1
	mulu	d0,d1
	move.l	d1,ALstart
	moveq	#0,d1
	move	Mend,d1
	mulu	d0,d1
	move.l	d1,ALend
	move.l	ALstart,d0
	cmp.l	d0,d1
	bhs	ALpasSwap
	move.l	d0,ALend
	move.l	d1,ALstart
	exg.l	d0,d1
ALpasSwap:
	add.l	SoundStart,d0
	add.l	SoundStart,d1
	move.l	d0,ALstart
	move.l	d1,ALend

	move.l	ALend,d0
	sub.l	ALstart,d0
	cmp	#256,d0
	bhs	ALsuivant
	move.l	ALstart,d0
	add.l	#256,d0
	move.l	d0,ALend

ALsuivant:
	move.l	ALstart,a0
	move.b	(a0),d0		; 1 octet a chercher
	addq.l	#2,a0		; Adresse Paire !!!
	move.l	a0,a1
ALagain:
	move.b	(a1),d1
	addq.l	#2,a1
	cmp.b	d0,d1
	beq	PremOctetFound
	cmp.l	ALend,a1
	blo	ALagain

	addq.l	#1,ALstart
	move.l	ALstart,a0
	cmp.l	ALend,a0
	blo	ALsuivant
	bra	AL_Finished

PremOctetFound:

	movem.l	a0-a1,-(sp)

	moveq	#0,d2	; Longueur ok=0+1
CalcRep:addq	#1,d2
	move.b	(a0)+,d3
	cmp.b	(a1)+,d3
	beq	CalcRep

	subq	#1,d2
	cmp	ALmaxRep,d2
	blo	CestPasLeMax

	movem.l	(sp)+,a0-a1

	moveq	#0,d5
	move	ALmaxRep,d5
	add.l	a0,d5
	cmp.l	a1,d5		; Si Start+Len>End = Pas BON
	bhs	PasBON

	move.l	a1,d5
	sub.l	a0,d5
	cmp.l	#60,d5		; Pas de loop <60
	bls	PasBON

	move	d2,ALmaxRep
	move.l	a0,ALfoundStart
	move.l	a1,ALfoundEnd
	bra	ALagain		; Continue quand meme pour le meme octet

CestPasLeMax:
	movem.l	(sp)+,a0-a1
PasBon:	move.l	ALstart,a0
	addq.l	#1,a0		; Octet de debut suivant...
	move.l	a0,ALstart
	cmp.l	ALend,a0	; Jusque la fin...
	blo	ALsuivant

AL_Finished:
	move.l	ALfoundEnd,d0
	sub.l	ALfoundStart,d0
	lsr.l	#1,d0
	move	d0,SoundLoop
	move.l	ALfoundStart,SoundReStart
	move.l	ALfoundEnd,SoundEnd

	clr	Mstart		; Clear Range
	clr	Mend

	bsr	CopyCourbe
	bsr	CopySoundStart
	bsr	CopySoundLen
	bsr	CopySoundLoop
AL_Wait:
	bsr	WaitVBL
	btst	#6,$bfe001
	beq	AL_Wait

	moveq	#42,d2
	moveq	#36*3,d3
	moveq	#10,d4
	moveq	#42,d5
	moveq	#0,d6
	bsr	CopyGraph3
	bra	MS_EndMain

ALstart:	dc.l	0
ALend:		dc.l	0

ALmaxRep:	dc.w	0	; Octets repetes
ALfoundStart:	dc.l	0
ALfoundEnd:	dc.l	0

MS_PasL1:
	cmp	#$29+9+9,d1
	bhs	MS_PasL2

	cmp	#$118,d0
	blo	MS_PasNewStart
	cmp	#$29+9,d1
	blo	MS_PasNewStart
	cmp	#$128,d0
	bhs	MS_PasNewStart

	cmp	#$120,d0
	bhs	MS_NewStartMoins
;======================================== // SOUND START +
	moveq	#20,d2
	moveq	#36,d3
	moveq	#2,d4
	moveq	#38,d5
	moveq	#9,d6
	bsr	CopyGraph3
	clr	Delay

SoundStartRePlus:
	moveq	#2,d0
	add.l	d0,SoundStart
	add.l	d0,SoundEnd
	bsr	CopyCourbe
	bsr	CopySoundStart
	bsr	CopySoundLen
	bsr	CopySoundLoop

SoundStartWait:
	bsr	WaitVBL
	addq.w	#1,Delay
	cmp	#25,Delay
	blo	SSWdelay
	move	#25,Delay
	btst	#6,$bfe001
	beq	SoundStartRePlus
SSWdelay:
	btst	#6,$bfe001
	beq	SoundStartWait

	moveq	#22,d2
	moveq	#0,d3
	moveq	#2,d4
	moveq	#38,d5
	moveq	#9,d6
	bsr	CopyGraph3
	bra	MS_EndMain

;======================================== // SOUND START -
MS_NewStartMoins:
	moveq	#22,d2
	moveq	#36,d3
	moveq	#2,d4
	moveq	#40,d5
	moveq	#9,d6
	bsr	CopyGraph3
	clr	Delay

SoundStartReMoins:
	moveq	#-2,d0
	add.l	d0,SoundStart
	add.l	d0,SoundEnd
	bsr	CopyCourbe
	bsr	CopySoundStart
	bsr	CopySoundLen
	bsr	CopySoundLoop

SoundStartWait2:
	bsr	WaitVBL
	addq.w	#1,Delay
	cmp	#25,Delay
	blo	SSWdelay2
	move	#25,Delay
	btst	#6,$bfe001
	beq	SoundStartReMoins
SSWdelay2:
	btst	#6,$bfe001
	beq	SoundStartWait2

	moveq	#24,d2
	moveq	#0,d3
	moveq	#2,d4
	moveq	#40,d5
	moveq	#9,d6
	bsr	CopyGraph3
	bra	MS_EndMain

MS_PasNewStart:

	cmp	#$190,d0
	bhs	MS_CURSEUR
	cmp	#$170,d0
	blo	MS_PasPlay
;======================================== // SOUND PLAY
	moveq	#32,d2
	moveq	#45,d3
	moveq	#8,d4
	moveq	#60,d5
	moveq	#9,d6
	bsr	CopyGraph3

	bsr	WaitVBL
	move	#$000F,$dff096		; Coupe voies
	bsr	WaitVBL

	lea	$DFF0A0,a0
	move.l	SoundStart,d0
	move.l	d0,(a0)			; Adr
	sub.l	SoundEnd,d0
	neg.l	d0
	lsr.l	#1,d0
	move	d0,4(a0)		; Len (Words)
	move	SoundPeriod,6(a0)	; Per
	move	#64,8(a0)		; Vol
	move	#$8001,$dff096		; GO !!!

	bsr	WaitVBL
	move.l	SoundRestart,(a0)		; No Loop
	move	SoundLoop,4(a0)
MS_PlayWait:
	bsr	WaitVBL
	btst	#6,$bfe001
	beq	MS_PlayWait

	moveq	#60,d2
	moveq	#117,d3
	moveq	#8,d4
	moveq	#60,d5
	moveq	#9,d6
	bsr	CopyGraph3
	bra	MS_EndMain

;======================================== // SOUND PERIOD
MS_Curseur:
	move	#-2,MouseSTOP	; Y bloque

	lea	Menu+[160*9]+68,a0
	moveq	#18-1,d0
	moveq	#0,d1
MS_DelCurs:
	move.l	d1,(a0)+
	move.l	d1,(a0)+
	move.l	d1,(a0)+
	lea	68(a0),a0
	dbf	d0,MS_DelCurs

	move	MouseX,d0
	sub	#$194,d0
	bpl	MS_Cok
	moveq	#0,d0
	move	#$194,MouseX
MS_Cok:	cmp	#40,d0
	bls	MS_CursOk
	moveq	#40,d0
	move	#$194+40,MouseX
MS_CursOk:
	lsl	#4,d0	; 0-255
	add	#150,d0	; 200-455
	move	d0,SoundPeriod

	lea	MenuS+[160*45]+22,a0
	lea	Menu+[160*9]+68,a1
	moveq	#0,d0
	move	MouseX,d0
	sub	#$194,d0
	lsl	#1,d0		; *2 (HiRes)
	move	d0,d1
	and.l	#$7,d1
	lsr	#3,d0
	add.l	d0,a1

	moveq	#16-1,d4
MS_CopyCurs:
	move.l	(a0),d2
	and.l	#$FFFF0000,d2
	lsr.l	d1,d2
	or.l	d2,(a1)
	lea	80(a0),a0
	lea	80(a1),a1
	dbf	d4,MS_CopyCurs

	bsr	WaitVBL
	move	SoundPeriod,$DFF0A6
	btst	#6,$bfe001
	beq	MS_Curseur

	bra	MS_EndMain


MS_PasPlay:
	cmp	#$150,d0
	blo	MS_PasZoomRange
;======================================= // Zoom RANGE
	moveq	#0,d0
	move	Mend,d0
	sub	Mstart,d0	; d0=Delta Mouse
	beq	MS_EndMain

	moveq	#24,d2
	moveq	#45,d3
	moveq	#8,d4
	moveq	#52,d5
	moveq	#9,d6
	bsr	CopyGraph3

	move.l	SoundEnd,d1
	sub.l	SoundStart,d1	; d1=Taille Mem ALL
	lsr.l	#8,d1		; d1=Mem pour 1 pixel

	moveq	#0,d0
	move	Mstart,d0
	mulu	d1,d0
	add.l	SoundStart,d0	; d0=NewSoundStart

	moveq	#0,d2
	move	Mend,d2
	mulu	d1,d2
	add.l	SoundStart,d2	; d2=NewSoundEnd

	move.l	d2,d3
	sub.l	d0,d3
	cmp.l	#256,d3		; Pas de longueur < 128 !
	bhs	MS_SlenOk
	move.l	d0,d2
	add.l	#256,d2
MS_SlenOk:
	move.l	d0,SoundStart
	move.l	d2,SoundEnd
	move.l	#NULL,SoundReStart
	move.w	#1,SoundLoop
	clr	Mstart
	clr	Mend
	bsr	CopyCourbe
	bsr	CopySoundStart
	bsr	CopySoundLen
	bsr	CopySoundLoop

MS_ZoomWait:
	bsr	WaitVBL
	btst	#6,$bfe001
	beq	MS_ZoomWait

	moveq	#52,d2
	moveq	#117,d3
	moveq	#8,d4
	moveq	#52,d5
	moveq	#9,d6
	bsr	CopyGraph3
	bra	MS_EndMain

MS_PasZoomRange:

MS_PasL2:
	cmp	#$118,d0
	blo	MS_PasLoopPlus
	cmp	#$128,d0
	bhs	MS_PasLoopPlus
	cmp	#$29+9+9+9,d1
	bhs	MS_PasLoopPlus
	cmp	#$29+9+9,d1
	blo	MS_PasLoopPlus
	cmp	#$120,d0
	bhs	MS_LoopMoins

;======================================= // Loop +
MS_LoopPlus:
	moveq	#20,d2
	moveq	#36,d3
	moveq	#2,d4
	moveq	#38,d5
	moveq	#18,d6
	bsr	CopyGraph3

	clr	Delay
MS_LoopPturbo:
	addq.l	#2,SoundEnd
	bsr	CopyCourbe
	bsr	CopySoundStart
	bsr	CopySoundLen
	bsr	CopySoundLoop

MS_LoopPWait:
	bsr	WaitVBL
	addq	#1,Delay
	cmp	#25,Delay
	blo	MS_LWD
	move	#25,Delay
	btst	#6,$bfe001
	beq	MS_LoopPturbo
MS_LWD:	btst	#6,$bfe001
	beq	MS_LoopPWait


	moveq	#22,d2
	moveq	#0,d3
	moveq	#2,d4
	moveq	#38,d5
	moveq	#18,d6
	bsr	CopyGraph3
	bra	MS_EndMain

;======================================= // Loop -
MS_LoopMoins:
	moveq	#22,d2
	moveq	#36,d3
	moveq	#2,d4
	moveq	#40,d5
	moveq	#18,d6
	bsr	CopyGraph3

	clr	Delay
MS_LoopMturbo:
	subq.l	#2,SoundEnd
	bsr	CopyCourbe
	bsr	CopySoundStart
	bsr	CopySoundLen
	bsr	CopySoundLoop

MS_LoopMWait:
	bsr	WaitVBL
	addq	#1,Delay
	cmp	#25,Delay
	blo	MS_LWE
	move	#25,Delay
	btst	#6,$bfe001
	beq	MS_LoopMturbo
MS_LWE:	btst	#6,$bfe001
	beq	MS_LoopMWait

	moveq	#24,d2
	moveq	#0,d3
	moveq	#2,d4
	moveq	#40,d5
	moveq	#18,d6
	bsr	CopyGraph3

	bra	MS_EndMain

MS_PasLoopPlus:

	cmp	#$170,d0
	bhs	MS_PasZoomPlus
	cmp	#$150,d0
	blo	MS_PasZoomPlus
	cmp	#$160,d0
	bhs	ZoomMoins
;======================================= // Zoom +
	clr	Mstart
	clr	Mend

	move.l	SoundEnd,d0	; Redond expres...
	sub.l	SoundStart,d0
	cmp.l	#512,d0
	bls	ZoomPexit

	moveq	#30,d2
	moveq	#54,d3
	moveq	#4,d4
	moveq	#52,d5
	moveq	#18,d6
	bsr	CopyGraph3
	moveq	#30,d2
	moveq	#63,d3
	moveq	#4,d4
	moveq	#52,d5
	moveq	#27,d6
	bsr	CopyGraph3

ZoomPlusTurbo:
	move.l	SoundEnd,d0
	sub.l	SoundStart,d0
	cmp.l	#512,d0
	bls	ZoomPexit
	lsr.l	#8,d0
	add.l	d0,SoundStart
	sub.l	d0,SoundEnd

	move.l	SoundEnd,d0
	sub.l	SoundStart,d0
	cmp.l	#256,d0
	bhs	ZoomPLenOk

	move.l	SoundStart,d0
	add.l	#256,d0
	move.l	d0,SoundEnd

ZoomPLenOk:
	bsr	CopyCourbe
	bsr	CopySoundStart
	bsr	CopySoundLen
	bsr	CopySoundLoop

	btst	#6,$bfe001
	beq	ZoomPlusTurbo

ZoomPexit:
	moveq	#52,d2
	moveq	#126,d3
	moveq	#4,d4
	moveq	#52,d5
	moveq	#18,d6
	bsr	CopyGraph3
	moveq	#52,d2
	move.l	#135,d3
	moveq	#4,d4
	moveq	#52,d5
	moveq	#27,d6
	bsr	CopyGraph3

	bra	MS_EndMain
;======================================= // Zoom -
ZoomMoins:
	moveq	#34,d2
	moveq	#54,d3
	moveq	#4,d4
	moveq	#56,d5
	moveq	#18,d6
	bsr	CopyGraph3
	moveq	#34,d2
	moveq	#63,d3
	moveq	#4,d4
	moveq	#56,d5
	moveq	#27,d6
	bsr	CopyGraph3

ZoomMoinsTurbo:
	clr	Mstart
	clr	Mend
	move.l	SoundEnd,d0
	sub.l	SoundStart,d0
	lsr.l	#8,d0
	sub.l	d0,SoundStart
	add.l	d0,SoundEnd
	bsr	CopyCourbe
	bsr	CopySoundStart
	bsr	CopySoundLen
	bsr	CopySoundLoop

	btst	#6,$bfe001
	beq	ZoomMoinsTurbo

	moveq	#56,d2
	moveq	#126,d3
	moveq	#4,d4
	moveq	#56,d5
	moveq	#18,d6
	bsr	CopyGraph3
	moveq	#56,d2
	move.l	#135,d3
	moveq	#4,d4
	moveq	#56,d5
	moveq	#27,d6
	bsr	CopyGraph3

	bra	MS_EndMain


MS_PasZoomPlus:
	cmp	#$29+9+9+9,d1
	bhs	MS_PasL3

	cmp	#$190,d0
	bhs	MS_PasSTOP
	cmp	#$170,d0
	blo	MS_PasSTOP
;======================================== // SOUND STOP
	moveq	#40,d2
	moveq	#36,d3
	moveq	#8,d4
	moveq	#60,d5
	moveq	#18,d6
	bsr	CopyGraph3

	bsr	WaitVBL
	lea	$DFF0A0,a0
	move.l	#NULL,(a0)
	move	#1,4(a0)
	move	#$F,$dff096

SoundStopWait:
	bsr	WaitVBL
	btst	#6,$bfe001
	beq	SoundStopWait

	moveq	#60,d2
	moveq	#126,d3
	moveq	#8,d4
	moveq	#60,d5
	moveq	#18,d6
	bsr	CopyGraph3

	bra	MS_EndMain

MS_PasSTOP:

MS_PasL3:

MS_EndMain:
	btst	#10,$dff016
	bne	NoScroll

	move	MouseX,d0
	sub	#$80,d0
	cmp	#$100,d0
	bhs	NoScroll

	move.l	SoundEnd,d1
	sub.l	SoundStart,d1
	lsr.l	#7,d1		; Mem / Pixel

	cmp	#$40,d0
	bhs	ScrollRight
ScrollLeft:
	sub.l	d1,SoundStart
	sub.l	d1,SoundEnd
	bsr	CopyCourbe
	bra	NoScroll

ScrollRight:
	add.l	d1,SoundStart
	add.l	d1,SoundEnd
	bsr	CopyCourbe
	bra	NoScroll

NoScroll:
	clr.w	MouseSTOP
	bra	MS_Main

MS_QUITTER:
	lea	Menus,a0
	lea	Menu,a1
	move	#([640*36*2]/32)-1,d0
MS_RecopyMenu:
	move.l	(a0)+,(a1)+
	dbf	d0,MS_ReCopyMenu

	bsr	CopyBPLCON
	bsr	CopyBPLS
	bsr	CopyModulo
	bsr	CopyTailleX
	bra	FinMouse

PasOptions:
	cmp	#$190,d0
	blo	PasModXYMod

	cmp	#$111-223,d1
	bhs	PasChMode
;================================ // Toggle Mode
	moveq	#20,d2
	moveq	#54,d3
	moveq	#4,d4
	moveq	#68,d5
	moveq	#0,d6
	bsr	CopyGraph3

	move.l	PTmodes(pc),a0
	moveq	#0,d0
	move	(a0)+,d0		; Offset
	lea	GFXMode,a1
	add.l	d0,a1
	lea	Menu+[160*2]+60,a2
	moveq	#5-1,d1
CopyGFXMode:
	move.l	(a1)+,(a2)
	move.l	(a1)+,4(a2)
	lea	160(a2),a2
	dbf	d1,CopyGFXMode

	move	(a0)+,AddSizeX

	move	BplCon+2,d0
	and	#%0111000000010000,d0
	or	(a0)+,d0
	move	d0,BplCON+2

	move	(a0)+,d0		; $92,X1
	move	d0,Copper2+10
	move	(a0)+,d0		; $94,X2
	move	d0,Copper2+14

	move	(a0)+,C1e4+2
	move	(a0)+,C1fc+2

	move.l	a0,PTmodes
	cmp	#-1,(a0)
	bne	WaitMode

	lea	TableModes(pc),a0
	move.l	a0,PTmodes
	bsr	CopyTailleX
WaitMode:
	bsr	WaitVBL
	btst	#6,$bfe001
	beq	WaitMode

	moveq	#68,d2
	moveq	#0,d3
	moveq	#4,d4
	moveq	#68,d5
	moveq	#0,d6
	bsr	CopyGraph3

	bra	FinMouse

PasChMode:
	cmp	#$118-223,d1
	bhs	PasTailleX
;================================ Taille X
	cmp	#$198,d0
	bhs	TailleXMoins
;================================ // Taille X Plus
	move	TailleX,d0
	cmp	#1280,d0
	bhs	FinMouse

	addq	#8,d0
	move	d0,TailleX

	moveq	#20,d2
	moveq	#36,d3
	moveq	#2,d4
	moveq	#68,d5
	moveq	#9,d6
	bsr	CopyGraph3

	bra	TailleXPM
;================================ // Taille X Moins
TailleXMoins:
	move	TailleX,d0
	cmp	#8,d0
	bls	FinMouse
	subq	#8,d0
	move	d0,TailleX

TailleXPM:
	bsr	CopyTailleX
	bsr	CopyModulo
CopyTX:	bsr	WaitVBL
	btst	#6,$bfe001
	beq	CopyTX

	moveq	#22,d2
	moveq	#0,d3
	moveq	#4,d4
	moveq	#68,d5
	moveq	#9,d6
	bsr	CopyGraph3

	bra	FinMouse

PasTailleX:
	move	MouseX,d0
	move	MouseY,d1

	cmp	#$123-223,d1
	bhs	PasTailleY
;================================ Taille Y
	cmp	#$198,d0
	bhs	TailleYmoins
;================================ // Taille Y Plus
	moveq	#20,d2
	moveq	#36,d3
	moveq	#2,d4
	moveq	#68,d5
	moveq	#18,d6
	bsr	CopyGraph3
	bra	FinTailleY
;================================ // Taille Y Moins
TailleYmoins:
	moveq	#22,d2
	moveq	#36,d3
	moveq	#2,d4
	moveq	#70,d5
	moveq	#18,d6
	bsr	CopyGraph3

FinTailleY:
	bsr	WaitVBL
	btst	#6,$bfe001
	beq	PasTailleX

	moveq	#22,d2
	moveq	#0,d3
	moveq	#4,d4
	moveq	#68,d5
	moveq	#18,d6
	bsr	CopyGraph3

	bra	FinMouse

PasTailleY:
;================================ Modulos
	clr.w	Delay
	bra	TurboModulo
NoTurboModulo:
	bsr	WaitVBL
	addq.w	#1,Delay
	cmp.w	#25,Delay
	blo	ModPM
	move	#25,Delay
TurboModulo:
	cmp	#$198,d0
	bhs	ModuloMoins
;================================ // Modulo +
	moveq	#20,d2
	moveq	#36,d3
	moveq	#2,d4
	moveq	#68,d5
	moveq	#27,d6
	bsr	CopyGraph3

	move	Mod+2,d2
	addq.w	#2,d2
	bra	ModPlusMoins
;================================ // Modulo -
ModuloMoins:
	moveq	#22,d2
	moveq	#36,d3
	moveq	#2,d4
	moveq	#70,d5
	moveq	#27,d6
	bsr	CopyGraph3

	move	Mod+2,d2
	subq.w	#2,d2
ModPlusMoins:
	and.w	#-2,d2
	move	d2,Mod+2
	move	d2,Mod+2+4
	move.l	d0,-(sp)
	bsr	CopyModulo
	move.l	(sp)+,d0
ModPM:	bsr	WaitVBL
	btst	#6,$bfe001
	beq	NoTurboModulo

	moveq	#22,d2
	moveq	#0,d3
	moveq	#4,d4
	moveq	#68,d5
	moveq	#27,d6
	bsr	CopyGraph3

	bra	FinMouse

PasModXYMod:
	bra	FinMouse

FinMouse:
	move.b	$bfec01,d0
	cmp.b	#$DF,d0
	beq	Real

	move.b	$bfec01,d0
	cmp.b	#$DD,d0
	beq	AffCop2

	bsr	Calcul_AddScroll


;	btst	#6,BplCON+3	; SuperHires (1280)
;	bne	SuperHi
;	btst	#7,BplCON+2	; HiRes (640)
;	bne	HiRes
;	move.l	#40,d0
;	bra	AllRes
;HiRes:	move.l	#80,d0
;	bra	AllRes
;SuperHi:move.l	#160,d0
;AllRes:	moveq	#0,d1
;	move	Mod+2,d1
;	ext.L	d1
;	add.l	d1,d0
;	move.l	d0,AddScroll

	bra	Souris

AffCop2:
	move.l	#Palette,$dff080
	clr	$dff088
	bsr	WaitVBL
	clr.b	$bfec01
	bra	RReal

Real:	tst.l	Current
	beq	FinReal
	move.l	Current,$dff080
	clr	$dff088

	bsr	WaitVBL
	clr.b	$bfec01

RReal:	bsr	WaitVBL
	move.b	$bfec01,d0
	cmp.b	#$75,d0
	beq	FinReal
	bra	RReal

FinReal:move.l	#CopperRipper,$dff080
	clr	$dff088
	bsr	WaitVBL
	clr.b	$bfec01
	bra	FinMouse

QuitterMenu:
	move.l	GfxBase(pc),a0
	move.l	38(a0),$dff080
	clr	$dff088
	bra	EXIT
;====================================================================
;ActiveReal:
;	move.l	Current,d0
;	beq	PreMain
;	move.l	d0,$dff080
;	clr	$dff088
;ActiveWait:
;	btst	#6,$bfe001
;	bne	ActiveWait
;	btst	#10,$dff016
;	bne	ActiveWait
;	move.l	GfxBase(pc),a0
;	move.l	38(a0),$dff080
;	clr	$dff088
;	bra	PreMain
;====================================================================
R1FC:	dc.w	0

SearchMain:			; SEARCH / CONTINUE
	lea	BeginDelCopper+2,a0
	move.l	#[(ToDelCopper-BeginDelCopper)/4]-1,d0
	moveq	#0,d1
ClearSearch:
	move	d1,(a0)
	addq.l	#4,a0
	dbf	d0,ClearSearch

Search:	move.l	CurrentFin,a0
Sea:	cmp.l	#-2,(a0)
	beq	Found
	addq.l	#2,a0
	move	$dff006,$dff180
	cmp.l	#$200000,a0
	bhs	Nothing
	bra	Sea

Found:	addq.l	#4,a0
	move.l	a0,CurrentFin
Fou:	subq.l	#4,a0
	move	(a0),d0
	btst	#0,d0
	bne	DebutCop		; Move PAIR
	tst	d0
	bmi	DebutCop		; Move POSITIF
	cmp	#$200,d0
	bhs	DebutCop		; Move < $200
	cmp	#$08E,d0
	blo	DebutCop		; Move >= $8E
	cmp	#$01FC,d0
	bne	Fou
	move	2(a0),R1FC
	bra	Fou
DebutCop:
	cmp	#$FFFE,2(a0)		; C'etait un Wait !!!
	beq	Fou
	cmp.l	#-1,(a0)		; $FFFFFFFF <=> Nop Copper
	beq	Fou

	addq.l	#4,a0
	move.l	a0,Current

	move.l	CurrentFin,a1
	lea	BplCON,a2

Remp:	move.l	Current,a0
	move	(a2),d0
	addq.l	#4,a2
Rempli:	cmp	(a0),d0
	beq	MetLe
	addq.l	#2,a0
	cmp.l	a1,a0
	blo	Rempli
	cmp.l	#FinCopper,a2
	bhs	FinRempli
	bra	Remp
MetLe:	move	2(a0),-2(a2)
	cmp.l	#FinCopper,a2
	bhs	FinRempli
	bra	Remp
FinRempli:
	tst	BplCON+2	; Au moins $DFF100 !!!
	BEQ	SEARCHMAIN

	lea	Bpls,a0		; Au - 1 adresse Bpl !!!
	move	2(a0),d0
	swap	d0
	move	6(a0),d0	; AdrBpl
	tst.l	d0
	BEQ	SEARCHMAIN

;	cmp.l	#CopperRipper,Current
;	beq	SEARCHMAIN

	move	R1FC,d0
	and	#%11,d0
	beq	ModulosNormaux
	lsl	#1,d0
	lea	TableModulos,a0
	move	(a0,d0.w),d0
	add	d0,Mod+2
	add	d0,Mod+6
ModulosNormaux:
	move	#2,AddSizeX

	move	BplCON+2,d0
	and	#%1111111001010001,d0
	move	d0,BplCON+2

	move	BPLCON+2,d0
	btst	#6,d0
	bne	No_Hires

	btst	#15,d0
	bne	No_LowRes

	move	#$38,Copper2+10		; LOWRES 320
	move	#$d0,Copper2+14
	lea	GfxMode,a0
	move	#2,AddSizeX
	move	#320,TailleX
	bra	Resolution
No_LowRes:
	move	#$3c,Copper2+10		; HIRES 640
	move	#$d4,Copper2+14
	lea	GfxMode+[40*3],a0
	move	#4,AddSizeX
	move	#640,TailleX
	bra	Resolution
No_Hires:
	sub.w	#8,Mod+2
	sub.w	#8,Mod+6

	lea	Bpls+6,a0
	moveq	#8-1,d0
Center:	move	-4(a0),d1
	swap	d1
	move	(a0),d1
	subq.l	#6,d1
	move	d1,(a0)
	swap	d1
	move	d1,-4(a0)
	addq.l	#8,a0
	dbf	d0,Center

	move	#8,AddSizeX

	move	#$38,Copper2+10		; S-HIRES 1280
	move	#$d8,Copper2+14
	move	#1280,TailleX
	lea	GfxMode+[40*6],a0
Resolution:
	lea	Menu+380,a1
	moveq	#5-1,d0
CopyNewGfxMode:
	move.l	(a0)+,(a1)
	move.l	(a0)+,4(a1)
	lea	160(a1),a1
	dbf	d0,CopyNewGfxMode

	move	#256,TailleY
	bsr	CopyBPLCON
	bsr	CopyBPLS
	bsr	CopyModulo
	bsr	CopyTailleX
	rts

Nothing:clr.l	Current
	clr.l	CurrentFin
	bsr	CopyBPLCON
	bsr	CopyBPLS
	bsr	CopyModulo
	bsr	CopyTailleX
	rts

TableModulos:
	dc.w	0
	dc.w	4
	dc.w	4
	dc.w	8
;====================================================================
CopyCopperColors:
	move.l	Current,a0

	moveq	#0,d7		; No Palette
	moveq	#0,d6		; Poids fort
ReInitPAL:
	move	(a0),d0
	cmp	#$106,d0
	bne	MC_PasControl

	move	2(a0),d0
	btst	#9,d0
	beq	PoidsFORT
	move.l	#132,d6			; !!! DECALAGE
	bra	PoidsFaible
PoidsFORT:
	moveq	#0,d6
PoidsFaible:
	and	#%1110000000000000,d0	; Pal + Fort/faible
	rol	#3,d0
	move	d0,d7
	bra	MC_NotColor

MC_PasControl:
	cmp	#$180,d0
	blo	MC_NotColor
	cmp	#$1BE,d0
	bhi	MC_NotColor

	Lea	Palette+6,a1
	add.l	d6,a1		; Decale si faible
	moveq	#0,d5
	move	d7,d5
	mulu	#132*2,d5
	add.l	d5,a1		; Et bonne palette

	sub	#$180,d0
	lsl	#1,d0
	ext.l	d0
	add.l	d0,a1
	move	2(a0),(a1)		; Put Color (Pal00)

MC_NotColor:
	addq.l	#4,a0
	cmp.l	CurrentFin,a0
	blo	ReInitPAL
	rts
;====================================================================
CopySoundStart:
	move.l	SoundStart,d3

	moveq	#50,d1	; X1
	moveq	#11,d2	; Y1

	moveq	#8-1,d4

CopySS:	move.l	d3,d0
	and.l	#$F,d0
	lsr.l	#4,d3
	movem.l	d0-d4,-(sp)
	bsr	CopyChiffre
	movem.l	(sp)+,d0-d4
	subq.l	#1,d1		; X-1
	dbf	d4,CopySS
	rts
;====================================================================
CopySoundLen:
	move.l	SoundEnd,d3
	sub.l	SoundStart,d3

	moveq	#50,d1	; X1
	moveq	#20,d2	; Y1

	moveq	#8-1,d4

CopySL:	move.l	d3,d0
	and.l	#$F,d0
	lsr.l	#4,d3
	movem.l	d0-d4,-(sp)
	bsr	CopyChiffre
	movem.l	(sp)+,d0-d4
	subq.l	#1,d1		; X-1
	dbf	d4,CopySL
	rts
;====================================================================
CopySoundLoop:
	moveq	#0,d3
	cmp.l	#NULL,d3
	beq	NoCopyLoop

	move.l	SoundEnd,d3
	sub.l	SoundReStart,d3

NoCopyLoop:
	moveq	#50,d1	; X1
	moveq	#29,d2	; Y1

	moveq	#8-1,d4

CopySLL:
	move.l	d3,d0
	and.l	#$F,d0
	lsr.l	#4,d3
	movem.l	d0-d4,-(sp)
	bsr	CopyChiffre
	movem.l	(sp)+,d0-d4
	subq.l	#1,d1		; X-1
	dbf	d4,CopySLL
	rts
;====================================================================
SoundStart:	dc.l	Son		;$000000
SoundEnd:	dc.l	Finintro	;$200000
SoundRestart:	dc.l	NULL
SoundLoop:	dc.w	2
SoundOld:	dc.l	0
SoundPeriod:	dc.w	300
NULL:		dc.l	0,0

CopyCourbe:
	bsr	WaitVBL

	lea	Menu+160+160,a0
	move	#64-1,d0
	moveq	#0,d1
DelCourbe:
	move.l	d1,(a0)
	move.l	d1,4(a0)
	move.l	d1,8(a0)
	move.l	d1,12(a0)
	move.l	d1,16(a0)
	move.l	d1,20(a0)
	move.l	d1,24(a0)
	move.l	d1,28(a0)
	lea	80(a0),a0
	dbf	d0,DelCourbe

	move.l	#Menu+[160*17],SoundOld

	move.l	SoundEnd,d4
	sub.l	SoundStart,d4
	lsr	#8,d4		; DxMem=Longueur/256

	move.l	SoundStart,a0
	moveq	#1,d7		; X

PasFiniCourbe:
	lea	Menu+160,a1
	moveq	#0,d0
	move.b	(a0),d0
	add.l	d4,a0		; Xmem+DXmem

	move.l	SoundEnd,d4
	sub.l	a0,d4		; Longueur restante Mem

	move.l	#256,d6
	sub.l	d7,d6
	beq	MS_Dernier

	divu	d6,d4
	move.l	d4,d5
	ext.l	d4
	swap	d5		; Reste => d5.W
	move.l	#256,d6
	sub.l	d7,d6		; Pixels restants => d6.L
	lsr.l	#1,d6		; /2
	cmp	d6,d5
	blo	MS_Dernier
	addq.l	#1,d4		; Si reste > Pixels/2 => +1 !

 MS_Dernier:
	add.b	#$80,d0		; 0-255
	lsr.b	#3,d0		; 0-31
	addq.b	#1,d0		; 1-32 (Y ecran)
	mulu	#160,d0
	add.l	d0,a1
	move.l	d7,d6
	lsr	#3,d6
	add.l	d6,a1
	move.l	d7,d6
	and	#$7,d6
	move.b	#%10000000,d5
	lsr.b	d6,d5
	move.l	a1,-(sp)

CS_CopyLine:
	or.b	d5,(a1)
	move.l	SoundOld,d0
	sub.l	a1,d0
	beq	CS_Ok
	bpl	CS_Wait
	neg.l	d0
CS_Wait:cmp.l	#1,d0
	bls	CS_Ok

	cmp.l	SoundOld,a1
	blo	CS_Plus

	lea	-160(a1),a1
	bra	CS_CopyLine
CS_Plus:lea	160(a1),a1
	bra	CS_CopyLine

CS_ok:	move.l	(sp)+,a1
	move.l	a1,SoundOld
	addq.l	#1,d7		; X+1
	cmp	#255,d7
	blo	PasFiniCourbe
	rts

;====================================================================
CopyTailleX:
	moveq	#0,d3
	move	TailleX,d3

	move.l	#66,d1
	move.l	#11,d2
	moveq	#4-1,d4
CopyTailleXXX:
	move.l	d3,d0
	and.l	#%1111,d0
	lsr.l	#4,d3
	movem.l	d0-d4,-(sp)
	bsr	CopyChiffre
	movem.l	(sp)+,d0-d4
	subq.l	#1,d1
	dbf	d4,CopyTailleXXX
	rts
;====================================================================
CopyBPLCON:
	move.w	BPLCON+2,d0
	and	#%0111000000010000,d0
	move	d0,d1
	lsr.b	#1,d0
	lsr	#8,d1
	lsr	#4,d1
	or.b	d1,d0
	and.l	#$F,d0
	move.l	d0,NbBpls
	move.l	#10,d1	; X
	move.l	#29,d2	; Y
	bsr	CopyChiffre
	rts
;====================================================================
CopyInitRGB:
	moveq	#0,d0
	move	MC_C,d0
	move.l	d0,d1
	and	#$1F,d0		; Couleur 0-31
	lsr.l	#5,d1		; Palette 0-7
	lsl	#2,d0
	mulu	#132*2,d1
	lea	Palette,a0
	add.l	d0,a0
	add.l	d1,a0
	move	6(a0),d0	; Poids forts   RGB
	move	132+6(a0),d1	; Poids faibles RGB
	lea	PalPointeur,a0
	move	d0,6(a0)
	move	d1,14(a0)
	move	d0,d2
	move	d1,d3
	and	#$F00,d2
	and	#$F00,d3
	lsr	#4,d2
	lsr	#8,d3
	or	d2,d3
	move	d3,MC_R		; Rouge (0-255)
	move	d0,d2
	move	d1,d3
	and	#$0F0,d2
	and	#$0F0,d3
	lsr	#4,d3
	or	d2,d3
	move	d3,MC_G		; Vert (0-255)
	move	d0,d2
	move	d1,d3
	and	#$00F,d2
	and	#$00F,d3
	lsl	#4,d2
	or	d2,d3
	move	d3,MC_B		; Bleu (0-255)
	rts
;====================================================================
CopyCurseurs:
	lea	DelAdr1,a0
	moveq	#3-1,d1
Del3Curs:
	move.l	(a0)+,a1
	moveq	#16-1,d0
DelCurseurs:
	and.l	#$000000FF,(a1)
	lea	80(a1),a1
	dbf	d0,DelCurseurs
	dbf	d1,Del3Curs

	lea	Menu+[160*9],a1
	lea	MC_R(pc),a2
	lea	DelAdr1(pc),a3
	moveq	#0,d0

	moveq	#3-1,d7
CCC:
	move.l	a1,-(sp)

	move	(a2)+,d0
	lsl	#1,d0	; *2 (HiRes)
	move	d0,d1
	and	#7,d1	; Reste
	lsr	#3,d0	; Add

	add.l	d0,a1
	move.l	a1,(a3)+	; NewDelAdr

	lea	MenuS+[160*45]+20,a0
	moveq	#8-1,d5
CC:	move.l	(a0),d4
	move.l	80(a0),d6
	and.l	#$FFFF0000,d4
	and.l	#$FFFF0000,d6
	lsr.l	d1,d4
	lsr.l	d1,d6
	or.l	d4,(a1)			; !!! Copie WORD adresse impaire...
	or.l	d6,80(a1)
	lea	160(a0),a0
	lea	160(a1),a1
	dbf	d5,CC

	move.l	(sp)+,a1
	lea	160*9(a1),a1
	dbf	d7,CCC

	rts
;====================================================================
CopyROUGE:
	moveq	#0,d3
	move	MC_R,d3		; Composante
	move.l	#77,d1		; X
	moveq	#11,d2		; Y

CopyRGB:moveq	#2-1,d4
CopyRED:move.l	d3,d0
	and.l	#$F,d0
	lsr.l	#4,d3
	movem.l	d0-d4,-(sp)
	bsr	CopyChiffre
	movem.l	(sp)+,d0-d4
	subq.l	#1,d1
	dbf	d4,CopyRED
	rts
;====================================================================
CopyVert:
	moveq	#0,d3
	move	MC_G,d3		; Composante
	move.l	#77,d1		; X
	moveq	#20,d2		; Y
	bra	CopyRGB
;====================================================================
CopyBleu:
	moveq	#0,d3
	move	MC_B,d3		; Composante
	move.l	#77,d1		; X
	moveq	#29,d2		; Y
	bra	CopyRGB
;====================================================================
CopyNoCouleur:
	moveq	#0,d3
	move	MC_C,d3		; Numero de couleur
	move.l	#77,d1		; X
	moveq	#2,d2		; Y

	moveq	#2-1,d4
CopyCol:
	move.l	d3,d0
	and.l	#$F,d0
	lsr.l	#4,d3
	movem.l	d0-d4,-(sp)
	bsr	CopyChiffre
	movem.l	(sp)+,d0-d4
	subq.l	#1,d1
	dbf	d4,CopyCol
	rts
;====================================================================
CopyModulo:
	moveq	#0,d3
	move.w	Mod+2,d3
	move.l	#66,d1
	move.l	#29,d2
	moveq	#4-1,d4
CopyMod:move.l	d3,d0
	and.l	#%1111,d0
	lsr.l	#4,d3
	movem.l	d0-d4,-(sp)
	bsr	CopyChiffre
	movem.l	(sp)+,d0-d4
	subq	#1,d1
	dbf	d4,CopyMod
	rts
;====================================================================
CopyBpls:

	lea	Menu+27+160,a0
	moveq	#34-1,d0
	moveq	#0,d1
DelBpls:move.l	d1,(a0)+
	move.l	d1,(a0)+
	move.l	d1,12(a0)
	move.l	d1,16(a0)
	lea	152(a0),a0
	dbf	d0,DelBpls

	lea	Bpls+6,a0
	move.l	#2,d2		; Y depart !!!
	move.l	#34,Xdepart
	moveq	#0,d6		; Compteur Bpls

	move.l	NbBpls,d5
	beq	Copy8
	subq	#1,d5		; Nombre bitplans -1

Copy8:	move	-4(a0),d3
	swap	d3
	move	(a0),d3		; Adr a afficher
	addq.l	#8,a0
	move.l	Xdepart,d1	; X depart	; 53 pour bpls 5-8

	moveq	#8-1,d4		; 8 chiffres / adr
TestCH:	move.l	d3,d0
	and.l	#%1111,d0
	lsr.l	#4,d3
	movem.l	d0-d5/a0,-(sp)
	bsr	CopyChiffre	; d0=Chiffre (0-15)	d1=X d2=Y
	movem.l	(sp)+,d0-d5/a0
	subq.l	#1,d1	; X=X-1
	dbf	d4,TestCH
	add.l	#9,d2		; Y=Y+9
	addq	#1,d6		; Bpl+1
	cmp	#4,d6
	bne	ColonneGauche
	move.l	#54,Xdepart	; nX
	moveq	#2,d2		; nY
ColonneGauche:
	dbf	d5,Copy8
	RTS

Xdepart:	dc.l	0
;====================================================================
CopyChiffre:	; d0=Chiffre (0-15)	d1=X d2=Y
	Lea	Fonts,a0
	add.l	d0,a0
	Lea	Menu,a1

	mulu	#160,d2
	add.l	d2,a1		; +Y
	add.l	d1,a1		; +X

	moveq	#5-1,d0
CopyCh:	move.b	(a0),(a1)
	lea	16(a0),a0
	lea	160(a1),a1
	dbf	d0,CopyCh
	rts
;====================================================================
ConvertHex:	; d0=Adresse.L	a0=Adr Texte
	addq.l	#8,a0

	moveq	#8-1,d2
ConvertH:
	move.l	d0,d1
	lsr.l	#4,d0
	and.l	#$0000000F,d1
	cmp	#9,d1
	bhi	Lettre
	add.b	#'0',d1
	bra	Chiffre
Lettre:	add.b	#'A'-10,d1
Chiffre:move.b	d1,-(a0)
	dbf	d2,ConvertH
	rts
;====================================================================
CopyGraph3:
	; D2=X1		D5=X2		D4=TailleX (Octets)
	; D3=Y1		D6=Y2
	movem.l	d2-d5/a0-a1,-(sp)
	move.l	d6,-(sp)
	lea	Menus,a0
	lea	Menu,a1
	mulu	#80*2,d3
	add.l	d3,d2		; X+80Y
	add.l	d2,a0
	mulu	#80*2,d6
	add.l	d6,d5
	add.l	d5,a1
	move.l	(sp)+,d6
	subq	#1,d4
CopyG22:moveq	#9-1,d5
CopyG2:	move.b	(a0),(a1)
	move.b	80(a0),80(a1)
	lea	160(a0),a0
	lea	160(a1),a1
	dbf	d5,CopyG2
	lea	(-160*9)+1(a0),a0
	lea	(-160*9)+1(a1),a1
	dbf	d4,CopyG22
	movem.l	(sp)+,d2-d5/a0-a1
	rts
;====================================================================
irq3:	movem.l	d0-d7/a0-a6,-(a7)
	move	$dff01e,d0
	and	$dff01c,d0
	btst	#5,d0
	beq.w	NoPlay
	cmp.w	#$FFFF,MouseSTOP
	beq	NoPlay
	bsr	mots_control

NoPlay:	movem.l	(a7)+,d0-d7/a0-a6
saveirq3:
	jmp	$0
;====================================================================
mots_control:
	lea	Pointeur,a3
	move.b	$dff00a,d0
	move.b	d0,d2

	cmp	#-2,MouseSTOP
	beq	PasBougeMouseY
	move.b	lasty,d1
	sub.b	d1,d0
	ext	d0
	add.w	d0,mousey
	move.b	d2,lasty
PasBougeMouseY:

	move.b	$dff00b,d0
	move.b	d0,d2
	move.b	lastx,d1
	sub.b	d1,d0
	ext	d0
	add.w	d0,mousex
	move.b	d2,lastx
	cmp.w	#$1bf,mousex
	bls	paslimite
	move.w	#$1bf,mousex
paslimite:
	cmp.w	#$80,mousex
	bhs	paslimite2
	move.w	#$80,mousex
paslimite2:
	cmp.w	#$29,mousey
	bge	paslimite3
	move.w	#$29,mousey
paslimite3:
	cmp.w	#$4C,mousey
	bls	paslimite4
	move.w	#$4C,mousey
paslimite4:
	move.b	mousey+1,(a3)	;Adrsp0
	move.b	mousey,d0
	lsl.b	#2,d0
	move.w	mousex,d1
	ror.w	#1,d1
	bpl.w	pasneg
	or.w	#1,d0
pasneg:
	move.b	d1,1(a3)	;Adrsp0+1
	move.w	mousey,d1
	add.w	#13,d1
	move.b	d1,2(a3)	;Adrsp0+2
	lsr.w	#8,d1
	lsl.w	#1,d1
	or.b	d1,d0
	move.b	d0,3(a3)	;Adrsp0+3
	rts

AddScroll:	dc.l	0
SaddScroll:	dc.l	0
AddSizeX:	dc.w	2
mousex:		dc.w	$41
mousey:		dc.w	$40
lastx:		dc.b	0
lasty:		dc.b	0
BplActifs:	dc.b	%11111111	; Bits 0 a 7 (1=Actif)
		even
;====================================================================
Calcul_AddScroll:
	move	Copper2+14,d2
	sub	Copper2+10,d2

	move	BplCON+2,d0
	btst	#6,d0
	bne	CA_Shires
	btst	#15,d0
	bne	CA_hires

	sub	#152,d2
	neg	d2
	lsr	#2,d2
	ext.l	d2

	moveq	#40,d1		; LowRes 320
	bra	CA_AllRes

CA_hires:
	sub	#152,d2
	neg	d2
	lsr	#1,d2
	ext.l	d2
	moveq	#80,d1		; HiRes 640
	bra	CA_AllRes
CA_Shires:
	sub	#160,d2
	neg	d2
	ext.l	d2

	move	#160+8,d1	; S-Hires 1280
CA_AllRes:
	add	Mod+2,d1	; Modulos Geres
	ext.l	d1
	sub.l	d2,d1		; Taille X geree
	move.l	d1,AddScroll

	rts
;====================================================================
SAVEMENU:
	clr	MouseSTOP

	lea	MenuS+[80*2*36*4],a0
	lea	Menu,a1
	moveq	#36-1,d1
CopyMS:	move	#[320/32]-1,d0
CopyMenuSave:
	move.l	80(a0),80(a1)
	clr.l	40(a1)
	clr.l	40+80(a1)
	move.l	(a0)+,(a1)+
	dbf	d0,CopyMenuSave
	lea	40+80(a0),a0
	lea	40+80(a1),a1
	dbf	d1,CopyMS

MainSave:
	clr	MouseSTOP
	btst	#6,$bfe001
	bne	SaveEnd

	move.w	#-1,MouseSTOP
	moveq	#0,d0
	moveq	#0,d1
	move	MouseX,d0
	move	MouseY,d1

	cmp	#$120,d0
	bhs	SaveEnd
	cmp	#$100,d0
	blo	PasSaveQuit
	cmp	#$29+9+9+9,d1
	blo	SaveEnd
;================================ Save Menu QUIT
	moveq	#72,d2
	moveq	#36,d3
	moveq	#8,d4
	moveq	#32,d5
	moveq	#27,d6
	bsr	CopyGraph3
WaitBeforeExit:
	bsr	WaitVBL
	btst	#6,$bfe001
	beq	WaitBeforeExit
	clr	MouseSTOP
	RTS

PasSaveQuit:
	cmp	#$e0,d0
	bhs	SaveEnd

	cmp	#$A0,d0
	blo	Save_Images
	cmp	#$c0,d0
	blo	Save_Coppers
;================================ Sauver SONS
	cmp	#$29+9,d1
	blo	SaveEnd
	cmp	#$29+9+9,d1
	blo	SaveSoundIFF
	cmp	#$29+9+9+9,d1
	blo	SaveSoundRAW
	bra	SaveEnd
;================================ // Sauver SON RAW
SaveSoundRAW:
	moveq	#38,d2
	moveq	#54,d3
	moveq	#8,d4
	moveq	#16,d5
	moveq	#18,d6
	bsr	CopyGraph3

SSRwait:bsr	WaitVBL
	btst	#6,$bfe001
	beq	SSRwait

	moveq	#16,d2
	move.l	#162,d3
	moveq	#8,d4
	moveq	#16,d5
	moveq	#18,d6
	bsr	CopyGraph3

	move	#$687,$dff180
	bra	SaveEnd
;================================ // Sauver SON IFF
SaveSoundIFF:
	clr.b	Error

	moveq	#40,d2
	moveq	#45,d3
	moveq	#8,d4
	moveq	#16,d5
	moveq	#9,d6
	bsr	CopyGraph3

SSIwait:bsr	WaitVBL
	btst	#6,$bfe001
	beq	SSIwait

	moveq	#16,d2
	move.l	#153,d3
	moveq	#8,d4
	moveq	#16,d5
	moveq	#9,d6
	bsr	CopyGraph3

	move.l	SoundEnd,d0
	sub.l	SoundStart,d0		; Longueur RAW

	move.l	FinHeaderSonIFF,d1
	sub.l	HeaderSonIFF,d1		; Longueur Header

	add.l	d0,d1
	subq.l	#8,d1
	move.l	d1,HSL			; HS_Longueur

	move.l	d0,HSOR
	clr.l	HSLR
	move.l	d0,HSLB			; HS_Longueur_Brute

	cmp.l	#NULL,SoundRestart
	beq	HSnoRepeat

	move.l	SoundRestart,d2
	sub.l	SoundStart,d2
	move.l	d2,HSOR			; HS_Offset_Repeat

	moveq	#0,d2
	move	SoundLoop,d2
	lsl.l	#1,d2
	move.l	d2,HSLR			; HS_Longueur_Repeat
HSnoRepeat:
	bsr	WaitVBL
	btst	#6,$bfe001
	beq	HSnoRepeat

	move.l	GfxBase,a0
	move.l	38(a0),a0
	move.l	a0,$dff080
	clr	$dff088

	lea	ReqT_SaveSound,a0
	lea	File,a1
	bsr	RitLib+RL_FileReq
	tst.l	d0
	beq	SSIUserBreak
	cmp.l	#-1,d0
	beq	SSINewFile
	cmp.l	#-2,d0
	beq	SSINoLibrary

	bset	#3,Error	; Fichier Existe
	lea	Requester2,a0	; Demande de confirmation
	bsr	RitLib+RL_Requete
	cmp.l	#1,d0
	bne	Err

SSINewFile:
	move.l	4.w,a6
	lea	DosName,a1
	jsr	-408(a6)
	move.l	d0,DosBase
	tst.l	d0
	beq	Err

	move.l	d0,a6
	move.l	#File,d1
	move.l	#1006,d2
	jsr	-30(a6)		; Open
	tst.l	d0
	beq	Err
	move.l	d0,FileHD

	move.l	d0,d1
	move.l	#HeaderSonIFF,d2
	move.l	d2,d3
	sub.l	#FinHeaderSonIFF,d3
	neg.l	d3
	jsr	-48(a6)		; Write Header

	move.l	FileHD,d1
	move.l	SoundStart,d2
	move.l	d2,d3
	sub.l	SoundEnd,d3
	neg.l	d3
	jsr	-48(a6)		; Write RAW

	move.l	FileHD,d1
	jsr	-36(a6)		; Close

Err:	move.l	#CopperRipper,$dff080
	clr	$dff088
	bra	SaveEnd

SSIUserBreak:
	bset	#1,Error	; Pas de fichier selectionne
	bra	Err

SSINoLibrary:
	bset	#0,Error	; Libraire absente
	bra	Err


DosName:	dc.b	'dos.library',0
		even
DosBase:	dc.l	0
FileHD:		dc.l	0
File:		blk.b	256,0
ReqT_SaveImage:	dc.b	'Choisissez un fichier IMAGE:',0
ReqT_SaveSound:	dc.b	'Choisissez un fichier SON:',0
ReqT_SaveCop:	dc.b	'Choisissez un fichier COPPER:',0
		even
;================================ Sauver Images
Save_Images:
	cmp	#$29+9,d1
	blo	SaveEnd
	cmp	#$29+9+9,d1
	blo	SaveImageIFF
	cmp	#$29+9+9+9,d1
	blo	SaveImageRAW
	move	#$ff0,$dff180
	bra	SaveEnd
;================================ // Sauver Image IFF
SaveImageIFF:
	moveq	#40,d2
	moveq	#45,d3
	moveq	#8,d4
	moveq	#0,d5
	moveq	#9,d6
	bsr	CopyGraph3

SIIwait:bsr	WaitVBL
	btst	#6,$bfe001
	beq	SIIwait

	moveq	#0,d2
	move.l	#153,d3
	moveq	#8,d4
	moveq	#0,d5
	moveq	#9,d6
	bsr	CopyGraph3

	move.l	GfxBase,a0
	move.l	38(a0),$dff080
	clr	$dff088

	move	BplCON+2,d0
	btst	#6,d0
	beq	SIInoshires
	move	#1280,HIIXYE
	move	#256,HIIXYE+2
	bra	SIIecran
SIInoshires:
	btst	#15,d0
	beq	SIInohires
	move	#640,HIIXYE
	move	#256,HIIXYE+2
	bra	SIIecran
SIInohires:
	move	#320,HIIXYE
	move	#256,HIIXYE+2
SIIecran:
	move	TailleX,HIIXYB
	move	TailleY,HIIXYB+2	; X,Y Brush

	moveq	#0,d0
	move	HIIXYB,d0	; X brush
	moveq	#0,d1
	move	HIIXYB+2,d1	; Y brush
	mulu	d1,d0
	move.l	d0,HIIT		; Taille Non Compactee
	add.l	#FinHeaderImageIFF,d0
	sub.l	#HeaderImageIFF,d0
	subq.l	#8,d0
	move.l	d0,HIIL		; Longueur fichier-8

	lea	ReqT_SaveImage,a0
	lea	File,a1
	bsr	RitLib+RL_FileReq
	tst.l	d0
	beq	SIIUserBreak
	cmp.l	#-1,d0
	beq	SIINewFile
	cmp.l	#-2,d0
	beq	SIINoLibrary

	bset	#3,Error	; Fichier Existe
	lea	Requester2,a0	; Demande de confirmation
	bsr	RitLib+RL_Requete
	cmp.l	#1,d0
	bne	SIIfin

SIINewFile:
	lea	Palette+6,a0
	lea	HIIcol,a1

	moveq	#8-1,d2
SIIpalette256:
	moveq	#32-1,d1
SIIpalette32:
	move	(a0),d0
	and	#$0F00,d0
	lsr	#4,d0
	move.b	d0,RR		; Rouge Fort
	move	(a0),d0
	and	#$00F0,d0
	move.b	d0,GG		; Vert Fort
	move	(a0),d0
	and	#$000F,d0
	lsl	#4,d0
	move.b	d0,BB		; Bleu Fort
	move	132(a0),d0
	and	#$0F00,d0
	lsr	#8,d0
	or.b	d0,RR		; Rouge Fort+Faible
	move	132(a0),d0
	and	#$00F0,d0
	lsr	#4,d0
	or.b	d0,GG		; Vert Fort+Faible
	move	132(a0),d0
	and	#$000F,d0
	or.b	d0,BB		; Bleu Fort+Faible
	move.b	RR,(a1)+
	move.b	GG,(a1)+
	move.b	BB,(a1)+
	addq.l	#4,a0
	dbf	d1,SIIpalette32
	lea	[132+4](a0),a0
	dbf	d2,SIIpalette256

	move.l	DosBase(pc),a6
	move.l	#File,d1
	move.l	#1006,d2
	jsr	-30(a6)		; Open
	tst.l	d0
	beq	SIIErr
	move.l	d0,FileHD

	move.l	DosBase(pc),a6
	move.l	FileHD,d1
	move.l	#HeaderImageIFF,d2
	move.l	d2,d3
	sub.l	#FinHeaderImageIFF,d3
	neg.l	d3
	jsr	-48(a6)		; Write Header

	lea	Bpls+6,a0	; Prepare les adresses des bitplans
	lea	Bpl1,a1
	moveq	#8-1,d0
CopyAdrsBpls:
	move	-4(a0),(a1)+
	move	(a0),(a1)+
	addq.l	#8,a0
	dbf	d0,CopyAdrsBpls

	move	HIIXYB+2,d6
	subq	#1,d6		; Hauteur image

SaveImage:
	Lea	Raw1,a0		; Efface Ligne...
	move	HIIXYB,d0
	subq	#1,d0
DelRaw1:clr.b	(a0)+
	dbf	d0,DelRaw1

	Lea	Bpl1,a0
	moveq	#0,d3		; Bit a mettre (No Plan)
	move.l	NbBpls,d5
	subq	#1,d5		; Nombre de bitplans-1
Ligne1Plan8:
	Lea	Raw1,a2
	move.l	(a0)+,a1	; Plan
	move	HIIXYB,d4
	lsr	#3,d4
	subq	#1,d4		; Largeur 1 plan
Ligne1Plan1:
	move.b	(a1)+,d0
	moveq	#7,d2		; Bit a lire
MemeAdresse:
	moveq	#0,d1
	btst	d2,d0
	beq	NoBit
	bset	d3,d1
NoBit:	or.b	d1,(a2)+
	dbf	d2,MemeAdresse		; Bit Suivant
	dbf	d4,Ligne1Plan1
	addq	#1,d3		; Bit suivant a mettre (couleur)
	dbf	d5,Ligne1Plan8


	move.l	FileHD,d1
	move.l	#RAW1,d2
	moveq	#0,d3
	move	HIIXYB,d3	; Largeur
	move.l	d6,-(sp)
	move.l	DosBase(pc),a6
	jsr	-48(a6)		; Write 1 ligne 256 colors
	move.l	(sp)+,d6
	tst.l	d0
	beq	CloseSII

	lea	Bpl1,a0
	move.l	AddScroll,d0
	moveq	#8-1,d1
NewLine:add.l	d0,(a0)+
	dbf	d1,NewLine

	dbf	d6,SaveImage

CloseSII:
	move.l	DosBase(pc),a6
	move.l	FileHD,d1
	jsr	-36(a6)		; Close

SIIfin:	move.l	#CopperRipper,$dff080
	clr	$dff088
	bra	SaveEnd

SIIUserBreak:
	bset	#1,Error	; Pas de fichier selectionne
	bra	SIIfin
SIINoLibrary:
	bset	#0,Error	; Libraire absente
	bra	SIIfin
SIIerr:	bra	SIIfin

Bpl1:	dc.l	0,0,0,0,0,0,0,0
Raw1:	blk.b	1280,0
;================================ // Sauver Image RAW
SaveImageRAW:
	bra	SaveEnd
;================================ Sauver Coppers
Save_Coppers:
	cmp	#$29+9,d1
	blo	SaveEnd
	cmp	#$29+9+9,d1
	blo	SaveCopSource
	cmp	#$29+9+9+9,d1
	blo	SaveCopRAW
;================================ // Sauver Vraie Copper
	tst.l	Current
	beq	SaveEnd

	move.l	GfxBase,a0
	move.l	38(a0),a0
	move.l	a0,$dff080
	clr	$dff088

	lea	ReqT_SaveCop,a0
	lea	File,a1
	bsr	RitLib+RL_FileReq
	tst.l	d0
	beq	SCRUserBreak
	cmp.l	#-1,d0
	beq	SCVNewFile
	cmp.l	#-2,d0
	beq	SCRNoLibrary

	bset	#3,Error	; Fichier Existe
	lea	Requester2,a0	; Demande de confirmation
	bsr	RitLib+RL_Requete
	cmp.l	#1,d0
	bne	SCRend

SCVNewFile:
	move.l	Current,$dff080		; Aff Vraie copper kan sauve
	clr	$dff088

	Lea	File,a0			; Fich
	Move.l	Current(pc),a1		; Buff
	Move.l	CurrentFin,d0
	sub.l	a1,d0			; Long
	bsr	RitLib+RL_SaveFile

	bra	SCRend			; Gestion erreur + remet copper
;================================ // Sauver Copper Binaire
SaveCopRAW:
	moveq	#38,d2
	moveq	#54,d3
	moveq	#8,d4
	moveq	#8,d5
	moveq	#18,d6
	bsr	CopyGraph3

SCRwait:bsr	WaitVBL
	btst	#6,$bfe001
	beq	SCRwait

	moveq	#8,d2
	move.l	#162,d3
	moveq	#8,d4
	moveq	#8,d5
	moveq	#18,d6
	bsr	CopyGraph3

	move.l	GfxBase,a0
	move.l	38(a0),a0
	move.l	a0,$dff080
	clr	$dff088

	lea	ReqT_SaveCop,a0
	lea	File,a1
	bsr	RitLib+RL_FileReq
	tst.l	d0
	beq	SCRUserBreak
	cmp.l	#-1,d0
	beq	SCRNewFile
	cmp.l	#-2,d0
	beq	SCRNoLibrary

	bset	#3,Error	; Fichier Existe
	lea	Requester2,a0	; Demande de confirmation
	bsr	RitLib+RL_Requete
	cmp.l	#1,d0
	bne	SCRend

SCRNewFile:
	Lea	File,a0			; Fich
	Lea	Palette,a1		; Buff
	move.l	#FinPalette-Palette,d0	; Long
	bsr	RitLib+RL_SaveFile
;
;	DEBUG	Verif si NoErr sauvegarde
;
SCRend:
	move.l	#CopperRipper,$dff080
	clr	$dff088
	bra	SaveEnd
SCRNoLibrary:
	bset	#0,Error	; Libraire absente
	bra	SCRend

SCRUserBreak:
	bset	#1,Error	; Pas de fichier selectionne
	bra	SCRend

;================================ // Sauver Copper Source
SaveCopSource:
	moveq	#38,d2
	moveq	#63,d3
	moveq	#8,d4
	moveq	#8,d5
	moveq	#9,d6
	bsr	CopyGraph3

SCSwait:bsr	WaitVBL
	btst	#6,$bfe001
	beq	SCSwait

	moveq	#8,d2
	move.l	#153,d3
	moveq	#8,d4
	moveq	#8,d5
	moveq	#9,d6
	bsr	CopyGraph3

	move.l	GfxBase,a0
	move.l	38(a0),$dff080
	clr	$dff088

	lea	ReqT_SaveCop,a0
	lea	File,a1
	bsr	RitLib+RL_FileReq
	tst.l	d0
	beq	SCSUserBreak
	cmp.l	#-1,d0
	beq	SCSNewFile
	cmp.l	#-2,d0
	beq	SCSNoLibrary

	lea	Requester2,a0	; Demande de confirmation
	bsr	RitLib+RL_Requete
	cmp.l	#1,d0
	beq	SCSOldFile
	bra	SCSUserBreak
SCSOldFile:
	bset	#3,Error	; Fichier Existe
SCSNewFile:
	move.l	DosBase,a6
	move.l	#File,d1
	move.l	#1006,d2
	jsr	-30(a6)		; Open
	tst.l	d0
	beq	ErrSCS
	move.l	d0,FileHD

	lea	Palette,a0
SaveAllLines:
	lea	PremW+1,a1
PrepareLigne:			; Copie 1 ligne dc.w $...
	move	(a0)+,d0
	bsr	ConvertWordASCII
	move.l	d0,(a1)
	addq.l	#6,a1
	cmp.l	#FPremW,a1
	blo	PrepareLigne

	move.l	FileHD,d1
	move.l	#Ligne1,d2
	move.l	#FLigne1-Ligne1,d3
	move.l	a0,-(sp)
	jsr	-48(a6)		; Write 1 ligne
	tst.l	d0
	beq	SCSnospace
	move.l	(sp)+,a0

	cmp.l	#FinPalette,a0
	blo	SaveAllLines
SCSclose:
	move.l	FileHD,d1
	jsr	-36(a6)		; Close

ErrSCS:
	bsr	GereError
	move.l	#CopperRipper,$dff080
	clr	$dff088
	bra	SaveEnd

SCSnoSpace:
	bset	#2,Error
	bra	SCSclose

SCSUserBreak:
	bset	#1,Error	; Pas de fichier selectionne
	bra	ErrSCS
SCSNoLibrary:
	bset	#0,Error	; Libraire absente
	bra	ErrSCS


SaveEnd:btst	#10,$dff016
	bne	MainSave

	rts

;====================================================================
Ligne1:	dc.b	'DC.W	'
PremW:	dc.b	'$0000,$0000,$0000,$0000,$0000,$0000,'
	dc.b	'$0000,$0000,$0000,$0000,$0000,$0000'
FPremW:	dc.b	10
Fligne1:
	even
;====================================================================
GereError:
	lea	Menu+40,a0

	moveq	#[36*2]-1,d2
DelAllErrors:
	moveq	#10-1,d0
	moveq	#0,d1
DelErrors:
	move.l	d1,(a0)+
	dbf	d0,DelErrors
	lea	40(a0),a0
	dbf	d2,DelAllErrors

	move.b	Error,d0
	and.b	#%0111,d0
	bne	GEnotsaved

	lea	Menus+[160*36*4]+40+160,a0
	lea	Menu+40,a1
	bsr	CopyMessage
GEnotsaved:
	moveq	#4-1,d0

ChError:
	move.b	Error,d1
	btst	d0,d1
	beq	GEnoerror

	moveq	#0,d2
	move.b	d0,d2	; No err
	mulu	#160*7,d2
	lea	Menus+[160*36*4]+40+[160*8],a0
	lea	Menu+40+[160*8],a1
	add.l	d2,a0
	add.l	d2,a1
	bsr	CopyMessage
GEnoerror:
	dbf	d0,ChError

	clr.b	Error
	rts
;====================================================================
CopyMessage:
	movem.l	d0-d1/a0-a1,-(sp)
	moveq	#12-1,d1
CopMessAll:
	moveq	#[320/32]-1,d0
CopMess:move.l	(a0)+,(a1)+
	dbf	d0,CopMess
	lea	40(a0),a0
	lea	40(a1),a1
	dbf	d1,CopMessAll
	movem.l	(sp)+,d0-d1/a0-a1
	rts
;====================================================================
ConvertWordASCII:	; d0.W => d0.L !
	movem.l	d1-d3,-(sp)
	moveq	#0,d2
	moveq	#4-1,d3
CWAloop:move	d0,d1
	lsr	#4,d0
	and	#$000F,d1
	cmp	#9,d1
	bhi	CWAlettre
	add.b	#'0',d1
	bra	CWAchiffre
CWAlettre:
	add.b	#'A'-10,d1
CWAchiffre:
	move.b	d1,d2
	ror.l	#8,d2
	dbf	d3,CWAloop
	move.l	d2,d0		; d0.L=result
	movem.l	(sp)+,d1-d3
	rts
;====================================================================
RR:	dc.b	0
GG:	dc.b	0
BB:	dc.b	0
Error:	dc.b	0
	even

HeaderImageIFF:
	dc.l	'FORM'
HIIL:	dc.l	0			;Longueur fichier-8
	dc.l	'PBM ','BMHD'
	dc.l	HIIhunk2-HiiHunk1
HIIhunk1:
HIIXYB:	dc.w	0,0		; BrushX,BrushY
	dc.l	0
	dc.l	$08000000	; 8 bitplans
	dc.l	$00000506	; 1 octet=1 point
HIIXYE:	dc.w	0,0		;TailleX,TailleY ecran
HIIhunk2:
	dc.l	'CMAP'
	dc.l	256*3
HIIcol:	blk.b	256*3,0
HIIbody:dc.l	'BODY'
HIIT:	dc.l	0		;Taille non compactee
FinHeaderImageIFF:
;====================================================================
HeaderSonIFF:
	dc.l	'FORM'
HSL:	dc.l	0	; Longueur Fichier-8
	dc.l	'8SVX'
	dc.l	'VHDR'
	dc.l	HShunk2-HShunk1
HShunk1:
HSOR:	dc.l	0				; Offset Repeat
HSLR:	dc.l	0				; Longueur Repeat
	dc.l	32
	dc.l	$41560100
	dc.w	1,0
HShunk2:
	dc.l	'NAME'
	dc.l	32	; Longueur du NOM
HSN:	blk.b	32,' '
	dc.l	'ANNO'
	dc.l	24	; Longueur commentaire
	dc.b	'© RRip by Arnaud GUYON ©'
	dc.l	'BODY'
HSLB:	dc.l	0				; Longueur Brute
FinHeaderSonIFF:
;====================================================================

GfxBase:dc.l	0
NbBpls:	dc.l	0
TailleX:dc.w	320
TailleY:dc.w	256
Current:	dc.l	0
CurrentFin:	dc.l	0

GfxName:dc.b	'graphics.library',0
	even

Requester:
	dc.l	Titre
	dc.l	Message
	dc.l	TxtGauche
	dc.l	0	;;;TxtMilieu
	dc.l	TxtDroite
	dc.b	1
Titre:		dc.b	'*** Request ***',0
Message:	dc.b	'Voulez-vous vraiment quitter ?',0
TxtGauche:	dc.b	'Yep !',0
TxtDroite:	dc.b	'Oh,Non !',0
		even

Requester2:
	dc.l	Titre2
	dc.l	Message2
	dc.l	TxtGauche2
	dc.l	0	;;;TxtMilieu
	dc.l	TxtDroite2
	dc.b	1
Titre2:		dc.b	'*** Request ***',0
Message2:	dc.b	"Le fichier existe déjà, voulez-vous l'écraser ?",10
		dc.b	"         (l'ancien fichier sera perdu)",0
TxtGauche2:	dc.b	'SAUVER',0
TxtDroite2:	dc.b	'ABANDONNER',0
		even


PTmodes:	dc.l	TM		;;;TableModes
TableModes:
	dc.w	0,2			; Offset Ecr, AddX
	dc.w	$0200			; $100
	dc.w	$38,$d0			; $92,$94
	dc.w	$2100,0			; $1e4,$1fc

	dc.w	40,2			; 320 Half & Bright
	dc.w	$0200
	dc.w	$38,$d0
	dc.w	$2100,0

	dc.w	40*2,2			; 320 HAM
	dc.w	$0A00
	dc.w	$38,$d0
	dc.w	$2100,0

	dc.w	40*3,4			; 640
	dc.w	$8200
	dc.w	$3C,$d4
	dc.w	$2100,0

TM:	dc.w	40*4,4			; 640 Half & Bright
	dc.w	$8200
	dc.w	$3C,$d4
	dc.w	$2100,0

	dc.w	40*5,4			; 640 HAM
	dc.w	$8200
	dc.w	$3C,$d4
	dc.w	$2100,0

	dc.w	40*6,8			; 1280
	dc.w	$240
	dc.w	$38,$d8
	dc.w	$2100,3

	dc.w	40*7,8			; 1280 Half & Bright
	dc.w	$0240
	dc.w	$38,$d8
	dc.w	$2100,3

	dc.w	40*8,8			; 1280 HAM
	dc.w	$240
	dc.w	$38,$d8
	dc.w	$2100,3

	dc.w	-1


RitLib:	incbin	'RitLib1'
Fonts:	incbin	'GFX.Fonts'

	Align	0,8
Menu:	blk.b	80*36*2,0
	even

Pointeur:
	dc.w $0A41,$1706
	dc.w $FFE0,$0020
	dc.w $8040,$7FC0
	dc.w $8080,$7F80
	dc.w $8100,$7F00
	dc.w $8100,$7E00
	dc.w $8080,$7F00
	dc.w $8040,$7F80
	dc.w $9820,$7FC0
	dc.w $A410,$67E0
	dc.w $C208,$43F8
	dc.w $8110,$81F0
	dc.w $00A0,$00E0
	dc.w $0040,$0040
	dc.w $0000,$0000

CopperRipper:
	dc.w	$106,$0
	dc.w	$102,$0,$1fc,$0
	dc.w	$8e,$2981,$90,$29C1,$92,$003C,$94,$00D4

MenuBpl:dc.w	$e0,0,$e2,0,$e4,0,$e6,0
	dc.w	$108,$50,$10a,$50
	dc.w	$100,$A200
	dc.w	$180,0,$182,$8AF,$184,$57B,$186,$235

	dc.w	$1a2,$0ff

PalPointeur:
	dc.w	$106,0
	dc.w	$1a4,$0bb
	dc.w	$106,%1000000000
	dc.w	$1a4,$0bb

	dc.w	$106,0
	dc.w	$1a6,$055
	dc.w	$10C,$0011,$104,$7F

Sprt:	dc.w	$120,0,$122,0
	dc.w	$124,0,$126,0
	dc.w	$128,0,$12a,0
	dc.w	$12c,0,$12e,0
	dc.w	$130,0,$132,0
	dc.w	$134,0,$136,0
	dc.w	$138,0,$13a,0
	dc.w	$13c,0,$13e,0

	dc.w	$4d0f,$fffe,$100,0

Palette:
	blk.l	(32+1)*8*2,0
FinPalette:
Copper2:
	dc.w	$8e,$5c81,$90,$37C1,$92,$003C,$94,$00D4
	dc.w	$5a0f,$fffe
BeginDelCopper:
BplCON:	dc.w	$100,$9200
Bpls:	dc.w	$e0,0,$e2,0,$e4,0,$e6,0,$e8,0,$ea,0,$ec,0,$ee,0
	dc.w	$f0,0,$f2,0,$f4,0,$f6,0,$f8,0,$fa,0,$fc,0,$fe,0
Mod:	dc.w	$108,0,$10a,0
ToDelCopper:


FinCopper:
	dc.w	$10C,0,$106,0
	dc.w	$102,0,$104,0

C1e4:	dc.w	$1e4,0
C1fc:	dc.w	$1fc,0
	dc.l	-2

MenuS:	incbin	'RRipHires.RawBlit'
GfxMode:incbin	'GFX.ScrMode.RawBlit'

SON:	incbin	'Hd1:Musique/Sons/Bass/JBass2'
FinIntro:
