***************************************
*         SAVAGE NEW BOOTMENU         *
* CODED 23-7-90 BY FILIPPETTO/SAVAGE! *
* AFTER ASSEMBLING USE Y TO LOAD FILES*
* THEN SAVE WITH WO. THE MENU IS MADE *
* TO BE INSTALLED IN THE BOOTBLOCK AND*
* TO BE USED TOGETHER WITH THE LOADER *
* FILE                                *
***************************************

>extern "df0:charsbig",thefont
>extern "df0:4col",thepic
>extern "df0:mod.parallax",mt_data

movem.l	d0/d1/d2/d3/d4/d5/d6/d7/a0/a1/a2/a3/a4/a5/a6,-(a7)
move.l	a7,InitialSP
moveq	#0,d0
move.w	#$8020,$dff096
clr.w	$dff036
bsr	SwitchOSout
bsr	copystuff
bsr	clear
bsr	mt_init
bsr	text
bsr	setupsin
bsr	set3dstars
bsr	setstars
bsr	Initchips
bsr	Initint
bsr	Wait
bsr	mt_end
bsr	Resetint
bsr	Resetchips
bsr	SwitchOSin
move.l	InitialSP,a7
move.w	prgnumber,$80
movem.l	(a7)+,a0/a1/a2/a3/a4/a5/a6/d0/d1/d2/d3/d4/d5/d6/d7
rts

Clear:
lea	$51e00,a0
lea	$57800,a1

cloop:
clr.l	(a0)+
cmpa.l	a0,a1
bne	cloop
lea	$30000,a0
lea	$37000,a1

clop2:
clr.l	(a0)+
cmpa.l	a0,a1
bne	clop2
lea	$40000,a0
lea	$42800,a1

clop3:
clr.l	(a0)+
cmpa.l	a0,a1
bne	clop3
rts

InitialSP:dc.l 0			; Hold initial SP

SwitchOSout:				; Switch out disturbing stuff.
move.l	$4,a6				; System Base
lea	gfxlib,a1
clr.l	d0
jsr	-552(a6)			; _LVOOpenLibrary
move.l	d0,gfxbase			; Save Graphics_lib base
jsr	-$84(a6)			; _LVOForbid
jsr	-$96(a6)			; _LVOSuperState
move.l	d0,systack			; System stack
rts

systack:dc.l 0
gfxlib:	dc "graphics.library",0,0
gfxbase:dc.l 0

Initchips:				; Initialize custom chips
move.w	$dff01c,intesave
move.w	$dff01e,intrsave
move.w	$dff002,dmasave
move.w	$dff010,adksave
move.w	#$87f0,$dff096
move.w	#%0111111111111111,$dff09a	; INTENA
move.w	#%1100000000110100,$dff09a	; Enable desired IRQ's
move.l	#copl,$dff080
rts

intesave:dc.w	0
intrsave:dc.w	0
dmasave:dc.w	0
adksave:dc.w	0

InitInt:				; Initialize interrupts
move.l	$6c,level3save			; Save level 3 vector
move.l	$6c,af3+2
move.l	$68,level2save			; Save level 2 vector
move.l	$68,af2+2
move.l	#level2irq,$68			; Set new interrupt vector 2
move.l	#level3irq,$6c			; Set new interrupt vector 3
rts

level2save:dc.l 0
level3save:dc.l 0

ResetInt:				; Reset Interrupts
move.l	level3save,$6c			; Restore level 3 vector
move.l	level2save,$68			; Restore level 2 vector
rts

Resetchips:				; Reset custom chips
move.w	intesave,d7
bset	#$f,d7
move.w	d7,$dff09a			; Reset Interrupts
move.w	intrsave,d7
bset	#$f,d7
move.w	d7,$dff09c			; Reset interrupt request
move.w	dmasave,d7
bset	#$f,d7
move.w	d7,$dff096			; Reset DMAConw
move.w	adksave,d7
bset	#$f,d7
move.w	d7,$dff09e			; Reset ADK
move.l	gfxbase,a0
move.l	$26(a0),$dff080
rts

SwitchOSIn:				; Allow OS to operate again.
move.l	4,a6				; System Base
jsr	-$8a(a6)			; _LVOPermit
move.l	systack,d0			; Systemstack
jsr	-$9c(a6)			; _LVOUserState
rts

level2irq:
af2:jmp 0

level3irq:
movem.l	d0/d1/d2/d3/d4/d5/d6/d7/a0/a1/a2/a3/a4/a5/a6,-(a7)
bsr	clearscreen
bsr	sinusrender
bsr	possy_scroll
bsr	logoscroll
bsr	mt_music
movem.l	(a7)+,d0/d1/d2/d3/d4/d5/d6/d7/a0/a1/a2/a3/a4/a5/a6
af3:jmp 0

Wait:					; Wait.
wtl:
cmp.b	#255,$dff006
bne.s	wtl
bsr	movestars
bsr	getmouzy
bsr	movehori
bsr	movehori2
bsr	caciaiuolo
bsr	stars3d
btst	#6,$bfe001
bne.s	wait
rts

dmastuff:dc.w	0

Getmouzy:
	clr.l	d5
	move.b	$dff00a,d5
	btst	#2,d5
	beq	niente
	btst	#7,d5
	beq	su

giu:
	tst.w	prgnumber
	beq	niente
	sub.w	#40*8,pos
	sub.w	#1,prgnumber
	bra	niente

su:
	move.w	max,d0
	cmpi.w	prgnumber,d0
	beq	niente
	add.w	#40*8,pos
	add.w	#1,prgnumber

niente:
	clr.w	$dff036		; Niente ripetizione del mouse
	rts

Copl:
dc.w	$0120
sp1:	dc.w $0000,$0122
sp2:	dc.w $0000,$0124
sp3:	dc.w $0000,$0126
sp4:	dc.w $0000
dc.w	$0128
sp5:	dc.w $0000,$012A
sp6:	dc.w $0000,$012C
sp7:	dc.w $0000,$012E
sp8:	dc.w $0000
dc.w	$0130,$0000,$0132,$0000,$0134,$0000,$0136,$0000
dc.w	$0138,$0000,$013A,$0000,$013C,$0000,$013E,$0000
dc.w	$008e,$2cd0,$0090,$6de0,$0092,$0028,$0094,$00d8
dc.w	$0108,$0012,$010a,$0012
dc.w	$0100,$2200
LogoBpl:dc.l  $00e00005,$00e20000,$00e40005,$00e60e00
LogoScrollLines:
dc.l	$2c01fffe,$01020000,$00e20000,$00e60f00
dc.w	$0104,$0000
dc.w	$0180,$0000,$0182,$0fff,$0184,$088a,$0186,$0446
dc.w	$01a2,$0888,$01a4,$0aaa,$01a6,$0fff
dc.w	$01aa,$0888,$01ac,$0888,$01ae,$0888
dc.w	$01b2,$0888,$01b4,$0888,$01b6,$0888
dc.w	$6e01,$fffe,$008e,$6e81,$0090,$2cc1,$0092,$0038,$0094,$00d0
dc.w	$0100,$0000,$0102,$0000,$0108,$0000,$010a,$0000
dc.w	$7009,$fffe,$0180,$0000
dc.w	$7109,$fffe,$0180,$0001
dc.w	$7209,$fffe,$0180,$0002
dc.w	$7309,$fffe,$0180,$0003
dc.w	$7409,$fffe,$0180,$0004
dc.w	$7509,$fffe,$0180,$0005
dc.w	$7609,$fffe,$0180,$0006
dc.w	$7709,$fffe,$0180,$0007
dc.w	$7809,$fffe,$0180,$0008
dc.w	$7909,$fffe,$0180,$0009
dc.w	$7a09,$fffe,$0180,$000a
dc.w	$7b09,$fffe,$0180,$000b
dc.w	$7c09,$fffe,$0180,$000c
dc.w	$7d09,$fffe,$0180,$000d
dc.w	$7e09,$fffe,$0180,$000e

dc.l	$7f0ffffe

HoriLine:
dc.l	$01800000,$01800000,$01800000,$01800000,$01800000,$01800000
dc.l	$01800000,$01800000,$01800000,$01800000,$01800000,$01800000
dc.l	$01800000,$01800000,$01800000,$01800000,$01800000,$01800000
dc.l	$01800000,$01800000,$01800000,$01800000,$01800000,$01800000
dc.l	$01800000,$01800000,$01800000,$01800000,$01800000,$01800000
dc.l	$01800000,$01800000,$01800000,$01800000,$01800000,$01800000
dc.l	$01800000,$01800000,$01800000,$01800000,$01800000,$01800000
dc.l	$01800000,$01800000,$01800000,$01800000,$01800000,$01800000
dc.l	$01800000,$01800000,$01800000,$01800000,$01800000,$01800000
dc.l	$01800000,$01800000,$01800000,$01800000,$01800000,$01800000
dc.l	$01800000,$01000000
dc.w	$8001,$fffe
dc.w	$0100,$1200
dc.w	$00e0,$0005,$00e2
pos:	dc.w  $5000
dc.w	$0180,$0000,$0182,$0202
dc.w	$8209,$fffe,$0182,$0303
dc.w	$8409,$fffe,$0182,$0404
dc.w	$8609,$fffe,$0182,$0505
dc.w	$8809,$fffe,$0182,$0606
dc.w	$8a09,$fffe,$0182,$0707
dc.w	$8c09,$fffe,$0182,$0808
dc.w	$8e09,$fffe,$0182,$0909
dc.w	$9009,$fffe,$0182,$0a0a
dc.w	$9209,$fffe,$0182,$0b0b
dc.w	$9409,$fffe,$0182,$0c0c
dc.w	$9609,$fffe,$0182,$0d0d
dc.w	$9809,$fffe,$0180,$000e,$0182
Colorasso:dc.w$0ff0
dc.w	$a009,$fffe,$0180,$0000,$0182,$0d0d
dc.w	$a209,$fffe,$0182,$0c0c
dc.w	$a409,$fffe,$0182,$0b0b
dc.w	$a609,$fffe,$0182,$0a0a
dc.w	$a809,$fffe,$0182,$0909
dc.w	$aa09,$fffe,$0182,$0808
dc.w	$ac09,$fffe,$0182,$0707
dc.w	$ae09,$fffe,$0182,$0606
dc.w	$b009,$fffe,$0182,$0505
dc.w	$b209,$fffe,$0182,$0404
dc.w	$b409,$fffe,$0182,$0303
dc.w	$b609,$fffe,$0182,$0202,$0100,$0000
dc.l	$b80ffffe

HoriLine2:
dc.l	$01800000,$01800000,$01800000,$01800000,$01800000,$01800000
dc.l	$01800000,$01800000,$01800000,$01800000,$01800000,$01800000
dc.l	$01800000,$01800000,$01800000,$01800000,$01800000,$01800000
dc.l	$01800000,$01800000,$01800000,$01800000,$01800000,$01800000
dc.l	$01800000,$01800000,$01800000,$01800000,$01800000,$01800000
dc.l	$01800000,$01800000,$01800000,$01800000,$01800000,$01800000
dc.l	$01800000,$01800000,$01800000,$01800000,$01800000,$01800000
dc.l	$01800000,$01800000,$01800000,$01800000,$01800000,$01800000
dc.l	$01800000,$01800000,$01800000,$01800000,$01800000,$01800000
dc.l	$01800000,$01800000,$01800000,$01800000,$01800000,$01800000
dc.l	$01800000

dc.w	$b909,$fffe,$0180,$000e
dc.w 	$ba01,$fffe,$0092,$0028,$0094,$00d0
dc.w 	$0100,$3200
dc.w	$00e0,$0003,$00e2,$2000,$00e4,$0003,$00e6,$5000
dc.w 	$00e8,$0004,$00ea,$09cc
dc.w	$0182,$0446,$0184,$088a,$0186,$0cce
dc.w	$0188
Colors: dc.w  $000f,$018a,$000f,$018c,$000f,$018e,$000f
dc.w	$ba09,$fffe,$0180,$000d
dc.w	$bb09,$fffe,$0180,$000c
dc.w	$bc09,$fffe,$0180,$000b
dc.w	$bd09,$fffe,$0180,$000a
dc.w	$be09,$fffe,$0180,$0009
dc.w	$bf09,$fffe,$0180,$0008
dc.w	$c009,$fffe,$0180,$0007
dc.w	$c109,$fffe,$0180,$0006
dc.w	$c209,$fffe,$0180,$0005
dc.w	$c309,$fffe,$0180,$0004
dc.w	$c409,$fffe,$0180,$0003
dc.w	$c509,$fffe,$0180,$0002
dc.w	$c609,$fffe,$0180,$0001
dc.w	$c709,$fffe,$0180,$0000
dc.w	$ffff,$fffe

Setupsin:
	move.w 	#149,d0
	lea 	sinusmat3,a0

molt:
	clr.l d1
	move.w (a0),d1
	muls #$2c,d1
	move.w d1,(a0)+
	dbf d0,molt
	rts

waitblit:
	btst 	#$0e,$dff002
	bne.s 	waitblit
	rts

clearscreen:
	bsr 	waitblit
	move.l 	#$09000000,$dff040
	move.w 	#00,$dff066
	move.l 	#$409cc,$dff054
	move.w 	#%0010100100011000,$dff058
	bsr 	waitblit
	rts

caciaiuolo:
	move.l	kunta_kinte,a1
	move.w	(a1)+,d0
	cmpi.w	#$ffff,d0
	bne	no_dai
	move.l	#tabeassa,a1
	move.w	(a1)+,d0

no_dai:
	move.w	d0,colorasso
	move.l	a1,kunta_kinte
	rts

kunta_kinte:	dc.l tabeassa

tabeassa:
dc.w	$111,$222,$333,$444,$555,$666,$777,$888,$999,$aaa,$bbb,$ccc
dc.w	$ddd,$eee,$fff,$eee,$ddd,$ccc,$bbb,$aaa,$999,$888,$777,$666
dc.w	$555,$444,$333,$222,$111,$000,$ffff

sinusrender:
	clr.l 	d0
	move.l 	#$41658,d1	
	move.l 	#$30240,d2	; source buffer
	clr.l 	d3
	move.w 	#$f000,d3
	move.b 	sspeed,d0
	add.l 	d0,sinusloc
	move.l 	sinusloc,a2
	cmp.b 	#$aa,(A2)
	bne 	sr1
	move.l 	#sinusmat3,sinusloc
	move.l 	#sinusmat3,a2

sr1:
	move.w 	#86,d0
	move.w 	#$0dfc,$dff040
	clr.w 	$dff042
	move.w 	#44,$dff064
	move.w 	#42,$dff062
	move.w 	#42,$dff066
	move.w 	#$4,$dff054
	move.w 	#$4,$dff04c
	move.w 	#$3,$dff050
	
sinuscrollstart:
	add.w 	(a2),d1
	move.w 	d3,$dff044
	move.w 	d2,$dff050+2
	move.w 	d1,$dff04c+2
	move.w 	d1,$dff054+2
	move.w 	#%0000100001000001,$dff058
	sub.w 	(a2)+,d1
	ror.w 	#$04,d3
	bcc.s 	ss2
	addq.w 	#$02,d1
	addq.w 	#$02,d2		

ss2:
	cmp.b 	#$aa,(a2)
	bne.s 	ss4
	lea 	sinusmat3,a2

ss4:
	dbf 	d0,sinuscrollstart
	rts

POSSY_SCROLL:
	btst	#$01,BUMP_BITS		; Controlla se pausare
	bne	BUMP_PAUSE
	cmp.w	#$10,CHAR_OFFSET	; Se il carattere corrente e'
	bne	BUMP_STOP		; $10
	clr.w	CHAR_OFFSET		; Pulisce il char offset
	bsr	BUMP_LETTER		; Poi inserisce la lettera

BUMP_STOP:
	add.w	#$02,CHAR_OFFSET	; Addiziona 2 al char_offset
	bsr	BUMP_BLIT2		; E blitta il testo
	rts

BUMP_PAUSE:
	add.w	#$0001,BUMP_TIMER	; Routine di pausa (facile)
	cmp.w	#$005a,BUMP_TIMER	; I.D.C.
	bne	BUMP_PAUSEAGAIN
	bclr	#$01,BUMP_BITS
	clr.w	BUMP_TIMER

BUMP_PAUSEAGAIN:
	rts

BUMP_LETTER:				; Routine principale
	lea	BUMPING_TEXT,a0		; Scrolltext in a0
	move.l	BUMPTEXT_OFFSET,d0	; Pointer in d0
	add.l	d0,a0			; Lo addiziona al testo
	add.l	#$01,d0			; Addiziona 1
	move.b	(a0),d1			; Copia la lettera in d1
	cmp.b	#$ff,d1			; E' $ff?
	bne	NEW_LETTER		; No? Vai
	clr.l	d0			; Cancella nuovamente il pointer
	move.b	#$20,d1			; Fai uno spazio

NEW_LETTER:
	move.l	d0,BUMPTEXT_OFFSET	; Restituisce il valore pointer
	lea	BUMP_CHARS,a0		; Mappa dei caratteri in a0
	clr.l	d0
	clr.l	d2
	clr.l	d3

GET_BLETTER:
	move.b	(a0)+,d3		; Copia ognuno in d3
	cmp.b	d1,d3			; Se il carattere dello scroll
	beq	OK_BLETTER		; e' riconosciuto va a OK_BLETTER
	add.w	#$01,d0			; Altrimenti addiziona 1 a d0
	cmp.w	#10,d0			; E se non e' 10 torna
	bne	GET_BLETTER
	clr.l	d0			; Se e' 10 lo cancella
	add.w	#$01,d2			; Lo stesso con d2
	cmp.w	#10,d2
	bne	GET_BLETTER
	cmp.b	#'\',d1			; Se il carattere e' "\"
	bne	BUMP_NOGOOD		; Setta a 1 BUMP_BITS
	bset	#$01,BUMP_BITS		; Per la pausa

BUMP_NOGOOD:
	move.b	#6,d0
	move.b	#5,d2

OK_BLETTER:
	mulu	#1240,d2		; 1240*5=6200
	mulu	#4,d0			; 6*4=24
	add.l	d0,d2			; Addiziona i valori
	move.l	BUMPSET,a0		; Set di caratteri in a0
	add.l	d2,a0			; Addiziona i valori
	move.l	BUMPCHAR,a1		; Indirizzo in cui stampare il
	MOVE.W	#31,D0			; Carattere e contatore

BUMP_RASTA:
	MOVE.L	(A0),(A1)		; Copia il carattere dal set
	ADD.L	#$0028,A0		; Allo schermo, addizionando
	ADD.L	#$002e,A1		; Un tot sia al set che
	SUB.W	#$0001,D0		; All'indirizzo del bpl dello
	BNE	BUMP_RASTA		; Schermo, il tutto d0 volte
	rts

BUMP_BLIT2:
	lea	$dff000,a5
	move.w	#$c9f0,$40(a5)		; Step
	move.w	#$0000,$42(a5)
	move.l	#$ffffffff,$44(a5)
	move.l	#$00000000,$64(a5)
	move.l	BUMPSCROLL,a0		; Indirizzo bpl
	move.l	a0,$54(a5)
	add.l	#$02,a0
	move.l	a0,$50(a5)		; Altro indirizzo 8 bytes dopo

WAIT_BLIT2:
	btst	#$0e,$02(a5)
	bne	WAIT_BLIT2
	move.w	#$0819,$58(a5)		; Start blitter
	LEA	$30240,A0		; Pulisce le schifezze
	CLR.L	(A0)+
	CLR.L	(A0)+
	CLR.L	(A0)+
	CLR.L	(A0)+
	CLR.L	(A0)+
	CLR.L	(A0)+
	CLR.L	(A0)+
	CLR.L	(A0)+
	CLR.L	(A0)+
	CLR.L	(A0)+
	CLR.L	(A0)+
	rts

sinusloc:dc.l 	sinusmat3
sspeed:	dc.b 	10,0
Scrolldelay:	dc.w	$0005
BUMPTEXT_OFFSET:DC.L	0
BUMPSET:	DC.L	$47000
BUMPSCROLL:	DC.L	$30240
BUMPCHAR:	DC.L	$3029C
CHAR_OFFSET:	DC.W	$0
BUMP_OFFSET:	DC.W	$0
BUMP_BITS:	DC.W	$0000
BUMP_TIMER:	DC.W	$0

BUMP_CHARS:
DC.B	"ABCDEFGHIJKLMNOPQRSTUVWXYZ!'+.0123456789,?:<>^ -*",0

Copystuff:
	lea	thefont,a0
	lea	$47000,a1
	move.l	#8000,d0

Copyfont:
	move.l	(a0)+,(a1)+
	move.l	(a0),$dff180
	dbra	d0,copyfont
	lea	thepic,a0
	lea	$50000,a1
	move.l	#7680,d0

Copypic:
	move.l	(a0)+,(a1)+
	move.l	(a0),$dff180
	dbra	d0,copypic
	rts

LogoScroll:
	moveq	#0,d1
	move.l	#LineCounter2,a1
	move.l	#LogoScrollLines+7,a2

LogoLoop:
	move.l	#SinusTable2,a0
	move.w  (a1),d1		
	add.w   d1,a0		
	cmp.b	#70,(a0)
	beq	Add1
	cmp.b	#60,(a0)
	beq	Sub1

SubReturn:
	cmp.b   #99,(a0)	
	bne.S	InteSlutAn		
	clr.w   (a1)
	bra.S	LogoScroll

InteSlutAn:
	addq.w	#1,(a1)+

Slutet:
	move.b  (a0),(a2)+  	
	rts

Add1:
	move.l	a2,SaveAdress
	add.l	#3,a2

NewLoop1:
	add.w	#2,(a2)
	add.l	#4,a2
	add.w	#2,(a2)
	move.l	SaveAdress,a2
	add.w	#1,(a1)
	bra	LogoLoop

Sub1:
	move.l	a2,SaveAdress
	add.l	#3,a2

NewLoop2:
	sub.w	#2,(a2)
	add.l	#4,a2
	sub.w	#2,(a2)
	move.l	SaveAdress,a2
	add.w	#1,(a1)
	bra	LogoLoop

SaveAdress:	dc.l	0
LineCounter2:	dc.w	0

SinusTable2:	
	dc.b	$ff,$ff,$ff,$ff,$ff
	dc.b	$ee,$dd,$cc
	dc.b	$aa,$88,$66,$44
	dc.b	$11,70,$ee,$bb
	dc.b	$77,$33,70,$ff,$bb,$77,$33,70
	dc.b	$ee,$99,$44,70,$ff,$aa,$55
	dc.b	$00,70,$bb,$66,$11,70,$cc,$77,$22,70
	dc.b	$ee,$aa,$66,$22,70,$ee,$aa
	dc.b	$77,$44,$11,70
	dc.b	$ff,$dd,$bb,$99
	dc.b	$88,$77,$66
	dc.b	$66,$66,$66,$66
	dc.b	$77,$88,$99,$bb,$dd,$ff,60
	dc.b	$11,$44,$77,$aa,$ee,60,$22,$66,$aa,$ee,60
	dc.b	$22,$77,$cc,60,$11,$66,$bb,60,$00,$55,$aa
	dc.b	$ff,60,$44,$99,$ee,60,$33,$77,$bb,$ff,60
	dc.b	$33,$77,$bb,$ee,60,$11,$44,$66,$88,$aa
	dc.b	$cc,$dd,$ee
	dc.b	99
	even

sinusmat3:
	dc.w	-69,-69,-69,-69,-68,-68,-68,-67
	dc.w	-67,-66,-66,-65,-64,-63,-62,-61
	dc.w	-60,-59,-58,-57,-56,-54,-53,-52
	dc.w	-50,-49,-48,-46,-45,-43,-41,-40
	dc.w	-38,-36,-35,-33,-32,-30,-28,-26
	dc.w	-25,-23,-22,-20,-18,-17,-15,-13
	dc.w	-12,-10,-9,-8,-6,-5,-4,-2
	dc.w	-1,0,0,1,2,3,4,5
	dc.w	6,7,7,8,8,9,9,9
	dc.w	10,10,10,10,10,10,10,9
	dc.w	9,9,8,8,7,7,6,5
	dc.w	4,3,2,1,0,0,-1,-2
	dc.w	-4,-5,-6,-8,-9,-10,-12,-13
	dc.w	-15,-17,-18,-20,-22,-23,-25,-26
	dc.w	-28,-30,-32,-33,-35,-36,-38,-40
	dc.w	-41,-43,-45,-46,-48,-49,-50,-52
	dc.w	-53,-54,-56,-57,-58,-59,-60,-61
	dc.w	-62,-63,-64,-65,-66,-66,-67,-67
	dc.w	-68,-68,-68,-69,-69,-69
	blk.w	20,$aaaa

TEXT:
	LEA	RASTA_TEXT,A0
	MOVE.L	TEXT_OFFSET,D0
	ADD.L	#$01,TEXT_OFFSET
	MOVE.B	$00(A0,D0.L),D2
	CMP.B	#$FF,D2
	BEQ	END_TEXT
	BSR	OK_RASTA
	BRA	TEXT

END_TEXT:
	CLR.L	TEXT_OFFSET
	RTS

OK_RASTA:
GET_CHAR:
	LEA	RASTA_MAP,A0
	MOVEQ	#$00,D0
	MOVEQ	#$00,D1
GET_IT:
	MOVE.B	(A0)+,D0
	CMP.B	D2,D0
	BEQ	OK_CHAR
	ADD.W	#$01,D1
	BRA	GET_IT
OK_CHAR:
	LEA	BUBBLE_SET,A0
	MULU	#$08,D1
	ADD.L	D1,A0

GET_POS:
	MOVE.L	BITMAP,A1
	MOVEQ	#$00,D0
	MOVEQ	#$00,D1
	MOVE.W	ROW,D0
	MOVE.W	COL,D1
	MULU	#$140,D1
	ADD.W	D0,D1
	ADD.W	D1,A1
END_LINE:
	ADD.W	#$01,ROW
	CMP.W	#$28,ROW
	BNE	PRINT_IT
	CLR.W	ROW
	ADD.W	#$01,COL

PRINT_IT:
	MOVE.B	(A0)+,00(A1)
	MOVE.B	(A0)+,40(A1)
	MOVE.B	(A0)+,80(A1)
	MOVE.B	(A0)+,120(A1)
	MOVE.B	(A0)+,160(A1)
	MOVE.B	(A0)+,200(A1)
	MOVE.B	(A0)+,240(A1)
	MOVE.B	(A0)+,280(A1)
	bsr	calcmpn
	RTS

Setstars:
	move.l	#sprite0,d0
	move.w	d0,sp2
	swap	d0
	move.w	d0,sp1
	move.l	#sprite1,d0
	move.w	d0,sp4
	swap	d0
	move.w	d0,sp3
	move.l	#sprite2,d0
	move.w	d0,sp6
	swap	d0
	move.w	d0,sp5
	move.l	#sprite3,d0
	move.w	d0,sp8
	swap	d0
	move.w	d0,sp7
	rts

Movestars:
	lea	sprite0+1,a0
	moveq	#sprite0_end-sprite0-4/8-1,d1
	moveq	#1,d2

stars_loop:
	cmp.b	#$1f,(a0)
	bne.s	stars_weiter1
	move.b	#$df,(a0)	
	bra.s	stars_no_add	

stars_weiter1:
	sub.b	d2,(a0)

stars_no_add:
	addq.l	#1,d2
	cmp.b	#6,d2
	bne.s	stars_weiter2
	moveq	#1,d2

stars_weiter2:
	add.l	#8,a0
	dbra	d1,stars_loop

stars_end:
	rts

sprite0:
	dc.l	$2A5D2B00,$80000000,$2CA02D00,$00008000
	dc.l	$2E782F00,$80008000,$30B13100,$80000000
	dc.l	$32623300,$00008000,$34A03500,$80008000
	dc.l	$36C23700,$80000000,$387C3900,$00008000
	dc.l	$3AB43B00,$80008000,$3CEC3D00,$80000000
	dc.l	$3E1C3F00,$00008000,$40334100,$80008000
	dc.l	$426F4300,$80000000,$44CF4500,$00008000
	dc.l	$467E4700,$80008000,$485D4900,$80000000
	dc.l	$4A944B00,$00008000,$4CBD4D00,$80008000
	dc.l	$4EEF4F00,$80000000,$50275100,$00008000
	dc.l	$52505300,$80008000,$54745500,$80000000
	dc.l	$56915700,$00008000,$58A85900,$80008000
	dc.l	$5AC15B00,$80000000,$5C815D00,$00008000
	dc.l	$5E5A5F00,$80008000,$60366100,$80000000
	dc.l	$62346300,$00008000,$645C6500,$80008000
	dc.l	$667C6700,$80000000,$68986900,$00008000
	dc.l	$6AAE6B00,$80008000,$6CC06D00,$80000000
	dc.l	$6ED96F00,$00008000,$70CC7100,$80008000
	dc.l	$72B07300,$80000000,$748E7500,$00008000
	dc.l	$765E7700,$80008000,$784E7900,$80000000
	dc.l	$7A5E7B00,$80008000,$7C4E7D00,$80000000
	dc.l	$7E5E7F00,$80008000
	dc.l	$00000000
Sprite0_end:

BUBBLE_SET:
DC.W $666E,$6E60,$623C,$0,$7CE6,$FEFE,$E6E6,$E600
DC.W $FCE6,$FCE6,$FEFE,$FC00,$7CE6,$E0E6,$FEFE,$7C00
DC.W $FCE6,$E6E6,$FEFE,$FC00,$FEE0,$FCE0,$FEFE,$FE00
DC.W $FEE0,$FCE0,$E0E0,$E000,$7EE0,$EEE6,$FEFE,$7C00
DC.W $E6E6,$FEE6,$E6E6,$E600,$7C38,$3838,$7C7C,$7C00
DC.W $7E1C,$1CDC,$FCFC,$7800,$E6E6,$ECF8,$ECE6,$E600
DC.W $E0E0,$E0E6,$FEFE,$FE00,$EEFE,$FED6,$C6C6,$C600
DC.W $E6F6,$FEFE,$EEE6,$E600,$7CE6,$E6E6,$FEFE,$7C00
DC.W $FCE6,$E6FE,$FCE0,$E000,$7CE6,$E6EE,$EEFE,$7E00
DC.W $FCE6,$E6FC,$FEEE,$E600,$7EE0,$FC7E,$1EFE,$FC00
DC.W $FE38,$3838,$3838,$3800,$E6E6,$E6E6,$FEFE,$7C00
DC.W $E6E6,$E6E6,$FE7C,$3800,$C6C6,$D6FE,$FEEE,$C600
DC.W $C6EE,$7C38,$7CEE,$C600,$EEEE,$FE7C,$3838,$3800
DC.W $FE1C,$3870,$FEFE,$FE00,$3C30,$3030,$3030,$3C00
DC.W $C12,$307C,$3062,$FC00,$3C0C,$C0C,$C0C,$3C00
DC.W $18,$3C7E,$1818,$1818,$10,$307F,$7F30,$1000
DC.W $0,$0,$0,$0,$1818,$1818,$0,$1800
DC.W $6666,$6600,$0,$0,$6666,$FF66,$FF66,$6600
DC.W $183E,$603C,$67C,$1800,$6266,$C18,$3066,$4600
DC.W $3C66,$3C38,$6766,$3F00,$60C,$1800,$0,$0
DC.W $C18,$3030,$3018,$C00,$3018,$C0C,$C18,$3000
DC.W $66,$3CFF,$3C66,$0,$18,$187E,$1818,$0
DC.W $0,$0,$18,$1830,$0,$7E,$0,$0
DC.W $0,$0,$18,$1800,$306,$C18,$3060,$0
DC.W $3C66,$6E76,$6666,$3C00,$1818,$3818,$1818,$7E00
DC.W $3C66,$60C,$3060,$7E00,$3C66,$61C,$666,$3C00
DC.W $60E,$1E66,$7F06,$600,$7E60,$7C06,$666,$3C00
DC.W $3C66,$607C,$6666,$3C00,$7E66,$C18,$1818,$1800
DC.W $3C66,$663C,$6666,$3C00,$3C66,$663E,$666,$3C00
DC.W $0,$1800,$18,$0,$18,$0,$1818,$300E
DC.W $1830,$6030,$180E,$0,$0,$7E00,$7E00,$0
DC.W $7018,$C06,$C18,$7000,$3C66,$60C,$1800,$1800

RASTA_MAP:
DC.B	"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[£]^| !_#$%&"
DC.B	"'()*+,-./0123456789:;<=>?"

BITMAP:		DC.L	$55000
TEXT_OFFSET:	DC.L 	$0000
ROW:		DC.W 	$0000
COL:		DC.W 	$0000
PRGNUMBER:	DC.w	0

Calcmpn:
	move.w	#rasta_end-rasta_text,d0
	divu	#40,d0
	subq	#4,d0
	move.w	d0,max
	rts

MAX:dc.w 0

Set3dstars:
	move.w  #$0045,D3		;Numero di Stelline
	move.l  #$00074000,A0		;Tavola per le Stelline

Stelline:
	bsr.l   Genera			;Generatore Stelline?	
	move.w  D0,(A0)+
	bsr.l   Genera
	move.w  D0,(A0)+
	bsr.l   Genera
	andi.w  #$01ff,D0
	move.w  D0,(A0)+
	dbf     D3,Stelline
	rts

stars3d:
	move.l  #$00074000,A4		;Tavola Stelline in a4
	move.w  #20,D3			;Numero Stelline in d3
	move.l  #$00073000,A5		;Altra tavola in a5

CaricaStelline:
	move.w  (A4)+,D4		;Stellina1 in d4
	move.w  (A4)+,D5		;Stellina2 in d5
	move.w  (A4),D6			;Stellina3 in d6
	subi.w  #4,(A4)+		;speed
	tst.w   D6			;testa la stellina3
	ble.l   Another			;Se è meno va...
	ext.l   D4			;estende la stellina1
	divs    D6,D4			;divide la stellina3 per St1
	addi.w  #192,D4			;xcenter
	ext.l   D5			;estende stellina2
	divs    D6,D5			;divide st3 per st1
	addi.w  #60,D5			;ycenter
	tst.w   D4			;Se st1 è sottozero
	blt.l   Another	
	tst.w   D5			;Se st2 è sottozero
	blt.l   Another	
	cmpi.w  #383,D4			;max x
	bgt.l   Another
	cmpi.w  #120,D5			;max y
	bgt.l   Another
	move.w  (A5),D0			;carica stellina preced.
	move.w  D4,(A5)+		;salva st1
	move.w  (A5),D1			;carica stellina preced.
	move.w  D5,(A5)+		;salva st2
	bsr.l   ClearOld		;Cancella le stelline prec.
	move.w  D4,D0			;Carica le nuove stelline
	move.w  D5,D1			;Carica le nuove stelline
	mulu    #$002c,D1
	move.w  D0,D2
	asr.w   #3,D2
	add.w   D2,D1
	asl.w   #3,D2
	sub.w   D0,D2
	subq.b  #1,D2
	cmpi.w  #$0190,D6		;Se la stellina è vicina
	bgt.s   STColor1		;Bianco
	cmpi.w  #$012c,D6		;Se è un po' più lontana
	bgt.s   STColor2		;grigietto
	bra.s   STColor3		;grigione

STColor1:
	move.l  #$00032000,A1
	adda.l  D1,A1
	bset    D2,(A1)
	bra.s   ExitControl

STColor2:
	move.l  #$00035000,A1
	adda.l  D1,A1
	bset    D2,(A1)
	bra.s   ExitControl

STColor3:
	move.l  #$00032000,A1
	adda.l  D1,A1
	bset    D2,(A1)
	move.l  #$00035000,A1
	adda.l  D1,A1
	bset    D2,(A1)

ExitControl:
	dbf     D3,CaricaStelline
	rts

Genera:
	move.w  $dff006,D0
	lea     Counter,A3
	muls    (A3),D0
	addi.w  #$1249,D0
	ext.l   D0
	lea     Counter,A3
	move.w  D0,(A3)
	rts

Another:
	suba.l  #$00000006,A4
	bsr.l   Genera
	move.w  D0,(A4)+
	bsr.l   Genera
	move.w  D0,(A4)+
	move.w  #$0258,(A4)+
	bra.l   ExitControl

ClearOld:
	mulu    #44,D1
	move.w  D0,D2
	asr.w   #3,D2
	add.w   D2,D1
	asl.w   #3,D2
	sub.w   D0,D2
	subq.b  #1,D2
	move.l  #$00032000,A1
	adda.l  D1,A1
	bclr    D2,(A1)
	move.l  #$00035000,A1
	adda.l  D1,A1
	bclr    D2,(A1)
	rts

Counter:dc.w $0000 

MoveHori:
	move.l	#LinePointers,a1	; Valori orizzontali
	move.l	#HoriLine+2,a2		; Pezzo da cui iniziare
	move.l	#59-1,d7		; N. valori

LineLoop:
	move.l	#Colortab,a0		; Tabella
	add.w	(a1),a0			; Salta al prossimo valore
	cmp.w	#99,(a0)		; E' 99?
	bne.S	Putvalue		; Se si' ricomincia
	move.l	#Colortab,a0
	clr.w	(a1)+
	bra.S	Nexthoriz

Putvalue:
	addq.w	#2,(a1)+		; Passa al prossimo
	move.w	(a0),(a2)		; Copia il valore nel registro

Nexthoriz:
	addq	#4,a2			; 4 linee orizz.
	dbra	d7,LineLoop
	rts

MoveHori2:
	move.l	#LinePointers2,a1	; Valori orizzontali
	move.l	#HoriLine2+2,a2		; Pezzo da cui iniziare
	move.l	#59-1,d7		; N. valori

LineLoop2:
	move.l	#Colortab,a0		; Tabella
	add.w	(a1),a0			; Salta al prossimo valore
	cmp.w	#99,(a0)		; E' 99?
	bne.S	Putvalue2		; Se si' ricomincia
	move.l	#Colortab,a0
	clr.w	(a1)+
	bra.S	Nexthoriz2

Putvalue2:
	addq.w	#2,(a1)+		; Passa al prossimo
	move.w	(a0),(a2)		; Copia il valore nel registro

Nexthoriz2:
	addq	#4,a2			; 4 linee orizz.
	dbra	d7,LineLoop2
	rts

LinePointers:
	dc.w	2,4,6,8,10,12,14,16,18,20,22,24,26,28,30
	dc.w	32,34,36,38,40,42,44,46,48,50,52,54,56,58
	dc.w	60,62,64,66,68,70,72,74,76,78,80,82,84,86
	dc.w	88,90,92,94,96,98,100,102,104,106,108,110
	dc.w	112,114,116,118,120,122,124,126,128

LinePointers2:
	dc.w	2,4,6,8,10,12,14,16,18,20,22,24,26,28,30
	dc.w	32,34,36,38,40,42,44,46,48,50,52,54,56,58
	dc.w	60,62,64,66,68,70,72,74,76,78,80,82,84,86
	dc.w	88,90,92,94,96,98,100,102,104,106,108,110
	dc.w	112,114,116,118,120,122,124,126,128

Colortab:		
dc.w	$f00,$f10,$f20,$f30,$f40,$f50,$f60,$f70,$f80,$f90,$fa0
dc.w	$fb0,$fc0,$fd0,$fe0,$ff0,$fe1,$fd2,$fc3,$fb4,$fa5,$f96
dc.w	$f87,$f78,$f69,$f5a,$f4b,$f3c,$f2b,$f1e,$f0f
dc.w	$e1e,$d2d,$c3c,$b4b,$a5a,$969,$878,$787,$696,$5a5,$4b4
dc.w	$3c3,$2d2,$1e1,$0f0,$0e1,$0d2,$0c3,$0b4,$0a5,$096,$087
dc.w	$078,$069,$05a,$04b,$03c,$02d,$01e,$00f
dc.w	$11f,$22f,$33f,$44f,$55f,$66f,$77f,$88f,$99f,$aaf,$bbf
dc.w	$ccf,$ddf,$eef,$fff,$fee,$fdd,$fcc,$fbb,$faa,$f99,$f88
dc.w	$f77,$f66,$f55,$f44,$f33,$f22,$f11,$f00
dc.w	99

mt_init:lea	mt_data,a0
	move.l	a0,a1
	add.l	#$3b8,a1
	moveq	#$7f,d0
	moveq	#0,d1
mt_loop:move.l	d1,d2
	subq.w	#1,d0
mt_lop2:move.b	(a1)+,d1
	cmp.b	d2,d1
	bgt.s	mt_loop
	dbf	d0,mt_lop2
	addq.b	#1,d2

	lea	mt_samplestarts(pc),a1
	asl.l	#8,d2
	asl.l	#2,d2
	add.l	#$43c,d2
	add.l	a0,d2
	move.l	d2,a2
	moveq	#$1e,d0
mt_lop3:clr.l	(a2)
	move.l	a2,(a1)+
	moveq	#0,d1
	move.w	42(a0),d1
	asl.l	#1,d1
	add.l	d1,a2
	add.l	#$1e,a0
	dbf	d0,mt_lop3

	or.b	#$2,$bfe001
	move.b	#$6,mt_speed
	clr.w	$dff0a8
	clr.w	$dff0b8
	clr.w	$dff0c8
	clr.w	$dff0d8
	clr.b	mt_songpos
	clr.b	mt_counter
	clr.w	mt_pattpos
	rts

mt_end:	clr.w	$dff0a8
	clr.w	$dff0b8
	clr.w	$dff0c8
	clr.w	$dff0d8
	move.w	#$f,$dff096
	rts

mt_music:
	movem.l	d0-d4/a0-a3/a5-a6,-(a7)
	lea	mt_data,a0
	addq.b	#$1,mt_counter
	move.b	mt_counter,D0
	cmp.b	mt_speed,D0
	blt.s	mt_nonew
	clr.b	mt_counter
	bra	mt_getnew

mt_nonew:
	lea	mt_voice1(pc),a6
	lea	$dff0a0,a5
	bsr	mt_checkcom
	lea	mt_voice2(pc),a6
	lea	$dff0b0,a5
	bsr	mt_checkcom
	lea	mt_voice3(pc),a6
	lea	$dff0c0,a5
	bsr	mt_checkcom
	lea	mt_voice4(pc),a6
	lea	$dff0d0,a5
	bsr	mt_checkcom
	bra	mt_endr

mt_arpeggio:
	moveq	#0,d0
	move.b	mt_counter,d0
	divs	#$3,d0
	swap	d0
	cmp.w	#$0,d0
	beq.s	mt_arp2
	cmp.w	#$2,d0
	beq.s	mt_arp1

	moveq	#0,d0
	move.b	$3(a6),d0
	lsr.b	#4,d0
	bra.s	mt_arp3
mt_arp1:moveq	#0,d0
	move.b	$3(a6),d0
	and.b	#$f,d0
	bra.s	mt_arp3
mt_arp2:move.w	$10(a6),d2
	bra.s	mt_arp4
mt_arp3:asl.w	#1,d0
	moveq	#0,d1
	move.w	$10(a6),d1
	lea	mt_periods(pc),a0
	moveq	#$24,d7
mt_arploop:
	move.w	(a0,d0.w),d2
	cmp.w	(a0),d1
	bge.s	mt_arp4
	addq.l	#2,a0
	dbf	d7,mt_arploop
	rts
mt_arp4:move.w	d2,$6(a5)
	rts

mt_getnew:
	lea	mt_data,a0
	move.l	a0,a3
	move.l	a0,a2
	add.l	#$c,a3
	add.l	#$3b8,a2
	add.l	#$43c,a0

	moveq	#0,d0
	move.l	d0,d1
	move.b	mt_songpos,d0
	move.b	(a2,d0.w),d1
	asl.l	#8,d1
	asl.l	#2,d1
	add.w	mt_pattpos,d1
	clr.w	mt_dmacon

	lea	$dff0a0,a5
	lea	mt_voice1(pc),a6
	bsr.s	mt_playvoice
	lea	$dff0b0,a5
	lea	mt_voice2(pc),a6
	bsr.s	mt_playvoice
	lea	$dff0c0,a5
	lea	mt_voice3(pc),a6
	bsr.s	mt_playvoice
	lea	$dff0d0,a5
	lea	mt_voice4(pc),a6
	bsr.s	mt_playvoice
	bra	mt_setdma

mt_playvoice:
	move.l	(a0,d1.l),(a6)
	addq.l	#4,d1
	moveq	#0,d2
	move.b	$2(a6),d2
	and.b	#$f0,d2
	lsr.b	#4,d2
	move.b	(a6),d0
	and.b	#$f0,d0
	or.b	d0,d2
	tst.b	d2
	beq.s	mt_setregs
	moveq	#0,d3
	lea	mt_samplestarts(pc),a1
	move.l	d2,d4
	subq.l	#$1,d2
	asl.l	#2,d2
	mulu	#$1e,d4
	move.l	(a1,d2.l),$4(a6)
	move.w	(a3,d4.l),$8(a6)
	move.w	$2(a3,d4.l),$12(a6)
	move.w	$4(a3,d4.l),d3
	tst.w	d3
	beq.s	mt_noloop
	move.l	$4(a6),d2
	asl.w	#1,d3
	add.l	d3,d2
	move.l	d2,$a(a6)
	move.w	$4(a3,d4.l),d0
	add.w	$6(a3,d4.l),d0
	move.w	d0,8(a6)
	move.w	$6(a3,d4.l),$e(a6)
	move.w	$12(a6),$8(a5)
	bra.s	mt_setregs
mt_noloop:
	move.l	$4(a6),d2
	add.l	d3,d2
	move.l	d2,$a(a6)
	move.w	$6(a3,d4.l),$e(a6)
	move.w	$12(a6),$8(a5)
mt_setregs:
	move.w	(a6),d0
	and.w	#$fff,d0
	beq	mt_checkcom2
	move.b	$2(a6),d0
	and.b	#$F,d0
	cmp.b	#$3,d0
	bne.s	mt_setperiod
	bsr	mt_setmyport
	bra	mt_checkcom2
mt_setperiod:
	move.w	(a6),$10(a6)
	and.w	#$fff,$10(a6)
	move.w	$14(a6),d0
	move.w	d0,$dff096
	clr.b	$1b(a6)

	move.l	$4(a6),(a5)
	move.w	$8(a6),$4(a5)
	move.w	$10(a6),d0
	and.w	#$fff,d0
	move.w	d0,$6(a5)
	move.w	$14(a6),d0
	or.w	d0,mt_dmacon
	bra	mt_checkcom2

mt_setdma:
	move.w	#$12c,d0
mt_wait:dbf	d0,mt_wait
	move.w	mt_dmacon,d0
	or.w	#$8000,d0
	move.w	d0,$dff096
	move.w	#$12c,d0
mt_wai2:dbf	d0,mt_wai2
	lea	$dff000,a5
	lea	mt_voice4(pc),a6
	move.l	$a(a6),$d0(a5)
	move.w	$e(a6),$d4(a5)
	lea	mt_voice3(pc),a6
	move.l	$a(a6),$c0(a5)
	move.w	$e(a6),$c4(a5)
	lea	mt_voice2(pc),a6
	move.l	$a(a6),$b0(a5)
	move.w	$e(a6),$b4(a5)
	lea	mt_voice1(pc),a6
	move.l	$a(a6),$a0(a5)
	move.w	$e(a6),$a4(a5)

	add.w	#$10,mt_pattpos
	cmp.w	#$400,mt_pattpos
	bne.s	mt_endr
mt_nex:	clr.w	mt_pattpos
	clr.b	mt_break
	addq.b	#1,mt_songpos
	and.b	#$7f,mt_songpos
	move.b	mt_songpos,d1
	cmp.b	mt_data+$3b6,d1
	bne.s	mt_endr
	move.b	mt_data+$3b7,mt_songpos
mt_endr:tst.b	mt_break
	bne.s	mt_nex
	movem.l	(a7)+,d0-d4/a0-a3/a5-a6
	rts

mt_setmyport:
	move.w	(a6),d2
	and.w	#$fff,d2
	move.w	d2,$18(a6)
	move.w	$10(a6),d0
	clr.b	$16(a6)
	cmp.w	d0,d2
	beq.s	mt_clrport
	bge.s	mt_rt
	move.b	#$1,$16(a6)
	rts
mt_clrport:
	clr.w	$18(a6)
mt_rt:	rts

mt_myport:
	move.b	$3(a6),d0
	beq.s	mt_myslide
	move.b	d0,$17(a6)
	clr.b	$3(a6)
mt_myslide:
	tst.w	$18(a6)
	beq.s	mt_rt
	moveq	#0,d0
	move.b	$17(a6),d0
	tst.b	$16(a6)
	bne.s	mt_mysub
	add.w	d0,$10(a6)
	move.w	$18(a6),d0
	cmp.w	$10(a6),d0
	bgt.s	mt_myok
	move.w	$18(a6),$10(a6)
	clr.w	$18(a6)
mt_myok:move.w	$10(a6),$6(a5)
	rts
mt_mysub:
	sub.w	d0,$10(a6)
	move.w	$18(a6),d0
	cmp.w	$10(a6),d0
	blt.s	mt_myok
	move.w	$18(a6),$10(a6)
	clr.w	$18(a6)
	move.w	$10(a6),$6(a5)
	rts

mt_vib:	move.b	$3(a6),d0
	beq.s	mt_vi
	move.b	d0,$1a(a6)

mt_vi:	move.b	$1b(a6),d0
	lea	mt_sin(pc),a4
	lsr.w	#$2,d0
	and.w	#$1f,d0
	moveq	#0,d2
	move.b	(a4,d0.w),d2
	move.b	$1a(a6),d0
	and.w	#$f,d0
	mulu	d0,d2
	lsr.w	#$6,d2
	move.w	$10(a6),d0
	tst.b	$1b(a6)
	bmi.s	mt_vibmin
	add.w	d2,d0
	bra.s	mt_vib2
mt_vibmin:
	sub.w	d2,d0
mt_vib2:move.w	d0,$6(a5)
	move.b	$1a(a6),d0
	lsr.w	#$2,d0
	and.w	#$3c,d0
	add.b	d0,$1b(a6)
	rts

mt_nop:	move.w	$10(a6),$6(a5)
	rts

mt_checkcom:
	move.w	$2(a6),d0
	and.w	#$fff,d0
	beq.s	mt_nop
	move.b	$2(a6),d0
	and.b	#$f,d0
	tst.b	d0
	beq	mt_arpeggio
	cmp.b	#$1,d0
	beq.s	mt_portup
	cmp.b	#$2,d0
	beq	mt_portdown
	cmp.b	#$3,d0
	beq	mt_myport
	cmp.b	#$4,d0
	beq	mt_vib
	move.w	$10(a6),$6(a5)
	cmp.b	#$a,d0
	beq.s	mt_volslide
	rts

mt_volslide:
	moveq	#0,d0
	move.b	$3(a6),d0
	lsr.b	#4,d0
	tst.b	d0
	beq.s	mt_voldown
	add.w	d0,$12(a6)
	cmp.w	#$40,$12(a6)
	bmi.s	mt_vol2
	move.w	#$40,$12(a6)
mt_vol2:move.w	$12(a6),$8(a5)
	rts

mt_voldown:
	moveq	#0,d0
	move.b	$3(a6),d0
	and.b	#$f,d0
	sub.w	d0,$12(a6)
	bpl.s	mt_vol3
	clr.w	$12(a6)
mt_vol3:move.w	$12(a6),$8(a5)
	rts

mt_portup:
	moveq	#0,d0
	move.b	$3(a6),d0
	sub.w	d0,$10(a6)
	move.w	$10(a6),d0
	and.w	#$fff,d0
	cmp.w	#$71,d0
	bpl.s	mt_por2
	and.w	#$f000,$10(a6)
	or.w	#$71,$10(a6)
mt_por2:move.w	$10(a6),d0
	and.w	#$fff,d0
	move.w	d0,$6(a5)
	rts

mt_portdown:
	clr.w	d0
	move.b	$3(a6),d0
	add.w	d0,$10(a6)
	move.w	$10(a6),d0
	and.w	#$fff,d0
	cmp.w	#$358,d0
	bmi.s	mt_por3
	and.w	#$f000,$10(a6)
	or.w	#$358,$10(a6)
mt_por3:move.w	$10(a6),d0
	and.w	#$fff,d0
	move.w	d0,$6(a5)
	rts

mt_checkcom2:
	move.b	$2(a6),d0
	and.b	#$f,d0
	cmp.b	#$e,d0
	beq.s	mt_setfilt
	cmp.b	#$d,d0
	beq.s	mt_pattbreak
	cmp.b	#$b,d0
	beq.s	mt_posjmp
	cmp.b	#$c,d0
	beq.s	mt_setvol
	cmp.b	#$f,d0
	beq.s	mt_setspeed
	rts

mt_setfilt:
	move.b	$3(a6),d0
	and.b	#$1,d0
	asl.b	#$1,d0
	and.b	#$fd,$bfe001
	or.b	d0,$bfe001
	rts
mt_pattbreak:
	not.b	mt_break
	rts
mt_posjmp:
	move.b	$3(a6),d0
	subq.b	#$1,d0
	move.b	d0,mt_songpos
	not.b	mt_break
	rts
mt_setvol:
	cmp.b	#$40,$3(a6)
	ble.s	mt_vol4
	move.b	#$40,$3(a6)
mt_vol4:move.b	$3(a6),$8(a5)
	rts
mt_setspeed:
	cmp.b	#$1f,$3(a6)
	ble.s	mt_sets
	move.b	#$1f,$3(a6)
mt_sets:move.b	$3(a6),d0
	beq.s	mt_rts2
	move.b	d0,mt_speed
	clr.b	mt_counter
mt_rts2:rts

mt_sin:
dc.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
dc.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18

mt_periods:
dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
dc.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
dc.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
dc.w $007f,$0078,$0071,$0000,$0000

mt_speed:	dc.b	$6
mt_songpos:	dc.b	$0
mt_pattpos:	dc.w	$0
mt_counter:	dc.b	$0

mt_break:	dc.b	$0
mt_dmacon:	dc.w	$0
mt_samplestarts:blk.l	$1f,0
mt_voice1:	blk.w	10,0
		dc.w	$1
		blk.w	3,0
mt_voice2:	blk.w	10,0
		dc.w	$2
		blk.w	3,0
mt_voice3:	blk.w	10,0
		dc.w	$4
		blk.w	3,0
mt_voice4:	blk.w	10,0
		dc.w	$8
		blk.w	3,0

Sprite1:
dc.l	$c0ccc500,%01101010001011100000000000000000
dc.l    %10001010001010010000000000000000
dc.l    %11101010001011100000000000000000
dc.l    %10001010001010000000000000000000
dc.l	%10001001101010000000000000000000

Sprite2:
dc.l	$c0d4c500,%01110001101111110000000000000000
dc.l    %01001010000100100000000000000000
dc.l    %01110011100100100000000000000000
dc.l    %01000010000100100000000000000000
dc.l	%01000001110100100000000000000000	

Sprite3:
dc.l	$c0dcc500,%00110000000000000000000000000000
dc.l    %01001000000000000000000000000000
dc.l    %01001000000000000000000000000000
dc.l 	%01001000000000000000000000000000
dc.l 	%00110000000000000000000000000000

; THE SCROLL TEXT

BUMPING_TEXT:
DC.B	"   HELLO FOLX... SAVAGE^ IS PROUD TO BRING YA ANOTHER "
DC.B	"FUCKIN' COOL PACKDISK CALLED SANDWICH 7...    CONTACT "
DC.B	"US AT PO BOX 10 - 8607 KAPFENBERG - AUSTRIA           "
EVEN
DC.W	$FFFF

; THE TITLES

RASTA_TEXT:
DC.B	"                                        "
DC.B	"    ** SANDWICH #7/SEPTEMBER 1990 **    "
DC.B	"                                        "
DC.B	"             3D TENNIS (???)            "
DC.B	"     HEAVY METAL DEMO (ZOMBIE BOYS)     "
DC.B	"        MR.DO RUN RUN + (SAVAGE)        "
DC.B	"       TURKEY DEMO  (ZOMBIE BOYS)       "
DC.B	"          TURTLE DEMO (DEXION)          "
RASTA_END:
DC.W	$FFFF

thefont:blk.b 8000,0
thepic:	blk.b 7680,0
mt_data:blk.b 22180,0
