;
;[1m[32m        ____     ___        ___     ___ ___ ___ ___ ____      ___ ___ ___[0m
;[1m[32m         /  /__//_         /__ /  //_ //__ /  //_    /  / / //_ //__//_  [0m
;[1m[32m        /  /  //__        ___//__//__/___//__//     /  /_/_//  //  \/__  [0m
;
;[1m[32m-----------------------------------------------------------------------------[0m
;   - FOR ABO'S CONTACT US AT:   BP:28 1170 WATERMAEL-BOITSFORT 1 BELGIUM!!...
;
;[1m[32m-----------------------------------------------------------------------------[0m
;                           - DON'T SEND ANY DISKS -
;
;[1m[32m-----------------------------------------------------------------------------[0m
;
;
;
;                      [33m THE LEGENDARY >> SUBSOFTWARE << IN 87/88/89/90/91!!...
;                      [1m[32m ------------------------------------------------------
;
;
;

* CBM 61 le 19-mars-1991 pour ANT *

	section	PROG,CODE

	MOVE.B	#$87,$BFD100	; Stop drive
	MOVE	#$B000,D0	; And wait
	DBRA	D0,*
	move.l	#run,$80	; Mode supervisor
	trap	#0
	move.l	#0,d0
	rts

run	BSR	INIT
	MOVE.L  4,A6
	LEA     GfxName(pc),A1	; Ouvre Gfx lib
	JSR 	-408(a6)	; Openlibrary(A6)
	MOVE.L  D0,GfxBase
	MOVE.L 	Gfxbase(pc),A0
	MOVE.L 	$32(A0),oldcopper
	MOVE.L 	#copper,$32(A0)	; Nouveau copper
 	LEA	$DFF000,A5
	MOVE.L 	$6C,SaveIrq
	MOVE 	#$8540,$96(A5)
	MOVE	#$7FFF,$9C(A5)
	MOVE	#$C020,$9A(A5)
	MOVE.L	#MAIN,$6C	; le prog est dans l'interruption
.WAIT	BTST	#6,$BFE001	; attend bouton gauche souris 
	BNE.S 	.WAIT
	LEA	$dff000,a5
	MOVE 	#$8540,$96(A5)
	MOVE	#$7FFF,$9C(A5)
	MOVE	#$C020,$9A(A5)
	MOVE.L	SaveIrq(pc),$6C	; Restore context
	MOVE.L 	GfxBase(pc),A1
	MOVE.L 	oldcopper(pc),$32(A1)
	MOVE.L 	4,A6
	JSR 	-414(a6)	; CloseLibrary(A6)	
	RTE		; Sort de TRAP #0

SaveIrq		dc.L 0
gfxbase		dc.L 0
oldcopper 	dc.L 0
GFXNAME		DC.B 'graphics.library',0
		even

MAIN	MOVEM.L	D0/D1/A0/A1/A5/A6,-(A7)
	LEA	$DFF000,A0
	MOVE.L	$4,A6
	MOVE	$1C(A0),D1
	AND	$1E(A0),D1
.INT2	BTST	#5,D1
	BEQ.S	.fin
	bsr	SCROLL
	MOVEM.L	$90(A6),A1/A5
.FIN	PEA	-36(A6)	; sort interruption
	JMP	(A5)

DONNEES_SCROLL
	DC.L	plan+$86c ; (A3) Adresse pour nouvelle lettre
	DC.L	plan+4    ; 4(A3) Ad source pour decalage 2 pixels horizontaux
	DC.L	plan+2    ; 8(A3) ad dest pour decalage horizontal et vertical
	DC.L	plan+$38  ; 12(A3) ad source pour decalage vertical
	DC.L	plan+$F9C ; 16(A3) ad dest pour decalage vertical
	DC.L	plan      ; 20(a3) Debut plan scroll
	DC.L	plan1     ; 24(A3) AD font
	DC.W	$E9F0     ; 28(A3) Valeur bltcon ou $f9f0 et 36 en 33(a3)
	DC.W	0         ; 30(A3) Compteur pour fin scroll
	DC.B	0         ; 32(A3) Compteur pour nouvelle lettre
	DC.B	18        ; 33(A3) NB de pixels avant new lettre

LISTE1	DC.B 'ABCDEFGHIJKLMNOPQRSTUVWXYZ!., 0123456789'
	EVEN

SCROLL	MOVEM.l D0-A7,-(SP)
	LEA	DONNEES_SCROLL(pc),A3
	MOVE.L	#$FFFFFFFF,$DFF044
	CLR	$DFF042
	ADDQ.B  #1,32(A3)  	; Ajoute 1 compteur pixels
	MOVE.B  33(A3),D3
	CMP.B	32(A3),D3	; si egal
	BEQ.S 	.SUIT	; nouvelle lettre
	BRA.S  	BLIT2	; autrement scroll
.SUIT	CLR.B	32(A3)
	LEA	TABLE(PC),A6	; tableau ad lettres
	LEA 	TEXTE(PC),A2	; texte du scroll
	ADD	30(A3),A2	; lettre actuelle
	MOVE.L	24(A3),A0	; Ad font
	ADDQ	#1,30(A3)	; Compteur+1
	CMP.W	#FINTEXTE-TEXTE,30(A3) ; teste si fin texte
	BNE.S 	.Suit1	; non continue
	CLR	30(A3)	; oui recommence au debut
.Suit1	MOVEQ	#0,D0
	MOVE.B	(A2),D1	; Met lettre ds D1
	LEA	LISTE1,A1	; Table lettres pour comparer
.CHER	MOVE.B	(A1),D2	; Prend une lettre
	CMP.B	D1,D2	; est-ce celle la ? 
	BEQ.S	.OK	; Trouve !!
	ADDQ.B	#1,D0	; Position de la lettre pour calcul 
	LEA	1(A1),A1	; Incremente pour lettre suivante
	BRA.S	.CHER	; continue de chercher
.OK	ROL	#1,D0	; multiplie par 2
	ADD  	D0,A6	; OFFSET lettre dans table
	ADD	(A6),A0	; AD lettre dans font
BLIT1 	MOVE.L	A0,$DFF050	; tansfert une nouvelle lettre
	MOVE.L  (A3),$DFF054        
	MOVE.L	#$240032,$DFF064	; Modulo font,plan
	MOVE	#$9f0,$DFF040    
	MOVE	#30*64+2,$dff058
BLIT2 	MOVE.L	4(A3),$DFF050	; Fait avancer le scroll de 2 pixels
	MOVE.L  8(A3),$DFF054       
	MOVE.L	#$020002,$DFF064    
	MOVE	28(A3),$DFF040
	MOVE	#75*64+26,$dff058
BLIT3 	MOVE.L	12(A3),$DFF050	; et decale une ligne vers le haut
	MOVE.L  8(A3),$DFF054        
	MOVE.L	#$060006,$DFF064    
	MOVE	#$9f0,$DFF040    
	MOVE	#74*64+24,$dff058
BLIT4 	MOVE.L	20(A3),$DFF050	; Permet a la ligne qui sort en haut
	MOVE.L  16(A3),$DFF054	; de l'ecran de revenir en bas
	CLR.L	$DFF064    
	MOVE	#1*64+27,$dff058	; Blit 1 ligne
	MOVEM.l (SP)+,D0-A7
	RTS
L1=1320
L2=2560
L3=3800
L4=5000

; Valeurs a partir de 'PLAN' des lettres
TABLE	DC.W 0,4,8,12,16,20,24,28,32,36
	DC.W L1+0,L1+4,L1+8,L1+12,L1+16,L1+20,L1+24,L1+28,L1+32,L1+36
	DC.W L2+0,L2+4,L2+8,L2+12,L2+16,L2+20,L2+24,L2+28,L2+32,L2+36
	DC.W L3+0,L3+4,L3+8,L3+12,L3+16,L3+20,L3+24,L3+28,L3+32,L3+36
	DC.W L4+0,L4+4,L4+8,L4+12,L4+16,L4+20,L4+24,L4+28,L4+32,L4+36
TEXTE	DC.B ' HI!  HERE IS   CBM 61   PROUDLY  PRESENT HIS  ANT INTRO'
FINTEXTE EVEN

; Donnees des longs de lignes 54=1 ligne 108=2 etc.
	DC.W  54,54

TD1	DC.W 162,108,108,108,54,108,54,54,108	; Pointe la ligne
	DCB  30,54				; desiree avec le copper
	DC.W 108,54,108,54,108,108,108,162,270
TD5	DC.W 54,54
TD2	DC.W $A80,$A80,$Ba0,$Ba0,$DB0,$DB0,$DC0,$DC0,$EE0,$EE0
	DCB  30,$FF0
	DC.W $EE0,$EE0,$DC0,$DC0,$DB0,$DB0,$BA0,$BA0,$A80,$A80
TD3	DC.W $A00,$A00,$900,$900,$800,$800,$700,$700,$600,$600
	DCB  30,$500
	DC.W $600,$600,$700,$700,$800,$800,$900,$900,$A00,$A00

; Couleurs du fond pour donner votre "look" personnel
TD4	DCB 50,0

INIT	LEA COPPERA,A0	; Pointe liste copper
	MOVE	#49,D0	; Nombre de lignes -1
	MOVE	#$8001,D1 	; Numero depart
	LEA	PLAN,A1	; Ad depart
	MOVE.L	A1,D3
	MOVE.L	D3,D4
	ADD.L	#$144,D3	; Premiere ligne $144=54*6
	ADD.L	#$f66,D4	; Derniere ligne $f66=54*73
	LEA	TD1,A1	; Table donnees des lignes endroit
	LEA	TD2,A2	; Couleurs endroit
	LEA	TD3,A3	; Couleurs envers
	LEA	TD4,A4	; Couleurs fond ,pas utilise ici
	LEA	TD5,A5	; Table donnees des lignes envers
.1	MOVE	D1,(A0)+
	ADDI	#$0100,D1
	MOVE	#$FFFE,(A0)+
	MOVE	#$E2,(A0)+
	MOVE	D3,(A0)+
	ADD	(A1)+,D3
	MOVE	#$E6,(A0)+
	MOVE	D4,(A0)+
	SUB	-(A5),D4
	MOVE	#$182,(A0)+
	MOVE	(A2),(A0)+
	MOVE	#$184,(A0)+
	MOVE	(A3)+,(A0)+
	MOVE	#$186,(A0)+	
	MOVE	(A2)+,(A0)+	; Force la couleur jaune si 2 plans
	MOVE	#$180,(A0)+
	MOVE	(A4)+,(A0)+
	DBF	D0,.1
	MOVE.L	#PLAN,D0	; Valide plan dans copper
	SWAP	D0
	LEA	AD_SCROLL,A1
	MOVE	D0,2(A1)
	MOVE	D0,6(A1)
	RTS

	section data,code_c

COPPER	DC $92,$18,$94,$D8,$108,4,$180,0,$10A,4,$120,0,$122,0
	DC $8E,$8041,$90,$30D1,$104,0
AD_SCROLL:
	DC $E0,0,$E4,0,$100,$2200

COPPERA	DS 14*50
	DC $100,$200,$ffff,$fffe

PLAN	DS.B	$1040
PLAN1	INCBIN	FONT.BP
	END

