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

>EXTERN "PIC_RAW",IMAGE

org $30000	;EMPLACEMENT EN MEMOIRE
load $30000	;DE NOTRE PROGRAMME

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

;=====================================================================
BLTCON0=$DFF040		
BLTCON1=$DFF042
BLTAFWM=$DFF044
BLTALWM=$DFF046
BLTCPTH=$DFF048
BLTCPTL=$DFF04A
BLTBPTH=$DFF04C
BLTBPTL=$DFF04E
BLTAPTH=$DFF050
BLTAPTL=$DFF052
BLTDPTH=$DFF054
BLTDPTL=$DFF056
BLTSIZE=$DFF058
BLTCMOD=$DFF060
BLTBMOD=$DFF062
BLTAMOD=$DFF064
BLTDMOD=$DFF066
BLTCDAT=$DFF070
BLTBDAT=$DFF072
BLTADAT=$DFF074
DMACONR=$DFF002
;==================================
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

MOVE.L EXECBASE,A6		;CHARGE ADRESSE EXECBASE DANS A6

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

BSR.L	DEPLACE_BARRE

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

MOVE.W DEPL,D0

ADD.W D0,BARRE1
ADD.W D0,BARRE2
ADD.W D0,BARRE3
ADD.W D0,BARRE4
ADD.W D0,BARRE5
ADD.W D0,BARRE6
ADD.W D0,BARRE7
ADD.W D0,BARRE8
ADD.W D0,BARRE9
ADD.W D0,BARREa
ADD.W D0,BARREb
ADD.W D0,BARREc
ADD.W D0,BARREd
ADD.W D0,BARREe
ADD.W D0,BARREf
ADD.W D0,BARREg
ADD.W D0,BARREh
ADD.W D0,BARREi
ADD.W D0,BARREj
ADD.W D0,BARREk
ADD.W D0,BARREl
ADD.W D0,BARREm
ADD.W D0,BARREn
ADD.W D0,BARREo

CMP.W #$ffDF,BARREo
BNE OK
NEG.W	DEPL
OK:

CMP.W #$29DF,BARRE1
BNE OK2
NEG.W	DEPL
OK2:

RTS

DEPL:	dc.w	$100

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

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

	;POINTEURS ADRESSE DES PLANS DE L'IMAGE

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


	;REGISTRE POUR CHOISIR RESOLUTION	

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

	;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,$000	;MODULOS PLANS PAIRS
	DC.W 	$010A,$000	;MODULOS PLANS IMPAIRS

	;POINTEURS DES SPRITES - MIS A 0 SI PAS DE SPRITES

	DC.W	$0120,$0000,$0122,$0000
	DC.W	$0124,$0000,$0126,$0000
	DC.W	$0128,$0000,$012A,$0000	;PAS DE SPRITES
	DC.W	$012C,$0000,$012E,$0000
	DC.W	$0130,$0000,$0132,$0000
	DC.W	$0134,$0000,$0136,$0000
	DC.W	$0138,$0000,$013A,$0000
	DC.W	$013C,$0000,$013E,$0000

	;REGISTRES DES COULEURS

	DC.W	$0180,$0000	;COULEUR 00
	DC.W	$0182,$0024	;COULEUR 01
	DC.W	$0184,$0135	;COULEUR 02
	DC.W	$0186,$0246	;COULEUR 03
	DC.W	$0188,$0357	;COULEUR 04
	DC.W	$018A,$0468	;COULEUR 05
	DC.W	$018C,$0579	;COULEUR 06
	DC.W	$018E,$068a	;COULEUR 07
	DC.W	$0190,$079b	;COULEUR 08
	DC.W	$0192,$08ac	;COULEUR 09
	DC.W	$0194,$09bd	;COULEUR 10
	DC.W	$0196,$0ace	;COULEUR 11
	DC.W	$0198,$0cdf	;COULEUR 12
	DC.W	$019A,$0eef	;COULEUR 13
	DC.W	$019C,$0800	;COULEUR 14
	DC.W	$019E,$0a00	;COULEUR 15
	DC.W	$01A0,$0c20	;COULEUR 16	;LES COULEURS DE 16 A 31 SONT
	DC.W	$01A2,$0e40	;COULEUR 17	;AUSSI CELLES DES SPRITES
	DC.W	$01A4,$0200	;COULEUR 18
	DC.W	$01A6,$0400	;COULEUR 19	;LES COULEURS 16 A 31 NE SONT
	DC.W	$01A8,$0600	;COULEUR 20	;PAS UTILISEES DANS LE MODE
	DC.W	$01AA,$0810	;COULEUR 21	;HOLD AND MODIFY (HAM)
	DC.W	$01AC,$0920	;COULEUR 22
	DC.W	$01AE,$0a30	;COULEUR 23
	DC.W	$01B0,$0b40	;COULEUR 24
	DC.W	$01B2,$0c51	;COULEUR 25
	DC.W	$01B4,$0d62	;COULEUR 26
	DC.W	$01B6,$0e73	;COULEUR 27
	DC.W	$01B8,$0f84	;COULEUR 28
	DC.W	$01BA,$0f95	;COULEUR 29
	DC.W	$01BC,$0fa6	;COULEUR 30
	DC.W	$01BE,$0fb7	;COULEUR 31

BARRE1:	DC.W	$30DF,$FFFE,$0108,   0,$010A,   0
BARRE2:	DC.W	$32DF,$FFFE,$0108,  80,$010A,  80
BARRE3:	DC.W	$34DF,$FFFE,$0108, -40,$010A, -40
BARRE4:	DC.W	$36DF,$FFFE,$0108, -80,$010A, -80
BARRE5:	DC.W	$38DF,$FFFE,$0108,  40,$010A,  40
BARRE6:	DC.W	$3aDF,$FFFE,$0108, -80,$010A, -80
BARRE7:	DC.W	$3cDF,$FFFE,$0108,   0,$010A,   0
BARRE8:	DC.W	$3eDF,$FFFE,$0108,  40,$010A,  40
BARRE9:	DC.W	$40DF,$FFFE,$0108,  80,$010A,  80
BARREa:	DC.W	$42DF,$FFFE,$0108, 120,$010A, 120
BARREb:	DC.W	$44DF,$FFFE,$0108,-120,$010A,-120
BARREc:	DC.W	$46DF,$FFFE,$0108, -40,$010A, -40  
BARREd:	DC.W	$48DF,$FFFE,$0108,   0,$010A,   0
BARREe:	DC.W	$4aDF,$FFFE,$0108,  80,$010A,  80
BARREf:	DC.W	$4cDF,$FFFE,$0108, -40,$010A, -40
BARREg:	DC.W	$4eDF,$FFFE,$0108, -80,$010A, -80
BARREh:	DC.W	$50DF,$FFFE,$0108,  40,$010A,  40
BARREi:	DC.W	$52DF,$FFFE,$0108, -80,$010A, -80
BARREj:	DC.W	$54DF,$FFFE,$0108,   0,$010A,   0
BARREk:	DC.W	$56DF,$FFFE,$0108,  40,$010A,  40
BARREl:	DC.W	$58DF,$FFFE,$0108,  80,$010A,  80
BARREm:	DC.W	$5aDF,$FFFE,$0108, 120,$010A, 120
BARREn:	DC.W	$5cDF,$FFFE,$0108,-120,$010A,-120
BARREo:	DC.W	$5eDF,$FFFE,$0108,   0,$010A,   0  


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

	DC.W $FFDF,$FFFE

DC.L $FFFFFFFE ;FIN LISTE COPPER
EVEN

IMAGE:	BLK.B	256*5*40

FINDEMO:
