***************************************
* $3F000 - $5B1A8        SAVE WITH WI *
***************************************

>extern "crushoflove",$55000
>extern "newcool",$52800
>extern "coolcharz",$50000
>extern "great!",module

jmp	$3f000
org	$3f000
load	$3f000

	bra	startmain

module=$45000

startmain:
	movem.l	d0-d7/a0-a6,-(a7)
	move.l	$80,intrpt0
	move.l 	#gogo,$80
	trap 	#$00

gogo:
	move.w 	#$2700,sr

Clearstuff:
	lea	$5c000,a0
	lea	$5e800,a1

Clearloop:
	clr.l	(a0)+
	cmpa.l	a0,a1
	lea	$76000,a0
	lea	$7c800,a1

Clearloop2:
	clr.l	(a0)+
	cmpa.l	a0,a1
	bne	clearloop2
	BSR	INITWATERLIST
	bsr	init_music
	move.w 	#$87f0,$dff096
	move.w	#$4000,$dff09a		; via gli interrupt!
	move.l 	#copperl,$dff080
	clr.w 	$dff088
	clr.w 	$dff036
	bsr	wait
	
end:
	bsr	end_music
	move.w 	#$8020,$dff096
	move.w 	#$8010,$dff096
	move.w 	#$0000,sr
	clr.b	$bfec01
	move.w	#$c000,$dff09a		; di nuovo gli interrupt!
	move.l 	intrpt0,$80
	lea 	gn(pc),a1
	move.l	4.w,a6
	jsr	-408(a6)
	move.l	d0,a1
	move.l	$26(a1),$dff080
	clr.w	$dff088
	jsr	-414(a6)
	movem.l	(a7)+,d0-d7/a0-a6
	moveq 	#$00,d0
	rts	

gn:dc.b "graphics.library",0,0
intrpt0:dc.l 0

Wait:					; Wait.
wtl:
cmp.b	#255,$dff006
bne.s	wtl
BSR	WATEREFFEKT
bsr	writer
bsr	possy_scroll
bsr	clearscreen
bsr	linez
bsr	changelinecolor
bsr	play
btst	#6,$bfe001
bne.s	wait
rts

cflag:dc.w 0

Copperl:
dc.w	$01a2,$0555,$01a4,$0aaa,$01a6,$0fff
dc.w	$0120
sp1:	dc.w	$0000,$0122
sp2:	dc.w	$0000,$0124,$0000,$0126,$0000
dc.w	$0128,$0000,$012A,$0000,$012C,$0000,$012E,$0000
dc.w	$0130,$0000,$0132,$0000,$0134,$0000,$0136,$0000
dc.w	$0138,$0000,$013A,$0000,$013C,$0000,$013E,$0000
dc.w	$008e,$2c81,$0090,$2cc1,$0092,$0038,$0094,$00d0
dc.w	$0102,$0000,$0108,$000,$010a,$000
dc.w	$0100,$5200,$0104,$0000
dc.w	$00e0,$0005,$00e2,$5000
dc.w	$00e4,$0005,$00e6,$5000+5000
dc.w	$00e8,$0005,$00ea,$5000+10000
dc.w	$00ec,$0005,$00ee,$5000+15000
dc.w	$00f0,$0005,$00f2,$5000+20000
	dc.w	$0180,$0000
	dc.w	$0182,$0ECA
	dc.w	$0184,$0E00
	dc.w	$0186,$0fff
	dc.w	$0188,$0fff
	dc.w	$018A,$0115
	dc.w	$018C,$0115
	dc.w	$018E,$0226
	dc.w	$0190,$0227
	dc.w	$0192,$0338
	dc.w	$0194,$0449
	dc.w	$0196,$0559
	dc.w	$0198,$066A
	dc.w	$019A,$077B
	dc.w	$019C,$099C
	dc.w	$019E,$0AAD
	dc.w	$01A0,$0CCD
	dc.w	$01A2,$0DDE
	dc.w	$01A4,$0FFF
	dc.w	$01A6,$0330
	dc.w	$01A8,$0440
	dc.w	$01AA,$0551
	dc.w	$01AC,$0661
	dc.w	$01AE,$0772
	dc.w	$01B0,$0883
	dc.w	$01B2,$0995
	dc.w	$01B4,$0AA6
	dc.w	$01B6,$0BB7
	dc.w	$01B8,$0CC9
	dc.w	$01BA,$0DDB
	dc.w	$01BC,$0EED
	dc.w	$01BE,$0FFF

dc.w	$2009,$fffe,$0180,$0fff
dc.w	$2109,$fffe,$0180,$0dde
dc.w	$2209,$fffe,$0180,$0bbd
dc.w	$2309,$fffe,$0180,$099c
dc.w	$2409,$fffe,$0180,$077b
dc.w	$2509,$fffe,$0180,$055a
dc.w	$2609,$fffe,$0180,$0339
dc.w	$2709,$fffe,$0180,$0118
dc.w	$2809,$fffe,$0180,$0007
dc.w	$2909,$fffe,$0180,$0006
dc.w	$2a09,$fffe,$0180,$0005
dc.w	$2b09,$fffe,$0180,$0004

WATERLIST:
DC.L $2c21FFFE,$00E25000,$00E66388,$00ea7710,$00ee8a98,$00f29e20
DC.L $2d21FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $2e21FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $2f21FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $3021FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $3121FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $3221FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $3321FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $3421FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $3521FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $3621FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $3721FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $3821FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $3921FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $3a21FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $3b21FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $3c21FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $3d21FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $3e21FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $3f21FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $4021FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $4121FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $4221FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $4321FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $4421FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $4521FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $4621FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $4721FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $4821FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $4921FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $4a21FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $4b21FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $4c21FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $4d21FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $4e21FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $4f21FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $5021FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $5121FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $5221FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $5321FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $5421FFFE,$00E25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $5521FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $5621FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $5721FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $5821FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $5921FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $5a21FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $5b21FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $5c21FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $5d21FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $5e21FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $5f21FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $6021FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $6121FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $6221FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $6321FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $6421FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $6521FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $6621FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $6721FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $6821FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $6921FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $6a21FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $6b21FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $6c21FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $6d21FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $6e21FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $6f21FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $7021FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $7121FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $7221FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $7321FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $7421FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $7521FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $7621FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $7721FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $7821FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $7921FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $7a21FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $7b21FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200
DC.L $7c21FFFE,$00e25000,$00E65c80,$00ea6900,$00ee7580,$00f28200

dc.w	$7d01,$fffe
dc.w    $0092,$0038,$0094,$00d0
dc.w	$0100,$2200,$00e0,$0005,$00e2,$c000
dc.w	$00e4,$0007,$00e6,$6000
dc.w	$0108,$0000,$010a,$0000
dc.w	$0182
fattoria: dc.w $0004

Gecko:
dc.w	$7d09,$fffe,$0184
g1:	dc.w  $0f00,$0186
g2:	dc.w  $0f00
dc.w	$8e09,$fffe,$0184
g3:	dc.w  $0f20,$0186
g4:	dc.w  $0f20
dc.w	$9f09,$fffe,$0184
g5:	dc.w  $0f40,$0186
g6:	dc.w  $0f40
dc.w	$b009,$fffe,$0184
g7:	dc.w  $0f60,$0186
g8:	dc.w  $0f60
dc.w	$c109,$fffe,$0184
g9:	dc.w  $0f80,$0186
g10:	dc.w  $0f80
dc.w	$d209,$fffe,$0184
g11:	dc.w  $0fa0,$0186
g12:	dc.w  $0fa0
dc.w	$e309,$fffe,$0184
g13:	dc.w  $0fc0,$0186
g14:	dc.w  $0fc0

dc.w	$fa09,$fffe,$0180,$0005
dc.w	$fb09,$fffe,$0180,$0006
dc.w	$fc09,$fffe,$0180,$0007
dc.w	$fd09,$fffe,$0180,$0118
dc.w	$fe09,$fffe,$0180,$0339
dc.w	$ff09,$fffe,$0180,$055a
dc.w	$ffdf,$fffe
dc.w	$0001,$fffe,$0100,$2200,$00e0,$0007,$00e2,$a000+24
dc.w	$00e4,$0007,$00e6,$a000+24+46
dc.w	$0092,$0028,$0094,$00d0,$0102,$0001,$0108,$2,$010a,2
dc.w	$0182,$0ccc
dc.w	$0184,$0777,$0186,$0aaa
dc.w	$0009,$fffe,$0180,$077b
dc.w	$0109,$fffe,$0180,$099c
dc.w	$0209,$fffe,$0180,$0bbd
dc.w	$0309,$fffe,$0180,$0dde
dc.w	$0409,$fffe,$0180,$0fff
dc.w	$0509,$fffe,$0180,$0000
dc.w	$0d09,$fffe,$0186,$000f
dc.w	$0e09,$fffe,$0186,$000d
dc.w	$0f09,$fffe,$0186,$000b
dc.w	$1009,$fffe,$0186,$0009
dc.w	$1109,$fffe,$0186,$0007
dc.w	$1209,$fffe,$0186,$0005
dc.w	$1309,$fffe,$0186,$0003
dc.w	$1409,$fffe,$0186,$0001
dc.w	$1509,$fffe,$0186,0

dc.w	$1d09,$fffe,$0186,$0100
dc.w	$1e09,$fffe,$0186,$0300
dc.w	$1f09,$fffe,$0186,$0500
dc.w	$2009,$fffe,$0186,$0700
dc.w	$2109,$fffe,$0186,$0900
dc.w	$2209,$fffe,$0186,$0b00
dc.w	$2309,$fffe,$0186,$0d00
dc.w	$2409,$fffe,$0186,$0f00
dc.w	$ffff,$fffe

Gogecko:
	move.l	geckopointer,a1
	move.w	(a1)+,d0
	cmp.w	#$ffff,d0
	bne	geckok
	move.l	#geckotab,a1
	move.w	(a1)+,d0

Geckok:
	move.l	a1,geckopointer
	move.w	d0,g1
	move.w	d0,g2
	sub.w	#$100,d0
	move.w	d0,g3
	move.w	d0,g4
	sub.w	#$100,d0
	move.w	d0,g5
	move.w	d0,g6
	sub.w	#$100,d0
	move.w	d0,g7
	move.w	d0,g8
	sub.w	#$100,d0
	move.w	d0,g9
	move.w	d0,g10
	sub.w	#$100,d0
	move.w	d0,g11
	move.w	d0,g12
	sub.w	#$100,d0
	move.w	d0,g13
	move.w	d0,g14
	sub.w	#$100,d0
	rts

geckopointer:dc.l geckotab

geckotab:
	dc.w	$fff,$ff0,$f00,$f0f,$f8f,$ff8,$f80,$f88,$888,$800
	dc.w	$880,$808,$80f,$8f0,$8f8
	dc.w	$ffff

INITWATERLIST:
      LEA     WATERLIST,A0	; lista in a0
      MOVEQ   #40,D0		; offset da addizionare
      MOVE.W  #$5000,D1		; valori iniz. bpl
      MOVE.W  #$5000+5000,D2
      MOVE.W  #$5000+10000,D3
      MOVE.W  #$5000+15000,D4
      MOVE.w  #$5000+20000,d5
      MOVE.W  #80,D6		; numero linee
      MOVEQ   #0,D7

INITWATER:
      ADD.W   D0,D1		; addizionaa tutto
      ADD.W   D0,D2
      ADD.W   D0,D3
      ADD.W   D0,D4
      ADD.W   D0,D5
      MOVE.W  D1,6(A0,D7.W)
      MOVE.W  D2,10(A0,D7.W)
      MOVE.W  D3,14(A0,D7.W)
      MOVE.W  D4,18(A0,D7.W)
      MOVE.W  D5,22(A0,D7.W)
      ADD.W   #24,D7
      DBF     D6,INITWATER
      MOVEQ   #0,d5
      LEA     WATERTAB,A0
      MOVE.W  #1109,D0

MLOOP2:
      MOVE.W  (A0),D1
      MULU    #40,D1
      MOVE.W  D1,(A0)+
      DBF     D0,MLOOP2
      RTS

WATEREFFEKT:
	MOVEM.L	D0-D7/A0-A6,-(SP)
	LEA	WATERLIST,A0
	LEA	WATERTAB,A1
	MOVE.W	WATERCOUNT,D0
	ADD.W	#1,WATERCOUNT
	CMP.W	#1100,WATERCOUNT
	BLT.S	NONEWWATER
	MOVE.W	#0,WATERCOUNT

NONEWWATER:
	LSL.W	#1,D0
	ADD.W	D0,A1
	MOVEQ	#80,D0		; N.LINEE
	MOVE.W	#$5000,D1
	MOVE.W	#$5000+5000,D2
	MOVE.W	#$5000+10000,D3
	MOVE.W	#$5000+15000,D4
	MOVE.W	#$5000+20000,D5

WATERLOOP:
	MOVE.W	D1,BPL1
	MOVE.W	D2,BPL2
	MOVE.W	D3,BPL3
	MOVE.W	D4,BPL4
	MOVE.W	D5,BPL5
	ADD.W	#40,D1
	ADD.W	#40,D2
	ADD.W	#40,D3
	ADD.W	#40,D4
	ADD.W	#40,D5
	MOVE.W	(A1)+,D6
	ADD.W	D6,BPL1
	ADD.W	D6,BPL2
	ADD.W	D6,BPL3
	ADD.W	D6,BPL4
	ADD.W	D6,BPL5
	MOVE.W	BPL1,06(A0)
	MOVE.W	BPL2,10(A0)
	MOVE.W	BPL3,14(A0)
	MOVE.W	BPL4,18(A0)
	MOVE.W	BPL5,22(A0)
	ADDI.W	#24,A0
	DBF	D0,WATERLOOP
	MOVEM.L	(SP)+,D0-D7/A0-A6
	RTS

BPL1:DC.W 0
BPL2:DC.W 0
BPL3:DC.W 0
BPL4:DC.W 0
BPL5:DC.W 0

WATERCOUNT:	DC.W	0

WATERTAB:
dc.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.W 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0
dc.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.W 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1
dc.W 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0
dc.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.W 0,0,0,1,1,1,1,1,2,2,2,2,2,2,2
dc.W 2,1,1,1,0,0,0,0,0,0,0,-1,-1,-1,-1
dc.W -1,-1,-1,-1,-1,-1,0,0,0,0,0,0,1,1,1
dc.W 2,2,2,2,3,3,3,3,3,3,2,2,2,1,1
dc.W 0,0,0,0,-1,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2
dc.W -1,-1,-1,0,0,0,0,1,1,2,2,3,3,3,4
dc.W 4,4,4,4,3,3,3,2,2,1,0,0,0,-1,-2
dc.W -2,-3,-3,-3,-3,-3,-3,-3,-3,-2,-2,-1,-1,0,0
dc.W 0,0,1,2,2,3,3,4,4,5,5,5,5,5,4
dc.W 4,4,3,2,1,0,0,-1,-2,-2,-3,-4,-4,-4,-4
dc.W -4,-4,-4,-4,-3,-3,-2,-1,-1,0,0,1,1,2,3
dc.W 3,4,5,5,6,6,6,6,6,6,5,4,4,3,1
dc.W 0,0,-1,-2,-3,-4,-5,-5,-5,-5,-5,-5,-5,-4,-4
dc.W -3,-2,-2,-1,0,0,1,2,2,3,4,5,5,6,6
dc.W 7,7,7,7,7,6,5,4,3,2,0,0,-2,-3,-4
dc.W -5,-6,-6,-6,-6,-6,-6,-5,-5,-4,-4,-3,-2,-1,0
dc.W 0,1,2,3,4,4,5,6,7,7,8,8,8,8,8
dc.W 7,6,5,3,2,0,0,-2,-4,-5,-6,-7,-7,-7,-7
dc.W -7,-7,-6,-5,-5,-4,-3,-2,-1,0,0,1,2,3,4
dc.W 5,6,7,7,8,8,9,9,9,8,8,7,5,4,2
dc.W 0,-1,-3,-4,-6,-7,-7,-8,-8,-8,-8,-7,-7,-6,-5
dc.W -4,-3,-2,-1,0,0,1,2,3,4,5,6,7,8,8
dc.W 9,9,10,9,9,8,7,6,4,2,0,-1,-3,-5,-6
dc.W -7,-8,-9,-9,-9,-8,-8,-7,-6,-5,-4,-3,-2,-1,0
dc.W 0,1,2,3,4,5,6,7,8,9,9,10,10,10,10
dc.W 9,8,6,4,2,0,-1,-3,-5,-7,-8,-9,-9,-9,-9
dc.W -9,-8,-7,-6,-5,-4,-3,-2,-1,0,0,1,2,3,4
dc.W 5,6,7,8,9,10,10,10,10,10,9,8,6,4,2
dc.W 0,-1,-3,-5,-7,-8,-9,-9,-9,-9,-9,-8,-7,-6,-5
dc.W -4,-3,-2,-1,0,0,1,2,3,4,5,6,7,8,9
dc.W 10,10,10,10,10,9,8,6,4,2,0,-1,-3,-5,-7
dc.W -8,-9,-9,-9,-9,-9,-8,-7,-6,-5,-4,-3,-2,-1,0
dc.W 0,1,2,3,4,5,6,7,8,9,10,10,10,10,10
dc.W 9,8,6,4,2,0,-1,-3,-5,-7,-8,-9,-9,-9,-9
dc.W -9,-8,-7,-6,-5,-4,-3,-2,-1,0,0,1,2,3,4
dc.W 5,6,7,8,9,9,10,10,10,9,9,7,6,4,2
dc.W 0,-1,-3,-5,-6,-8,-8,-9,-9,-9,-8,-8,-7,-6,-5
dc.W -4,-3,-2,-1,0,0,1,2,3,4,5,6,7,8,8
dc.W 9,9,9,9,9,8,7,5,4,2,0,-1,-3,-5,-6
dc.W -7,-8,-8,-8,-8,-8,-7,-7,-6,-5,-4,-3,-2,-1,0
dc.W 0,1,2,3,4,5,6,7,7,8,8,9,9,8,8
dc.W 7,6,5,3,2,0,-1,-3,-4,-5,-6,-7,-7,-7,-7
dc.W -7,-7,-6,-5,-4,-4,-3,-2,-1,0,0,1,2,3,4
dc.W 5,5,6,7,7,8,8,8,8,7,6,5,4,3,1
dc.W 0,-1,-2,-4,-5,-5,-6,-6,-7,-6,-6,-6,-5,-5,-4
dc.W -3,-2,-2,-1,0,0,1,2,3,4,4,5,6,6,7
dc.W 7,7,7,7,6,5,5,4,2,1,0,-1,-2,-3,-4
dc.W -5,-5,-5,-6,-6,-5,-5,-5,-4,-3,-3,-2,-1,0,0
dc.W 0,1,2,2,3,4,4,5,5,6,6,6,6,6,5
dc.W 5,4,3,2,1,0,0,-1,-2,-3,-4,-4,-4,-4,-4
dc.W -4,-4,-4,-3,-3,-2,-2,-1,0,0,0,1,1,2,3
dc.W 3,4,4,4,5,5,5,5,4,4,4,3,2,1,1
dc.W 0,0,-1,-1,-2,-3,-3,-3,-3,-3,-3,-3,-3,-2,-2
dc.W -2,-1,-1,0,0,0,1,1,2,2,3,3,3,4,4
dc.W 4,4,4,3,3,3,2,2,1,0,0,0,0,-1,-1
dc.W -2,-2,-2,-2,-2,-2,-2,-2,-2,-1,-1,-1,0,0,0
dc.W 0,1,1,1,2,2,2,2,3,3,3,3,3,2,2
dc.W 2,1,1,1,0,0,0,0,0,-1,-1,-1,-1,-1,-1
dc.W -1,-1,-1,-1,-1,0,0,0,0,0,0,0,1,1,1
dc.W 1,2,2,2,2,2,2,2,2,1,1,1,1,0,0
dc.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.W 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1
dc.W 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0
dc.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
dc.W 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
WATERTABEND:

END_MUSIC:
clr.w onoff
clr.l $dff0a6
clr.l $dff0b6
clr.l $dff0c6
clr.l $dff0d6
move.w #$000f,$dff096
bclr #1,$bfe001
rts

INIT_MUSIC:
move.w #1,onoff
bset #1,$bfe001
lea MODULE,a0
lea 100(a0),a1
move.l a1,SEQpoint
move.l a0,a1
add.l 8(a0),a1
move.l a1,PATpoint
move.l a0,a1
add.l 16(a0),a1
move.l a1,FRQpoint
move.l a0,a1
add.l 24(a0),a1
move.l a1,VOLpoint
move.l 4(a0),d0
divu #13,d0

lea 40(a0),a1
lea SOUNDINFO+4(pc),a2
moveq #10-1,d1
initloop:
move.w (a1)+,(a2)+
move.l (a1)+,(a2)+
addq.w #4,a2
dbf d1,initloop
moveq #0,d2
move.l a0,d1
add.l 32(a0),d1
sub.l #WAVEFORMS,d1
lea SOUNDINFO(pc),a0
move.l d1,(a0)+
moveq #9-1,d3
initloop1:
move.w (a0),d2
add.l d2,d1
add.l d2,d1
addq.w #6,a0
move.l d1,(a0)+
dbf d3,initloop1
move.l SEQpoint(pc),a0
moveq #0,d2
move.b 12(a0),d2		;Get replay speed
bne.s speedok
move.b #3,d2			;Set default speed
speedok:
move.w d2,respcnt		;Init repspeed counter
move.w d2,repspd
INIT2:
clr.w audtemp
move.w #$000f,$dff096		;Disable audio DMA
move.w #$0780,$dff09a		;Disable audio IRQ
moveq #0,d7
mulu #13,d0
moveq #4-1,d6			;Number of soundchannels-1
lea V1data(pc),a0		;Point to 1st voice data area
lea silent(pc),a1
lea o4a0c8(pc),a2
initloop2:
move.l a1,10(a0)
move.l a1,18(a0)
clr.l 14(a0)
clr.b 45(a0)
clr.b 47(a0)
clr.w 8(a0)
clr.l 48(a0)
move.b #$01,23(a0)
move.b #$01,24(a0)
clr.b 25(a0)
clr.l 26(a0)
clr.w 30(a0)
moveq #$00,d3
move.w (a2)+,d1
move.w (a2)+,d3
divu #$0003,d3
move.b d3,32(a0)
mulu #$0003,d3
andi.l #$00ff,d3
andi.l #$00ff,d1
addi.l #$dff0a0,d1
move.l d1,a6
move.l #$0000,(a6)
move.w #$0100,4(a6)
move.w #$0000,6(a6)
move.w #$0000,8(a6)
move.l d1,60(a0)
clr.w 64(a0)
move.l SEQpoint(pc),(a0)
move.l SEQpoint(pc),52(a0)
add.l d0,52(a0)
add.l d3,52(a0)
add.l d7,(a0)
add.l d3,(a0)
move.w #$000d,6(a0)
move.l (a0),a3
move.b (a3),d1
andi.l #$00ff,d1
lsl.w #6,d1
move.l PATpoint(pc),a4
adda.w d1,a4
move.l a4,34(a0)
clr.l 38(a0)
move.b #$01,33(a0)
move.b #$02,42(a0)
move.b 1(a3),44(a0)
move.b 2(a3),22(a0)
clr.b 43(a0)
clr.b 45(a0)
clr.w 56(a0)
adda.w #$004a,a0	;Point to next voice's data area
dbf d6,initloop2
rts

PLAY:
lea pervol(pc),a6
tst.w onoff
bne.s music_on
rts
music_on:
subq.w #1,respcnt		;Decrease replayspeed counter
bne.s nonewnote
move.w repspd(pc),respcnt	;Restore replayspeed counter
lea V1data(pc),a0		;Point to voice1 data area
bsr.L new_note
lea V2data(pc),a0		;Point to voice2 data area
bsr.L new_note
lea V3data(pc),a0		;Point to voice3 data area
bsr.L new_note
lea V4data(pc),a0		;Point to voice4 data area
bsr.L new_note
nonewnote:
clr.w audtemp
lea V1data(pc),a0
bsr.L effects
move.w d0,(a6)+
move.w d1,(a6)+
lea V2data(pc),a0
bsr.L effects
move.w d0,(a6)+
move.w d1,(a6)+
lea V3data(pc),a0
bsr.L effects
move.w d0,(a6)+
move.w d1,(a6)+
lea V4data(pc),a0
bsr.L effects
move.w d0,(a6)+
move.w d1,(a6)+
lea pervol(pc),a6
move.w audtemp(pc),d0
ori.w #$8000,d0			;Set/clr bit = 1
move.w d0,-(a7)
moveq #0,d1
move.l start1(pc),d2		;Get samplepointers
move.w offset1(pc),d1		;Get offset
add.l d1,d2			;Add offset
move.l start2(pc),d3
move.w offset2(pc),d1
add.l d1,d3
move.l start3(pc),d4
move.w offset3(pc),d1
add.l d1,d4
move.l start4(pc),d5
move.w offset4(pc),d1
add.l d1,d5
move.w ssize1(pc),d0		;Get sound lengths
move.w ssize2(pc),d1
move.w ssize3(pc),d6
move.w ssize4(pc),d7
move.w (a7)+,$dff096		;Enable audio DMA
chan1:
lea V1data(pc),a0
tst.w 72(a0)
beq.l chan2
subq.w #1,72(a0)
cmpi.w #1,72(a0)
bne.s chan2
clr.w 72(a0)
move.l d2,$dff0a0		;Set soundstart
move.w d0,$dff0a4		;Set soundlength
chan2:
lea V2data(pc),a0
tst.w 72(a0)
beq.s chan3
subq.w #1,72(a0)
cmpi.w #1,72(a0)
bne.s chan3
clr.w 72(a0)
move.l d3,$dff0b0
move.w d1,$dff0b4
chan3:
lea V3data(pc),a0
tst.w 72(a0)
beq.s chan4
subq.w #1,72(a0)
cmpi.w #1,72(a0)
bne.s chan4
clr.w 72(a0)
move.l d4,$dff0c0
move.w d6,$dff0c4
chan4:
lea V4data(pc),a0
tst.w 72(a0)
beq.s setpervol
subq.w #1,72(a0)
cmpi.w #1,72(a0)
bne.s setpervol
clr.w 72(a0)
move.l d5,$dff0d0
move.w d7,$dff0d4
setpervol:
lea $dff0a6,a5
move.w (a6)+,(a5)	;Set period
move.w (a6)+,2(a5)	;Set volume
move.w (a6)+,16(a5)
move.w (a6)+,18(a5)
move.w (a6)+,32(a5)
move.w (a6)+,34(a5)
move.w (a6)+,48(a5)
move.w (a6)+,50(a5)
rts

NEW_NOTE:
moveq #0,d5
move.l 34(a0),a1
adda.w 40(a0),a1
cmp.w #64,40(a0)
bne.L samepat
move.l (a0),a2
adda.w 6(a0),a2		;Point to next sequence row
cmpa.l 52(a0),a2	;Is it the end?
bne.s notend
move.w d5,6(a0)		;yes!
move.l (a0),a2		;Point to first sequence
notend:
moveq #0,d1
addq.b #1,spdtemp
cmpi.b #4,spdtemp
bne.s nonewspd
move.b d5,spdtemp
move.b -1(a1),d1	;Get new replay speed
beq.s nonewspd
move.w d1,respcnt	;store in counter
move.w d1,repspd
nonewspd:
move.b (a2),d1		;Pattern to play
move.b 1(a2),44(a0)	;Transpose value
move.b 2(a2),22(a0)	;Soundtranspose value

move.w d5,40(a0)
lsl.w #6,d1
add.l PATpoint(pc),d1	;Get pattern pointer
move.l d1,34(a0)
addi.w #$000d,6(a0)
move.l d1,a1
samepat:
move.b 1(a1),d1		;Get info byte
move.b (a1)+,d0		;Get note
bne.s ww1
andi.w #%11000000,d1
beq.s noport
bra.s ww11
ww1:
move.w d5,56(a0)
ww11:
move.b d5,47(a0)
move.b (a1),31(a0)

		;31(a0) = PORTAMENTO/INSTR. info
			;Bit 7 = portamento on
			;Bit 6 = portamento off
			;Bit 5-0 = instrument number
		;47(a0) = portamento value
			;Bit 7-5 = always zero
			;Bit 4 = up/down
			;Bit 3-0 = value
t_porton:
btst #7,d1
beq.s noport
move.b 2(a1),47(a0)	
noport:
andi.w #$007f,d0
beq.L nextnote
move.b d0,8(a0)
move.b (a1),9(a0)
move.b 32(a0),d2
moveq #0,d3
bset d2,d3
or.w d3,audtemp
move.w d3,$dff096
move.b (a1),d1
andi.w #$003f,d1	;Max 64 instruments
add.b 22(a0),d1
move.l VOLpoint(pc),a2
lsl.w #6,d1
adda.w d1,a2
move.w d5,16(a0)
move.b (a2),23(a0)
move.b (a2)+,24(a0)
move.b (a2)+,d1
andi.w #$00ff,d1
move.b (a2)+,27(a0)
move.b #$40,46(a0)
move.b (a2)+,d0
move.b d0,28(a0)
move.b d0,29(a0)
move.b (a2)+,30(a0)
move.l a2,10(a0)
move.l FRQpoint(pc),a2
lsl.w #6,d1
adda.w d1,a2
move.l a2,18(a0)
move.w d5,50(a0)
move.b d5,26(a0)
move.b d5,25(a0)
nextnote:
addq.w #2,40(a0)
rts

EFFECTS:
moveq #0,d7
testsustain:
tst.b 26(a0)		;Is sustain counter = 0
beq.s sustzero
subq.b #1,26(a0)	;if no, decrease counter
bra.L VOLUfx
sustzero:		;Next part of effect sequence
move.l 18(a0),a1	;can be executed now.
adda.w 50(a0),a1
testeffects:
cmpi.b #$e1,(a1)	;E1 = end of FREQseq sequence
beq.L VOLUfx
cmpi.b #$e0,(a1)	;E0 = loop to other part of sequence
bne.s testnewsound
move.b 1(a1),d0		;loop to start of sequence + 1(a1)
andi.w #$003f,d0
move.w d0,50(a0)
move.l 18(a0),a1
adda.w d0,a1
testnewsound:
cmpi.b #$e2,(a1)	;E2 = set waveform
bne.s o49c64
moveq #0,d0
moveq #0,d1
move.b 32(a0),d1
bset d1,d0
or.w d0,audtemp
move.w d0,$dff096
move.b 1(a1),d0
andi.w #$00ff,d0
lea SOUNDINFO(pc),a4
add.w d0,d0
move.w d0,d1
add.w d1,d1
add.w d1,d1
add.w d1,d0
adda.w d0,a4
move.l 60(a0),a3
move.l (a4),d1
add.l #WAVEFORMS,d1
move.l d1,(a3)
move.l d1,68(a0)
move.w 4(a4),4(a3)
move.l 6(a4),64(a0)
swap d1
move.w #$0003,72(a0)
tst.w d1
bne.s o49c52
move.w #$0002,72(a0)
o49c52:
clr.w 16(a0)
move.b #$01,23(a0)
addq.w #2,50(a0)
bra.L o49d02
o49c64:
cmpi.b #$e4,(a1)
bne.s testpatjmp
move.b 1(a1),d0
andi.w #$00ff,d0
lea SOUNDINFO(pc),a4
add.w d0,d0
move.w d0,d1
add.w d1,d1
add.w d1,d1
add.w d1,d0
adda.w d0,a4
move.l 60(a0),a3
move.l (a4),d1
add.l #WAVEFORMS,d1
move.l d1,(a3)
move.l d1,68(a0)
move.w 4(a4),4(a3)
move.l 6(a4),64(a0)

swap d1
move.w #$0003,72(a0)
tst.w d1
bne.s o49cae
move.w #$0002,72(a0)
o49cae:
addq.w #2,50(a0)
bra.s o49d02
testpatjmp:
cmpi.b #$e7,(a1)
bne.s testnewsustain
move.b 1(a1),d0
andi.w #$00ff,d0
lsl.w #6,d0
move.l FRQpoint(pc),a1
adda.w d0,a1
move.l a1,18(a0)
move.w d7,50(a0)
bra.L testeffects
testnewsustain:
cmpi.b #$e8,(a1)	;E8 = set sustain time
bne.s o49cea
move.b 1(a1),26(a0)
addq.w #2,50(a0)
bra.L testsustain
o49cea:
cmpi.b #$e3,(a1)
bne.s o49d02
addq.w #3,50(a0)
move.b 1(a1),27(a0)
move.b 2(a1),28(a0)
o49d02:
move.l 18(a0),a1
adda.w 50(a0),a1
move.b (a1),43(a0)
addq.w #1,50(a0)
VOLUfx:
tst.b 25(a0)
beq.s o49d1e
subq.b #1,25(a0)
bra.s o49d70
o49d1e:
subq.b #1,23(a0)
bne.s o49d70
move.b 24(a0),23(a0)
o49d2a:
move.l 10(a0),a1
adda.w 16(a0),a1
move.b (a1),d0
cmpi.b #$e8,d0
bne.s o49d4a
addq.w #2,16(a0)
move.b 1(a1),25(a0)
bra.s VOLUfx
o49d4a:
cmpi.b #$e1,d0
beq.s o49d70
cmpi.b #$e0,d0
bne.s o49d68
move.b 1(a1),d0
andi.l #$003f,d0
subq.b #5,d0
move.w d0,16(a0)
bra.s o49d2a
o49d68:
move.b (a1),45(a0)
addq.w #1,16(a0)
o49d70:
move.b 43(a0),d0
bmi.s o49d7e
add.b 8(a0),d0
add.b 44(a0),d0
o49d7e:
andi.w #$007f,d0
lea PERIODS(pc),a1
add.w d0,d0
move.w d0,d1
adda.w d0,a1
move.w (a1),d0
move.b 46(a0),d7
tst.b 30(a0)
beq.s o49d9e
subq.b #1,30(a0)

bra.s o49df4
o49d9e:
move.b d1,d5
move.b 28(a0),d4
add.b d4,d4
move.b 29(a0),d1
tst.b d7
bpl.s o49db4
btst #0,d7
bne.s o49dda
o49db4:
btst #5,d7
bne.s o49dc8
sub.b 27(a0),d1
bcc.s o49dd6
bset #5,d7
moveq #0,d1
bra.s o49dd6
o49dc8:
add.b 27(a0),d1
cmp.b d4,d1
bcs.s o49dd6
bclr #5,d7
move.b d4,d1
o49dd6:
move.b d1,29(a0)
o49dda:
lsr.b #1,d4
sub.b d4,d1
bcc.s o49de4
subi.w #$0100,d1
o49de4:
addi.b #$a0,d5
bcs.s o49df2
o49dea:
add.w d1,d1
addi.b #$18,d5
bcc.s o49dea
o49df2:
add.w d1,d0
o49df4:
eori.b #$01,d7
move.b d7,46(a0)

; DO THE PORTAMENTO THING
moveq #0,d1
move.b 47(a0),d1	;get portavalue
beq.s a56d0		;0=no portamento
cmpi.b #$1f,d1
bls.s portaup
portadown: 
andi.w #$1f,d1
neg.w d1
portaup:
sub.w d1,56(a0)
a56d0:
add.w 56(a0),d0
o49e3e:
cmpi.w #$0070,d0
bhi.s nn1
move.w #$0071,d0
nn1:
cmpi.w #$06b0,d0
bls.s nn2
move.w #$06b0,d0
nn2:
moveq #0,d1
move.b 45(a0),d1
rts

pervol: blk.b 16,0	;Periods & Volumes temp. store
respcnt: dc.w 0		;Replay speed counter 
repspd:  dc.w 0		;Replay speed counter temp
onoff:   dc.w 0		;Music on/off flag.
firseq:	 dc.w 0		;First sequence
lasseq:	 dc.w 0		;Last sequence
audtemp: dc.w 0
spdtemp: dc.w 0

V1data:  blk.b 64,0	;Voice 1 data area
offset1: blk.b 02,0	;Is added to start of sound
ssize1:  blk.b 02,0	;Length of sound
start1:  blk.b 06,0	;Start of sound

V2data:  blk.b 64,0	;Voice 2 data area
offset2: blk.b 02,0
ssize2:  blk.b 02,0
start2:  blk.b 06,0

V3data:  blk.b 64,0	;Voice 3 data area
offset3: blk.b 02,0
ssize3:  blk.b 02,0
start3:  blk.b 06,0

V4data:  blk.b 64,0	;Voice 4 data area
offset4: blk.b 02,0
ssize4:  blk.b 02,0
start4:  blk.b 06,0

o4a0c8: dc.l $00000000,$00100003,$00200006,$00300009
SEQpoint: dc.l 0
PATpoint: dc.l 0
FRQpoint: dc.l 0
VOLpoint: dc.l 0
SILENT: dc.w $0100,$0000,$0000,$00e1

PERIODS:dc.w $06b0,$0650,$05f4,$05a0,$054c,$0500,$04b8,$0474
	dc.w $0434,$03f8,$03c0,$038a,$0358,$0328,$02fa,$02d0
	dc.w $02a6,$0280,$025c,$023a,$021a,$01fc,$01e0,$01c5
	dc.w $01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d
	dc.w $010d,$00fe,$00f0,$00e2,$00d6,$00ca,$00be,$00b4
	dc.w $00aa,$00a0,$0097,$008f,$0087,$007f,$0078,$0071
	dc.w $0071,$0071,$0071,$0071,$0071,$0071,$0071,$0071
	dc.w $0071,$0071,$0071,$0071,$0d60,$0ca0,$0be8,$0b40
	dc.w $0a98,$0a00,$0970,$08e8,$0868,$07f0,$0780,$0714
	dc.w $1ac0,$1940,$17d0,$1680,$1530,$1400,$12e0,$11d0
	dc.w $10d0,$0fe0,$0f00,$0e28

SOUNDINFO:
;Offset.l , Sound-length.w , Start-offset.w , Repeat-length.w 

;Reserved for samples
	dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
	dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
	dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
	dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
	dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
	dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
	dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
	dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
	dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
	dc.w $0000,$0000 ,$0000 ,$0000 ,$0001 
;Reserved for synth sounds
	dc.w $0000,$0000 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$0020 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$0040 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$0060 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$0080 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$00a0 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$00c0 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$00e0 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$0100 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$0120 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$0140 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$0160 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$0180 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$01a0 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$01c0 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$01e0 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$0200 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$0220 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$0240 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$0260 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$0280 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$02a0 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$02c0 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$02e0 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$0300 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$0320 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$0340 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$0360 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$0380 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$03a0 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$03c0 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$03e0 ,$0010 ,$0000 ,$0010 
	dc.w $0000,$0400 ,$0008 ,$0000 ,$0008 
	dc.w $0000,$0410 ,$0008 ,$0000 ,$0008 
	dc.w $0000,$0420 ,$0008 ,$0000 ,$0008 
	dc.w $0000,$0430 ,$0008 ,$0000 ,$0008 
	dc.w $0000,$0440 ,$0008 ,$0000 ,$0008
	dc.w $0000,$0450 ,$0008 ,$0000 ,$0008
	dc.w $0000,$0460 ,$0008 ,$0000 ,$0008
	dc.w $0000,$0470 ,$0008 ,$0000 ,$0008
	dc.w $0000,$0480 ,$0010 ,$0000 ,$0010
	dc.w $0000,$04a0 ,$0008 ,$0000 ,$0008
	dc.w $0000,$04b0 ,$0010 ,$0000 ,$0010
	dc.w $0000,$04d0 ,$0010 ,$0000 ,$0010
	dc.w $0000,$04f0 ,$0008 ,$0000 ,$0008
	dc.w $0000,$0500 ,$0008 ,$0000 ,$0008
	dc.w $0000,$0510 ,$0018 ,$0000 ,$0018
 
WAVEFORMS:
dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
dc.w $3f37,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
dc.w $c037,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
dc.w $c0b8,$2f27,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
dc.w $c0b8,$b027,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
dc.w $c0b8,$b0a8,$1f17,$0f07,$ff07,$0f17,$1f27,$2f37
dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
dc.w $c0b8,$b0a8,$a017,$0f07,$ff07,$0f17,$1f27,$2f37
dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
dc.w $c0b8,$b0a8,$a098,$0f07,$ff07,$0f17,$1f27,$2f37
dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
dc.w $c0b8,$b0a8,$a098,$9007,$ff07,$0f17,$1f27,$2f37
dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
dc.w $c0b8,$b0a8,$a098,$9088,$ff07,$0f17,$1f27,$2f37
dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
dc.w $c0b8,$b0a8,$a098,$9088,$8007,$0f17,$1f27,$2f37
dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
dc.w $c0b8,$b0a8,$a098,$9088,$8088,$0f17,$1f27,$2f37
dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9017,$1f27,$2f37
dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$1f27,$2f37
dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a027,$2f37
dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a0a8,$2f37
dc.w $c0c0,$d0d8,$e0e8,$f0f8,$00f8,$f0e8,$e0d8,$d0c8
dc.w $c0b8,$b0a8,$a098,$9088,$8088,$9098,$a0a8,$b037
dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
dc.w $7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
dc.w $817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
dc.w $8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
dc.w $8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
dc.w $8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
dc.w $8181,$8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
dc.w $8181,$8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
dc.w $8181,$8181,$8181,$817f,$7f7f,$7f7f,$7f7f,$7f7f
dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
dc.w $8181,$8181,$8181,$8181,$7f7f,$7f7f,$7f7f,$7f7f
dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
dc.w $8181,$8181,$8181,$8181,$817f,$7f7f,$7f7f,$7f7f
dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
dc.w $8181,$8181,$8181,$8181,$8181,$7f7f,$7f7f,$7f7f
dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
dc.w $8181,$8181,$8181,$8181,$8181,$817f,$7f7f,$7f7f
dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
dc.w $8181,$8181,$8181,$8181,$8181,$8181,$7f7f,$7f7f
dc.w $8181,$8181,$8181,$8181,$8181,$8181,$8181,$8181
dc.w $8181,$8181,$8181,$8181,$8181,$8181,$817f,$7f7f
dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$8080
dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$7f7f
dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$8080
dc.w $8080,$8080,$8080,$8080,$8080,$8080,$8080,$807f
dc.w $8080,$8080,$8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f
dc.w $8080,$8080,$8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f
dc.w $8080,$8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
dc.w $8080,$8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
dc.w $8080,$8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
dc.w $8080,$807f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
dc.w $8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
dc.w $8080,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f,$7f7f
dc.w $8080,$9098,$a0a8,$b0b8,$c0c8,$d0d8,$e0e8,$f0f8
dc.w $0008,$1018,$2028,$3038,$4048,$5058,$6068,$707f
dc.w $8080,$a0b0,$c0d0,$e0f0,$0010,$2030,$4050,$6070
dc.w $4545,$797d,$7a77,$7066,$6158,$534d,$2c20,$1812
dc.w $04db,$d3cd,$c6bc,$b5ae,$a8a3,$9d99,$938e,$8b8a
dc.w $4545,$797d,$7a77,$7066,$5b4b,$4337,$2c20,$1812
dc.w $04f8,$e8db,$cfc6,$beb0,$a8a4,$9e9a,$9594,$8d83
dc.w $0000,$4060,$7f60,$4020,$00e0,$c0a0,$80a0,$c0e0
dc.w $0000,$4060,$7f60,$4020,$00e0,$c0a0,$80a0,$c0e0
dc.w $8080,$9098,$a0a8,$b0b8,$c0c8,$d0d8,$e0e8,$f0f8
dc.w $0008,$1018,$2028,$3038,$4048,$5058,$6068,$707f
dc.w $8080,$a0b0,$c0d0,$e0f0,$0010,$2030,$4050,$6070

res=320
wpl=res/16

Linez:
	move.l	xpointer,a0	; posizione corrente
	move.l	(a0)+,d0	; passa in d0
	cmp.l	#$ffff,d0	; fine tabea?
	bne	nonw		; nooo
	move.l	#xtab,a0	; se si' ripristina dall'inizio tabea
	move.l	(a0)+,d0

nonw:
	move.l	a0,xpointer	; restituisci il valore
	move.l	ypointer,a0	; tutto questo per le 4 coordinate
	move.l	(a0)+,d1	; e per le 10 barre, per un totale di
	cmp.l	#$ffff,d1	; 40 fottenti routine quasi uguali...
	bne	nonws
	move.l	#ytab,a0
	move.l	(a0)+,d1

nonws:
	move.l	a0,ypointer
	move.l	x2pointer,a0
	move.l	(a0)+,d2
	cmp.l	#$ffff,d2
	bne	nonxw
	move.l	#xtab2,a0
	move.l	(a0)+,d2

nonxw:
	move.l	a0,x2pointer
	move.l	y2pointer,a0
	move.l	(a0)+,d3
	cmp.l	#$ffff,d3
	bne	nonyw
	move.l	#ytab2,a0
	move.l	(a0)+,d3

nonyw:
	move.l	a0,y2pointer
	jsr	draw

	move.l	xpointer2,a0
	move.l	(a0)+,d0
	cmp.l	#$ffff,d0
	bne	nonw2
	move.l	#xtab,a0
	move.l	(a0)+,d0

nonw2:
	move.l	a0,xpointer2
	move.l	ypointer2,a0
	move.l	(a0)+,d1
	cmp.l	#$ffff,d1
	bne	nonws2
	move.l	#ytab,a0
	move.l	(a0)+,d1

nonws2:
	move.l	a0,ypointer2
	move.l	x2pointer2,a0
	move.l	(a0)+,d2
	cmp.l	#$ffff,d2
	bne	nonxw2
	move.l	#xtab2,a0
	move.l	(a0)+,d2

nonxw2:
	move.l	a0,x2pointer2
	move.l	y2pointer2,a0
	move.l	(a0)+,d3
	cmp.l	#$ffff,d3
	bne	nonyw2
	move.l	#ytab2,a0
	move.l	(a0)+,d3

nonyw2:
	move.l	a0,y2pointer2
	jsr	draw

	move.l	xpointer3,a0
	move.l	(a0)+,d0
	cmp.l	#$ffff,d0
	bne	nonw3
	move.l	#xtab,a0
	move.l	(a0)+,d0

nonw3:
	move.l	a0,xpointer3
	move.l	ypointer3,a0
	move.l	(a0)+,d1
	cmp.l	#$ffff,d1
	bne	nonws3
	move.l	#ytab,a0
	move.l	(a0)+,d1

nonws3:
	move.l	a0,ypointer3
	move.l	x2pointer3,a0
	move.l	(a0)+,d2
	cmp.l	#$ffff,d2
	bne	nonxw3
	move.l	#xtab2,a0
	move.l	(a0)+,d2

nonxw3:
	move.l	a0,x2pointer3
	move.l	y2pointer3,a0
	move.l	(a0)+,d3
	cmp.l	#$ffff,d3
	bne	nonyw3
	move.l	#ytab2,a0
	move.l	(a0)+,d3

nonyw3:
	move.l	a0,y2pointer3
	jsr	draw

	move.l	xpointer4,a0
	move.l	(a0)+,d0
	cmp.l	#$ffff,d0
	bne	nonw4
	move.l	#xtab,a0
	move.l	(a0)+,d0

nonw4:
	move.l	a0,xpointer4
	move.l	ypointer4,a0
	move.l	(a0)+,d1
	cmp.l	#$ffff,d1
	bne	nonws4
	move.l	#ytab,a0
	move.l	(a0)+,d1

nonws4:
	move.l	a0,ypointer4
	move.l	x2pointer4,a0
	move.l	(a0)+,d2
	cmp.l	#$ffff,d2
	bne	nonxw4
	move.l	#xtab2,a0
	move.l	(a0)+,d2

nonxw4:
	move.l	a0,x2pointer4
	move.l	y2pointer4,a0
	move.l	(a0)+,d3
	cmp.l	#$ffff,d3
	bne	nonyw4
	move.l	#ytab2,a0
	move.l	(a0)+,d3

nonyw4:
	move.l	a0,y2pointer4
	jsr	draw

	move.l	xpointer5,a0
	move.l	(a0)+,d0
	cmp.l	#$ffff,d0
	bne	nonw5
	move.l	#xtab,a0
	move.l	(a0)+,d0

nonw5:
	move.l	a0,xpointer5
	move.l	ypointer5,a0
	move.l	(a0)+,d1
	cmp.l	#$ffff,d1
	bne	nonws5
	move.l	#ytab,a0
	move.l	(a0)+,d1

nonws5:
	move.l	a0,ypointer5
	move.l	x2pointer5,a0
	move.l	(a0)+,d2
	cmp.l	#$ffff,d2
	bne	nonxw5
	move.l	#xtab2,a0
	move.l	(a0)+,d2

nonxw5:
	move.l	a0,x2pointer5
	move.l	y2pointer5,a0
	move.l	(a0)+,d3
	cmp.l	#$ffff,d3
	bne	nonyw5
	move.l	#ytab2,a0
	move.l	(a0)+,d3

nonyw5:
	move.l	a0,y2pointer5
	jsr	draw

	move.l	xpointer6,a0
	move.l	(a0)+,d0
	cmp.l	#$ffff,d0
	bne	nonw6
	move.l	#xtab,a0
	move.l	(a0)+,d0

nonw6:
	move.l	a0,xpointer6
	move.l	ypointer6,a0
	move.l	(a0)+,d1
	cmp.l	#$ffff,d1
	bne	nonws6
	move.l	#ytab,a0
	move.l	(a0)+,d1

nonws6:
	move.l	a0,ypointer6
	move.l	x2pointer6,a0
	move.l	(a0)+,d2
	cmp.l	#$ffff,d2
	bne	nonxw6
	move.l	#xtab2,a0
	move.l	(a0)+,d2

nonxw6:
	move.l	a0,x2pointer6
	move.l	y2pointer6,a0
	move.l	(a0)+,d3
	cmp.l	#$ffff,d3
	bne	nonyw6
	move.l	#ytab2,a0
	move.l	(a0)+,d3

nonyw6:
	move.l	a0,y2pointer6
	jsr	draw

	move.l	xpointer7,a0
	move.l	(a0)+,d0
	cmp.l	#$ffff,d0
	bne	nonw7
	move.l	#xtab,a0
	move.l	(a0)+,d0

nonw7:
	move.l	a0,xpointer7
	move.l	ypointer7,a0
	move.l	(a0)+,d1
	cmp.l	#$ffff,d1
	bne	nonws7
	move.l	#ytab,a0
	move.l	(a0)+,d1

nonws7:
	move.l	a0,ypointer7
	move.l	x2pointer7,a0
	move.l	(a0)+,d2
	cmp.l	#$ffff,d2
	bne	nonxw7
	move.l	#xtab2,a0
	move.l	(a0)+,d2

nonxw7:
	move.l	a0,x2pointer7
	move.l	y2pointer7,a0
	move.l	(a0)+,d3
	cmp.l	#$ffff,d3
	bne	nonyw7
	move.l	#ytab2,a0
	move.l	(a0)+,d3

nonyw7:
	move.l	a0,y2pointer7
	jsr	draw

	move.l	xpointer8,a0
	move.l	(a0)+,d0
	cmp.l	#$ffff,d0
	bne	nonw8
	move.l	#xtab,a0
	move.l	(a0)+,d0

nonw8:
	move.l	a0,xpointer8
	move.l	ypointer8,a0
	move.l	(a0)+,d1
	cmp.l	#$ffff,d1
	bne	nonws8
	move.l	#ytab,a0
	move.l	(a0)+,d1

nonws8:
	move.l	a0,ypointer8
	move.l	x2pointer8,a0
	move.l	(a0)+,d2
	cmp.l	#$ffff,d2
	bne	nonxw8
	move.l	#xtab2,a0
	move.l	(a0)+,d2

nonxw8:
	move.l	a0,x2pointer8
	move.l	y2pointer8,a0
	move.l	(a0)+,d3
	cmp.l	#$ffff,d3
	bne	nonyw8
	move.l	#ytab2,a0
	move.l	(a0)+,d3

nonyw8:
	move.l	a0,y2pointer8
	jsr	draw

	move.l	xpointer9,a0
	move.l	(a0)+,d0
	cmp.l	#$ffff,d0
	bne	nonw9
	move.l	#xtab,a0
	move.l	(a0)+,d0

nonw9:
	move.l	a0,xpointer9
	move.l	ypointer9,a0
	move.l	(a0)+,d1
	cmp.l	#$ffff,d1
	bne	nonws9
	move.l	#ytab,a0
	move.l	(a0)+,d1

nonws9:
	move.l	a0,ypointer9
	move.l	x2pointer9,a0
	move.l	(a0)+,d2
	cmp.l	#$ffff,d2
	bne	nonxw9
	move.l	#xtab2,a0
	move.l	(a0)+,d2

nonxw9:
	move.l	a0,x2pointer9
	move.l	y2pointer9,a0
	move.l	(a0)+,d3
	cmp.l	#$ffff,d3
	bne	nonyw9
	move.l	#ytab2,a0
	move.l	(a0)+,d3

nonyw9:
	move.l	a0,y2pointer9
	jsr	draw

	move.l	xpointer10,a0
	move.l	(a0)+,d0
	cmp.l	#$ffff,d0
	bne	nonw10
	move.l	#xtab,a0
	move.l	(a0)+,d0

nonw10:
	move.l	a0,xpointer10
	move.l	ypointer10,a0
	move.l	(a0)+,d1
	cmp.l	#$ffff,d1
	bne	nonws10
	move.l	#ytab,a0
	move.l	(a0)+,d1

nonws10:
	move.l	a0,ypointer10
	move.l	x2pointer10,a0
	move.l	(a0)+,d2
	cmp.l	#$ffff,d2
	bne	nonxw10
	move.l	#xtab2,a0
	move.l	(a0)+,d2

nonxw10:
	move.l	a0,x2pointer10
	move.l	y2pointer10,a0
	move.l	(a0)+,d3
	cmp.l	#$ffff,d3
	bne	nonyw10
	move.l	#ytab2,a0
	move.l	(a0)+,d3

nonyw10:
	move.l	a0,y2pointer10
	jsr	draw
	rts	; e' o non e' una grande routine?????????

xpointer:dc.l xtab
xpointer2:dc.l xtab+8
xpointer3:dc.l xtab+16
xpointer4:dc.l xtab+24
xpointer5:dc.l xtab+32
xpointer6:dc.l xtab+40
xpointer7:dc.l xtab+48
xpointer8:dc.l xtab+56
xpointer9:dc.l xtab+64
xpointer10:dc.l xtab+72

xtab:
	dc.l	319,319,318,316,313,310,307,302
	dc.l	297,292,285,279,271,264,255,247
	dc.l	238,228,219,209,199,188,178,167
	dc.l	157,146,136,125,115,105,95,86
	dc.l	77,68,59,51,44,37,30,25
	dc.l	19,15,10,7,4,2,1,0
	dc.l	0,1,2,4,7,10,15,19
	dc.l	25,30,37,44,51,59,68,77
	dc.l	86,95,105,115,125,136,146,157
	dc.l	167,178,188,199,209,219,228,238
	dc.l	247,255,264,271,279,285,292,297
	dc.l	302,307,310,313,316,318,319
	dc.l	$ffff

ypointer:dc.l ytab
ypointer2:dc.l ytab+8
ypointer3:dc.l ytab+16
ypointer4:dc.l ytab+24
ypointer5:dc.l ytab+32
ypointer6:dc.l ytab+40
ypointer7:dc.l ytab+48
ypointer8:dc.l ytab+56
ypointer9:dc.l ytab+64
ypointer10:dc.l ytab+72

ytab:
	dc.l	129,128,127,124,121,117,112,106
	dc.l	99,92,84,77,69,60,52,45
	dc.l	37,30,23,17,12,8,5,2
	dc.l	1,0,1,2,5,8,12,17
	dc.l	23,30,37,45,52,60,69,77
	dc.l	84,92,99,106,112,117,121,124
	dc.l	127,128
	dc.l	$ffff

x2pointer:dc.l xtab2
x2pointer2:dc.l xtab2+4
x2pointer3:dc.l xtab2+8
x2pointer4:dc.l xtab2+12
x2pointer5:dc.l xtab2+16
x2pointer6:dc.l xtab2+20
x2pointer7:dc.l xtab2+24
x2pointer8:dc.l xtab2+28
x2pointer9:dc.l xtab2+32
x2pointer10:dc.l xtab2+36

xtab2:
	dc.l	0,0,1,2,3,5,8,11
	dc.l	14,17,21,26,30,36,41,47
	dc.l	53,59,66,73,80,87,95,102
	dc.l	110,118,126,135,143,151,159,168
	dc.l	176,184,193,201,209,217,224,232
	dc.l	239,246,253,260,266,272,278,283
	dc.l	289,293,298,302,305,308,311,314
	dc.l	316,317,318,319,319,319,318,317
	dc.l	316,314,311,308,305,302,298,293
	dc.l	289,283,278,272,266,260,253,246
	dc.l	239,232,224,217,209,201,193,184
	dc.l	176,168,160,151,143,135,126,118
	dc.l	110,102,95,87,80,73,66,59
	dc.l	53,47,41,36,30,26,21,17
	dc.l	14,11,8,5,3,2,1,0
	dc.l	$ffff

y2pointer:dc.l ytab2
y2pointer2:dc.l ytab2+8
y2pointer3:dc.l ytab2+16
y2pointer4:dc.l ytab2+24
y2pointer5:dc.l ytab2+32
y2pointer6:dc.l ytab2+40
y2pointer7:dc.l ytab2+48
y2pointer8:dc.l ytab2+56
y2pointer9:dc.l ytab2+64
y2pointer10:dc.l ytab2+72

ytab2:
	dc.l	0,0,1,2,3,5,7,10
	dc.l	12,15,19,23,27,31,35,40
	dc.l	45,49,54,59,65,70,75,80
	dc.l	84,89,94,98,102,106,110,114
	dc.l	117,119,122,124,126,127,128,129
	dc.l	129,129,128,127,126,124,122,119
	dc.l	117,114,110,106,102,98,94,89
	dc.l	84,80,75,70,64,59,54,49
	dc.l	45,40,35,31,27,23,19,15
	dc.l	12,10,7,5,3,2,1,0
	dc.l	$ffff

Clearscreen:
	bsr	waitblit
	move.l	drawplane,$dff054
	move.l	#$1000000,$dff040
	move.l	#0,$dff066
	move.w	#$2c14,$dff058
	rts

Waitblit:
	btst	#$e,$dff002
	bne	waitblit
	rts


**    BLITTER LINE ROUTINE     **
** PARAMETRI: D0, D1 START X,Y **
**            D2, D3 END   X,Y **

Draw:
	movem.l	d2-d7/a2-a3,-(a7)
	moveq	#$f,d4
	and.w	d2,d4			; prende i primi 4 bits di x2
	sub.w	d3,d1			; y2-y1=altezza
	mulu	#res/8,d3		; moltiplica per n.bytes schermo
	sub.w	d2,d0			; x2-x1=larghezza
	blt.s	No1			; conversione
	tst.w	d1
	blt.s	No2
	cmp.w	d0,d1
	bge.s	No3
	moveq	#$11,d7
	bra.s	OctSel			; Octant #

No3:
	moveq	#1,d7
	exg	d1,d0

OctSel:
	bra.s	No4

No2:
	neg.w	d1
	cmp.w	d0,d1
	bge.s	salta
	moveq	#$19,d7
	bra.s	No4

salta:
	moveq	#5,d7
	exg	d1,d0

No4:
	bra.s	OctsSel

No1:
	neg.w	d0
	tst.w	d1
	blt.s	No11
	cmp.w	d0,d1
	bge.s	No12
	moveq	#$15,d7
	bra.s	OctSel2

No12:
	moveq	#9,d7
	exg	d1,d0

OctSel2:
	bra.s	OctsSel

No11:
	neg.w	d1
	cmp.w	d0,d1
	bge.s	No13
	moveq	#$1d,d7
	bra.s	OctsSel

No13:
	moveq	#$d,d7
	exg	d1,d0

OctsSel:
	add.w	d1,d1
	asr.w	#3,d2
	ext.l	d2
	add.l	d2,d3			; Total offset
	move.w	d1,d2
	sub.w	d0,d2
	bge.s	nonnegativo
	ori.w	#$40,d7			; Sign = -

nonnegativo:
	lea	$dff000,a0
	move.w	d2,a3
	move.w	#$ffff,d6		; LinePtrn
	bsr	waitblit
	move.w	d1,$62(a0)		; 4Y
	move.w	d2,d1
	sub.w	d0,d1
	move.w	d1,$64(a0)		; 4Y-4X
	moveq	#-1,d1
	move.l	d1,$44(a0)		; AFWM+ALWM (mask)
	move.w	#res/8,$60(a0)		; Modulo
	move.w	d7,d5
	addq.w	#1,d0
	asl.w	#6,d0
	addq.w	#2,d0			; Blitsize
	move.w	d4,d2
	swap	d4
	asr.l	#4,d4			; First pixelpos
	ori.w	#$b00,d4		; Use ABD
	move.w	#$8000,$74(a0)		; Index
	clr.w	d1

NoSpesh:
	move.l	DrawPlane,d7		; Pointer
	swap	d5
	move.w	d4,d5
	move.b	#$ca,d5			; MinTerms
	swap	d5
	add.l	d3,d7
	bsr	waitblit
	move.l	d5,$40(a0)		; BltCon0 & 1
	move.w	a3,$52(a0)		; 2Y-X
	move.l	d7,$48(a0)
	move.l	d7,$54(a0)		; Start address of line
	move.w	d6,$72(a0)		; Pattern
	move.w	d0,$58(a0)		; Size
	movem.l	(a7)+,d2-d7/a2-a3
	rts

drawplane:dc.l $5c000

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	#1000,d2
	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	#25,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	$7a240,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

BUMPTEXT_OFFSET:DC.L	0
BUMPSET:	DC.L	$52800
BUMPSCROLL:	DC.L	$7a240
BUMPCHAR:	DC.L	$7a29c
CHAR_OFFSET:	DC.W	$0
BUMP_OFFSET:	DC.W	$0
BUMP_BITS:	DC.W	$0000
BUMP_TIMER:	DC.W	$0

BUMP_CHARS:
DC.B	"ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.,'!?()/&*:Šć ",0,0

************************
* WRITER ROUTINE 16X16 *
*  (C) FILIPPETTO OF   *
*   SAVAGE 17-9-90!    *
************************

Writer:
	cmp.b	#1,FadeOut		; fadeout e' 1?
	bne.S	NoFade			; no? nofade
	bsr	FadeOutIT		; altrimenti fadeoutalo
	rts

NoFade:
	cmp.b	#1,nooutput
	beq	countdown
	bra	SortNext		; altrimenti sortnext

Stampa:
	bsr	OutPutIT		; stampa il carattere

Torna:
	rts

FadeOutIT:
	cmp.l	#125,andreuccio		; bottom line raggiunta???
	beq	nastrino		; si'? nastrino (cioe' nofade)
	move.l	#$1000000,$dff040	; clear
	move.l	heavy,a0		; linea corrente
	move.l	#-1,$dff044		; mask tutto
	move.l	a0,$dff054		; source
	move.w	#0,$dff064		; moduli
	move.w	#0,$dff066
	move.w	#$0114,$dff058		; yep! 1 riga * 40 bytes
	bsr	waitblit
	add.l	#40,heavy		; riga dopo
	add.l	#1,andreuccio		; anche nel counter
	bra	naccio

nastrino:
	move.b	#0,FadeOut		; niente piu' fade
	clr.l	andreuccio
	move.l	#$76000,heavy
	move.b	#0,NoOutPut		; output ok
	bsr	gogecko

naccio:
	rts

andreuccio:dc.l 0
heavy:dc.l $76000

CountDown:
	sub.w	#1,WaitTime		; sottrae uno al tempo d'attesa
	cmp.w	#0,WaitTime
	bne.S	TheEnd			; se e' 0 da' via libera al fade
	move.b	#1,FadeOut

TheEnd:	
	rts

SetWaitTime:
	move.w	#[50*4],WaitTime	; settaggio tempo
	move.b	#1,NoOutPut
	bra	torna

SortNext:
	move.l	TextSave,a0
	move.l	#CharList2,a1		; lista caratteri
	move.l	#CharAdress2,a2		; indirizzo carattere
	move.b	(a0),d0			; ecco il carattere!

SortOut:
	cmp.b	#0,d0			; e' 0?
	bne.S	nonacapo		; no: niente a capo
	add.l	#680,TextAdr		; altrimenti vai a capo
	move.w	orizzontale,d6		; torna alla colonna 1!
	sub.l	d6,TextAdr		; prossimo
	clr.w	orizzontale
	add.l	#1,TextSave
	bra	SortNext

nonacapo:
	cmp.b	#1,d0			; e' 1?
	bne.S	nonfine			; no? niente nuova pagina
	move.l	TextPos,TextAdr		; ripristina il punto iniziale
	add.l	#1,TextSave		; passa al prossimo char
	bra	SetWaitTime		; ma prima aspetta

nonfine:	
	cmp.b	#2,d0			; e' 2?
	bne.S	nonricomincia		; no? non ricomincia
	move.l	#testo,TextSave		; altrimenti testo daccapo
	move.l	TextPos,TextAdr		; ripristina il punto iniziale
	bra	SetWaitTime		; ma prima aspetta

nonricomincia:
	cmp.b	(a1),d0			; riconosciuto il carattere?
	beq	charok			; si': vai a charok
	add.w	#1,a1			; passa al prossimo nella lista
	add.w	#2,a2			; e al prossimo nel numero
	bra	nonricomincia		; finche' non lo trova

charok:
	add.w	#2,orizzontale
	move.w	(a2),d0			; punto del font in d0
	add.l	#1,TextSave
	bra	stampa

OutPutIT:
	move.l	Font2adress,a0
	move.l	TextAdr,a1		; indirizzo bitplane
	add.w	d0,a0			; addiziona il punto del car.

Blitta:					; blitta il carattere
	move.w	#$09f0,$dff040		; normale
	move.w	#$0,$dff042
	move.l	#-1,$dff044		; mask? 100%
	move.l	a0,$dff050		; sorgente
	move.l	a1,$dff054		; destinazione
	move.w	#38,$dff064		; numero di bytes da saltare
	move.w	#38,$dff066		; (modulo)
	move.w  #$0401,$dff058		; 16*16!
	bsr	waitblit		; aspetta il blitter...
	add.w	#2,a1			; prossimo valore bitplane
	move.l	a1,TextAdr
	rts

orizzontale:	dc.w	0
Font2Adress:	dc.l	$50000
TextAdr:	dc.l	$76000
TextSave:	dc.l	testo
WaitTime:	dc.w	0
TextPos:	dc.l	$76000
NoOutPut:	dc.b	0
FadeOut:	dc.b	0

CharList2:	dc.b	"ABCDEFGHIJKLMNOPQRST"
		dc.b	"UVWXYZ0123456789()!-"
		dc.b	".: "
		even

CharAdress2:
dc.w	0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38
dc.w	720,722,724,726,728,730,732,734,736,738,740,742,744,746,748
dc.w	750,752,754,756,758
dc.w	1370,1372,1374

ChangeLineColor:
	move.l	lcp,a1
	move.w	(a1)+,d0
	cmp.w	#$ffff,d0
	bne	acciuga
	move.l	#barbagianni,a1
	move.w	(a1)+,d0

acciuga:
	move.w	d0,fattoria
	move.l	a1,lcp
	rts

lcp:	dc.l	barbagianni

Barbagianni:
	dc.w	4,5,6,7,8,9,10,$a,$b,$c,$d,$e,$f
	dc.w	$10f,$20f,$30f,$40f,$50f,$60f,$70f,$80f,$90f
	dc.w	$a0f,$b0f,$c0f,$d0f,$e0f,$f0f,$f1f,$f2f,$f3f
	dc.w	$f4f,$f5f,$f6f,$f7f,$f8f,$f9f,$faf,$fbf,$fcf
	dc.w	$fdf,$fef,$fff,$fef,$fdf,$fcf,$fbf,$faf,$f9f
	dc.w	$f8f,$f7f,$f6f,$f5f,$f4f,$f3f,$f2f,$f1f,$f0f
	dc.w	$e0e,$d0d,$c0c,$b0b,$a0a,$909,$808,$707,$606,$505
	dc.w	$404,$304,$204,$104
	dc.w	$ffff

testo:
	;--------------------

; HERE WRITE WHATCHA WANT

DC.B	0
DC.B	"   --- SAVAGE ---   ",0
DC.B	0
DC.B	"  PROUDLY PRESENTS",0
DC.B	0
DC.B	" - THE NEW INTRO! -",0
DC.B	1

DC.B	"   CREDITS TO THIS  ",0
DC.B	"NEW INTRO MUST GO TO",0
DC.B	"         ---        ",0
DC.B	"CODING....FILIPPETTO",0
DC.B	"LOGO.........CRUSHER",0
DC.B	"MUSIC.........ARCANE",0
DC.B	"FONT........UNKNOWN!",0
DC.B	1

DC.B	0,0
DC.B	"    CONTACT SAVAGE  ",0
DC.B	"    WRITING TO ONE  ",0
DC.B	"      OF THE 3 HQ   ",0
DC.B	1

DC.B	0
DC.B	"WORLD HQ:           ",0
DC.B	"PO BOX 10",0
DC.B	"A-8607 KAPFENBERG",0
DC.B	"AUSTRIA",0
DC.B	1

DC.B	0
DC.B	"ITALIAN HQ 1:",0
DC.B	"FILIPPO RIZZI",0
DC.B	"VIA VESCOVADO 39",0
DC.B	"I-35141 PADOVA",0
DC.B	"ITALY",0
DC.B	1

DC.B	;--------------------
DC.B	0
DC.B	"ITALIAN HQ 2:",0
DC.B	"JULIAN GALEA",0
DC.B	"V.ZENSON DI PIAVE 2B",0
DC.B	"I-31100 TREVISO",0
DC.B	"ITALY",0
DC.B	1

DC.B	0
DC.B	"CONTACT ALSO",0
DC.B	"THE  BITJOKER",0
DC.B	"CLAUDIO NOVENTA",0
DC.B	"VIA VANNOZZO 17",0
DC.B	"I-35100 PADOVA",0
DC.B	"ITALY",0
DC.B	1

DC.B	0
DC.B	"      REMEMBER:",0
DC.B	0
DC.B	"NO DISK - NO ANSWER!",0
DC.B	1

DC.B	0,0,0
DC.B	"   (C) SAVAGE 1990",0
DC.B	1
dc.b	2
EVEN

BUMPING_TEXT:
DC.B	"GREETZ LIST, SAVAGE SENDS KOKACOPPER TO: "
DC.B "ABANDON (SORBOS,MARVIN) - "
DC.B "ABAKUS (MAGIC P, ARMIN) - "
DC.B "AXIS - "
DC.B "ACL (COSMOS) - "
DC.B "ACU (HI DARREN OF NUKEBUSTERS) - "
DC.B "ADEPT (HI STRANGER) - "
DC.B "ALPHA FLIGHT (HI GATOR,DEPODE,RENE AND VISION ONE: HI TROLLO) - "
DC.B "AMAZE (BOMBER) - "
DC.B "ANDROID - "
DC.B "AOFCF (SODAN) - "
DC.B "APEX (HI YEGGMAN AND MR TURNIP) - "
DC.B "ARMADA (TIMECODE,HAWKEYE) - "
DC.B "ARCTIC TEAM (KIPA) - "
DC.B "AZURE - "
DC.B "BARNA BYTE BUSTERS - "
DC.B "BLACK CORSAIR (JORAM) - "
DC.B "BYTERAPERS INC. (WHALE) - "
DC.B "BRAINSTORM (HI ORLANDO) - "
DC.B "CAVE (HI JUPE) - "
DC.B "CASCADE FINLAND (DR WEIRD) - "
DC.B "CELTIC (HI SLAYER AND CONAN) - "
DC.B "CERBEROS (SILKY) - "
DC.B "CLONES (HI AWCY) - "
DC.B "CINEFEX DES. (EXPRESS) - "
DC.B "COAST 1990 (YO SKEZ-ONE! THANX FOR KOOL POSTCARD!) - "
DC.B "CONTRAST (ASHLEY) - "
DC.B "CREAMS OF POWER (MARCIO) - "
DC.B "CRYPTOBURNERS (JACKMIX) - "
DC.B "CRUSADERS - "
DC.B "DARK COOPERATION (BTX) - "
DC.B "DESASTER AREA - "
DC.B "DEVILS (WAMPUS) - "
DC.B "DICTATORS - "
DC.B "DISKNET (TRIAX) - "
DC.B "DUAL CREW (HI MUTANT) - "
DC.B "DUPLEX (CASE) - "
DC.B "D MOB (HI XOR) - "
DC.B "DOOM - "
DC.B "DYNAX (MAD MAX) - "
DC.B "ENERGY (HI:JASON,STRANGER,FLOYD,QB,DON,ANTIBYTE,MAGIC SECTOR,CLINT) - "
DC.B "ELITE (BOBA FETT) - "
DC.B "EXTREME (MYSTIK) - "
DC.B "FLASH PRODUCTION (THE PRIDE) - "
DC.B "FULL EVIL (PRISM) - "
DC.B "HUMANOIDS (NOVA) - "
DC.B "IBB AND PIRANHAS - "
DC.B "IMAGE (SCUM) - "
DC.B "IMMORTAL (HI RAY JACKSON,BYE RED BULL) - "
DC.B "INTUITION (ACE, SMACCHIA A FONDO SENZA SSSTRAPP) - "
DC.B "IPEC ELITE (VOYAGER) - "
DC.B "LEVEL 4 (HI CMR) - "
DC.B "LUNACY (PANTHER) - "
DC.B "LSD OF IBB - "
DC.B "LYNX - "
DC.B "MEGAPOWERS - "
DC.B "MINDKILLERS (KOTO) - "
DC.B "MIRACLE (HI SABBATH THE VANDAL) - "
DC.B "NEXX (LIBERATOR) - "
DC.B "NEW PATRIOTS - "
DC.B "NORTH STAR (YO RAISTLIN!) - "
DC.B "PARADOX (HI LOVERBOY) - "
DC.B "PROLOGIC (STRIDER) - "
DC.B "PUSSY (TCB) - "
DC.B "QUARTEX (HI IMAGE) - "
DC.B "REBELS YU (VULTURE) - "
DC.B "RESOLUTION 101 (ZENDICK) - "
DC.B "RELAX (REVCORE) - "
DC.B "ROYAL AMIGA FORCE (MR.AMIGA AND JUNKFOOD) - "
DC.B "SCOOPEX (HI BLENRIS AND TMB) - "
DC.B "SEMTEX (SOUL) - "
DC.B "SPECIAL BROTHERS (ADICTOR) - "
DC.B "SUBWAY (MARK,GEORGE2) - "
DC.B "SUPPLEX (XACT) - "
DC.B "SUN CONNECTION (COBBURN) - "
DC.B "SYSTEM FIVE (TERMINATORX) - "
DC.B "TRISTAR (HI BIGOD20) - "
DC.B "TRIUMPH (NINJA) - "
DC.B "UNTOUCHABLES (INDY) - "
DC.B "VISION (HI JETAZA AND STINGRAY) - "
DC.B "VISION FACTORY (TSH) - "
DC.B "WIZZCAT (CRUX) - "
DC.B "WARFALCONS (EINSTEIN,DISKRUNNER) - "
DC.B "ZERO DEFECTS (YO XENIO, LUTEZIO, TERMINATOR AND PARANOID!) - "
DC.B "ZOMBIE BOYS (RATTLEHEAD)       "
DC.B "OK GUYZ       THAT'S REALLY ALL!    SCROLL RESTARTS!!!!      "
DC.B "                                                             "
even
DC.W $FFFF
