home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #3 / amigamamagazinepolishissue1998.iso / digibooster / db17_full / sources / digiplayercia / vbl.s
Text File  |  1997-12-12  |  62KB  |  3,922 lines

  1. ;----------------- DIGI Booster By Tap & Walt ----------------
  2. ;             player v 1.6 pure code
  3. ;             by Tap - Tomasz Piasta
  4. ;              © 14.06.1996
  5. ;
  6. ; This player is very easy to use. If you want to play only the VBL modules
  7. ; (with cia tempo 125) you can do this:
  8. ; - first jump to db_init
  9. ; - in your own loop jump to db_music
  10. ; - to switch off player jump to db_end
  11. ;
  12. ; But if you have CIA modules you must use CIA interrupt...
  13. ;
  14. ; The player plays modules from Digi Booster 1.0-1.6 with packed
  15. ; and unpacked pattern data. Eight channels modules take about 0.25 frame
  16. ; (on standard Amiga 1200). The player automticly recognize
  17. ; processor (old Motorola 68000/68010 or 68020 and higher) and uses
  18. ; suitable instructions. If you want to use this player in your
  19. ; productions please buy the original (DIGI Booster with player
  20. ; source code).
  21. ; The code of player isn't optimized yet (except the mix routine
  22. ; which is extremly fast!).
  23. ;
  24. ;------------------------- effects commands --------------------------
  25. ; * 0xx arpeggio
  26. ; * 1xx portamento up
  27. ; * 2xx portamento down
  28. ; * 3xx glissando
  29. ; * 4xx vibrato
  30. ; * 5xx glissando + slide volume
  31. ; * 6xx vibrato + slide volume
  32. ;   7xx volume vibrato
  33. ; * 8xx robot
  34. ; * 9xx sample offset - main
  35. ; * axx slide volume
  36. ; * bxx song repeat
  37. ; * cxx set volume
  38. ; * dxx pattern break
  39. ; * fxx set speed
  40. ;
  41. ;----------------------------- exx commands ---------------------------
  42. ; * e00 filter off
  43. ; * e01 filter on
  44. ; * e1x fine slide up
  45. ; * e2x fine slide down
  46. ; * e30 backwd play sample
  47. ; * e31 backwd play sample+loop
  48. ; * e40 stop playing sample
  49. ; * e50 channel    off
  50. ; * e51 channel    on
  51. ; * e6x loops
  52. ; * e8x sample offset 2
  53. ; * e9x retrace
  54. ; * eax fine volume up
  55. ; * ebx fine volume down
  56. ; * ecx cut sample
  57. ;   edx sample delay
  58. ; * eex pause
  59.  
  60.     Section    code,code_p
  61.  
  62. ChanArea    equ    108
  63. Version:    equ    24
  64. Channels:    equ    25
  65. PackEnable:    equ    26
  66. PatNum:        equ    46
  67. OrdNum:        equ    47
  68. Orders:        equ    48
  69. SamLens:    equ    176
  70. SamReps:    equ    300
  71. SamReplens:    equ    424
  72. SamVols:    equ    548
  73. SamFins:    equ    579
  74. SongName:    equ    610
  75. SamNames:    equ    642
  76. SongData:    equ    1572
  77.  
  78.  
  79. SamBuffAdr:    equ    0    ; 4
  80. SamRep1:    equ    4    ; 4
  81. SamRep2:    equ    8    ; 4
  82. ChangeAdr:    equ    12    ; 1
  83. MixDon:        equ    13    ; 1
  84. VolA:        equ    14    ; 1
  85. VolB:        equ    15    ; 1
  86. SlideVolOldA    equ    16    ; 1
  87. SlideVolOldB    equ    17    ; 1
  88. ReplaceEnable    equ    18    ; 1
  89. OFFenable    equ    19    ; 1
  90. SamOffsetA    equ    20    ; 1
  91. SamOffsetB    equ    21    ; 1
  92. RetraceCntA    equ    22    ; 1
  93. RetraceCntB    equ    23    ; 1
  94. OldSamNumA:    equ    24    ; 1
  95. OldSamNumB:    equ    25    ; 1
  96. RobotOldVal:    equ    26    ; 1
  97. RobotEnable:    equ    27    ; 1
  98. MainPeriod:    equ    28    ; 2
  99. MainVol:    equ    30    ; 1
  100. MBRpointer    equ    31    ; 1
  101. PlayPointer    equ    32    ; 1
  102. Oldd0        equ    34    ; 2
  103. Oldd1        equ    36    ; 2
  104. Oldd2        equ    38    ; 2
  105. Oldd3        equ    40    ; 2
  106. Oldd4        equ    42    ; 2
  107. Oldd5        equ    44    ; 2
  108. Oldd6        equ    46    ; 2
  109. loopsdataschanA    equ    48    ; 3
  110. loopsdataschanB    equ    51    ; 3
  111. BACKWDenable:    equ    56    ; 1
  112. EqNewSamA    equ    57    ; 1
  113. EqNewSamB    equ    58    ; 1
  114. MainDTALEN:    equ    60    ; 2
  115. PortUpOldValA    equ    62    ; 1
  116. PortUpOldValB    equ    63    ; 1
  117. PortDownOldValA    equ    64    ; 1
  118. PortDownOldValB    equ    65    ; 1
  119. VibratoDatasA    equ    66    ; 4
  120. VibratoDatasB    equ    70    ; 4
  121. GlissandoDatasA    equ    74    ; 6
  122. GlissandoDatasB    equ    80    ; 6
  123. BuffBegADR    equ    86    ; 4
  124. BuffEndADR    equ    90    ; 4
  125. BuffMixADR    equ    94    ; 4
  126. OnOffChanA    equ    98    ; 1
  127. OnOffChanB    equ    99    ; 1
  128. OrgPeriodA    equ    100    ; 2
  129. OrgPeriodB    equ    102    ; 2
  130. OLDVolA:    equ    104    ; 1
  131. OLDVolB:    equ    105    ; 1
  132. NoteCount    equ    106    ; 2
  133.  
  134. ; ----------------- To Play VBL modules -------------------
  135. VBLproc:
  136.     bsr    db_Init
  137.     move.w    #$4000,$dff09a
  138. Loop:    bsr    vbl
  139.     bsr    db_Music
  140.     move.w    #$f,$dff180
  141.     btst    #6,$bfe001
  142.     bne.s    Loop
  143.     bsr    db_end
  144.     move.w    #$c000,$dff09a
  145.     rts
  146. vbl:    cmp.b    #$ff,$dff006
  147.     bne.s    vbl
  148.     rts
  149. ; ----------------- To Play CIA modules -------------------
  150. CIAproc:
  151.     move.l    4,a6
  152.     lea    NameDOS,a1
  153.     moveq    #0,d0
  154.     jsr    -408(a6)
  155.     move.l    d0,DosBase
  156.     bsr    db_Init
  157.     bsr    PlugCIA
  158. LoopCIA:move.l    DosBase,a6
  159.     moveq    #10,d1
  160.     jsr    -198(a6)
  161.     btst    #6,$bfe001
  162.     bne.s    LoopCIA
  163.     btst    #2,$dff016
  164.     bne.s    LoopCIA
  165.     bsr    UnPlugCIA
  166.     bsr    db_end
  167.     rts
  168.  
  169. PlugCIA:
  170.     move.l    4.w,a6
  171.     lea    GraphName,a1
  172.     moveq    #0,d0
  173.     jsr    -408(a6)
  174.     move.l    d0,GraphBase
  175.  
  176.     lea    $BFD000,a5
  177.     moveq    #2,d6
  178. IrqCiaLoop:
  179.     moveq    #0,d0
  180.     lea    CiaName(pc),a1
  181.     movea.l    4,a6
  182.     jsr    -498(a6)
  183.     move.l    d0,CiaBase
  184.     beq    NoCia
  185.  
  186.     move.l    GraphBase(pc),d0
  187.     move.l    d0,a1
  188.  
  189.     tst.l    d0
  190.     beq    UnplugCIA
  191.  
  192.     move.l    #125*14209,d7
  193.     divu.w    #125,d7
  194.     jsr    -414(a6)
  195.     move.l    CiaBase(pc),a6
  196.     cmp.w    #2,d6
  197.     beq.s    CiaB
  198.  
  199.     lea    IrqData(pc),a1
  200.     moveq    #1,d0
  201.     jsr    -6(a6)
  202.  
  203.     move.l    #1,WhichCia
  204.     tst.l    d0
  205.     bne.s    ChangeCia
  206.     move.l    a5,CiaAdress
  207.  
  208.     move.b    d7,$600(a5)
  209.     lsr.w    #8,d7
  210.     move.b    d7,$700(a5)
  211.     move.b    #%00010001,$f00(a5)
  212.     rts
  213.  
  214. CiaB:
  215.     lea    IrqData(pc),a1
  216.     moveq    #0,d0
  217.     jsr    -6(a6)
  218.     clr.l    WhichCia
  219.     tst.l    d0
  220.     bne.s    ChangeCia
  221.     move.l    a5,CiaAdress
  222.  
  223.     move.b    d7,$400(a5)
  224.     lsr.w    #8,d7
  225.     move.b    d7,$500(a5)
  226.     move.b    #%00010001,$e00(a5)
  227.     rts
  228.  
  229. ChangeCia:
  230.     move.b    #"a",CiaName+3
  231.     lea    $BFE001,a5
  232.     subq.w    #1,d6
  233.     bne.w    IrqCiaLoop
  234. NoCia:
  235.     clr.l    CiaBase
  236.     rts
  237.  
  238. UnplugCIA:
  239.     move.l    4.w,a6
  240.     move.l    GraphBase,a1
  241.     jsr    -414(a6)
  242.     move.l    CiaBase(pc),d0
  243.     beq.l    NoCia
  244.     move.l    d0,a6
  245.     move.l    CiaAdress(pc),a5
  246.     tst.l    WhichCia
  247.     beq.s    CiabOff
  248.     bclr    #0,$F00(a5)
  249.     moveq    #1,d0
  250.     bra.s    OffEvery
  251. CiabOff:
  252.     bclr    #0,$E00(a5)
  253.     moveq    #0,d0
  254. OffEvery:
  255.     lea    IrqData(pc),a1
  256.     moveq    #0,d0
  257.     jsr    -12(a6)
  258.     rts
  259.  
  260. DosBase:    dc.l    0
  261. GraphBase:    dc.l    0
  262. CiaBase:    dc.l    0
  263. CiaAdress:    dc.l    0
  264. WhichCia:    dc.l    0
  265. NameDOS:    dc.b    "dos.library",0
  266. GraphName:    dc.b    'graphics.library',0
  267. CiaName:    dc.b    "ciab.resource",0
  268.         even
  269. IrqData:
  270.     dc.l    0,0
  271.     dc.b    2,1
  272.     dc.l    0
  273.     dc.l    0
  274.     dc.l    IrqProc
  275.  
  276. IrqProc:
  277.     movem.l    d0-a6,-(sp)
  278.     tst.w    CiaChanged
  279.     beq.s    CIA_DONE
  280.     clr.w    CiaChanged
  281.     move.l    CiaAdress(pc),a5
  282.     move.l    #14209*125,d7
  283.     divu    CiaTempo,d7
  284.     and.l    #$ffff,d7
  285.     tst.l    WhichCIA
  286.     bne.s    CIA_B
  287.     move.b    d7,$400(a5)
  288.     lsr.w    #8,d7
  289.     move.b    d7,$500(a5)
  290.     bset    #0,$E00(a5)
  291.     bra.s    CIA_DONE
  292. CIA_B
  293.     move.b    d7,$600(a5)
  294.     lsr.w    #8,d7
  295.     move.b    d7,$700(a5)
  296.     bset    #0,$F00(a5)
  297. CIA_DONE
  298.     bsr    db_music
  299.     movem.l    (sp)+,d0-a6
  300.     rts
  301. ; --------------------------------------------------------------------
  302.  
  303. db_init:
  304.     move.l    #$10001,MEMTYPE
  305.     move.w    #14-1,WDMA
  306.     move.w    #125,CiaTempo
  307.     clr.b    Fast
  308.     move.l    4.w,a6
  309.     move.l    #4,d1
  310.     jsr    -216(a6)
  311.     tst.l    d0
  312.     beq.w    NoFast
  313.     move.b    #1,Fast
  314.     move.w    #8-1,WDMA
  315. NoFast:
  316.     move.l    4.w,a6    
  317.     move.w    296(a6),d0    
  318.  
  319.     btst    #0,d0
  320.     beq.s    MC68010
  321.     move.b    #1,OldCPU
  322. MC68010:
  323.     btst    #1,d0
  324.     beq.s    MC68020
  325.     clr.b    OldCPU
  326. MC68020:
  327.     btst    #2,d0
  328.     beq.s    MC68030
  329.     clr.b    OldCPU
  330. MC68030:
  331.     btst    #3,d0
  332.     beq.s    MC68040
  333.     clr.b    OldCPU
  334. MC68040:
  335.     tst.b    OldCPU
  336.     beq.s    NewCPU
  337.     clr.b    Fast
  338.     move.w    #14-1,WDMA
  339.     move.l    #$10002,MEMTYPE
  340. NewCPU
  341.     bsr    AllocMixBuffers
  342.     tst.b    d7
  343.     bne.w    Exit        ; If there's no mem just exit this shit
  344.  
  345.     lea    Channel1,a0
  346.     move.l    #sample_buff1_1,(a0)
  347.     move.l    #sample_buff1_1,BuffBegAdr(a0)
  348.     move.l    #sample_buff1_1+BuffSize,BuffEndAdr(a0)
  349.     move.l    #sample_buff1_2,ChanArea(a0)
  350.     move.l    #sample_buff1_2,ChanArea+BuffBegAdr(a0)
  351.     move.l    #sample_buff1_2+BuffSize,ChanArea+BuffEndAdr(a0)
  352.     move.l    #sample_buff1_3,ChanArea*2(a0)
  353.     move.l    #sample_buff1_3,[ChanArea*2]+BuffBegAdr(a0)
  354.     move.l    #sample_buff1_3+BuffSize,[ChanArea*2]+BuffEndAdr(a0)
  355.     move.l    #sample_buff1_4,ChanArea*3(a0)
  356.     move.l    #sample_buff1_4,[ChanArea*3]+BuffBegAdr(a0)
  357.     move.l    #sample_buff1_4+BuffSize,[ChanArea*3]+BuffEndAdr(a0)
  358.  
  359.     clr.b    SongPos
  360.     clr.b    PattPos
  361.     clr.b    count
  362.     move.b    #6,temp
  363.  
  364.     bset    #1,$bfe001
  365.     bsr    db_InitVoices
  366.  
  367.     move.b    temp(pc),count
  368.     move.l    ModDIGI,a5
  369.  
  370.     lea    1572(a5),a1
  371.     lea    PattAdresses,a2
  372.     move.l    a1,(a2)+
  373.     moveq    #0,d7
  374.     move.b    PatNum(a5),d7
  375.     move.l    #2048,d0
  376. db_MakePatAdr
  377.     tst.b    PackEnable(a5)
  378.     beq.s    dp_SetPatAdr
  379.     move.w    (a1),d0
  380.     addq    #2,d0
  381. dp_SetPatAdr
  382.     add.l    d0,a1
  383.     move.l    a1,(a2)+
  384.     dbf    d7,db_MakePatAdr
  385.  
  386.     lea    SamLens(a5),a0
  387.     move.l    a1,d6
  388.     lea    sample_starts,a2
  389.     moveq    #30,d7
  390. db_MakeSamAdr
  391.     move.l    d6,(a2)+
  392.     add.l    (a0)+,d6
  393.     dbf    d7,db_MakeSamAdr
  394.  
  395.     lea    SamLens(a5),a0
  396.     lea    sample_lenghts,a1
  397.     moveq    #31-1,d7
  398. db_cploop1:
  399.     move.l    (a0)+,(a1)+
  400.     dbf    d7,db_cploop1
  401.     bsr    make_voltab
  402.     cmp.b    #$10,Version(a5)
  403.     beq.s    OldDIGIMOD
  404.     cmp.b    #$11,Version(a5)
  405.     beq.s    OldDIGIMOD
  406.     cmp.b    #$12,Version(a5)
  407.     beq.s    OldDIGIMOD
  408.     cmp.b    #$13,Version(a5)
  409.     beq.s    OldDIGIMOD
  410. EXIT    rts
  411.  
  412. OldDIGIMOD
  413.     lea    SamFins(a5),a6
  414.     moveq    #31-1,d7
  415. CLRFINS    clr.b    (a6)+
  416.     dbf    d7,CLRFINS
  417.     rts
  418.  
  419. db_InitVoices:
  420.     move.l    #sample_buff1_1,$dff0a0
  421.     move.w    #166,$dff0a4
  422.     move.w    #214,$dff0a6
  423.     clr.w    $dff0a8
  424.     move.l    #sample_buff1_2,$dff0b0
  425.     move.w    #166,$dff0b4
  426.     move.w    #214,$dff0b6
  427.     clr.w    $dff0b8
  428.     move.l    #sample_buff1_3,$dff0c0
  429.     move.w    #166,$dff0c4
  430.     move.w    #214,$dff0c6
  431.     clr.w    $dff0c8
  432.     move.l    #sample_buff1_4,$dff0d0
  433.     move.w    #166,$dff0d4
  434.     move.w    #214,$dff0d6
  435.     clr.w    $dff0d8
  436.     rts
  437.  
  438. AllocMixBuffers:
  439.     move.l    4.w,a6
  440.     move.l    #2500*3,d0
  441.     add.l    #8+8,d0
  442.     move.l    MEMTYPE(pc),d1
  443.     jsr    -198(a6)
  444.     tst.l    d0
  445.     beq.s    AllocMixBuffError
  446.     addq.l    #8,d0
  447.     move.l    d0,sample_buff1_MIX
  448.  
  449.     move.l    4.w,a6
  450.     move.l    #2500*3,d0
  451.     add.l    #8+8,d0
  452.     move.l    MEMTYPE(pc),d1
  453.     jsr    -198(a6)
  454.     tst.l    d0
  455.     beq.s    AllocMixBuffError
  456.     addq.l    #8,d0
  457.     move.l    d0,sample_buff2_MIX
  458.  
  459.     move.l    4.w,a6
  460.     move.l    #2500*3,d0
  461.     add.l    #8+8,d0
  462.     move.l    MEMTYPE(pc),d1
  463.     jsr    -198(a6)
  464.     tst.l    d0
  465.     beq.s    AllocMixBuffError
  466.     addq.l    #8,d0
  467.     move.l    d0,sample_buff3_MIX
  468.  
  469.     move.l    4.w,a6
  470.     move.l    #2500*3,d0
  471.     add.l    #8+8,d0
  472.     move.l    MEMTYPE(pc),d1
  473.     jsr    -198(a6)
  474.     tst.l    d0
  475.     beq.s    AllocMixBuffError
  476.     addq.l    #8,d0
  477.     move.l    d0,sample_buff4_MIX
  478.     moveq    #0,d7
  479.     rts
  480. AllocMixBuffError
  481.     moveq    #-1,d7
  482.     rts
  483.  
  484. FreeMixBuffers:
  485.     move.l    4.w,a6
  486.     move.l    #2500*3,d0
  487.     move.l    sample_buff1_MIX(pc),a1
  488.     beq.s    NoFree1_1b
  489.     subq.l    #8,a1
  490.     add.l    #8+8,d0
  491.     jsr    -210(a6)
  492. NoFree1_1b
  493.     move.l    #2500*3,d0
  494.     move.l    sample_buff2_MIX(pc),a1
  495.     beq.s    NoFree1_2b
  496.     subq.l    #8,a1
  497.     add.l    #8+8,d0
  498.     jsr    -210(a6)
  499. NoFree1_2b
  500.     move.l    #2500*3,d0
  501.     move.l    sample_buff3_MIX(pc),a1
  502.     beq.s    NoFree1_3b
  503.     subq.l    #8,a1
  504.     add.l    #8+8,d0
  505.     jsr    -210(a6)
  506. NoFree1_3b
  507.     move.l    #2500*3,d0
  508.     move.l    sample_buff4_MIX(pc),a1
  509.     beq.s    NoFree1_4b
  510.     subq.l    #8,a1
  511.     add.l    #8+8,d0
  512.     jsr    -210(a6)
  513. NoFree1_4b
  514.     rts
  515.  
  516. sample_buff1_MIX:    dc.l    0
  517. sample_buff2_MIX:    dc.l    0
  518. sample_buff3_MIX:    dc.l    0
  519. sample_buff4_MIX:    dc.l    0
  520.  
  521. MEMTYPE:    dc.l    0
  522. WDMA:        dc.w    0
  523. Fast:        dc.b    0
  524. OldCPU:        dc.b    0
  525. SongPos:    dc.b    0
  526. PattPos:    dc.b    0
  527. temp:        dc.b    0
  528. count:        dc.b    0
  529. JMPEN:        dc.b    0
  530. OldPattPos:    dc.b    0
  531. PauseEn:    dc.b    0
  532. hisam:        dc.b    0
  533. PauseVBL:    dc.w    0
  534. OldDepAdr:    dc.l    0
  535. modDIGI:    dc.l    module
  536. channelenable:    dc.w    0
  537. MixPeriodA:    dc.w    0
  538. MixPeriodB:    dc.w    0
  539. leng:        dc.w    0
  540. what:        dc.w    0
  541. CiaTempo:    dc.w    0
  542. CiaChanged:    dc.w    0
  543.  
  544. ; ------------------- Paremeters --------------
  545. MainVolValue:    dc.w    64    ; 0-64
  546. ConfVolBoost    dc.w    75    ; 0-100%
  547. ConfMix:    dc.b    0    ; 0 - mix only joined chennels eg. mix when
  548.                 ; 1a and 1b channels are used...
  549.                 ; 1 - mix all channels
  550. BuffSize    equ    40960    ; sample mix buffer size
  551.         even
  552.  
  553. db_music:
  554.     move.l    ModDIGI,a5
  555.     lea    sample_starts,a0    ; sample starts, 124(a0) lenghts
  556.     lea    SamReps(a5),a3        ; sample repeats, 124(a3) replens
  557.     lea    SamVols(a5),a4        ; sample volumes
  558.  
  559.     move.b    count(pc),d7
  560.     cmp.b    temp(pc),d7
  561.     blt    DepackDone
  562.  
  563.     tst.b    temp
  564.     beq.s    NoNewPos
  565.     cmp.b    #64,pattpos
  566.     bne.s    NoNewPos
  567.     clr.b    PattPos
  568.     addq.b    #1,SongPos
  569. NoNewPos:
  570.     moveq    #0,d6
  571.     moveq    #0,d7
  572.     move.b    OrdNum(a5),d7
  573.     move.b    SongPos(pc),d6
  574.     cmp.w    d6,d7
  575.     bge.s    NoRepeatSong
  576.     clr.b    SongPos
  577.     clr.b    PattPos
  578.     move.l    PattAdresses,a1
  579. NoRepeatSong:
  580.  
  581.     moveq    #0,d7
  582.     move.b    SongPos(pc),d7
  583.     move.b    Orders(a5,d7.w),d7
  584.     lsl.w    #2,d7
  585.     lea    PattAdresses,a1
  586.     move.l    (a1,d7.w),a1
  587.  
  588.     tst.b    PackEnable(a5)
  589.     bne.s    DepackPattern
  590.  
  591.     moveq    #0,d7
  592.     move.b    PattPos(pc),d7
  593.     lsl.w    #2,d7
  594.     add.w    d7,a1
  595.  
  596.     lea    UnPackedData,a6
  597.     moveq    #3,d7
  598. CopyDataLoop
  599.     move.l    0(a1),(a6)+
  600.     move.l    1024(a1),(a6)+
  601.     lea    256(a1),a1
  602.     dbf    d7,CopyDataLoop
  603.     bra    DepackDone
  604. DepackPattern:
  605.  
  606.     addq.w    #2,a1
  607.     lea    (a1),a6
  608.     lea    64(a1),a5
  609.     moveq    #0,d7
  610.     move.b    PattPos(pc),d7
  611.     add.w    d7,a1
  612.     move.b    OldPattPos(pc),d6
  613.     addq.b    #1,d6
  614.     cmp.b    d6,d7
  615.     beq.s    NoCalcAdr
  616.  
  617.     tst.w    d7
  618.     beq.s    DepackData
  619.     subq    #1,d7
  620.     moveq    #0,d1
  621. DepackCalcAdr:
  622.     move.b    (a6)+,d0
  623.     btst    #7,d0
  624.     beq.s    DepackNoAdd7
  625.     addq    #4,d1
  626. DepackNoAdd7
  627.     btst    #6,d0
  628.     beq.s    DepackNoAdd6
  629.     addq    #4,d1
  630. DepackNoAdd6
  631.     btst    #5,d0
  632.     beq.s    DepackNoAdd5
  633.     addq    #4,d1
  634. DepackNoAdd5
  635.     btst    #4,d0
  636.     beq.s    DepackNoAdd4
  637.     addq    #4,d1
  638. DepackNoAdd4
  639.     btst    #3,d0
  640.     beq.s    DepackNoAdd3
  641.     addq    #4,d1
  642. DepackNoAdd3
  643.     btst    #2,d0
  644.     beq.s    DepackNoAdd2
  645.     addq    #4,d1
  646. DepackNoAdd2
  647.     btst    #1,d0
  648.     beq.s    DepackNoAdd1
  649.     addq    #4,d1
  650. DepackNoAdd1
  651.     btst    #0,d0
  652.     beq.s    DepackNoAdd0
  653.     addq    #4,d1
  654. DepackNoAdd0
  655.     dbf    d7,DepackCalcAdr
  656.     add.l    d1,a5
  657.     bra.s    DepackData
  658. NoCalcAdr
  659.     move.l    OldDepAdr(pc),a5
  660. DepackData:
  661.     move.b    PattPos(pc),OldPattPos
  662.     lea    UnPackedData,a6
  663.     moveq    #7,d7
  664. DepackDataLoop
  665.     btst    d7,(a1)
  666.     beq.s    DepackPutZero
  667.     move.l    (a5)+,(a6)+
  668.     dbf    d7,DepackDataLoop
  669.     move.l    a5,OldDepAdr
  670.     bra.s    DepackDone
  671. DepackPutZero
  672.     clr.l    (a6)+
  673.     dbf    d7,DepackDataLoop
  674.     move.l    a5,OldDepAdr
  675. DepackDone
  676.  
  677.     lea    UnPackedData,a1
  678.     moveq    #0,d6
  679.     moveq    #0,d5
  680.     lea    Channel1,a6
  681.     lea    $dff0a0,a5
  682.     bsr    playvoice
  683.     moveq    #1,d5
  684.     lea    Channel2,a6
  685.     lea    $dff0b0,a5
  686.     bsr    playvoice
  687.     moveq    #2,d5
  688.     lea    Channel3,a6
  689.     lea    $dff0c0,a5
  690.     bsr    playvoice
  691.     moveq    #3,d5
  692.     lea    Channel4,a6
  693.     lea    $dff0d0,a5
  694.     bsr    playvoice
  695.  
  696.     tst.w    d6
  697.     beq.s    NoSetDma
  698.  
  699.     bsr    Wait_dma
  700.  
  701.     or.w    #$8000,d6
  702.     move.w    d6,$dff096
  703.  
  704. NoSetDma:
  705.     move.l    ModDIGI,a5
  706.     lea    channel1,a6
  707.     bsr    MIXCHAN
  708.  
  709.     tst.w    PauseVBL
  710.     beq.s    NoPause
  711.     move.b    #1,PauseEn
  712.     subq.w    #1,PauseVBL
  713. NoPause:
  714.  
  715.     move.b    count(pc),d7
  716.     cmp.b    temp(pc),d7
  717.     blt.s    No_NEW
  718.     clr.b    count
  719.  
  720.     tst.w    PauseVBL
  721.     bne.s    DoPAUSE
  722.     addq.b    #1,pattpos
  723.     clr.b    PauseEn
  724. DoPAUSE
  725. No_NEW
  726.     addq.b    #1,count
  727.     rts
  728.  
  729. playvoice:
  730.     clr.b    EqNewSamA(a6)
  731.     clr.b    EqNewSamB(a6)
  732.  
  733.     tst.w    MainPeriod(a6)
  734.     beq.w    PlayOk
  735.  
  736.     tst.b    OffEnable(a6)
  737.     beq.s    NoOFFchan
  738.     clr.b    OffEnable(a6)
  739.  
  740.     tst.w    Oldd0(a6)
  741.     beq.s    NoData1
  742.     tst.w    Oldd4(a6)
  743.     bne.s    OFFchan
  744. NoData1
  745.     tst.b    PlayPointer(a6)
  746.     beq.s    OFFchan
  747.     move.w    Oldd2(a6),d1
  748.     lsr.w    #8,d1
  749.     cmp.b    #3,d1
  750.     beq.s    NoOFFchan
  751.     cmp.b    #5,d1
  752.     beq.s    NoOFFchan
  753.     move.w    Oldd6(a6),d1
  754.     lsr.w    #8,d1
  755.     cmp.b    #3,d1
  756.     beq.s    NoOFFchan
  757.     cmp.b    #5,d1
  758.     beq.s    NoOFFchan
  759. OFFchan
  760.     moveq    #0,d0
  761.     bset    d5,d0
  762.     move.w    d0,$dff096
  763.     bset    d5,d6
  764. NoOFFchan
  765.     cmp.w    #-1,MainPeriod(a6)
  766.     beq.w    StopChan
  767.  
  768.     cmp.b    #1,MBRpointer(a6)
  769.     beq.s    NoPlayMixBuff
  770.     move.l    BuffBegAdr(a6),(a5)
  771.     move.w    #BuffSize,d7
  772.     lsr.w    #1,d7
  773.     move.w    d7,4(a5)
  774.     move.w    MainPeriod(a6),6(a5)
  775.     moveq    #0,d7
  776.     move.b    MainVol(a6),d7
  777.     move.w    d7,8(a5)
  778.     cmp.b    #2,MBRpointer(a6)
  779.     beq.s    PlayOK
  780.     move.b    #1,PlayPointer(a6)
  781.     bra.s    PlayOK
  782. NoPlayMixBuff
  783.     move.l    BuffMixADR(a6),(a5)
  784.     move.w    OldD3(a6),d3
  785.     lsr.w    #1,d3
  786.     move.w    d3,4(a5)
  787.     move.w    MainPeriod(a6),6(a5)
  788.     moveq    #0,d7
  789.     move.b    MainVol(a6),d7
  790.     move.w    d7,8(a5)
  791.     bra.s    PlayOK
  792. StopChan
  793.     moveq    #0,d0
  794.     bset    d5,d0
  795.     bclr    d5,d6
  796.     move.w    d0,$dff096
  797.     move.b    #1,PlayPointer(a6)
  798.     clr.w    MainPeriod(a6)
  799. PlayOK    rts
  800.  
  801.  
  802. WAIT_DMA:
  803.     move.w    WDMA,d0
  804. wait_loop1:
  805.     move.b    $dff006,d1
  806. wait_loop2:
  807.     cmp.b    $dff006,d1
  808.     beq.s    wait_loop2
  809.     dbf    d0,wait_loop1
  810.     rts
  811.  
  812. MIXCHAN:
  813. *-------------------- channel 1a,1b mix ---------------------------
  814.     lea    sample_pos1,a2    ; sample positions
  815.     move.w    Oldd0(a6),d0
  816.     move.w    Oldd1(a6),d1
  817.     move.w    Oldd2(a6),d2
  818.     move.w    Oldd3(a6),d3
  819.     move.w    Oldd4(a6),d4
  820.     move.w    Oldd5(a6),d5
  821.     move.w    Oldd6(a6),d6
  822.  
  823.     tst.w    what
  824.     bne.s    ok1
  825.     move.l    sample_buff1_MIX,BuffMixADR(a6)
  826. ok1:
  827.     cmp.w    #1,what
  828.     bne.s    ok2
  829.     move.l    sample_buff1_MIX,BuffMixADR(a6)
  830.     add.l    #2500,BuffMixADR(a6)
  831. ok2:
  832.     cmp.w    #2,what
  833.     bne.s    ok3
  834.     move.l    sample_buff1_MIX,BuffMixADR(a6)
  835.     add.l    #5000,BuffMixADR(a6)
  836. ok3:
  837.     bsr    mainPROC
  838.     move.w    d0,Oldd0(a6)
  839.     move.w    d1,Oldd1(a6)
  840.     move.w    d2,Oldd2(a6)
  841.     move.w    d3,Oldd3(a6)
  842.     move.w    d4,Oldd4(a6)
  843.     move.w    d5,Oldd5(a6)
  844.     move.w    d6,Oldd6(a6)
  845.  
  846. *-------------------- channel 2a,2b mix ---------------------------
  847.     lea    ChanArea(a6),a6
  848.     lea    sample_pos2,a2    ; sample positions
  849.     move.w    Oldd0(a6),d0
  850.     move.w    Oldd1(a6),d1
  851.     move.w    Oldd2(a6),d2
  852.     move.w    Oldd3(a6),d3
  853.     move.w    Oldd4(a6),d4
  854.     move.w    Oldd5(a6),d5
  855.     move.w    Oldd6(a6),d6
  856.     lea    8(a1),a1
  857.  
  858.     tst.w    what
  859.     bne.s    ok1_2
  860.     move.l    sample_buff2_MIX,BuffMixADR(a6)
  861. ok1_2:
  862.     cmp.w    #1,what
  863.     bne.s    ok2_2
  864.     move.l    sample_buff2_MIX,BuffMixADR(a6)
  865.     add.l    #2500,BuffMixADR(a6)
  866. ok2_2:
  867.     cmp.w    #2,what
  868.     bne.s    ok3_2
  869.     move.l    sample_buff2_MIX,BuffMixADR(a6)
  870.     add.l    #5000,BuffMixADR(a6)
  871. ok3_2:
  872.     bsr    mainPROC
  873.     move.w    d0,Oldd0(a6)
  874.     move.w    d1,Oldd1(a6)
  875.     move.w    d2,Oldd2(a6)
  876.     move.w    d3,Oldd3(a6)
  877.     move.w    d4,Oldd4(a6)
  878.     move.w    d5,Oldd5(a6)
  879.     move.w    d6,Oldd6(a6)
  880. *-------------------- channel 3a,3b mix ---------------------------
  881.     lea    ChanArea(a6),a6
  882.     lea    sample_pos3,a2    ; sample positions
  883.     move.w    Oldd0(a6),d0
  884.     move.w    Oldd1(a6),d1
  885.     move.w    Oldd2(a6),d2
  886.     move.w    Oldd3(a6),d3
  887.     move.w    Oldd4(a6),d4
  888.     move.w    Oldd5(a6),d5
  889.     move.w    Oldd6(a6),d6
  890.     lea    8(a1),a1
  891.  
  892.     tst.w    what
  893.     bne.s    ok1_3
  894.     move.l    sample_buff3_MIX,BuffMixADR(a6)
  895. ok1_3:
  896.     cmp.w    #1,what
  897.     bne.s    ok2_3
  898.     move.l    sample_buff3_MIX,BuffMixADR(a6)
  899.     add.l    #2500,BuffMixADR(a6)
  900. ok2_3:
  901.     cmp.w    #2,what
  902.     bne.s    ok3_3
  903.     move.l    sample_buff3_MIX,BuffMixADR(a6)
  904.     add.l    #5000,BuffMixADR(a6)
  905. ok3_3:
  906.     bsr    mainPROC
  907.     move.w    d0,Oldd0(a6)
  908.     move.w    d1,Oldd1(a6)
  909.     move.w    d2,Oldd2(a6)
  910.     move.w    d3,Oldd3(a6)
  911.     move.w    d4,Oldd4(a6)
  912.     move.w    d5,Oldd5(a6)
  913.     move.w    d6,Oldd6(a6)
  914. *-------------------- channel 4a,4b mix ---------------------------
  915.     lea    ChanArea(a6),a6
  916.     lea    sample_pos4,a2    ; sample positions
  917.     move.w    Oldd0(a6),d0
  918.     move.w    Oldd1(a6),d1
  919.     move.w    Oldd2(a6),d2
  920.     move.w    Oldd3(a6),d3
  921.     move.w    Oldd4(a6),d4
  922.     move.w    Oldd5(a6),d5
  923.     move.w    Oldd6(a6),d6
  924.     lea    8(a1),a1
  925.  
  926.     tst.w    what
  927.     bne.s    ok1_4
  928.     move.l    sample_buff4_MIX,BuffMixADR(a6)
  929. ok1_4:
  930.     cmp.w    #1,what
  931.     bne.s    ok2_4
  932.     move.l    sample_buff4_MIX,BuffMixADR(a6)
  933.     add.l    #2500,BuffMixADR(a6)
  934. ok2_4:
  935.     cmp.w    #2,what
  936.     bne.s    ok3_4
  937.     move.l    sample_buff4_MIX,BuffMixADR(a6)
  938.     add.l    #5000,BuffMixADR(a6)
  939. ok3_4:
  940.     bsr    mainPROC
  941.     move.w    d0,Oldd0(a6)
  942.     move.w    d1,Oldd1(a6)
  943.     move.w    d2,Oldd2(a6)
  944.     move.w    d3,Oldd3(a6)
  945.     move.w    d4,Oldd4(a6)
  946.     move.w    d5,Oldd5(a6)
  947.     move.w    d6,Oldd6(a6)
  948. * ----------------------------------------------------------
  949.     tst.w    what
  950.     bne.s    whatok
  951.     move.w    #3,what
  952. whatok
  953.     subq    #1,what
  954.     rts
  955.  
  956. ; -------------- main procedure ----------------------------
  957. mainPROC:
  958.     move.b    OldVolA(a6),VolA(a6)
  959.     move.b    OldVolB(a6),VolB(a6)
  960.  
  961.     addq.w    #1,NoteCount(a6)
  962.  
  963.     tst.b    temp
  964.     beq    old_data
  965.  
  966.     move.b    count(pc),d7
  967.     cmp.b    temp(pc),d7
  968.     blt    old_data
  969.  
  970.     tst.b    PauseEn
  971.     bne.w    oldperiod_1
  972.     tst.b    OnOffChanA(a6)
  973.     bne.w    oldperiod_1
  974.  
  975.     moveq    #0,d3
  976.  
  977.     tst.w    (a1)
  978.     beq.w    oldperiod_1
  979.  
  980.     move.w    2(a1),d7
  981.     and.w    #$0f00,d7
  982.     cmp.w    #$300,d7
  983.     bne.s    NoClrGliss_1
  984.     clr.w    GlissandoDatasA+4(a6)
  985. NoClrGliss_1
  986.  
  987.     clr.w    VibratoDatasA(a6)
  988.  
  989.     move.b    #1,OffEnable(a6)
  990.     move.b    #1,EqNewSamA(a6)
  991.     move.w    (a1),d7
  992.  
  993.     btst    #12,d7
  994.     beq.s    nohisam1
  995.     move.b    #1,hisam
  996.     bclr    #12,d7
  997.     tst.w    d7
  998.     beq.w    oldperiod_1
  999. nohisam1
  1000.     move.w    d7,d0
  1001.  
  1002. ;                     finetunes
  1003.     movem.l    d1-d3/d7/a0/a1,-(sp)
  1004.     move.w    2(a1),d7
  1005.     lsr.w    #8,d7
  1006.     lsr.w    #4,d7
  1007.     tst.b    hisam
  1008.     beq.s    nohisam111
  1009.     add.w    #$10,d7
  1010. nohisam111
  1011.     tst.w    d7
  1012.     bne.s    notakeold1
  1013.     moveq    #0,d7
  1014.     move.b    OldSamNumA(a6),d7
  1015.     lsr.w    #2,d7
  1016.     addq    #1,d7
  1017. notakeold1
  1018.     moveq    #0,d2
  1019.     moveq    #0,d3
  1020.     move.b    30(a4,d7.w),d2
  1021.     subq.b    #1,d2
  1022.     ext.w    d2
  1023.     beq.s    FinTOK3
  1024.  
  1025.     cmp.w    #7,d2
  1026.     bgt.s    NotFromTable1
  1027.     cmp.w    #-8,d2
  1028.     blt.s    NotFromTable1
  1029.  
  1030.     lea    Periods,a1
  1031.     moveq    #36,d7
  1032. ftulop1    cmp.w    (a1)+,d0
  1033.     beq.s    ftufnd1
  1034.     dbf    d7,ftulop1
  1035.     cmp.w    #74,a1
  1036.     bge.s    NotFromTable1
  1037. ftufnd1    sub.l    #Periods,a1
  1038.     move.l    a1,d1
  1039.     subq.w    #2,d1
  1040.  
  1041.     lea    Tunnings,a0
  1042.     add.w    #8,d2
  1043.     mulu    #72,d2
  1044.     add.w    d2,a0
  1045.     move.w    (a0,d1.w),d0
  1046.     bra.s    FinTOK3
  1047. NotFromTable1
  1048.  
  1049.     tst.w    d2
  1050.     bgt.s    FinTOK1
  1051.     mulu    #-1,d2
  1052.     moveq    #-1,d3
  1053. FinTOK1    moveq    #0,d1
  1054.     move.w    d0,d1
  1055.     mulu    d2,d1
  1056.     divu    #140,d1
  1057.     tst.w    d3
  1058.     bne.s    FinTOK2
  1059.     sub.w    d1,d0
  1060.     bra.s    FinTOK3
  1061. FinTOK2    add.w    d1,d0
  1062. FinTOK3    movem.l    (sp)+,d1-d3/d7/a0/a1
  1063.     move.w    d0,OrgPeriodA(a6)
  1064.  
  1065.     tst.b    MixDon(a6)
  1066.     beq.s    cont1
  1067.  
  1068.     move.l    (a0,d5.w),d7
  1069.     add.l    124(a0,d5.w),d7
  1070.     cmp.l    124(a2,d5.w),d7
  1071.     bgt.s    cont1
  1072.  
  1073.     tst.l    (a3,d5.w)
  1074.     bne.s    cont1
  1075.  
  1076.     clr.l    124(a2,d5.w)
  1077.     moveq    #0,d4
  1078.     moveq    #0,d5
  1079.     clr.b    MixDon(a6)
  1080. cont1:
  1081.     bra.s    newperiod_1
  1082. oldperiod_1:
  1083.     moveq    #-1,d3
  1084. newperiod_1:
  1085.  
  1086.     moveq    #0,d2
  1087.  
  1088.     tst.b    hisam
  1089.     bne.s    neweff_1
  1090.     tst.w    2(a1)
  1091.     beq.w    oldeff_1
  1092. neweff_1
  1093.     move.w    2(a1),d2
  1094.     move.w    d2,d7
  1095.     lsr.w    #8,d7
  1096.     lsr.w    #4,d7
  1097.  
  1098.     tst.b    hisam
  1099.     beq.s    nohisam11
  1100.     add.w    #$10,d7
  1101.     clr.b    hisam
  1102. nohisam11
  1103.  
  1104.     tst.b    d7
  1105.     beq.s    oldeff_1
  1106.  
  1107.     cmp.b    #-1,d3
  1108.     bne.s    noupvol_1
  1109.     move.w    d1,d3
  1110.     lsr.w    #2,d3
  1111.     move.b    (a4,d3.w),VolA(a6)
  1112.     and.w    #$0fff,d2
  1113.     bra.s    NoOldNum_1
  1114. noupvol_1:
  1115.  
  1116.     move.w    d7,d1
  1117.     subq    #1,d1
  1118.     lsl.w    #2,d1
  1119.     move.w    d2,d7
  1120.     and.w    #$0f00,d7
  1121.     cmp.w    #$300,d7
  1122.     bne.s    NewAdr_1
  1123.  
  1124.     tst.l    (a2,d1.w)
  1125.     bne.s    NoNewAdr_1
  1126.     moveq    #0,d0
  1127.     moveq    #0,d1
  1128.     moveq    #0,d2
  1129.     bra.s    NoOldNum_1
  1130. NewAdr_1
  1131.     move.l    (a0,d1.w),(a2,d1.w)
  1132. NoNewAdr_1
  1133.     move.w    d1,d3
  1134.     lsr.w    #2,d3
  1135.     move.b    (a4,d3.w),VolA(a6)
  1136.     and.w    #$0fff,d2
  1137.     move.b    d1,OldSamNumA(a6)
  1138.     clr.b    BackWDenable(a6)
  1139.     bra.s    NoOldNum_1
  1140. oldeff_1:
  1141.     tst.w    (a1)
  1142.     beq.s    NoOldNum_1
  1143.  
  1144.     moveq    #0,d1
  1145.     move.b    OldSamNumA(a6),d1
  1146.  
  1147.     move.w    d2,d7
  1148.     and.w    #$0f00,d7
  1149.     cmp.w    #$500,d7
  1150.     beq.s    YeGL_1
  1151.     cmp.w    #$300,d7
  1152.     bne.s    NoGL_1
  1153. YeGL_1
  1154.     tst.l    (a2,d1.w)
  1155.     bne.s    NoOldNum_1
  1156.     moveq    #0,d0
  1157.     moveq    #0,d1
  1158.     moveq    #0,d2
  1159.     bra.s    NoOldNum_1
  1160. NoGL_1
  1161.  
  1162.     move.l    (a0,d1.w),(a2,d1.w)
  1163. NoOldNum_1
  1164.  
  1165.  
  1166.     tst.b    PauseEn
  1167.     bne.w    oldperiod_2
  1168.     tst.b    OnOffChanB(a6)
  1169.     bne.w    oldperiod_2
  1170.  
  1171.     moveq    #0,d3
  1172.  
  1173.     tst.w    4(a1)
  1174.     beq.w    oldperiod_2
  1175.  
  1176.     move.w    6(a1),d7
  1177.     and.w    #$0f00,d7
  1178.     cmp.w    #$300,d7
  1179.     bne.s    NoClrGliss_2
  1180.     clr.w    GlissandoDatasB+4(a6)
  1181. NoClrGliss_2
  1182.  
  1183.     clr.w    VibratoDatasB(a6)
  1184.     add.b    #1,OffEnable(a6)
  1185.     move.b    #1,EqNewSamB(a6)
  1186.  
  1187.     move.w    4(a1),d7
  1188.  
  1189.     btst    #12,d7
  1190.     beq.s    nohisam_2
  1191.     move.b    #1,hisam
  1192.     bclr    #12,d7
  1193.     tst.w    d7
  1194.     beq.w    oldperiod_2
  1195. nohisam_2:
  1196.     move.w    d7,d4
  1197.  
  1198. ;                     finetunes
  1199.     movem.l    d1-d3/d7/a0/a1,-(sp)
  1200.     move.w    6(a1),d7
  1201.     lsr.w    #8,d7
  1202.     lsr.w    #4,d7
  1203.     tst.b    hisam
  1204.     beq.s    nohisam222
  1205.     add.w    #$10,d7
  1206. nohisam222
  1207.     tst.w    d7
  1208.     bne.s    notakeold2
  1209.     moveq    #0,d7
  1210.     move.b    OldSamNumB(a6),d7
  1211.     lsr.w    #2,d7
  1212.     addq    #1,d7
  1213. notakeold2
  1214.     moveq    #0,d2
  1215.     moveq    #0,d3
  1216.     move.b    30(a4,d7.w),d2
  1217.     subq.b    #1,d2
  1218.     ext.w    d2
  1219.     beq.s    FinTOK3b
  1220.  
  1221.     cmp.w    #7,d2
  1222.     bgt.s    NotFromTable2
  1223.     cmp.w    #-8,d2
  1224.     blt.s    NotFromTable2
  1225.  
  1226.     lea    Periods,a1
  1227.     moveq    #36,d7
  1228. ftulop2    cmp.w    (a1)+,d4
  1229.     beq.s    ftufnd2
  1230.     dbf    d7,ftulop2
  1231.     cmp.w    #74,a1
  1232.     bge.s    NotFromTable2
  1233. ftufnd2    sub.l    #Periods,a1
  1234.     move.l    a1,d1
  1235.     subq.w    #2,d1
  1236.  
  1237.     add.w    #8,d2
  1238.     lea    Tunnings,a0
  1239.     mulu    #72,d2
  1240.     add.w    d2,a0
  1241.     move.w    (a0,d1.w),d4
  1242.     bra.s    FinTOK3b
  1243. NotFromTable2
  1244.  
  1245.  
  1246.     tst.w    d2
  1247.     bge.s    FinTOK1b
  1248.     mulu    #-1,d2
  1249.     moveq    #-1,d3
  1250. FinTOK1b
  1251.     moveq    #0,d1
  1252.     move.w    d4,d1
  1253.     mulu    d2,d1
  1254.     divu    #140,d1
  1255.     tst.w    d3
  1256.     bne.s    FinTOK2b
  1257.     sub.w    d1,d4
  1258.     bra.s    FinTOK3b
  1259. FinTOK2b
  1260.     add.w    d1,d4
  1261. FinTOK3b
  1262.     movem.l    (sp)+,d1-d3/d7/a0/a1
  1263.     move.w    d4,OrgPeriodB(a6)
  1264.  
  1265.     tst.b    MixDon(a6)
  1266.     beq.s    cont2
  1267.  
  1268.     move.l    (a0,d1.w),d7
  1269.     add.l    124(a0,d1.w),d7
  1270.     cmp.l    (a2,d1.w),d7
  1271.     bgt.s    cont2
  1272.  
  1273.     tst.l    (a3,d1.w)
  1274.     bne.s    cont2
  1275.  
  1276.     clr.l    (a2,d1.w)
  1277.     moveq    #0,d0
  1278.     moveq    #0,d1
  1279.     clr.b    MixDon(a6)
  1280. cont2:
  1281.     bra.s    newperiod_2
  1282. oldperiod_2:
  1283.     moveq    #-1,d3
  1284. newperiod_2:
  1285.  
  1286.     moveq    #0,d6
  1287.  
  1288.     tst.b    hisam
  1289.     bne.s    neweff_2
  1290.     tst.w    6(a1)
  1291.     beq.w    oldeff_2
  1292. neweff_2
  1293.     move.w    6(a1),d6
  1294.  
  1295.     move.w    d6,d7
  1296.     lsr.w    #8,d7
  1297.     lsr.w    #4,d7
  1298.  
  1299.     tst.b    hisam
  1300.     beq.s    nohisam22
  1301.     add.w    #$10,d7
  1302.     clr.b    hisam
  1303. nohisam22
  1304.  
  1305.     tst.b    d7
  1306.     beq.s    OldEff_2
  1307.  
  1308.     cmp.b    #-1,d3
  1309.     bne.s    noupvol_2
  1310.     move.w    d5,d3
  1311.     lsr.w    #2,d3
  1312.     move.b    (a4,d3.w),VolB(a6)
  1313.     and.w    #$0fff,d6
  1314.     bra.s    NoOldNum_2
  1315. noupvol_2:
  1316.     move.w    d7,d5
  1317.     subq    #1,d5
  1318.     lsl.w    #2,d5
  1319.  
  1320.     move.w    d6,d7
  1321.     and.w    #$0f00,d7
  1322.     cmp.w    #$300,d7
  1323.     bne.s    NewAdr_2
  1324.  
  1325.     tst.l    124(a2,d5.w)        ; adres sampla
  1326.     bne.s    NoNewAdr_2
  1327.     moveq    #0,d4
  1328.     moveq    #0,d5
  1329.     moveq    #0,d6
  1330.     bra.s    NoOldNum_2
  1331. NewAdr_2
  1332.     move.l    (a0,d5.w),124(a2,d5.w)    ; adres sampla
  1333. NoNewAdr_2
  1334.     move.w    d5,d3
  1335.     lsr.w    #2,d3
  1336.     move.b    (a4,d3.w),VolB(a6)
  1337.     and.w    #$0fff,d6
  1338.     move.b    d5,OldSamNumB(a6)
  1339.     clr.b    BackWDenable(a6)
  1340.     bra.s    NoOldNum_2
  1341. OldEff_2:
  1342.     tst.w    4(a1)
  1343.     beq.s    NoOldNum_2
  1344.  
  1345.     moveq    #0,d5
  1346.     move.b    OldSamNumB(a6),d5
  1347.  
  1348.     move.w    d6,d7
  1349.     and.w    #$0f00,d7
  1350.     cmp.w    #$500,d7
  1351.     beq.s    YeGL_2
  1352.     cmp.w    #$300,d7
  1353.     bne.s    NoGL_2
  1354. YeGL_2
  1355.     tst.l    124(a2,d5.w)
  1356.     bne.s    NoOldNum_2
  1357.     moveq    #0,d4
  1358.     moveq    #0,d5
  1359.     moveq    #0,d6
  1360.     bra.s    NoOldNum_2
  1361. NoGL_2
  1362.     move.l    (a0,d5.w),124(a2,d5.w)
  1363. NoOldNum_2
  1364.     tst.l    (a0,d5.w)
  1365.     bne.s    NoZeroSam2
  1366.     moveq    #0,d4
  1367.     moveq    #0,d5
  1368. NoZeroSam2
  1369.     tst.l    (a0,d1.w)
  1370.     bne.s    NoZeroSam1
  1371.     moveq    #0,d0
  1372.     moveq    #0,d1
  1373. NoZeroSam1
  1374.  
  1375.  
  1376.     move.l    a5,-(sp)
  1377.     bsr    EffectCommandsA2
  1378.     bsr    EffectCommandsB2
  1379.     move.l    (sp)+,a5
  1380.  
  1381.     tst.b    OnOffChanA(a6)
  1382.     bne.s    Stop1
  1383.     cmp.w    #$0e40,d2
  1384.     bne.s    No_stop1
  1385.     move.l    BuffBegAdr(a6),(a6)
  1386.     move.b    #1,OffEnable(a6)
  1387. Stop1    moveq    #0,d0
  1388.     moveq    #0,d1
  1389.     moveq    #0,d2
  1390. No_stop1
  1391.     tst.b    OnOffChanB(a6)
  1392.     bne.s    Stop2
  1393.     cmp.w    #$0e40,d6
  1394.     bne.s    No_stop2
  1395.     move.l    BuffBegAdr(a6),(a6)
  1396.     move.b    #1,OffEnable(a6)
  1397. Stop2    moveq    #0,d4
  1398.     moveq    #0,d5
  1399.     moveq    #0,d6
  1400. No_stop2
  1401.  
  1402. old_data:
  1403.  
  1404.     move.b    temp(pc),d7
  1405.     subq    #1,d7
  1406.     cmp.b    count(pc),d7
  1407.     bne.s    no_CLReff
  1408.     move.w    d2,d7
  1409.     lsr.w    #8,d7
  1410.     cmp.b    #8,d7
  1411.     beq.s    no_CLReff1
  1412.     cmp.b    #3,d7
  1413.     beq.s    no_CLReff1
  1414.     cmp.b    #4,d7
  1415.     beq.s    no_CLReff1
  1416.     cmp.b    #5,d7
  1417.     beq.s    CLReffSP1
  1418.     TST.b    d7
  1419.     beq.s    no_CLReff1
  1420.  
  1421.     move.w    d2,d7
  1422.     lsr.w    #4,d7
  1423.     cmp.w    #$ec,d7
  1424.     beq.s    no_CLReff1
  1425.     cmp.w    #$e9,d7
  1426.     beq.s    no_CLReff1
  1427.     moveq    #0,d2
  1428.     bra.s    no_CLReff1
  1429. CLReffSP1:
  1430.     move.w    #$0300,d2
  1431. no_CLReff1
  1432.     move.w    d6,d7
  1433.     lsr.w    #8,d7
  1434.     cmp.b    #3,d7
  1435.     beq.s    no_CLReff2
  1436.     cmp.b    #4,d7
  1437.     beq.s    no_CLReff2
  1438.     cmp.b    #5,d7
  1439.     beq.s    CLReffSP2
  1440.     TST.b    d7
  1441.     beq.s    no_CLReff2
  1442.  
  1443.     move.w    d6,d7
  1444.     lsr.w    #4,d7
  1445.     cmp.w    #$ec,d7
  1446.     beq.s    no_CLReff2
  1447.     cmp.w    #$e9,d7
  1448.     beq.s    no_CLReff2
  1449.  
  1450.     moveq    #0,d6
  1451.     bra.s    no_CLReff2
  1452. CLReffSP2:
  1453.     move.w    #$0300,d6
  1454. no_CLReff2
  1455.  
  1456. no_CLReff
  1457.  
  1458.     bsr    TestPeriod
  1459.     move.l    a5,-(sp)
  1460.     bsr    EffectCommandsA
  1461.     bsr    EffectCommandsB
  1462.     move.l    (sp)+,a5
  1463.     bsr    TestPeriod
  1464.  
  1465.     move.w    d0,GlissandoDatasA+2(a6)
  1466.     move.w    d4,GlissandoDatasB+2(a6)
  1467.  
  1468. ; -----------------------------------
  1469.     movem.l    d0-a6,-(sp)
  1470.     move.b    VolA(a6),OldVolA(a6)
  1471.     move.b    VolB(a6),OldVolB(a6)
  1472.     move.w    MainVolValue,d0
  1473.     mulu    ConfVolBoost,d0
  1474.     divu    #100,d0
  1475.     moveq    #0,d1
  1476.     move.b    VolA(a6),d1
  1477.     mulu    d0,d1
  1478.     lsr.w    #6,d1
  1479.     move.b    d1,VolA(a6)
  1480.     moveq    #0,d1
  1481.     move.b    VolB(a6),d1
  1482.     mulu    d0,d1
  1483.     lsr.w    #6,d1
  1484.     move.b    d1,VolB(a6)
  1485.     movem.l    (sp)+,d0-a6
  1486.  
  1487.     tst.w    d0
  1488.     bne.s    NoReplace1
  1489.     tst.w    d4
  1490.     beq.s    NoReplace1
  1491.     move.l    124(a2,d5.w),(a2,d5.w)
  1492.     clr.l    124(a2,d5.w)
  1493.     move.w    d4,d0
  1494.     move.w    d5,d1
  1495.     move.w    d6,d2
  1496.     moveq    #0,d4
  1497.     moveq    #0,d5
  1498.     moveq    #0,d6
  1499.     move.b    #1,ReplaceEnable(a6)
  1500.     move.b    VolA(a6),d3
  1501.     move.b    VolB(a6),VolA(a6)
  1502.     move.b    d3,VolB(a6)
  1503. NoReplace1
  1504.  
  1505.     tst.w    d4
  1506.     bne    mixing
  1507.  
  1508.     clr.b    MBRpointer(a6)
  1509.  
  1510.     tst.w    d0
  1511.     beq    nothing
  1512.  
  1513.     move.w    d0,MainPeriod(a6)
  1514.     move.b    VolA(a6),MainVol(a6)
  1515.  
  1516.     tst.b    OffEnable(a6)
  1517.     beq.s    NoAtStartBuff
  1518.     tst.b    PlayPointer(a6)
  1519.     beq.s    BuffAtStart
  1520.     move.w    d2,d7
  1521.     lsr.w    #8,d7
  1522.     cmp.b    #3,d7
  1523.     beq.s    NoAtStartBuff
  1524.     cmp.b    #5,d7
  1525.     beq.s    NoAtStartBuff
  1526. BuffAtStart
  1527.     move.l    BuffBegAdr(a6),(a6)
  1528. NoAtStartBuff
  1529.  
  1530.     bsr    Calc
  1531. ; - - - - - - - - - - - - - - -  backwd play - - - - - - - - - - - - - - -
  1532.     tst.b    BackWDenable(a6)
  1533.     bne.s    bckOK
  1534.  
  1535.     move.w    d2,d7
  1536.     lsr.w    #4,d7
  1537.     cmp.w    #$e3,d7
  1538.     bne.w    no_backwd
  1539.     move.l    124(a0,d1.w),d7
  1540.     add.l    d7,(a2,d1.w)
  1541.     move.b    #1,BackWDenable(a6)
  1542.  
  1543.     move.b    d2,d7
  1544.     and.b    #$0f,d7
  1545.     beq.s    bckOK
  1546.     move.b    #2,BackWDenable(a6)
  1547. bckOK
  1548.     move.b    #1,MBRpointer(a6)
  1549.     movem.l    d0-d1/a4-a5,-(sp)
  1550.  
  1551.     move.l    (a0,d1.w),d0
  1552.     move.w    d3,d7
  1553.     subq    #1,d7
  1554.     move.l    (a2,d1.w),a5
  1555.     move.l    BuffMixADR(a6),a4
  1556.  
  1557.     cmp.b    #1,BackWDenable(a6)
  1558.     beq.s    copy_loopbck1
  1559.  
  1560. copy_loopbck2:
  1561.     cmp.l    d0,a5
  1562.     ble.s    sampleend_str
  1563.     move.b    -(a5),(a4)+
  1564.     dbf    d7,copy_loopbck2
  1565.     bra.s    bck_done
  1566. sampleend_str:
  1567. copy_loopbck3:
  1568.     move.b    (a5)+,(a4)+
  1569.     dbf    d7,copy_loopbck3
  1570.     clr.b    BackWDenable(a6)
  1571.     bra.s    bck_done
  1572.  
  1573. copy_loopbck1:
  1574.     cmp.l    d0,a5
  1575.     bgt.s    NoTasampleend
  1576.     moveq    #0,d0
  1577.     clr.b    -1(a4)
  1578. clr_loop2:
  1579.     move.b    d0,(a4)+
  1580.     dbf    d7,clr_loop2
  1581.     tst.b    Fast
  1582.     beq.s    NoCopyFromFAST
  1583.     bsr    CopyFromFAST
  1584. NoCopyFromFAST
  1585.     bra.w    RealSampleEnd
  1586. NoTasampleend
  1587.  
  1588.     move.b    -(a5),(a4)+
  1589.     dbf    d7,copy_loopbck1
  1590. bck_done:
  1591.     move.l    a5,(a2,d1.w)
  1592.     movem.l    (sp)+,d0-d1/a4-a5
  1593.     tst.b    Fast
  1594.     beq.s    NoCopyFromFAST2
  1595.     bsr    CopyFromFAST
  1596. NoCopyFromFAST2
  1597.     bra.w    Replace2
  1598. no_backwd
  1599.     move.w    d2,d7
  1600.     lsr.w    #8,d7
  1601.     cmp.b    #$8,d7
  1602.     beq    RobotEffect
  1603.  
  1604.     tst.b    RobotEnable(a6)
  1605.     beq.s    NoOffCH
  1606.     move.b    #1,Offenable(a6)
  1607.     move.l    BuffBegAdr(a6),(a6)
  1608. NoOffCH    clr.b    RobotEnable(a6)
  1609. ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  1610.     addq    #1,d3
  1611.  
  1612.     tst.l    124(a3,d1.w)
  1613.     bne    sampleloop
  1614.  
  1615.     movem.l    d0-d1/a4-a5,-(sp)
  1616.  
  1617.     move.l    124(a0,d1.w),d0
  1618.     add.l    (a0,d1.w),d0
  1619.     move.l    (a2,d1.w),a5
  1620.     cmp.l    d0,a5
  1621.     blt.s    NotSamEnd0
  1622.     move.w    #-1,MainPeriod(a6)
  1623.     bra    realsampleend
  1624. NotSamEnd0
  1625.  
  1626.     move.l    (a6),d7
  1627.     move.l    (a6),d1
  1628.     add.l    d3,d1
  1629.     cmp.l    BuffEndAdr(a6),d1
  1630.     ble.s    NotEndBuff
  1631.  
  1632.     move.l    a5,d7
  1633.     add.l    d3,d7
  1634.     cmp.l    d0,d7
  1635.     ble.s    NotSamEnd2
  1636.     move.w    #-1,MainPeriod(a6)
  1637.     bra    realsampleend
  1638. NotSamEnd2
  1639.     sub.l    BuffEndAdr(a6),d1
  1640.     move.w    d3,d7
  1641.     sub.w    d1,d7
  1642.     subq.w    #1,d7
  1643.     move.l    (a6),a4
  1644.     bsr    copy_loop
  1645.  
  1646.     move.l    BuffBegAdr(a6),(a6)
  1647.     move.l    (a6),a4
  1648.  
  1649.     move.w    d1,d7
  1650.     subq.w    #1,d7
  1651.     bsr    copy_loop
  1652.     bra.s    CopyDone
  1653. NotEndBuff
  1654.  
  1655.     move.l    (a6),a4
  1656.  
  1657.     move.l    a5,d7
  1658.     add.l    d3,d7
  1659.     cmp.l    d0,d7
  1660.     ble.s    NotSamEnd1
  1661.     sub.l    d0,d7
  1662.     move.w    d7,d0
  1663.     move.w    d3,d7
  1664.     sub.w    d0,d7
  1665.     subq.w    #1,d7
  1666.     bsr    copy_loop
  1667.  
  1668.     move.w    d0,d7
  1669.     beq.s    nosubq1
  1670.     subq.w    #1,d7
  1671. nosubq1
  1672.     bra    sampleend
  1673. NotSamEnd1
  1674.     move.w    d3,d7
  1675.     subq    #1,d7
  1676.     bsr    copy_loop
  1677. CopyDone:
  1678.     move.l    a4,(a6)
  1679.     movem.l    (sp)+,d0-d1/a4-a5
  1680.     add.l    d3,(a2,d1.w)
  1681.  
  1682. Replace2:
  1683.     move.w    d3,MainDTALEN(a6)
  1684. Replace_R:
  1685.     tst.b    ReplaceEnable(a6)
  1686.     beq.s    NoReplace2
  1687.     move.l    (a2,d1.w),124(a2,d1.w)
  1688.     clr.l    (a2,d1.w)
  1689.     move.w    d0,d4
  1690.     move.w    d1,d5
  1691.     move.w    d2,d6
  1692.     clr.b    ReplaceEnable(a6)
  1693.     move.b    VolA(a6),d0
  1694.     move.b    VolB(a6),VolA(a6)
  1695.     move.b    d0,VolB(a6)
  1696.     moveq    #0,d0
  1697.     moveq    #0,d1
  1698.     moveq    #0,d2
  1699. NoReplace2
  1700.     rts
  1701.  
  1702. copy_loopM:
  1703.     tst.w    d7
  1704.     blt.s    copy_loopex
  1705.     bra.s    copy_loopM2
  1706. copy_loop:
  1707.     tst.w    d7
  1708.     blt.s    copy_loopex
  1709.     tst.b    ConfMix
  1710.     bne.s    copy_loop2
  1711. copy_loopM2:
  1712.     tst.b    OldCPU
  1713.     bne.s    copy_loopL68000
  1714.     movem.l    d7/a4-a5,-(sp)
  1715.     lsr.w    #2,d7
  1716. copy_loopL
  1717.     move.l    (a5)+,(a4)+
  1718.     dbf    d7,copy_loopL
  1719.     movem.l    (sp)+,d7/a4-a5
  1720.     addq    #1,d7
  1721.     add.w    d7,a5
  1722.     add.w    d7,a4
  1723.     rts
  1724. copy_loopL68000
  1725.     move.b    (a5)+,(a4)+
  1726.     dbf    d7,copy_loopL68000
  1727. copy_loopex
  1728.     rts
  1729.  
  1730. copy_loop2:
  1731.     movem.l    d0/a3,-(sp)
  1732.     moveq    #0,d0
  1733.     move.b    VolA(a6),d0
  1734.     lsl.w    #8,d0
  1735.     add.l    VolTabPTR,d0
  1736.     move.b    #$40,MainVol(a6)
  1737. copy_loopL2
  1738.     move.b    (a5)+,d0
  1739.     move.l    d0,a3
  1740.     move.b    (a3),(a4)+
  1741.     dbf    d7,copy_loopL2
  1742.     movem.l    (sp)+,d0/a3
  1743.     rts
  1744.  
  1745.  
  1746. nothing:
  1747.     tst.w    MainPeriod(a6)
  1748.     beq.s    nostopperiod
  1749.     move.w    #-1,MainPeriod(a6)
  1750. nostopperiod
  1751.     rts
  1752.  
  1753. sampleend:
  1754.     moveq    #0,d0
  1755.     clr.b    -1(a4)
  1756. clr_loop:
  1757.     move.b    d0,(a4)+
  1758.     dbf    d7,clr_loop
  1759. realsampleend:
  1760.     movem.l    (sp)+,d0-d1/a4-a5
  1761.     clr.l    (a2,d1.w)
  1762.     moveq    #0,d0
  1763.     moveq    #0,d1
  1764.     moveq    #0,d2
  1765.     clr.b    ReplaceEnable(a6)
  1766.     clr.b    BackWDenable(a6)
  1767.     rts
  1768.  
  1769. sampleloop:
  1770.     movem.l    d0-d4/a4-a5,-(sp)
  1771.  
  1772.     move.l    (a2,d1.w),a5
  1773.     move.l    124(a3,d1.w),d4
  1774.     add.l    (a3,d1.w),d4
  1775.     add.l    (a0,d1.w),d4
  1776.  
  1777.     cmp.l    d4,a5
  1778.     ble.s    NotSamEndL
  1779.     move.l    d4,(a2,d1.w)
  1780.     subq.l    #1,(a2,d1.w)
  1781.     move.l    d4,a5
  1782.     subq.l    #1,a5
  1783. NotSamEndL
  1784.  
  1785.     move.l    (a6),d7
  1786.     move.l    (a6),d2
  1787.     add.l    d3,d2
  1788.     cmp.l    BuffEndAdr(a6),d2
  1789.     ble.w    NotEndBuff_L
  1790.  
  1791.     move.l    (a6),a4
  1792.     move.l    a5,d7
  1793.     add.l    d3,d7
  1794.     cmp.l    d4,d7
  1795.     ble.w    NoMakeLoop_EB
  1796.  
  1797.     sub.l    d4,d7            ; loop
  1798.     move.w    d7,d4
  1799.     move.w    d3,d7
  1800.     sub.w    d4,d7
  1801.  
  1802.     sub.l    BuffEndAdr(a6),d2
  1803.     move.w    d3,d0
  1804.     sub.w    d2,d0
  1805.  
  1806.     cmp.w    d0,d7
  1807.     bge.s    Copy_ToEndBuff
  1808. ; d0=>d7 koniec buff pozniej niz petla
  1809.  
  1810.     move.l    BuffEndAdr(a6),d2
  1811.  
  1812.     move.w    d3,d7
  1813.     subq    #1,d7
  1814.     move.l    124(a3,d1.w),d4
  1815.     add.l    (a3,d1.w),d4
  1816.     add.l    (a0,d1.w),d4
  1817.  
  1818.     move.l    (a3,d1.w),d0
  1819.     add.l    (a0,d1.w),d0
  1820.     tst.b    ConfMix
  1821.     bne.s    copy_loop3EBMH
  1822.     bra.s    copy_loop3EBML2
  1823. copy_loop4EBML2:
  1824.     move.l    d0,a5
  1825. copy_loop3EBML2:
  1826.     cmp.l    d4,a5
  1827.     bge.s    copy_loop4EBML2
  1828.  
  1829.     cmp.l    d2,a4
  1830.     blt.s    EBMLcont
  1831.     move.l    BuffBegAdr(a6),(a6)
  1832.     move.l    (a6),a4
  1833. EBMLcont
  1834.     move.b    (a5)+,(a4)+
  1835.     dbf    d7,copy_loop3EBML2
  1836.     bra.w    MakeLoopEB_done
  1837.  
  1838. ***********************************
  1839. copy_loop3EBMH:
  1840.     movem.l    d1/a3,-(sp)
  1841.     moveq    #0,d1
  1842.     move.b    VolA(a6),d1
  1843.     lsl.w    #8,d1
  1844.     add.l    VolTabPTR,d1
  1845.     move.b    #$40,MainVol(a6)
  1846.     bra.s    copy_loop3EBMLH2
  1847. copy_loop4EBMLH2:
  1848.     move.l    d0,a5
  1849. copy_loop3EBMLH2:
  1850.     cmp.l    d4,a5
  1851.     bge.s    copy_loop4EBMLH2
  1852.     cmp.l    d2,a4
  1853.     blt.s    EBMLHcont
  1854.     move.l    BuffBegAdr(a6),(a6)
  1855.     move.l    (a6),a4
  1856. EBMLHcont
  1857.     move.b    (a5)+,d1
  1858.     move.l    d1,a3
  1859.     move.b    (a3),(a4)+
  1860.     dbf    d7,copy_loop3EBMLH2
  1861.     movem.l    (sp)+,d1/a3
  1862.     bra.s    MakeLoopEB_done
  1863. ***********************************
  1864.  
  1865.  
  1866. Copy_ToEndBuff
  1867.     exg    d0,d7
  1868.     sub.w    d7,d0
  1869.     subq    #1,d7
  1870.     bsr    copy_loop
  1871.     move.l    BuffBegAdr(a6),(a6)
  1872.     move.l    (a6),a4
  1873.     exg    d0,d7
  1874.     subq    #1,d7
  1875.     bsr    copy_loop
  1876.  
  1877.     move.w    d4,d7
  1878.     subq.w    #1,d7
  1879.     move.l    124(a3,d1.w),d4
  1880.     add.l    (a3,d1.w),d4
  1881.     add.l    (a0,d1.w),d4
  1882.  
  1883.     move.l    (a3,d1.w),d0
  1884.     add.l    (a0,d1.w),d0
  1885.  
  1886.     tst.b    ConfMix
  1887.     bne.s    copy_loop4EBMLHM
  1888.  
  1889. copy_loop4EBML:
  1890.     move.l    d0,a5
  1891. copy_loop3EBML:
  1892.     cmp.l    d4,a5
  1893.     bge.s    copy_loop4EBML
  1894.     move.b    (a5)+,(a4)+
  1895.     dbf    d7,copy_loop3EBML
  1896.     bra.s    MakeLoopEB_done
  1897.  
  1898. ***********************************
  1899. copy_loop4EBMLHM:
  1900.     movem.l    d1/a3,-(sp)
  1901.     moveq    #0,d1
  1902.     move.b    VolA(a6),d1
  1903.     lsl.w    #8,d1
  1904.     add.l    VolTabPTR,d1
  1905.     move.b    #$40,MainVol(a6)
  1906. copy_loop4EBMLH:
  1907.     move.l    d0,a5
  1908. copy_loop3EBMLH:
  1909.     cmp.l    d4,a5
  1910.     bge.s    copy_loop4EBMLH
  1911.     move.b    (a5)+,d1
  1912.     move.l    d1,a3
  1913.     move.b    (a3),(a4)+
  1914.     dbf    d7,copy_loop3EBMLH
  1915.     movem.l    (sp)+,d1/a3
  1916. ***********************************
  1917.  
  1918. MakeLoopEB_done
  1919.     move.l    a4,(a6)
  1920.     move.l    a5,(a2,d1.w)
  1921.     movem.l    (sp)+,d0-d4/a4-a5
  1922.     bsr    Replace2
  1923.     rts
  1924.  
  1925. NoMakeLoop_EB
  1926.     sub.l    BuffEndAdr(a6),d2
  1927.     move.w    d3,d7
  1928.     sub.w    d2,d7
  1929.     subq.w    #1,d7
  1930.     bsr    copy_loop
  1931.  
  1932.     move.l    BuffBegAdr(a6),(a6)
  1933.     move.l    (a6),a4
  1934.  
  1935.     move.w    d2,d7
  1936.     subq.w    #1,d7
  1937.     bsr    copy_loop
  1938.  
  1939.     move.l    a4,(a6)
  1940.     move.l    a5,(a2,d1.w)
  1941.     movem.l    (sp)+,d0-d4/a4-a5
  1942.     bsr    Replace2
  1943.     rts
  1944.  
  1945. NotEndBuff_L
  1946.     move.l    (a6),a4
  1947.     move.l    a5,d7
  1948.     add.l    d3,d7
  1949.  
  1950.     cmp.l    d4,d7
  1951.     ble.s    NoMakeLoop
  1952.  
  1953.     sub.l    d4,d7
  1954.     move.w    d7,d4
  1955.     move.w    d3,d7
  1956.     sub.w    d4,d7
  1957.     subq.w    #1,d7
  1958.     bsr    copy_loop
  1959.  
  1960.     move.w    d4,d7
  1961.     subq.w    #1,d7
  1962.  
  1963.     move.l    124(a3,d1.w),d4
  1964.     add.l    (a3,d1.w),d4
  1965.     add.l    (a0,d1.w),d4
  1966.  
  1967.     move.l    (a3,d1.w),d0
  1968.     add.l    (a0,d1.w),d0
  1969.     tst.b    ConfMix
  1970.     bne.s    copy_loop4HM
  1971. copy_loop4:
  1972.     move.l    d0,a5
  1973. copy_loop3:
  1974.     cmp.l    d4,a5
  1975.     bge.s    copy_loop4
  1976.     move.b    (a5)+,(a4)+
  1977.     dbf    d7,copy_loop3
  1978.     bra.s    copy_loopHdone
  1979. ***********************************
  1980. copy_loop4HM:
  1981.     movem.l    d1/a3,-(sp)
  1982.     moveq    #0,d1
  1983.     move.b    VolA(a6),d1
  1984.     lsl.w    #8,d1
  1985.     add.l    VolTabPTR,d1
  1986.     move.b    #$40,MainVol(a6)
  1987. copy_loop4H:
  1988.     move.l    d0,a5
  1989. copy_loop3H:
  1990.     cmp.l    d4,a5
  1991.     bge.s    copy_loop4H
  1992.     move.b    (a5)+,d1
  1993.     move.l    d1,a3
  1994.     move.b    (a3),(a4)+
  1995.     dbf    d7,copy_loop3H
  1996.     movem.l    (sp)+,d1/a3
  1997. ***********************************
  1998.  
  1999. copy_loopHdone:
  2000.     move.l    a4,(a6)
  2001.     move.l    a5,(a2,d1.w)
  2002.     movem.l    (sp)+,d0-d4/a4-a5
  2003.     bsr    Replace2
  2004.     rts
  2005.  
  2006. NoMakeLoop
  2007.     move.w    d3,d7
  2008.     subq    #1,d7
  2009.     bsr    copy_loop
  2010.     move.l    a4,(a6)
  2011.     move.l    a5,(a2,d1.w)
  2012.     movem.l    (sp)+,d0-d4/a4-a5
  2013.     bsr    Replace2
  2014.     rts
  2015.  
  2016. TestPeriod:
  2017.     cmp.w    #113,d0
  2018.     bge.s    OKKI1
  2019.     tst.w    d0
  2020.     beq.s    OKKI1
  2021.     moveq    #113,d0
  2022. OKKI1    cmp.w    #113,d4
  2023.     bge.s    OKKI2
  2024.     tst.w    d4
  2025.     beq.s    OKKI2
  2026.     moveq    #113,d4
  2027. OKKI2    tst.w    d0
  2028.     bne.s    OKKI3
  2029.     moveq    #0,d0
  2030.     moveq    #0,d1
  2031.     moveq    #0,d2
  2032. OKKI3    tst.w    d4
  2033.     bne.s    OKKI4
  2034.     moveq    #0,d4
  2035.     moveq    #0,d5
  2036.     moveq    #0,d6
  2037. OKKI4    rts
  2038. ; --------------------------- EffectCommands ---------------------------
  2039.  
  2040. EffectCommandsA2:
  2041. ; effects 9xx, bxx, cxx, dxx, fxx chan A
  2042.  
  2043.     move.w    d2,d7
  2044.     beq    EffComA2exit
  2045.     lsr.w    #8,d7
  2046.     clr.b    channelenable
  2047.     move.w    d2,d3
  2048.  
  2049.     lea    SamoffsetA(a6),a5
  2050.     cmp.b    #9,d7
  2051.     beq    SampleOffset
  2052.  
  2053.     cmp.b    #$b,d7
  2054.     beq    SongRepeat
  2055.  
  2056.     lea    VolA(a6),a5
  2057.     cmp.b    #$c,d7
  2058.     beq    SetVolume
  2059.  
  2060.     lea    Hex(pc),a5
  2061.     cmp.b    #$d,d7
  2062.     beq    PattBreak
  2063.  
  2064.     cmp.b    #$f,d7
  2065.     beq    SetTempo
  2066.  
  2067. ; effects E0x, E1x, E2x, E6x, E8x, EAx, EBx EEx chan A
  2068.  
  2069.     cmp.w    #$e00,d3
  2070.     beq.w    OffFilter
  2071.  
  2072.     cmp.w    #$e01,d3
  2073.     beq.w    OnFilter
  2074.  
  2075.     cmp.w    #$e50,d3
  2076.     beq.w    OffChannelA
  2077.  
  2078.     cmp.w    #$e51,d3
  2079.     beq.w    OnChannelA
  2080.  
  2081.     move.w    d2,d7
  2082.     lsr.w    #4,d7
  2083.     move.w    d2,d3
  2084.  
  2085.     cmp.b    #$e1,d7
  2086.     beq.w    FineSlideUp
  2087.  
  2088.     cmp.b    #$e2,d7
  2089.     beq.w    FineSlideDown
  2090.  
  2091.     lea    loopsdataschanA(a6),a5
  2092.     cmp.b    #$e6,d7
  2093.     beq.w    Loops
  2094.  
  2095.     lea    SamOffsetA(a6),a5
  2096.     cmp.b    #$e8,d7
  2097.     beq    offsets
  2098.  
  2099.     lea    VolA(a6),a5
  2100.     cmp.b    #$ea,d7
  2101.     beq    FineVolUp
  2102.  
  2103.     cmp.b    #$eb,d7
  2104.     beq    FineVolDown
  2105.  
  2106.     cmp.b    #$ee,d7
  2107.     beq    Pause
  2108. EffComA2exit
  2109.     rts
  2110.  
  2111. EffectCommandsB2:
  2112. ; effects 9xx, bxx, cxx, dxx, fxx chan B
  2113.  
  2114.     move.w    d6,d7
  2115.     beq    EffComB2exit
  2116.     lsr.w    #8,d7
  2117.     move.b    #1,channelenable
  2118.     move.w    d6,d3
  2119.  
  2120.     lea    SamoffsetB(a6),a5
  2121.     cmp.b    #9,d7
  2122.     beq    SampleOffset
  2123.  
  2124.     cmp.b    #$b,d7
  2125.     beq    SongRepeat
  2126.  
  2127.     lea    VolB(a6),a5
  2128.     cmp.b    #$c,d7
  2129.     beq    SetVolume
  2130.  
  2131.     lea    Hex(pc),a5
  2132.     cmp.b    #$d,d7
  2133.     beq    PattBreak
  2134.  
  2135.     cmp.b    #$f,d7
  2136.     beq    SetTempo
  2137.  
  2138. ; effects E0x, E1x, E2x, E6x, E8x, EAx, EBx EEx chan B
  2139.  
  2140.     cmp.w    #$e00,d3
  2141.     beq.w    OffFilter
  2142.  
  2143.     cmp.w    #$e01,d3
  2144.     beq.w    OnFilter
  2145.  
  2146.     cmp.w    #$e50,d3
  2147.     beq.w    OffChannelB
  2148.  
  2149.     cmp.w    #$e51,d3
  2150.     beq.w    OnChannelB
  2151.  
  2152.     move.w    d6,d7
  2153.     lsr.w    #4,d7
  2154.     move.w    d6,d3
  2155.  
  2156.     cmp.b    #$e1,d7
  2157.     beq.w    FineSlideUp
  2158.  
  2159.     cmp.b    #$e2,d7
  2160.     beq.w    FineSlideDown
  2161.  
  2162.     lea    loopsdataschanB(a6),a5
  2163.     cmp.b    #$e6,d7
  2164.     beq.w    Loops
  2165.  
  2166.     lea    SamOffsetB(a6),a5
  2167.     cmp.b    #$e8,d7
  2168.     beq    offsets
  2169.  
  2170.     lea    VolB(a6),a5
  2171.     cmp.b    #$ea,d7
  2172.     beq    FineVolUp
  2173.  
  2174.     cmp.b    #$eb,d7
  2175.     beq    FineVolDown
  2176.  
  2177.     cmp.b    #$ee,d7
  2178.     beq    Pause
  2179. EffComB2exit
  2180.     rts
  2181.  
  2182.  
  2183.  
  2184.  
  2185. EffectCommandsA:
  2186. ; effects 0xx 1xx, 2xx, 3xx, 4xx, 5xx, 6xx, axx, chan A
  2187.     move.w    d2,d7
  2188.     beq    EffComAexit
  2189.     lsr.w    #8,d7
  2190.     clr.b    channelenable
  2191.     move.w    d2,d3
  2192.  
  2193.     lea    OrgPeriodA(a6),a5
  2194.     tst.b    d7
  2195.     beq.w    Arpeggio
  2196.  
  2197.     cmp.b    #1,d7
  2198.     beq.w    PortUp
  2199.  
  2200.     cmp.b    #2,d7
  2201.     beq.w    PortDown
  2202.  
  2203.     lea    GlissandoDatasA(a6),a5
  2204.     cmp.b    #3,d7
  2205.     beq.w    Glissando
  2206.  
  2207.     lea    VibratoDatasA(a6),a5
  2208.     cmp.b    #4,d7
  2209.     beq.w    Vibrato
  2210.  
  2211.     cmp.b    #5,d7
  2212.     beq.w    SlideVolGliss
  2213.  
  2214.     cmp.b    #6,d7
  2215.     beq.w    SlideVolVib
  2216.  
  2217.     lea    VolA(a6),a5
  2218.     cmp.b    #$a,d7
  2219.     beq    SlideVolume
  2220.  
  2221. ; effects E9x, ECx chan A
  2222.  
  2223.     move.w    d2,d7
  2224.     lsr.w    #4,d7
  2225.     move.w    d2,d3
  2226.  
  2227.     lea    RetraceCntA(a6),a5
  2228.     cmp.b    #$e9,d7
  2229.     beq.w    Retrace
  2230.  
  2231.     lea    VolA(a6),a5
  2232.     cmp.b    #$ec,d7
  2233.     beq    CutSample
  2234. EffComAexit
  2235.     rts
  2236.  
  2237.  
  2238. EffectCommandsB:
  2239. ; effects 1xx, 2xx, 3xx, 4xx, 5xx, 6xx, axx, chan B
  2240.     move.w    d6,d7
  2241.     beq    EffComBexit
  2242.     lsr.w    #8,d7
  2243.     move.b    #1,channelenable
  2244.     move.w    d6,d3
  2245.  
  2246.     lea    OrgPeriodB(a6),a5
  2247.     tst.b    d7
  2248.     beq.w    Arpeggio
  2249.  
  2250.     cmp.b    #1,d7
  2251.     beq.w    PortUp
  2252.  
  2253.     cmp.b    #2,d7
  2254.     beq.w    PortDown
  2255.  
  2256.     lea    GlissandoDatasB(a6),a5
  2257.     cmp.b    #3,d7
  2258.     beq.w    Glissando
  2259.  
  2260.     lea    VibratoDatasB(a6),a5
  2261.     cmp.b    #4,d7
  2262.     beq.w    Vibrato
  2263.  
  2264.     cmp.b    #5,d7
  2265.     beq.w    SlideVolGliss
  2266.  
  2267.     cmp.b    #6,d7
  2268.     beq.w    SlideVolVib
  2269.  
  2270.     lea    VolB(a6),a5
  2271.     cmp.b    #$a,d7
  2272.     beq    SlideVolume
  2273.  
  2274. ; effects E9x, ECx chan B
  2275.  
  2276.     move.w    d6,d7
  2277.     lsr.w    #4,d7
  2278.     move.w    d6,d3
  2279.  
  2280.     lea    RetraceCntB(a6),a5
  2281.     cmp.b    #$e9,d7
  2282.     beq.w    Retrace
  2283.  
  2284.     lea    VolB(a6),a5
  2285.     cmp.b    #$ec,d7
  2286.     beq    CutSample
  2287. EffComBexit
  2288.     rts
  2289.  
  2290. ;------------------------------ effects -------------------------------------
  2291.  
  2292. ;looppattpos    (a5)
  2293. ;loopsongpos    1(a5)
  2294. ;loophowmany    2(a5)
  2295.  
  2296. loops:
  2297.     cmp.w    #$e60,d3
  2298.     bne.s    no_loop
  2299.     tst.b    2(a5)
  2300.     bne.s    loops_done
  2301.     move.b    pattpos(pc),(a5)
  2302.     subq.b    #1,(a5)
  2303.     move.b    songpos(pc),1(a5)
  2304.     bra.s    loops_done
  2305. no_loop
  2306.     tst.b    2(a5)
  2307.     beq.s    storehowmany
  2308.     subq.b    #1,2(a5)
  2309.     bne.s    no_done
  2310.     clr.b    (a5)
  2311.     clr.b    1(a5)
  2312.     clr.b    2(a5)
  2313.     bra.s    loops_done
  2314. no_done
  2315.     move.b    (a5),pattpos
  2316.     move.b    1(a5),songpos
  2317.     bra.s    loops_done
  2318. storehowmany
  2319.     and.b    #$0f,d3
  2320.     move.b    d3,2(a5)
  2321.     move.b    (a5),pattpos
  2322.     move.b    1(a5),songpos
  2323. loops_done
  2324.     rts
  2325.  
  2326. Pause:
  2327.     tst.b    PauseEn
  2328.     bne.s    no_pause
  2329.  
  2330.     moveq    #0,d7
  2331.     move.b    d3,d7
  2332.     and.b    #$0f,d7
  2333.     beq.s    No_pause
  2334.     moveq    #0,d3
  2335.     move.b    Temp(pc),d3
  2336.     mulu    d3,d7
  2337.     addq.w    #1,d7
  2338.     move.w    d7,PauseVBL
  2339. no_pause
  2340.     rts
  2341.  
  2342. SongRepeat:
  2343.     move.b    #-1,pattpos
  2344.     moveq    #0,d7
  2345.     move.b    d3,d7
  2346.     cmp.w    #$7f,d7
  2347.     blt.s    songrep_ok
  2348.     move.b    #$7f,d7
  2349. songrep_ok
  2350.     move.b    d7,songpos
  2351.     rts
  2352.  
  2353. PattBreak:
  2354.     moveq    #0,d7
  2355.     move.b    d3,d7
  2356.     cmp.w    #$63,d7
  2357.     blt.s    patt_ok
  2358.     move.b    #$63,d7
  2359. patt_ok
  2360.     cmp.b    #-1,pattpos
  2361.     beq.s    NoAddSP
  2362.     addq.b    #1,songpos
  2363. NoAddSP
  2364.     move.b    (a5,d7.w),d7
  2365.     move.b    d7,pattpos
  2366.     subq.b    #1,pattpos
  2367.     rts
  2368.  
  2369. SampleOffset:
  2370.     moveq    #0,d7
  2371.     move.b    (a5),d7
  2372.     lsl.w    #8,d7
  2373.     lsl.l    #8,d7
  2374.     and.w    #$00ff,d3
  2375.     lsl.w    #8,d3
  2376.     add.w    d3,d7
  2377.     tst.b    channelenable
  2378.     bne.s    SamOffsChanB
  2379.     add.l    d7,(a2,d1.w)
  2380.     rts
  2381. SamOffsChanB
  2382.     add.l    d7,124(a2,d5.w)
  2383.     rts
  2384.  
  2385.  
  2386. offsets:
  2387.     move.b    d3,d7
  2388.     and.b    #$0f,d7
  2389.     move.b    d7,(a5)
  2390.     rts
  2391.  
  2392. SetTempo:
  2393.     moveq    #0,d7
  2394.     move.b    d3,d7
  2395.     cmp.w    #$1f,d7
  2396.     bgt.s    Cia_temp
  2397.     move.b    d3,temp
  2398.     move.b    d3,count
  2399.     rts
  2400. Cia_temp
  2401.     tst.l    CiaBase
  2402.     beq.s    NoCia_Temp
  2403.     move.w    d7,CiaTempo
  2404.     move.w    #1,CiaChanged
  2405. NoCia_Temp
  2406.     rts
  2407.  
  2408. OffChannelA:
  2409.     bset    #0,OnOffChanA(a6)
  2410.     rts
  2411. OnChannelA:
  2412.     bclr    #0,OnOffChanA(a6)
  2413.     rts
  2414. OffChannelB:
  2415.     bset    #0,OnOffChanB(a6)
  2416.     rts
  2417. OnChannelB:
  2418.     bclr    #0,OnOffChanB(a6)
  2419.     rts
  2420.  
  2421. OffFilter:
  2422.     bclr    #1,$bfe001
  2423.     rts
  2424. OnFilter:
  2425.     bset    #1,$bfe001
  2426.     rts
  2427.  
  2428.  
  2429.  
  2430. Retrace:
  2431.     cmp.b    #1,count
  2432.     bne.s    retrno_2
  2433.     clr.b    (a5)
  2434. retrno_2
  2435.     moveq    #0,d7
  2436.     move.b    d3,d7
  2437.     and.b    #$0f,d7
  2438.     subq.b    #1,d7
  2439.     cmp.b    (a5),d7
  2440.     bne.s    retrno_1
  2441.  
  2442.     tst.b    channelenable
  2443.     beq.s    retr_chan_a
  2444.     move.l    (a0,d5.w),124(a2,d5.w)    ; adres sampla
  2445.     move.b    #1,OffEnable(a6)
  2446.     bra.s    retr_chan_b
  2447. retr_chan_a
  2448.     move.b    #1,OffEnable(a6)
  2449.     move.l    (a0,d1.w),(a2,d1.w)    ; adres sampla
  2450. retr_chan_b
  2451.     clr.b    (a5)
  2452.     rts
  2453. retrno_1
  2454.     addq.b    #1,(a5)
  2455. no_retrace_1
  2456.     rts
  2457.  
  2458. cutsample:
  2459.     moveq    #0,d7
  2460.     move.b    d3,d7
  2461.     and.b    #$0f,d7
  2462.     cmp.b    count(pc),d7
  2463.     bne.s    no_cut_sam
  2464.     clr.b    (a5)
  2465. no_cut_sam:
  2466.     rts
  2467.  
  2468. ; ------------- arpeggio -------------
  2469. arplist:
  2470.     dc.b 0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1
  2471. Arpeggio:
  2472.     movem.l    d2/a6,-(sp)
  2473.     bsr    ArpeggioMain
  2474.     movem.l    (sp)+,d2/a6
  2475.     rts
  2476.  
  2477. ArpeggioMain:
  2478.     moveq    #0,d7
  2479.     move.b    count(pc),d7
  2480.     subq.b    #1,d7
  2481.  
  2482.     move.b    arplist(pc,d7.w),d7
  2483.     beq.s    arp0
  2484.     cmp.b    #2,d7
  2485.     beq.s    arp2
  2486.  
  2487. arp1:    moveq    #0,d2
  2488.     move.b    d3,d2
  2489.     lsr.b    #4,d2
  2490.     bra.s    arpdo
  2491.  
  2492. arp2:    moveq    #0,d2
  2493.     move.b    d3,d2
  2494.     and.b    #$f,d2
  2495. arpdo:
  2496.     asl.w    #1,d2
  2497.     move.w    (a5),d7
  2498.     lea    periods(pc),a6
  2499.     moveq    #36,d3
  2500. arp3:    cmp.w    (a6)+,d7
  2501.     bge.s    arpfound
  2502.     dbf    d3,arp3
  2503. arp0:
  2504.     tst.b    channelenable
  2505.     bne.s    ARP_chanB1
  2506.     move.w    (a5),d0
  2507.     rts
  2508. ARP_chanB1
  2509.     move.w    (a5),d4
  2510.     rts
  2511. arpfound:
  2512.     add.w    d2,a6
  2513.     cmp.l    #PeriodsEnd,a6
  2514.     ble.s    ArpOk1
  2515.     move.l    #PeriodsEnd,a6
  2516.     moveq    #0,d2
  2517.     bra.s    ArpOk2
  2518. ArpOk1    sub.w    d2,a6
  2519. ArpOk2    tst.b    channelenable
  2520.     bne.s    ARP_chanB2
  2521.     move.w    -2(a6,d2.w),d0
  2522.     rts
  2523. ARP_chanB2
  2524.     move.w    -2(a6,d2.w),d4
  2525.     rts
  2526.  
  2527. ; ------------- portamento up -------------
  2528.  
  2529. PortUp:
  2530.     moveq    #0,d7
  2531.     move.b    d3,d7
  2532.  
  2533.     tst.b    channelenable
  2534.     bne.s    PortUp_chan_b
  2535.     
  2536. PortUp_chan_a
  2537.     tst.b    d7
  2538.     bne.s    NoOldPortUpA
  2539.     move.b    PortUpOldValA(a6),d7
  2540. NoOldPortUpA
  2541.     move.b    d7,PortUpOldValA(a6)
  2542.     sub.w    d7,d0
  2543.     cmp.w    #113,d0
  2544.     bge.s    PortUpOkA
  2545.     move.w    #113,d0
  2546. PortUpOkA
  2547.     rts
  2548.  
  2549. PortUp_chan_b
  2550.     tst.b    d7
  2551.     bne.s    NoOldPortUpB
  2552.     move.b    PortUpOldValB(a6),d7
  2553. NoOldPortUpB
  2554.     move.b    d7,PortUpOldValB(a6)
  2555.     sub.w    d7,d4
  2556.     cmp.w    #113,d4
  2557.     bge.s    PortUpOkB
  2558.     move.w    #113,d4
  2559. PortUpOkB
  2560.     rts
  2561. NoPortUp:
  2562.     rts
  2563.  
  2564. ; ------------- portamento down -------------
  2565. PortDown:
  2566.     moveq    #0,d7
  2567.     move.b    d3,d7
  2568.  
  2569.     tst.b    channelenable
  2570.     bne.s    PortDown_chan_b
  2571. PortDown_chan_a
  2572.     tst.b    d7
  2573.     bne.s    NoOldPortDownA
  2574.     move.b    PortDownOldValA(a6),d7
  2575. NoOldPortDownA
  2576.     move.b    d7,PortDownOldValA(a6)
  2577.     add.w    d7,d0
  2578.     cmp.w    #856,d0
  2579.     ble.s    PortDownOkA
  2580.     move.w    #856,d0
  2581. PortDownOkA
  2582.     rts
  2583.  
  2584. PortDown_chan_b
  2585.     tst.b    d7
  2586.     bne.s    NoOldPortDownB
  2587.     move.b    PortDownOldValB(a6),d7
  2588. NoOldPortDownB
  2589.     move.b    d7,PortDownOldValB(a6)
  2590.     add.w    d7,d4
  2591.     cmp.w    #856,d4
  2592.     ble.s    PortDownOkB
  2593.     move.w    #856,d4
  2594. PortDownOkB
  2595.     rts
  2596. noPortDown:
  2597.     rts
  2598.  
  2599. ; --------------- set volume  -------------
  2600. SetVolume:
  2601.     move.b    d3,(a5)
  2602.     rts
  2603.  
  2604. ; --------------- slide volume up -------------
  2605. SlideVolume:
  2606.     tst.b    d3
  2607.     bne.s    NoOldSlideVol
  2608.     move.b    2(a5),d3    ; Old SlideVolVolue
  2609. NoOldSlideVol
  2610.     move.b    d3,2(a5)
  2611.  
  2612.     moveq    #0,d7
  2613.     move.b    d3,d7
  2614.     cmp.w    #$10,d7
  2615.     blt.s    Voldown
  2616.     lsr.b    #4,d7
  2617.     add.b    d7,(a5)
  2618.     cmp.b    #64,(a5)
  2619.     blt.s    Voldone
  2620.     move.b    #64,(a5)
  2621.     rts
  2622. Voldown
  2623.     sub.b    d3,(a5)
  2624.     tst.b    (a5)
  2625.     bgt.s    Voldone
  2626.     clr.b    (a5)
  2627. Voldone:rts
  2628.  
  2629.  
  2630. ; --------------- fine slide down -------------
  2631. FineSlideDown:
  2632.     move.w    d3,d7
  2633.     and.w    #$000f,d7
  2634.  
  2635.     tst.b    channelenable
  2636.     bne.s    FineSlideDownB
  2637.  
  2638.     add.w    d7,d0
  2639.     cmp.w    #856,d0
  2640.     ble.s    FineSlideDownOkA
  2641.     move.w    #856,d0
  2642. FineSlideDownOkA
  2643.     moveq    #0,d2
  2644.     rts
  2645.  
  2646. FineSlideDownB
  2647.     add.w    d7,d4
  2648.     cmp.w    #856,d4
  2649.     ble.s    FineSlideDownOkB
  2650.     move.w    #856,d4
  2651. FineSlideDownOkB
  2652.     moveq    #0,d6
  2653.     rts
  2654.  
  2655. ; --------------- fine slide up -------------
  2656. FineSlideUp:
  2657.     move.w    d3,d7
  2658.     and.w    #$000f,d7
  2659.  
  2660.     tst.b    channelenable
  2661.     bne.s    FineSlideUpB
  2662.  
  2663.     sub.w    d7,d0
  2664.     cmp.w    #113,d0
  2665.     bge.s    FineSlideUpOkA
  2666.     move.w    #113,d0
  2667. FineSlideUpOkA
  2668.     moveq    #0,d2
  2669.     rts
  2670.  
  2671. FineSlideUpB
  2672.     sub.w    d7,d4
  2673.     cmp.w    #113,d4
  2674.     bge.s    FineSlideUpOkB
  2675.     move.w    #113,d4
  2676. FineSlideUpOkB
  2677.     moveq    #0,d6
  2678.     rts
  2679.  
  2680. ; --------------- fine volume up  -------------
  2681. FineVolUp:
  2682.     move.w    d3,d7
  2683.     and.b    #$0f,d7
  2684.     add.b    d7,(a5)
  2685.     cmp.b    #64,(a5)
  2686.     blt.s    FVUOK
  2687.     move.b    #64,(a5)
  2688. FVUOK
  2689.     tst.b    channelenable
  2690.     bne.s    FVUClrVolB
  2691.     moveq    #0,d2
  2692.     rts
  2693. FVUClrVolB
  2694.     moveq    #0,d6
  2695.     rts
  2696.  
  2697.  
  2698. ; --------------- fine volume down  -------------
  2699. FineVolDown:
  2700.     move.w    d3,d7
  2701.     and.b    #$0f,d7
  2702.     sub.b    d7,(a5)
  2703.     tst.b    (a5)
  2704.     bge.s    FVDOK
  2705.     clr.b    (a5)
  2706. FVDOK
  2707.     tst.b    channelenable
  2708.     bne.s    FVDClrVolB
  2709.     moveq    #0,d2
  2710.     rts
  2711. FVDClrVolB
  2712.     moveq    #0,d6
  2713. NoFVD    rts
  2714.  
  2715.  
  2716. ; ------------- glissando -------------
  2717.  
  2718. ;GlissOldValue:         (a5)
  2719. ;GlissEnable:        1(a5)
  2720. ;GlissOldPeriod:    2(a5)
  2721. ;GlissNewPeriod:    4(a5)
  2722.  
  2723. Glissando:
  2724.     move.w    d3,d7
  2725.     tst.b    d3
  2726.     bne.s    NoOLDgliss
  2727.     move.b    (a5),d3
  2728. NoOLDgliss
  2729.  
  2730.     cmp.b    #1,count
  2731.     bne.s    NoStore
  2732.     move.b    d3,(a5)
  2733. NoStore
  2734.  
  2735.     tst.w    2(a5)
  2736.     beq.w    GlissRTS
  2737.  
  2738.     tst.b    channelenable
  2739.     bne.s    GlissOK1B
  2740.  
  2741. GlissOK1A:
  2742.     tst.w    4(a5)
  2743.     bne.s    GlissOk2
  2744.     move.w    d0,d7
  2745.     move.w    d0,4(a5)
  2746.     move.w    2(a5),d0
  2747.     clr.b    1(a5)
  2748.     cmp.w    d0,d7
  2749.     beq.s    ClrNP
  2750.     bge.w    GlissRTS
  2751.     move.b    #1,1(a5)
  2752.     rts
  2753.  
  2754. GlissOK1B:
  2755.     tst.w    4(a5)
  2756.     bne.s    GlissOk2
  2757.     move.w    d4,d7
  2758.     move.w    d4,4(a5)
  2759.     move.w    2(a5),d4
  2760.     clr.b    1(a5)
  2761.     cmp.w    d4,d7
  2762.     beq.s    ClrNP
  2763.     bge.s    GlissRTS
  2764.     move.b    #1,1(a5)
  2765.     rts
  2766.  
  2767. ClrNP:    clr.w    4(a5)
  2768.     rts
  2769.  
  2770. GlissOk2:
  2771.     move.w    d3,d7
  2772.     and.w    #$0ff,d7
  2773.     tst.w    4(a5)
  2774.     beq.s    Glissrts
  2775.     tst.b    1(a5)
  2776.     bne.s    Glisssub
  2777.     add.w    d7,2(a5)
  2778.     move.w    4(a5),d7
  2779.     cmp.w    2(a5),d7
  2780.     bgt.s    GlissOK3
  2781.     move.w    4(a5),2(a5)
  2782.     clr.w    4(a5)
  2783. GlissOK3:
  2784.     tst.b    channelenable
  2785.     bne.s    GlissChanB
  2786. GlissChanA
  2787.     move.w    2(a5),d0
  2788.     rts
  2789. GlissChanB
  2790.     move.w    2(a5),d4
  2791.     rts
  2792.  
  2793. Glisssub:
  2794.     sub.w    d7,2(a5)
  2795.     move.w    4(a5),d7
  2796.     cmp.w    2(a5),d7
  2797.     blt.s    GlissOK3
  2798.     move.w    4(a5),2(a5)
  2799.     clr.w    4(a5)
  2800.     bra.s    GlissOK3
  2801.  
  2802. Glissrts:
  2803.     rts
  2804.  
  2805. SlideVolGliss:
  2806.     and.w    #$00ff,d3
  2807.     add.w    #$a00,d3
  2808.     tst.b    channelenable
  2809.     bne.s    SlideChanB
  2810.     lea    VolA(a6),a5
  2811.     bra.s    DoSlideChan
  2812. SlideChanB
  2813.     lea    VolB(a6),a5
  2814. DoSlideChan
  2815.     bsr    SlideVolume
  2816.  
  2817.     move.w    #$0300,d3
  2818.     tst.b    channelenable
  2819.     bne.s    GlissBChan
  2820.     lea    GlissandoDatasA(a6),a5
  2821.     bra.s    DoGlissChan
  2822. GlissBChan
  2823.     lea    GlissandoDatasB(a6),a5
  2824. DoGlissChan
  2825.     bra    Glissando
  2826.  
  2827.  
  2828. SlideVolVib:
  2829.     and.w    #$00ff,d3
  2830.     add.w    #$a00,d3
  2831.     tst.b    channelenable
  2832.     bne.s    SlideChanBV
  2833.     lea    VolA(a6),a5
  2834.     bra.s    DoSlideChanV
  2835. SlideChanBV
  2836.     lea    VolB(a6),a5
  2837. DoSlideChanV
  2838.     bsr    SlideVolume
  2839.  
  2840.     move.w    #$0400,d3
  2841.     tst.b    channelenable
  2842.     bne.s    VibBChan
  2843.     lea    VibratoDatasA(a6),a5
  2844.     bra.s    DoVibChan
  2845. VibBChan
  2846.     lea    VibratoDatasB(a6),a5
  2847. DoVibChan
  2848.     bra    Vibrato
  2849.  
  2850.  
  2851.  
  2852.  
  2853. ;VibPeriod    (a5)
  2854. ;VibValue    2(a5)
  2855. ;ViboldValue    3(a5)
  2856.  
  2857. Vibrato:
  2858.     movem.l    d2/d5,-(sp)
  2859.  
  2860.     move.w    d4,d2
  2861.     tst.b    channelenable
  2862.     bne.s    VibCHANB1
  2863.     move.w    d0,d2
  2864. VibCHANB1
  2865.     bsr    VibratoMain
  2866.     tst.b    channelenable
  2867.     bne.s    VibCHANB2
  2868.     move.w    d2,d0
  2869.     bra.s    VibMainDone
  2870. VibCHANB2
  2871.     move.w    d2,d4
  2872. VibMainDone
  2873.     movem.l    (sp)+,d2/d5
  2874.     rts
  2875.  
  2876. VibratoMain:
  2877.     move.b    Count(pc),d7
  2878.     cmp.b    Temp(pc),d7
  2879.     bne.s    NoNewPeriod
  2880.     tst.w    (a5)
  2881.     bne.s    NoNewPeriod
  2882.     move.w    d2,(a5)
  2883. NoNewPeriod
  2884.     move.w    (a5),d2
  2885.     move.b    temp(pc),d7
  2886.     subq    #1,d7
  2887.     cmp.b    count(pc),d7
  2888.     bne.s    DoVibrato
  2889.     clr.w    (a5)
  2890.     rts
  2891. DoVibrato
  2892.     move.b    d3,d5
  2893.     and.b    #$0f,d5
  2894.     bne.s    NoNew1
  2895.     move.b    3(a5),d5
  2896.     and.b    #$0f,d5
  2897.     add.b    d5,d3
  2898. NoNew1
  2899.     move.b    d3,d5
  2900.     and.b    #$f0,d5
  2901.     bne.s    NoNew2
  2902.     move.b    3(a5),d5
  2903.     and.b    #$f0,d5
  2904.     add.b    d5,d3
  2905. NoNew2
  2906.     move.w    d3,-(sp)
  2907.  
  2908.     move.b    d3,3(a5)
  2909.  
  2910.     move.b    d3,d7
  2911.     move.b    2(a5),d3
  2912.     lsr.w    #2,d3
  2913.     and.w    #$1f,d3
  2914.     moveq    #0,d5
  2915.     move.b    VibSin(pc,d3.w),d5
  2916.  
  2917.     move.b    d7,d3
  2918.     and.w    #$f,d3
  2919.     mulu    d3,d5
  2920.     lsr.w    #7,d5
  2921.  
  2922.     tst.b    2(a5)
  2923.     bmi.s    VibSub
  2924.     add.w    d5,d2
  2925.     bra.s    VibNext
  2926. VibSub:
  2927.     sub.w    d5,d2
  2928. VibNext:
  2929.     move.w    d2,d5
  2930.     move.b    d7,d5
  2931.     lsr.w    #2,d5
  2932.     and.w    #$3c,d5
  2933.     add.b    d5,2(a5)
  2934.     move.w    (sp)+,d3
  2935.     rts
  2936. VibSin:
  2937.     dc.b    $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  2938.     dc.b    $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  2939.  
  2940. Calc:    tst.b    OldCpu
  2941.     bne.s    OldCpuRout
  2942.     tst.b    Fast
  2943.     beq.s    OldCpuRout
  2944.     move.l    #35795*2*125,d3
  2945.     moveq    #0,d7
  2946.     move.w    CiaTempo,d7
  2947.     divu.l    d7,d3
  2948.     divu    d0,d3
  2949.     and.l    #$ffff,d3
  2950.     addq    #1,d3
  2951.     rts
  2952. OldCpuRout
  2953.     cmp.w    #70,CiaTempo
  2954.     ble.s    NewRout
  2955.     move.l    #35795*125,d3
  2956.     divu    CiaTempo,d3
  2957.     and.l    #$ffff,d3
  2958.     divu    d0,d3
  2959.     and.l    #$ffff,d3
  2960.     add.w    d3,d3
  2961.     addq    #2,d3
  2962.     rts
  2963. NewRout:move.l    #35795*125/4,d3
  2964.     divu    CiaTempo,d3
  2965.     and.l    #$ffff,d3
  2966.     lsl.l    #2,d3
  2967.     divu    d0,d3
  2968.     and.l    #$ffff,d3
  2969.     add.w    d3,d3
  2970.     addq    #2,d3
  2971.     rts
  2972.  
  2973. mixing:
  2974.     move.w    d0,MixPeriodA
  2975.     move.w    d4,MixPeriodB
  2976.  
  2977.     bsr    Calc
  2978.     movem.l    d0-d6/a0-a4,-(sp)
  2979.  
  2980.     move.l    (a2,d1.w),a0
  2981.  
  2982.     tst.b    OldCpu
  2983.     bne.s    OldCpuRout2
  2984.     tst.b    Fast
  2985.     beq.s    OldCpuRout2
  2986.     move.l    #35795*2*125,d0
  2987.     moveq    #0,d7
  2988.     move.w    CiaTempo,d7
  2989.     divu.l    d7,d0
  2990.     divu    d4,d0
  2991.     and.l    #$ffff,d0
  2992.     addq    #1,d0
  2993.     bra.s    RoutDone
  2994. OldCpuRout2
  2995.     cmp.w    #70,CiaTempo
  2996.     ble.s    NewRout2
  2997.     move.l    #35795*125,d0
  2998.     divu    CiaTempo,d0
  2999.     and.l    #$ffff,d0
  3000.     bra.s    NewRout3
  3001. NewRout2
  3002.     move.l    #35795*125/4,d0
  3003.     divu    CiaTempo,d0
  3004.     and.l    #$ffff,d0
  3005.     lsl.l    #2,d0
  3006. NewRout3
  3007.     divu    d4,d0
  3008.     and.l    #$ffff,d0
  3009.     add.w    d0,d0
  3010.     addq    #2,d0
  3011. RoutDone:
  3012.  
  3013.     move.l    124(a2,d5.w),a1
  3014.     move.l    d0,d4
  3015.     cmp.w    d3,d4
  3016.     ble    noreplace
  3017.  
  3018.     add.l    d0,124(a2,d5.w)
  3019.     exg    d1,d5
  3020.     lea    -124(a2),a2
  3021.  
  3022.     exg    d3,d4
  3023.     exg    d2,d6
  3024.     exg    a0,a1
  3025.     move.w    d3,leng
  3026.     move.b    VolA(a6),d7
  3027.     move.b    VolB(a6),VolA(a6)
  3028.     move.b    d7,VolB(a6)
  3029.  
  3030.     bsr    mix
  3031.     movem.l    (sp)+,d0-d6/a0-a4
  3032.  
  3033.     move.w    leng(pc),d3
  3034.     exg    d0,d4
  3035.     bsr    play
  3036.     exg    d0,d4
  3037.     move.b    VolA(a6),d7
  3038.     move.b    VolB(a6),VolA(a6)
  3039.     move.b    d7,VolB(a6)
  3040.  
  3041.     tst.b    ChangeADR(a6)
  3042.     beq.s    nochadr1
  3043.     move.l    SamRep2(a6),124(a2,d5.w)
  3044. nochadr1:
  3045.     cmp.b    #1,MixDon(a6)
  3046.     beq.s    offsam1
  3047.     rts
  3048.  
  3049. offsam1:clr.l    (a2,d1.w)
  3050.     clr.l    124(a2,d5.w)
  3051.     moveq    #0,d4
  3052.     moveq    #0,d5
  3053.     moveq    #0,d6
  3054.     moveq    #0,d0
  3055.     moveq    #0,d1
  3056.     moveq    #0,d2
  3057.     clr.b    MixDon(a6)
  3058.     rts
  3059.  
  3060. noreplace
  3061.     add.l    d3,(a2,d1.w)
  3062.     bsr    mix
  3063.  
  3064.     movem.l    (sp)+,d0-d6/a0-a4
  3065.  
  3066.     bsr    play
  3067.  
  3068.     tst.b    ChangeADR(a6)
  3069.     beq.s    nochadr2
  3070.     move.l    SamRep2(a6),(a2,d1.w)
  3071. nochadr2:
  3072.     cmp.b    #1,MixDon(a6)
  3073.     beq.s    offsam1
  3074.     rts
  3075.  
  3076.  
  3077. ; --------------- robot -------------
  3078.  
  3079. MakeBuff_ROBOT:
  3080.     move.b    #1,MBRpointer(a6)
  3081.  
  3082.     tst.l    124(a3,d1.w)
  3083.     bne    sampleloop_R
  3084.  
  3085.     movem.l    d0-d1/a4-a5,-(sp)
  3086.     move.l    BuffMixADR(a6),a4
  3087.     move.l    124(a0,d1.w),d0
  3088.     add.l    (a0,d1.w),d0
  3089.     move.w    d3,d7
  3090.     subq    #1,d7
  3091.     move.l    (a2,d1.w),a5
  3092.     cmp.l    d0,a5
  3093.     bgt    realsampleend
  3094.     move.l    a5,d1
  3095. copy_loop_R:
  3096.     cmp.l    d0,a5
  3097.     bgt    sampleend
  3098.     move.b    (a5)+,(a4)+
  3099.     dbf    d7,copy_loop_R
  3100.     movem.l    (sp)+,d0-d1/a4-a5
  3101.     add.l    d3,(a2,d1.w)
  3102.     rts
  3103.  
  3104. sampleloop_R:
  3105.     movem.l    d0-d4/a4-a5,-(sp)
  3106.     move.l    124(a3,d1.w),d4
  3107.     add.l    (a3,d1.w),d4
  3108.     add.l    (a0,d1.w),d4
  3109.  
  3110.     move.w    d3,d7
  3111.     subq    #1,d7
  3112.     move.l    (a2,d1.w),a5
  3113.     move.l    BuffMixADR(a6),a4
  3114. copy_loop2_R:
  3115.     cmp.l    d4,a5
  3116.     bge.s    makeloop_R
  3117.     move.b    (a5)+,(a4)+
  3118.     dbf    d7,copy_loop2_R
  3119.     movem.l    (sp)+,d0-d4/a4-a5
  3120.     add.l    d3,(a2,d1.w)
  3121.     rts
  3122.  
  3123. makeloop_R:
  3124.     move.l    (a3,d1.w),d0
  3125.     add.l    (a0,d1.w),d0
  3126. copy_loop4_R:
  3127.     move.l    d0,a5
  3128. copy_loop3_R:
  3129.     cmp.l    d4,a5
  3130.     bge.s    copy_loop4_R
  3131.     move.b    (a5)+,(a4)+
  3132.     dbf    d7,copy_loop3_R
  3133.     move.l    a5,(a2,d1.w)
  3134.     movem.l    (sp)+,d0-d4/a4-a5
  3135.     rts
  3136.  
  3137. RobotEffect:
  3138.     tst.b    RobotEnable(a6)
  3139.     bne.s    NoROffCH
  3140.     move.b    #1,Offenable(a6)
  3141. NoROffCH
  3142.     move.b    #1,RobotEnable(a6)
  3143.     bsr    MakeBuff_robot
  3144.  
  3145.     tst.b    Fast
  3146.     beq.s    NoCopyFromFAST3
  3147.     bsr    CopyFromFast
  3148.     move.l    (a6),BuffMixADR(a6)
  3149.     move.b    #1,MBRPointer(a6)
  3150. NoCopyFromFAST3
  3151.  
  3152.     move.w    d3,MainDTALEN(a6)
  3153.     bsr    RobotMain
  3154.     bsr    Replace_R
  3155.     rts
  3156.  
  3157. RobotMain:
  3158.     tst.b    d2
  3159.     bne.s    NoOldRobot
  3160.     move.b    RobotOLDVal(a6),d2
  3161. NoOldRobot
  3162.     move.b    d2,RobotOLDVal(a6)
  3163.  
  3164.     moveq    #0,d7
  3165.     move.b    d2,d7
  3166.     add.w    #80,d7
  3167.  
  3168.     move.w    d3,d4
  3169.     lsr.w    #6,d4
  3170.     lsr.w    #2,d7
  3171.     mulu    d7,d4
  3172.  
  3173.     cmp.w    d4,d3
  3174.     ble.s    CLRrobot
  3175.     sub.w    d4,d3
  3176.     addq    #1,d3
  3177.     bra.s    NoRobot
  3178. CLRrobot:
  3179.     moveq    #2,d3
  3180. NoRobot:
  3181.     moveq    #0,d4
  3182.     rts
  3183.  
  3184.  
  3185. play:    move.w    d0,MainPeriod(a6)
  3186.     move.b    #$40,MainVol(a6)
  3187.  
  3188.     cmp.b    #1,OffEnable(a6)
  3189.     bne.w    NoSet3OnEn
  3190.     cmp.w    MainDTALEN(a6),d3
  3191.     beq.s    NoSet3OnEn
  3192.     move.b    #1,OffEnable(a6)
  3193.     clr.w    NoteCount(a6)
  3194.     move.l    BuffBegAdr(a6),(a6)
  3195.     bra.s    NoSet2OnEn
  3196. NoSet3OnEn
  3197.     cmp.b    #2,OffEnable(a6)    ; jesli jedn. dwa mix sampl. to wait
  3198.     bne.w    NoSet1OnEn
  3199.     move.b    #1,OffEnable(a6)
  3200.     clr.w    NoteCount(a6)
  3201.     move.l    BuffBegAdr(a6),(a6)
  3202.     bra.s    NoSet2OnEn
  3203. NoSet1OnEn
  3204.     cmp.b    #1,OffEnable(a6)
  3205.     bne.s    NoSet4OnEn
  3206.     cmp.w    #100,NoteCount(a6)
  3207.     blt.s    NoSet4OnEn
  3208.     clr.w    NoteCount(a6)
  3209.     move.l    BuffBegAdr(a6),(a6)
  3210.     bra.s    NoSet2OnEn
  3211. NoSet4OnEn
  3212.     clr.b    OffEnable(a6)
  3213.     tst.b    Fast
  3214.     bne.s    NoSet2OnEn
  3215.     tst.b    PlayPointer(a6)
  3216.     beq.s    NoSet2OnEn
  3217.     clr.b    PlayPointer(a6)
  3218.     move.b    #1,OffEnable(a6)
  3219.     clr.w    NoteCount(a6)
  3220.     move.l    BuffBegAdr(a6),(a6)
  3221. NoSet2OnEn
  3222.     move.w    d3,MainDTALEN(a6)
  3223.     tst.b    Fast
  3224.     bne.s    CopyFromFAST
  3225.     rts
  3226.  
  3227. CopyFromFAST:
  3228.     move.b    #2,MBRpointer(a6)
  3229.     movem.l    d0-a6,-(sp)
  3230.  
  3231.     move.l    BuffMixADR(a6),a5
  3232.     move.l    (a6),d1
  3233.     and.l    #$ffff,d3
  3234.     add.l    d3,d1
  3235.     cmp.l    BuffEndAdr(a6),d1
  3236.     ble.s    NotEndBufM
  3237.     sub.l    BuffEndAdr(a6),d1
  3238.     move.w    d3,d7
  3239.     sub.w    d1,d7
  3240.     subq.w    #1,d7
  3241.     move.l    (a6),a4
  3242.     bsr    copy_loopM
  3243.     move.l    BuffBegAdr(a6),(a6)
  3244.     move.l    (a6),a4
  3245.     move.w    d1,d7
  3246.     subq.w    #1,d7
  3247.     bsr    copy_loopM
  3248.     bra.s    CopyDoneM
  3249. NotEndBufM
  3250.     move.l    (a6),a4
  3251.     moveq    #0,d7
  3252.     move.w    d3,d7
  3253.     subq    #1,d7
  3254.     bsr    copy_loopM
  3255. CopyDoneM
  3256.     move.l    a4,(a6)
  3257.     movem.l    (sp)+,d0-a6
  3258.     rts
  3259.  
  3260. db_end:
  3261.     move.w    #$f,$dff096
  3262.     clr.w    $dff0a8
  3263.     clr.w    $dff0b8
  3264.     clr.w    $dff0c8
  3265.     clr.w    $dff0d8
  3266.     bsr    FreeMixBuffers
  3267.     rts
  3268.  
  3269. GETVOL1:MACRO
  3270.     move.b    (a0)+,d1
  3271.     move.l    d1,a4
  3272.     move.b    (a4),d1
  3273.     ENDM
  3274.  
  3275. GETVOL2:MACRO
  3276.     move.b    (a1)+,d0
  3277.     move.l    d0,a5
  3278.     move.b    (a5),d0
  3279.     ENDM
  3280.  
  3281. mix:
  3282.     move.b    #1,MBRpointer(a6)
  3283.  
  3284.     movem.l    d5/a2,-(sp)
  3285.     lea    sample_starts,a4
  3286.     lea    (a3),a5            ; smaple repeats
  3287.  
  3288.     move.l    BuffMixADR(a6),a2
  3289.     moveq    #0,d2
  3290.     move.w    d4,d2
  3291.     move.w    d3,d7
  3292.     subq    #1,d7
  3293.  
  3294.     moveq    #0,d0
  3295.     move.b    VolA(a6),d0
  3296.     cmp.w    #$40,d0
  3297.     ble.s    mix_volok1
  3298.     move.b    #$40,VolA(a6)
  3299. mix_volok1
  3300.     moveq    #0,d0
  3301.     move.b    VolB(a6),d0
  3302.     cmp.w    #$40,d0
  3303.     ble.s    mix_volok2
  3304.     move.b    #$40,VolB(a6)
  3305. mix_volok2
  3306.  
  3307.     tst.b    OldCPU
  3308.     beq.s    _68020
  3309.     move.l    d3,d6
  3310.     lsl.l    #8,d6
  3311.     lsl.l    #4,d6
  3312.     divu.w    d2,d6
  3313.     and.l    #$ffff,d6
  3314.     lsl.l    #4,d6
  3315.     bra.s    _68000
  3316. _68020:
  3317.     move.l    d3,d6
  3318.     swap    d6
  3319.     divu.l    d2,d6
  3320. _68000:
  3321.     tst.l    124(a5,d1.w)
  3322.     beq.s    nosamloop2
  3323.     move.l    (a5,d1.w),d4
  3324.     add.l    124(a5,d1.w),d4
  3325.     add.l    (a4,d1.w),d4
  3326.     tst.l    124(a5,d5.w)
  3327.     bne.s    doubleloop
  3328.     bra    samloopmix2
  3329. doubleloop
  3330.     move.l    (a5,d5.w),d0
  3331.     add.l    124(a5,d5.w),d0
  3332.     add.l    (a4,d5.w),d0
  3333.     bra    samloopmix3
  3334. nosamloop2:
  3335.  
  3336.     move.l    124(a4,d1.w),d4
  3337.     add.l    (a4,d1.w),d4
  3338.  
  3339.     tst.l    124(a5,d5.w)
  3340.     beq.s    nosamloop1
  3341.     move.l    (a5,d5.w),d0
  3342.     add.l    124(a5,d5.w),d0
  3343.     add.l    (a4,d5.w),d0
  3344.     bra    samloopmix1
  3345. nosamloop1:
  3346.     move.l    124(a4,d5.w),d0
  3347.     add.l    (a4,d5.w),d0
  3348.     move.l    d0,d5
  3349.  
  3350. ; -------------- mixing norm. sample + norm. sample
  3351.     movem.l    d3-d4,-(sp)
  3352.  
  3353.     moveq    #0,d0
  3354.     moveq    #0,d1
  3355.     move.b    VolA(a6),d0
  3356.     move.b    VolB(a6),d1
  3357.     lsl.w    #8,d0
  3358.     lsl.w    #8,d1
  3359.     move.l    VolTabPTR,a4
  3360.     move.l    VolTabPTR,a5
  3361.     add.l    d0,a4
  3362.     add.l    d1,a5
  3363.  
  3364.     cmp.l    d4,a0
  3365.     bge.w    sammixloop1_11
  3366.  
  3367.     cmp.l    d5,a1
  3368.     bge.w    sammixloop1_111
  3369.  
  3370.     move.l    a0,d0
  3371.     add.l    d3,d0
  3372.     cmp.l    d4,d0
  3373.     bge.w    sammixloop1_1111
  3374.  
  3375.     move.l    a1,d1
  3376.     add.l    d2,d1
  3377.     cmp.l    d5,d1
  3378.     bge.w    sammixloop1_1111
  3379.  
  3380. sammixloop1_1:
  3381.     move.l    a4,d1
  3382.     move.l    a5,d0
  3383.     move.l    d6,d2
  3384.     move.l    d6,d3
  3385.     move.l    #$10000,d4
  3386. mixloop1_1:
  3387.     GETVOL1
  3388.     add.l    d4,d2
  3389.     cmp.l    d2,d3
  3390.     ble.s    newdata1_1
  3391.     add.b    d0,d1
  3392.     move.b    d1,(a2)+
  3393.     dbf    d7,mixloop1_1
  3394.     bra    mixdone
  3395. newdata1_1:
  3396.     add.l    d6,d3
  3397.     GETVOL2
  3398.     add.b    d0,d1
  3399.     move.b    d1,(a2)+
  3400.     dbf    d7,mixloop1_1
  3401.     bra    mixdone
  3402.  
  3403. ;                 test d5,a1
  3404.  
  3405. sammixloop1_11:
  3406.     move.l    a4,d1
  3407.     move.l    a5,d0
  3408.     move.l    d6,d2
  3409.     move.l    d6,d3
  3410.     move.l    #$10000,d4
  3411. mixloop1_11:
  3412.     add.l    d4,d2
  3413.     cmp.l    d2,d3
  3414.     ble.s    newdata1_11
  3415.     move.b    d0,(a2)+
  3416.     dbf    d7,mixloop1_11
  3417.     bra    mixdone
  3418.  
  3419. newdata1_11
  3420.     add.l    d6,d3
  3421.     cmp.l    a1,d5
  3422.     bgt.s    mixgoon2_11
  3423.     clr.b    d0
  3424.     move.b    d0,(a2)+
  3425.     dbf    d7,mixloop1_11
  3426.     bra    mixdone
  3427.  
  3428. mixgoon2_11
  3429.     GETVOL2
  3430.     move.b    d0,(a2)+
  3431.     dbf    d7,mixloop1_11
  3432.     bra    mixdone
  3433.  
  3434. ;                 test d4,a0
  3435.  
  3436. sammixloop1_111:
  3437.     moveq    #0,d0
  3438.     move.l    a4,d1
  3439.     moveq    #0,d2
  3440.     moveq    #0,d6
  3441. mixloop1_111:
  3442.     GETVOL1
  3443.     cmp.l    a0,d4
  3444.     bgt.s    mixgoon1_111
  3445.     move.b    d0,(a2)+
  3446.     dbf    d7,mixloop1_111
  3447.     bra    mixdone
  3448. mixgoon1_111
  3449.     move.b    d1,(a2)+
  3450.     dbf    d7,mixloop1_111
  3451.     bra    mixdone
  3452.  
  3453. ;                 test d4,a0,     d5,a1
  3454.  
  3455. sammixloop1_1111:
  3456.     move.l    a4,d1
  3457.     move.l    a5,d0
  3458.     move.l    d6,d2
  3459.     move.l    d6,d3
  3460.     move.l    d4,a3
  3461.     move.l    #$10000,d4
  3462. mixloop1_1111:
  3463.     GETVOL1
  3464.     cmp.l    a0,a3    ; a0,d4
  3465.     bgt.s    mixgoon1_1111
  3466.     clr.b    d1
  3467. mixgoon1_1111
  3468.     add.l    d4,d2
  3469.     cmp.l    d2,d3
  3470.     ble.s    newdata1_1111
  3471.     add.b    d0,d1
  3472.     move.b    d1,(a2)+
  3473.     dbf    d7,mixloop1_1111
  3474.     bra    mixdone
  3475.  
  3476. newdata1_1111
  3477.     add.l    d6,d3
  3478.     GETVOL2
  3479.     cmp.l    a1,d5
  3480.     bgt.s    mixgoon2_1111
  3481.     clr.b    d0
  3482.     move.b    d1,(a2)+
  3483.     dbf    d7,mixloop1_1111
  3484.     bra    mixdone
  3485. mixgoon2_1111
  3486.     add.b    d0,d1
  3487.     move.b    d1,(a2)+
  3488.     dbf    d7,mixloop1_1111
  3489.     bra    mixdone
  3490.  
  3491.  
  3492.  
  3493. ; -------------- mixing norm. sample + loop. sample
  3494.  
  3495. samloopmix1:
  3496.     movem.l    d3-d4,-(sp)
  3497.     move.l    (a5,d5.w),d1
  3498.     add.l    (a4,d5.w),d1
  3499.     move.l    d1,SamRep1(a6)
  3500.     move.l    d0,d5
  3501.  
  3502.     moveq    #0,d0
  3503.     moveq    #0,d1
  3504.     move.b    VolA(a6),d0
  3505.     move.b    VolB(a6),d1
  3506.     lsl.w    #8,d0
  3507.     lsl.w    #8,d1
  3508.     move.l    VolTabPTR,a4
  3509.     move.l    VolTabPTR,a5
  3510.     add.l    d0,a4
  3511.     add.l    d1,a5
  3512.  
  3513.     cmp.l    a0,d4
  3514.     blt.w    sammixloop1_22
  3515.  
  3516.     move.l    a0,d0
  3517.     add.l    d3,d0
  3518.     cmp.l    d4,d0
  3519.     bge.w    sammixloop1_2
  3520.  
  3521.     move.l    a1,d1
  3522.     add.l    d2,d1
  3523.     cmp.l    d5,d1
  3524.     bge.w    sammixloop1_2
  3525.     bra    sammixloop1_1
  3526.  
  3527. sammixloop1_2:
  3528.     move.l    a4,d1
  3529.     move.l    a5,d0
  3530.     move.l    d6,d2
  3531.     move.l    d6,d3
  3532.     move.l    d4,a3
  3533.     move.l    #$10000,d4
  3534. mixloop1_2:
  3535.     GETVOL1
  3536.     cmp.l    a0,a3
  3537.     bgt.s    mixgoon1_2
  3538.     clr.b    d1
  3539. mixgoon1_2
  3540.     add.l    d4,d2
  3541.     cmp.l    d2,d3
  3542.     ble.s    newdata1_2
  3543.     add.b    d0,d1
  3544.     move.b    d1,(a2)+
  3545.     dbf    d7,mixloop1_2
  3546.     bra    mixdone
  3547. newdata1_2
  3548.     add.l    d6,d3
  3549.     GETVOL2
  3550.     cmp.l    a1,d5
  3551.     bgt.s    mixgoon2_2
  3552.     move.l    SamRep1(a6),a1    ; samrep1
  3553. mixgoon2_2
  3554.     add.b    d0,d1
  3555.     move.b    d1,(a2)+
  3556.     dbf    d7,mixloop1_2
  3557.     bra    mixdone
  3558.  
  3559. sammixloop1_22:
  3560.     move.l    a4,d1
  3561.     move.l    a5,d0
  3562.     move.l    d6,d2
  3563.     move.l    d6,d3
  3564.     move.l    #$10000,d4
  3565. mixloop1_22:
  3566.     add.l    d4,d2
  3567.     cmp.l    d2,d3
  3568.     ble.s    newdata1_22
  3569.     move.b    d0,(a2)+
  3570.     dbf    d7,mixloop1_22
  3571.     bra    mixdone
  3572. newdata1_22
  3573.     add.l    d6,d3
  3574.     GETVOL2
  3575.     cmp.l    a1,d5
  3576.     bgt.s    mixgoon2_22
  3577.     move.l    SamRep1(a6),a1    ; samrep1
  3578. mixgoon2_22
  3579.     move.b    d0,(a2)+
  3580.     dbf    d7,mixloop1_22
  3581.     bra    mixdone
  3582.  
  3583. ; -------------- mixing loop. sample + norm. sample
  3584.  
  3585. samloopmix2:
  3586.     movem.l    d3-d4,-(sp)
  3587.     move.l    124(a4,d5.w),d0
  3588.     add.l    (a4,d5.w),d0
  3589.     move.l    d0,d5
  3590.  
  3591.     move.l    (a5,d1.w),d0
  3592.     add.l    (a4,d1.w),d0
  3593.     move.l    d0,SamRep2(a6)
  3594.  
  3595.     moveq    #0,d0
  3596.     moveq    #0,d1
  3597.     move.b    VolA(a6),d0
  3598.     move.b    VolB(a6),d1
  3599.     lsl.w    #8,d0
  3600.     lsl.w    #8,d1
  3601.     move.l    VolTabPTR,a4
  3602.     move.l    VolTabPTR,a5
  3603.     add.l    d0,a4
  3604.     add.l    d1,a5
  3605.  
  3606.     cmp.l    a1,d5
  3607.     blt.w    sammixloop1_33
  3608.  
  3609.     move.l    a0,d0
  3610.     add.l    d3,d0
  3611.     cmp.l    d4,d0
  3612.     bge.w    sammixloop1_3
  3613.  
  3614.     move.l    a1,d1
  3615.     add.l    d2,d1
  3616.     cmp.l    d5,d1
  3617.     bge.w    sammixloop1_3
  3618.     bra    sammixloop1_1
  3619.  
  3620. sammixloop1_3
  3621.     move.l    a4,d1
  3622.     move.l    a5,d0
  3623.     move.l    d6,d2
  3624.     move.l    d6,d3
  3625.     move.l    d4,a3
  3626.     move.l    #$10000,d4
  3627. mixloop1_3:
  3628.     GETVOL1
  3629.     cmp.l    a0,a3
  3630.     bgt.s    mixgoon1_3
  3631.     move.l    SamRep2(a6),a0
  3632.     move.b    #1,ChangeADR(a6)
  3633. mixgoon1_3
  3634.     add.l    d4,d2
  3635.     cmp.l    d2,d3
  3636.     ble.s    newdata1_3
  3637.     add.b    d0,d1
  3638.     move.b    d1,(a2)+
  3639.     dbf    d7,mixloop1_3
  3640.     bra    mixdone
  3641. newdata1_3
  3642.     add.l    d6,d3
  3643.     GETVOL2
  3644.     cmp.l    a1,d5
  3645.     bgt.s    mixgoon2_3
  3646.     clr.b    d0
  3647.     move.b    d1,(a2)+
  3648.     dbf    d7,mixloop1_3
  3649.     bra    mixdone
  3650. mixgoon2_3
  3651.     add.b    d0,d1
  3652.     move.b    d1,(a2)+
  3653.     dbf    d7,mixloop1_3
  3654.     bra    mixdone
  3655.  
  3656. sammixloop1_33
  3657.     move.l    a4,d1
  3658.     move.l    a5,d0
  3659. mixloop1_33:
  3660.     move.b    (a0)+,d1
  3661.     cmp.l    a0,d4
  3662.     bgt.s    mixgoon1_33
  3663.     move.l    SamRep2(a6),a0
  3664.     move.b    #1,ChangeADR(a6)
  3665. mixgoon1_33
  3666.     move.l    d1,a4
  3667.     move.b    (a4),(a2)+
  3668.     dbf    d7,mixloop1_33
  3669.     bra    mixdone
  3670.  
  3671. ; -------------- mixing loop. sample + loop. sample
  3672.  
  3673. samloopmix3:
  3674.     movem.l    d3-d4,-(sp)
  3675.     move.l    (a5,d1.w),SamRep2(a6)
  3676.     move.l    (a4,d1.w),d1
  3677.     add.l    d1,SamRep2(a6)
  3678.  
  3679.     move.l    (a5,d5.w),d1
  3680.     add.l    (a4,d5.w),d1
  3681.     move.l    d1,SamRep1(a6)
  3682.     move.l    d0,d5
  3683.  
  3684.     moveq    #0,d0
  3685.     moveq    #0,d1
  3686.     move.b    VolA(a6),d0
  3687.     move.b    VolB(a6),d1
  3688.     lsl.w    #8,d0
  3689.     lsl.w    #8,d1
  3690.     move.l    VolTabPTR,a4
  3691.     move.l    VolTabPTR,a5
  3692.     add.l    d0,a4
  3693.     add.l    d1,a5
  3694.  
  3695.     move.l    a4,d1
  3696.     move.l    a5,d0
  3697.     move.l    d6,d2
  3698.     move.l    d6,d3
  3699.     move.l    d5,a3
  3700.     move.l    d4,d5
  3701.     move.l    #$10000,d4
  3702. mixloop1_4:
  3703.     GETVOL1
  3704.     cmp.l    a0,d5        ; a0;d4
  3705.     bgt.s    mixgoon1_4
  3706.     move.l    SamRep2(a6),a0
  3707.     move.b    #1,ChangeADR(a6)
  3708. mixgoon1_4
  3709.     add.l    d4,d2
  3710.     cmp.l    d2,d3
  3711.     ble.s    newdata1_4
  3712.     add.b    d0,d1
  3713.     move.b    d1,(a2)+
  3714.     dbf    d7,mixloop1_4
  3715.     move.l    a3,d5
  3716.     bra    mixdone
  3717. newdata1_4
  3718.     add.l    d6,d3
  3719.     GETVOL2
  3720.     cmp.l    a1,a3        ; a0;d5
  3721.     bgt.s    mixgoon2_4
  3722.     move.l    SamRep1(a6),a1
  3723. mixgoon2_4
  3724.     add.b    d0,d1
  3725.     move.b    d1,(a2)+
  3726.     dbf    d7,mixloop1_4
  3727.     move.l    a3,d5
  3728.     bra    mixdone
  3729.  
  3730. ; -------------------------------------------------- 
  3731.  
  3732. mixdone:
  3733.     movem.l    (sp)+,d3-d4
  3734.  
  3735.     move.l    d0,-(sp)
  3736.     move.w    MixPeriodB,d0
  3737.     cmp.w    MixPeriodA(pc),d0
  3738.     beq.s    NoSubAD
  3739. ;    lsl.w    #1,d0
  3740. ;    cmp.w    MixPeriodA(pc),d0
  3741. ;    beq.s    NoSubAD
  3742. ;    lsr.w    #2,d0
  3743. ;    cmp.w    MixPeriodA(pc),d0
  3744. ;    beq.s    NoSubAD
  3745.  
  3746.     cmp.l    SamRep1(a6),a1
  3747.     bne.s    NoSubOK
  3748.     move.l    d5,a1
  3749.     bra.s    NoSubAD
  3750. NoSubOK    subq.l    #1,a1
  3751.     subq.l    #2,d5
  3752. NoSubAD    move.l    (sp)+,d0
  3753.  
  3754.     lea    MixDon(a6),a4
  3755.     cmp.l    a0,d4
  3756.     bge.s    notyet3
  3757.     move.b    #3,(a4)
  3758. notyet3
  3759.     cmp.l    a1,d5
  3760.     bge.s    notyet2
  3761.     move.b    #2,(a4)
  3762. notyet2
  3763.     cmp.l    a1,d5
  3764.     bge.s    notyet1
  3765.     cmp.l    a0,d4
  3766.     bge.s    notyet1
  3767.     move.b    #1,(a4)
  3768. notyet1
  3769.     movem.l    (sp)+,d5/a2
  3770.     move.l    a0,SamRep2(a6)
  3771.     move.l    a1,124(a2,d5.w)
  3772.     rts
  3773.  
  3774. make_voltab:
  3775.     move.l    #VolTab,d0
  3776.     and.l    #$ffffff00,d0
  3777.     move.l    d0,VolTabPTR
  3778.     move.l    d0,a0
  3779.     moveq    #0,d2
  3780.     move.w    #128,d3
  3781.  
  3782.     moveq    #64,d6
  3783. make_voltabl2
  3784.     move.w    #$ff,d7
  3785.     moveq    #0,d0
  3786. make_voltabl1
  3787.     move.b    d0,d1
  3788.     ext.w    d1
  3789.     muls    d2,d1
  3790.     divs    d3,d1
  3791.     cmp.b    #63,d1
  3792.     blt.s    make_volok1
  3793.     moveq    #63,d1
  3794. make_volok1
  3795.     cmp.b    #-64,d1
  3796.     bgt.s    make_volok2
  3797.     moveq    #-64,d1
  3798. make_volok2
  3799.     move.b    d1,(a0)+
  3800.     addq    #1,d0
  3801.     dbf    d7,make_voltabl1
  3802.     addq    #2,d2
  3803.     dbf    d6,make_voltabl2
  3804.     rts
  3805.  
  3806. Hex:
  3807.  dc.b    0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,10,11,12,13,14,15,16,17,18,19
  3808.  dc.b    0,0,0,0,0,0,20,21,22,23,24,25,26,27,28,29,0,0,0,0,0,0,30,31
  3809.  dc.b    32,33,34,35,36,37,38,39,0,0,0,0,0,0,40,41,42,43,44,45,46,47
  3810.  dc.b    48,49,0,0,0,0,0,0,50,51,52,53,54,55,56,57,58,59,0,0,0,0,0,0
  3811.  dc.b    60,61,62,63
  3812.  
  3813. TUNNINGS:
  3814.  
  3815. ; Tuning -8
  3816.     dc.w    907,856,808,762,720,678,640,604,570,538,508,480
  3817.     dc.w    453,428,404,381,360,339,320,302,285,269,254,240
  3818.     dc.w    226,214,202,190,180,170,160,151,143,135,127,120
  3819. ; Tuning -7
  3820.     dc.w    900,850,802,757,715,675,636,601,567,535,505,477
  3821.     dc.w    450,425,401,379,357,337,318,300,284,268,253,238
  3822.     dc.w    225,212,200,189,179,169,159,150,142,134,126,119
  3823. ; Tuning -6
  3824.     dc.w    894,844,796,752,709,670,632,597,563,532,502,474
  3825.     dc.w    447,422,398,376,355,335,316,298,282,266,251,237
  3826.     dc.w    223,211,199,188,177,167,158,149,141,133,125,118
  3827. ; Tuning -5
  3828.     dc.w    887,838,791,746,704,665,628,592,559,528,498,470
  3829.     dc.w    444,419,395,373,352,332,314,296,280,264,249,235
  3830.     dc.w    222,209,198,187,176,166,157,148,140,132,125,118
  3831. ; Tuning -4
  3832.     dc.w    881,832,785,741,699,660,623,588,555,524,494,467
  3833.     dc.w    441,416,392,370,350,330,312,294,278,262,247,233
  3834.     dc.w    220,208,196,185,175,165,156,147,139,131,123,117
  3835. ; Tuning -3
  3836.     dc.w    875,826,779,736,694,655,619,584,551,520,491,463
  3837.     dc.w    437,413,390,368,347,328,309,292,276,260,245,232
  3838.     dc.w    219,206,195,184,174,164,155,146,138,130,123,116
  3839. ; Tuning -2
  3840.     dc.w    868,820,774,730,689,651,614,580,547,516,487,460
  3841.     dc.w    434,410,387,365,345,325,307,290,274,258,244,230
  3842.     dc.w    217,205,193,183,172,163,154,145,137,129,122,115
  3843. ; Tuning -1
  3844.     dc.w    862,814,768,725,684,646,610,575,543,513,484,457
  3845.     dc.w    431,407,384,363,342,323,305,288,272,256,242,228
  3846.     dc.w    216,203,192,181,171,161,152,144,136,128,121,114
  3847. ; Tuning 0, Normal
  3848. PERIODS:
  3849.     dc.w    856,808,762,720,678,640,604,570,538,508,480,453
  3850.     dc.w    428,404,381,360,339,320,302,285,269,254,240,226
  3851.     dc.w    214,202,190,180,170,160,151,143,135,127,120,113
  3852. PERIODSEND:
  3853. ; Tuning 1
  3854.     dc.w    850,802,757,715,674,637,601,567,535,505,477,450
  3855.     dc.w    425,401,379,357,337,318,300,284,268,253,239,225
  3856.     dc.w    213,201,189,179,169,159,150,142,134,126,119,113
  3857. ; Tuning 2
  3858.     dc.w    844,796,752,709,670,632,597,563,532,502,474,447
  3859.     dc.w    422,398,376,355,335,316,298,282,266,251,237,224
  3860.     dc.w    211,199,188,177,167,158,149,141,133,125,118,112
  3861. ; Tuning 3
  3862.     dc.w    838,791,746,704,665,628,592,559,528,498,470,444
  3863.     dc.w    419,395,373,352,332,314,296,280,264,249,235,222
  3864.     dc.w    209,198,187,176,166,157,148,140,132,125,118,111
  3865. ; Tuning 4
  3866.     dc.w    832,785,741,699,660,623,588,555,524,495,467,441
  3867.     dc.w    416,392,370,350,330,312,294,278,262,247,233,220
  3868.     dc.w    208,196,185,175,165,156,147,139,131,124,117,110
  3869. ; Tuning 5
  3870.     dc.w    826,779,736,694,655,619,584,551,520,491,463,437
  3871.     dc.w    413,390,368,347,328,309,292,276,260,245,232,219
  3872.     dc.w    206,195,184,174,164,155,146,138,130,123,116,109
  3873. ; Tuning 6
  3874.     dc.w    820,774,730,689,651,614,580,547,516,487,460,434
  3875.     dc.w    410,387,365,345,325,307,290,274,258,244,230,217
  3876.     dc.w    205,193,183,172,163,154,145,137,129,122,115,109
  3877. ; Tuning 7
  3878.     dc.w    814,768,725,684,646,610,575,543,513,484,457,431
  3879.     dc.w    407,384,363,342,323,305,288,272,256,242,228,216
  3880.     dc.w    204,192,181,171,161,152,144,136,128,121,114,108
  3881.  
  3882.  
  3883.     Section    bufors,bss_c
  3884.  
  3885. sample_buff1_4:
  3886.     ds.b    BuffSize+4
  3887. sample_buff1_1:
  3888.     ds.b    BuffSize+4
  3889. sample_buff1_2:
  3890.     ds.b    BuffSize+4
  3891. sample_buff1_3:
  3892.     ds.b    BuffSize+4
  3893.  
  3894.     Section    tabs,bss_p
  3895.  
  3896. VolTabPTR:    ds.l    1
  3897.         ds.b    256
  3898. VolTab:        ds.b    65*256
  3899. UnPackedData:    ds.l    8
  3900. PattAdresses:    ds.l    129
  3901. sample_starts:    ds.l    31
  3902. sample_lenghts:    ds.l    31
  3903. sample_pos1:    ds.l    31
  3904.         ds.l    31
  3905. sample_pos2:    ds.l    31
  3906.         ds.l    31
  3907. sample_pos3:    ds.l    31
  3908.         ds.l    31
  3909. sample_pos4:    ds.l    31
  3910.         ds.l    31
  3911. ; Channel 1A&1B
  3912. Channel1:    ds.b    ChanArea
  3913. ; Channel 2A&2B datas
  3914. Channel2:    ds.b    ChanArea
  3915. ; Channel 3A&3B datas
  3916. Channel3:    ds.b    ChanArea
  3917. ; Channel 4A&4B datas
  3918. Channel4:    ds.b    ChanArea
  3919.  
  3920.     Section    module,data_p
  3921. module:    incbin    "dh2:x2.DIGI"
  3922.