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

>EXTERN "PIC_RAW",IMAGE
>EXTERN "TAB",TAB

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

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

;=====================
BLTCON0=$DFF040		
BLTCON1=$DFF042
BLTAFWM=$DFF044
BLTALWM=$DFF046
BLTCPTH=$DFF048
BLTCPTL=$DFF04A
BLTBPTH=$DFF04C
BLTBPTL=$DFF04E
BLTAPTH=$DFF050
BLTAPTL=$DFF052
BLTDPTH=$DFF054
BLTDPTL=$DFF056
BLTSIZE=$DFF058
BLTCMOD=$DFF060
BLTBMOD=$DFF062
BLTAMOD=$DFF064
BLTDMOD=$DFF066
BLTCDAT=$DFF070
BLTBDAT=$DFF072
BLTADAT=$DFF074
DMACONR=$DFF002
;==================================
IMAGE=$40000			;EMPLACEMENT DE L'IMAGE
				;320 * 256 EN 5 PLANS
FINDATA=IMAGE+[40*256*5]			
;==================================
START:    
MOVEM.L D0-D7/A0-A6,-(A7)	;SAUVE REGISTRES
MOVE.L EXECBASE,A6		;CHARGE ADRESSE EXECBASE DANS A6
JSR FORBID(A6)    		;SAUTE SOUS PROGRAMME: INTERDIT MULTITACHE
JSR OPENLIB  			;SAUTE SOUS PROGRAMME: OUVERTURE LIBRAIRIES


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

WAIT:
CMP.B #$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)

BSR.L ROTATION_IMAGE		;VA A ROUTINE DE ROTATION IMAGE

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
;====================
ROTATION_IMAGE:
	MOVE.L	POINTEUR,A0		; POINTEUR OK
	LEA	LISTEWAIT,A1		; DEBUT LISTE WAIT
	MOVE.W	#99,D0			; NOMBRE DE LIGNES - 1
ALAIN:					; 0: YY01 FFFE    WAIT INSTR
					; 6: 0108 MODULO  MOVE INSTR
					; 
	MOVE.W	(A0)+,D5		; MET VALEUR DANS D5
	MOVE.W  D5,6(A1)		; MET VALEUR DANS LISTEWAIT+6
	MOVE.W  D5,10(A1)		; MET VALEUR DANS LISTEWAIT+10

	ADD.W 	#12,A1			; ON AJOUTE 12

	DBF D0,ALAIN			; -1 A D0 SI PAS = 0
					; RETOUR A ALAIN

	MOVE.W	(A0),D0			; COMPARE SI FIN MODULO
	CMP.W	#-1,D0			; EST EGAL A  -1 
	BNE.S	ALAIN2			; SINON ON SAUVE POINTEUR
	LEA	TAB,A0			; SINON ON REMET A ZERO
ALAIN2:	MOVE.L	A0,POINTEUR		; SAUVE POINTEUR
	RTS				; AU REVOIR   

EVEN
POINTEUR:   DC.L TAB
EVEN

;====================
EVEN				;NOTRE LISTE COPPER
NEWCOPPER:   
	DC.W	$008E,$3261	;DIMENSIONS DE L'ECRAN
	DC.W	$0090,$32e1	

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

	;REGISTRE POUR CHOISIR RESOLUTION	

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

	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

	DC.W	$0102,$0000

	;PRIORITE DES PLANS ET SPRITES - INUTILISE ICI

	DC.W 	$0104,$0000

	;MODULOS DES PLANS

	DC.W	$0108,0		;MODULOS PLANS PAIRS   
	DC.W 	$010A,0		;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	;SEULES LES 4 PREMIERES
	DC.W	$0182,$05e0	;COULEUR 01	;COULEURS SONT UTILISEES
	DC.W	$0184,$05d0	;COULEUR 02
	DC.W	$0186,$04c0	;COULEUR 03
	DC.W	$0188,$04b0	;COULEUR 04
	DC.W	$018A,$04a0	;COULEUR 05
	DC.W	$018C,$0390	;COULEUR 06
	DC.W	$018E,$0380	;COULEUR 07
	DC.W	$0190,$0270	;COULEUR 08
	DC.W	$0192,$0260	;COULEUR 09
	DC.W	$0194,$0250	;COULEUR 10
	DC.W	$0196,$0140	;COULEUR 11
	DC.W	$0198,$0130	;COULEUR 12
	DC.W	$019A,$0120	;COULEUR 13
	DC.W	$019C,$0010	;COULEUR 14
	DC.W	$019E,$0000	;COULEUR 15
	DC.W	$01A0,$0002	;COULEUR 16	;LES COULEURS DE 16 A 31 SONT
	DC.W	$01A2,$0004	;COULEUR 17	;AUSSI CELLES DES SPRITES
	DC.W	$01A4,$0006	;COULEUR 18
	DC.W	$01A6,$0007	;COULEUR 19	;LES COULEURS 16 A 31 NE SONT
	DC.W	$01A8,$0009	;COULEUR 20	;PAS UTILISEES DANS LE MODE
	DC.W	$01AA,$000b	;COULEUR 21	;HOLD AND MODIFY (HAM)
	DC.W	$01AC,$000d	;COULEUR 22
	DC.W	$01AE,$000f	;COULEUR 23
	DC.W	$01B0,$0f00	;COULEUR 24
	DC.W	$01B2,$0d00	;COULEUR 25
	DC.W	$01B4,$0c00	;COULEUR 26
	DC.W	$01B6,$0a00	;COULEUR 27
	DC.W	$01B8,$0900	;COULEUR 28
	DC.W	$01BA,$0700	;COULEUR 29
	DC.W	$01BC,$0600	;COULEUR 30
	DC.W	$01BE,$0400	;COULEUR 31

LISTEWAIT:

dc.w $8101,$fffe,$0108,$000,$010A,$0000	;0
dc.w $8201,$fffe,$0108,$000,$010A,$0000
dc.w $8301,$fffe,$0108,$000,$010A,$0000
dc.w $8401,$fffe,$0108,$000,$010A,$0000
dc.w $8501,$fffe,$0108,$000,$010A,$0000
dc.w $8601,$fffe,$0108,$000,$010A,$0000	;5
dc.w $8701,$fffe,$0108,$000,$010A,$0000
dc.w $8801,$fffe,$0108,$000,$010A,$0000
dc.w $8901,$fffe,$0108,$000,$010A,$0000
dc.w $8a01,$fffe,$0108,$000,$010A,$0000
dc.w $8b01,$fffe,$0108,$000,$010A,$0000	;10
dc.w $8c01,$fffe,$0108,$000,$010A,$0000
dc.w $8d01,$fffe,$0108,$000,$010A,$0000
dc.w $8e01,$fffe,$0108,$000,$010A,$0000
dc.w $8f01,$fffe,$0108,$000,$010A,$0000
dc.w $9001,$fffe,$0108,$000,$010A,$0000	;15
dc.w $9101,$fffe,$0108,$000,$010A,$0000
dc.w $9201,$fffe,$0108,$000,$010A,$0000
dc.w $9301,$fffe,$0108,$000,$010A,$0000
dc.w $9401,$fffe,$0108,$000,$010A,$0000
dc.w $9501,$fffe,$0108,$000,$010A,$0000	;20
dc.w $9601,$fffe,$0108,$000,$010A,$0000
dc.w $9701,$fffe,$0108,$000,$010A,$0000
dc.w $9801,$fffe,$0108,$000,$010A,$0000
dc.w $9901,$fffe,$0108,$000,$010A,$0000
dc.w $9a01,$fffe,$0108,$000,$010A,$0000	;25
dc.w $9b01,$fffe,$0108,$000,$010A,$0000
dc.w $9c01,$fffe,$0108,$000,$010A,$0000
dc.w $9d01,$fffe,$0108,$000,$010A,$0000
dc.w $9e01,$fffe,$0108,$000,$010A,$0000
dc.w $9f01,$fffe,$0108,$000,$010A,$0000	;30
dc.w $A001,$fffe,$0108,$000,$010A,$0000
dc.w $A101,$fffe,$0108,$000,$010A,$0000
dc.w $A201,$fffe,$0108,$000,$010A,$0000
dc.w $A301,$fffe,$0108,$000,$010A,$0000
dc.w $A401,$fffe,$0108,$000,$010A,$0000	;35
dc.w $A501,$fffe,$0108,$000,$010A,$0000
dc.w $A601,$fffe,$0108,$000,$010A,$0000
dc.w $A701,$fffe,$0108,$000,$010A,$0000
dc.w $A801,$fffe,$0108,$000,$010A,$0000
dc.w $A901,$fffe,$0108,$000,$010A,$0000	;40
dc.w $Aa01,$fffe,$0108,$000,$010A,$0000
dc.w $Ab01,$fffe,$0108,$000,$010A,$0000
dc.w $Ac01,$fffe,$0108,$000,$010A,$0000
dc.w $Ad01,$fffe,$0108,$000,$010A,$0000
dc.w $Ae01,$fffe,$0108,$000,$010A,$0000	;45
dc.w $Af01,$fffe,$0108,$000,$010A,$0000
dc.w $B001,$fffe,$0108,$000,$010A,$0000
dc.w $B101,$fffe,$0108,$000,$010A,$0000
dc.w $B201,$fffe,$0108,$000,$010A,$0000
dc.w $B301,$fffe,$0108,$000,$010A,$0000	;50
dc.w $B401,$fffe,$0108,$000,$010A,$0000
dc.w $B501,$fffe,$0108,$000,$010A,$0000
dc.w $B601,$fffe,$0108,$000,$010A,$0000
dc.w $B701,$fffe,$0108,$000,$010A,$0000
dc.w $B801,$fffe,$0108,$000,$010A,$0000	;55
dc.w $B901,$fffe,$0108,$000,$010A,$0000
dc.w $Ba01,$fffe,$0108,$000,$010A,$0000
dc.w $Bb01,$fffe,$0108,$000,$010A,$0000
dc.w $Bc01,$fffe,$0108,$000,$010A,$0000
dc.w $Bd01,$fffe,$0108,$000,$010A,$0000	;60
dc.w $Be01,$fffe,$0108,$000,$010A,$0000
dc.w $Bf01,$fffe,$0108,$000,$010A,$0000
dc.w $C001,$fffe,$0108,$000,$010A,$0000
dc.w $C101,$fffe,$0108,$000,$010A,$0000
dc.w $C201,$fffe,$0108,$000,$010A,$0000	;65
dc.w $C301,$fffe,$0108,$000,$010A,$0000
dc.w $C401,$fffe,$0108,$000,$010A,$0000
dc.w $C501,$fffe,$0108,$000,$010A,$0000
dc.w $C601,$fffe,$0108,$000,$010A,$0000
dc.w $C701,$fffe,$0108,$000,$010A,$0000	;70
dc.w $C801,$fffe,$0108,$000,$010A,$0000
dc.w $C901,$fffe,$0108,$000,$010A,$0000
dc.w $Ca01,$fffe,$0108,$000,$010A,$0000
dc.w $Cb01,$fffe,$0108,$000,$010A,$0000
dc.w $Cc01,$fffe,$0108,$000,$010A,$0000	;75
dc.w $Cd01,$fffe,$0108,$000,$010A,$0000
dc.w $Ce01,$fffe,$0108,$000,$010A,$0000
dc.w $Cf01,$fffe,$0108,$000,$010A,$0000
dc.w $D001,$fffe,$0108,$000,$010A,$0000
dc.w $D101,$fffe,$0108,$000,$010A,$0000	;80
dc.w $D201,$fffe,$0108,$000,$010A,$0000
dc.w $D301,$fffe,$0108,$000,$010A,$0000
dc.w $D401,$fffe,$0108,$000,$010A,$0000
dc.w $D501,$fffe,$0108,$000,$010A,$0000
dc.w $D601,$fffe,$0108,$000,$010A,$0000	;85
dc.w $D701,$fffe,$0108,$000,$010A,$0000
dc.w $D801,$fffe,$0108,$000,$010A,$0000
dc.w $D901,$fffe,$0108,$000,$010A,$0000
dc.w $Da01,$fffe,$0108,$000,$010A,$0000
dc.w $Db01,$fffe,$0108,$000,$010A,$0000	;90
dc.w $dc01,$fffe,$0108,$000,$010A,$0000	
dc.w $dd01,$fffe,$0108,$000,$010A,$0000
dc.w $de01,$fffe,$0108,$000,$010A,$0000
dc.w $df01,$fffe,$0108,$000,$010A,$0000
dc.w $e001,$fffe,$0108,$000,$010A,$0000 ;95
dc.w $e101,$fffe,$0108,$000,$010A,$0000	
dc.w $e201,$fffe,$0108,$000,$010A,$0000
dc.w $e301,$fffe,$0108,$000,$010A,$0000
dc.w $e401,$fffe,$0108,$000,$010A,$0000

dc.w $e501,$fffe,$0100,$0000		;100

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

	DC.W $FFDF,$FFFE


DC.L $FFFFFFFE ;FIN LISTE COPPER
;=================
EVEN	;TANLES DES VALEURS MODULOS
TAB: BLK.B 16000,0
DC.W -1
EVEN
;=================
FINDEMO:
