home *** CD-ROM | disk | FTP | other *** search
/ YPA: Your Privacy Assured / YPA.ISO / other_goodies / music / ep154b_1.dms / ep154b_1.adf / EagleplayerDeveloper / Examples / Soundmon.s < prev    next >
Text File  |  1995-01-17  |  21KB  |  1,017 lines

  1.  
  2.     incdir    "Include:"
  3.     include "misc/EaglePlayer.i"
  4.  
  5.     PLAYERHEADER BP_TagListe
  6.  
  7.     dc.b '$VER: SoundMon 2.0 player module V1.6 (28 Dec 92)',0
  8.     even
  9.  
  10. BP_TagListe:    dc.l    DTP_PlayerVersion,2
  11.         dc.l    DTP_PlayerName,BP_Name
  12.         dc.l    DTP_Creator,BP_Creator
  13.         dc.l    DTP_Check2,Chk
  14.         dc.l    DTP_Interrupt,BP_Music
  15.         dc.l    DTP_InitPlayer,InitPlay
  16.         dc.l    DTP_EndPlayer,EndPlay
  17.         dc.l    DTP_InitSound,BP_Init
  18.         dc.l    DTP_EndSound,RemSnd
  19.         dc.l    DTP_Volume,SetVol
  20.         dc.l    DTP_Balance,SetVol
  21.         dc.l    EP_Voices,SetVoices
  22.  
  23.         dc.l    EP_StructInit,BP_GetStructAdr
  24.         dc.l    EP_StructEnd,BP_FreeStructAdr
  25.  
  26. ;        dc.l    EP_SampleInit,SampleInit
  27. ;        dc.l    EP_SampleEnd,SampleEnd
  28.  
  29.         dc.l    EP_Get_ModuleInfo,GetInfos
  30.         dc.l    EP_Free_ModuleInfo,FreeInfos
  31.  
  32.         dc.l    EP_Flags,EPB_Save!EPB_Restart!EPB_Volume!EPB_Balance!EPB_Voices!EPB_Analyzer!EPB_SongEnd
  33.  
  34.         dc.l    0
  35.     
  36. BP_RightVol    dc.w    64
  37. BP_LeftVol    dc.w    64
  38.  
  39. BP_Voice1    dc.w    1        ;
  40. BP_Voice2    dc.w    1        ;
  41. BP_Voice3    dc.w    1        ;
  42. BP_Voice4    dc.w    1        ;
  43. BP_OldVoice1    dc.w    0        ; Don`t change !!!
  44. BP_OldVoice2    dc.w    0        ;
  45. BP_OldVoice3    dc.w    0        ;
  46. BP_OldVoice4    dc.w    0        ;
  47. BP_SongEndBase:    dc.l    0        ;
  48.  
  49. *------------------------ Player & Creatorname -------------------------*
  50. BP_Name:    dc.b    "SoundMon",0
  51. BP_Creator:    dc.b    "Brian Postma,",10
  52.         dc.b    "adapted by Eagleeye of DEFECT",0
  53. BP_Prefix:    dc.b    "BP.",0
  54.         even
  55.  
  56. *------------------- Tag-Item Struktur fⁿr Module-Info -----------------*
  57. InfoBuffer:    dc.l    MI_SongName,0            ;0
  58.         dc.l    MI_Samples,0            ;8
  59.         dc.l    MI_MaxSamples,15        ;16
  60.         dc.l    MI_SynthSamples,0        ;24
  61.         dc.l    MI_MaxSynthSamples,15        ;32
  62.         dc.l    MI_Steps,0            ;40
  63. CalcSize:    dc.l    MI_CalcSize,0            ;48
  64.         dc.l    MI_Prefix,BP_Prefix
  65.         dc.l    0
  66.  
  67. BP_StructAdr:    ds.b    UPS_SizeOf
  68.  
  69. *-------------------------- Get StructAdr ------------------------------*
  70. BP_GetStructAdr:lea    BP_StructAdr(pc),a0
  71. BP_FreeStructAdr:rts
  72.  
  73. *----------------- Get Infos (Create InfoTag-Itemliste) ----------------*
  74. GetInfos:    lea    InfoBuffer(pc),a0
  75.         move.l    BP_Data(pc),a1
  76.         move.l    a1,4(a0)
  77.         move.w    $1e(a1),46(a0)
  78.         subq.w    #1,46(a0)        ;Last Step
  79.  
  80.         move.l    a1,a2
  81.         moveq    #0,d0
  82.         moveq    #0,d1
  83.         moveq    #14,d3
  84. .NextSample:    lea    $20(a2),a2
  85.         cmp.b    #$ff,(a2)
  86.         beq.s    .SynthSample
  87.         tst.l    $18(a2)
  88.         beq.s    .NextSample2
  89. .Sample:    addq.l    #1,d0
  90.         bra.b    .NextSample2
  91. .SynthSample:    addq.l    #1,d1
  92. .NextSample2:    dbf    d3,.NextSample
  93.         move.l    d0,12(a0)        ;Sample
  94.         move.l    d1,28(a0)        ;Synth-Sample
  95. FreeInfos:    rts
  96.  
  97. *-------------------- SoundMon V2.0 Check-Routine -----------------------*
  98. Chk:        move.l    dtg_ChkData(a5),a0
  99.         move.l    $1a(a0),d0
  100.         lsr.l    #8,d0
  101.         subi.l    #"V.2",d0
  102.         rts
  103.  
  104. *-----------------------------------------------------------------------*
  105. InitPlay:    lea    BP_OldVoice1(pc),a0        ;Voices 0 setzen=alle an
  106.         clr.l    (a0)+
  107.         clr.l    (a0)+
  108.         move.l    DTG_SongEnd(a5),a1
  109.         move.l    a1,(a0)            ; SongEndBase
  110.  
  111.         moveq    #0,d0
  112.         move.l    dtg_GetListData(a5),a0    ; Function
  113.         jsr    (a0)
  114.         move.l    a0,BP_Data
  115.         move.l    dtg_AudioAlloc(a5),a0    ; Function
  116.         jmp    (a0)            ; returncode is already set !
  117.  
  118. *-----------------------------------------------------------------------*
  119. EndPlay:    move.l    dtg_AudioFree(a5),a0        ; Function
  120.         jmp    (a0)
  121.  
  122. *-----------------------------------------------------------------------*
  123. RemSnd:        lea    $dff000,a0
  124.         clr.w    $a8(a0)
  125.         clr.w    $b8(a0)
  126.         clr.w    $c8(a0)
  127.         clr.w    $d8(a0)
  128.         move.w    #$F,$96(a0)            ; End Sound
  129.         rts
  130.  
  131. *-----------------------------------------------------------------------*
  132. *        d0 Bit 0-3 = Set Voices Bit=1 Voice on            *
  133. SetVoices:    lea    BP_Voice1(pc),a0
  134.         lea    BP_StructAdr(pc),a1
  135.         moveq    #1,d1
  136.         move.w    d1,(a0)+            Voice1=0 setzen
  137.         btst    #0,d0
  138.         bne.s    .NoVoice1
  139.         clr.w    -2(a0)
  140.         clr.w    $dff0a8
  141.         clr.w    UPS_Voice1Vol(a1)
  142. .NoVoice1:    move.w    d1,(a0)+            Voice2=0 setzen
  143.         btst    #1,d0
  144.         bne.s    .NoVoice2
  145.         clr.w    -2(a0)
  146.         clr.w    $dff0b8
  147.         clr.w    UPS_Voice2Vol(a1)
  148. .NoVoice2:    move.w    d1,(a0)+            Voice3=0 setzen
  149.         btst    #2,d0
  150.         bne.s    .NoVoice3
  151.         clr.w    -2(a0)
  152.         clr.w    $dff0c8
  153.         clr.w    UPS_Voice3Vol(a1)
  154. .NoVoice3:    move.w    d1,(a0)+            Voice4=0 setzen
  155.         btst    #3,d0
  156.         bne.s    .NoVoice4
  157.         clr.w    -2(a0)
  158.         clr.w    $dff0d8
  159.         clr.w    UPS_Voice4Vol(a1)
  160. .NoVoice4:    move.w    d0,UPS_DmaCon(a1)
  161.         moveq    #0,d0
  162.         rts
  163.  
  164. *-----------------------------------------------------------------------*
  165. SetVol:        move.w    DTG_SndLBal(a5),d0
  166.         mulu    DTG_SndVol(a5),d0
  167.         lsr.w    #6,d0                ; durch 64
  168.         move.w    d0,BP_LeftVol            ; Left Volume
  169.  
  170.         move.w    DTG_SndRBal(a5),d0
  171.         mulu    DTG_SndVol(a5),d0
  172.         lsr.w    #6,d0                ; durch 64
  173.         move.w    d0,BP_RightVol            ; Right Volume
  174.  
  175.  
  176.         lea    BP_OldVoice1(pc),a0
  177.         lea    $dff0a0,a5
  178.         moveq    #3,d1
  179. .SetNew        move.w    (a0)+,d0
  180.         bsr.s    BP_SetVoices
  181.         addq.l    #8,a5
  182.         addq.l    #8,a5
  183.         dbf    d1,.SetNew
  184.         rts
  185.  
  186.  
  187.     ;*****************************************
  188.     ;**** Sound-Mon-Pro-SetVoices-Routine ****
  189.     ;*****************************************
  190. BP_SetVolume7:    movem.l    d0/a5,-(a7)
  191.         moveq    #0,d0
  192.         move.b    2(a2),d0
  193.         bra.b    BP_SetVolume3
  194. BP_SetVolume6:    movem.l    d0/a5,-(a7)
  195.         move.w    6(a3,d7.l),d0
  196.         bra.b    BP_SetVolume3
  197. BP_SetVolume5:    movem.l    d0/a5,-(a7)
  198.         move.l    d4,d0
  199.         move.l    a3,a5
  200.         bra.b    BP_SetVolume4
  201. BP_SetVolume:    movem.l    d0/a5,-(a7)
  202.         move.l    d3,d0
  203.         bra.b    BP_SetVolume3
  204. BP_SetVolume2:    movem.l    d0/a5,-(a7)
  205.         move.l    d4,d0
  206. BP_SetVolume3:    move.l    a1,a5
  207. BP_SetVolume4:    bsr.w    BP_SetVoices
  208.         movem.l    (a7)+,d0/a5
  209.         rts
  210.  
  211.     ;**** Setze Voices ****
  212. BP_SetVoices:    cmp.l    #$dff0a0,a5            ;Left Volume
  213.         bne.s    .NoVoice1
  214.         move.w    d0,BP_OldVoice1
  215.         move.w    d0,BP_StructAdr+UPS_Voice1Vol
  216.         tst.w    BP_Voice1
  217.         bne.w    .Voice1ON
  218.         move    #0,d0
  219. .Voice1On:    mulu.w    BP_LeftVol(pc),d0
  220.         bra.b    .SetIt
  221. .NoVoice1:    cmp.l    #$dff0b0,a5            ;Right Volume
  222.         bne.s    .NoVoice2
  223.         move.w    d0,BP_OldVoice2
  224.         move.w    d0,BP_StructAdr+UPS_Voice2Vol
  225.         tst.w    BP_Voice2
  226.         bne.s    .Voice2On
  227.         moveq    #0,d0
  228. .Voice2On:    mulu.w    BP_RightVol(pc),d0
  229.         bra.b    .SetIt
  230. .NoVoice2:    cmp.l    #$dff0c0,a5            ;Right Volume
  231.         bne.s    .NoVoice3
  232.         move.w    d0,BP_OldVoice3
  233.         move.w    d0,BP_StructAdr+UPS_Voice3Vol
  234.         tst.w    BP_Voice3
  235.         bne.s    .Voice3On
  236.         moveq    #0,d0
  237. .Voice3On:    mulu.w    BP_RightVol(pc),d0
  238.         bra.b    .SetIt
  239. .NoVoice3:    move.w    d0,BP_OldVoice4
  240.         move.w    d0,BP_StructAdr+UPS_Voice4Vol
  241.         tst.w    BP_Voice4
  242.         bne.s    .Voice4On
  243.         moveq    #0,d0
  244. .Voice4On:    mulu.w    BP_LeftVol(pc),d0
  245. .SetIt        lsr.l    #6,d0
  246.         move.w    d0,8(a5)
  247. .Return:    rts
  248.  
  249. *-----------------------------------------------------------------------*
  250.     **************************************************
  251.     **    BP-SoundMon V2.0 - Replay-Routine    **
  252.     **************************************************
  253. ;        SECTION Replay,Code_C
  254. BP_Init:    move.w    #15,$dff096
  255.         move.l    BP_Data(pc),a0
  256.         lea    BP_D17,a1
  257.         lea    BP_DataEnd,a2
  258.         moveq    #14,d0
  259. .Co2:        move.l    a2,(a1)+
  260.         dbf    d0,.CO2
  261.  
  262.         move.l    a0,a1
  263.         lea    BP_d4,a0
  264.         clr.l    (a0)+
  265.         clr.b    (a0)+
  266.         lea    BP_D17,a0
  267.         clr.b    BP_D12
  268.         cmpi.w    #$562e,$1a(a1)
  269.         bne.w    BP_int1
  270.         cmpi.b    #$32,$1c(a1)
  271.         bne.w    BP_int1
  272.         move.b    $1d(a1),BP_D12
  273. BP_int1:    move.l    #$200,d0
  274.         move.w    $1e(a1),d1
  275.         moveq    #1,d2
  276.         mulu    #$4,d1
  277.         subq.w    #$1,d1
  278. BP_int2:    cmp.w    0(a1,d0.l),d2
  279.         bge.w    BP_int3
  280.         move.w    $0(a1,d0.l),d2
  281. BP_int3:    addq.l    #4,d0
  282.         dbf    d1,BP_int2
  283.         move.w    $1e(a1),d1
  284.         mulu    #16,d1
  285.         move.l    #$200,d0
  286.         mulu    #$30,d2
  287.         add.l    d2,d0
  288.         add.l    d1,d0
  289.         move.l    BP_Data(pc),d1
  290.         add.l    d1,d0
  291.         move.l    d0,BP_D14
  292.         clr.l    d1
  293.         move.b    BP_D12,d1
  294.         lsl.l    #6,d1
  295.         add.l    d1,d0
  296.         moveq    #$e,d1
  297.  
  298.         adda.l    #$20,a1
  299. BP_int4:    move.l    d0,(a0)+
  300.         cmpi.b    #-$1,(a1)
  301.         beq.w    BP_int5
  302.         move.w    $18(a1),d2
  303.         mulu    #2,d2
  304.         add.l    d2,d0
  305. BP_int5:    adda.l    #$20,a1
  306.         dbf    d1,BP_int4
  307.         sub.l    BP_Data(pc),d0            ->> SoundMon-Size
  308.         move.l    d0,CalcSize+4
  309.         rts    
  310.  
  311. BP_Music:    movem.l    d1-d7/a0-a6,-(a7)
  312.         lea    BP_StructAdr(pc),a0
  313.  
  314.     move.w    #UPSB_Adr!UPSB_LEN!UPSB_Per!UPSB_Vol!UPSB_DMACON,UPS_Flags(a0)
  315.  
  316.         move.w    #1,UPS_Enabled(a0)
  317.  
  318.         clr.w    UPS_Voice1Per(a0)
  319.         clr.w    UPS_Voice2Per(a0)
  320.         clr.w    UPS_Voice3Per(a0)
  321.         clr.w    UPS_Voice4Per(a0)
  322.  
  323.         bsr    BP_MS2
  324.  
  325.         clr.w    BP_StructAdr+UPS_Enabled
  326.  
  327.         movem.l    (a7)+,d1-d7/a0-a6
  328.         moveq    #0,d0
  329.         rts    
  330.  
  331.  
  332. BP_MS2:        bsr.w    BP_MX7
  333.         subq.b    #1,BP_D10
  334.         move.l    #3,d0
  335.         lea    BP_D3,a0
  336.         move.l    #$dff0a0,a1
  337. BP_MS3:        move.b    $c(a0),d4
  338.         ext.w    d4
  339.         add.w    d4,(a0)
  340.         tst.b    $1e(a0)
  341.         bne.w    BP_MS4
  342.  
  343.  
  344.         move.w    (a0),6(a1)
  345.  
  346.         tst.w    (a0)
  347.         beq.s    .BP_PerRet
  348.             cmp.l    #$dff0a0,a1
  349.             bne.s    .BP_NoVoice1
  350.             move.w    (a0),BP_StructAdr+UPS_Voice1Per
  351.             bra.s    .BP_PerRet
  352. .BP_NoVoice1        cmp.l    #$dff0b0,a1
  353.             bne.s    .BP_NoVoice2
  354.             move.w    (a0),BP_StructAdr+UPS_Voice2Per
  355.             bra.s    .BP_PerRet
  356. .BP_NoVoice2:        cmp.l    #$dff0c0,a1
  357.             bne.s    .BP_NoVoice3
  358.             move.w    (a0),BP_StructAdr+UPS_Voice3Per
  359.             bra.s    .BP_PerRet
  360. .BP_NoVoice3:        move.w    (a0),BP_StructAdr+UPS_Voice4Per
  361. .BP_PerRet
  362.  
  363.  
  364. BP_MS4:        move.l    4(a0),(a1)
  365.  
  366.             cmp.l    #$dff0a0,a1
  367.             bne.s    .BP_NoVoice1
  368.             move.l    4(a0),BP_StructAdr+UPS_Voice1Adr
  369.             bra.s    .BP_AdrRet
  370. .BP_NoVoice1        cmp.l    #$dff0b0,a1
  371.             bne.s    .BP_NoVoice2
  372.             move.l    4(a0),BP_StructAdr+UPS_Voice2Adr
  373.             bra.s    .BP_AdrRet
  374. .BP_NoVoice2:        cmp.l    #$dff0c0,a1
  375.             bne.s    .BP_NoVoice3
  376.             move.l    4(a0),BP_StructAdr+UPS_Voice3Adr
  377.             bra.s    .BP_AdrRet
  378. .BP_NoVoice3:        move.l    4(a0),BP_StructAdr+UPS_Voice4Adr
  379. .BP_AdrRet
  380.  
  381.  
  382.  
  383.  
  384. BP_Label1:    move.w    8(a0),4(a1)
  385.  
  386.     tst.w    8(a0)
  387. ;    beq.s    .BP_LenRet
  388.             cmp.l    #$dff0a0,a1
  389.             bne.s    .BP_NoVoice1
  390.             move.w    8(a0),BP_StructAdr+UPS_Voice1Len
  391.             bra.s    .BP_LenRet
  392. .BP_NoVoice1        cmp.l    #$dff0b0,a1
  393.             bne.s    .BP_NoVoice2
  394.             move.w    8(a0),BP_StructAdr+UPS_Voice2Len
  395.             bra.s    .BP_LenRet
  396. .BP_NoVoice2:        cmp.l    #$dff0c0,a1
  397.             bne.s    .BP_NoVoice3
  398.             move.w    8(a0),BP_StructAdr+UPS_Voice3Len
  399.             bra.s    .BP_LenRet
  400. .BP_NoVoice3:        move.w    8(a0),BP_StructAdr+UPS_Voice4Len
  401. .BP_LenRet
  402.  
  403.  
  404.         tst.b    $b(a0)
  405.         bne.w    BP_MS5
  406.         tst.b    $d(a0)
  407.         beq.w    BP_MS8
  408. BP_MS5:        tst.b    BP_D10
  409.         bne.w    BP_MS6
  410.         move.b    $b(a0),d3
  411.         move.b    $d(a0),d4
  412.         andi.w    #$f0,d4
  413.         andi.w    #$f0,d3
  414.         lsr.w    #4,d3
  415.         lsr.w    #4,d4
  416.         add.w    d3,d4
  417.         add.b    $a(a0),d4
  418.         bsr.w    BP_MX6
  419.         bra.w    BP_MS8
  420.  
  421. BP_MS6:        cmpi.b    #1,BP_D10
  422.         bne.w    BP_MS7
  423.         move.b    $b(a0),d3
  424.         move.b    $d(a0),d4
  425.         andi.w    #$f,d3
  426.         andi.w    #$f,d4
  427.         add.w    d3,d4
  428.         add.b    $a(a0),d4
  429.         bsr.w    BP_MX6
  430.         bra.w    BP_MS8
  431.  
  432. BP_MS7:        move.b    $a(a0),d4
  433.         bsr.w    BP_MX6
  434. BP_MS8:        lea    $10(a1),a1
  435.         lea    $20(a0),a0
  436.         dbf    d0,BP_MS3
  437.         tst.b    BP_D10
  438.         bne.w    BP_MS9
  439.         move.b    #3,BP_D10
  440. BP_MS9:        subq.b    #1,BP_D8
  441.         beq.w    BP_MT1
  442.         rts    
  443.  
  444. BP_MT1:        move.b    BP_D9,BP_D8
  445.         bsr.s    BP_MU1
  446.         move.w    BP_D13,$00dff096
  447.         move.l    #$1f4,d0
  448. BP_MT2:        dbf    d0,BP_MT2
  449.         moveq    #3,d0
  450.  
  451.         lea    $dff0a0,a1
  452.         move.w    #$1,d1
  453.         lea    BP_D3,a2
  454.         lea    BP_D15,a5
  455. BP_MT3:        btst    #$07,(a2)
  456.         beq.w    BP_MT4
  457.         bsr.w    BP_MW3
  458. BP_MT4:        asl.w    #$1,d1
  459.         lea    $10(a1),a1
  460.         lea    $20(a2),a2
  461.         lea    $24(a5),a5
  462.         dbf    d0,BP_MT3
  463.         rts    
  464.  
  465. BP_MU1:        clr.w    BP_D13
  466.         move.l    BP_Data(pc),a0
  467.         lea    $dff0a0,a3
  468.         moveq    #3,d0
  469.  
  470.         move.w    #$1,d7
  471.         lea    BP_D3,a1
  472. BP_MU2:        clr.l    d1
  473.         move.w    BP_D4,d1
  474.         lsl.w    #$4,d1
  475.         move.l    d0,d2
  476.         lsl.l    #$2,d2
  477.         add.l    d2,d1
  478.         addi.l    #$200,d1
  479.         move.w    (a0,d1.l),d2
  480.         move.b    $2(a0,d1.l),BP_D6
  481.         move.b    $3(a0,d1.l),BP_D7
  482.         subq.w    #$1,d2
  483.         mulu    #$30,d2
  484.         clr.l    d3
  485.         move.w    $1e(a0),d3
  486.         lsl.w    #$4,d3
  487.         add.l    d2,d3
  488.         move.l    #$200,d4
  489.         move.b    BP_D5,d4
  490.         add.l    d3,d4
  491.         move.l    d4,a2
  492.         adda.l    a0,a2
  493.         clr.l    d3
  494.         move.b    (a2),d3
  495.         tst.b    d3
  496.         bne.w    BP_MU3
  497.         bra.w    BP_MV0
  498.  
  499. BP_MU3:        clr.w    $c(a1)
  500.         move.b    $1(a2),d4
  501.         andi.b    #$f,d4
  502.         cmpi.b    #$a,d4
  503.         bne.w    BP_MU4
  504.         move.b    $2(a2),d4
  505.         andi.b    #-$10,d4
  506.         bne.w    BP_MU5
  507. BP_MU4:        add.b    BP_D7,d3
  508.         ext.w    d3
  509. BP_MU5:        move.b    d3,$a(a1)
  510.         lea    BP_D16,a4
  511.         lsl.w    #$1,d3
  512.         move.w    -$2(a4,d3.w),(a1)
  513.         bset    #$7,(a1)
  514.         move.b    #-$1,$2(a1)
  515.         clr.w    d3
  516.         move.b    $1(a2),d3
  517.         lsr.b    #$4,d3
  518.         andi.b    #$0f,d3
  519.         tst.b    d3
  520.         bne.w    BP_MU6
  521.         move.b    $3(a1),d3
  522. BP_MU6:        move.b    $1(a2),d4
  523.         andi.b    #$f,d4
  524.         cmpi.b    #$a,d4
  525.         bne.w    BP_MU7
  526.         move.b    $2(a2),d4
  527.         andi.b    #$f,d4
  528.         bne.w    BP_MU8
  529. BP_MU7:        add.b    BP_D6,d3
  530. BP_MU8:        cmpi.w    #$1,$8(a1)
  531.         beq.w    BP_MU9
  532.         cmp.b    $3(a1),d3
  533.         beq.w    BP_MV0
  534. BP_MU9:        move.b    d3,$3(a1)
  535.         or.w    d7,BP_D13
  536. BP_MV0:        clr.l    d3
  537.         clr.l    d4
  538.         move.b    $1(a2),d3
  539.         andi.b    #$f,d3
  540.         move.b    $2(a2),d4
  541.         tst.b    d3
  542.         bne.w    BP_MV1
  543.         move.b    d4,$b(a1)
  544. BP_MV1:        cmpi.b    #$01,d3
  545.         bne.w    BP_MV2
  546.     ;    move.w    d4,$8(a3)        ;Vol (Found)
  547.         bsr    BP_SetVolume5
  548.  
  549.         move.b    d4,$2(a1)
  550. BP_MV2:        cmpi.b    #$2,d3
  551.         bne.w    BP_MV3
  552.         move.b    d4,BP_D8
  553.         move.b    d4,BP_D9
  554. BP_MV3:        cmpi.b    #$3,d3
  555.         bne.w    BP_MV5
  556.         tst.b    d4
  557.         bne.w    BP_MV4
  558.         bset    #1,$bfe001
  559.         bra.w    BP_MW1
  560.  
  561. BP_MV4:        bclr    #1,$bfe001
  562. BP_MV5:        cmpi.b    #4,d3
  563.         bne.w    BP_MV6
  564.         sub.w    d4,(a1)
  565.         clr.b    $b(a1)
  566. BP_MV6:        cmpi.b    #5,d3
  567.         bne.w    BP_MV7
  568.         add.w    d4,(a1)
  569.         clr.b    $b(a1)
  570. BP_MV7:        cmpi.b    #6,d3
  571.         bne.w    BP_MV8
  572.         move.b    d4,BP_D11
  573. BP_MV8:        cmpi.b    #7,d3
  574.         bne.w    BP_MV9
  575.         subq.b    #1,BP_D11
  576.         beq.w    BP_MV9
  577.         move.w    d4,BP_D4
  578. BP_MV9:        cmpi.b    #8,d3
  579.         bne.w    BP_MW0
  580.         move.b    d4,$c(a1)
  581. BP_MW0:        cmpi.b    #9,d3
  582.         bne.w    BP_MW1
  583.         move.b    d4,$d(a1)
  584. BP_MW1:        lea    $10(a3),a3
  585.         lea    $20(a1),a1
  586.         asl.w    #1,d7
  587.         dbf    d0,BP_MU2
  588.         addq.b    #3,BP_D5
  589.         cmpi.b    #$30,BP_D5
  590.         bne.w    BP_MW2
  591.         clr.b    BP_D5
  592.         addq.w    #1,BP_D4
  593.         move.l    BP_Data(pc),a0
  594.         move.w    $1e(a0),d1
  595.         cmp.w    BP_D4,d1
  596.         bne.w    BP_MW2
  597.         clr.w    BP_d4
  598.     move.l    a0,-(a7)
  599.     move.l    BP_SongEndBase(pc),a0
  600.     jsr    (a0)
  601.     move.l    (a7)+,a0
  602. BP_MW2:        rts    
  603.  
  604. BP_MW3:        bclr    #$07,(a2)
  605.         tst.l    (a5)
  606.         beq.w    BP_MW5
  607.         clr.w    d3
  608.         move.l    (a5),a4
  609.         moveq    #7,d7
  610. BP_MW4:        move.l    $4(a5,d3.w),(a4)+
  611.         addq.w    #4,d3
  612.         dbf    d7,BP_MW4
  613. BP_MW5:        move.w    (a2),$6(a1)
  614.  
  615.  
  616.         tst.w    (a2)
  617.         beq.s    .BP_PerRet
  618.             cmp.l    #$dff0a0,a1
  619.             bne.s    .BP_NoVoice1
  620.             move.w    (a2),BP_StructAdr+UPS_Voice1Per
  621.             bra.s    .BP_PerRet
  622. .BP_NoVoice1        cmp.l    #$dff0b0,a1
  623.             bne.s    .BP_NoVoice2
  624.             move.w    (a2),BP_StructAdr+UPS_Voice2Per
  625.             bra.s    .BP_PerRet
  626. .BP_NoVoice2:        cmp.l    #$dff0c0,a1
  627.             bne.s    .BP_NoVoice3
  628.             move.w    (a2),BP_StructAdr+UPS_Voice3Per
  629.             bra.s    .BP_PerRet
  630. .BP_NoVoice3:        cmp.l    #$dff0d0,a1
  631.             bne.s    .BP_PerRet
  632.             move.w    (a2),BP_StructAdr+UPS_Voice4Per
  633. .BP_PerRet
  634.  
  635.  
  636.  
  637.         clr.l    d7
  638.         move.b    3(a2),d7
  639.         move.l    d7,d6
  640.         lsl.l    #5,d7
  641.         move.l    BP_Data(pc),a3
  642.         cmpi.b    #-1,(a3,d7.w)
  643.         beq.w    BP_MX0
  644.         clr.l    (a5)
  645.         clr.b    $1a(a2)
  646.         clr.w    $1e(a2)
  647.         addi.l    #$18,d7
  648.         lsl.l    #2,d6
  649.         lea    BP_D17,a4
  650.         move.l    -4(a4,d6.l),d4
  651.         beq.w    BP_MW7
  652.         move.l    d4,(a1)
  653.         move.w    (a3,d7.l),4(a1)
  654. ;        move.b    2(a2),9(a1)
  655.     move.b    2(a2),d6
  656.     bsr    BP_SetVolume7
  657.  
  658.         cmpi.b    #-1,2(a2)
  659.         bne.w    BP_MW6
  660.     ;move.w    6(a3,d7.l),8(a1)        ;Vol    (Found)
  661.     bsr    BP_SetVolume6
  662.  
  663. BP_MW6:        move.w    4(a3,d7.l),8(a2)        ;Vol    (NO)
  664.         clr.l    d6
  665.         move.w    2(a3,d7.l),d6
  666.         add.l    d6,d4
  667.         move.l    d4,4(a2)
  668.         cmpi.w    #1,8(a2)
  669.         bne.w    BP_MW8
  670. BP_MW7:        move.l    #BP_D2,$4(a2)
  671.         bra.w    BP_MW9
  672.  
  673. BP_MW8:        move.w    8(a2),4(a1)
  674.         move.l    4(a2),(a1)
  675. BP_MW9:        addi.w    #-$8000,d1
  676.         move.w    d1,$dff096
  677.         rts    
  678.  
  679. BP_MX0:        move.b    #1,$1a(a2)
  680.         clr.w    $e(a2)
  681.         clr.w    $10(a2)
  682.         clr.w    $12(a2)
  683.         move.w    $16(a3,d7.w),$14(a2)
  684.         addq.w    #1,$14(a2)
  685.         move.w    $e(a3,d7.w),$16(a2)
  686.         addq.w    #1,$16(a2)
  687.         move.w    #1,$18(a2)
  688.         move.b    $11(a3,d7.w),$1d(a2)
  689.         move.b    $9(a3,d7.w),$1e(a2)
  690.         move.b    $4(a3,d7.w),$1f(a2)
  691.         move.b    $13(a3,d7.w),$1c(a2)
  692.         move.l    BP_D14,a4
  693.         clr.l    d3
  694.         move.b    1(a3,d7.w),d3
  695.         lsl.l    #6,d3
  696.         adda.l    d3,a4
  697.         move.l    a4,(a1)
  698.  
  699.             cmp.l    #$dff0a0,a1
  700.             bne.s    .BP_NoVoice1
  701.             move.l    a4,BP_StructAdr+UPS_Voice1Adr
  702.             bra.s    .BP_AdrRet
  703. .BP_NoVoice1        cmp.l    #$dff0b0,a1
  704.             bne.s    .BP_NoVoice2
  705.             move.l    a4,BP_StructAdr+UPS_Voice2Adr
  706.             bra.s    .BP_AdrRet
  707. .BP_NoVoice2:        cmp.l    #$dff0c0,a1
  708.             bne.s    .BP_NoVoice3
  709.             move.l    a4,BP_StructAdr+UPS_Voice3Adr
  710.             bra.s    .BP_AdrRet
  711. .BP_NoVoice3:        move.l    a4,BP_StructAdr+UPS_Voice4Adr
  712. .BP_AdrRet        move.l    a4,$4(a2)
  713.  
  714.  
  715. Zwischen1        move.w    2(a3,d7.w),$4(a1)
  716.  
  717.             cmp.l    #$dff0a0,a1
  718.             bne.s    .BP_NoVoice1
  719.             move.w    2(a3,d7.w),BP_StructAdr+UPS_Voice1Per
  720.             bra.s    .BP_PerRet
  721. .BP_NoVoice1        cmp.l    #$dff0b0,a1
  722.             bne.s    .BP_NoVoice2
  723.             move.w    2(a3,d7.w),BP_StructAdr+UPS_Voice2Per
  724.             bra.s    .BP_PerRet
  725. .BP_NoVoice2:        cmp.l    #$dff0c0,a1
  726.             bne.s    .BP_NoVoice3
  727.             move.w    2(a3,d7.w),BP_StructAdr+UPS_Voice3Per
  728.             bra.s    .BP_PerRet
  729. .BP_NoVoice3:        move.w    2(a3,d7.w),BP_StructAdr+UPS_Voice4Per
  730. .BP_PerRet
  731.  
  732.  
  733.         move.w    2(a3,d7.w),$8(a2)        ;Vol
  734.         tst.b    4(a3,d7.w)
  735.         beq.w    BP_MX2
  736.         move.l    BP_D14,a4
  737.         clr.l    d3
  738.         move.b    5(a3,d7.w),d3
  739.         lsl.l    #6,d3
  740.         adda.l    d3,a4
  741.         clr.w    d3
  742.         move.b    (a4),d3
  743.         addi.b    #-$80,d3
  744.         lsr.w    #2,d3
  745.         cmpi.b    #-1,2(a2)
  746.         bne.w    BP_MX1
  747.         move.b    $19(a3,d7.w),2(a2)
  748. BP_MX1:        clr.w    d4
  749.         move.b    2(a2),d4
  750.         mulu    d4,d3
  751.         lsr.w    #6,d3
  752.     ;    move.w    d3,8(a1)            ;Vol3
  753.     bsr    BP_SetVolume
  754.  
  755.         bra.w    BP_MX3
  756.  
  757. BP_MX2:        ;move.b    2(a2),9(a1)
  758.     bsr    BP_SetVolume7
  759.         cmpi.b    #-1,2(a2)
  760.         bne.w    BP_MX3
  761.  
  762. ;        move.b    $19(a3,d7.w),$9(a1)
  763.         movem.l    d0/a5,-(a7)
  764.         moveq    #0,d0
  765.         move.b    $19(a3,d7.w),d0
  766.         move.l    a1,a5
  767.         bsr    BP_SetVoices
  768.         movem.l    (a7)+,d0/a5
  769.  
  770. BP_MX3:        move.l    4(a2),a4
  771.         move.l    a4,(a5)
  772.         clr.w    d3
  773.         moveq    #7,d4
  774. BP_MX4:        move.l    (a4,d3.w),4(a5,d3.w)
  775.         addq.w    #4,d3
  776.         dbf    d4,BP_MX4
  777.         tst.b    $11(a3,d7.w)
  778.         beq.w    BP_MW9
  779.         tst.b    $13(a3,d7.w)
  780.         beq.w    BP_MW9
  781.         clr.l    d3
  782.         move.b    $13(a3,d7.w),d3
  783.         lsr.l    #3,d3
  784.         move.b    d3,$1c(a2)
  785.         subq.l    #1,d3
  786. BP_MX5:        neg.b    (a4)+
  787.         dbf    d3,BP_MX5
  788.         bra.w    BP_MW9
  789.  
  790. BP_MX6:        lea    BP_D16,a4
  791.         ext.w    d4
  792.         asl.w    #1,d4
  793.         move.w    -2(a4,d4.w),6(a1)
  794.  
  795.     tst.w    -2(a4,d4.w)
  796.     beq.s    .BP_PerRet
  797.             cmp.l    #$dff0a0,a1
  798.             bne.s    .BP_NoVoice1
  799.             move.w    -2(a4,d4.w),BP_StructAdr+UPS_Voice1Per
  800.             bra.s    .BP_PerRet
  801. .BP_NoVoice1        cmp.l    #$dff0b0,a1
  802.             bne.s    .BP_NoVoice2
  803.             move.w    -2(a4,d4.w),BP_StructAdr+UPS_Voice2Per
  804.             bra.s    .BP_PerRet
  805. .BP_NoVoice2:        cmp.l    #$dff0c0,a1
  806.             bne.s    .BP_NoVoice3
  807.             move.w    -2(a4,d4.w),BP_StructAdr+UPS_Voice3Per
  808.             bra.s    .BP_PerRet
  809. .BP_NoVoice3:        move.w    -2(a4,d4.w),BP_StructAdr+UPS_Voice4Per
  810. .BP_PerRet        rts
  811.  
  812.  
  813. BP_MX7:        moveq    #3,d0
  814.         lea    BP_D3,a2
  815.         lea    $dff0a0,a1
  816.         move.l    BP_Data(pc),a3
  817.         lea    BP_D15,a5
  818. BP_MX8:        tst.b    $1a(a2)
  819.         beq.w    BP_MX9
  820.         bsr.s    BP_MY0
  821. BP_MX9:        lea    $24(a5),a5
  822.         lea    $20(a2),a2
  823.         lea    $10(a1),a1
  824.         dbf    d0,BP_MX8
  825.         rts    
  826.  
  827. BP_MY0:        clr.w    d7
  828.         move.b    3(a2),d7
  829.         lsl.w    #5,d7
  830.         tst.b    $1f(a2)
  831.         beq.w    BP_MY1
  832.         subq.w    #1,$18(a2)
  833.         bne.w    BP_MY1
  834.         clr.l    d3
  835.         move.b    8(a3,d7.w),d3
  836.         move.w    d3,$18(a2)
  837.         move.l    BP_D14,a4
  838.         move.b    5(a3,d7.w),d3
  839.         lsl.l    #6,d3
  840.         adda.l    d3,a4
  841.         move.w    $12(a2),d3
  842.         clr.w    d4
  843.         move.b    0(a4,d3.w),d4
  844.         addi.b    #-$80,d4
  845.         lsr.w    #2,d4
  846.         clr.w    d3
  847.         move.b    2(a2),d3
  848.         mulu    d3,d4
  849.         lsr.w    #6,d4
  850.     ;    move.w    d4,8(a1)            ;Vol4
  851.     bsr    BP_SetVolume2
  852.  
  853.         addq.w    #1,$12(a2)
  854.         move.w    6(a3,d7.w),d4
  855.         cmp.w    $12(a2),d4
  856.         bne.w    BP_MY1
  857.         clr.w    $12(a2)
  858.         cmpi.b    #1,$1f(a2)
  859.         bne.w    BP_MY1
  860.         clr.b    $1f(a2)
  861. BP_MY1:        tst.b    $1e(a2)
  862.         beq.w    BP_MY3
  863.         subq.w    #1,$16(a2)
  864.         bne.w    BP_MY3
  865.         clr.l    d3
  866.         move.b    16(a3,d7.w),d3
  867.         move.w    d3,$16(a2)
  868.         move.l    BP_D14,a4
  869.         move.b    10(a3,d7.w),d3
  870.         lsl.l    #6,d3
  871.         adda.l    d3,a4
  872.         move.w    $10(a2),d3
  873.         clr.l    d4
  874.         move.b    (a4,d3.w),d4
  875.         ext.w    d4
  876.         ext.l    d4
  877.         clr.l    d5
  878.         move.b    $b(a3,d7.w),d5
  879.         tst.b    d5
  880.         beq.w    BP_MY2
  881.         divs    d5,d4
  882. BP_MY2:        move.w    (a2),d5
  883.         add.w    d4,d5
  884.         move.w    d5,$6(a1)
  885.  
  886.         tst.w    d5
  887.         beq.s    .BP_PerRet
  888.             cmp.l    #$dff0a0,a1
  889.             bne.s    .BP_NoVoice1
  890.             move.w    d5,BP_StructAdr+UPS_Voice1Per
  891.             bra.s    .BP_PerRet
  892. .BP_NoVoice1        cmp.l    #$dff0b0,a1
  893.             bne.s    .BP_NoVoice2
  894.             move.w    d5,BP_StructAdr+UPS_Voice2Per
  895.             bra.s    .BP_PerRet
  896. .BP_NoVoice2:        cmp.l    #$dff0c0,a1
  897.             bne.s    .BP_NoVoice3
  898.             move.w    d5,BP_StructAdr+UPS_Voice3Per
  899.             bra.s    .BP_PerRet
  900. .BP_NoVoice3:        cmp.l    #$dff0d0,a1
  901.             bne.s    .BP_PerRet
  902.             move.w    d5,BP_StructAdr+UPS_Voice4Per
  903. .BP_PerRet
  904.  
  905.         addq.w    #1,$10(a2)
  906.         move.w    $c(a3,d7.w),d3
  907.         cmp.w    $10(a2),d3
  908.         bne.w    BP_MY3
  909.         clr.w    $10(a2)
  910.         cmpi.b    #1,$1e(a2)
  911.         bne.w    BP_MY3
  912.         clr.b    $1e(a2)
  913. BP_MY3:        tst.b    $1d(a2)
  914.         beq.w    BP_MY8
  915.         subq.w    #1,$14(a2)
  916.         bne.w    BP_MY8
  917.         tst.l    (a5)
  918.         beq.w    BP_MY8
  919.         clr.l    d3
  920.         move.b    $18(a3,d7.w),d3
  921.         move.w    d3,$14(a2)
  922.         move.l    BP_D14,a4
  923.         move.b    $12(a3,d7.w),d3
  924.         lsl.l    #6,d3
  925.         adda.l    d3,a4
  926.         move.w    $e(a2),d3
  927.         clr.l    d4
  928.         move.b    (a4,d3.w),d4
  929.         move.l    (a5),a4
  930.         addi.b    #-$80,d4
  931.         lsr.l    #3,d4
  932.         clr.l    d3
  933.         move.b    $1c(a2),d3
  934.         move.b    d4,$1c(a2)
  935.         adda.l    d3,a4
  936.         move.l    a5,a6
  937.         adda.l    d3,a6
  938.         addq.l    #4,a6
  939.         cmp.b    d3,d4
  940.         beq.w    BP_MY7
  941.         bgt.w    BP_MY5
  942.         sub.l    d4,d3
  943.         subq.l    #1,d3
  944. BP_MY4:        move.b    -(a6),d4
  945.         move.b    d4,-(a4)
  946.         dbf    d3,BP_MY4
  947.         bra.w    BP_MY7
  948.  
  949. BP_MY5:        sub.l    d3,d4
  950.         subq.l    #1,d4
  951. BP_MY6:        move.b    (a6)+,d3
  952.         neg.b    d3
  953.         move.b    d3,(a4)+
  954.         dbf    d4,BP_MY6
  955. BP_MY7:        addq.w    #1,$e(a2)
  956.         move.w    $14(a3,d7.w),d3
  957.         cmp.w    $e(a2),d3
  958.         bne.w    BP_MY8
  959.         clr.w    $e(a2)
  960.         cmpi.b    #1,$1d(a2)
  961.         bne.w    BP_MY8
  962.         clr.b    $1d(a2)
  963. BP_MY8:        rts    
  964.  
  965.  
  966. BP_Data:    dc.l    0
  967.  
  968.     section    bp_daten,code_c
  969. BP_D1:        dcb.b    8,0
  970.         dc.b    2,$7f
  971.         dcb.b    8,0
  972.         dc.l    BP_Music
  973. BP_D2:        dcb.b    2,0
  974. BP_D3:        dcb.b    4,0
  975.         dc.l    BP_D2
  976.         dc.b    0,1
  977.         dcb.b    26,0
  978.         dc.l    BP_D2
  979.         dc.b    0,1
  980.         dcb.b    26,0
  981.         dc.l    BP_D2
  982.         dc.b    0,1
  983.         dcb.b    26,0
  984.         dc.l    BP_D2
  985.         dc.b    0,1
  986.         dcb.b    22,0
  987. BP_D4:        dcb.b    2,0
  988. BP_D5:        dcb.b    1,0
  989. BP_D6:        dcb.b    1,0
  990. BP_D7:        dcb.b    1,0
  991. BP_D8:        dc.b    1
  992. BP_D9:        dc.b    6
  993. BP_D10:        dc.b    1
  994. BP_D11:        dc.b    1
  995. BP_D12:        dcb.b    1,0
  996. BP_D13:        dcb.b    2,0
  997. BP_D14:        dcb.b    4,0
  998. BP_D15:        dcb.b    144,0
  999.         dc.b    $1a,$c0,$19,$40,$17,$c0,$16,$80,$15,$40,$14,$00
  1000.         dc.b    $12,$e0,$11,$e0,$10,$e0,$f,$e0,$0f,$00,$0e,$20
  1001.         dc.b    $d,$60,$c,$a0,$b,$e0,$b,$40,$0a,$a0,$0a,$00
  1002.         dc.b    $9,$70,$8,$f0,$8,$70,$7,$f0,$07,$80,$07,$10
  1003.         dc.b    $6,$b0,$6,$50,$5,$f0,$5,$a0,$05,$50,$05,$00
  1004.         dc.b    $4,$b8,$4,$78,$4,$38,$3,$f8,$03,$c0,$03,$88
  1005. BP_D16:        dc.b    $3,$58,$3,$28,$2,$f8,$2,$d0,$02,$a8,$02,$80
  1006.         dc.b    $2,$5c,$2,$3c,$2,$1c,$1,$fc,$01,$e0,$01,$c4
  1007.         dc.b    $1,$ac,$1,$94,$1,$7c,$1,$68,$01,$54,$01,$40
  1008.         dc.b    $1,$2e,$1,$1e,$1,$0e,$0,$fe,$00,$f0,$00,$e2
  1009.         dc.b    $0,$d6,$0,$ca,$0,$be,$0,$b4,$00,$aa,$00,$a0
  1010.         dc.b    $0,$97,$0,$8f,$0,$87,$0,$7f,$00,$78,$00,$71
  1011.         dc.b    $0,$6b,$0,$65,$0,$5f,$0,$5a,$00,$55,$00,$50
  1012.         dc.b    $0,$4c,$0,$48,$0,$44,$0,$40,$00,$3c,$00,$39
  1013. BP_D17:        ds.l    15
  1014.  
  1015. BP_DATAEND:    dc.b    $c8,$ca,$cd,$cf,$cf,$d6
  1016.  
  1017.