home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Sound / Player / ADK!SR.LHA / RePlayer+Mods / SidMonI+IIReplayer.s < prev   
Encoding:
Text File  |  1980-01-10  |  22.6 KB  |  1,150 lines

  1. ************************************************************
  2. * >>>>> Little RePlayRoutineTester by Adkins/Rascals <<<<< *
  3. ************************************************************
  4.  
  5.         section    'SidMonI+II-RePlayer',code
  6.  
  7.         bra.b    start
  8.         dc.b    ' Written by Adkins ',0
  9.         even
  10.  
  11. start        movem.l    d0-d7/a0-a6,-(a7)
  12.         move.w    #$4000,$00dff09a.l
  13.  
  14.         bsr.b    InitMuzak
  15.  
  16. mouse        cmp.b    #$ff,$00dff006.l
  17.         bne.b    mouse
  18.  
  19.         move.w    #$0055,$00dff180.l
  20.  
  21.         bsr    PlayMuzak
  22.  
  23.         move.w    #$0550,$00dff180.l
  24.  
  25.         btst    #6,$00bfe001.l
  26.         bne.b    mouse
  27.  
  28.         bsr    StopMuzak
  29.  
  30.         move.w    #-$4000,$00dff09a.l
  31.         movem.l    (sp)+,d0-d7/a0-a6
  32.         moveq    #0,d0
  33.         rts
  34.  
  35. **********************************************************************
  36. * >>> SidMonI+II (The MIDI Version) Replayer (c)1990 Turtle Byte <<< *
  37. * ------------------------------------------------------------------ *
  38. * >>> AddCode & MC680x0 UpDate by Adkins of RASCALS (w)195 (GER) <<< *
  39. **********************************************************************
  40. *                                                                    *
  41. * NOTE: This ReplayRoutine can replay modules from SidMon v1.0/v2.0! *
  42. *       All additional coding & design (c)1995 Adkins/Rascals.       *
  43. *                                                                    *
  44. *       SidMon v1.0 Replayer was reassembled from a intro            *
  45. *       by TRSI, dokumented & included.                              *
  46. *                                                                    *
  47. * HOW TO HANDLE:  (like any similar Replayer's)                      *
  48. *                                                                    *
  49. * - Call InitMuzak first. Then call PlayMuzak & to stop the Music,   *
  50. *   call simply StopMuzak !!!                                        *
  51. *                                                                    *
  52. * - This assembly language program is written with MaXoN aSM & has   *
  53. *   been tested with any similar assemblers !!!                      *
  54. *                                                                    *
  55. * - All done with:                       MC68000, ECS, OS2.04        *
  56. *                                                                    *
  57. * - Thanx to Subzero for the original SidMonII-ReplayRoutine !!!     *
  58. *                                                                    *
  59. **********************************************************[28/08/95]**
  60.  
  61. yes    equ    1
  62. no    equ    0
  63. filter    equ    yes
  64.  
  65. **********************************************************************
  66.  
  67. initmuzak    ifeq    filter-yes
  68.         bset    #1,$00bfe001.l
  69.         endif
  70.  
  71. headerone    move.l    #0,$0116.w
  72.         movea.l    song,a0
  73.         cmpi.l    #$41fa0ffa,(a0)
  74.         bne.b    headertwo
  75.         cmpi.l    #$d1e8ffd4,4(a0)
  76.         beq.b    initone
  77. headertwo    cmpi.l    #$610e0839,(a0)
  78.         bne.b    headerthree
  79.         cmpi.l    #$000600bf,4(a0)
  80.         beq.b    inittwo
  81. headerthree    cmpi.l    #$08f90001,(a0)
  82.         bne.b    not_sidmoni
  83.         cmpi.l    #$00bfe001,4(a0)
  84.         beq.b    initthree
  85. not_sidmoni    cmpi.w    #$0000,(a0)
  86.         beq.b    is_sidmonii
  87.         rts
  88.  
  89. is_sidmonii    move.l    #'sid2',rating
  90.         bra.b    is_sidii
  91.         rts    
  92.  
  93. initone        movea.l    song,a0
  94.         jsr    (a0)
  95.         move.b    #1,$0116.w
  96.         rts    
  97.  
  98. inittwo        movea.l    song,a0
  99.         move.w    #$4e75,$0254(a0)
  100.         jsr    $0024(a0)
  101.         move.b    #2,$0116.w
  102.         rts    
  103.  
  104. initthree    movea.l    song,a0
  105.         move.w    #$4e75,$025c(a0)
  106.         jsr    $002c(a0)
  107.         move.b    #3,$0116.w
  108.         rts    
  109.  
  110. is_sidII    movem.l    d0-a6,-(a7)
  111.         lea    $00dff000.l,a6
  112.         move.w    #0,$00a8(a6)
  113.         move.w    #0,$00b8(a6)
  114.         move.w    #0,$00c8(a6)
  115.         move.w    #0,$00d8(a6)
  116.         move.w    #$000f,$0096(a6)
  117.         moveq    #0,d6
  118.         lea    header(pc),a0
  119.         lea    midimode(pc),a2
  120.         moveq    #$003a,d0
  121.         add.l    -6(a2),d0
  122.         move.l    d0,(a0)
  123.         movea.l    -6(a2),a1
  124.         move.w    (a1)+,(a2)+
  125.         move.b    (a1)+,d6
  126.         move.b    d6,(a2)
  127.         move.b    (a1)+,1(a2)
  128.         move.w    (a1)+,d0
  129.         lsr.w    #6,d0
  130.         subq.w    #1,d0
  131.         move.w    d0,-4(a2)
  132.         moveq    #$0040,d0
  133.         move.l    d0,2(a2)
  134.         clr.b    6(a2)
  135.         moveq    #$000a,d0
  136.  
  137. addloop        move.l    (a0)+,d1
  138.         add.l    (a1)+,d1
  139.         move.l    d1,(a0)
  140.         dbra    d0,addloop
  141.         movea.l    a2,a0
  142.         lea    voice1(pc),a2
  143.         moveq    #3,d7
  144.         addq.w    #1,d6
  145.         moveq    #0,d5
  146.  
  147. findloop    clr.w    $0048(a2)
  148.         move.l    d5,(a2)
  149.         add.l    d6,d5
  150.         bsr.w    findnote
  151.         lea    $004a(a2),a2
  152.         dbra    d7,findloop
  153.         moveq    #0,d0
  154.         movea.l    patterns(pc),a0
  155.         move.w    -(a0),d0
  156.         add.l    patterns(pc),d0
  157.         movea.l    d0,a1
  158.         lea    voice1(pc),a2
  159.         moveq    #$003f,d3
  160.  
  161. plus        bsr.w    getnote2
  162.         dbra    d3,plus
  163.         clr.w    $0044(a2)
  164.         move.l    a1,d0
  165.         addq.l    #1,d0
  166.         bclr    #0,d0
  167.         movea.l    d0,a0
  168.         movea.l    sampletab(pc),a1
  169.         move.w    sampleno(pc),d0
  170.  
  171. calcaddloop    move.l    a0,(a1)
  172.         moveq    #0,d1
  173.         move.w    4(a1),d1
  174.         add.l    d1,d1
  175.         adda.l    d1,a0
  176.         lea    $0040(a1),a1
  177.         dbra    d0,calcaddloop
  178.         movem.l    (a7)+,d0-a6
  179.         rts    
  180.  
  181. **********************************************************************
  182.  
  183. header        blk.w    4,0
  184. positions    blk.w    2,0
  185. ntransposes    blk.w    2,0
  186. itransposes    blk.w    2,0
  187. ins1        blk.w    2,0
  188. wavelists    blk.w    2,0
  189. arpeggiolists    blk.w    2,0
  190. vibratolists    blk.w    2,0
  191. sampletab    blk.w    2,0
  192. patternpointer    blk.w    2,0
  193. patterns    blk.w    2,0
  194.  
  195. **********************************************************************
  196.  
  197. stopmuzak    lea    $00dff000.l,a6
  198.         move.w    #$000f,$0096(a6)
  199.         clr.w    $00a8(a6)
  200.         clr.w    $00b8(a6)
  201.         clr.w    $00c8(a6)
  202.         clr.w    $00d8(a6)
  203.         move.w    #$2000,$009a(a6)
  204.         ifeq    filter-yes
  205.         bclr    #1,$00bfe001.l
  206.         endif
  207.         rts
  208.  
  209. **********************************************************************
  210.  
  211. playmuzak    cmp.l    #'sid2',rating
  212.         beq.b    play_sidii
  213.  
  214. testplay    cmpi.b    #1,$0116.w
  215.         beq.b    playone
  216.         cmpi.b    #2,$0116.w
  217.         beq.b    playtwo
  218.         cmpi.b    #3,$0116.w
  219.         beq.b    playthree
  220.         rts    
  221.  
  222. playone        movea.l    song,a0
  223.         jsr    $013e(a0)
  224.         rts    
  225.  
  226. playtwo        movea.l    song,a0
  227.         jsr    $0162(a0)
  228.         rts    
  229.  
  230. playthree    movea.l    song,a0
  231.         jsr    $016a(a0)
  232.         rts    
  233.  
  234. play_sidii    movem.l    d0-a6,-(a7)
  235.         lea    $00dff000.l,a6
  236.         lea    length(pc),a0
  237.         addq.b    #1,6(a0)
  238.         cmpi.b    #3,6(a0)
  239.         bne.b    notthree
  240.         clr.b    6(a0)
  241.  
  242. notthree    addq.b    #1,4(a0)
  243.         move.b    4(a0),d0
  244.         cmp.b    1(a0),d0
  245.         blt.w    doeffects
  246.         clr.b    4(a0)
  247.         clr.b    6(a0)
  248.         lea    dma(pc),a5
  249.         clr.w    (a5)
  250.         lea    voice1(pc),a2
  251.         bsr.w    getnote
  252.         lea    voice2(pc),a2
  253.         bsr.w    getnote
  254.         lea    voice3(pc),a2
  255.         bsr.w    getnote
  256.         lea    voice4(pc),a2
  257.         bsr.w    getnote
  258.         move.w    (a5),$0096(a6)
  259.         addi.w    #-$8000,(a5)
  260.         lea    voice1(pc),a2
  261.         bsr.w    playvoice
  262.         lea    voice2(pc),a2
  263.         bsr.w    playvoice
  264.         lea    voice3(pc),a2
  265.         bsr.w    playvoice
  266.         lea    voice4(pc),a2
  267.         bsr.w    playvoice
  268.         bsr.w    donegation
  269.         move.b    6(a6),d0
  270.  
  271. raster        cmp.b    6(a6),d0
  272.         beq.b    raster
  273.         move.w    (a5),$0096(a6)
  274.         move.b    6(a6),d0
  275.  
  276. raster2        cmp.b    6(a6),d0
  277.         beq.b    raster2
  278.         lea    voice1(pc),a2
  279.         moveq    #3,d0
  280.  
  281. repeatloop    move.w    $0010(a2),d4
  282.         move.l    $001a(a2),(a6,d4.w)
  283.         move.w    $001e(a2),4(a6,d4.w)
  284.         lea    $004a(a2),a2
  285.         dbra    d0,repeatloop
  286.         addq.b    #1,3(a0)
  287.         move.b    5(a0),d0
  288.         cmp.b    3(a0),d0
  289.         bne.b    doeffects
  290.         clr.b    3(a0)
  291.         move.b    (a0),d0
  292.         cmp.b    2(a0),d0
  293.         bne.b    addlater
  294.         move.b    #-1,2(a0)
  295.  
  296. addlater    addq.b    #1,2(a0)
  297.         lea    voice1(pc),a2
  298.         bsr.w    findnote
  299.         lea    voice2(pc),a2
  300.         bsr.w    findnote
  301.         lea    voice3(pc),a2
  302.         bsr.w    findnote
  303.         lea    voice4(pc),a2
  304.         bsr.w    findnote
  305.  
  306. doeffects    lea    voice1(pc),a2
  307.         bsr.w    doeffect
  308.         lea    voice2(pc),a2
  309.         bsr.w    doeffect
  310.         lea    voice3(pc),a2
  311.         bsr.w    doeffect
  312.         lea    voice4(pc),a2
  313.         bsr.w    doeffect
  314.         tst.b    4(a0)
  315.         beq.b    nonega
  316.         bsr.b    donegation
  317.  
  318. nonega        movem.l    (a7)+,d0-a6
  319.         rts    
  320.  
  321. **********************************************************************
  322.  
  323. donegation    movem.l    d0-d4/a0-a3,-(a7)
  324.         lea    waveadds(pc),a3
  325.         lea    voice1(pc),a1
  326.         moveq    #3,d0
  327.  
  328. negationloop    move.w    $0048(a1),d1
  329.         lsl.w    #6,d1
  330.         movea.l    sampletab(pc),a0
  331.         lea    (a0,d1.w),a0
  332.         move.l    a0,(a3)+
  333.         tst.w    $001a(a0)
  334.         bne.b    nonegation
  335.         not.w    $001a(a0)
  336.         tst.w    $0018(a0)
  337.         beq.b    checknegation
  338.         subq.w    #1,$0018(a0)
  339.         andi.w    #$001f,$0018(a0)
  340.         bra.b    nonegation
  341.  
  342. checknegation    move.w    $000e(a0),$0018(a0)
  343.         move.w    $0010(a0),d4
  344.         beq.b    nonegation
  345.         movea.l    (a0),a2
  346.         moveq    #0,d1
  347.         moveq    #0,d2
  348.         move.w    $000a(a0),d1
  349.         move.w    $000c(a0),d2
  350.         add.l    d1,d1
  351.         add.l    d2,d2
  352.         subq.l    #1,d2
  353.         adda.l    d1,a2
  354.         adda.l    $0014(a0),a2
  355.         not.b    (a2)
  356.         moveq    #0,d3
  357.         move.w    $0012(a0),d3
  358.         ext.l    d3
  359.         add.l    d3,$0014(a0)
  360.         tst.l    $0014(a0)
  361.         bmi.b    noright
  362.         cmp.l    $0014(a0),d2
  363.         bcc.b    nonegation
  364.         cmpi.w    #1,d4
  365.         bne.b    noleft
  366.         clr.l    $0014(a0)
  367.         bra.b    nonegation
  368.  
  369. noright        cmpi.w    #2,d4
  370.         bne.b    noleft
  371.         move.l    d2,$0014(a0)
  372.         bra.b    nonegation
  373.  
  374. noleft        neg.l    d3
  375.         add.l    d3,$0014(a0)
  376.         neg.w    $0012(a0)
  377.  
  378. nonegation    lea    $004a(a1),a1
  379.         dbra    d0,negationloop
  380.         suba.w    #$0010,a3
  381.         moveq    #3,d0
  382.  
  383. joho        movea.l    (a3)+,a0
  384.         clr.w    $001a(a0)
  385.         dbra    d0,joho
  386.         movem.l    (a7)+,d0-d4/a0-a3
  387.         rts    
  388.  
  389. **********************************************************************
  390.  
  391. findnote    moveq    #0,d0
  392.         moveq    #0,d1
  393.         moveq    #0,d2
  394.         move.b    2(a0),d0
  395.         movea.l    positions(pc),a1
  396.         adda.l    (a2),a1
  397.         move.b    (a1,d0.w),d2
  398.         add.w    d2,d2
  399.         movea.l    patternpointer(pc),a1
  400.         move.w    (a1,d2.w),d2
  401.         add.l    patterns(pc),d2
  402.         move.l    d2,$0040(a2)
  403.         movea.l    ntransposes(pc),a1
  404.         adda.l    (a2),a1
  405.         move.b    (a1,d0.w),$0047(a2)
  406.         movea.l    itransposes(pc),a1
  407.         adda.l    (a2),a1
  408.         move.b    (a1,d0.w),$0039(a2)
  409.         clr.b    $0045(a2)
  410.         rts    
  411.  
  412. **********************************************************************
  413.  
  414. getnote        movea.l    $0040(a2),a1
  415.         bsr.b    getnote2
  416.         move.l    a1,$0040(a2)
  417.         move.w    $002e(a2),d0
  418.         beq.b    noteok
  419.         move.w    $000e(a2),d1
  420.         add.w    d1,(a5)
  421.         add.b    $0047(a2),d0
  422.         move.w    d0,$002e(a2)
  423.  
  424. noteok        rts    
  425.  
  426. **********************************************************************
  427.  
  428. getnote2    moveq    #0,d1
  429.         move.l    d1,$002e(a2)
  430.         move.l    d1,$0032(a2)
  431.         tst.b    $0045(a2)
  432.         beq.b    readnote
  433.         subq.b    #1,$0045(a2)
  434.         rts    
  435.  
  436. **********************************************************************
  437.  
  438. readnote    move.b    (a1)+,d1
  439.         beq.b    nonotebutslide
  440.         bpl.b    simplenote
  441.  
  442. negativvalue    not.b    d1
  443.         move.b    d1,$0045(a2)
  444.         rts    
  445.  
  446. **********************************************************************
  447.  
  448. simplenote    cmpi.b    #$0070,d1
  449.         blt.b    simplenote2
  450.         move.b    d1,$0033(a2)
  451.         move.b    (a1)+,$0035(a2)
  452.         rts    
  453.  
  454. **********************************************************************
  455.  
  456. simplenote2    move.b    d1,$002f(a2)
  457.         move.b    (a1)+,d1
  458.         bmi.b    negativvalue
  459.         cmpi.b    #$0070,d1
  460.         blt.b    simpleins
  461.         move.b    d1,$0033(a2)
  462.         move.b    (a1)+,$0035(a2)
  463.         rts    
  464.  
  465. **********************************************************************
  466.  
  467. simpleins    move.b    d1,$0031(a2)
  468.         move.b    (a1)+,d1
  469.         bmi.b    negativvalue
  470.         move.b    d1,$0033(a2)
  471.         move.b    (a1)+,$0035(a2)
  472.         rts    
  473.  
  474. **********************************************************************
  475.  
  476. nonotebutslide    move.b    (a1)+,$0033(a2)
  477.         move.b    (a1)+,$0035(a2)
  478.         rts    
  479.  
  480. **********************************************************************
  481.  
  482. playvoice    clr.w    $003a(a2)
  483.         move.w    $002e(a2),d0
  484.         beq.w    nonote
  485.         clr.w    $000c(a2)
  486.         clr.l    $0022(a2)
  487.         clr.w    $0026(a2)
  488.         clr.l    $0028(a2)
  489.         clr.w    $002c(a2)
  490.         clr.w    $0036(a2)
  491.         clr.w    $003e(a2)
  492.         move.w    #4,$0012(a2)
  493.         clr.w    $0014(a2)
  494.         moveq    #0,d1
  495.         move.w    $0030(a2),d1
  496.         beq.b    noinschange
  497.         subq.b    #1,d1
  498.         add.b    $0039(a2),d1
  499.         lsl.w    #5,d1
  500.         movea.l    ins1(pc),a1
  501.         adda.l    d1,a1
  502.         move.l    a1,$0016(a2)
  503.         moveq    #0,d5
  504.         move.b    (a1),d5
  505.         lsl.w    #4,d5
  506.         movea.l    wavelists(pc),a1
  507.         adda.l    d5,a1
  508.         moveq    #0,d5
  509.         move.b    (a1),d5
  510.         move.b    d5,$0049(a2)
  511.         lsl.w    #6,d5
  512.         movea.l    sampletab(pc),a1
  513.         adda.l    d5,a1
  514.         move.l    (a1)+,4(a2)
  515.         move.w    (a1)+,8(a2)
  516.         move.l    4(a2),$001a(a2)
  517.         moveq    #0,d5
  518.         move.w    (a1)+,d5
  519.         add.l    d5,d5
  520.         add.l    d5,$001a(a2)
  521.         move.w    (a1),$001e(a2)
  522.  
  523. noinschange    movea.l    $0016(a2),a1
  524.         moveq    #0,d5
  525.         move.b    4(a1),d5
  526.         lsl.w    #4,d5
  527.         movea.l    arpeggiolists(pc),a1
  528.         moveq    #0,d1
  529.         move.b    (a1,d5.w),d1
  530.         ext.w    d1
  531.         add.w    d1,d0
  532.         move.w    d0,$0020(a2)
  533.         lea    playperiods(pc),a3
  534.         add.w    d0,d0
  535.         move.w    $0010(a2),d4
  536.         move.w    (a3,d0.w),$000a(a2)
  537.         move.l    4(a2),(a6,d4.w)
  538.         move.w    8(a2),4(a6,d4.w)
  539.         move.w    $000a(a2),6(a6,d4.w)
  540.  
  541. nonote        rts    
  542.  
  543. **********************************************************************
  544.  
  545. doeffect    move.w    $0010(a2),d4
  546.         bsr.w    doadsrcurve
  547.         bsr.w    dowaveform
  548.         bsr.w    doarpeggio
  549.         bsr.b    dosoundtracker
  550.         bsr.w    dovibrato
  551.         bsr.b    dopitchbend
  552.         bsr.w    donoteslide
  553.         move.w    $003a(a2),d0
  554.         add.w    d0,$000a(a2)
  555.         cmpi.w    #$005f,$000a(a2)
  556.         bgt.b    notlow
  557.         move.w    #$005f,$000a(a2)
  558.         move.w    $000a(a2),6(a6,d4.w)
  559.         rts    
  560.  
  561. **********************************************************************
  562.  
  563. notlow        cmpi.w    #$1680,$000a(a2)
  564.         blt.b    pitchok
  565.         move.w    #$1680,$000a(a2)
  566.  
  567. pitchok        move.w    $000a(a2),6(a6,d4.w)
  568.         rts    
  569.  
  570. **********************************************************************
  571.  
  572. dopitchbend    movea.l    $0016(a2),a4
  573.         moveq    #0,d0
  574.         move.b    $000c(a4),d0
  575.         beq.b    nopitch
  576.         move.b    $000d(a4),d1
  577.         cmp.b    $0037(a2),d1
  578.         bne.b    pitchdelay
  579.         ext.w    d0
  580.         add.w    d0,$003a(a2)
  581.  
  582. nopitch        rts    
  583.  
  584. **********************************************************************
  585.  
  586. pitchdelay    addq.b    #1,$0037(a2)
  587.         rts    
  588.  
  589. **********************************************************************
  590.  
  591. dosoundtracker    move.w    $0032(a2),d0
  592.         cmpi.w    #$0070,d0
  593.         blt.b    noarp
  594.         andi.w    #$000f,d0
  595.         tst.b    4(a0)
  596.         bne.b    egal
  597.         cmpi.b    #5,d0
  598.         blt.b    noarp
  599.  
  600. egal        add.w    d0,d0
  601.         lea    steffect(pc),a1
  602.         move.w    (a1,d0.w),d0
  603.         lea    arpeggio(pc),a1
  604.         jmp    (a1,d0.w)
  605.  
  606. noarp        rts    
  607.  
  608. **********************************************************************
  609.  
  610. steffect    dc.w    arpeggio-arpeggio
  611.         dc.w    pitchup-arpeggio
  612.         dc.w    pitchdown-arpeggio
  613.         dc.w    volumeup-arpeggio
  614.         dc.w    volumedown-arpeggio
  615.         dc.w    setadsrattack-arpeggio
  616.         dc.w    setpatternlen-arpeggio
  617.         dc.w    novolchange-arpeggio
  618.         dc.w    novolchange-arpeggio
  619.         dc.w    novolchange-arpeggio
  620.         dc.w    novolchange-arpeggio
  621.         dc.w    novolchange-arpeggio
  622.         dc.w    volumechange-arpeggio
  623.         dc.w    novolchange-arpeggio
  624.         dc.w    novolchange-arpeggio
  625.         dc.w    speedchange-arpeggio
  626.     
  627. donoteslide    move.w    $0032(a2),d0
  628.         beq.b    nodestnote
  629.         cmpi.w    #$0070,d0
  630.         bge.b    nodestnote
  631.         move.w    $0034(a2),d1
  632.         beq.b    nodestnote
  633.         add.w    d0,d0
  634.         lea    playperiods(pc),a1
  635.         move.w    (a1,d0.w),$003c(a2)
  636.         move.w    $003c(a2),d0
  637.         sub.w    $000a(a2),d0
  638.         beq.b    noslider
  639.         bpl.b    itshigher
  640.         neg.w    d1
  641.  
  642. itshigher    move.w    d1,$003e(a2)
  643.  
  644. nodestnote    move.w    $003e(a2),d1
  645.         beq.b    noslider
  646.         bmi.b    downwithit
  647.         add.w    d1,$000a(a2)
  648.         move.w    $000a(a2),d0
  649.         cmp.w    $003c(a2),d0
  650.         blt.b    noslider
  651.         clr.w    $003e(a2)
  652.         move.w    $003c(a2),$000a(a2)
  653.         rts    
  654.  
  655. **********************************************************************
  656.  
  657. downwithit    add.w    d1,$000a(a2)
  658.         move.w    $000a(a2),d0
  659.         cmp.w    $003c(a2),d0
  660.         bgt.b    noslider
  661.         clr.w    $003e(a2)
  662.         move.w    $003c(a2),$000a(a2)
  663.  
  664. noslider    rts    
  665.  
  666. **********************************************************************
  667.  
  668. arpeggio    lea    myatab(pc),a1
  669.         move.w    $0034(a2),d0
  670.         move.b    d0,2(a1)
  671.         andi.b    #$000f,2(a1)
  672.         lsr.w    #4,d0
  673.         move.b    d0,(a1)
  674.         move.b    6(a0),d0
  675.         move.b    (a1,d0.w),d0
  676.         add.w    $0020(a2),d0
  677.         add.w    d0,d0
  678.         lea    playperiods(pc),a1
  679.         move.w    (a1,d0.w),d0
  680.         move.w    d0,$000a(a2)
  681.         rts    
  682.  
  683. **********************************************************************
  684.  
  685. myatab        ori.b    #0,d0
  686.  
  687. pitchup        move.w    $0034(a2),d0
  688.         neg.w    d0
  689.         move.w    d0,$003a(a2)
  690.         rts    
  691.  
  692. **********************************************************************
  693.  
  694. pitchdown    move.w    $0034(a2),d0
  695.         move.w    d0,$003a(a2)
  696.         rts    
  697.  
  698. **********************************************************************
  699.  
  700. volumeup    tst.w    $0012(a2)
  701.         bne.b    novolchange
  702.         tst.b    4(a0)
  703.         bne.b    noinsset
  704.         tst.w    $0030(a2)
  705.         beq.b    noinsset
  706.         movea.l    $0016(a2),a4
  707.         move.b    $0011(a4),$000d(a2)
  708.  
  709. noinsset    move.w    $0034(a2),d1
  710.         add.w    d1,d1
  711.         add.w    d1,d1
  712.         move.w    $000c(a2),d0
  713.         add.w    d1,d0
  714.         cmpi.w    #$0100,d0
  715.         blt.b    not256
  716.         moveq    #0,d0
  717.         not.b    d0
  718.  
  719. not256        move.w    d0,$000c(a2)
  720.         rts    
  721.  
  722. **********************************************************************
  723.  
  724. volumedown    tst.w    $0012(a2)
  725.         bne.b    novolchange
  726.         tst.b    4(a0)
  727.         bne.b    noinsset2
  728.         tst.w    $0030(a2)
  729.         beq.b    noinsset2
  730.         movea.l    $0016(a2),a4
  731.         move.b    $0011(a4),$000d(a2)
  732.  
  733. noinsset2    move.w    $0034(a2),d1
  734.         add.w    d1,d1
  735.         add.w    d1,d1
  736.         move.w    $000c(a2),d0
  737.         sub.w    d1,d0
  738.         bpl.b    not00
  739.         clr.w    d0
  740.  
  741. not00        move.w    d0,$000c(a2)
  742.  
  743. novolchange    rts    
  744.  
  745. **********************************************************************
  746.  
  747. setadsrattack    movea.l    $0016(a2),a4
  748.         move.w    $0034(a2),d0
  749.         move.b    d0,$0010(a4)
  750.         move.b    d0,$0011(a4)
  751.         rts    
  752.  
  753. **********************************************************************
  754.  
  755. setpatternlen    move.b    $0035(a2),5(a0)
  756.         rts    
  757.  
  758. **********************************************************************
  759.  
  760. volumechange    move.w    $0034(a2),d0
  761.         move.w    d0,8(a6,d4.w)
  762.         add.w    d0,d0
  763.         add.w    d0,d0
  764.         cmpi.w    #$00ff,d0
  765.         blt.b    notff
  766.         move.w    #$00ff,d0
  767.  
  768. notff        move.w    d0,$000c(a2)
  769.         rts    
  770.  
  771. **********************************************************************
  772.  
  773. speedchange    move.b    $0035(a2),d0
  774.         andi.b    #$000f,d0
  775.         beq.b    novolchange
  776.         move.b    d0,1(a0)
  777.         rts    
  778.  
  779. **********************************************************************
  780.  
  781. dovibrato    movea.l    $0016(a2),a4
  782.         tst.b    9(a4)
  783.         beq.b    long03
  784.         move.b    $000b(a4),d6
  785.         cmp.b    $002b(a2),d6
  786.         beq.b    novdelay
  787.         addq.b    #1,$002b(a2)
  788.  
  789. long03        rts    
  790.  
  791. **********************************************************************
  792.  
  793. novdelay    move.b    $000a(a4),d7
  794.         sub.b    d7,d6
  795.         move.b    d6,$002b(a2)
  796.         move.b    9(a4),d6
  797.         cmp.b    $002d(a2),d6
  798.         bne.b    notvsame
  799.         move.b    #-1,$002d(a2)
  800.  
  801. notvsame    addq.b    #1,$002d(a2)
  802.         clr.w    d7
  803.         move.w    $002c(a2),d6
  804.         move.b    8(a4),d7
  805.         lsl.w    #4,d7
  806.         add.w    d6,d7
  807.         movea.l    vibratolists(pc),a4
  808.         move.b    (a4,d7.w),d6
  809.         ext.w    d6
  810.         add.w    d6,$000a(a2)
  811.         rts    
  812.  
  813. **********************************************************************
  814.  
  815. doarpeggio    movea.l    $0016(a2),a4
  816.         tst.b    5(a4)
  817.         beq.b    long02
  818.         move.b    7(a4),d6
  819.         cmp.b    $0027(a2),d6
  820.         beq.b    noadelay
  821.         addq.b    #1,$0027(a2)
  822.  
  823. long02        rts    
  824.  
  825. **********************************************************************
  826.  
  827. noadelay    move.b    6(a4),d7
  828.         sub.b    d7,d6
  829.         move.b    d6,$0027(a2)
  830.         clr.w    d6
  831.         move.b    5(a4),d6
  832.         cmp.b    $0029(a2),d6
  833.         bne.b    notasame
  834.         move.b    #-1,$0029(a2)
  835.  
  836. notasame    addq.b    #1,$0029(a2)
  837.         move.w    $0028(a2),d6
  838.         clr.w    d7
  839.         move.b    4(a4),d7
  840.         lsl.w    #4,d7
  841.         add.w    d6,d7
  842.         movea.l    arpeggiolists(pc),a4
  843.         move.b    (a4,d7.w),d6
  844.         ext.w    d6
  845.         add.w    $0020(a2),d6
  846.         lea    playperiods(pc),a4
  847.         add.w    d6,d6
  848.         move.w    (a4,d6.w),$000a(a2)
  849.         rts    
  850.  
  851. **********************************************************************
  852.  
  853. dowaveform    movea.l    $0016(a2),a4
  854.         tst.b    1(a4)
  855.         beq.b    long0
  856.         move.b    3(a4),d6
  857.         cmp.b    $0023(a2),d6
  858.         beq.b    nowdelay
  859.         addq.b    #1,$0023(a2)
  860.  
  861. long0        rts    
  862.  
  863. **********************************************************************
  864.  
  865. nowdelay    move.b    2(a4),d7
  866.         sub.b    d7,d6
  867.         move.b    d6,$0023(a2)
  868.         move.b    1(a4),d6
  869.         cmp.b    $0025(a2),d6
  870.         bne.b    notsame
  871.         move.b    #-1,$0025(a2)
  872.  
  873. notsame        addq.b    #1,$0025(a2)
  874.         move.w    $0024(a2),d6
  875.         clr.w    d7
  876.         move.b    (a4),d7
  877.         lsl.w    #4,d7
  878.         add.w    d6,d7
  879.         moveq    #0,d6
  880.         movea.l    wavelists(pc),a4
  881.         move.b    (a4,d7.w),d6
  882.         bpl.b    allwaveok
  883.         subq.b    #1,$0025(a2)
  884.         rts    
  885.  
  886. **********************************************************************
  887.  
  888. allwaveok    move.b    d6,$0049(a2)
  889.         lsl.w    #6,d6
  890.         movea.l    sampletab(pc),a4
  891.         adda.l    d6,a4
  892.         move.l    (a4)+,$001a(a2)
  893.         move.w    (a4),$001e(a2)
  894.         move.l    $001a(a2),(a6,d4.w)
  895.         move.w    $001e(a2),4(a6,d4.w)
  896.         rts    
  897.  
  898. **********************************************************************
  899.  
  900. doadsrcurve    bsr.b    doadsrcalc
  901.         move.w    $000c(a2),d0
  902.         lsr.w    #2,d0
  903.         move.w    d0,8(a6,d4.w)
  904.         rts    
  905.  
  906. **********************************************************************
  907.  
  908. doadsrcalc    movea.l    $0016(a2),a4
  909.         lea    $0010(a4),a4
  910.         tst.w    $0012(a2)
  911.         beq.b    noadsr
  912.         clr.w    d6
  913.         clr.w    d7
  914.         cmpi.w    #4,$0012(a2)
  915.         beq.b    attack
  916.         cmpi.w    #3,$0012(a2)
  917.         beq.b    decay
  918.         cmpi.w    #2,$0012(a2)
  919.         beq.b    sustain
  920.         cmpi.w    #1,$0012(a2)
  921.         beq.b    release
  922.  
  923. noadsr        rts    
  924.  
  925. **********************************************************************
  926.  
  927. attack        move.b    (a4),d6
  928.         move.b    1(a4),d7
  929.         add.w    d7,$000c(a2)
  930.         cmp.w    $000c(a2),d6
  931.         bgt.b    returnadsr
  932.         move.w    d6,$000c(a2)
  933.         subq.w    #1,$0012(a2)
  934.         rts    
  935.  
  936. **********************************************************************
  937.  
  938. decay        move.b    2(a4),d6
  939.         move.b    3(a4),d7
  940.         beq.b    nodecay
  941.         sub.w    d7,$000c(a2)
  942.         cmp.w    $000c(a2),d6
  943.         blt.b    returnadsr
  944.         move.w    d6,$000c(a2)
  945.  
  946. nodecay        subq.w    #1,$0012(a2)
  947.         rts    
  948.  
  949. **********************************************************************
  950.  
  951. sustain        move.b    4(a4),d6
  952.         cmp.w    $0014(a2),d6
  953.         bne.b    contsustain
  954.         subq.w    #1,$0012(a2)
  955.         rts    
  956.  
  957. **********************************************************************
  958.  
  959. release        move.b    5(a4),d6
  960.         move.b    6(a4),d7
  961.         beq.b    norelease
  962.         sub.w    d7,$000c(a2)
  963.         cmp.w    $000c(a2),d6
  964.         blt.b    returnadsr
  965.         move.w    d6,$000c(a2)
  966.  
  967. norelease    subq.w    #1,$0012(a2)
  968.  
  969. returnadsr    rts    
  970.  
  971. **********************************************************************
  972.  
  973. contsustain    addq.w    #1,$0014(a2)
  974.         rts    
  975.  
  976. **********************************************************************
  977.  
  978. dma        dc.w    $0
  979.  
  980. **********************************************************************
  981.  
  982. voice1        dc.l    $0    ; pos. and trans. offset
  983.         dc.l    $0    ; samplestard
  984.         dc.w    $0    ; samplelength
  985.         dc.w    $0    ; sampleperiod
  986.         dc.w    $0    ; samplevolume
  987.         dc.w    $1    ; dma-enable bit
  988.         dc.w    $a0    ; channel-register offset
  989.         dc.w    $0    ; adsr-status
  990.         dc.w    $0    ; counter for sustain
  991.         dc.l    $0    ; inst. address
  992.         dc.l    $0    ; repeatstart
  993.         dc.w    $0    ; repeatlength
  994.         dc.w    $0    ; original-note
  995.         dc.w    $0    ; counter for wavelist delay
  996.         dc.w    $0    ; counter for wavelist offset
  997.         dc.w    $0    ; counter for arpeggio delay
  998.         dc.w    $0    ; counter for arpeggio offset
  999.         dc.w    $0    ; counter for vibrato delay
  1000.         dc.w    $0    ; counter for vibrato offcet
  1001.         dc.w    $0    ; current-note
  1002.         dc.w    $0    ; current-ins.
  1003.         dc.w    $0    ; current-fx
  1004.         dc.w    $0    ; current-fx-info
  1005.         dc.w    $0    ; counter for pitchbend
  1006.         dc.w    $0    ; inst. transp
  1007.         dc.w    $0    ; pitchbend-value
  1008.         dc.w    $0    ; note-slide-note
  1009.         dc.w    $0    ; note-slide-speed
  1010.         dc.l    $0    ; note-address
  1011.         dc.w    $0    ; empty-notes-counter
  1012.         dc.w    $0    ; note-transpose
  1013.         dc.w    $0    ; current-waveform used
  1014.  
  1015. **********************************************************************
  1016.  
  1017. voice2        dc.l    $0
  1018.         dc.l    $0
  1019.         dc.w    $0
  1020.         dc.w    $0
  1021.         dc.w    $0
  1022.         dc.w    $2
  1023.         dc.w    $b0
  1024.         dc.w    $0
  1025.         dc.w    $0
  1026.         dc.l    $0
  1027.         dc.l    $0
  1028.         dc.w    $0
  1029.         dc.w    $0
  1030.         dc.w    $0
  1031.         dc.w    $0
  1032.         dc.w    $0
  1033.         dc.w    $0
  1034.         dc.w    $0
  1035.         dc.w    $0
  1036.         dc.w    $0
  1037.         dc.w    $0
  1038.         dc.w    $0
  1039.         dc.w    $0
  1040.         dc.w    $0
  1041.         dc.w    $0
  1042.         dc.w    $0
  1043.         dc.w    $0
  1044.         dc.w    $0
  1045.         dc.l    $0
  1046.         dc.w    $0
  1047.         dc.w    $0
  1048.         dc.w    $0
  1049.  
  1050. **********************************************************************
  1051.  
  1052. voice3        dc.l    $0
  1053.         dc.l    $0
  1054.         dc.w    $0
  1055.         dc.w    $0
  1056.         dc.w    $0
  1057.         dc.w    $4
  1058.         dc.w    $c0
  1059.         dc.w    $0
  1060.         dc.w    $0
  1061.         dc.l    $0
  1062.         dc.l    $0
  1063.         dc.w    $0
  1064.         dc.w    $0
  1065.         dc.w    $0
  1066.         dc.w    $0
  1067.         dc.w    $0
  1068.         dc.w    $0
  1069.         dc.w    $0
  1070.         dc.w    $0
  1071.         dc.w    $0
  1072.         dc.w    $0
  1073.         dc.w    $0
  1074.         dc.w    $0
  1075.         dc.w    $0
  1076.         dc.w    $0
  1077.         dc.w    $0
  1078.         dc.w    $0
  1079.         dc.w    $0
  1080.         dc.l    $0
  1081.         dc.w    $0
  1082.         dc.w    $0
  1083.         dc.w    $0
  1084.  
  1085. **********************************************************************
  1086.  
  1087. voice4        dc.l    $0
  1088.         dc.l    $0
  1089.         dc.w    $0
  1090.         dc.w    $0
  1091.         dc.w    $0
  1092.         dc.w    $8
  1093.         dc.w    $d0
  1094.         dc.w    $0
  1095.         dc.w    $0
  1096.         dc.l    $0
  1097.         dc.l    $0
  1098.         dc.w    $0
  1099.         dc.w    $0
  1100.         dc.w    $0
  1101.         dc.w    $0
  1102.         dc.w    $0
  1103.         dc.w    $0
  1104.         dc.w    $0
  1105.         dc.w    $0
  1106.         dc.w    $0
  1107.         dc.w    $0
  1108.         dc.w    $0
  1109.         dc.w    $0
  1110.         dc.w    $0
  1111.         dc.w    $0
  1112.         dc.w    $0
  1113.         dc.w    $0
  1114.         dc.w    $0
  1115.         dc.l    $0
  1116.         dc.w    $0
  1117.         dc.w    $0
  1118.         dc.w    $0
  1119.  
  1120. **********************************************************************
  1121.  
  1122. playperiods    dc.w $0
  1123.         dc.w $1680,$1530,$1400,$12e0,$11d0,$10d0,$0fe0,$0f00
  1124.         dc.w $0e20,$0d60,$0ca0,$0be8,$0b40,$0a98,$0a00,$0970
  1125.         dc.w $08e8,$0868,$07f0,$0780,$0710,$06b0,$0650,$05f4
  1126.         dc.w $05a0,$054c,$0500,$04b8,$0474,$0434,$03f8,$03c0
  1127.         dc.w $0388,$0358,$0328,$02fa,$02d0,$02a6,$0280,$025c
  1128.         dc.w $023a,$021a,$01fc,$01e0,$01c5,$01ac,$0194,$017d
  1129.         dc.w $0168,$0153,$0140,$012e,$011d,$010d,$00fe,$00f0
  1130.         dc.w $00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097
  1131.         dc.w $008f,$0087,$007f,$0078,$0071,$006b,$0065,$005f
  1132.  
  1133. **********************************************************************
  1134.  
  1135. waveadds    blk.w    8,0
  1136.  
  1137. song        dc.l    muzak
  1138. sampleno    dc.w    0
  1139. midimode    dc.w    0
  1140.  
  1141. length        blk.w    4,0
  1142. rating        dc.l    0
  1143.  
  1144.         section    'DATA',code_c
  1145.  
  1146. **********************************************************************
  1147. muzak        incbin    "dh0:multimedia/modules/sidmon/demo song 1"
  1148. **********************************************************************
  1149.         end
  1150.