bset #1,$bfe001  ;**** LED ****

lea   MUSICDATA,a0      ;pointer to datablock to play 
bsr   Mu_startmusic     ;start music
loop:
btst #6,$bfe001
bne loop 		;wait for mouseclick
bsr   MU_stopmusic      ;stop music
rts			;EXIT program

*******************************************************
******** GameMusicCreator Replay-routine v1.0 *********
*******************************************************
MU_startmusic:
move.l  a0,MU_data
move.l  a0,MU_tablepos
move.l  a0,MU_songpointer
add.l   #242,MU_tablepos
add.l   #444,MU_songpointer
move.w  #64,MU_patterncount
clr.w   $dff0a8
clr.w   $dff0b8
clr.w   $dff0c8
clr.w   $dff0d8
move.w  #$f,$dff096
clr.l   MU_vol0
clr.l   MU_vol2
clr.l   MU_pospointer
clr.w   MU_songspeed
clr.w   MU_note0
clr.w   MU_note1
clr.w   MU_note2
clr.w   MU_note3
clr.w   MU_slide0
clr.w   MU_slide1
clr.w   MU_slide2
clr.w   MU_slide3
clr.w   MU_stop
clr.l   MU_chan0
clr.l   MU_chan1
clr.l   MU_chan2
clr.l   MU_chan3
move.w  #6,MU_songstep
move.l  a0,a2
add.l   #244,a2
move.l  240(a0),d1
sub.l   #1,d1
clr.l   d0
MU_sizeloop:
move.w  (a2)+,d2
cmp.w   d2,d0
bge     MU_nosizeadd
move.w  d2,d0
MU_nosizeadd:
dbf     d1,MU_sizeloop
add.l   #1024,d0
move.l  a0,a1
add.l   #444,a1
add.l   d0,a1
move.l  #14,d7
bsr     MU_calcins
move.l  $6c,MU_oldirq+2
move.l  #MU_interrupt,$6c
rts

MU_calcins:
cmp.l   #0,(a0)
bne     MU_calcit
add.l   #16,a0
dbf     d7,MU_calcins
rts
MU_calcit:
move.l  (a0),d0
move.l  8(a0),d1
sub.l   d0,d1  ;repeat
move.l  a1,(a0)
move.l  a1,d0
add.l   d1,d0
move.l  d0,8(a0) ;set repeat
cmp.w   #2,12(a0)
bne     mu_looping
move.l  #MU_empty,8(a0)
mu_looping:
clr.l   d0
move.w  4(a0),d0 ;add sampletable
lsl.l   #1,d0
add.l   d0,a1
add.l   #16,a0
dbf     d7,MU_calcins
rts

MU_stopmusic:
move.l  MU_oldirq+2,$6c
clr.w   $dff0a8
clr.w   $dff0b8
clr.w   $dff0c8
clr.w   $dff0d8
move.w  #$f,$dff096
rts
MU_interrupt:
movem.l  d0-d7/a0-a6,-(a7)
btst     #5,$dff01f
beq      MU_novertblank
bsr      MU_playsong
MU_novertblank:
movem.l  (a7)+,d0-d7/a0-a6
MU_oldirq:  jmp $0
MU_playsong:
bsr     MU_everyvert
add.w   #1,MU_songspeed
move.w  MU_songstep,d0
cmp.w   MU_songspeed,d0
ble     MU_okplay
rts
MU_okplay: 
clr.w   MU_songspeed
add.w   #1,MU_patterncount
cmp.w   #65,MU_patterncount
bne     MU_playit
MU_setnewpat:
******* calc position ****
add.l   #1,MU_pospointer
move.l  MU_pospointer,d0
move.l  MU_data,a5
cmp.l   240(a5),d0
bhi     MU_setstart
***********************
move.w  #1,MU_patterncount
add.l   #2,MU_tablepos
move.l  MU_tablepos,a0
clr.l   d0
move.w  (a0),d0
move.l  MU_data,a0
add.l   #444,a0
add.l   d0,a0
move.l  a0,MU_songpointer
bra     MU_playit
************************
MU_setstart:
clr.l   MU_pospointer
move.l  MU_data,MU_tablepos
add.l   #242,MU_tablepos
bra     MU_setnewpat
MU_playit:
move.l  MU_songpointer,a0
add.l   #16,MU_songpointer
move.l  (a0),d0
clr.w   d3
move.w  #1,d2
bsr     MU_setinstr
bsr     MU_seteffect
move.l  4(a0),d0
move.w  #2,d2
bsr     MU_setinstr
bsr     MU_seteffect
move.l  8(a0),d0
move.w  #3,d2
bsr     MU_setinstr
bsr     MU_seteffect
move.l  12(a0),d0
move.w  #4,d2
bsr     MU_setinstr
bsr     MU_seteffect
move.w  d3,$dff096
rts
MU_setinstr:
move.w  d0,d5
and.w   #$f000,d0
cmp.w   #0,d0
bne     MU_setit
rts
MU_setit:
swap    d0
move.w  d0,d1
clr.w   d0
swap    d0
lsr.w   #8,d0
lsr.w   #4,d0
sub.w   #1,d0
lsl.w   #4,d0
move.l  MU_data,a6
add.l   d0,a6
cmp.w   #1,d2
bne     MU_conti1
clr.w   $dff0a8
move.l  a6,MU_chan0
move.l  (a6),$dff0a0
move.w  4(a6),$dff0a4
move.w  d1,$dff0a6
move.w  d1,MU_note0
move.w  6(a6),MU_vol0
clr.w   MU_slide0
bset    #0,d3
rts
MU_conti1:
cmp.w   #2,d2
bne     MU_conti2
clr.w   $dff0b8
move.l  a6,MU_chan1
move.l  (a6),$dff0b0
move.w  4(a6),$dff0b4
move.w  d1,$dff0b6
move.w  d1,MU_note1
move.w  6(a6),MU_vol1
clr.w   MU_slide1
bset    #1,d3
rts
MU_conti2:
cmp.w   #3,d2
bne     MU_conti3
clr.w   $dff0c8
move.l  a6,MU_chan2
move.l  (a6),$dff0c0
move.w  4(a6),$dff0c4
move.w  d1,$dff0c6
move.w  d1,MU_note2
move.w  6(a6),MU_vol2
clr.w   MU_slide2
bset    #2,d3
rts
MU_conti3:
clr.w   $dff0d8
move.l  a6,MU_chan3
move.l  (a6),$dff0d0
move.w  4(a6),$dff0d4
move.w  d1,$dff0d6
move.w  d1,MU_note3
move.w  6(a6),MU_vol3
clr.w   MU_slide3
bset    #3,d3
rts
MU_seteffect:
move.w  d5,d6
and.w   #$00ff,d5
and.w   #$0f00,d6
cmp.w   #0,d6
beq     MU_effjump2
cmp.w   #$0100,d6
beq     MU_slideup
cmp.w   #$0200,d6
beq     MU_slidedown
cmp.w   #$0300,d6
beq     MU_setvolume
cmp.w   #$0500,d6
beq     MU_posjump
cmp.w   #$0400,d6
bne     MU_nobreak
MU_itsabreak:
move.w  #64,MU_patterncount
rts
MU_nobreak:
cmp.w   #$0800,d6
bne     MU_effjump0
move.w  d5,MU_songstep
rts
MU_effjump0:
cmp.w   #$0600,d6
bne     MU_effjump1
bclr    #1,$bfe001
rts
MU_effjump1:
cmp.w   #$0700,d6
bne     MU_effjump2
bset    #1,$bfe001
MU_effjump2:
rts
MU_posjump:
clr.l   d4
move.w  d5,d4
sub.l   #1,d4
move.l  d4,MU_pospointer
add.l   #1,d4
lsl.w   #1,d4
sub.w   #2,d4
move.l  MU_data,a0
add.l   #244,a0
add.l   d4,a0
move.l  a0,MU_tablepos
bra     MU_itsabreak
MU_slideup:
neg.w   d5
MU_slidedown:
cmp.w   #1,d2
bne     MU_j1
move.w  d5,MU_slide0
rts
MU_j1:
cmp.w   #2,d2
bne     MU_j2
move.w  d5,MU_slide1
rts
MU_j2:
cmp.w   #3,d2
bne     MU_j3
move.w  d5,MU_slide2
rts
MU_j3:
move.w  d5,MU_slide3
rts
MU_setvolume:
cmp.w   #1,d2
bne     MU_j00
move.w  d5,MU_vol0
;move.w  d5,$dff0a8
rts
MU_j00:
cmp.w   #2,d2
bne     MU_j22
move.w  d5,MU_vol1
;move.w  d5,$dff0b8
rts
MU_j22:
cmp.w   #3,d2
bne     MU_j33
move.w  d5,MU_vol2
;move.w  d5,$dff0c8
rts
MU_j33:
move.w  d5,MU_vol3
;move.w  d5,$dff0d8
rts
MU_everyvert:
move.w  MU_slide0,d0
add.w   d0,MU_note0
move.w  MU_note0,$dff0a6
move.w  MU_slide1,d0
add.w   d0,MU_note1
move.w  MU_note1,$dff0b6
move.w  MU_slide2,d0
add.w   d0,MU_note2
move.w  MU_note2,$dff0c6
move.w  MU_slide3,d0
add.w   d0,MU_note3
move.w  MU_note3,$dff0d6
btst    #0,MU_stop
beq     MU_ok1
bclr    #0,MU_stop
move.l  MU_chan0,a0
move.l  8(a0),$dff0a0
move.w  12(a0),$dff0a4
clr.l   MU_chan0
MU_ok1:
btst    #1,MU_stop
beq     MU_ok2
bclr    #1,MU_stop
move.l  MU_chan1,a0
move.l  8(a0),$dff0b0
move.w  12(a0),$dff0b4
clr.l   MU_chan1
MU_ok2:
btst    #2,MU_stop
beq     MU_ok3
bclr    #2,MU_stop
move.l  MU_chan2,a0
move.l  8(a0),$dff0c0
move.w  12(a0),$dff0c4
clr.l   MU_chan2
MU_ok3:
btst    #3,MU_stop
beq     MU_ok4
bclr    #3,MU_stop
move.l  MU_chan3,a0
move.l  8(a0),$dff0d0
move.w  12(a0),$dff0d4
clr.l   MU_chan3
MU_ok4:
move.w   #$8000,d3
cmp.l    #0,MU_chan0
beq      MU_okk1
bset     #0,MU_stop
bset     #0,d3
MU_okk1:
cmp.l    #0,MU_chan1
beq      MU_okk2
bset     #1,MU_stop
bset     #1,d3
MU_okk2:
cmp.l    #0,MU_chan2
beq      MU_okk3
bset     #2,MU_stop
bset     #2,d3
MU_okk3:
cmp.l    #0,MU_chan3
beq      MU_okk4
bset     #3,MU_stop
bset     #3,d3
MU_okk4:
move.w   d3,$dff096
move.w   MU_vol0,$dff0a8
move.w   MU_vol1,$dff0b8
move.w   MU_vol2,$dff0c8
move.w   MU_vol3,$dff0d8
rts
********** variables *****
MU_stop:  dc.w 0
MU_slide0: dc.w 0
MU_slide1: dc.w 0
MU_slide2: dc.w 0
MU_slide3: dc.w 0
MU_chan0: dc.l 0
MU_chan1: dc.l 0
MU_chan2: dc.l 0
MU_chan3: dc.l 0
MU_note0: dc.w 0
MU_note1: dc.w 0
MU_note2: dc.w 0
MU_note3: dc.w 0
MU_vol0: dc.w 0
MU_vol1: dc.w 0
MU_vol2: dc.w 0
MU_vol3: dc.w 0
MU_songspeed: dc.w 0
MU_songstep: dc.w 5
MU_patterncount: dc.w 0
MU_songpointer: dc.l 0
MU_tablepos: dc.l 0
MU_pospointer: dc.l 0 
MU_empty: blk.l 2,0
MU_data: dc.l  0
*************************************************
*************************************************

MUSICDATA: blk.b  0,0   ;datablock
