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

>EXTERN "IMAGEB.HI3",BITPLANE1

org $25000	;EMPLACEMENT EN MEMOIRE
load $25000	;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
;==================================
BITPLANE1=$35000
BITPLANE2=BITPLANE1+[80*256]
BITPLANE3=BITPLANE2+[80*256]

FINDATA=BITPLANE3+[80*256]
;==================================
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:
MOVE.W $DFF006,D0
AND.W #$FF00,D0
CMP.W #$FF00,D0
BNE.S 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)

BSR.L 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
;====================
FLAGSCROLL: DC.W 0
CP0: DC.W 0
CP1: DC.W 0
CP2: DC.W 0
CP3: DC.W 0
CP4: DC.W 0
CP5: DC.W 0
CP6: DC.W 0
EVEN
DELAY_A: DC.W 0
EVEN
SCROLLING:

BSR.L SCROLL0	;1/2

BSR.L SCROLL1	;1/3

BSR.L SCROLL3	;1 PIXELS

BSR.L SCROLL4	;2 PIXELS

BSR.L SCROLL5	;3 PIXELS	
BSR.L SCROLL5
BSR.L SCROLL5
	
BSR.L SCROLL10	;4

BSR.L SCROLL11	;5
BSR.L SCROLL11
BSR.L SCROLL11
BSR.L SCROLL11
BSR.L SCROLL11

BSR.L SCROLL12 	;6
BSR.L SCROLL12
BSR.L SCROLL12
BSR.L SCROLL12
BSR.L SCROLL12
BSR.L SCROLL12

BSR.L SCROLL13
BSR.L SCROLL13
BSR.L SCROLL13
BSR.L SCROLL13
BSR.L SCROLL13
BSR.L SCROLL13
BSR.L SCROLL13
BSR.L SCROLL13

RTS
;====================
SCROLL0:
ADDQ #1,CP0
CMP.W #2,CP0
BNE.L FINSCROLL0
MOVE.W #0,CP0
SUB.W #$11,DELAY6
SUB.W #$11,DELAY2
SUB.W #$11,DELAY0
CMP.W #-$11,DELAY0
BGT.L FINSCROLL0
MOVE.W #$FF,DELAY0
MOVE.W #$FF,DELAY6
MOVE.W #$FF,DELAY2
ADDQ #2,LO10
ADDQ #2,LO20
ADDQ #2,LO30
ADDQ #2,LO16
ADDQ #2,LO26
ADDQ #2,LO36
ADDQ #2,LO14
ADDQ #2,LO24
ADDQ #2,LO34
ADDQ #2,CPTSCROLL0
CMP.W #40,CPTSCROLL0
BNE.S FINSCROLL0
MOVE.W #0,CPTSCROLL0
SUB.W #40,LO10
SUB.W #40,LO20
SUB.W #40,LO30
SUB.W #40,LO16
SUB.W #40,LO26
SUB.W #40,LO36
SUB.W #40,LO14
SUB.W #40,LO24
SUB.W #40,LO34
FINSCROLL0: 
RTS
EVEN
CPTSCROLL0: DC.W 0
EVEN

;===================
SCROLL1:
ADDQ #1,CP1
CMP.W #3,CP1
BNE.S FINSCROLL1
MOVE.W #0,CP1

SUB.W #$11,DELAY1
CMP.W #-$11,DELAY1
BGT.S FINSCROLL1
MOVE.W #$FF,DELAY1
ADDQ #2,LO15
ADDQ #2,LO25
ADDQ #2,LO35
ADDQ #2,CPTSCROLL1
CMP.W #40,CPTSCROLL1
BNE.S FINSCROLL1
MOVE.W #0,CPTSCROLL1
SUB.W #40,LO15
SUB.W #40,LO25
SUB.W #40,LO35
FINSCROLL1: 

RTS
EVEN
CPTSCROLL1: DC.W 0
EVEN
;===================

SCROLL3:
SUB.W #$11,DELAY7
SUB.W #$11,DELAY3
CMP.W #-$11,DELAY3
BGT.S FINSCROLL3
MOVE.W #$FF,DELAY3
MOVE.W #$FF,DELAY7
ADDQ #2,LO13
ADDQ #2,LO23
ADDQ #2,LO33
ADDQ #2,LO17
ADDQ #2,LO27
ADDQ #2,LO37
ADDQ #2,CPTSCROLL3
CMP.W #40,CPTSCROLL3
BNE.S FINSCROLL3
MOVE.W #0,CPTSCROLL3
SUB.W #40,LO13
SUB.W #40,LO23
SUB.W #40,LO33
SUB.W #40,LO17
SUB.W #40,LO27
SUB.W #40,LO37
FINSCROLL3: 
RTS
EVEN
CPTSCROLL3: DC.W 0
EVEN
;===================
SCROLL4:
SUB.W #$22,DELAY8
SUB.W #$22,DELAY4
CMP.W #0,DELAY4
BGT.S FINSCROLL4
MOVE.W #$FF,DELAY4
MOVE.W #$FF,DELAY8
ADDQ #2,LO12
ADDQ #2,LO22
ADDQ #2,LO32
ADDQ #2,LO18
ADDQ #2,LO28
ADDQ #2,LO38
ADDQ #2,CPTSCROLL4
CMP.W #40,CPTSCROLL4
BNE.S FINSCROLL4
MOVE.W #0,CPTSCROLL4
SUB.W #40,LO12
SUB.W #40,LO22
SUB.W #40,LO32
SUB.W #40,LO18
SUB.W #40,LO28
SUB.W #40,LO38
FINSCROLL4: 
RTS
EVEN
CPTSCROLL4: DC.W 0
EVEN
;===================
SCROLL5:
SUB.W #$11,DELAY9
SUB.W #$11,DELAY5
CMP.W #-$11,DELAY5
BGT.S FINSCROLL5
MOVE.W #$FF,DELAY5
MOVE.W #$FF,DELAY9
ADDQ #2,LO11
ADDQ #2,LO21
ADDQ #2,LO31
ADDQ #2,LO19
ADDQ #2,LO29
ADDQ #2,LO39
ADDQ #2,CPTSCROLL5
CMP.W #40,CPTSCROLL5
BNE.S FINSCROLL5
MOVE.W #0,CPTSCROLL5
SUB.W #40,LO11
SUB.W #40,LO21
SUB.W #40,LO31
SUB.W #40,LO19
SUB.W #40,LO29
SUB.W #40,LO39
FINSCROLL5: 
RTS
EVEN
CPTSCROLL5: DC.W 0
EVEN
;===================
SCROLL10:
SUB.W #$44,DELAY10
CMP.W #0,DELAY10
BGT.S FINSCROLL10
MOVE.W #$FF,DELAY10
ADDQ #2,LO110
ADDQ #2,LO210
ADDQ #2,LO310
ADDQ #2,CPTSCROLL10
CMP.W #40,CPTSCROLL10
BNE.S FINSCROLL10
MOVE.W #0,CPTSCROLL10
SUB.W #40,LO110
SUB.W #40,LO210
SUB.W #40,LO310
FINSCROLL10: 
RTS
EVEN
CPTSCROLL10: DC.W 0
EVEN
;===================
SCROLL11:
SUB.W #$11,DELAY11
CMP.W #-$11,DELAY11
BGT.S FINSCROLL11
MOVE.W #$FF,DELAY11
ADDQ #2,LO111
ADDQ #2,LO211
ADDQ #2,LO311
ADDQ #2,CPTSCROLL11
CMP.W #40,CPTSCROLL11
BNE.S FINSCROLL11
MOVE.W #0,CPTSCROLL11
SUB.W #40,LO111
SUB.W #40,LO211
SUB.W #40,LO311
FINSCROLL11: 
RTS
EVEN
CPTSCROLL11: DC.W 0
EVEN
;===================
SCROLL12:
SUB.W #$11,DELAY12
CMP.W #-$11,DELAY12
BGT.S FINSCROLL12
MOVE.W #$FF,DELAY12
ADDQ #2,LO112
ADDQ #2,LO212
ADDQ #2,LO312
ADDQ #2,CPTSCROLL12
CMP.W #40,CPTSCROLL12
BNE.S FINSCROLL12
MOVE.W #0,CPTSCROLL12
SUB.W #40,LO112
SUB.W #40,LO212
SUB.W #40,LO312
FINSCROLL12: 
RTS
EVEN
CPTSCROLL12: DC.W 0
EVEN
;===================
SCROLL13:
SUB.W #$11,DELAY13
CMP.W #-$11,DELAY13
BGT.S FINSCROLL13
MOVE.W #$FF,DELAY13
ADDQ #2,LO113
ADDQ #2,LO213
ADDQ #2,LO313
ADDQ #2,CPTSCROLL13
CMP.W #40,CPTSCROLL13
BNE.S FINSCROLL13
MOVE.W #0,CPTSCROLL13
SUB.W #40,LO113
SUB.W #40,LO213
SUB.W #40,LO313
FINSCROLL13: 
RTS
EVEN
CPTSCROLL13: DC.W 0
EVEN
;======================
EVEN				;NOTRE LISTE COPPER
NEWCOPPER:   

DC.W $008E,$2881,$0090,$28c1
DC.W $0092,$0030
DC.W $0094,$00D0

DC.W $100,0
DC.W $104,0

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

DC.W $0180,$0000	;COULEURS
DC.W $0182,$0CCC
DC.W $0184,$0BBB
DC.W $0186,$0AAA
DC.W $0188,$0999
DC.W $018A,$0888
DC.W $018C,$0777
DC.W $018E,$0666

DC.W $102,0		;DECALAGE A 0

DC.W $2901,$FFFE,$100,0	;RESOLUTION A 0

DC.W $108,40-2	;MODULO IMAGE 
DC.W $10A,40-2	;MODULO IMAGE 

DC.W $102
DELAY5: DC.W $FF	

	DC.W $00E0,	BITPLANE1/65536
	DC.W $00E2
LO11: 	DC.W 		BITPLANE1 & 65535 
	DC.W $00E4,	BITPLANE2/65536
	DC.W $00E6
LO21: 	DC.W 		BITPLANE2 & 65535
	DC.W $00E8,	BITPLANE3/65536  
	DC.W $00EA
LO31: 	DC.W 		BITPLANE3 & 65535


DC.W $2901+[$100*1],$FFFE,$100,$3200	;RESOLUTION DUAL PLAYFIELD


DC.W $2901+[$100*28],$FFFE,$102
DELAY4: DC.W $FF

	DC.W $00E0,BITPLANE1+[80*28]/65536			
	DC.W $00E2
LO12: 	DC.W BITPLANE1+[80*28] & 65535 
	DC.W $00E4,BITPLANE2+[80*28]/65536
	DC.W $00E6
LO22: 	DC.W BITPLANE2+[80*28] & 65535
	DC.W $00E8,BITPLANE3+[80*28]/65536  
	DC.W $00EA
LO32: 	DC.W BITPLANE3+[80*28] & 65535

DC.W $2901+[$100*70],$FFFE,$102
DELAY3: DC.W $FF

	DC.W $00E0,BITPLANE1+[80*70]/65536			
	DC.W $00E2
LO13: 	DC.W BITPLANE1+[80*70] & 65535 
	DC.W $00E4,BITPLANE2+[80*70]/65536
	DC.W $00E6
LO23: 	DC.W BITPLANE2+[80*70] & 65535
	DC.W $00E8,BITPLANE3+[80*70]/65536  
	DC.W $00EA
LO33: 	DC.W BITPLANE3+[80*70] & 65535

DC.W $2901+[$100*94],$FFFE,$102
DELAY2: DC.W $fF

	DC.W $00E0,BITPLANE1+[80*94]/65536			
	DC.W $00E2
LO14: 	DC.W BITPLANE1+[80*94] & 65535 
	DC.W $00E4,BITPLANE2+[80*94]/65536
	DC.W $00E6
LO24: 	DC.W BITPLANE2+[80*94] & 65535
	DC.W $00E8,BITPLANE3+[80*94]/65536  
	DC.W $00EA
LO34: 	DC.W BITPLANE3+[80*94] & 65535

DC.W $2901+[$100*103],$FFFE,$102
DELAY1: DC.W $FF

	DC.W $00E0,BITPLANE1+[80*103]/65536			
	DC.W $00E2
LO15: 	DC.W BITPLANE1+[80*103] & 65535 
	DC.W $00E4,BITPLANE2+[80*103]/65536
	DC.W $00E6
LO25: 	DC.W BITPLANE2+[80*103] & 65535
	DC.W $00E8,BITPLANE3+[80*103]/65536  
	DC.W $00EA
LO35: 	DC.W BITPLANE3+[80*103] & 65535


DC.W $2901+[$100*110],$FFFE,$102
DELAY0: DC.W $FF

	DC.W $00E0,BITPLANE1+[80*110]/65536			
	DC.W $00E2
LO10: 	DC.W BITPLANE1+[80*110] & 65535 
	DC.W $00E4,BITPLANE2+[80*110]/65536
	DC.W $00E6
LO20: 	DC.W BITPLANE2+[80*110] & 65535
	DC.W $00E8,BITPLANE3+[80*110]/65536  
	DC.W $00EA
LO30: 	DC.W BITPLANE3+[80*110] & 65535


DC.W $2901+[$100*193],$FFFE,$102
DELAY6: DC.W $FF

	DC.W $00E0,BITPLANE1+[80*193]/65536
	DC.W $00E2
