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
;==================================
ECRAN=$40000
;==================================
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

LEA ECRAN,A0			;EFFACE ECRAN
MOVE.W #[40*256]/2-1,D0
CLEAR_ECRAN:
MOVE.W #0,(A0)+
DBF D0,CLEAR_ECRAN

MOVE.L	#SPRITE,D0		;INITIALISATION SPRITE
MOVE.W	D0,SPRITE0+6
SWAP	D0
MOVE.W	D0,SPRITE0+2
BSR.L	STARS

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

BSR.L MOVE_STARS

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
;====================
STARS:	CLR.L	D0
	CLR.L	D2
	LEA	XPOS(PC),A0	;POSITION X
	LEA	SPEED(PC),A2	;VITESSE
	LEA	SPRITE(PC),A1	;STRUCTURE SPRITE
	MOVE.B	#$20,D0		;DEBUT EN LIGNE $20	
STERNLOOP:			;MISE EN PLACE STRUCTURE SPRITE
	CLR.L	D1
	LEA	INHALT-4(PC),A3		
	MOVE.B	D0,(A1)+		
	MOVE.B	(A0)+,(A1)+		
	ADDQ.W	#1,D0
	MOVE.B	D0,(A1)+		
	MOVE.B	D2,(A1)+
	MOVE.B	(A2)+,D1
	LSL.W	#2,D1
	ADD.L	D1,A3
	MOVE.L	(A3),(A1)+		
	ADDQ.W	#1,D0			
	CMP.W	#$00FE,D0
	BLE.S	STERNLOOP
	MOVEQ	#6,D2
	CMP.W	#$0128,D0		
	BNE.S	STERNLOOP
	RTS				
;============================
MOVE_STARS:		;MOUVEMENT DU SPRITE MULTIPLEXE
	MOVE.W	#131,D0			
	LEA	SPEED(PC),A2		
	LEA	SPRITE+1(PC),A1		
MOVE_LOOP:
	MOVE.B	(A1),D1			
	MOVE.B	(A2)+,D2		
	ADD.B	D2,D1	;SUB.B D2,D1 POUR SENS INVERSE
	MOVE.B	D1,(A1)			
	ADD.L	#8,A1			
	DBF	D0,MOVE_LOOP
	RTS				
;============================
EVEN
;DESSIN DU SPRITE
INHALT:	DC.L $80000000	;= %1000 0000 0000 0000 0000 0000 0000 0000
	DC.L $00008000	;= %0000 0000 0000 0000 1000 0000 0000 0000
	DC.L $00008000	;= %0000 0000 0000 0000 1000 0000 0000 0000
	DC.L $80008000	;= %1000 0000 0000 0000 1000 0000 0000 0000
	DC.L $80008000	;= %1000 0000 0000 0000 1000 0000 0000 0000

;TABEL DES VITESSES
SPEED:	DC.B 2,4,1,3,5,3,2,1,3,2,5,1,4,3,4,3,4,1,3,2,5,4,3,2,5
	DC.B 2,3,1,5,4,1,4,2,3,1,4,3,2,5,1,3,2,4,5,1,2,4,5,3,1
	DC.B 4,3,5,1,2,1,4,4,5,3,2,4,1,5,2,4,2,5,3,5,3,4,3,1,4
	DC.B 4,5,3,2,4,1,3,4,1,3,2,5,4,1,3,4,2,3,1,4,3,4,1,2,5
	DC.B 3,5,1,4,3,5,2,4,2,5,1,4,2,3,4,1,3,5,2,4,3,2,1,5,3
	DC.B 4,3,5,1,2,4,1

;TABLE DES POSITIONS X
XPOS:	DC.B $1E,$4F,$AB,$DD,$1B,$BB,$6A,$F3,$88,$AB,$F3,$73
	DC.B $27,$8A,$0E,$22,$BC,$3B,$20,$0E,$91,$14,$59,$F0
	DC.B $D5,$79,$B0,$32,$D3,$55,$B1,$95,$89,$5B,$C3,$99
	DC.B $01,$30,$D4,$C3,$B9,$A1,$7E,$91,$09,$4E,$70,$A0
	DC.B $C0,$5B,$1A,$98,$81,$D3,$22,$48,$91,$C5,$FF,$12
	DC.B $45,$95,$A1,$39,$E0,$84,$05,$B4,$AF,$76,$72,$19
	DC.B $49,$58,$C0,$D2,$E2,$92,$19,$F5,$06,$35,$A8,$D3
	DC.B $89,$7E,$29,$90,$A4,$12,$B9,$C0,$E3,$88,$41,$2E
	DC.B $59,$12,$F0,$C3,$6E,$91,$2C,$55,$79,$1C,$01,$96
	DC.B $A5,$C1,$D9,$E7,$14,$86,$10,$99,$D3,$69,$A3,$C8
	DC.B $93,$12,$F5,$28,$C2,$39,$92,$A0,$38,$BB,$E1,$E3


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

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

	;ADRESSE DE L'ECRAN

	DC.W	$00E0,$0004
	DC.W 	$00E2,$0000

	;REGISTRE POUR CHOISIR RESOLUTION	

	DC.W	$0100,$1200		;1 PLANS+ MODE COULEURS

	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 

SPRITE0: DC.W	$0120,$0000,$0122,$0000

	DC.W	$0124,$0000,$0126,$0000
	DC.W	$0128,$0000,$012A,$0000	
	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,$0FFF	;COULEUR 01	;COULEURS SONT UTILISEES
	DC.W	$0184,$034B	;COULEUR 02
	DC.W	$0186,$0017	;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

	;COULEURS DU SPRITE 0
	DC.W	$01A0,$0000	;COULEUR 16	;LES COULEURS DE 16 A 31 SONT
	DC.W	$01A2,$0888	;COULEUR 17	;AUSSI CELLES DES SPRITES
	DC.W	$01A4,$0CCC	;COULEUR 18
	DC.W	$01A6,$0FFF	;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



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

	DC.W $FFDF,$FFFE


DC.L $FFFFFFFE ;FIN LISTE COPPER
EVEN



FINDEMO:
