home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 4 / CDPD_IV.bin / amfm / amfm11 / utilities / prorun / prorunner.s.pp / prorunner.s
Text File  |  1994-06-20  |  40KB  |  1,846 lines

  1. *****************************************************
  2. * NOTE :                                            *
  3. * This Replayer Source has been included in this    *
  4. * distribution with the permission of SANITY !!!    *
  5. * For this i am extremely grateful.                 *
  6. * However, if you use this source, remember to give *
  7. * SANITY credit for the routine (it is after all    *
  8. * their hard work...)                               *
  9. *                                                   *
  10. * SHAYERA - PARASITE                                *
  11. *****************************************************
  12.  
  13. ; Remember This code is © Copyright 1992,1993 Cosmos of Sanity
  14. ; This distribution is © Copyright 1992,1993 Shayera/Parasite
  15. ***************
  16. * TESTPROGRAM *
  17. ***************
  18.  
  19. start:
  20.     move.l    #pr_data,pr_module
  21.     bsr.w    pr_init
  22. main:
  23.     cmp.b    #160,$dff006
  24.     bne.s    main
  25.     move.w    #$4000,$dff09a
  26. main2:
  27.     cmp.b    #161,$dff006
  28.     bls.s    main2
  29.  
  30.     move.w    #$f00,$dff180
  31.     bsr.w    pr_music
  32.     clr.w    $dff180
  33.     move.w    #$c000,$dff09a
  34.  
  35.     moveq.l    #0,d0
  36.     move.b    $dff006,d0
  37.     sub.w    #162,d0
  38.  
  39.     move.w    medraster,d1
  40.     add.w    d0,d1
  41.     lsr.w    #1,d1
  42.     move.w    d1,medraster
  43.  
  44.     cmp.w    maxraster,d0
  45.     bls.s    main3
  46.     move.w    d0,maxraster
  47. main3:
  48.     btst    #6,$bfe001
  49.     bne.s    main
  50.  
  51.     move.w    #-1,pr_musicfadedirection    ; Now fading out...
  52. main4:
  53.     cmp.b    #160,$dff006
  54.     bne.s    main4
  55.     move.w    #$4000,$dff09a
  56. main5:
  57.     cmp.b    #161,$dff006
  58.     bls.s    main5
  59.  
  60.     move.w    #$f00,$dff180
  61.     bsr.w    pr_music
  62.     clr.w    $dff180
  63.     move.w    #$c000,$dff09a
  64.  
  65.     moveq.l    #0,d0
  66.     move.b    $dff006,d0
  67.     sub.w    #162,d0
  68.  
  69.     move.w    medraster,d1
  70.     add.w    d0,d1
  71.     lsr.w    #1,d1
  72.     move.w    d1,medraster
  73.     
  74.     cmp.w    maxraster,d0
  75.     bls.s    main6
  76.     move.w    d0,maxraster
  77. main6:
  78.     tst.w    pr_musicfadect
  79.     bne.s    main4
  80.  
  81.     bsr.w    pr_end    
  82.     moveq.l    #0,d0
  83.     move.l    d0,d1
  84.     move.w    maxraster,d0
  85.     move.w    medraster,d1
  86.     rts
  87.  
  88. maxraster:    dc.w    0
  89. medraster:    dc.w    0
  90.  
  91. *****************************************
  92. *                    *
  93. * PRORUNNER V1.0            *
  94. * --------------            *
  95. * CODED BY COSMOS OF SANITY IN 1992    *
  96. *                    *
  97. *****************************************
  98. *                    *
  99. * Supporting the following effects:    *
  100. *                    *
  101. *    - Fade Sound in/out        *
  102. *    - Finetune            *
  103. *    - Normal play or Arpeggio    *
  104. *    - Slide Frequenz up        *
  105. *    - Slide    Frequenz down        *
  106. *    - Tone Portamento        *
  107. *    - Vibrato            *
  108. *    - Tone Portamento+Volume Slide    *
  109. *    - Vibrato + Volume Slide    *
  110. *    - Tremolo            *
  111. *    - Set SampleOffset        *
  112. *    - Volume Slide            *
  113. *    - Position Jump            *
  114. *    - Set Volume            *
  115. *    - Pattern Break            *
  116. *    - Set Speed            *
  117. * - E-Commands:                *
  118. *    - Set Filter            *
  119. *    - Fine Slide Up            *
  120. *    - Fine Slide Down        *
  121. *    - Glissando Control        *
  122. *    - Set Vibrato Waveform        *
  123. *    - Set Finetune            *
  124. *    - Set Loop / Jump to Loop    *
  125. *    - Set Tremolo Waveform        *
  126. *    - Retrig Note            *
  127. *    - Fine VolumeSlide Up        *
  128. *    - Fine VolumeSlide Down        *
  129. *    - NoteCut            *
  130. *    - NoteDelay            *
  131. *    - PatternDelay            *
  132. *    - FunkRepeat            *
  133. *                    *
  134. *****************************************
  135.  
  136. YES                EQU    1
  137. NO                EQU    0
  138. INCLUDEFADINGROUTINE        EQU    YES
  139.  
  140. SAMPLELENGTHOFFSET        EQU    4
  141. SAMPLEVOLUMEOFFSET        EQU    6
  142. SAMPLEREPEATPOINTOFFSET        EQU    8
  143. SAMPLEWITHLOOP            EQU    12
  144. SAMPLEREPEATLENGTHOFFSET    EQU    14
  145. SAMPLEFINETUNEOFFSET        EQU    16
  146.  
  147. * Init-Routine *******************************************************
  148.  
  149. pr_init:
  150.     lea    pr_framecounter(pc),a6
  151.     move.l    pr_module(pc),a0
  152.     cmp.l    #0,a0
  153.     bne.s    pr_init1
  154.     rts
  155. pr_init1:
  156.     cmp.l    #'M.K.',1080(a0)
  157.     beq.s    pr_init2
  158.     cmp.l    #'SNT.',1080(a0)
  159.     beq.s    pr_init2
  160.     rts
  161. pr_init2:
  162.     lea    20(a0),a1
  163.     lea    pr_Sampleinfos(pc),a2
  164.     moveq.l    #32,d7
  165.     moveq    #30,d0
  166. pr_init3:
  167.     lea    22(a1),a1        ; Samplenamen überspringen
  168.     move.w    (a1)+,SAMPLELENGTHOFFSET(a2)    ; Samplelength in Words
  169.     lea    pr_periods(pc),a3
  170.     move.b    (a1)+,d2        ; Finetuning
  171.     and.w    #$f,d2
  172.     mulu.w    #36*2,d2
  173.     add.l    d2,a3
  174.     move.l    a3,SAMPLEFINETUNEOFFSET(a2)
  175.     moveq    #0,d1
  176.     move.b    (a1)+,d1
  177.     move.w    d1,SAMPLEVOLUMEOFFSET(a2)    ; Volume
  178.     moveq.l    #0,d1
  179.     move.w    (a1)+,d1        ; Repeatpoint in Bytes
  180.     add.l    d1,d1
  181.     move.l    d1,SAMPLEREPEATPOINTOFFSET(a2)
  182.     move.w    (a1)+,d1
  183.     clr.w    SAMPLEWITHLOOP(a2)
  184.     cmp.w    #1,d1
  185.     bls.s    pr_init3_2
  186.     addq.w    #1,SAMPLEWITHLOOP(a2)
  187. pr_init3_2:
  188.     move.w    d1,SAMPLEREPEATLENGTHOFFSET(a2)    ; Repeatlength
  189.     add.l    d7,a2
  190.     dbf    d0,pr_init3
  191.  
  192.     moveq    #0,d0
  193.     move.b    950(a0),d0        ; Number of patterns
  194.     subq.w    #1,d0
  195.     move.w    d0,pr_highestpattern-pr_framecounter(a6)
  196.     moveq.l    #0,d1
  197.     lea    952(a0),a1        ; 1. Patternpos
  198.     lea    1084(a0),a2        ; 1. Patterndata
  199.     lea    pr_Patternpositions(pc),a3
  200. pr_init4:
  201.     move.b    (a1)+,d2        ; x. Patternpos
  202.     moveq.l    #0,d3
  203.     move.b    d2,d3
  204.     lsl.l    #8,d3
  205.     lsl.l    #2,d3
  206.     add.l    a2,d3
  207.     move.l    d3,(a3)+
  208.     dbf    d0,pr_init4
  209.  
  210.     lea    952(a0),a1
  211.     moveq.l    #0,d1
  212.     moveq    #127,d0
  213. pr_init4_1:
  214.     move.b    (a1)+,d2
  215.     cmp.b    d1,d2            ; Highest Pattern ?
  216.     bls.s    pr_init4_2
  217.     move.b    d2,d1
  218. pr_init4_2:
  219.     dbf    d0,pr_init4_1
  220.     addq.w    #1,d1
  221.     lsl.l    #8,d1
  222.     lsl.l    #2,d1            ; Highest Pattern * 1024 Bytes
  223.     move.l    a0,d2
  224.     add.l    #1084,d2
  225.     add.l    d1,d2
  226.     lea    pr_Sampleinfos(pc),a3
  227.     lea    pr_Sampleinfos+SAMPLELENGTHOFFSET(pc),a2
  228.     moveq.l    #32,d7
  229.     move.l    d2,(a3)
  230.     moveq    #29,d0
  231. pr_init4_3:
  232.     move.l    (a3),d1
  233.     add.l    d7,a3
  234.     moveq.l    #0,d2
  235.     move.w    (a2),d2
  236.     add.l    d7,a2
  237.     add.l    d2,d2
  238.     add.l    d2,d1
  239.     move.l    d1,(a3)
  240.     dbf    d0,pr_init4_3
  241.  
  242.     lea    pr_Sampleinfos(pc),a2
  243.     lea    pr_Sampleinfos+SAMPLEREPEATPOINTOFFSET(pc),a3
  244.     moveq.l    #32,d7
  245.     moveq    #30,d0
  246. pr_init4_4:
  247.     move.l    (a2),d1
  248.     add.l    d1,(a3)
  249.     add.l    d7,a2
  250.     add.l    d7,a3
  251.     dbf    d0,pr_init4_4
  252.     
  253.     cmp.l    #'SNT.',1080(a0)
  254.     beq.w    pr_init7
  255.     
  256.     lea    1084(a0),a1
  257.     move.l    pr_Sampleinfos(pc),a2
  258.     move.b    #$f0,d6
  259.     move.w    #$fff,d7
  260. pr_init5:
  261.     move.b    (a1),d0
  262.     move.b    2(a1),d1
  263.     move.w    (a1),d2
  264.     and.w    d7,2(a1)
  265.     and.w    d7,d2
  266.     
  267.     and.b    d6,d0
  268.     lsr.b    #4,d1
  269.     or.b    d1,d0
  270.     move.b    d0,(a1)
  271.     
  272.     tst.w    d2
  273.     beq.s    pr_init5_3
  274.     lea    pr_periods(pc),a4
  275.     moveq    #0,d1
  276. pr_init5_2:
  277.     addq.w    #1,d1
  278.     cmp.w    (a4)+,d2
  279.     bne.s    pr_init5_2
  280.     move.b    d1,1(a1)
  281. pr_init5_3:
  282.     addq.l    #4,a1
  283.     cmp.l    a2,a1
  284.     blt.s    pr_init5    
  285.  
  286.     move.l    #'SNT.',1080(a0)
  287. pr_init7:
  288.     lea    pr_Arpeggiofastlist(pc),a2
  289.     lea    pr_Arpeggiofastlistperiods(pc),a1
  290.     lea    35*2(a1),a1        ; to the end of list...
  291.     moveq    #0,d0
  292.     moveq    #35,d1
  293.     move.w    #999,d2
  294.     moveq    #0,d6
  295. pr_init8:
  296.     move.w    -(a1),d7
  297.     addq.w    #1,d6
  298. pr_init8_2:
  299.     cmp.w    d7,d0
  300.     blt.s    pr_init8_4
  301.     subq.w    #1,d1
  302.     tst.b    d1
  303.     bne.s    pr_init8
  304. pr_init8_3:
  305.     move.b    d1,(a2)+
  306.     dbf    d2,pr_init8_3
  307.     bra.s    pr_init8_5    
  308. pr_init8_4:
  309.     move.b    d1,(a2)+
  310.     addq.w    #1,d0
  311.     dbf    d2,pr_init8_2
  312. pr_init8_5:
  313.  
  314.     lea    pr_channel0(pc),a1
  315.     move.w    #1,(a1)
  316.     move.w    #1,pr_channel1-pr_channel0(a1)
  317.     move.w    #1,pr_channel2-pr_channel0(a1)
  318.     move.w    #1,pr_channel3-pr_channel0(a1)
  319.     addq.l    #2,a1
  320.     moveq    #(pr_channel1-pr_channel0)/2-2,d0
  321. pr_init9_2:
  322.     clr.w    (a1)
  323.     clr.w    pr_channel1-pr_channel0(a1)
  324.     clr.w    pr_channel2-pr_channel0(a1)
  325.     clr.w    pr_channel3-pr_channel0(a1)
  326.     addq.l    #2,a1
  327.     dbf    d0,pr_init9_2
  328.  
  329.     lea    pr_fastperiodlist(pc),a1
  330.     lea    pr_periods(pc),a2
  331.     move.l    a2,(a1)
  332.     moveq.l    #36*2,d1
  333.     moveq    #14,d0
  334. pr_init9_3:
  335.     move.l    (a1)+,d2
  336.     add.l    d1,d2
  337.     move.l    d2,(a1)
  338.     dbf    d0,pr_init9_3
  339.         
  340.     lea    pr_arpeggiofastdivisionlist(pc),a1
  341.     moveq    #0,d1
  342.     move.w    #$ff,d0
  343. pr_init9_4:
  344.     move.b    d1,(a1)+
  345.     subq.b    #1,d1
  346.     btst    #7,d1
  347.     beq.s    pr_init9_4_2
  348.     moveq    #2,d1
  349. pr_init9_4_2:
  350.     dbf    d0,pr_init9_4
  351.     
  352.     move.w    #6,pr_speed-pr_framecounter(a6)
  353.     move.w    pr_speed(pc),(a6)
  354.     clr.w    pr_Patternct-pr_framecounter(a6)
  355.     move.w    pr_highestpattern(pc),d0
  356.     move.w    pr_startposition(pc),d1
  357.     blt.s    pr_init9_5
  358.     cmp.w    d0,d1
  359.     bls.s    pr_init9_5_2
  360. pr_init9_5:
  361.     clr.w    pr_startposition-pr_framecounter(a6)
  362. pr_init9_5_2:
  363.     move.w    pr_startposition(pc),pr_currentpattern-pr_framecounter(a6)
  364.     
  365.     lea    pr_Patternpositions(pc),a3
  366.     move.l    a3,d0
  367.     moveq.l    #0,d1
  368.     move.w    pr_startposition(pc),d1
  369.     lsl.l    #2,d1
  370.     add.l    d1,d0
  371.     move.l    d0,pr_Patternpt-pr_framecounter(a6)
  372.     move.l    pr_Patternpt(pc),a5
  373.     move.l    (a5),pr_Currentposition-pr_framecounter(a6)
  374.     
  375.     lea    $dff000,a5
  376.     lea    $bfd000,a0
  377.     move.w    #$2000,$9c(a5)
  378.     move.l    $78.w,pr_old78-pr_framecounter(a6)
  379.     lea    pr_int(pc),a3
  380.     move.l    a3,$78.w
  381.     move.b    #$7f,$d00(a0)
  382.     move.b    #$08,$e00(a0)
  383.     move.b    #$80,$400(a0)
  384.     move.b    #$01,$500(a0)
  385. pr_init10:
  386.     btst    #0,$bfdd00
  387.     beq.s    pr_init10
  388.     move.b    #$81,$d00(a0)
  389.     move.w    #$a000,$9a(a5)
  390.     move.w    #$f,$96(a5)
  391.     clr.w    $a8(a5)
  392.     clr.w    $b8(a5)
  393.     clr.w    $c8(a5)
  394.     clr.w    $d8(a5)
  395.     bset    #1,$bfe001
  396.     rts
  397.  
  398. * End-Routine *********************************************************
  399.  
  400. pr_end:
  401.     lea    $dff000,a5
  402.     move.w    #$f,$96(a5)
  403.     clr.w    $a8(a5)
  404.     clr.w    $b8(a5)
  405.     clr.w    $c8(a5)
  406.     clr.w    $d8(a5)
  407.     move.w    #$2000,$9a(a5)
  408.     move.l    pr_old78(pc),$78.w
  409.     bclr    #1,$bfe001
  410.     rts
  411.  
  412. * Music-Fading ********************************************************
  413.  
  414.     IFEQ    INCLUDEFADINGROUTINE-YES
  415. pr_fademusic:    macro
  416.     lea    pr_musicfadect(pc),a0
  417.     move.w    pr_musicfadedirection(pc),d0
  418.     add.w    d0,(a0)
  419.     cmp.w    #64,(a0)
  420.     bls.s    pr_fademusicend
  421.     bgt.s    pr_fademusictoohigh
  422.     clr.w    (a0)
  423.     clr.w    pr_musicfadedirection-pr_musicfadect(a0)
  424.     rts
  425. pr_fademusictoohigh:
  426.     move.w    #64,(a0)
  427.     clr.w    pr_musicfadedirection-pr_musicfadect(a0)
  428. pr_fademusicend:
  429.     endm
  430.  
  431. pr_musicfadect:        dc.w    64
  432. pr_musicfadedirection:    dc.w    0
  433.     ENDC
  434.     
  435. * MACROS **************************************************************
  436.  
  437. pr_playchannel:    macro            ; do not change: a2-a6
  438.         moveq    #0,d0
  439.         move.b    2(a6),d0
  440.         add.b    d0,d0
  441.         lea    pr_playchannellist(pc),a0
  442.         move.w    (a0,d0.w),d0
  443.         jsr    (a0,d0.w)
  444.         endm
  445.  
  446. pr_checkchannel:    macro
  447.         bsr.w    pr_checkfunkrepeat
  448.         moveq    #0,d0
  449.         move.b    4(a4),d0
  450.         add.b    d0,d0
  451.         lea    pr_Effectchecklist(pc),a0
  452.         move.w    (a0,d0.w),d0
  453.         jsr    (a0,d0.w)
  454.         endm
  455.         
  456. * Music-Routine *******************************************************
  457.  
  458. pr_music:
  459.     IFEQ    INCLUDEFADINGROUTINE-YES
  460.     pr_fademusic
  461.     ENDC
  462.     lea    $dff000,a5
  463.  
  464.     lea    pr_framecounter(pc),a2
  465.     subq.w    #1,(a2)
  466.     beq.s    pr_music2
  467.     bsr.w    pr_checkeffects
  468.     rts
  469. pr_music2:
  470.     cmp.b    #1,pr_patterndelaytime-pr_framecounter+1(a2)
  471.     blt.s    pr_music2_2
  472.     bsr.w    pr_checkeffects
  473.     bra.w    pr_music2_9
  474. pr_music2_2:
  475.  
  476.     move.l    pr_Currentposition(pc),a6
  477.     lea    pr_Channel0(pc),a4
  478.     lea    $a0(a5),a3
  479.     moveq    #1,d7
  480.     pr_playchannel
  481.     move.w    2(a4),6(a3)
  482.     IFEQ    INCLUDEFADINGROUTINE-YES
  483.     move.w    12(a4),d0
  484.     mulu.w    pr_musicfadect-pr_framecounter(a2),d0
  485.     lsr.l    #6,d0
  486.     move.w    d0,8(a3)
  487.     ELSE
  488.     move.w    12(a4),8(a3)
  489.     ENDC
  490.     
  491.     addq.l    #4,a6
  492.     lea    pr_Channel1(pc),a4
  493.     lea    $b0(a5),a3
  494.     moveq    #2,d7
  495.     pr_playchannel
  496.     move.w    2(a4),6(a3)
  497.     IFEQ    INCLUDEFADINGROUTINE-YES
  498.     move.w    12(a4),d0
  499.     mulu.w    pr_musicfadect-pr_framecounter(a2),d0
  500.     lsr.l    #6,d0
  501.     move.w    d0,8(a3)
  502.     ELSE
  503.     move.w    12(a4),8(a3)
  504.     ENDC
  505.  
  506.     addq.l    #4,a6
  507.     lea    pr_Channel2(pc),a4
  508.     lea    $c0(a5),a3
  509.     moveq    #4,d7
  510.     pr_playchannel
  511.     move.w    2(a4),6(a3)
  512.     IFEQ    INCLUDEFADINGROUTINE-YES
  513.     move.w    12(a4),d0
  514.     mulu.w    pr_musicfadect-pr_framecounter(a2),d0
  515.     lsr.l    #6,d0
  516.     move.w    d0,8(a3)
  517.     ELSE
  518.     move.w    12(a4),8(a3)
  519.     ENDC
  520.  
  521.     addq.l    #4,a6
  522.     lea    pr_Channel3(pc),a4
  523.     lea    $d0(a5),a3
  524.     moveq    #8,d7
  525.     pr_playchannel
  526.     move.w    2(a4),6(a3)
  527.     IFEQ    INCLUDEFADINGROUTINE-YES
  528.     move.w    12(a4),d0
  529.     mulu.w    pr_musicfadect-pr_framecounter(a2),d0
  530.     lsr.l    #6,d0
  531.     move.w    d0,8(a3)
  532.     ELSE
  533.     move.w    12(a4),8(a3)
  534.     ENDC
  535.     
  536.     lea    pr_int(pc),a0
  537.     move.l    a0,$78.w
  538.     move.b    #$19,$bfde00
  539.  
  540. pr_music2_9:
  541.     move.w    pr_speed(pc),(a2)
  542.     tst.w    pr_patternhasbeenbreaked-pr_framecounter(a2)
  543.     bne.s    pr_music3
  544.     tst.w    pr_patterndelaytime-pr_framecounter(a2)
  545.     beq.s    pr_music3_1
  546.     subq.w    #1,pr_patterndelaytime-pr_framecounter(a2)
  547.     beq.s    pr_music3_1
  548.     bra.s    pr_nonextpattern
  549. pr_music3:
  550.     clr.w    pr_patternhasbeenbreaked-pr_framecounter(a2)
  551.     tst.w    pr_patterndelaytime-pr_framecounter(a2)
  552.     beq.s    pr_music3_1
  553.     subq.w    #1,pr_patterndelaytime-pr_framecounter(a2)
  554. pr_music3_1:
  555.     moveq.l    #16,d0
  556.     add.l    d0,pr_Currentposition-pr_framecounter(a2)
  557.     lea    pr_Patternct(pc),a1
  558.     addq.w    #1,(a1)
  559.     moveq    #64,d1
  560.     cmp.w    (a1),d1
  561.     bgt.s    pr_nonextpattern
  562.     sub.w    d1,(a1)
  563.     moveq.l    #0,d1
  564.     move.w    (a1),d1
  565.     lsl.w    #4,d1
  566.     addq.l    #4,pr_patternpt-pr_framecounter(a2)
  567.     lea    pr_currentpattern(pc),a0
  568.     addq.w    #1,(a0)
  569.     move.w    (a0),d0
  570.     cmp.w    pr_highestpattern-pr_framecounter(a2),d0
  571.     bls.s    pr_nohighestpattern
  572.     lea    pr_patternpositions(pc),a1
  573.     move.l    a1,pr_Patternpt-pr_framecounter(a2)
  574.     clr.w    (a0)
  575. pr_nohighestpattern:
  576.     move.l    pr_Patternpt-pr_framecounter(a2),a6
  577.     move.l    (a6),d0
  578.     add.l    d1,d0
  579.     move.l    d0,pr_currentposition-pr_framecounter(a2)
  580. pr_nonextpattern:
  581.     rts
  582.  
  583.     
  584. pr_int:
  585.     tst.b    $bfdd00
  586.     move.b    #$19,$bfde00
  587.     move.w    pr_dmacon(pc),$dff096
  588.     move.w    #$2000,$dff09c
  589.     add.l    #pr_int2-pr_int,$78.w
  590.     rte
  591.  
  592. pr_int2:
  593.     tst.b    $bfdd00
  594.     movem.l    a5-a6,-(sp)
  595.     lea    $dff000,a5
  596.     lea    pr_Channel0+6(pc),a6
  597.     move.l    (a6),$a0(a5)
  598.     move.w    4(a6),$a4(a5)
  599.     move.l    pr_Channel1-pr_Channel0(a6),$b0(a5)
  600.     move.w    4+pr_Channel1-pr_Channel0(a6),$b4(a5)
  601.     move.l    pr_Channel2-pr_Channel0(a6),$c0(a5)
  602.     move.w    4+pr_Channel2-pr_Channel0(a6),$c4(a5)
  603.     move.l    pr_Channel3-pr_Channel0(a6),$d0(a5)
  604.     move.w    4+pr_Channel3-pr_Channel0(a6),$d4(a5)
  605.     move.w    #$2000,$9c(a5)
  606.     move.l    pr_old78(pc),78.w
  607.     movem.l    (sp)+,a5-a6
  608.     rte
  609.         
  610. pr_playchannellist:
  611.     dc.w    pr_playnormalchannel-pr_playchannellist        ; 0
  612.     dc.w    pr_playnormalchannel-pr_playchannellist        ; 1
  613.     dc.w    pr_playnormalchannel-pr_playchannellist        ; 2
  614.     dc.w    pr_playtpchannel-pr_playchannellist        ; 3
  615.     dc.w    pr_playnormalchannel-pr_playchannellist        ; 4
  616.     dc.w    pr_playtpchannel-pr_playchannellist        ; 5
  617.     dc.w    pr_playnormalchannel-pr_playchannellist        ; 6
  618.     dc.w    pr_playnormalchannel-pr_playchannellist        ; 7
  619.     dc.w    pr_playnormalchannel-pr_playchannellist        ; 8
  620.     dc.w    pr_playsochannel-pr_playchannellist        ; 9
  621.     dc.w    pr_playnormalchannel-pr_playchannellist        ; A
  622.     dc.w    pr_playnormalchannel-pr_playchannellist        ; B
  623.     dc.w    pr_playnormalchannel-pr_playchannellist        ; C
  624.     dc.w    pr_playnormalchannel-pr_playchannellist        ; D
  625.     dc.w    pr_playnormalchannel-pr_playchannellist        ; E
  626.     dc.w    pr_playnormalchannel-pr_playchannellist        ; F
  627.     
  628. * KANAL NORMAL SPIELEN ************************************************
  629.  
  630. pr_playnormalchannel:
  631.     lea    pr_Sampleinfos(pc),a0
  632.     move.l    a0,a1
  633.     lea    Samplefinetuneoffset(a1),a1
  634.     moveq    #0,d1
  635.     move.b    1(a6),d1
  636.     moveq    #0,d0
  637.     move.b    (a6),d0
  638.     beq.s    pr_playnormalnonewsample    ; Irgendein Sample ?
  639.     move.w    d0,(a4)                ; Trage Samplenummer ein
  640.     tst.b    d1
  641.     bne.s    pr_playnormalsample
  642.     subq.b    #1,d0
  643.     lsl.l    #5,d0
  644.     add.l    d0,a0
  645.     addq.l    #6,a0
  646.     move.w    (a0)+,12(a4)
  647.     move.l    (a0)+,d2
  648.     move.l    d2,6(a4)
  649.     tst.w    (a0)+
  650.     beq.s    pr_playnormalchannel2
  651.     move.l    d2,36(a4)
  652.     move.l    d2,40(a4)
  653. pr_playnormalchannel2:
  654.     move.w    (a0)+,10(a4)
  655.     bra.w    pr_playnormalnonewperiod
  656. pr_playnormalsample:
  657.     move.w    d7,$96(a5)
  658.     or.w    d7,pr_dmacon-pr_framecounter(a2)
  659.     subq.b    #1,d0
  660.     lsl.l    #5,d0
  661.     add.l    d0,a0
  662.     move.l    (a0)+,(a3)        ; Setze Samplestart
  663.     move.w    (a0)+,4(a3)        ; Setze Audiodatenlänge
  664.     move.w    (a0)+,12(a4)        ; Setze Samplelautstärke
  665.     move.l    (a0)+,d2
  666.     move.l    d2,6(a4)        ; Samplerepeatpoint eintragen
  667.     tst.w    (a0)+
  668.     beq.s    pr_playnormalsample2
  669.     move.l    d2,36(a4)
  670.     move.l    d2,40(a4)
  671. pr_playnormalsample2:
  672.     move.w    (a0)+,10(a4)        ; Samplerepeatlength eintragen
  673.     bra.s    pr_playnormalnewperiod
  674. pr_playnormalnonewsample:
  675.     clr.l    14(a4)
  676.     tst.b    d1
  677.     beq.s    pr_playnormalnonewperiod    ; Irgend ne neue Frequenz ?
  678.     move.w    (a4),d0            ; Alte Samplenummer holen
  679.     move.w    d7,$96(a5)
  680.     or.w    d7,pr_dmacon-pr_framecounter(a2)
  681.     subq.b    #1,d0
  682.     lsl.l    #5,d0
  683.     add.l    d0,a0
  684.     move.l    (a0)+,(a3)        ; Setze Samplestart
  685.     move.w    (a0)+,4(a3)        ; Setze Audiodatenlänge
  686.     addq.l    #2,a0
  687.     move.l    (a0)+,d2
  688.     move.l    d2,6(a4)        ; Samplerepeatpoint eintragen
  689.     tst.w    (a0)+
  690.     beq.s    pr_playnormalnonewsample2
  691.     move.l    d2,36(a4)
  692.     move.l    d2,40(a4)
  693. pr_playnormalnonewsample2:
  694.     move.w    (a0)+,10(a4)        ; Samplerepeatlength eintragen
  695. pr_playnormalnewperiod:
  696.     subq.b    #1,d1
  697.     add.b    d1,d1
  698.     move.w    (a4),d0
  699.     subq.b    #1,d0
  700.     lsl.w    #5,d0
  701.     move.l    (a1,d0.w),a1
  702.     move.w    (a1,d1.w),2(a4)        ; Frequenz eintragen
  703. pr_playnormalnonewperiod:
  704.     move.w    2(a6),4(a4)
  705.     bra.w    pr_playeffect
  706.  
  707. * KANAL MIT OFFSET SPIELEN *********************************************
  708.  
  709. pr_playsochannel:
  710.     lea    pr_Sampleinfos(pc),a0
  711.     move.l    a0,a1
  712.     lea    Samplefinetuneoffset(a1),a1
  713.     moveq    #0,d1
  714.     move.b    1(a6),d1
  715.     moveq    #0,d0
  716.     move.b    (a6),d0
  717.     beq.w    pr_playsononewsample    ; Irgendein Sample ?
  718.     move.w    d0,(a4)                ; Trage Samplenummer ein
  719.     tst.b    d1
  720.     bne.s    pr_playsosample
  721.     subq.b    #1,d0
  722.     lsl.l    #5,d0
  723.     add.l    d0,a0
  724.     addq.l    #6,a0
  725.     move.w    (a0)+,12(a4)
  726.     move.l    (a0)+,d2
  727.     move.l    d2,6(a4)
  728.     tst.w    (a0)+
  729.     beq.s    pr_playsochannel2
  730.     move.l    d2,36(a4)
  731.     move.l    d2,40(a4)
  732. pr_playsochannel2:
  733.     move.w    (a0)+,10(a4)
  734.     bra.w    pr_playsononewperiod
  735. pr_playsosample:
  736.     move.w    d7,$96(a5)
  737.     or.w    d7,pr_dmacon-pr_framecounter(a2)
  738.     moveq.l    #0,d6
  739.     move.b    3(a6),d6
  740.     lsl.w    #7,d6
  741.     subq.b    #1,d0
  742.     lsl.l    #5,d0
  743.     add.l    d0,a0
  744.     move.l    (a0)+,d2
  745.     move.w    (a0)+,d3
  746.     cmp.w    d3,d6
  747.     bge.s    pr_playsosample2
  748.     sub.w    d6,d3
  749.     add.l    d6,d6
  750.     add.l    d6,d2
  751.     move.l    d2,(a3)            ; Setze Samplestart
  752.     move.w    d3,4(a3)        ; Setze Audiodatenlänge
  753.     move.w    (a0)+,12(a4)        ; Setze Samplelautstärke
  754.     move.l    (a0)+,d2
  755.     move.l    d2,6(a4)        ; Samplerepeatpoint eintragen
  756.     tst.w    (a0)+
  757.     beq.s    pr_playsosample1
  758.     move.l    d2,36(a4)
  759.     move.l    d2,40(a4)
  760. pr_playsosample1:
  761.     move.w    (a0)+,10(a4)        ; Samplerepeatlength eintragen
  762.     bra.w    pr_playsonewperiod
  763. pr_playsosample2:
  764.     move.w    (a0)+,12(a4)
  765.     move.l    (a0),(a3)
  766.     move.w    4(a0),4(a3)
  767.     move.l    (a0)+,d2
  768.     move.l    d2,6(a4)
  769.     tst.w    (a0)+
  770.     beq.s    pr_playsosample4
  771.     move.l    d2,36(a4)
  772.     move.l    d2,40(a4)
  773. pr_playsosample4:
  774.     move.w    (a0)+,10(a4)
  775.     bra.s    pr_playsonewperiod
  776. pr_playsononewsample:
  777.     clr.l    14(a4)
  778.     tst.b    d1
  779.     beq.w    pr_playsononewperiod    ; Irgend ne neue Frequenz ?
  780.     move.w    (a4),d0            ; Alte Samplenummer holen
  781.     move.w    d7,$96(a5)
  782.     or.w    d7,pr_dmacon-pr_framecounter(a2)
  783.     moveq.l    #0,d6
  784.     move.b    3(a6),d6
  785.     lsl.w    #7,d6
  786.     subq.b    #1,d0
  787.     lsl.l    #5,d0
  788.     add.l    d0,a0
  789.     move.l    (a0)+,d2
  790.     move.w    (a0)+,d3
  791.     cmp.w    d3,d6
  792.     bge.s    pr_playsosample3
  793.     sub.w    d6,d3
  794.     add.l    d6,d6
  795.     add.l    d6,d2
  796.     move.l    d2,(a3)            ; Setze Samplestart
  797.     move.w    d3,4(a3)        ; Setze Audiodatenlänge
  798.     addq.l    #2,a0
  799.     move.l    (a0)+,d2
  800.     move.l    d2,6(a4)        ; Samplerepeatpoint eintragen
  801.     tst.w    (a0)+
  802.     beq.s    pr_playsononewsample2
  803.     move.l    d2,36(a4)
  804.     move.l    d2,40(a4)
  805. pr_playsononewsample2:
  806.     move.w    (a0)+,10(a4)        ; Samplerepeatlength eintragen
  807.     bra.s    pr_playsonewperiod
  808. pr_playsosample3:
  809.     addq.l    #2,a0
  810.     move.l    (a0),(a3)
  811.     move.w    4(a0),4(a3)
  812.     move.l    (a0)+,d2
  813.     move.l    d2,6(a4)
  814.     tst.w    (a0)+
  815.     beq.s    pr_playsosample5
  816.     move.l    d2,36(a4)
  817.     move.l    d2,40(a4)
  818. pr_playsosample5:
  819.     move.w    (a0)+,10(a4)
  820.     bra.w    pr_playsonewperiod
  821. pr_playsonewperiod:
  822.     subq.w    #1,d1
  823.     add.b    d1,d1
  824.     move.w    (a4),d0
  825.     subq.b    #1,d0
  826.     lsl.w    #5,d0
  827.     move.l    (a1,d0.w),a1
  828.     move.w    (a1,d1.w),2(a4)        ; Frequenz eintragen
  829. pr_playsononewperiod:
  830.     move.w    2(a6),4(a4)
  831.     bra.w    pr_playeffect
  832.  
  833. * Kanal spielen mit TONE PORTAMENTO **********************************
  834.  
  835. pr_playtpchannel:
  836.     lea    pr_Sampleinfos(pc),a0
  837.     move.l    a0,a1
  838.     lea    Samplefinetuneoffset(a1),a1
  839.     moveq    #0,d1
  840.     move.b    1(a6),d1
  841.     moveq    #0,d0
  842.     move.b    (a6),d0
  843.     beq.s    pr_playtpnonewsample    ; Irgendein Sample ?
  844.     move.w    d0,(a4)            ; Trage Samplenummer ein
  845.     subq.b    #1,d0
  846.     lsl.l    #5,d0
  847.     add.l    d0,a0
  848.     addq.l    #6,a0
  849.     move.w    (a0)+,12(a4)        ; Lautstärke eintragen
  850.     move.l    (a0)+,d2
  851.     move.l    d2,6(a4)        ; Repeatpoint eintragen
  852.     tst.w    (a0)+
  853.     beq.s    pr_playtpchannel2
  854.     move.l    d2,36(a4)
  855.     move.l    d2,40(a4)
  856. pr_playtpchannel2:
  857.     move.w    (a0)+,10(a4)        ; Repeatlength eintragen
  858. pr_playtpnonewsample:
  859.     tst.b    d1
  860.     beq.s    pr_playtpnonewperiod    ; Irgend ne neue Frequenz ?
  861. pr_playtpnewperiod:
  862.     move.w    2(a4),14(a4)
  863.     subq.w    #1,d1
  864.     add.b    d1,d1
  865.     move.w    (a4),d0
  866.     subq.b    #1,d0
  867.     lsl.w    #5,d0
  868.     move.l    (a1,d0.w),a1
  869.     move.w    (a1,d1.w),d2
  870.     move.w    d2,16(a4)        ; Frequenz eintragen
  871.     bra.s    pr_playtpallowed
  872. pr_playtpnonewperiod:
  873.     tst.w    16(a4)
  874.     bne.s    pr_playtpallowed
  875.     clr.w    14(a4)
  876.     clr.l    26(a4)
  877. pr_playtpallowed:
  878.     move.w    2(a6),4(a4)
  879.     bra.w    pr_playeffect
  880.  
  881. pr_playeffect:
  882.     bsr.w    pr_checkfunkrepeat
  883.     moveq    #0,d0
  884.     move.b    2(a6),d0
  885.     add.b    d0,d0
  886.     lea    pr_normaleffectlist(pc),a0
  887.     move.w    (a0,d0.w),d0
  888.     jmp    (a0,d0.w)
  889. pr_playnoeffect:
  890.     rts
  891.  
  892. pr_normaleffectlist:
  893.     dc.w    pr_playnoeffect-pr_normaleffectlist        ; 0
  894.     dc.w    pr_playnoeffect-pr_normaleffectlist        ; 1
  895.     dc.w    pr_playnoeffect-pr_normaleffectlist        ; 2
  896.     dc.w    pr_preptoneportamento-pr_normaleffectlist    ; 3
  897.     dc.w    pr_prepvibrato-pr_normaleffectlist        ; 4
  898.     dc.w    pr_playnoeffect-pr_normaleffectlist        ; 5
  899.     dc.w    pr_prepvibandvolslide-pr_normaleffectlist    ; 6
  900.     dc.w    pr_preptremolo-pr_normaleffectlist        ; 7
  901.     dc.w    pr_playnoeffect-pr_normaleffectlist        ; 8
  902.     dc.w    pr_playnoeffect-pr_normaleffectlist        ; 9
  903.     dc.w    pr_playnoeffect-pr_normaleffectlist        ; A
  904.     dc.w    pr_jumptopattern-pr_normaleffectlist        ; B
  905.     dc.w    pr_newvolume-pr_normaleffectlist        ; C
  906.     dc.w    pr_patternbreak-pr_normaleffectlist        ; D
  907.     dc.w    pr_play_e_command-pr_normaleffectlist        ; E
  908.     dc.w    pr_newspeed-pr_normaleffectlist            ; F
  909.  
  910. pr_play_e_command:
  911.     moveq    #0,d0
  912.     move.b    3(a6),d0
  913.     lsr.b    #4,d0
  914.     add.b    d0,d0
  915.     lea    pr_e_commandeffectlist(pc),a0
  916.     move.w    (a0,d0.w),d0
  917.     jmp    (a0,d0.w)
  918.     
  919. pr_e_commandeffectlist:
  920.     dc.w    pr_setfilter-pr_e_commandeffectlist        ; 0
  921.     dc.w    pr_fineslideup-pr_e_commandeffectlist        ; 1
  922.     dc.w    pr_fineslidedown-pr_e_commandeffectlist        ; 2
  923.     dc.w    pr_setglissandocontrol-pr_e_commandeffectlist    ; 3
  924.     dc.w    pr_setvibratowaveform-pr_e_commandeffectlist    ; 4
  925.     dc.w    pr_playfinetune-pr_e_commandeffectlist        ; 5
  926.     dc.w    pr_jumptoloop-pr_e_commandeffectlist        ; 6
  927.     dc.w    pr_settremolowaveform-pr_e_commandeffectlist    ; 7
  928.     dc.w    pr_playnoeffect-pr_e_commandeffectlist        ; 8
  929.     dc.w    pr_prepretrignote-pr_e_commandeffectlist    ; 9
  930.     dc.w    pr_finevolumeslideup-pr_e_commandeffectlist    ; A
  931.     dc.w    pr_finevolumeslidedown-pr_e_commandeffectlist    ; B
  932.     dc.w    pr_prepnotecut-pr_e_commandeffectlist        ; C
  933.     dc.w    pr_prepnotedelay-pr_e_commandeffectlist        ; D
  934.     dc.w    pr_preppatterndelay-pr_e_commandeffectlist    ; E
  935.     dc.w    pr_prepfunkrepeat-pr_e_commandeffectlist    ; F
  936.  
  937. pr_preppatterndelay:
  938.     cmp.b    #1,pr_patterndelaytime-pr_framecounter+1(a2)
  939.     bge.s    pr_preppatterndelayend
  940.     move.b    5(a4),d0
  941.     and.b    #$f,d0
  942.     addq.b    #1,d0
  943.     move.b    d0,pr_patterndelaytime-pr_framecounter+1(a2)
  944. pr_preppatterndelayend:
  945.     rts
  946.  
  947. pr_setvibratowaveform:
  948.     move.b    5(a4),d0
  949.     moveq    #$f,d1
  950.     and.w    d1,d0
  951.     move.w    d0,50(a4)
  952.     rts
  953.  
  954. pr_settremolowaveform:
  955.     move.b    5(a4),d0
  956.     moveq    #$f,d1
  957.     and.w    d1,d0
  958.     move.w    d0,52(a4)
  959.     rts
  960.  
  961. pr_setglissandocontrol:
  962.     move.b    5(a4),d0
  963.     moveq    #$f,d1
  964.     and.w    d1,d0
  965.     move.w    d0,48(a4)
  966.     rts
  967.  
  968. pr_playfinetune:
  969.     move.b    5(a4),d0
  970.     moveq    #$f,d1
  971.     and.w    d1,d0
  972.     lsl.w    #2,d0
  973.     lea    pr_fastperiodlist(pc),a0
  974.     move.l    (a0,d0.w),a0
  975.     moveq    #0,d1
  976.     move.b    1(a6),d1
  977.     beq.s    pr_playfinetuneend
  978.     subq.b    #1,d1
  979.     add.w    d1,d1
  980.     move.w    (a0,d1.w),2(a4)        ; Frequenz eintragen
  981. pr_playfinetuneend:
  982.     rts
  983.     
  984. pr_jumptoloop:
  985.     move.b    5(a4),d0
  986.     moveq    #$f,d1
  987.     and.b    d1,d0
  988.     beq.s    pr_prepjumptoloop
  989.     addq.b    #1,47(a4)
  990.     cmp.b    47(a4),d0
  991.     blt.s    pr_jumptoloopend
  992.     moveq.l    #0,d0
  993.     move.w    44(a4),d0
  994.     subq.b    #1,d0
  995.     move.w    d0,pr_patternct-pr_framecounter(a2)
  996.     move.l    pr_patternpt(pc),a0
  997.     move.l    (a0),d5
  998.     lsl.l    #4,d0
  999.     add.l    d0,d5
  1000.     move.l    d5,pr_Currentposition-pr_framecounter(a2)
  1001.     rts
  1002. pr_jumptoloopend:
  1003.     clr.w    46(a4)
  1004.     rts
  1005. pr_prepjumptoloop:
  1006.     tst.w    46(a4)
  1007.     bne.s    pr_prepjumptoloopend
  1008.     move.w    pr_patternct-pr_framecounter(a2),44(a4)
  1009.     clr.w    46(a4)
  1010. pr_prepjumptoloopend:
  1011.     rts
  1012.  
  1013. pr_prepnotedelay:
  1014.     tst.w    (a6)
  1015.     beq.s    pr_prepnotedelayend
  1016.     move.b    5(a4),d0
  1017.     and.b    #$f,d0
  1018.     beq.s    pr_prepnotedelayend
  1019.     move.w    d7,d0
  1020.     not.b    d0
  1021.     and.b    d0,pr_dmacon-pr_framecounter(a2)
  1022.     clr.w    18(a4)
  1023.     rts
  1024. pr_prepnotedelayend:
  1025.     move.w    #$fff,18(a4)
  1026.     rts
  1027.  
  1028. pr_prepretrignote:
  1029.     clr.w    18(a4)
  1030.     tst.w    (a6)
  1031.     bne.s    pr_prepretrignoteend
  1032.     bsr.w    pr_checkretrignote2    
  1033. pr_prepretrignoteend:
  1034.     rts
  1035.  
  1036. pr_prepnotecut:
  1037.     clr.w    18(a4)
  1038.     move.b    5(a4),d0
  1039.     moveq    #$f,d1
  1040.     and.b    d1,d0
  1041.     tst.b    d0
  1042.     bne.s    pr_prepnotecutend
  1043.     clr.w    12(a4)
  1044. pr_prepnotecutend:
  1045.     rts
  1046.     
  1047. pr_finevolumeslideup:
  1048.     move.b    3(a6),d0
  1049.     moveq    #$f,d1
  1050.     and.w    d1,d0
  1051.     move.w    12(a4),d1
  1052.     add.w    d0,d1
  1053.     moveq    #64,d0
  1054.     cmp.w    d0,d1
  1055.     bls.s    pr_finevolumeslideup2
  1056.     move.w    d0,d1
  1057. pr_finevolumeslideup2:
  1058.     move.w    d1,12(a4)
  1059.     rts
  1060.  
  1061. pr_finevolumeslidedown:
  1062.     move.b    3(a6),d0
  1063.     moveq    #$f,d1
  1064.     and.w    d1,d0
  1065.     move.w    12(a4),d1
  1066.     sub.w    d0,d1
  1067.     btst    #15,d1
  1068.     beq.s    pr_finevolumeslidedown2
  1069.     moveq    #0,d1
  1070. pr_finevolumeslidedown2:
  1071.     move.w    d1,12(a4)
  1072.     rts
  1073.  
  1074. pr_fineslideup:
  1075.     move.b    3(a6),d0
  1076.     moveq    #$f,d1
  1077.     and.w    d1,d0
  1078.     move.w    2(a4),d1
  1079.     sub.w    d0,d1
  1080.     cmp.w    #108,d1
  1081.     bge.s    pr_fineslideup2
  1082.     move.w    #108,d1
  1083. pr_fineslideup2:
  1084.     move.w    d1,2(a4)
  1085.     rts
  1086.  
  1087. pr_fineslidedown:
  1088.     move.b    3(a6),d0
  1089.     moveq    #$f,d1
  1090.     and.w    d1,d0
  1091.     move.w    2(a4),d1
  1092.     add.w    d0,d1
  1093.     cmp.w    #907,d1
  1094.     bls.s    pr_fineslidedown2
  1095.     move.w    #907,d1
  1096. pr_fineslidedown2:
  1097.     move.w    d1,2(a4)
  1098.     rts
  1099.  
  1100. pr_setfilter:
  1101.     btst    #0,3(a6)
  1102.     beq.s    pr_setfilteron
  1103. pr_setfilteroff:
  1104.     bset    #1,$bfe001
  1105.     rts
  1106. pr_setfilteron:
  1107.     bclr    #1,$bfe001
  1108.     rts
  1109.  
  1110. pr_prepvibandvolslide:
  1111.     cmp.b    #1,pr_speed-pr_framecounter+1(a2)
  1112.     beq.s    pr_prepvibandvolslide2
  1113.     tst.b    1(a6)
  1114.     beq.s    pr_prepvibandvolslide2
  1115.     clr.w    18(a4)
  1116. pr_prepvibandvolslide2:
  1117.     rts
  1118.  
  1119. pr_preptoneportamento:
  1120.     tst.b    3(a6)
  1121.     beq.s    pr_preptoneportamento2
  1122.     move.w    2(a6),22(a4)
  1123. pr_preptoneportamento2:
  1124.     rts
  1125.  
  1126. pr_prepvibrato:
  1127.     cmp.b    #1,pr_speed-pr_framecounter+1(a2)
  1128.     beq.s    pr_prepvibrato2
  1129.     tst.b    1(a6)
  1130.     beq.s    pr_prepvibrato0
  1131.     clr.w    18(a4)
  1132. pr_prepvibrato0:
  1133.     move.b    5(a4),d0
  1134.     move.b    d0,d1
  1135.     lsr.b    #4,d1
  1136.     beq.s    pr_prepvibrato1
  1137.     move.b    d1,24(a4)
  1138. pr_prepvibrato1:
  1139.     and.b    #$f,d0
  1140.     beq.s    pr_prepvibrato2
  1141.     move.b    d0,25(a4)
  1142. pr_prepvibrato2:
  1143.     rts
  1144.  
  1145. pr_preptremolo:
  1146.     cmp.b    #1,pr_speed-pr_framecounter+1(a2)
  1147.     beq.s    pr_preptremolo2
  1148.     tst.b    1(a6)
  1149.     beq.s    pr_preptremolo0
  1150.     clr.w    18(a4)
  1151. pr_preptremolo0:
  1152.     move.w    12(a4),20(a4)
  1153.     move.b    5(a4),d0
  1154.     move.b    d0,d1
  1155.     lsr.b    #4,d1
  1156.     beq.s    pr_preptremolo1
  1157.     move.b    d1,30(a4)
  1158. pr_preptremolo1:
  1159.     and.b    #$f,d0
  1160.     beq.s    pr_preptremolo2
  1161.     move.b    d0,31(a4)
  1162. pr_preptremolo2:
  1163.     rts
  1164.  
  1165. pr_newvolume:
  1166.     move.b    3(a6),d0
  1167.     cmp.b    #64,d0
  1168.     bls.s    pr_newvolumeend
  1169.     moveq    #64,d0
  1170. pr_newvolumeend:
  1171.     move.b    d0,13(a4)
  1172.     rts
  1173.  
  1174. pr_newspeed:
  1175.     move.b    3(a6),d0
  1176.     tst.b    d0
  1177.     bne.s    pr_newspeed2
  1178.     moveq    #1,d0
  1179. pr_newspeed2:
  1180.     move.b    d0,pr_speed-pr_framecounter+1(a2)
  1181.     rts
  1182.  
  1183. pr_patternbreak:
  1184.     moveq    #0,d0
  1185.     move.b    3(a6),d0
  1186.     add.w    #63,d0
  1187.     move.w    d0,pr_Patternct-pr_framecounter(a2)
  1188.     addq.w    #1,pr_patternhasbeenbreaked-pr_framecounter(a2)
  1189.     rts
  1190.         
  1191. pr_jumptopattern:
  1192.     moveq.l    #0,d0
  1193.     move.b    3(a6),d0
  1194.     subq.b    #1,d0
  1195.     btst    #7,d0
  1196.     beq.s    pr_playjumptopattern2
  1197.     move.w    #128,d0
  1198. pr_playjumptopattern2:
  1199.     move.b    d0,pr_currentpattern-pr_framecounter+1(a2)
  1200.     lsl.l    #2,d0
  1201.     lea    pr_patternpositions(pc),a0
  1202.     add.l    a0,d0
  1203.     move.l    d0,pr_patternpt-pr_framecounter(a2)
  1204.     move.w    #63,pr_patternct-pr_framecounter(a2)
  1205.     addq.w    #1,pr_patternhasbeenbreaked-pr_framecounter(a2)
  1206.     rts
  1207.  
  1208. * Control FX every frame **********************************************
  1209.  
  1210. pr_checkeffects:
  1211.     moveq    #1,d7
  1212.     lea    $a0(a5),a3
  1213.     lea    pr_channel0(pc),a4
  1214.     move.w    12(a4),54(a4)
  1215.     pr_checkchannel
  1216.     IFEQ    INCLUDEFADINGROUTINE-YES
  1217.     move.w    54(a4),d0
  1218.     mulu.w    pr_musicfadect-pr_framecounter(a2),d0
  1219.     lsr.l    #6,d0
  1220.     move.w    d0,8(a3)
  1221.     ELSE
  1222.     move.w    54(a4),8(a3)
  1223.     ENDC
  1224.     
  1225.     moveq    #2,d7
  1226.     lea    $b0(a5),a3
  1227.     lea    pr_channel1(pc),a4
  1228.     move.w    12(a4),54(a4)
  1229.     pr_checkchannel
  1230.     IFEQ    INCLUDEFADINGROUTINE-YES
  1231.     move.w    54(a4),d0
  1232.     mulu.w    pr_musicfadect-pr_framecounter(a2),d0
  1233.     lsr.l    #6,d0
  1234.     move.w    d0,8(a3)
  1235.     ELSE
  1236.     move.w    54(a4),8(a3)
  1237.     ENDC
  1238.  
  1239.     moveq    #4,d7
  1240.     lea    $c0(a5),a3
  1241.     lea    pr_channel2(pc),a4
  1242.     move.w    12(a4),54(a4)
  1243.     pr_checkchannel
  1244.     IFEQ    INCLUDEFADINGROUTINE-YES
  1245.     move.w    54(a4),d0
  1246.     mulu.w    pr_musicfadect-pr_framecounter(a2),d0
  1247.     lsr.l    #6,d0
  1248.     move.w    d0,8(a3)
  1249.     ELSE
  1250.     move.w    54(a4),8(a3)
  1251.     ENDC
  1252.  
  1253.     moveq    #8,d7
  1254.     lea    $d0(a5),a3
  1255.     lea    pr_channel3(pc),a4
  1256.     move.w    12(a4),54(a4)
  1257.     pr_checkchannel
  1258.     IFEQ    INCLUDEFADINGROUTINE-YES
  1259.     move.w    54(a4),d0
  1260.     mulu.w    pr_musicfadect-pr_framecounter(a2),d0
  1261.     lsr.l    #6,d0
  1262.     move.w    d0,8(a3)
  1263.     ELSE
  1264.     move.w    54(a4),8(a3)
  1265.     ENDC
  1266.  
  1267.     lea    pr_int(pc),a0    
  1268.     move.l    a0,$78.w
  1269.     move.b    #$19,$bfde00
  1270.     rts
  1271.  
  1272. ***********************************************************************
  1273.  
  1274. pr_checknotchannel:
  1275.     rts
  1276.  
  1277. pr_check_e_commands
  1278.     moveq    #0,d0
  1279.     move.b    5(a4),d0
  1280.     lsr.b    #4,d0
  1281.     add.b    d0,d0
  1282.     lea    pr_E_Command_checklist(pc),a0
  1283.     move.w    (a0,d0.w),d0
  1284.     jmp    (a0,d0.w)
  1285.     
  1286. pr_Effectchecklist:
  1287.     dc.w    pr_checkarpeggio-pr_Effectchecklist        ; 0
  1288.     dc.w    pr_checkperiodslideup-pr_Effectchecklist    ; 1
  1289.     dc.w    pr_checkperiodslidedown-pr_Effectchecklist    ; 2
  1290.     dc.w    pr_checktoneportamento-pr_Effectchecklist    ; 3
  1291.     dc.w    pr_checkvibrato-pr_Effectchecklist        ; 4
  1292.     dc.w    pr_checktpandvolslide-pr_Effectchecklist    ; 5
  1293.     dc.w    pr_checkvibandvolslide-pr_Effectchecklist    ; 6
  1294.     dc.w    pr_checktremolo-pr_Effectchecklist        ; 7
  1295.     dc.w    pr_checknotchannel-pr_Effectchecklist        ; 8
  1296.     dc.w    pr_checknotchannel-pr_Effectchecklist        ; 9
  1297.     dc.w    pr_checkvolumeslide-pr_Effectchecklist        ; A
  1298.     dc.w    pr_checknotchannel-pr_Effectchecklist        ; B
  1299.     dc.w    pr_checknotchannel-pr_Effectchecklist        ; C
  1300.     dc.w    pr_checknotchannel-pr_Effectchecklist        ; D
  1301.     dc.w    pr_check_e_commands-pr_Effectchecklist        ; E
  1302.     dc.w    pr_checknotchannel-pr_Effectchecklist        ; F
  1303.  
  1304. pr_E_Command_checklist:
  1305.     dc.w    pr_checknotchannel-pr_E_Command_checklist    ; 0
  1306.     dc.w    pr_checknotchannel-pr_E_Command_checklist    ; 1
  1307.     dc.w    pr_checknotchannel-pr_E_Command_checklist    ; 2
  1308.     dc.w    pr_checknotchannel-pr_E_Command_checklist    ; 3
  1309.     dc.w    pr_checknotchannel-pr_E_Command_checklist    ; 4
  1310.     dc.w    pr_checknotchannel-pr_E_Command_checklist    ; 5
  1311.     dc.w    pr_checknotchannel-pr_E_Command_checklist    ; 6
  1312.     dc.w    pr_checknotchannel-pr_E_Command_checklist    ; 7
  1313.     dc.w    pr_checknotchannel-pr_E_Command_checklist    ; 8
  1314.     dc.w    pr_checkretrignote-pr_E_Command_checklist    ; 9
  1315.     dc.w    pr_checknotchannel-pr_E_Command_checklist    ; A
  1316.     dc.w    pr_checknotchannel-pr_E_Command_checklist    ; B
  1317.     dc.w    pr_checknotecut-pr_E_Command_checklist        ; C
  1318.     dc.w    pr_checknotedelay-pr_E_Command_checklist    ; D
  1319.     dc.w    pr_checknotchannel-pr_E_Command_checklist    ; E
  1320.     dc.w    pr_checknotchannel-pr_E_Command_checklist    ; F
  1321.  
  1322. pr_prepfunkrepeat:
  1323.     move.b    5(a4),d0
  1324.     moveq    #$f,d1
  1325.     and.b    d1,d0
  1326.     move.b    d0,33(a4)
  1327.     tst.b    d0
  1328.     bne.s    pr_checkfunkrepeat
  1329.     rts
  1330. pr_checkfunkrepeat:
  1331.     move.w    32(a4),d0
  1332.     beq.s    pr_checkfunkrepeatend
  1333.     lea    pr_FunkTable(pc),a0
  1334.     move.b    (a0,d0.w),d0
  1335.     move.b    35(a4),d1
  1336.     add.b    d0,d1
  1337.     btst    #7,d1
  1338.     bne.s    pr_checkfunkrepeat2
  1339.     move.b    d1,35(a4)
  1340.     rts
  1341. pr_checkfunkrepeat2:
  1342.     clr.b    35(a4)
  1343.  
  1344.     move.l    36(a4),d0
  1345.     beq.s    pr_checkfunkrepeatend
  1346.     move.l    d0,d2
  1347.     moveq.l    #0,d1
  1348.     move.w    10(a4),d1
  1349.     add.l    d1,d0
  1350.     add.l    d1,d0
  1351.     move.l    40(a4),a0
  1352.     addq.l    #1,a0
  1353.     cmp.l    d0,a0
  1354.     blo.s    pr_checkfunkrepeatok
  1355.     move.l    d2,a0
  1356. pr_checkfunkrepeatok:
  1357.     move.l    a0,40(a4)
  1358.     moveq    #-1,d0
  1359.     sub.b    (a0),d0
  1360.     move.b    d0,(a0)
  1361. pr_checkfunkrepeatend:
  1362.     rts
  1363.  
  1364. pr_checknotedelay:
  1365.     move.b    5(a4),d0
  1366.     moveq    #$f,d1
  1367.     and.w    d1,d0
  1368.     bne.s    pr_checknotedelay2
  1369.     rts
  1370. pr_checknotedelay2:
  1371.     move.w    18(a4),d1
  1372.     addq.w    #1,d1
  1373.     cmp.w    d0,d1
  1374.     bne.s    pr_checknotedelayend
  1375.     move.w    d7,$96(a5)
  1376.     or.w    d7,pr_dmacon-pr_framecounter(a2)
  1377.     move.w    (a4),d0
  1378.     subq.w    #1,d0
  1379.     lsl.w    #5,d0
  1380.     lea    pr_Sampleinfos(pc),a0
  1381.     move.l    (a0,d0.w),(a3)
  1382.     move.w    4(a0,d0.w),4(a3)
  1383. pr_checknotedelayend:
  1384.     move.w    d1,18(a4)
  1385.     rts
  1386.  
  1387. pr_checkretrignote:
  1388.     move.b    5(a4),d0
  1389.     moveq    #$f,d1
  1390.     and.w    d1,d0
  1391.     move.w    18(a4),d1
  1392.     addq.w    #1,d1
  1393.     cmp.w    d0,d1
  1394.     bne.s    pr_checkretrignoteend
  1395. pr_checkretrignote2:
  1396.     moveq    #0,d1
  1397.     move.w    d7,$96(a5)
  1398.     or.w    d7,pr_dmacon-pr_framecounter(a2)
  1399.     move.w    (a4),d0
  1400.     subq.w    #1,d0
  1401.     lsl.w    #5,d0
  1402.     lea    pr_Sampleinfos(pc),a0
  1403.     move.l    (a0,d0.w),(a3)
  1404.     move.w    4(a0,d0.w),4(a3)
  1405. pr_checkretrignoteend:
  1406.     move.w    d1,18(a4)
  1407.     rts
  1408.  
  1409. pr_checknotecut:
  1410.     move.b    5(a4),d0
  1411.     moveq    #$f,d1
  1412.     and.w    d1,d0
  1413.     addq.w    #1,18(a4)
  1414.     move.w    18(a4),d1
  1415.     cmp.w    d0,d1
  1416.     blt.s    pr_checknotecutend
  1417.     clr.w    12(a4)
  1418.     clr.w    54(a4)
  1419. pr_checknotecutend:
  1420.     rts
  1421.  
  1422. pr_checkarpeggio:
  1423.     tst.b    5(a4)
  1424.     bne.s    pr_checkarpeggio0
  1425.     rts
  1426. pr_checkarpeggio0:
  1427.     move.w    (a2),d0
  1428.     lea    pr_arpeggiofastdivisionlist(pc),a1
  1429.     move.b    (a1,d0.w),d0
  1430.     beq.s    pr_checkarpeggio2
  1431.     cmp.b    #2,d0
  1432.     beq.s    pr_checkarpeggio1
  1433.     moveq    #0,d0
  1434.     move.b    5(a4),d0
  1435.     lsr.b    #4,d0
  1436.     bra.s    pr_checkarpeggio3
  1437. pr_checkarpeggio2:
  1438.     move.w    2(a4),6(a3)
  1439.     rts
  1440. pr_checkarpeggio1:
  1441.     moveq    #0,d0
  1442.     move.b    5(a4),d0
  1443.     and.b    #$f,d0
  1444. pr_checkarpeggio3:
  1445.     asl.w    #1,d0
  1446.     move.w    (a4),d1
  1447.     lsl.w    #5,d1
  1448.     lea    pr_Sampleinfos+Samplefinetuneoffset(pc),a0
  1449.     move.l    (a0,d1.w),a0
  1450.     move.w    2(a4),d1
  1451.     lea    pr_Arpeggiofastlist(pc),a1
  1452.     moveq.l    #0,d2
  1453.     move.b    (a1,d1.w),d2
  1454.     add.b    d2,d2
  1455.     add.l    d2,a0
  1456.     moveq    #36,d7
  1457. pr_checkarpeggioloop:
  1458.     cmp.w    (a0)+,d1
  1459.     bhs.s    pr_checkarpeggio4
  1460.     dbf    d7,pr_checkarpeggioloop
  1461.     rts
  1462. pr_checkarpeggio4:
  1463.     subq.l    #2,a0
  1464.     move.w    (a0,d0.w),6(a3)
  1465.     rts
  1466.  
  1467. pr_checktpandvolslide:
  1468.     bsr.w    pr_checkvolumeslide
  1469.     moveq    #0,d2
  1470.     move.b    23(a4),d2
  1471.     move.w    26(a4),d0
  1472.     move.w    28(a4),d1
  1473.     bsr.s    pr_checktoneportamento2
  1474.     move.w    14(a4),26(a4)
  1475.     rts
  1476.     
  1477. pr_checktoneportamento:
  1478.     moveq    #0,d2
  1479.     move.b    5(a4),d2
  1480.     bne.s    pr_checktoneportamento1
  1481.     move.b    23(a4),d2
  1482. pr_checktoneportamento1:
  1483.     move.w    14(a4),d0
  1484.     move.w    16(a4),d1
  1485. pr_checktoneportamento2:
  1486.     cmp.w    d0,d1
  1487.     bgt.s    pr_checktoneportamentoplus
  1488.     blt.s    pr_checktoneportamentominus
  1489.     cmp.w    #1,(a2)
  1490.     beq.s    pr_savetpvalues
  1491.     rts
  1492. pr_checktoneportamentoplus:
  1493.     add.w    d2,d0
  1494.     cmp.w    d0,d1
  1495.     bgt.s    pr_checktoneportamentoend
  1496.     move.w    d1,d0
  1497.     move.w    d1,14(a4)
  1498.     move.w    d1,2(a4)
  1499.     tst.w    48(a4)
  1500.     bne.s    pr_checktoneportamentoglissando
  1501.     move.w    d1,6(a3)
  1502.     cmp.w    #1,(a2)
  1503.     beq.s    pr_savetpvalues
  1504.     rts
  1505. pr_checktoneportamentominus:
  1506.     sub.w    d2,d0
  1507.     cmp.w    d0,d1
  1508.     blt.s    pr_checktoneportamentoend
  1509.     move.w    d1,d0
  1510.     move.w    d1,14(a4)
  1511.     move.w    d1,2(a4)
  1512.     tst.w    48(a4)
  1513.     bne.s    pr_checktoneportamentoglissando
  1514.     move.w    d1,6(a3)
  1515.     cmp.w    #1,(a2)
  1516.     beq.s    pr_savetpvalues
  1517.     rts
  1518. pr_checktoneportamentoend:
  1519.     move.w    d0,14(a4)
  1520.     move.w    d0,2(a4)
  1521.     tst.w    48(a4)
  1522.     bne.s    pr_checktoneportamentoglissando
  1523.     move.w    d0,6(a3)
  1524.     cmp.w    #1,(a2)
  1525.     beq.s    pr_savetpvalues
  1526.     rts    
  1527. pr_savetpvalues:
  1528.     move.l    14(a4),26(a4)
  1529.     rts
  1530. pr_checktoneportamentoglissando:
  1531.     move.w    (a4),d1
  1532.     lsl.w    #5,d1
  1533.     lea    pr_Sampleinfos+Samplefinetuneoffset(pc),a0
  1534.     move.l    (a0,d1.w),a0
  1535.     lea    pr_Arpeggiofastlist(pc),a1
  1536.     moveq.l    #0,d2
  1537.     move.b    (a1,d0.w),d2
  1538.     add.w    d2,d2
  1539.     add.l    d2,a0
  1540.     moveq    #0,d3
  1541.     moveq    #36*2,d1
  1542. pr_checktoneportamentoglissandoloop:
  1543.     cmp.w    (a0,d3.w),d0
  1544.     bhs.s    pr_checktoneportamentoglissando2
  1545.     addq.w    #2,d3
  1546.     cmp.w    d1,d3
  1547.     blo.s    pr_checktoneportamentoglissandoloop
  1548.     moveq    #35*2,d3
  1549. pr_checktoneportamentoglissando2:
  1550.     move.w    (a0,d3.w),6(a3)
  1551.     cmp.w    #1,(a2)
  1552.     beq.s    pr_savetpvalues
  1553.     rts
  1554.  
  1555. pr_checkvolumeslide:
  1556.     moveq    #0,d0
  1557.     move.b    5(a4),d0
  1558.     move.w    d0,d1
  1559.     lsr.b    #4,d1
  1560.     beq.s    pr_checkvolumeslidedown
  1561.     move.w    12(a4),d2
  1562.     add.w    d1,d2
  1563.     btst    #15,d2
  1564.     bne.s    pr_checkvolumeslide0
  1565.     moveq    #64,d0
  1566.     cmp.w    d0,d2
  1567.     bgt.s    pr_checkvolumeslide64
  1568.     move.w    d2,12(a4)
  1569.     move.w    d2,54(a4)
  1570.     rts
  1571. pr_checkvolumeslidedown:    
  1572.     and.b    #$f,d0
  1573.     move.w    12(a4),d2
  1574.     sub.w    d0,d2
  1575.     btst    #15,d2
  1576.     bne.s    pr_checkvolumeslide0
  1577.     moveq    #64,d0
  1578.     cmp.w    d0,d2
  1579.     bgt.s    pr_checkvolumeslide64
  1580.     move.w    d2,12(a4)
  1581.     move.w    d2,54(a4)
  1582.     rts
  1583. pr_checkvolumeslide64:
  1584.     move.w    d0,12(a4)
  1585.     move.w    d0,54(a4)
  1586.     rts
  1587. pr_checkvolumeslide0:
  1588.     clr.w    12(a4)
  1589.     clr.w    54(a4)
  1590.     rts
  1591.     
  1592. pr_checkperiodslidedown:
  1593.     moveq    #0,d0
  1594.     move.b    5(a4),d0
  1595.     add.w    d0,2(a4)
  1596.     cmp.w    #907,2(a4)
  1597.     bls.s    pr_checkperiodslidedown2
  1598.     move.w    #907,2(a4)
  1599. pr_checkperiodslidedown2:
  1600.     move.w    2(a4),6(a3)
  1601.     rts
  1602.  
  1603. pr_checkperiodslideup:
  1604.     moveq    #0,d0
  1605.     move.b    5(a4),d0
  1606.     sub.w    d0,2(a4)
  1607.     cmp.w    #108,2(a4)
  1608.     bge.s    pr_checkperiodslideup2
  1609.     move.w    #108,2(a4)
  1610. pr_checkperiodslideup2:
  1611.     move.w    2(a4),6(a3)
  1612.     rts
  1613.  
  1614. pr_checkvibandvolslide:
  1615.     bsr.w    pr_checkvolumeslide
  1616.     moveq.l    #0,d0
  1617.     moveq.l    #0,d1
  1618.     move.b    25(a4),d0
  1619.     move.b    24(a4),d1
  1620.     bra.s    pr_checkvibrato4
  1621.  
  1622. pr_checkvibrato:
  1623.     moveq.l    #0,d0
  1624.     moveq.l    #0,d1
  1625.     move.b    5(a4),d0    ; Tiefe
  1626. pr_checkvibrato2:
  1627.     move.w    d0,d1        ; Geschwindigkeit
  1628.     and.w    #$f,d0
  1629.     bne.s    pr_checkvibrato3
  1630.     move.b    25(a4),d0
  1631. pr_checkvibrato3:
  1632.     lsr.b    #4,d1
  1633.     bne.s    pr_checkvibrato4
  1634.     move.b    24(a4),d1
  1635. pr_checkvibrato4:
  1636.     move.w    18(a4),d2    ;Position
  1637.     lsr.w    #2,d2
  1638.     and.w    #$1f,d2
  1639.     move.w    50(a4),d3
  1640.     beq.s    pr_checkvibratosine
  1641.     btst    #0,d3
  1642.     bne.s    pr_checkvibratorampdown
  1643.     move.b    #255,d3
  1644.     bra.s    pr_checkvibratoset
  1645. pr_checkvibratorampdown:
  1646.     lsl.b    #3,d2
  1647.     tst.b    19(a4)
  1648.     bpl.s    pr_checkvibratorampdown2
  1649.     move.b    #255,d3
  1650.     sub.b    d2,d3
  1651.     bra.s    pr_checkvibratoset
  1652. pr_checkvibratorampdown2:
  1653.     move.b    d2,d3
  1654.     bra.s    pr_checkvibratoset
  1655. pr_checkvibratosine:
  1656.     lea    pr_Vibratotable(pc),a0
  1657.     moveq    #0,d3
  1658.     move.b    (a0,d2.w),d3
  1659. pr_checkvibratoset:
  1660.     mulu.w    d0,d3
  1661.     lsr.w    #7,d3
  1662.     move.w    2(a4),d2
  1663.     tst.b    19(a4)
  1664.     bmi.s    pr_checkvibratoneg
  1665.     add.w    d3,d2
  1666.     bra.s    pr_checkvibrato5
  1667. pr_checkvibratoneg:
  1668.     sub.w    d3,d2
  1669. pr_checkvibrato5:
  1670.     move.w    d2,6(a3)
  1671.     lsl.w    #2,d1
  1672.     add.b    d1,19(a4)
  1673.     rts
  1674.  
  1675. pr_checktremolo:
  1676.     moveq    #0,d0
  1677.     moveq.l    #0,d1
  1678.     move.b    5(a4),d0    ; Tiefe
  1679. pr_checktremolo2:
  1680.     move.w    d0,d1        ; Geschwindigkeit
  1681.     and.w    #$f,d0
  1682.     bne.s    pr_checktremolo3
  1683.     move.b    31(a4),d0
  1684. pr_checktremolo3:
  1685.     lsr.b    #4,d1
  1686.     bne.s    pr_checktremolo4
  1687.     move.b    30(a4),d1
  1688. pr_checktremolo4:
  1689.     move.w    18(a4),d2    ;Position
  1690.     lsr.w    #2,d2
  1691.     and.w    #$1f,d2
  1692.     move.w    52(a4),d3
  1693.     beq.s    pr_checktremolosine
  1694.     btst    #0,d3
  1695.     bne.s    pr_checktremolorampdown
  1696.     move.b    #255,d3
  1697.     bra.s    pr_checktremoloset
  1698. pr_checktremolorampdown:
  1699.     lsl.b    #3,d2
  1700.     tst.b    19(a4)
  1701.     bpl.s    pr_checktremolorampdown2
  1702.     move.b    #255,d3
  1703.     sub.b    d2,d3
  1704.     bra.s    pr_checktremoloset
  1705. pr_checktremolorampdown2:
  1706.     move.b    d2,d3
  1707.     bra.s    pr_checktremoloset
  1708. pr_checktremolosine:
  1709.     lea    pr_Vibratotable(pc),a0
  1710.     moveq    #0,d3
  1711.     move.b    (a0,d2.w),d3
  1712. pr_checktremoloset:
  1713.     mulu.w    d0,d3
  1714.     lsr.w    #6,d3
  1715.     move.w    20(a4),d2
  1716.     tst.b    19(a4)
  1717.     bmi.s    pr_checktremoloneg
  1718.     add.w    d3,d2
  1719.     moveq    #64,d4
  1720.     cmp.w    d4,d2
  1721.     bls.s    pr_checktremolo5
  1722.     move.w    d4,d2
  1723.     bra.s    pr_checktremolo5
  1724. pr_checktremoloneg:
  1725.     sub.w    d3,d2
  1726.     btst    #15,d2
  1727.     beq.s    pr_checktremolo5
  1728.     moveq    #0,d2
  1729. pr_checktremolo5:
  1730.     move.w    d2,54(a4)
  1731.     lsl.w    #2,d1
  1732.     add.b    d1,19(a4)
  1733.     rts
  1734.  
  1735. pr_VibratoTable:    
  1736.     dc.b    0,  24,  49,  74,  97, 120, 141, 161
  1737.     dc.b  180, 197, 212, 224, 235, 244, 250, 253
  1738.     dc.b  255, 253, 250, 244, 235, 224, 212, 197
  1739.     dc.b  180, 161, 141, 120,  97,  74,  49,  24
  1740. pr_FunkTable:
  1741.     dc.b  0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128
  1742.     
  1743. * Variables ***********************************************************
  1744.  
  1745. pr_module:            dc.l    0
  1746. pr_startposition:        dc.w    0
  1747. pr_speed:            dc.w    6
  1748. pr_highestpattern:        dc.w    0
  1749. pr_currentpattern:        dc.w    0
  1750. pr_framecounter:        dc.w    0
  1751. pr_patterndelaytime:        dc.w    0
  1752. pr_patternhasbeenbreaked:    dc.w    0
  1753. pr_Patternpositions:        ds.l    128
  1754. pr_Patternpt:            dc.l    0
  1755. pr_Currentposition:        dc.l    0
  1756. pr_Patternct:            dc.w    0
  1757. pr_Channel0:    dc.w    1
  1758.         ds.w    27
  1759. pr_Channel1:    dc.w    1
  1760.         ds.w    27
  1761. pr_Channel2:    dc.w    1
  1762.         ds.w    27
  1763. pr_Channel3:    dc.w    1
  1764.         ds.w    27
  1765. pr_dmacon:    dc.w    $8000
  1766. pr_old78:    dc.l    0
  1767. pr_arpeggiofastlist:    ds.b    1000
  1768. pr_arpeggiofastdivisionlist:    ds.b    $100
  1769. pr_fastperiodlist:    ds.l    16
  1770. pr_Sampleinfos:        ds.b    32*32
  1771.  
  1772. pr_periods:
  1773. ; Tuning 0, Normal
  1774.     dc.w    856,808,762,720,678,640,604,570,538,508,480,453
  1775.     dc.w    428,404,381,360,339,320,302,285,269,254,240,226
  1776.     dc.w    214,202,190,180,170,160,151,143,135,127,120,113
  1777. ; Tuning 1
  1778.     dc.w    850,802,757,715,674,637,601,567,535,505,477,450
  1779.     dc.w    425,401,379,357,337,318,300,284,268,253,239,225
  1780.     dc.w    213,201,189,179,169,159,150,142,134,126,119,113
  1781. ; Tuning 2
  1782.     dc.w    844,796,752,709,670,632,597,563,532,502,474,447
  1783.     dc.w    422,398,376,355,335,316,298,282,266,251,237,224
  1784.     dc.w    211,199,188,177,167,158,149,141,133,125,118,112
  1785. ; Tuning 3
  1786.     dc.w    838,791,746,704,665,628,592,559,528,498,470,444
  1787.     dc.w    419,395,373,352,332,314,296,280,264,249,235,222
  1788.     dc.w    209,198,187,176,166,157,148,140,132,125,118,111
  1789. ; Tuning 4
  1790.     dc.w    832,785,741,699,660,623,588,555,524,495,467,441
  1791.     dc.w    416,392,370,350,330,312,294,278,262,247,233,220
  1792.     dc.w    208,196,185,175,165,156,147,139,131,124,117,110
  1793. ; Tuning 5
  1794.     dc.w    826,779,736,694,655,619,584,551,520,491,463,437
  1795.     dc.w    413,390,368,347,328,309,292,276,260,245,232,219
  1796.     dc.w    206,195,184,174,164,155,146,138,130,123,116,109
  1797. ; Tuning 6
  1798.     dc.w    820,774,730,689,651,614,580,547,516,487,460,434
  1799.     dc.w    410,387,365,345,325,307,290,274,258,244,230,217
  1800.     dc.w    205,193,183,172,163,154,145,137,129,122,115,109
  1801. pr_Arpeggiofastlistperiods:
  1802. ; Tuning 7
  1803.     dc.w    814,768,725,684,646,610,575,543,513,484,457,431
  1804.     dc.w    407,384,363,342,323,305,288,272,256,242,228,216
  1805.     dc.w    204,192,181,171,161,152,144,136,128,121,114,108
  1806. ; Tuning -8
  1807.     dc.w    907,856,808,762,720,678,640,604,570,538,508,480
  1808.     dc.w    453,428,404,381,360,339,320,302,285,269,254,240
  1809.     dc.w    226,214,202,190,180,170,160,151,143,135,127,120
  1810. ; Tuning -7
  1811.     dc.w    900,850,802,757,715,675,636,601,567,535,505,477
  1812.     dc.w    450,425,401,379,357,337,318,300,284,268,253,238
  1813.     dc.w    225,212,200,189,179,169,159,150,142,134,126,119
  1814. ; Tuning -6
  1815.     dc.w    894,844,796,752,709,670,632,597,563,532,502,474
  1816.     dc.w    447,422,398,376,355,335,316,298,282,266,251,237
  1817.     dc.w    223,211,199,188,177,167,158,149,141,133,125,118
  1818. ; Tuning -5
  1819.     dc.w    887,838,791,746,704,665,628,592,559,528,498,470
  1820.     dc.w    444,419,395,373,352,332,314,296,280,264,249,235
  1821.     dc.w    222,209,198,187,176,166,157,148,140,132,125,118
  1822. ; Tuning -4
  1823.     dc.w    881,832,785,741,699,660,623,588,555,524,494,467
  1824.     dc.w    441,416,392,370,350,330,312,294,278,262,247,233
  1825.     dc.w    220,208,196,185,175,165,156,147,139,131,123,117
  1826. ; Tuning -3
  1827.     dc.w    875,826,779,736,694,655,619,584,551,520,491,463
  1828.     dc.w    437,413,390,368,347,328,309,292,276,260,245,232
  1829.     dc.w    219,206,195,184,174,164,155,146,138,130,123,116
  1830. ; Tuning -2
  1831.     dc.w    868,820,774,730,689,651,614,580,547,516,487,460
  1832.     dc.w    434,410,387,365,345,325,307,290,274,258,244,230
  1833.     dc.w    217,205,193,183,172,163,154,145,137,129,122,115
  1834. ; Tuning -1
  1835.     dc.w    862,814,768,725,684,646,610,575,543,513,484,457
  1836.     dc.w    431,407,384,363,342,323,305,288,272,256,242,228
  1837.     dc.w    216,203,192,181,171,161,152,144,136,128,121,114
  1838.  
  1839. * END OF PRORUNNER ***************************************************
  1840.  
  1841.     SECTION    MUSIC,DATA_C
  1842. pr_data:
  1843.     incbin    "df0:mod.testmodule"
  1844.  
  1845.     END
  1846.