ORG $30000
LOAD $30000

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

;=====================================================================
BLTCON0=$DFF040		
BLTCON1=$DFF042
BLTAFWM=$DFF044
BLTALWM=$DFF046
BLTCPTH=$DFF048
BLTCPTL=$DFF04A
BLTBPTH=$DFF04C
BLTBPTL=$DFF04E
BLTAPTH=$DFF050
BLTAPTL=$DFF052
BLTDPTH=$DFF054
BLTDPTL=$DFF056
BLTSIZE=$DFF058
BLTCMOD=$DFF060
BLTBMOD=$DFF062
BLTAMOD=$DFF064
BLTDMOD=$DFF066
BLTCDAT=$DFF070
BLTBDAT=$DFF072
BLTADAT=$DFF074
DMACONR=$DFF002
;=====================================================================
START:    
	MOVEM.L D0-D7/A0-A6,-(A7)	;SAUVE REGISTRES
	MOVE.L EXECBASE,A6		;CHARGE ADRESSE EXECBASE DANS A6
	JSR FORBID(A6)			;SAUTE SOUS PROGRAMME: INTERDIT MULTITACHE
	JSR OPENLIB			;SAUTE SOUS PROGRAMME: OUVERTURE LIBRAIRIES
	
	MOVE.L #FILEPIC1,FILE		;PLACE NOM DU FICHIER DANS FILE
	MOVE.L #IMAGE_IFF_PP,ADRESSE	;PLACE ADRESSE DE CHARGEMENT DANS ADRESSE
	JSR LOADING			;VA A ROUTINE DE CHARGEMENT
	
	LEA IMAGE_IFF_PP,A2
	MOVE.L A2,A0
	ADD.L LONGUEUR,A0
	LEA IMAGE_IFF,A1
	JSR DECRUNCH

	MOVE.L	#IMAGE_IFF,A0		;POINTE A0 SUR ADRESSE INAGE IFF
	MOVE.L	#IMAGE,A1		;POINTE A1 SUR ADRESSE ECRAN RAW
	JSR UNPACK			;VA A ROUTINE DE DECOMPACTAGE
	
	LEA SCOPPER+2,A1		;POINTE A1 SUR 1ER REGISTRE COULEUR
	JSR IFFCOULEUR			;VA A ROUTINE DE MISE EN PLACE COULEUR    
	
	BSR.L MET_ADRESSES		;MET ADRESSE IMAGE DANS NOUVELLE LISTE COPPER
	
	BSR.L SETCOPPER			;SAUTE SOUS PROGRAMME: MET EN PLACE LISTE COPPER
	BSR.L NEWIRQ3			;SAUTE SOUS PROGRAMME: MET EN PLACE ROUTINE D'INTERRRUPTION
	
WAIT2:
	BTST	#6,$BFE001		;ATTENDANT PRESSION SUR BOUTON GAUCHE SOURIS
	BNE.S	WAIT2			;SINON RETOURNE A WAIT2
					
	MOVE.L #FILEPIC2,FILE		;PLACE NOM DU FICHIER DANS FILE
	MOVE.L #IMAGE_IFF_PP,ADRESSE	;PLACE ADRESSE DE CHARGEMENT DANS ADRESSE
	JSR LOADING			;VA A ROUTINE DE CHARGEMENT

	LEA IMAGE_IFF_PP,A2
	MOVE.L A2,A0
	ADD.L LONGUEUR,A0
	LEA IMAGE_IFF,A1
	JSR DECRUNCH
					
	MOVE.L	#IMAGE_IFF,A0		;POINTE A0 SUR ADRESSE INAGE IFF
	MOVE.L	#IMAGE,A1		;POINTE A1 SUR ADRESSE ECRAN RAW
	JSR UNPACK			;VA A ROUTINE DE DECOMPACTAGE
					
	LEA SCOPPER+2,A1		;POINTE A1 SUR 1ER REGISTRE COULEUR
	JSR IFFCOULEUR			;VA A ROUTINE DE MISE EN PLACE COULEUR      
					
	BSR.L MET_ADRESSES		;MET ADRESSE IMAGE DANS NOUVELLE LISTE COPPER

WAIT3:
	BTST	#6,$BFE001		;ATTENDANT PRESSION SUR BOUTON GAUCHE SOURIS
	BNE.S	WAIT3			;SINON RETOURNE A WAIT2
					
	MOVE.L #FILEPIC3,FILE		;PLACE NOM DU FICHIER DANS FILE
	MOVE.L #IMAGE_IFF_PP,ADRESSE	;PLACE ADRESSE DE CHARGEMENT DANS ADRESSE
	JSR LOADING 			;VA A ROUTINE DE CHARGEMENT
	
	LEA IMAGE_IFF_PP,A2
	MOVE.L A2,A0
	ADD.L LONGUEUR,A0
	LEA IMAGE_IFF,A1
	JSR DECRUNCH

	MOVE.L	#IMAGE_IFF,A0		;POINTE A0 SUR ADRESSE INAGE IFF
	MOVE.L	#IMAGE,A1		;POINTE A1 SUR ADRESSE ECRAN RAW
	JSR UNPACK			;VA A ROUTINE DE DECOMPACTAGE
					
	LEA SCOPPER+2,A1		;POINTE A1 SUR 1ER REGISTRE COULEUR
	JSR IFFCOULEUR			;VA A ROUTINE DE MISE EN PLACE COULEUR      
					
	BSR.L MET_ADRESSES		;MET ADRESSE IMAGE DANS NOUVELLE LISTE COPPER

WAIT4:
	BTST	#6,$BFE001		;ATTENDANT PRESSION SUR BOUTON GAUCHE SOURIS
	BNE.S	WAIT4			;SINON RETOURNE A WAIT2
					
	MOVE.L #FILEPIC4,FILE		;PLACE NOM DU FICHIER DANS FILE
	MOVE.L #IMAGE_IFF_PP,ADRESSE	;PLACE ADRESSE DE CHARGEMENT DANS ADRESSE
	JSR LOADING 			;VA A ROUTINE DE CHARGEMENT

	LEA IMAGE_IFF_PP,A2
	MOVE.L A2,A0
	ADD.L LONGUEUR,A0
	LEA IMAGE_IFF,A1
	JSR DECRUNCH
					
	MOVE.L	#IMAGE_IFF,A0		;POINTE A0 SUR ADRESSE INAGE IFF
	MOVE.L	#IMAGE,A1		;POINTE A1 SUR ADRESSE ECRAN RAW
	JSR UNPACK			;VA A ROUTINE DE DECOMPACTAGE
					
	LEA SCOPPER+2,A1		;POINTE A1 SUR 1ER REGISTRE COULEUR
	JSR IFFCOULEUR			;VA A ROUTINE DE MISE EN PLACE COULEUR      
					
	BSR.L MET_ADRESSES		;MET ADRESSE IMAGE DANS NOUVELLE LISTE COPPER

WAIT5:
	BTST	#6,$BFE001		;ATTENDANT PRESSION SUR BOUTON GAUCHE SOURIS
	BNE.S	WAIT5			;SINON RETOURNE A WAIT2
					
	MOVE.L #FILEPIC5,FILE		;PLACE NOM DU FICHIER DANS FILE
	MOVE.L #IMAGE_IFF_PP,ADRESSE	;PLACE ADRESSE DE CHARGEMENT DANS ADRESSE
	JSR LOADING 			;VA A ROUTINE DE CHARGEMENT

	LEA IMAGE_IFF_PP,A2
	MOVE.L A2,A0
	ADD.L LONGUEUR,A0
	LEA IMAGE_IFF,A1
	JSR DECRUNCH
					
	MOVE.L	#IMAGE_IFF,A0		;POINTE A0 SUR ADRESSE INAGE IFF
	MOVE.L	#IMAGE,A1		;POINTE A1 SUR ADRESSE ECRAN RAW
	JSR UNPACK			;VA A ROUTINE DE DECOMPACTAGE
					
	LEA SCOPPER+2,A1		;POINTE A1 SUR 1ER REGISTRE COULEUR
	JSR IFFCOULEUR			;VA A ROUTINE DE MISE EN PLACE COULEUR      
					
	BSR.L MET_ADRESSES		;MET ADRESSE IMAGE DANS NOUVELLE LISTE COPPER

WAIT6:
	BTST	#6,$BFE001		;ATTENDANT PRESSION SUR BOUTON GAUCHE SOURIS
	BNE.S	WAIT6			;SINON RETOURNE A WAIT2
					
	MOVE.L #FILEPIC6,FILE		;PLACE NOM DU FICHIER DANS FILE
	MOVE.L #IMAGE_IFF_PP,ADRESSE	;PLACE ADRESSE DE CHARGEMENT DANS ADRESSE
	JSR LOADING 			;VA A ROUTINE DE CHARGEMENT

	LEA IMAGE_IFF_PP,A2
	MOVE.L A2,A0
	ADD.L LONGUEUR,A0
	LEA IMAGE_IFF,A1
	JSR DECRUNCH
					
	MOVE.L	#IMAGE_IFF,A0		;POINTE A0 SUR ADRESSE INAGE IFF
	MOVE.L	#IMAGE,A1		;POINTE A1 SUR ADRESSE ECRAN RAW
	JSR UNPACK			;VA A ROUTINE DE DECOMPACTAGE
					
	LEA SCOPPER+2,A1		;POINTE A1 SUR 1ER REGISTRE COULEUR
	JSR IFFCOULEUR			;VA A ROUTINE DE MISE EN PLACE COULEUR      
					
	BSR.L MET_ADRESSES		;MET ADRESSE IMAGE DANS NOUVELLE LISTE COPPER

WAIT7:
	BTST	#6,$BFE001		;ATTENDANT PRESSION SUR BOUTON GAUCHE SOURIS
	BNE.S	WAIT7			;SINON RETOURNE A WAIT2
					
	MOVE.L #FILEPIC7,FILE		;PLACE NOM DU FICHIER DANS FILE
	MOVE.L #IMAGE_IFF_PP,ADRESSE	;PLACE ADRESSE DE CHARGEMENT DANS ADRESSE
	JSR LOADING 			;VA A ROUTINE DE CHARGEMENT

	LEA IMAGE_IFF_PP,A2
	MOVE.L A2,A0
	ADD.L LONGUEUR,A0
	LEA IMAGE_IFF,A1
	JSR DECRUNCH
					
	MOVE.L	#IMAGE_IFF,A0		;POINTE A0 SUR ADRESSE INAGE IFF
	MOVE.L	#IMAGE,A1		;POINTE A1 SUR ADRESSE ECRAN RAW
	JSR UNPACK			;VA A ROUTINE DE DECOMPACTAGE
					
	LEA SCOPPER+2,A1		;POINTE A1 SUR 1ER REGISTRE COULEUR
	JSR IFFCOULEUR			;VA A ROUTINE DE MISE EN PLACE COULEUR      
					
	BSR.L MET_ADRESSES		;MET ADRESSE IMAGE DANS NOUVELLE LISTE COPPER

WAIT8:
	BTST	#6,$BFE001		;ATTENDANT PRESSION SUR BOUTON GAUCHE SOURIS
	BNE.S	WAIT8			;SINON RETOURNE A WAIT2
					
	MOVE.L #FILEPIC8,FILE		;PLACE NOM DU FICHIER DANS FILE
	MOVE.L #IMAGE_IFF_PP,ADRESSE	;PLACE ADRESSE DE CHARGEMENT DANS ADRESSE
	JSR LOADING 			;VA A ROUTINE DE CHARGEMENT

	LEA IMAGE_IFF_PP,A2
	MOVE.L A2,A0
	ADD.L LONGUEUR,A0
	LEA IMAGE_IFF,A1
	JSR DECRUNCH
					
	MOVE.L	#IMAGE_IFF,A0		;POINTE A0 SUR ADRESSE INAGE IFF
	MOVE.L	#IMAGE,A1		;POINTE A1 SUR ADRESSE ECRAN RAW
	JSR UNPACK			;VA A ROUTINE DE DECOMPACTAGE
					
	LEA SCOPPER+2,A1		;POINTE A1 SUR 1ER REGISTRE COULEUR
	JSR IFFCOULEUR			;VA A ROUTINE DE MISE EN PLACE COULEUR      
					
	BSR.L MET_ADRESSES		;MET ADRESSE IMAGE DANS NOUVELLE LISTE COPPER

WAIT9:
	BTST	#6,$BFE001		;ATTENDANT PRESSION SUR BOUTON GAUCHE SOURIS
	BNE.S	WAIT9			;SINON RETOURNE A WAIT2
					
	MOVE.L #FILEPIC9,FILE		;PLACE NOM DU FICHIER DANS FILE
	MOVE.L #IMAGE_IFF_PP,ADRESSE	;PLACE ADRESSE DE CHARGEMENT DANS ADRESSE
	JSR LOADING 			;VA A ROUTINE DE CHARGEMENT

	LEA IMAGE_IFF_PP,A2
	MOVE.L A2,A0
	ADD.L LONGUEUR,A0
	LEA IMAGE_IFF,A1
	JSR DECRUNCH
					
	MOVE.L	#IMAGE_IFF,A0		;POINTE A0 SUR ADRESSE INAGE IFF
	MOVE.L	#IMAGE,A1		;POINTE A1 SUR ADRESSE ECRAN RAW
	JSR UNPACK			;VA A ROUTINE DE DECOMPACTAGE
					
	LEA SCOPPER+2,A1		;POINTE A1 SUR 1ER REGISTRE COULEUR
	JSR IFFCOULEUR			;VA A ROUTINE DE MISE EN PLACE COULEUR      
					
	BSR.L MET_ADRESSES		;MET ADRESSE IMAGE DANS NOUVELLE LISTE COPPER



WAIT:
	CMP.B #$E0,$DFF006		;ATTENDANT 200 IEME LIGNE RASTER
	BNE.S WAIT			;SINON RETOURNE A WAIT
	
	BTST	#6,$BFE001		;ATTENDANT PRESSION SUR BOUTON GAUCHE SOURIS
	BNE.S	WAIT			;SINON RETOURNE A WAIT
	 				;SI OUI  FIN
END: 					;FIN:	
	BSR.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
;====================
FILEHD:		dc.l 0

DosBase:	dc.l 0
	
DosName:	dc.b 'dos.library',0

FilEPIC1:	dc.b 'PIC1_IFF.PP',0
FilEPIC2:	dc.b 'PIC2_IFF.PP',0
FilEPIC3:	dc.b 'PIC3_IFF.PP',0
FilEPIC4:	dc.b 'PIC4_IFF.PP',0
FilEPIC5:	dc.b 'PIC5_IFF.PP',0
FilEPIC6:	dc.b 'PIC6_IFF.PP',0
FilEPIC7:	dc.b 'PIC7_IFF.PP',0
FilEPIC8:	dc.b 'PIC8_IFF.PP',0
FilEPIC9:	dc.b 'PIC9_IFF.PP',0

	EVEN

file: 		dc.l 0

adresse: 	dc.l 0

LONGUEUR:	DC.L	0
	
;=====================
LOADING:
	MOVEM.L D0-D7/A0-A6,-(A7)

	MOVE.L EXECBASE,A6	;PLACE ADRESSE EXECBASE DANS A6
	LEA DOSNAME,A1		;POINTE A1 SUR NOM LIBRAIRIE
	JSR OPENLIBRARY(A6)	;OUVRE LIBRAIRIE
	MOVE.L D0,DOSBASE	;MET ADRESSE LIBRAIRIE DANS DOSBASE
	MOVE.L D0,A6		;MET ADRESSE LIBRAIRIE DANS A6

	MOVE.L #1005,D2		;1005 = FICHIER EXISTANT
	MOVE.L FILE,D1		;NOM DU FICHIER EN D1
	JSR OPEN(A6)		;OUVRE FICHIER
	MOVE.L D0,FILEHD	;HANDLE EN D0

	MOVE.L D0,D1		;HANDLE EN D1
	MOVE.L ADRESSE,D2	;ADRESSE DE LOAD
	MOVE.L #$FFFFF,D3	;LONGUEUR DU FICHIER
	JSR READ(A6)		;CHARGE FICHIER
	MOVE.L D0,LONGUEUR	;LONGUEUR REELLE DU FICHIER EN D0

	MOVE.L FILEHD,D1	;HANDLE EN D1
	JSR CLOSE(A6)		;FERME FICHIER

	MOVE.L EXECBASE,A6	;ADRESSE EXEC EN D6
	MOVE.L DOSBASE,A1	;ADRESSE DOS EN A1
	JSR CLOSELIBRARY(A6)	;FERME LIBRAIRIE DOS

	MOVEM.L (A7)+,D0-D7/A0-A6
RTS
;=====================
;   Decruncher for PowerPacker 
;
;	a2=debut fichier crunche
;	a1=debut buffer
;	d0=taille fichier crunche

DECRUNCH:

		MOVE.L	4(A2),D0
		BSR.S 	DECOMPACTE
		RTS

DECOMPACTE:	LEA 	MYBITSTABLE,A5
		MOVE.L 	D0,(A5)
		MOVE.L 	A1,A2
		MOVE.L 	-(A0),D5
		MOVEQ 	#0,D1
		MOVE.B 	D5,D1
		LSR.L 	#8,D5
		ADD.L 	D5,A1
		MOVE.L 	-(A0),D5
		LSR.L 	D1,D5
		MOVE.B 	#32,D7
		SUB.B 	D1,D7
LOOPCHECKCRUNCH:
		BSR.S 	READBIT
		TST.B 	D1
		BNE.S 	CRUNCHEDBYTES
NORMALBYTES:	MOVEQ 	#0,D2
READ2BITSROW:	MOVEQ 	#2,D0
		BSR.S 	READD1
		ADD.W 	D1,D2
		CMPI.W 	#3,D1
		BEQ.S 	READ2BITSROW
READNORMALBYTE:	MOVE.W 	#8,D0
		BSR.S 	READD1
		MOVE.B 	D1,-(A1)
		DBF 	D2,READNORMALBYTE
		CMPA.L 	A1,A2
		BCS.S 	CRUNCHEDBYTES
		RTS

CRUNCHEDBYTES:	MOVEQ 	#2,D0
		BSR.S 	READD1
		MOVEQ 	#0,D0
		MOVE.B 	(A5,D1.W),D0
		MOVE.L 	D0,D4
		MOVE.W 	D1,D2
		ADDQ.W 	#1,D2
		CMPI.W 	#4,D2
		BNE.S 	READOFFSET
		BSR.S 	READBIT
		MOVE.L 	D4,D0
		TST.B 	D1
		BNE.S 	LONGBLOCKOFFSET
		MOVEQ 	#7,D0
LONGBLOCKOFFSET:
		BSR.S 	READD1
		MOVE.W 	D1,D3
READ3BITSROW:	MOVEQ 	#3,D0
		BSR.S 	READD1
		ADD.W 	D1,D2
		CMPI.W 	#7,D1
		BEQ.S 	READ3BITSROW
		BRA.S 	DECRUNCHBLOCK
READOFFSET:	BSR.S 	READD1
		MOVE.W 	D1,D3
DECRUNCHBLOCK:	MOVE.B 	(A1,D3.W),D0
		MOVE.B 	D0,-(A1)
		DBF 	D2,DECRUNCHBLOCK
ENDOFLOOP:	CMPA.L 	A1,A2
		BCS.S 	LOOPCHECKCRUNCH
		RTS

READBIT:	MOVEQ 	#1,D0
READD1:		MOVEQ 	#0,D1
		SUBQ.W 	#1,D0
READBITS:	LSR.L 	#1,D5
		ROXL.L 	#1,D1
		SUBQ.B 	#1,D7
		BNE.S 	NO32READ
		MOVE.B 	#32,D7
		MOVE.L 	-(A0),D5
NO32READ:	DBF 	D0,READBITS
		RTS

MYBITSTABLE:	DC.B 	$09,$0A,$0B,$0B

;=====================
UNPACK:			;ROUTINE DE DECOMPACTAGE IFF
	ADD.L	#8,A0
	ADD.L	#4,A0
	MOVE.L	A0,BMHDCHUNK		
	MOVE.L	4(A0),D0
	ADD.L	D0,A0
	ADD.L	#8,A0
	MOVE.L	A0,CMAPCHUNK		

SEA1:	MOVE.L	4(A0),D0
	ADD.L	D0,A0
	ADD.L	#8,A0
	MOVE.L	#'BODY',D1
	CMP.L	(A0),D1
	BNE	SEA1
	MOVE.L	A0,BODYCHUNK		
	ADD.L	#4,A0
	MOVE.L	(A0),ANZAHL		
	ADD.L	#1,ANZAHL
	AND.L	#$FFFFFFFE,ANZAHL
	ADD.L	#4,A0			
	
	CLR.L	D3
SEA3:	MOVE.B	(A0)+,ZAEHLER
	CLR.L	D5
	MOVE.B	ZAEHLER,D5
	AND.B	#$80,D5
	BNE	SEA4
	
	CLR.L	D4
	MOVE.B	ZAEHLER,D4
SEA5:	MOVE.B	(A0)+,(A1)+
	ADD.L	#1,D3
	DBF	D4,SEA5
	SUB.L	#1,A0
	BRA	SEA6

SEA4:	NEG.B	ZAEHLER
	CLR.L	D0
	MOVE.B	ZAEHLER,D0
SEA2:	MOVE.B	(A0),(A1)+
	DBF	D0,SEA2
	
	ADD.L	#2,D3
SEA6:	MOVE.L	ANZAHL,D1
	CMP.L	D3,D1
	BLE	SEA99
	ADD.L	#1,A0
	BRA	SEA3

SEA99:	RTS

	EVEN

BMHDCHUNK:	DC.L	0

CMAPCHUNK:	DC.L	0

BODYCHUNK:	DC.L	0

ANZAHL:		DC.L	0

ANZAHL1:	DC.L	0

ZAEHLER:	DC.B	0

	EVEN

ENDBIS:
	RTS

IFFCOULEUR:			;MISE EN PLACE COULEURS DANS LISTE COPPER
	LEA IMAGE_IFF,A0
EVIENTA:
	CMP.L #"CMAP",(A0)+
	BNE EVIENTA
	ADD.L #$4,A0
	MOVE.W #31,D1	;32 COULEURS -1
COULEUR:
	CLR.L D0
	CLR.L D3
	MOVE.B (A0)+,D0
	LSL.W #4,D0
	ADD.B (A0)+,D3
	MOVE.B (A0)+,D0
	LSR.B #4,D0
	ADD.L D0,D3
	MOVE.W D3,(A1)
	ADD.L #4,A1
	DBRA D1,COULEUR
	RTS
;====================
MET_ADRESSES:				;CHARGE ADRESSE DE L'IMAGE DANS LA COPPER LIST
	MOVE.L #IMAGE,D0 		;MET ADRESSE DE L'IMAGE DANS D0 (MOT LONG =
					;PAR EXEMPLE $0005 0000 = D0
	MOVE.W D0,LO1			;MET $0000 DANS LO1
	SWAP D0				;INVERSE D0 = $0000 0005
	MOVE.W D0,HI1			;MET $0005 DANS HI1
	SWAP D0				;INVERSE D0 = $0005 0000
	ADD.L #40,D0			;AJOUTE LA LONGUEUR D'UNE LIGNE DANS D0
					;ET RECOMMENCE POUR LE PLAN SUIVANT
	MOVE.W D0,LO2
	SWAP D0
	MOVE.W D0,HI2
	SWAP D0
	ADD.L #40,D0
	
	MOVE.W D0,LO3
	SWAP D0
	MOVE.W D0,HI3
	SWAP D0
	ADD.L #40,D0
	
	MOVE.W D0,LO4
	SWAP D0
	MOVE.W D0,HI4
	SWAP D0
	ADD.L #40,D0
	
	MOVE.W D0,LO5
	SWAP D0
	MOVE.W D0,HI5
	
	RTS
;====================
	EVEN				;NOTRE LISTE COPPER
NEWCOPPER:   
	DC.W	$008E,$2981,$0090,$29D1	;DIMENSIONS DE L'ECRAN
	DC.W	$0092,$0038,$0094,$00D0

	;POINTEURS ADRESSE DES PLANS DE L'IMAGE

	DC.W $00E0
HI1:	DC.W 0				;PLAN 1		
	DC.W $00E2
LO1:	DC.W 0 
	DC.W $00E4
HI2:	DC.W 0				;PLAN 2
	DC.W $00E6
LO2:	DC.W 0
	DC.W $00E8
HI3:	DC.W 0				;PLAN 3
	DC.W $00EA
LO3:	DC.W 0
	DC.W $00EC
HI4:	DC.W 0				;PLAN 4
	DC.W $00EE
LO4:	DC.W 0 
	DC.W $00F0
HI5:	DC.W 0				;PLAN 5
	DC.W $00F2
LO5:	DC.W 0

	;REGISTRE POUR CHOISIR RESOLUTION	

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

	;8;BIT 15 HIRES		:0	HAUTE RESOLUTION  	NON = 0 
;5	;4;BIT 14 BPU2		:1      NBRE DE PLANS     	1   SI 1 = +4 PLANS
	;2;BIT 13 BPU1		:0	      5			0   SI 1 = +2 PLANS
	;1;BIT 12 BPU0		:1				1   SI 1 = +1 PLANS

	;8;BIT 11 HOMOD		:0	MODE HAM 		NON = 0
;2	;4;BIT 10 DBPLF		:0	DUAL PLAYFIELD		NON = 0
	;2;BIT 09 COLOR		:1	COULEURS  		OUI = 1
	;1;BIT 08 GAUD		:0

	;8;BIT 07 INUTILISE	:0				0
;0	;4;BIT 06 INUTILISE	:0				0
	;2;BIT 05 INUTILISE	:0				0
	;1;BIT 04 INUTILISE	:0				0

	;8;BIT 03 LPEN		:0	CRAYON OPTIQUE		NON = 0
;0	;4;BIT 02 LACE		:0	MODE INTERLACE		NON = 0
	;2;BIT 01 ERSY		:0	SYNCHRO EXTERNE		NON = 0
	;1;BIT 00 INUTILISE	:0				0
	

	;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,4*40	;MODULOS PLANS PAIRS
	DC.W 	$010A,4*40	;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

	SCOPPER:	

	DC.W	$0180,$0000	;COULEUR 00
	DC.W	$0182,$0000	;COULEUR 01
	DC.W	$0184,$0000	;COULEUR 02
	DC.W	$0186,$0000	;COULEUR 03
	DC.W	$0188,$0000	;COULEUR 04
	DC.W	$018A,$0000	;COULEUR 05
	DC.W	$018C,$0000	;COULEUR 06
	DC.W	$018E,$0000	;COULEUR 07
	DC.W	$0190,$0000	;COULEUR 08
	DC.W	$0192,$0000	;COULEUR 09
	DC.W	$0194,$0000	;COULEUR 10
	DC.W	$0196,$0000	;COULEUR 11
	DC.W	$0198,$0000	;COULEUR 12
	DC.W	$019A,$0000	;COULEUR 13
	DC.W	$019C,$0000	;COULEUR 14
	DC.W	$019E,$0000	;COULEUR 15
	DC.W	$01A0,$0000	;COULEUR 16	;LES COULEURS DE 16 A 31 SONT
	DC.W	$01A2,$0000	;COULEUR 17	;AUSSI CELLES DES SPRITES
	DC.W	$01A4,$0000	;COULEUR 18
	DC.W	$01A6,$0000	;COULEUR 19	;LES COULEURS 16 A 31 NE SONT
	DC.W	$01A8,$0000	;COULEUR 20	;PAS UTILISEES DANS LE MODE
	DC.W	$01AA,$0000	;COULEUR 21	;HOLD AND MODIFY (HAM)
	DC.W	$01AC,$0000	;COULEUR 22
	DC.W	$01AE,$0000	;COULEUR 23
	DC.W	$01B0,$0000	;COULEUR 24
	DC.W	$01B2,$0000	;COULEUR 25
	DC.W	$01B4,$0000	;COULEUR 26
	DC.W	$01B6,$0000	;COULEUR 27
	DC.W	$01B8,$0000	;COULEUR 28
	DC.W	$01BA,$0000	;COULEUR 29
	DC.W	$01BC,$0000	;COULEUR 30
	DC.W	$01BE,$0000	;COULEUR 31

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

	DC.W $FFDF,$FFFE

DC.L $FFFFFFFE 
EVEN

IMAGE_IFF_PP:	BLK.B	40000,0

IMAGE_IFF:	BLK.B	40000,0

IMAGE:  BLK.B 40*256*5,0 ;RESERVATION MEMOIRE POUR IMAGE

;DIMENSIONS DE L'IMAGE
;		320 PIXELS DE LARGE SOIT 40 MOTS
;		256 PIXELS DE HAUT
;		5 PLANS SOIT 32 COULEURS


FINDEMO:
