;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
;==================================
IMAGE=$60000			;L'IMAGE SE TROUVE A $40000
				;5 PLANS 704 PIXELS DE LARGE
				;SUR 256 PIXELS DE HAUT

FINDATA=IMAGE+[88*256*5]

N=200
;==================================
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 INIT_ALL			;CONSTRUIT LA 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

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

BSR.L VAGUE			;VA A ROUTINE DE VAGUE

BTST	#6,$BFE001		;ATTENDANT PRESSION SUR BOUTON GAUCHE SOURIS
BNE.L	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
;====================
WAIT_BLITTER:			;ROUTINE POUR ATTENDRE QUE LE BLITTER
BTST #14,DMACONR		;EST FINI SON PRECEDENT TRAVAIL
BNE.S WAIT_BLITTER
RTS
;===================
TABLEADD:
BLK.L N+25,0

ACTUALPOS: DC.W 200

TABLEDECAL: BLK.B N+20+5,0

OLD: DC.B 0
even
;===================
VAGUE:

	BTST#10,$dff016			;TEST BOUTON DROIT SOURIS
	BNE.S PRE

	MOVE.B $DFF00B,D0		;GESTION DE LA SOURIS
	AND.L #$FF,D0
	MOVE.B OLD,D1
	MOVE.B D0,OLD
	SUB.B D1,D0
	BTST#7,D0
	BEQ OK
	NEG.B D0
	NEG.W D0
OK:
	ADD.W D0,ACTUALPOS
	BRA.S KAM

PRE:
	MOVE.L PWA,A0
	ADDQ.L #2,PWA
	MOVE.W (A0)+,ACTUALPOS
	CMP.L #FWA,A0
	BLO.S KAM
	MOVE.L #WA,PWA
KAM:

	MOVE#N-1,D0		;CALCULE DES NOUVELLES POS ECRAN

	LEA LISTECOPPER+24,A0
	LEA TABLEADD,A1
	LEA TABLEDECAL,A2
	MOVE.L #$58000000+$00860086,D4
	MOVE.L #$0800b000+$00860086,D5
	MOVE.L #$6000+$0086,D6
CONSTRUCT:

	MOVE.L D4,D1
	MOVE.L D5,D2
	MOVE.L D6,D3
	SUB.L (A1),D1
	SUB.L (A1),D2
	SUB.L (A1)+,D3
	MOVE.W D1,6(A0)
	SWAP D1
	MOVE.W D1,10(A0)
	SWAP D1
	MOVE.W D2,14(A0)
	SWAP D2
	MOVE.W D2,18(A0)
	SWAP D2
	MOVE.W D3,22(A0)
	MOVE.B (A2)+,27(A0)
	ADDA.L #28,A0
	ADD.L #$00580058,D4
	ADD.L #$00580058,D5
	ADD.W #$0058,D6
	DBRA D0,CONSTRUCT

	LEA TABLEADD,A0		;MONTE L'ONDE POUR LES ADDRESSES
	LEA TABLEADD+4,A1
	MOVE#N+20-1,D0
UP1:
	MOVE.L (A1)+,(A0)+
	DBRA D0,UP1

	MOVE.W ACTUALPOS,D2	;SOUS FORME DECIMAL (EX:178)

	CMP.W #140,D2
	BHI.L OKAY
	MOVE.W #140,ACTUALPOS
	MOVE.W #140,D2
OKAY:
	CMP.W #600,D2
	BLO.S OK2
	MOVE.W #600,ACTUALPOS
	MOVE.W #600,D2
OK2:

	MOVE.W D2,D1
	LSR.W #3,D1		;/8 (POUR AVOIR DES OCTETS)
	AND.W #$FFFE,D1		;ADDRESSE PAIR
	MOVE.W D1,(A0)+
	MOVE.W D1,(A0)

	LEA TABLEDECAL,A0		;DEPLACE ONDE DE DECALAGE
	LEA TABLEDECAL+1,A1
	MOVE#N+20-1,D0
UP2:
	MOVE.B (A1)+,(A0)+
	DBRA D0,UP2

	AND.W #$F,D2	;CALCUL DU DECALAGE
	MOVE.B D2,D1
	LSL.B #4,D2
	ORI.B D1,D2
	MOVE.B D2,(A0)
	
rts
;===================
INIT_ALL:

LEA listecopper,A0		;INSTALLES COPPER LISTE
MOVE.L #$2b0ffffe,(A0)+		;PROVOQUES IRQ COPPER

MOVE.L #$00E00006,(A0)+
MOVE.L #$00E40006,(A0)+
MOVE.L #$00E80006,(A0)+
MOVE.L #$00EC0007,(A0)+
MOVE.L #$00F00007,(A0)+

MOVE #N-1,D0
MOVE.L #$00E20000+44,D1	;PBPL1
MOVE.L #$00E65800+44,D2	;PBPL2
MOVE.L #$00EAb000+44,D3	;PBPL3
MOVE.L #$00EE0800+44,D4	;PBPL4
MOVE.L #$00F26000+44,D5	;PBPL5

MOVE.L #$01020000,D6
MOVE.L #$280FFFFE,D7

INSTALLES:
MOVE.L D7,(A0)+
MOVE.L D1,(A0)+
MOVE.L D2,(A0)+
MOVE.L D3,(A0)+
MOVE.L D4,(A0)+
MOVE.L D5,(A0)+
MOVE.L D6,(A0)+

ADD.L #$1000000,D7
ADD.W #44*2,D1
ADD.W #44*2,D2
ADD.W #44*2,D3
ADD.W #44*2,D4
ADD.W #44*2,D5

DBRA D0,INSTALLES

MOVE.L #$01000000,(A0)+

MOVE.L #$FFFFFFfE,(A0)+	


RTS
;====================
EVEN				;NOTRE LISTE COPPER
NEWCOPPER:   
	DC.W	$008E,$2c71	;DIMENSIONS DE L'ECRAN
	DC.W	$0090,$f4D1	;200 LIGNES 

	DC.W	$0092,$0030,$0094,$00D8

	;REGISTRE POUR CHOISIR RESOLUTION	

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

	;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+44-4	;MODULOS PLANS PAIRS
	DC.W 	$010A,4+44-4	;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,$0FFF	;COULEUR 01
	DC.W	$0184,$0BDD	;COULEUR 02
	DC.W	$0186,$0899	;COULEUR 03
	DC.W	$0188,$0455	;COULEUR 04
	DC.W	$018A,$0333	;COULEUR 05
	DC.W	$018C,$0222	;COULEUR 06
	DC.W	$018E,$0111	;COULEUR 07
	DC.W	$0190,$0EEF	;COULEUR 08
	DC.W	$0192,$0CCF	;COULEUR 09
	DC.W	$0194,$099F	;COULEUR 10
	DC.W	$0196,$055F	;COULEUR 11
	DC.W	$0198,$000F	;COULEUR 12
	DC.W	$019A,$000A	;COULEUR 13
	DC.W	$019C,$0006	;COULEUR 14
	DC.W	$019E,$0003	;COULEUR 15
	DC.W	$01A0,$0DEF	;COULEUR 16	;LES COULEURS DE 16 A 31 SONT
	DC.W	$01A2,$0BEF	;COULEUR 17	;AUSSI CELLES DES SPRITES
	DC.W	$01A4,$0ADF	;COULEUR 18
	DC.W	$01A6,$07BD	;COULEUR 19	;LES COULEURS 16 A 31 NE SONT
	DC.W	$01A8,$058A	;COULEUR 20	;PAS UTILISEES DANS LE MODE
	DC.W	$01AA,$0357	;COULEUR 21	;HOLD AND MODIFY (HAM)
	DC.W	$01AC,$0234	;COULEUR 22
	DC.W	$01AE,$0011	;COULEUR 23
	DC.W	$01B0,$0FD0	;COULEUR 24
	DC.W	$01B2,$0FA0	;COULEUR 25
	DC.W	$01B4,$0E80	;COULEUR 26
	DC.W	$01B6,$0C60	;COULEUR 27
	DC.W	$01B8,$0A30	;COULEUR 28
	DC.W	$01BA,$0720	;COULEUR 29
	DC.W	$01BC,$0510	;COULEUR 30
	DC.W	$01BE,$0300	;COULEUR 31

	LISTECOPPER:

	BLK.B 6200,0
	
EVEN


PWA:
DC.L WA

WA:
DC.W 140,141,141,141,141,141,141,141
DC.W 141,141,142,142,142,142,143,143
DC.W 143,144,144,145,145,146,146,147
DC.W 147,148,148,149,149,150,151,151
DC.W 152,153,154,154,155,156,157,158
DC.W 159,160,160,161,162,163,164,165
DC.W 166,168,169,170,171,172,173,174
DC.W 176,177,178,179,181,182,183,185
DC.W 186,187,189,190,192,193,195,196
DC.W 198,199,201,202,204,205,207,209
DC.W 210,212,214,215,217,219,220,222
DC.W 224,226,228,229,231,233,235,237
DC.W 239,240,242,244,246,248,250,252
DC.W 254,256,258,260,262,264,266,268
DC.W 270,272,274,277,279,281,283,285
DC.W 287,289,291,294,296,298,300,302
DC.W 305,307,309,311,313,316,318,320
DC.W 322,325,327,329,331,334,336,338
DC.W 341,343,345,347,350,352,354,357
DC.W 359,361,363,366,368,370,373,375
DC.W 377,380,382,384,386,389,391,393
DC.W 396,398,400,402,405,407,409,411
DC.W 414,416,418,421,423,425,427,429
DC.W 432,434,436,438,440,443,445,447
DC.W 449,451,454,456,458,460,462,464
DC.W 466,468,470,472,475,477,479,481
DC.W 483,485,487,489,491,493,494,496
DC.W 498,500,502,504,506,508,510,511
DC.W 513,515,517,519,520,522,524,525
DC.W 527,529,530,532,534,535,537,539
DC.W 540,542,543,545,546,548,549,551
DC.W 552,553,555,556,557,559,560,561
DC.W 563,564,565,566,568,569,570,571
DC.W 572,573,574,575,576,577,578,579
DC.W 580,581,582,583,584,585,586,586
DC.W 587,588,589,589,590,591,591,592
DC.W 593,593,594,594,595,595,596,596
DC.W 597,597,598,598,598,599,599,599
DC.W 599,600,600,600,600,600,600,600
DC.W 600,600,600,600,600,600,600,600
DC.W 600,600,600,600,599,599,599,599
DC.W 598,598,598,597,597,596,596,596
DC.W 595,595,594,593,593,592,592,591
DC.W 590,590,589,588,587,587,586,585
DC.W 584,583,582,582,581,580,579,578
DC.W 577,576,575,574,573,571,570,569
DC.W 568,567,566,564,563,562,561,559
DC.W 558,557,555,554,552,551,550,548
DC.W 547,545,544,542,541,539,537,536
DC.W 534,533,531,529,528,526,524,523
DC.W 521,519,517,516,514,512,510,508
DC.W 506,505,503,501,499,497,495,493
DC.W 491,489,487,485,483,481,479,477
DC.W 475,473,471,469,467,465,463,461
DC.W 458,456,454,452,450,448,446,443
DC.W 441,439,437,435,432,430,428,426
DC.W 423,421,419,417,414,412,410,408
DC.W 405,403,401,399,396,394,392,389
DC.W 387,385,383,380,378,376,373,371
DC.W 369,366,364,362,360,357,355,353
DC.W 350,348,346,344,341,339,337,334
DC.W 332,330,328,325,323,321,319,316
DC.W 314,312,310,307,305,303,301,299
DC.W 296,294,292,290,288,286,284,281
DC.W 279,277,275,273,271,269,267,265
DC.W 263,261,259,257,255,253,251,249
DC.W 247,245,243,241,239,237,235,234
DC.W 232,230,228,226,225,223,221,219
DC.W 218,216,214,212,211,209,208,206
DC.W 204,203,201,200,198,197,195,194
DC.W 192,191,189,188,186,185,184,182
DC.W 181,180,179,177,176,175,174,172
DC.W 171,170,169,168,167,166,165,164
DC.W 163,162,161,160,159,158,157,156
DC.W 156,155,154,153,152,152,151,150
DC.W 150,149,148,148,147,147,146,146
DC.W 145,145,144,144,144,143,143,143
DC.W 142,142,142,141,141,141,141,141
DC.W 141,141,141,141,141
FWA:

FINDEMO:
