;APRES ASSEMBLAGE
;POUR CHARGER LES DATAS TAPEZ:
;
;RI		RETURN
;IMAGE2_RAW	RETURN
;PIC		RETURN
;
;RI		RETURN
;FONT.RAW	RETURN
;CHARPIC	RETURN RETURN
;
;
;PUIS TAPEZ
;G BEGIN	RETURN RETURN
;
;SUPPRIMEZ LES LIGNES SUIVANTES SI VOTRE VERSION DU SEKA
;NE COMPORTE PAS LA COMMANDE Y

>EXTERN "IMAGE2_RAW",PIC
>EXTERN "FONT_RAW",CHARPIC

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

;==================================
SCROLLHEIGHT    = 116		;HAUTEUR SCROLL
SCROLLSTARTLINE = $37		;LIGNE DEPART AFFICHAGE
CHARHEIGHT      = 26		;HAUTEUR DE CARACTERE	
WIDTH           = [32-1]*2	;LARGEUR
;==================================
PIC=$40000			;IMAGE 320*256 EN 5 PLANS
CHARPIC=PIC+[40*256*5]		;IMAGE DES CARACTERES
				;320*256 EN 5 PLANS
COPPERCHARDATA=CHARPIC+[40*256*5];ZONE MEMOIRE POUR
				;CODAGE DES LETTRES

FINDATA=$75000	
;==================================
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	INITCOPPERLIST		;INITIALISE LISTE COPPER
BSR.L	COPPERCHARSETCODER	;CODE L'ALPHABET
BSR.L	TEXTCODER		;CODE LE TEXTE

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	COPPERSCROLL		;VA A ROUTINE DE SCROLLING COPPER

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
;====================
WAITBLITTER:			;ROUTINE POUR ATTENDRE QUE LE BLITTER
BTST #14,DMACONR		;EST FINI SON PRECEDENT TRAVAIL
BNE.S WAITBLITTER
RTS
;====================

COPPERSCROLL:	;ROUTINE DE SCROLLING COPPER

	ADD.W	#[32-1]*2,SCROLLSTEP
	CMP.W	#CHARHEIGHT*[[32-1]*2],SCROLLSTEP
	BEQ.S	NEXTCHAR
	BRA.S	SCROLL

NEXTCHAR:  
	MOVE.W	#0,SCROLLSTEP

	ADD.L	#1,CHARPOINTER
	CMP.L	#MESSAGEEND,CHARPOINTER
	BNE.S	SCROLL
	MOVE.L	#MESSAGE,CHARPOINTER

SCROLL:
	BSR	WAITBLITTER
	MOVE.W	#$0000,BLTCON1
	MOVE.W	#$09F0,BLTCON0
	MOVE.W	#$FFFF,BLTAFWM
	MOVE.W	#$FFFF,BLTALWM
	MOVE.W	#4,BLTAMOD
	MOVE.W	#4,BLTDMOD

	MOVE.L	#SCROLLSTART+4+[[32-1]*4+4],BLTAPTH
	MOVE.L	#SCROLLSTART+4,BLTDPTH
	MOVE.W	#SCROLLHEIGHT-1*64+WIDTH,BLTSIZE

DISPLAYCHAR:
	LEA	COPPERCHARDATA,A0
	LEA	SCROLLEND-[[32-1]*4+4]+4+2,A1
	MOVE.L	CHARPOINTER,A2

	MOVEQ	#0,D0
	MOVE.B	(A2),D0
	MULU	#CHARHEIGHT*[[32-1]*2],D0
	ADD.L	D0,A0

	MOVEQ	#0,D0
	MOVE.W	SCROLLSTEP,D0
	ADD.L	D0,A0

	BSR	WAITBLITTER
	MOVE.W	#$0000,BLTCON1
	MOVE.W	#$09F0,BLTCON0
	MOVE.W	#%1111111111111111,BLTAFWM
	MOVE.W	#%1111111111111111,BLTALWM
	MOVE.W	#0,BLTAMOD
	MOVE.W	#2,BLTDMOD
	MOVE.L	A0,BLTAPTH
	MOVE.L	A1,BLTDPTH
	MOVE.W	#[32-1]*64+1,BLTSIZE
	RTS

SCROLLSTEP:	DC.W	0

;; INITIALISATION DE LA LISTE COPPER
;; SOUS LA FORME:
;; DC.W $XXD9,$FFFE,$182,0,$184,0 ETC...

INITCOPPERLIST:
	LEA	SCROLLSTART,A0		
	MOVE.B	#SCROLLSTARTLINE,D2	;DEBUT LIGNE $37

	MOVE.W	#SCROLLHEIGHT-1,D0	;116 LIGNES

COPPERLISTINITLOOP1:
	MOVE.B	D2,(A0)+
	MOVE.B	#$D9,(A0)+
	MOVE.W	#$FFFE,(A0)+
	ADDQ.B	#2,D2

	MOVE.W	#$0182,D3

	MOVE.W	#[32-1]-1,D1

COPPERLISTINITLOOP2:
	MOVE.W	D3,(A0)+
	MOVE.W	#0,(A0)+
	ADDQ.W	#2,D3
	DBRA	D1,COPPERLISTINITLOOP2

	DBRA	D0,COPPERLISTINITLOOP1
	RTS

;; ROUTINE DE CODAGE DES LETTRES EN COULEURS
;; LIGNE PAR LIGNE DANS LE SENS HAUTEUR
;; 1 POINT EGALE UNE COULEUR DANS LE SENS DE LA LARGEUR
;; EX: PAS DE POINT = COULEUR 0

COPPERCHARSETCODER:
	LEA	COPPERCHARDATA+[[32-1]*2],A1
	LEA	CHARCOLORS+2,A2

	MOVE.W	#[LETTERSEND-LETTERS]-1,D0

CHARSETCODERLOOP1:
	LEA	CHARPIC,A0
	ADD.L	CHARADD,A0
	ADD.L	CHARADD2,A0
	MOVE.W	#CHARHEIGHT-1,D1

CHARSETCODERLOOP2:
	MOVE.L	(A0),CHARDEST1
	MOVE.L	40(A0),CHARDEST2
	MOVE.L	80(A0),CHARDEST3
	MOVE.L	120(A0),CHARDEST4
	MOVE.L	160(A0),CHARDEST5
	MOVEQ	#1,D7

	MOVE.L	#[32-1]-1,D2

CHARSETCODERLOOP3:
	MOVEQ	#0,D5
	MOVEQ	#0,D6

TESTDEST5:
	MOVE.L	CHARDEST5,D6
	BTST	D7,D6
	BEQ.S	TESTDEST4
	BSET	#4+2,D5

TESTDEST4:
	MOVE.L	CHARDEST4,D6
	BTST	D7,D6
	BEQ.S	TESTDEST3
	BSET	#3+2,D5

TESTDEST3:
	MOVE.L	CHARDEST3,D6
	BTST	D7,D6
	BEQ.S	TESTDEST2
	BSET	#2+2,D5

TESTDEST2:
	MOVE.L	CHARDEST2,D6
	BTST	D7,D6
	BEQ.S	TESTDEST1
	BSET	#1+2,D5

TESTDEST1:
	MOVE.L	CHARDEST1,D6
	BTST	D7,D6
	BEQ.S	CALCULATECURRENTCOLOR
	BSET	#0+2,D5

CALCULATECURRENTCOLOR:
	MOVE.W	(A2,D5),-(A1)

	ADDQ.B	#1,D7
	DBRA	D2,CHARSETCODERLOOP3
	
	ADD.L	#40*5,A0
	ADD.L	#[[32-1]*2]*2,A1
	DBRA	D1,CHARSETCODERLOOP2

	ADDQ.L	#4,CHARADD

	CMP.L	#40,CHARADD
	BNE.S	STILLSAMELINE

	MOVE.L	#0,CHARADD
	ADD.L	#CHARHEIGHT*40*5,CHARADD2

STILLSAMELINE:
	DBRA	D0,CHARSETCODERLOOP1
	RTS

CHARDEST1:	DC.L	0
CHARDEST2:	DC.L	0
CHARDEST3:	DC.L	0
CHARDEST4:	DC.L	0
CHARDEST5:	DC.L	0
CHARADD:	DC.L	0
CHARADD2:	DC.L	0

;TABLE DES COULEURS DE NOTRE ALPHABET

CHARCOLORS:
DC.W	$0180,$0000 ,$0182,$0FFF ,$0184,$0BBB ,$0186,$0999
DC.W	$0188,$0888 ,$018A,$0666 ,$018C,$0555 ,$018E,$0333
DC.W	$0190,$0000 ,$0192,$0001 ,$0194,$0002 ,$0196,$0003
DC.W	$0198,$0004 ,$019A,$0005 ,$019C,$0006 ,$019E,$0007
DC.W	$01A0,$0008 ,$01A2,$0009 ,$01A4,$000A ,$01A6,$000B
DC.W	$01A8,$000C ,$01AA,$000D ,$01AC,$000E ,$01AE,$000F
DC.W	$01B0,$022F ,$01B2,$044F ,$01B4,$066F ,$01B6,$088F
DC.W	$01B8,$099F ,$01BA,$0BBF ,$01BC,$0DDF ,$01BE,$0FFF


TEXTCODER:			;ROUTINE DE CODAGE DES LETTRES
	LEA	MESSAGE,A1	;DU TEXTE

TEXTCODERLOOP:
	MOVE.B	(A1),D0
	LEA	LETTERS,A0
	MOVEQ	#0,D1

TEXTLOOP:
	CMP.B	(A0,D1),D0
	BEQ	CHARFOUND
	ADDQ.B	#1,D1
	BRA.S	TEXTLOOP

CHARFOUND:
	MOVE.B	D1,(A1)+

	CMP.L	#MESSAGEEND,A1
	BNE.S	TEXTCODERLOOP
	RTS

;TABLE DES LETTRES UTILISABLES
LETTERS:
	DC.B	"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
	DC.B	"!?:;0123456789g(),-.'sf "
LETTERSEND:
	EVEN

;TEXTE A SCROLLER
MESSAGE:
DC.B "    "
DC.B "VOICI UN NOUVEL EFFET COPPER QUI PERMET DES SCROLLINGS "
DC.B "DEFORMES ET CECI EN 32 COULEURS!!!!!!!  SYMPA NON???? "
DC.B "TOUS LES DELIRES SONT POSSIBLES   TOUT DEPEND DE VOTRE "
DC.B "DESSIN.... MAINTENANT A VOUS DE JOUER         "
MESSAGEEND:
	EVEN

CHARPOINTER:	DC.L	MESSAGE

;
;====================
NEWCOPPER:   
	DC.W	$008E,$2C81,$0090,$2EC1
	DC.W	$0092,$0038,$0094,$00D0
	DC.W	$0108,$0000,$010A,$0000

COPPERCHARSCOLORS:
	DC.W	$0180,$0000,$0182,$0000,$0184,$0000,$0186,$0000
	DC.W	$0188,$0000,$018A,$0000,$018C,$0000,$018E,$0000
	DC.W	$0190,$0000,$0192,$0000,$0194,$0000,$0196,$0000
	DC.W	$0198,$0000,$019A,$0000,$019C,$0000,$019E,$0000
	DC.W	$01A0,$0000,$01A2,$0000,$01A4,$0000,$01A6,$0000
	DC.W	$01A8,$0000,$01AA,$0000,$01AC,$0000,$01AE,$0000
	DC.W	$01B0,$0000,$01B2,$0000,$01B4,$0000,$01B6,$0000
	DC.W	$01B8,$0000,$01BA,$0000,$01BC,$0000,$01BE,$0000

	DC.W	$0100,$5200

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


SCROLLSTART:
	BLK.W	SCROLLHEIGHT*2,0
	BLK.W	SCROLLHEIGHT*2*[32-1],0
SCROLLEND:

	DC.W $0100,$0000

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