LO16: 	DC.W BITPLANE1+[80*193] & 65535 
	DC.W $00E4,BITPLANE2+[80*193]/65536
	DC.W $00E6
LO26: 	DC.W BITPLANE2+[80*193] & 65535
	DC.W $00E8,BITPLANE3+[80*193]/65536
	DC.W $00EA
LO36: 	DC.W BITPLANE3+[80*193] & 65535


DC.W $2901+[$100*196],$FFFE,$102
DELAY7: DC.W $FF

	DC.W $00E0,BITPLANE1+[80*196]/65536
	DC.W $00E2
LO17: 	DC.W BITPLANE1+[80*196] & 65535 
	DC.W $00E4,BITPLANE2+[80*196]/65536
	DC.W $00E6
LO27: 	DC.W BITPLANE2+[80*196] & 65535
	DC.W $00E8,BITPLANE3+[80*196]/65536
	DC.W $00EA
LO37: 	DC.W BITPLANE3+[80*196] & 65535

DC.W $2901+[$100*199],$FFFE,$102
DELAY8: DC.W $FF

	DC.W $00E0,BITPLANE1+[80*199]/65536
	DC.W $00E2
LO18: 	DC.W BITPLANE1+[80*199] & 65535 
	DC.W $00E4,BITPLANE2+[80*199]/65536
	DC.W $00E6
LO28: 	DC.W BITPLANE2+[80*199] & 65535
	DC.W $00E8,BITPLANE3+[80*199]/65536
	DC.W $00EA
LO38: 	DC.W BITPLANE3+[80*199] & 65535


DC.W $2901+[$100*204],$FFFE,$102
DELAY9: DC.W $FF

	DC.W $00E0,BITPLANE1+[80*204]/65536
	DC.W $00E2
LO19: 	DC.W BITPLANE1+[80*204] & 65535 
	DC.W $00E4,BITPLANE2+[80*204]/65536
	DC.W $00E6
LO29: 	DC.W BITPLANE2+[80*204] & 65535
	DC.W $00E8,BITPLANE3+[80*204]/65536
	DC.W $00EA
LO39: 	DC.W BITPLANE3+[80*204] & 65535

DC.W $2901+[$100*210],$FFFE,$102
DELAY10: DC.W $FF

	DC.W $00E0,BITPLANE1+[80*210]/65536
	DC.W $00E2
LO110: 	DC.W BITPLANE1+[80*210] & 65535 
	DC.W $00E4,BITPLANE2+[80*210]/65536
	DC.W $00E6
LO210: 	DC.W BITPLANE2+[80*210] & 65535
	DC.W $00E8,BITPLANE3+[80*210]/65536
	DC.W $00EA
LO310: 	DC.W BITPLANE3+[80*210] & 65535

DC.W $FFDF,$FFFE


DC.W $2901+[$100*216],$FFFE,$102
DELAY11: DC.W $FF

	DC.W  $00E0,BITPLANE1+[80*216]/65536
	DC.W  $00E2
LO111: 	DC.W  BITPLANE1+[80*216] & 65535 
	DC.W  $00E4,BITPLANE2+[80*216]/65536
	DC.W  $00E6
LO211: 	DC.W  BITPLANE2+[80*216] & 65535
	DC.W  $00E8,BITPLANE3+[80*216]/65536
	DC.W  $00EA
LO311: 	DC.W  BITPLANE3+[80*216] & 65535


DC.W $2901+[$100*225],$FFFE,$102
DELAY12: DC.W $FF

	DC.W  $00E0,BITPLANE1+[80*225]/65536
	DC.W  $00E2
LO112: 	DC.W  BITPLANE1+[80*225] & 65535 
	DC.W  $00E4,BITPLANE2+[80*225]/65536
	DC.W  $00E6
LO212: 	DC.W  BITPLANE2+[80*225] & 65535
	DC.W  $00E8,BITPLANE3+[80*225]/65536
	DC.W  $00EA
LO312: 	DC.W  BITPLANE3+[80*225] & 65535

DC.W $2901+[$100*240],$FFFE,$102
DELAY13: DC.W $FF

	DC.W  $00E0,BITPLANE1+[80*240]/65536
	DC.W  $00E2
LO113: 	DC.W  BITPLANE1+[80*240] & 65535 
	DC.W  $00E4,BITPLANE2+[80*240]/65536
	DC.W  $00E6
LO213: 	DC.W  BITPLANE2+[80*240] & 65535
	DC.W  $00E8,BITPLANE3+[80*240]/65536
	DC.W  $00EA
LO313: 	DC.W  BITPLANE3+[80*240] & 65535

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