home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
17 Bit Software 1: Collection A
/
17Bit_Collection_A.iso
/
files
/
478.dms
/
478.adf
/
Player.S
< prev
next >
Wrap
Text File
|
1988-07-26
|
7KB
|
405 lines
*----------------------------------------------------
; The Brian's SoundMon Player Routine (C)1988
; By Brian Postma
; J.v.Hartenstraat 51
; 7576VX Oldenzaal (NL)
; Tel:05410-14763
*----------------------------------------------------
bpstart:
bsr bpinit
lea inter,a1
moveq #5,d0
move.l 4,a6
jsr -168(a6) ; Interrupt on
bpwait:
btst #6,$bfe001
bne bpwait
move.l 4,a6
moveq #32,d0
lea inter,a1
jsr -174(a6) ; Interrupt Off
move.w #$f,$dff096
clr.l d0
rts
bpinit:
lea samples,a0
lea bpsong,a1
move.l #512,d0
move.w 30(a1),d1 ;d1 now contains length in steps
move.l #1,d2 ;1 is highest pattern number
mulu #4,d1 ;4 voices per step
subq.w #1,d1 ;correction for DBRA
findhighest:
cmp.w (a1,d0),d2 ;Is it higher
bge nothigher ;No
move.w (a1,d0),d2 ;Yes, so let D2 be highest
nothigher:
addq.l #4,d0 ;Next Voice
dbra d1,findhighest ;And search
move.w 30(a1),d1
mulu #16,d1 ;16 bytes per step
move.l #512,d0 ;header is 512 bytes
mulu #48,d2 ;48 bytes per pattern
add.l d2,d0
add.l d1,d0 ;offset for samples
move.l #14,d1 ;15 samples
add.l #32+24,a1
add.l #bpsong,d0
initloop:
move.l d0,(a0)+
move.w (a1),d2
mulu #2,d2 ;Length is in words
add.l d2,d0 ;offset next sample
add.l #32,a1 ;Length of Sample Part in header
dbra d1,initloop
rts
bpnewirq:
movem.l d0-d7/a0-a6,-(a7)
bsr bpmusic
movem.l (a7)+,d0-d7/a0-a6
moveq #0,d0
rts
bpmusic:
subq.b #1,arpcount
move.l #3,d0
lea bpcurrent,a0
move.l #$dff0a0,a1
bploop1:
move.b 12(a0),d4
ext.w d4
add.w d4,(a0)
move.w (a0),6(a1)
move.l 4(a0),(a1)
move.w 8(a0),4(a1)
tst.b 11(a0)
bne bpdoarp
tst.b 13(a0)
beq not2
bpdoarp:
tst.b arpcount
bne not0
move.b 11(a0),d3
move.b 13(a0),d4
and.w #240,d4
and.w #240,d3
lsr.w #4,d3
lsr.w #4,d4
add.w d3,d4
add.b 10(a0),d4
bsr bpplayarp
bra not2
not0:
cmpi.b #1,arpcount
bne not1
move.b 11(a0),d3
move.b 13(a0),d4
and.w #15,d3
and.w #15,d4
add.w d3,d4
add.b 10(a0),d4
bsr bpplayarp
bra not2
not1:
move.b 10(a0),d4
bsr bpplayarp
not2:
lea $10(a1),a1
lea $e(a0),a0
dbra d0,bploop1
tst.b arpcount
bne arpnotzero
move.b #3,arpcount
arpnotzero:
subq.b #1,bpcount
beq bpskip1
rts
bpskip1:
move.b bpdelay,bpcount
bpplay:
bsr bpnext
move.w dma,$dff096
move.l #$1f4,d0
bpxx:
dbf d0,bpxx
move.l #3,d0
move.l #$dff0a0,a1
move.w #1,d1
lea bpcurrent,a2
bploop2:
btst #15,(a2)
beq bpskip7
bsr bpplayit
bpskip7:
asl.w #1,d1
lea $10(a1),a1
lea $e(a2),a2
dbra d0,bploop2
rts
bpnext:
clr.w dma
lea bpsong,a0
move.l #$dff0a0,a3
move.l #3,d0
move.w #1,d7
lea bpcurrent,a1
bploop3:
clr.l d1
move.w bpstep,d1
lsl.w #4,d1
move.l d0,d2
lsl.l #2,d2
add.l d2,d1
add.l #512,d1
move.w (a0,d1),d2
move.b 2(a0,d1),st
move.b 3(a0,d1),tr
subq.w #1,d2
mulu #48,d2
clr.l d3
move.w 30(a0),d3
lsl.w #4,d3
add.l d2,d3
move.l #$00000200,d4
move.b bppatcount,d4
add.l d3,d4
move.l d4,a2
add.l a0,a2
clr.l d3
move.b (a2),d3
tst.b d3
bne bpskip4
bra bpoptionals
bpskip4:
clr.w 12(a1) ;Clear autoslide/autoarpeggio
move.b 1(a2),d4
and.b #15,d4
cmpi.b #10,d4 ;Option 10->transposes off
bne bp_do1
move.b 2(a2),d4
and.b #240,d4 ;Higher nibble=transpose
bne bp_not1
bp_do1:
add.b tr,d3
bp_not1:
move.b d3,10(a1) ; Voor Arpeggio's
lea bpper,a4
lsl.w #1,d3
move.w -2(a4,d3.w),(a1)
bset #15,(a1)
move.b #$ff,2(a1)
clr.w d3
move.b 1(a2),d3
lsr.b #4,d3
and.b #15,d3
tst.b d3
bne bpskip5
move.b 3(a1),d3
bpskip5:
move.b 1(a2),d4
and.b #15,d4
cmpi.b #10,d4 ;option 10
bne bp_do2
move.b 2(a2),d4
and.b #15,d4
bne bp_not2
bp_do2:
add.b st,d3
bp_not2:
cmpi.w #1,8(a1)
beq bpsamplechange
cmpi.b 3(a1),d3
beq bpoptionals
bpsamplechange:
move.b d3,3(a1)
or.w d7,dma
bpoptionals:
clr.l d3
clr.l d4
move.b 1(a2),d3
and.b #15,d3
move.b 2(a2),d4
; Optionals Here
cmpi.b #0,d3
bne notopt0
move.b d4,11(a1)
notopt0:
cmpi.b #1,d3
bne bpskip3
move.w d4,8(a3)
move.b d4,2(a1) ; Volume ook in BPCurrent
bpskip3:
cmpi.b #2,d3 ; Set Speed
bne bpskip9
move.b d4,bpcount
move.b d4,bpdelay
bpskip9:
cmpi.b #3,d3 ; Filter = LED control
bne bpskipa
tst.b d4
bne bpskipb
bset #1,$bfe001
bra bpskip2
bpskipb:
bclr #1,$bfe001
bpskipa:
cmpi.b #4,d3 ; PortUp
bne noportup
sub.w d4,(a1) ; Slide data in BPCurrent
move.w (a1),6(a3) ; En in AudPer reg.
clr.b 11(a1) ; Arpeggio's uit
noportup:
cmpi.b #5,d3 ; PortDown
bne noportdn
add.w d4,(a1) ; Slide down
clr.b 11(a1)
move.w (a1),6(a3)
noportdn:
cmpi.b #6,d3 ; SetRepCount
bne notopt6
move.b d4,bprepcount
notopt6:
cmpi.b #7,d3 ; DBRA repcount
bne notopt7
subq.b #1,bprepcount
beq notopt7
move.w d4,bpstep
notopt7:
cmpi.b #8,d3 ;Set AutoSlide
bne notopt8
move.b d4,12(a1)
notopt8:
cmpi.b #9,d3 ;Set AutoArpeggio
bne notopt9
move.b d4,13(a1)
notopt9:
bpskip2:
lea $10(a3),a3
lea $e(a1),a1
asl.w #1,d7
dbra d0,bploop3
addq.b #3,bppatcount
cmpi.b #48,bppatcount
bne bpskip8
move.b #0,bppatcount
addq.w #1,bpstep
lea bpsong,a0
move.w 30(a0),d1
cmp.w bpstep,d1
bne bpskip8
move.w #0,bpstep
bpskip8:
rts
bpplayit:
bclr #15,(a2)
move.w (a2),6(a1)
clr.l d7
move.b 3(a2),d7
move.l d7,d6
lea bpsong,a3
lsl.l #2,d6
lea samples,a4
move.l -4(a4,d6),d4
beq bp_nosamp
move.l d4,(a1)
lsl.l #5,d7
add.l #24,d7
move.w (a3,d7),4(a1)
move.b 2(a2),9(a1)
cmpi.b #$ff,2(a2)
bne skipxx
move.w 6(a3,d7),8(a1)
skipxx:
move.w 4(a3,d7),8(a2)
clr.l d6
move.w 2(a3,d7),d6
add.l d6,d4
move.l d4,4(a2)
cmpi.w #1,8(a2)
bne bpskip6
bp_nosamp:
move.l #null,4(a2)
bra bpskip10
bpskip6:
move.w 8(a2),4(a1)
move.l 4(a2),(a1)
bpskip10:
add.w #$8000,d1
move.w d1,$dff096
rts
bpplayarp:
lea bpper,a4
and.w #$ff,d4
lsl.w #1,d4
move.w -2(a4,d4.w),6(a1)
rts
inter:
dc.l 0,0
dc.b 2,127
dc.l 0,0
dc.l bpnewirq
null: dc.w 0
bpcurrent: dc.w 0,0 ;periode,instrument
dc.l null ;start
dc.w 1 ;length (words)
dc.b 0,0,0,0 ;noot,arpeggio,autoslide,autoarpeggio
dc.w 0,0
dc.l null
dc.w 1,0,0
dc.w 0,0
dc.l null
dc.w 1,0,0
dc.w 0,0
dc.l null
dc.w 1,0,0
bpstep: dc.w 0
bppatcount: dc.b 0
st: dc.b 0
tr: dc.b 0
bpcount: dc.b 1
bpdelay: dc.b 6
arpcount: dc.b 1
bprepcount: dc.b 1
even
dma: dc.w 0
bpper:
dc.w 856,808,760,720,680,640,604,572,540,508,480,452
dc.w 428,404,380,360,340,320,302,286,270,254,240,226
dc.w 214,202,190,180,170,160,151,143,135,127,120,113
samples:
dc.l s1,s2,s3,s4,s5,s6,s7,s8,s9,sa,sb,sc,sd,se,sf
bpsong: blk.b 0,0
s1: blk.b 0,0
s2: blk.b 0,0
s3: blk.b 0,0
s4: blk.b 0,0
s5: blk.b 0,0
s6: blk.b 0,0
s7: blk.b 0,0
s8: blk.b 0,0
s9: blk.b 0,0
sa: blk.b 0,0
sb: blk.b 0,0
sc: blk.b 0,0
sd: blk.b 0,0
se: blk.b 0,0
sf: blk.b 0,0