; AGAIN AN ANGELS INTRO... EASYER TO USE... 
;type...
;SEKA>ltext:  <ENTER>
;SEKA>        <ESC>  to get into editor...
;EDIT THE TEXT...AND NOW... ASSEMBLE INCLUDE THE IMAGES AND ENJOY...


>extern "df0:font",font,4352
>extern "df0:angels",angels,4704
;>extern "df0:music",data,9412
org	$50000
load	$50000
s:
;THX TO PICKEL & WERNER OF AFL FOR THIS REPLAY ROUTINE !!
speed = 6	; play speed
h_sound     = 0
h_length    = 4
h_frequency = 6
h_volume    = 8
s_attack_step     = 0
s_attack_delay    = 1
s_decay_step      = 2
s_decay_delay     = 3
s_sustain         = 4
s_release_step    = 6
s_release_delay   = 7
s_volume          = 8
s_vibrator_wait   = 9
s_vibrator_step   = 10
s_vibrator_length = 11
s_bendrate        = 12
s_portamento      = 13
s_sample          = 14
s_table_delay     = 15
s_arpeggio        = 16
s_sound_length    = 24
s_repeat          = 26
s_repeat_length   = 28
s_table           = 30
s_sounddata       = 78
c_hardware        = 0
c_dma             = 4
c_sounddata       = 6
c_frequency       = 10
c_sound_table     = 12
c_sound_table_cnt = 16
c_sound_table_del = 17
c_track           = 18
c_track_cnt       = 22
c_block           = 24
c_block_cnt       = 28
c_vibrator_wait   = 32
c_vibrator_length = 33
c_vibrator_pos    = 34
c_vibrator_cmp    = 35
c_vibrator_freq   = 36
c_old_frequency   = 38
c_frequency_data  = 40
c_actual_volume   = 41
c_attack_delay    = 42
c_decay_delay     = 43
c_sustain         = 44
c_release_delay   = 46
c_play_speed      = 47
c_bendrate_freq   = 48
c_transpose       = 50
c_status          = 51
c_arpeggio_cnt    = 52
c_arpeggio_data   = 53
c_arpeggio_on     = 54
c_effect_number   = 55
c_effect_data     = 56
start:
movem.l	d0-d7/a0-a6,-(a7)
move.l	4,a6
lea     gfxname,a1
jsr	-408(a6)
move.l	d0,gfxbase
jsr	-132(a6)
move.w  #$03e0,$dff096
lea	$60000,a0
loop1:
move.l	#0,(a0)+
cmp.l	#$7f000,a0
bne	loop1

move.w	#$87d0,$dff096
move.l	#$09f00000,$dff040
move.l	#$ffffffff,$dff044
move.w	#0,$dff064
move.w	#42,$dff066
move.l	#0,d5
move.l	#3,d7
vertical:
move.l	#3,d6
move.l	#$60000,d2
add.l	d5,d2
move.l	#angels,d1
horizontal:
move.l	d1,d3
move.l	d2,d4
move.l	#2,d0
blitloop:
move.l	d3,$dff050
move.l	d4,$dff054
move.w	#$1c07,$dff058
add.l	#1568,d3
add.l	#25088,d4
dbf	d0,blitloop
add.l	#14,d2
dbf	d6,horizontal
add.l	#6272,d5
dbf	d7,vertical
move.w  #$03e0,$dff096
bsr	kies
move.l	#text,keeper

lea	lettercop,a0
add.w	#2,a0
move.l	#$72ffc,d0
move.l	#1,d3
PlaneLoop3:
swap 	d0
move.w	 d0,(a0)
add.w	 #4,a0
swap	 d0
move.w	 d0,(a0)
add.w	 #4,a0
add.l	#8832,d0
dbf	 d3,PlaneLoop3

lea	logopl,a0
add.w	#2,a0
move.l	#$60000,d0
move.l	#2,d3
PlaneLoop:
swap 	d0
move.w	 d0,(a0)
add.w	 #4,a0
swap	 d0
move.w	 d0,(a0)
add.w	 #4,a0
add.l	#25088,d0
dbf	 d3,PlaneLoop

move.l	#newcopper,$dff080
clr.w	$dff088

move.l	$6c,oldirq
move.l	#newirq,$6c
bset	#1,$bfe001	; power on/off

bsr	DM_init

move.w	#$87e0,$dff096
move.b	#$87,$bfd100
loop:
;move.w	#$000f,$dff180
cmp.w	#1,uit
beq	end
btst	#6,$bfe001
bne	loop
end:
move.w	#$f,$dff096	; stop all sound
bclr	#1,$bfe001	; power on
move.l	oldirq,$6C
move.l	gfxbase,a0
move.l	38(a0),$dff080
move.l	4,a6
jsr	-138(a6)
move.l	gfxbase,a1
jsr	-414(a6)
movem.l	(a7)+,d0-d7/a0-a6
rts

oldirq: dc.l 0

newirq:
movem.l  d0-d6/a0-a6,-(a7)
bsr	DM_play
bsr	scrollback
goone:
cmp.l	#0,klaar
bne 	back
move.l	verander,d0
move.l	d0,klaar
ReturnScroll:
clr.l	d2
move.l	keeppos,a0
move.w	keepcount,d0
add.w	#2,keepcount
add.w	d0,a0
move.w	(a0),d2
move.l	keeper,d1
move.l	d1,keeper2
add.l	d2,keeper2	
move.l	keeper2,a0
move.b	(a0),d4		

lea	letters,a1
lea	adds,a2
move.l	#69,d6
sub.l	d5,d5
move.w	(a2)+,d5
search:
cmp.b	(a1)+,d4
beq	place
move.w	(a2)+,d5	
sub.l	#1,d6
cmp.l	#0,d6
beq	notfound
bra	search
notfound:
cmp.b   #$FF,d4
BNE.S   back
move.l	#text,keeper
move.w	#0,keepcount
move.w	#0,sprcount
BRA 	ReturnScroll
back:
sub.l	#1,klaar
sub.b	#1,lamer
cmp.b	#0,lamer
bne	goone
move.b	#3,lamer
backk:
move.w #$70,$dff09c        
movem.l (a7)+,d0-d6/a0-a6  
rte

kies:
move.l	#7,d7
MOVEM.L D1-D2,-(A7)
MOVE.W $DFF006,D2
MOVE.L RND,D1
SWAP D1
EOR.W D2,D1
MOVE.W D7,D2
SUBQ.W #1,D2
RANDOM2:
ADD.L D1,D1
BHI.S RANDOM3
EOR.L #$1D872B41,D1
RANDOM3:
LSR.W #1,D2
BNE.S RANDOM2
MOVE.L D1,RND
MULU D7,D1
CLR.W D1
SWAP D1
MOVE.L D1,D7
MOVEM.L (A7)+,D1-D2
mulu	#360,d7
move.l	#plaats,keeppos
add.l	d7,keeppos
rts

RND:DC.L "RAND"

place:
move.l	keeppos,a0
lea	addspr,a2
cmp.w	#358,sprcount
bne	gospr1
move.w	#0,keepcount
add.l	#180,keeper
move.l	d1,keeper2
move.l	#2048,klaar
bsr	kies
gospr1:
cmp.w	#360,sprcount
bne	gospr
move.w	#0,sprcount
gospr:
move.w	sprcount,d0
add.w	d0,a0
add.w	#2,sprcount
move.w	(a0),d4
mulu	#2,d4
add.w	d4,a2
move.w	(a2),d4
move.l	#$09f00000,$dff040
move.l	#$ffffffff,$dff044

move.l	#font,d1
move.l	#$73000,d2
move.w	#32,$dff064
move.w	#44,$dff066
add.l	d5,d1
add.l	d4,d2
move.l	#1,d7
sprloop:
move.l	d1,$dff050
move.l	d2,$dff054
move.w	#$401,$dff058
add.l	#2176,d1
add.l	#8832,d2
dbf	d7,sprloop
bra	back

scrollback:
clr.l	d0
clr.l	d1
clr.l	d2
clr.l	d5
cmp.b	#112,scrollcounter
bne	goscroll
move.b	#0,scrollcounter
goscroll:
move.b	scrollcounter,d0
add.b	#1,scrollcounter
lea	scrolladds,a0
add.w	d0,a0
move.b	(a0),d5		;KEEP THE ADDS FOR THE VERTICAL SCROLL
lea	scrollsubs,a0
add.w	d0,a0
move.b	(a0),d0
divu	#16,d0
swap	d0
move.w	#15,d1
lea	shifter,a0
add.w	#2,a0
sub.w	d0,d1
move.w	d1,(a0)		;SHIFTER COPIED TO COPPERLIST
mulu	#56,d5		;MULU HEIGHT
move.l	#$60000,d6
add.l	d5,d6
swap	d0
mulu	#2,d0
add.w	d0,d6		;RIGHT BITPLANE POINTET FOUND FOR NOW!!!
lea	logopl,a0
add.w	#2,a0
move.l	#2,d7
bitloop:
swap	d6
move.w	d6,(a0)
add.w	#4,a0
swap	d6
move.w	d6,(a0)
add.w	#4,a0
add.l	#25088,d6
dbf	d7,bitloop
rts
;************************
DM_play:
	movem.l	d0-d7/a0-a6,-(a7)
	lea	channel1(pc),a6
	bsr.L	DM_calc_frequency
	lea	channel2(pc),a6
	bsr.L	DM_calc_frequency
	lea	channel3(pc),a6
	bsr.L	DM_calc_frequency
	lea	channel4(pc),a6
	bsr.L	DM_calc_frequency

	move.w	#$800f,$dff096
DM_sample_handler:
	move.w	#200,d0
DM_swait:
	dbra	d0,DM_swait

	lea	channel1(pc),a6
	move.l	c_hardware(a6),a4
	move.l	c_sounddata(a6),a5
	tst.b	s_sample(a5)
	beq.s	DM_no_sample1
	move.w	s_repeat_length(a5),h_length(a4)
	moveq	#0,d7
	move.w	s_repeat(a5),d7
	add.l	a5,d7
	add.l	#s_table,d7
	move.l	d7,h_sound(a4)
DM_no_sample1:

	lea	channel2(pc),a6
	move.l	c_hardware(a6),a4
	move.l	c_sounddata(a6),a5
	tst.b	s_sample(a5)
	beq.s	DM_no_sample2
	move.w	s_repeat_length(a5),h_length(a4)
	moveq	#0,d7
	move.w	s_repeat(a5),d7
	add.l	a5,d7
	add.l	#s_table,d7
	move.l	d7,h_sound(a4)
DM_no_sample2:

	lea	channel3(pc),a6
	move.l	c_hardware(a6),a4
	move.l	c_sounddata(a6),a5
	tst.b	s_sample(a5)
	beq.s	DM_no_sample3
	move.w	s_repeat_length(a5),h_length(a4)
	moveq	#0,d7
	move.w	s_repeat(a5),d7
	add.l	a5,d7
	add.l	#s_table,d7
	move.l	d7,h_sound(a4)
DM_no_sample3:

	lea	channel4(pc),a6
	move.l	c_hardware(a6),a4
	move.l	c_sounddata(a6),a5
	tst.b	s_sample(a5)
	beq.s	DM_no_sample4
	move.w	s_repeat_length(a5),h_length(a4)
	moveq	#0,d7
	move.w	s_repeat(a5),d7
	add.l	a5,d7
	add.l	#s_table,d7
	move.l	d7,h_sound(a4)
DM_no_sample4:
	movem.l	(a7)+,d0-d7/a0-a6
	rts


DM_calc_frequency:
	move.l	c_hardware(a6),a4
	move.l	c_sounddata(a6),a5

	subq.b	#1,c_play_speed(a6)
	bne.L	DM_block_con
	move.b	play_speed,c_play_speed(a6)

	tst.l	c_block_cnt(a6)
	bne.s	DM_check_block
DM_track_step:
	move.l	c_track(a6),a0
	move.w	c_track_cnt(a6),d7
	move.w	(a0,d7.w),d0
	cmp.w	#-1,d0
	bne.s	DM_track_con
	move.w	2(a0,d7.w),d0
	and.w	#$7ff,d0
	asl.w	#1,d0
	move.w	d0,c_track_cnt(a6)
	bra.s	DM_track_step
DM_track_con:
	move.b	d0,c_transpose(a6)
	asr.l	#2,d0
	and.l	#%00000000000000000011111111000000,d0
	add.l	blocks(pc),d0
	move.l	d0,c_block(a6)
	addq.w	#2,c_track_cnt(a6)

DM_check_block:
	move.l	c_block(a6),a0
	add.l	c_block_cnt(a6),a0

	tst.b	2(a0)
	beq.s	DM_no_new_effect
	move.b	2(a0),c_effect_number(a6)
	move.b	3(a0),c_effect_data(a6)

DM_no_new_effect:
	moveq	#0,d0
	move.b	1(a0),d0
	beq.L	DM_test_effect
	add.b	c_transpose(a6),d0
	move.b	d0,c_frequency_data(a6)

	move.w	c_dma(a6),d0
	sub.w	#$8000,d0
	move.w	d0,$dff096

	moveq	#0,d0
	move.b	d0,c_status(a6)
	move.w	d0,c_bendrate_freq(a6)
	move.w	d0,c_arpeggio_cnt(a6)
	move.b	d0,c_arpeggio_on(a6)

	move.b	2(a0),c_effect_number(a6)
	move.b	3(a0),c_effect_data(a6)

	lea	snd_table(pc),a1
	move.b	(a0),d0
	asl.l	#2,d0
	move.l	(a1,d0.l),d0
	move.l	d0,c_sounddata(a6)

	move.l	d0,a5
	add.l	#s_table,d0
	move.l	d0,c_sound_table(a6)
	clr.b	c_sound_table_cnt(a6)
	tst.b	s_sample(a5)
	beq.s	DM_no_sample_clear
	clr.w	s_table(a5)
	move.l	d0,h_sound(a4)
DM_no_sample_clear:

	move.w	s_sound_length(a5),d0
	asr.w	#1,d0
	move.w	d0,h_length(a4)

	move.b	s_vibrator_wait(a5),c_vibrator_wait(a6)
	move.b	s_vibrator_length(a5),d0
	move.b	d0,c_vibrator_length(a6)
	move.b	d0,c_vibrator_pos(a6)
	asl.b	#1,d0
	move.b	d0,c_vibrator_cmp(a6)
	clr.b	c_actual_volume(a6)
	clr.b	c_sound_table_del(a6)
	clr.b	c_sound_table_cnt(a6)
	clr.b	c_attack_delay(a6)
	clr.b	c_decay_delay(a6)
	move.w	s_sustain(a5),c_sustain(a6)
	clr.b	c_release_delay(a6)

DM_test_effect:
	addq.l	#4,c_block_cnt(a6)
	cmp.l	#64,c_block_cnt(a6)
	bne.s	DM_block_con
	clr.l	c_block_cnt(a6)
DM_block_con:

	tst.b	s_sample(a5)
	bne.s	DM_portamento_handler
	tst.b	c_sound_table_del(a6)
	beq.s	DM_sound_table_handler
	subq.b	#1,c_sound_table_del(a6)
	bra.s	DM_portamento_handler

DM_sound_table_handler:
	move.b	s_table_delay(a5),c_sound_table_del(a6)

DM_sound_read_again:
	move.l	c_sound_table(a6),a0
	moveq	#0,d6
	move.b	c_sound_table_cnt(a6),d6
	cmp.b	#48,d6
	bmi.s	DM_sound_read_c
	clr.b	c_sound_table_cnt(a6)
	moveq	#0,d6
DM_sound_read_c:
	add.l	d6,a0
	moveq	#0,d7
	move.b	(a0),d7

	bpl.s	DM_new_sounddata
	cmp.b	#$ff,d7
	bne.s	DM_sound_new_speed
	move.b	1(a0),d7
	move.b	d7,c_sound_table_cnt(a6)
	bra.s	DM_sound_read_again
DM_sound_new_speed:
	and.b	#127,d7
	move.b	d7,s_table_delay(a5)	
	addq.b	#1,c_sound_table_cnt(a6)
	bra.s	DM_sound_read_again

DM_new_sounddata:
	asl.l	#5,d7
	add.l	#s_sounddata,d7
	add.l	c_sounddata(a6),d7
	move.l	d7,h_sound(a4)		; Set hardware sound data
	addq.b	#1,c_sound_table_cnt(a6)

DM_portamento_handler:
	tst.b	s_portamento(a5)
	beq.s	DM_vibrator_handler
	move.w	c_frequency(a6),d1
	bne.s	DM_porta_con
	moveq	#0,d0
	lea	freq_table(pc),a1
	move.b	c_frequency_data(a6),d0
	asl.w	#1,d0
	move.w	(a1,d0.w),d0
	add.w	c_bendrate_freq(a6),d0
	move.w	d0,c_frequency(a6)
	bra.s	DM_vibrator_handler

DM_porta_con:
	moveq	#0,d0
	moveq	#0,d2
	move.b	s_portamento(a5),d2
	lea	freq_table(pc),a1
	move.b	c_frequency_data(a6),d0
	asl.w	#1,d0
	move.w	(a1,d0.w),d0
	add.w	c_bendrate_freq(a6),d0
	cmp.w	d0,d1
	beq.s	DM_vibrator_handler
	blo.s	DM_porta_low
	sub.w	d2,d1
	cmp.w	d0,d1
	bpl.s	DM_porta_high_con
	move.w	d0,c_frequency(a6)
	bra.s	DM_vibrator_handler
DM_porta_high_con:
	move.w	d1,c_frequency(a6)
	bra.s	DM_vibrator_handler
DM_porta_low:
	add.w	d2,d1
	cmp.w	d0,d1
	bmi.s	DM_porta_low_con
	move.w	d0,c_frequency(a6)
	bra.s	DM_vibrator_handler
DM_porta_low_con:
	move.w	d1,c_frequency(a6)


DM_vibrator_handler:
	tst.b	c_vibrator_wait(a6)
	beq.s	DM_calc_vibrator
	subq.b	#1,c_vibrator_wait(a6)
	bra.s	DM_bendrate_handler
DM_calc_vibrator:
	moveq	#0,d0
	moveq	#0,d1
	move.b	c_vibrator_pos(a6),d0
	move.b	d0,d2
	move.b	s_vibrator_step(a5),d1
	mulu	d1,d0
	move.w	d0,c_vibrator_freq(a6)

	btst	#0,c_status(a6)
	bne.s	DM_vibrator_minus
DM_vibrator_plus:
	addq.b	#1,d2
	cmp.b	c_vibrator_cmp(a6),d2
	bne.s	DM_vibrator_no_reset
	eor.b	#1,c_status(a6)
DM_vibrator_no_reset:
	move.b	d2,c_vibrator_pos(a6)
	bra.s	DM_bendrate_handler

DM_vibrator_minus:
	subq.b	#1,d2
	bne.s	DM_vibrator_no_reset2
	eor.b	#1,c_status(a6)
DM_vibrator_no_reset2:
	move.b	d2,c_vibrator_pos(a6)

DM_bendrate_handler:
	moveq	#0,d0
	move.l	c_sounddata(a6),a1
	move.b	s_bendrate(a1),d0
	bpl.s	DM_rate_minus
	neg.b	d0

	add.w	d0,c_bendrate_freq(a6)
	bra.s	DM_effect_handler

DM_rate_minus:
	sub.w	d0,c_bendrate_freq(a6)

DM_effect_handler:
	moveq	#0,d0
	moveq	#0,d1
	move.b	c_effect_data(a6),d0
	move.b	c_effect_number(a6),d1
	lea	effect_table(pc),a1
	and.b	#$1f,d1
	asl.l	#2,d1
	move.l	(a1,d1.w),a1
	jsr	(a1)

DM_arpeggio_handler:
	move.l	a5,a1
	add.l	#s_arpeggio,a1
	move.b	c_arpeggio_cnt(a6),d0
	move.b	(a1,d0),d1
	addq.b	#1,c_arpeggio_cnt(a6)
	and.b	#%00000111,c_arpeggio_cnt(a6)

DM_store_frequency:
	moveq	#0,d0
	lea	freq_table(pc),a1
	move.b	c_frequency_data(a6),d0
	add.b	d1,d0
	asl.w	#1,d0
	move.w	(a1,d0.w),d0

	moveq	#0,d1
	moveq	#0,d2
	move.b	c_vibrator_length(a6),d1
	move.b	s_vibrator_step(a5),d2
	mulu	d2,d1
	sub.w	d1,d0
	add.w	c_bendrate_freq(a6),d0
	tst.b	s_portamento(a5)
	beq.s	DM_store_no_port
	move.w	c_frequency(a6),d0
	bra.s	DM_store_port
DM_store_no_port:
	clr.w	c_frequency(a6)
DM_store_port:
	add.w	c_vibrator_freq(a6),d0
	move.w	d0,h_frequency(a4)

DM_volume_handler:
	moveq	#0,d1		; actual volume
	move.b	c_actual_volume(a6),d1

	move.b	c_status(a6),d0
	and.b	#%00001110,d0

	tst.b	d0
	bne.s	DM_test_decay

	tst.b	c_attack_delay(a6)
	beq.s	DM_attack_handler
	subq.b	#1,c_attack_delay(a6)
	bra.L	DM_volume_exit
DM_attack_handler:
	move.b	s_attack_delay(a5),c_attack_delay(a6)
	add.b	s_attack_step(a5),d1
	cmp.b	#64,d1
	blo.s	DM_attack_con
	or.b	#%00000010,d0
	or.b	#%00000010,c_status(a6)
	moveq.b	#64,d1
DM_attack_con:


DM_test_decay:
	cmp.b	#%00000010,d0
	bne.s	DM_test_sustain

	tst.b	c_decay_delay(a6)
	beq.s	DM_decay_handler
	subq.b	#1,c_decay_delay(a6)
	bra.s	DM_volume_exit
DM_decay_handler:
	move.b	s_decay_delay(a5),c_decay_delay(a6)
	move.b	s_volume(a5),d2
	sub.b	s_decay_step(a5),d1
	cmp.b	d2,d1
	bhi.s	DM_decay_con
	move.b	s_volume(a5),d1
	or.b	#%00000110,d0
	or.b	#%00000110,c_status(a6)
DM_decay_con:

DM_test_sustain:
	cmp.b	#%00000110,d0
	bne.s	DM_test_release

	tst.w	c_sustain(a6)
	beq.s	DM_sustain_handler
	subq.w	#1,c_sustain(a6)
	bra.s	DM_volume_exit
DM_sustain_handler:
	or.b	#%00001110,d0
	or.b	#%00001110,c_status(a6)

DM_test_release:
	cmp.b	#%00001110,d0
	bne.s	DM_volume_exit

	tst.b	c_release_delay(a6)
	beq.s	DM_release_handler
	subq.b	#1,c_release_delay(a6)
	bra.s	DM_volume_exit
DM_release_handler:
	move.b	s_release_delay(a5),c_release_delay(a6)
	sub.b	s_release_step(a5),d1
	bpl.s	DM_release_con
	and.b	#%00001001,c_status(a6)
	moveq	#0,d1
DM_release_con:

DM_volume_exit:
	move.b	d1,c_actual_volume(a6)

	move.w	d1,h_volume(a4)
	rts


; ----  INIT MUSIC  ----

all_check = 0
trk1      = 4


DM_init:
	lea	track1(pc),a1
	moveq	#24,d7
DM_init_loop:
	move.l	#data+[26*4],(a1)+
	dbra	d7,DM_init_loop

	moveq	#23,d6
	lea	track1+[24*4](pc),a1
DM_init_loop2:
	lea	data+4(pc),a0
	move.l	d6,d7
DM_init_loop3:
	move.l	(a0)+,d0
	add.l	d0,(a1)
	dbra	d7,DM_init_loop3
	subq.l	#4,a1
	dbra	d6,DM_init_loop2

	lea	$dff0a0,a0
	lea	channel1(pc),a6
	bsr.s	DM_setup
	add.l	#16,a0
	lea	channel2(pc),a6
	bsr.s	DM_setup
	add.l	#16,a0
	lea	channel3(pc),a6
	bsr.s	DM_setup
	add.l	#16,a0
	lea	channel4(pc),a6
	bsr.s	DM_setup
	move.w	#$8001,channel1+c_dma
	move.w	#$8002,channel2+c_dma
	move.w	#$8004,channel3+c_dma
	move.w	#$8008,channel4+c_dma
	move.l	track1(pc),channel1+c_track
	move.l	track2(pc),channel2+c_track
	move.l	track3(pc),channel3+c_track
	move.l	track4(pc),channel4+c_track
	rts

DM_setup:
	move.l	a0,c_hardware(a6)
	move.w	#16,h_length(a0)
	clr.w	h_volume(a0)
	move.l	#safe_zero,c_sounddata(a6)
	clr.w	c_frequency(a6)
	move.l	snd_table(pc),d0
	add.l	#16,d0
	move.l	d0,c_sound_table(a6)
	clr.w	c_sound_table_cnt(a6)
	clr.w	c_track_cnt(a6)
	move.l	blocks(pc),c_block(a6)
	clr.l	c_block_cnt(a6)
	clr.l	c_vibrator_wait(a6)
	clr.l	c_vibrator_freq(a6)
	clr.l	c_frequency_data(a6)
	move.l	#1,c_sustain(a6)
	clr.l	c_bendrate_freq(a6)
	clr.l	c_arpeggio_cnt(a6)
	clr.w	c_effect_data(a6)
	rts

; ----  EFFECT ROUTINES  ----

eff0:
	rts
eff1:
	and.b	#15,d0			; set play speed
	beq.s	eff1_exit
	move.b	d0,play_speed
eff1_exit:
	rts
eff2:
	sub.w	d0,c_bendrate_freq(a6)	; slide freq up
	rts
eff3:
	add.w	d0,c_bendrate_freq(a6)	; slide freq down
	rts
eff4:
	tst.b	d0
	beq	led_off
	bset	#1,$bfe001		; led on/off
	rts
led_off:
	bclr	#1,$bfe001
	rts
eff5:
	move.b	d0,s_vibrator_wait(a5)	; set vibrator wait
	rts
eff6:
	move.b	d0,s_vibrator_step(a5)	; set vibrator step
	rts
eff7:
	move.b	d0,s_vibrator_length(a5); set vibrator length
	rts
eff8:
	move.b	d0,s_bendrate(a5)	; set bendrate
	rts
eff9:
	move.b	d0,s_portamento(a5)	; set portamento
	rts
effA:
	cmp.b	#65,d0
	bmi.s	effA_con
	moveq.b	#64,d0
effA_con:
	move.b	d0,s_volume(a5)		; set volume
	rts
effB:
	move.b	d0,s_arpeggio(a5)	; set arp 1
	rts
effC:
	move.b	d0,s_arpeggio+1(a5)	; set arp 2
	rts
effD:
	move.b	d0,s_arpeggio+2(a5)	; set arp 3
	rts
effE:
	move.b	d0,s_arpeggio+3(a5)	; set arp 4
	rts
effF:
	move.b	d0,s_arpeggio+4(a5)	; set arp 5
	rts
eff10:
	move.b	d0,s_arpeggio+5(a5)	; set arp 6
	rts
eff11:
	move.b	d0,s_arpeggio+6(a5)	; set arp 7
	rts
eff12:
	move.b	d0,s_arpeggio+7(a5)	; set arp 8
	rts
eff13:
	move.b	d0,s_arpeggio(a5)	; set arp 1 / 5
	move.b	d0,s_arpeggio+4(a5)
	rts
eff14:
	move.b	d0,s_arpeggio+1(a5)	; set arp 2 / 6
	move.b	d0,s_arpeggio+5(a5)
	rts
eff15:
	move.b	d0,s_arpeggio+2(a5)	; set arp 3 / 7
	move.b	d0,s_arpeggio+6(a5)
	rts
eff16:
	move.b	d0,s_arpeggio+3(a5)	; set arp 4 / 8
	move.b	d0,s_arpeggio+7(a5)
	rts
eff17:
	cmp.b	#65,d0			; set attack step
	bmi.s	eff17_con
	moveq.b	#64,d0
eff17_con:
	move.b	d0,s_attack_step(a5)
	rts
eff18:
	move.b	d0,s_attack_delay(a5)	; set attack delay
	rts
eff19:
	cmp.b	#65,d0			; set decay step
	bmi.s	eff19_con
	moveq.b	#64,d0
eff19_con:
	move.b	d0,s_decay_step(a5)
	rts
eff1A:
	move.b	d0,s_decay_delay(a5)	; set decay delay
	rts
eff1B:
	move.b	d0,s_sustain(a5)	; set sustain byte 1
	rts
eff1C:
	move.b	d0,s_sustain+1(a5)	; set sustain byte 2
	rts
eff1D:
	cmp.b	#65,d0			; set release step
	bmi.s	eff1D_con
	move.b	#64,d0
eff1D_con:
	move.b	d0,s_release_step(a5)
	rts
eff1E:
	move.b	d0,s_release_delay(a5)	; set release delay
	rts


effect_table:
	dc.l	eff0 ,eff1 ,eff2 ,eff3 ,eff4 ,eff5 ,eff6 ,eff7
	dc.l	eff8 ,eff9 ,effA ,effB ,effC ,effD ,effE ,effF
	dc.l	eff10,eff11,eff12,eff13,eff14,eff15,eff16,eff17
	dc.l	eff18,eff19,eff1A,eff1B,eff1C,eff1D,eff1E,eff0

play_speed:
	dc.b	speed
	even
safe_zero:
	blk.b	16,0

freq_table:
 dc.w	0000,6848,6464,6096,5760,5424,5120,4832,4560,4304,4064,3840
 dc.w	3616,3424,3232,3048,2880,2712,2560,2416,2280,2152,2032,1920
 dc.w	1808,1712,1616,1524,1440,1356,1280,1208,1140,1076,0960,0904
 dc.w	0856,0808,0762,0720,0678,0640,0604,0570,0538,0508,0480,0452
 dc.w	0428,0404,0381,0360,0339,0320,0302,0285,0269,0254,0240,0226
 dc.w	0214,0202,0190,0180,0170,0160,0151,0143,0135,0127,0120,0113
 dc.w	0113,0113,0113,0113,0113,0113,0113,0113,0113,0113,0113,0113

channel1:
	dc.l	$dff0a0		; hardware pointer
	dc.w	$8001		; DMA value
	dc.l	0		; instrument pointer
	dc.w	0		; frequency
	dc.l	0		; sound table pointer
	dc.b	0		; sound table counter
	dc.b	0		; sound table delay
	dc.l	0		; track pointer
	dc.w	0		; track counter
	dc.l	0		; block pointer
	dc.l	0		; block counter
	dc.b	0		; vibrator wait
	dc.b	0		; vib length
	dc.b	0		; vib position
	dc.b	0		; vib length + & - (compare)
	dc.w	0		; vib add freq
	dc.w	0		; old freq for portamento
	dc.b	0		; freq_dat
	dc.b	0		; actual volume
	dc.b	0		; attack delay
	dc.b	0		; decay delay
	dc.w	0		; sustain
	dc.b	0		; release delay
	dc.b	1		; play speed
	dc.w	0		; bendrate freq
	dc.b	0		; transpose
	dc.b	0		; status
	dc.b	0		; arpeggio counter
	dc.b	0		; arpeggio data
	dc.b	0		; arpeggio on/off
	dc.b	0		; effect number
	dc.b	0		; effect data
	even

channel2:
	blk.b	channel2-channel1,0
channel3:
	blk.b	channel2-channel1,0
channel4:
	blk.b	channel2-channel1,0

track1:
	dc.l	0
track2:
	dc.l	0
track3:
	dc.l	0
track4:
	dc.l	0
blocks:
	dc.l	0

snd_table:
	blk.l	20,0

;************************
newcopper:
dc.l	$01200007,$01228000,$01240007,$01268000
dc.l	$01280007,$012a8000,$012c0007,$012e8000
dc.l	$01300007,$01328000,$01340007,$01368000
dc.l	$01380007,$013a8000,$013c0007,$013e8000
dc.l	$008e1f78,$00901cc1
dc.l	$00920028,$009400d8
dc.l	$0108000a
dc.l	$010a0000
shifter:
dc.l	$01020000
dc.l	$01040040
dc.l	$01800000,$01820000,$0184000b,$0186022b
dc.l	$0188034c,$018a056d,$018c088d,$018e0aae
dc.l	$01900000,$01920999,$01940666,$01960444
dc.l	$01005600
logopl:
dc.l	$00e00000,$00e20000
dc.l	$00e80000,$00ea0000
dc.l	$00f00000,$00f20000
dc.l	$00e40007,$00e68000
dc.l	$00ec0007,$00ee8000
dc.l	$6009fffe
lettercop:
dc.l	$00e40000,$00e60000
dc.l	$00ec0000,$00ee0000
dc.l	$ff09fffe
dc.l	$00e40007,$00e68000
dc.l	$00ec0007,$00ee8000
dc.l	$fffffffe

oldcopper:
dc.l	0
even
gfxname: dc.b	"graphics.library",0
even
gfxbase:
dc.l	0
even
;ONLY USE THIS CHARS... 
;ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,'!?()-/abcdefghijk+%:<>
;a = BLOK
;j = LETTER
;k = PHONE
;<> = WINGS !!!
;USE AS MANY SCREENS AS YOU WANT... BEWARE... EACH LINE HAS 40 CHARS
;EACH SCREEN HAS 9 LINES !!!!!!!!!

text:
dc.b	" biiiiiiiiiiiiiiiih "
dc.b	" c < DOMINATION > g "
dc.b	" c       OF       g "
dc.b	" c   < ANGELS >   g "
dc.b	" deeeeeeeeeeeeeeeef "
dc.b	"                    "
dc.b	"      GIVE YOU      "
dc.b	"  A HOTTY DOWNLOAD  "
dc.b	"                    "

dc.b	"                    "
dc.b	"   THIS TIME IT'S   "
dc.b	"                    "
dc.b	" biiiiiiiiiiiiiiiih "
dc.b	" c                g "
dc.b	" c  TOMTE SPELET  g "
dc.b	" c                g "
dc.b	" deeeeeeeeeeeeeeeef "
dc.b	"                    "

dc.b	" k  CALL OUR WHQ  k "
dc.b	"--------------------"
dc.b	"                    "
dc.b	"     AMIGA EAST     "
dc.b	"    804-499-2266    "
dc.b	"                    "
dc.b	"     ONLY ELITE     "
dc.b	"     NO LOSERS!     "
dc.b	"                    "

dc.b	" k  OUR USA HQ'S  k "
dc.b	"                    "
dc.b	"    813-398-7393    "
dc.b	" ------------------ "
dc.b	"    704-254-6448    "
dc.b	" ------------------ "
dc.b	"    201-751-2175    "
dc.b	" ------------------ "
dc.b	"                    "

dc.b	"                    "
dc.b	" AND IF YA DONT GET "
dc.b	" ANY CALLING CARDS! "
dc.b	" ------------------ "
dc.b	" CALL OUR EURO HQ'S "
dc.b	" ------------------ "
dc.b	"  FIND THE NUMBERS  "
dc.b	" IN AN ANGELS PROD. "
dc.b	"                    "

dc.b	" j OR WRITE TO US j "
dc.b	"                    "
dc.b	" biiiiiiiiiiiiiiiih "
dc.b	" c                g "
dc.b	" c   P.O BOX 10   g "
dc.b	" c    OBERCORN    g "
dc.b	" c   LUXEMBURG!   g "
dc.b	" c                g "
dc.b	" deeeeeeeeeeeeeeeef "

dc.b	" j  OR WRITE TO:  j "
dc.b	"                    "
dc.b	" biiiiiiiiiiiiiiiih "
dc.b	" c                g "
dc.b	" c   P.O BOX 31   g "
dc.b	" c9910 MARIAKERKE!g "
dc.b	" c    BELGIUM!    g "
dc.b    " c                g "
dc.b	" deeeeeeeeeeeeeeeef "

blk.b	180,$ff
even

letters:
dc.b	"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,'!?()-/abcdefghijk"
dc.b	"+%:<> "
even

VINNY:
dc.l	$54484953,$20434f4f,$4c20494e,$54524f20
dc.l	$57415320,$434f4445,$44204259,$2056494e
dc.l	$4e592e2e,$2e205448,$45205649,$4e2d4d41
dc.l	$4e2e2e2e,$20475245,$45545a20,$544f2041
dc.l	$4c4c204f,$54484552,$204d454d,$42455253
dc.l	$20212121

adds:
dc.w	$0000,$0002,$0004,$0006,$0008,$000a,$000c,$000e
dc.w	$0010,$0012,$0014,$0016,$0018,$001a,$001c,$001e,$0020
dc.w	$0220,$0222,$0224,$0226,$0228,$022a,$022c,$022e
dc.w	$0230,$0232,$0234,$0236,$0238,$023a,$023c,$023e,$0240
dc.w	$0440,$0442,$0444,$0446,$0448,$044a,$044c,$044e
dc.w	$0450,$0452,$0454,$0456,$0458,$045a,$045c,$045e,$0460
dc.w	$0660,$0662,$0664,$0666,$0668,$066a,$066c,$066e
dc.w	$0670,$0672,$0674,$0676,$0678
even

addspr:
dc.w	0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38
dc.w	736,738,740,742,744,746,748,750,752,754,756,758,760,762
dc.w	764,766,768,770,772,774
dc.w	$5c0,$5c2,$5c4,$5c6,$5c8,$5ca,$5cc,$5ce,$5d0,$5d2
dc.w	$5d4,$5d6,$5d8,$5da,$5dc,$5de,$5e0,$5e2,$5e4,$5e6
dc.w	$8a0,$8a2,$8a4,$8a6,$8a8,$8aa,$8ac,$8ae,$8b0,$8b2
dc.w	$8b4,$8b6,$8b8,$8ba,$8bc,$8be,$8c0,$8c2,$8c4,$8c6
dc.w	$b80,$b82,$b84,$b86,$b88,$b8a,$b8c,$b8e,$b90,$b92
dc.w	$b94,$b96,$b98,$b9a,$b9c,$b9e,$ba0,$ba2,$ba4,$ba6
dc.w	$e60,$e62,$e64,$e66,$e68,$e6a,$e6c,$e6e,$e70,$e72
dc.w	$e74,$e76,$e78,$e7a,$e7c,$e7e,$e80,$e82,$e84,$e86
dc.w	$1140,$1142,$1144,$1146,$1148,$114a,$114c,$114e,$1150,$1152
dc.w	$1154,$1156,$1158,$115a,$115c,$115e,$1160,$1162,$1164,$1166
dc.w	$1420,$1422,$1424,$1426,$1428,$142a,$142c,$142e,$1430,$1432
dc.w	$1434,$1436,$1438,$143a,$143c,$143e,$1440,$1442,$1444,$1446
dc.w	$1700,$1702,$1704,$1706,$1708,$170a,$170c,$170e,$1710,$1712
dc.w	$1714,$1716,$1718,$171a,$171c,$171e,$1720,$1722,$1724,$1726
sprcount:
dc.w	0

plaats:
dc.w	0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
dc.w	20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39
dc.w	40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59
dc.w	60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79
dc.w	80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99
dc.w	100,101,102,103,104,105,106,107,108,109,110,111,112,113
dc.w	114,115,116,117,118,119
dc.w	120,121,122,123,124,125,126,127,128,129,130,131,132,133
dc.w	134,135,136,137,138,139
dc.w	140,141,142,143,144,145,146,147,148,149,150,151,152,153
dc.w	154,155,156,157,158,159
dc.w	160,161,162,163,164,165,166,167,168,169,170,171,172,173
dc.w	174,175,176,177,178,179

plaats2:
dc.w	0
dc.w	20,1
dc.w	40,21,2
dc.w	60,41,22,3
dc.w	80,61,42,23,4
dc.w	100,81,62,43,24,5
dc.w	120,101,82,63,44,25,6
dc.w	140,121,102,83,64,45,26,7
dc.w	160,141,122,103,84,65,46,27,8
dc.w	161,142,123,104,85,66,47,28,9
dc.w	162,143,124,105,86,67,48,29,10
dc.w	163,144,125,106,87,68,49,30,11
dc.w	164,145,126,107,88,69,50,31,12
dc.w	165,146,127,108,89,70,51,32,13
dc.w	166,147,128,109,90,71,52,33,14
dc.w	167,148,129,110,91,72,53,34,15
dc.w	168,149,130,111,92,73,54,35,16
dc.w	169,150,131,112,93,74,55,36,17
dc.w	170,151,132,113,94,75,56,37,18
dc.w	171,152,133,114,95,76,57,38,19
dc.w	172,153,134,115,96,77,58,39
dc.w	173,154,135,116,97,78,59
dc.w	174,155,136,117,98,79
dc.w	175,156,137,118,99
dc.w	176,157,138,119
dc.w	177,158,139
dc.w	178,159
dc.w	179


plaats3:
dc.w	90,89,69,70,71,91,111,110,109,108,88,68,48,49,50,51,52
dc.w	72,92,112,132,131,130,129,128,127,107,87,67,47,27
dc.w	28,29,30,31,32,33,53,73,93,113,133,153,152,151,150
dc.w	149,148,147,146,126,106,86,66,46,26,6,7,8,9,10,11,12,13,14
dc.w	34,54,74,94,114,134,154,174,173,172,171,170,169,168,167
dc.w	166,165,145,125,105,85,65,45,25,5
dc.w	15,35,55,75,95,115,135,155,175
dc.w	164,144,124,104,84,64,44,24,4
dc.w	16,36,56,76,96,116,136,156,176
dc.w	163,143,123,103,83,63,43,23,3
dc.w	17,37,57,77,97,117,137,157,177
dc.w	162,142,122,102,82,62,42,22,2
dc.w	18,38,58,78,98,118,138,158,178
dc.w	161,141,121,101,81,61,41,21,1
dc.w	19,39,59,79,99,119,139,159,179
dc.w	160,140,120,100,80,60,40,20,0

plaats4:
dc.w	179,0,178,1,177,2,176,3,175,4,174,5,173,6,172,7,171,8,170,9
dc.w	169,10,168,11,167,12,166,13,165,14,164,15,163,16,162,17,161
dc.w	18,160,19
dc.w	140,39,141,38,142,37,143,36,144,35,145,34,146,33,147,32
dc.w	148,31,149,30,150,29,151,28,152,27,153,26,154,25,155,24
dc.w	156,23,157,22,158,21,159,20
dc.w	139,40,138,41,137,42,136,43,135,44,134,45,133,46,132,47,131
dc.w	48,130,49,129,50,128,51,127,52,126,53,125,54,124,55,123,56
dc.w	122,57,121,58,120,59
dc.w	100,79,101,78,102,77,103,76,104,75,105,74,106,73,107,72,108
dc.w	71,109,70,110,69,111,68,112,67,113,66,114,65,115,64,116,63
dc.w	117,62,118,61,119,60
dc.w	99,80,98,81,97,82,96,83,95,84,94,85,93,86,92,87,91,88,90,89

plaats5:
dc.w	0,161,20,141,40,121,60,101,80,81,100,61,120,41,140,21,160,1
dc.w	2,163,22,143,42,123,62,103,82,83,102,63,122,43,142,23,162,3
dc.w	4,165,24,145,44,125,64,105,84,85,104,65,124,45,144,25,164,5
dc.w	6,167,26,147,46,127,66,107,86,87,106,67,126,47,146,27,166,7
dc.w	8,169,28,149,48,129,68,109,88,89,108,69,128,49,148,29,168,9
dc.w	10,171,30,151,50,131,70,111,90,91,110,71,130,51,150,31,170,11
dc.w	12,173,32,153,52,133,72,113,92,93,112,73,132,53,152,33,172,13
dc.w	14,175,34,155,54,135,74,115,94,95,114,75,134,55,154,35,174,15
dc.w	16,177,36,157,56,137,76,117,96,97,116,77,136,57,156,37,176,17
dc.w	18,179,38,159,58,139,78,119,98,99,118,79,138,59,158,39,178,19

plaats6:
dc.w	2,22,42,41,40,20,0,1,21
dc.w	5,25,45,44,43,23,3,4,24
dc.w	8,28,48,47,46,26,6,7,27
dc.w	11,31,51,50,49,29,9,10,30
dc.w	14,34,54,53,52,32,12,13,33
dc.w	17,37,57,56,55,35,15,16,36
dc.w	19,39,59,58,38,18
dc.w	62,82,102,101,100,80,60,61,81
dc.w	65,85,105,104,103,83,63,64,84
dc.w	68,88,108,107,106,86,66,67,87
dc.w	71,91,111,110,109,89,69,70,90
dc.w	74,94,114,113,112,92,72,73,93
dc.w	77,97,117,116,115,95,75,76,96
dc.w	79,99,119,118,98,78
dc.w	122,142,162,161,160,140,120,121,141
dc.w	125,145,165,164,163,143,123,124,144
dc.w	128,148,168,167,166,146,126,127,147
dc.w	131,151,171,170,169,149,129,130,150
dc.w	134,154,174,173,172,152,132,133,153
dc.w	137,157,177,176,175,155,135,136,156
dc.w	139,159,179,178,158,138


plaats7:
dc.w	92,46,124,59,136,150,29,1,101,15,55,6,107,99,153,165,23
dc.w	60,12,114,49,85,97,128,160,21,52,148,17,179,175,63,11,110
dc.w	35,142,58,152,169,4,156,74,103,31,89,162,67,119,10,112,71
dc.w	22,123,108,33,98,154,131,82,0,27,146,95,149,64,26,113,177
dc.w	104,140,116,76,7,66,100,61,115,48,126,134,139,172,143,42
dc.w	19,30,129,138,44,147,50,121,133,37,25,122,159,166,24,16,2
dc.w	158,120,88,94,79,170,163,86,9,111,34,20,174,81,39,28,145
dc.w	70,62,105,38,32,155,91,144,40,161,171,168,83,73,118,53
dc.w	14,45,137,57,141,102,36,8,173,65,178,3,18,78,106,5,132,164
dc.w	56,127,77,157,41,167,54,68,135,80,43,96,84,13,125,117,47
dc.w	75,87,51,151,109,93,69,72,90,130,176

keeper:
dc.l	0
klaar:
dc.l	1
verander:
dc.l	1
test:
dc.b	1
even
blk.b	100,0
kloot:
dc.w	0
checkg:
dc.b	0
even
keeper2:
dc.l	0
keeper3:
dc.l	0
keeppos:
dc.l	0
keepcount:
dc.w	0
uit:
dc.w	0
scrollcounter:
dc.b	0
scrolladds:
dc.b	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22
dc.b	23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41
dc.b	42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60
dc.b	61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79
dc.b	80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98
dc.b	99,100,101,102,103,104,105,106,107,108,109,110,111,112
dc.b	113,114
scrollsubs:
dc.b	112,111,110,109,108,107,106,105,104,103,102,101,100,99,98
dc.b	97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,79
dc.b	78,77,76,75,74,73,72,71,70,69,68,67,66,65,64,63,62,61,60
dc.b	59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41
dc.b	40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22
dc.b	21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
lamer:
dc.b	3
even
font:
blk.b	4352,0
angels:
blk.b	4704,0
data:
blk.b	9412,0
b:
