home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format 42 / af042b.adf / BULL5.LHA / pt-play.s < prev    next >
Text File  |  1992-11-19  |  22KB  |  1,125 lines

  1. ;********************************************
  2. ;* ----- Protracker V1.1B Playroutine ----- *
  3. ;* Lars "Zap" Hamre/Amiga Freelancers 1991  *
  4. ;* Bekkeliveien 10, N-2010 STRØMMEN, Norway *
  5. ;********************************************
  6.  
  7. ; VBlank Version 2:
  8. ; Call mt_init to initialize the routine, then call mt_music on
  9. ; each vertical blank (50 Hz). To end the song and turn off all
  10. ; voices, call mt_end.
  11.  
  12. ; This playroutine is not very fast, optimized or well commented,
  13. ; but all the new commands in PT1.1A should work.
  14. ; If it's not good enough, you'll have to change it yourself.
  15. ; We'll try to write a faster routine soon...
  16.  
  17. ; Changes from V1.0C playroutine:
  18. ; - Vibrato depth changed to be compatible with Noisetracker 2.0.
  19. ;   You'll have to double all vib. depths on old PT modules.
  20. ; - Funk Repeat changed to Invert Loop.
  21. ; - Period set back earlier when stopping an effect.
  22.  
  23. DMAWait = 300 ; Set this as low as possible without losing low notes.
  24.  
  25. n_note        EQU    0  ; W
  26. n_cmd        EQU    2  ; W
  27. n_cmdlo        EQU    3  ; B
  28. n_start        EQU    4  ; L
  29. n_length    EQU    8  ; W
  30. n_loopstart    EQU    10 ; L
  31. n_replen    EQU    14 ; W
  32. n_period    EQU    16 ; W
  33. n_finetune    EQU    18 ; B
  34. n_volume    EQU    19 ; B
  35. n_dmabit    EQU    20 ; W
  36. n_toneportdirec    EQU    22 ; B
  37. n_toneportspeed    EQU    23 ; B
  38. n_wantedperiod    EQU    24 ; W
  39. n_vibratocmd    EQU    26 ; B
  40. n_vibratopos    EQU    27 ; B
  41. n_tremolocmd    EQU    28 ; B
  42. n_tremolopos    EQU    29 ; B
  43. n_wavecontrol    EQU    30 ; B
  44. n_glissfunk    EQU    31 ; B
  45. n_sampleoffset    EQU    32 ; B
  46. n_pattpos    EQU    33 ; B
  47. n_loopcount    EQU    34 ; B
  48. n_funkoffset    EQU    35 ; B
  49. n_wavestart    EQU    36 ; L
  50. n_reallength    EQU    40 ; W
  51.  
  52. mt_init    LEA    mt_data,A0
  53.     MOVE.L    A0,mt_SongDataPtr
  54.     MOVE.L    A0,A1
  55.     LEA    952(A1),A1
  56.     MOVEQ    #127,D0
  57.     MOVEQ    #0,D1
  58. mtloop    MOVE.L    D1,D2
  59.     SUBQ.W    #1,D0
  60. mtloop2    MOVE.B    (A1)+,D1
  61.     CMP.B    D2,D1
  62.     BGT.S    mtloop
  63.     DBRA    D0,mtloop2
  64.     ADDQ.B    #1,D2
  65.             
  66.     LEA    mt_SampleStarts(PC),A1
  67.     ASL.L    #8,D2
  68.     ASL.L    #2,D2
  69.     ADD.L    #1084,D2
  70.     ADD.L    A0,D2
  71.     MOVE.L    D2,A2
  72.     MOVEQ    #30,D0
  73. mtloop3    CLR.L    (A2)
  74.     MOVE.L    A2,(A1)+
  75.     MOVEQ    #0,D1
  76.     MOVE.W    42(A0),D1
  77.     ASL.L    #1,D1
  78.     ADD.L    D1,A2
  79.     ADD.L    #30,A0
  80.     DBRA    D0,mtloop3
  81.  
  82.     OR.B    #2,$BFE001
  83.     MOVE.B    #6,mt_speed
  84.     CLR.B    mt_counter
  85.     CLR.B    mt_SongPos
  86.     CLR.W    mt_PatternPos
  87. mt_end    CLR.W    $DFF0A8
  88.     CLR.W    $DFF0B8
  89.     CLR.W    $DFF0C8
  90.     CLR.W    $DFF0D8
  91.     MOVE.W    #$F,$DFF096
  92.     RTS
  93.  
  94. mt_music
  95.     MOVEM.L    D0-D4/A0-A6,-(SP)
  96.     ADDQ.B    #1,mt_counter
  97.     MOVE.B    mt_counter(PC),D0
  98.     CMP.B    mt_speed(PC),D0
  99.     BLO.S    mt_NoNewNote
  100.     CLR.B    mt_counter
  101.     TST.B    mt_PattDelTime2
  102.     BEQ.S    mt_GetNewNote
  103.     BSR.S    mt_NoNewAllChannels
  104.     BRA    mt_dskip
  105.  
  106. mt_NoNewNote
  107.     BSR.S    mt_NoNewAllChannels
  108.     BRA    mt_NoNewPosYet
  109.  
  110. mt_NoNewAllChannels
  111.     LEA    $DFF0A0,A5
  112.     LEA    mt_chan1temp(PC),A6
  113.     BSR    mt_CheckEfx
  114.     LEA    $DFF0B0,A5
  115.     LEA    mt_chan2temp(PC),A6
  116.     BSR    mt_CheckEfx
  117.     LEA    $DFF0C0,A5
  118.     LEA    mt_chan3temp(PC),A6
  119.     BSR    mt_CheckEfx
  120.     LEA    $DFF0D0,A5
  121.     LEA    mt_chan4temp(PC),A6
  122.     BRA    mt_CheckEfx
  123.  
  124. mt_GetNewNote
  125.     MOVE.L    mt_SongDataPtr(PC),A0
  126.     LEA    12(A0),A3
  127.     LEA    952(A0),A2    ;pattpo
  128.     LEA    1084(A0),A0    ;patterndata
  129.     MOVEQ    #0,D0
  130.     MOVEQ    #0,D1
  131.     MOVE.B    mt_SongPos(PC),D0
  132.     MOVE.B    (A2,D0.W),D1
  133.     ASL.L    #8,D1
  134.     ASL.L    #2,D1
  135.     ADD.W    mt_PatternPos(PC),D1
  136.     CLR.W    mt_DMACONtemp
  137.  
  138.     LEA    $DFF0A0,A5
  139.     LEA    mt_chan1temp(PC),A6
  140.     BSR.S    mt_PlayVoice
  141.     LEA    $DFF0B0,A5
  142.     LEA    mt_chan2temp(PC),A6
  143.     BSR.S    mt_PlayVoice
  144.     LEA    $DFF0C0,A5
  145.     LEA    mt_chan3temp(PC),A6
  146.     BSR.S    mt_PlayVoice
  147.     LEA    $DFF0D0,A5
  148.     LEA    mt_chan4temp(PC),A6
  149.     BSR.S    mt_PlayVoice
  150.     BRA    mt_SetDMA
  151.  
  152. mt_PlayVoice
  153.     TST.L    (A6)
  154.     BNE.S    mt_plvskip
  155.     BSR    mt_PerNop
  156. mt_plvskip
  157.     MOVE.L    (A0,D1.L),(A6)
  158.     ADDQ.L    #4,D1
  159.     MOVEQ    #0,D2
  160.     MOVE.B    n_cmd(A6),D2
  161.     AND.B    #$F0,D2
  162.     LSR.B    #4,D2
  163.     MOVE.B    (A6),D0
  164.     AND.B    #$F0,D0
  165.     OR.B    D0,D2
  166.     TST.B    D2
  167.     BEQ    mt_SetRegs
  168.     MOVEQ    #0,D3
  169.     LEA    mt_SampleStarts(PC),A1
  170.     MOVE    D2,D4
  171.     SUBQ.L    #1,D2
  172.     ASL.L    #2,D2
  173.     MULU    #30,D4
  174.     MOVE.L    (A1,D2.L),n_start(A6)
  175.     MOVE.W    (A3,D4.L),n_length(A6)
  176.     MOVE.W    (A3,D4.L),n_reallength(A6)
  177.     MOVE.B    2(A3,D4.L),n_finetune(A6)
  178.     MOVE.B    3(A3,D4.L),n_volume(A6)
  179.     MOVE.W    4(A3,D4.L),D3 ; Get repeat
  180.     TST.W    D3
  181.     BEQ.S    mt_NoLoop
  182.     MOVE.L    n_start(A6),D2    ; Get start
  183.     ASL.W    #1,D3
  184.     ADD.L    D3,D2        ; Add repeat
  185.     MOVE.L    D2,n_loopstart(A6)
  186.     MOVE.L    D2,n_wavestart(A6)
  187.     MOVE.W    4(A3,D4.L),D0    ; Get repeat
  188.     ADD.W    6(A3,D4.L),D0    ; Add replen
  189.     MOVE.W    D0,n_length(A6)
  190.     MOVE.W    6(A3,D4.L),n_replen(A6)    ; Save replen
  191.     MOVEQ    #0,D0
  192.     MOVE.B    n_volume(A6),D0
  193.     MOVE.W    D0,8(A5)    ; Set volume
  194.     BRA.S    mt_SetRegs
  195.  
  196. mt_NoLoop
  197.     MOVE.L    n_start(A6),D2
  198.     ADD.L    D3,D2
  199.     MOVE.L    D2,n_loopstart(A6)
  200.     MOVE.L    D2,n_wavestart(A6)
  201.     MOVE.W    6(A3,D4.L),n_replen(A6)    ; Save replen
  202.     MOVEQ    #0,D0
  203.     MOVE.B    n_volume(A6),D0
  204.     MOVE.W    D0,8(A5)    ; Set volume
  205. mt_SetRegs
  206.     MOVE.W    (A6),D0
  207.     AND.W    #$0FFF,D0
  208.     BEQ    mt_CheckMoreEfx    ; If no note
  209.     MOVE.W    2(A6),D0
  210.     AND.W    #$0FF0,D0
  211.     CMP.W    #$0E50,D0
  212.     BEQ.S    mt_DoSetFineTune
  213.     MOVE.B    2(A6),D0
  214.     AND.B    #$0F,D0
  215.     CMP.B    #3,D0    ; TonePortamento
  216.     BEQ.S    mt_ChkTonePorta
  217.     CMP.B    #5,D0
  218.     BEQ.S    mt_ChkTonePorta
  219.     CMP.B    #9,D0    ; Sample Offset
  220.     BNE.S    mt_SetPeriod
  221.     BSR    mt_CheckMoreEfx
  222.     BRA.S    mt_SetPeriod
  223.  
  224. mt_DoSetFineTune
  225.     BSR    mt_SetFineTune
  226.     BRA.S    mt_SetPeriod
  227.  
  228. mt_ChkTonePorta
  229.     BSR    mt_SetTonePorta
  230.     BRA    mt_CheckMoreEfx
  231.  
  232. mt_SetPeriod
  233.     MOVEM.L    D0-D1/A0-A1,-(SP)
  234.     MOVE.W    (A6),D1
  235.     AND.W    #$0FFF,D1
  236.     LEA    mt_PeriodTable(PC),A1
  237.     MOVEQ    #0,D0
  238.     MOVEQ    #36,D7
  239. mt_ftuloop
  240.     CMP.W    (A1,D0.W),D1
  241.     BHS.S    mt_ftufound
  242.     ADDQ.L    #2,D0
  243.     DBRA    D7,mt_ftuloop
  244. mt_ftufound
  245.     MOVEQ    #0,D1
  246.     MOVE.B    n_finetune(A6),D1
  247.     MULU    #36*2,D1
  248.     ADD.L    D1,A1
  249.     MOVE.W    (A1,D0.W),n_period(A6)
  250.     MOVEM.L    (SP)+,D0-D1/A0-A1
  251.  
  252.     MOVE.W    2(A6),D0
  253.     AND.W    #$0FF0,D0
  254.     CMP.W    #$0ED0,D0 ; Notedelay
  255.     BEQ    mt_CheckMoreEfx
  256.  
  257.     MOVE.W    n_dmabit(A6),$DFF096
  258.     BTST    #2,n_wavecontrol(A6)
  259.     BNE.S    mt_vibnoc
  260.     CLR.B    n_vibratopos(A6)
  261. mt_vibnoc
  262.     BTST    #6,n_wavecontrol(A6)
  263.     BNE.S    mt_trenoc
  264.     CLR.B    n_tremolopos(A6)
  265. mt_trenoc
  266.     MOVE.L    n_start(A6),(A5)    ; Set start
  267.     MOVE.W    n_length(A6),4(A5)    ; Set length
  268.     MOVE.W    n_period(A6),D0
  269.     MOVE.W    D0,6(A5)        ; Set period
  270.     MOVE.W    n_dmabit(A6),D0
  271.     OR.W    D0,mt_DMACONtemp
  272.     BRA    mt_CheckMoreEfx
  273.  
  274. mt_SetDMA
  275.     MOVE.W    #300,D0
  276. mt_WaitDMA
  277.     DBRA    D0,mt_WaitDMA
  278.     MOVE.W    mt_DMACONtemp(PC),D0
  279.     OR.W    #$8000,D0
  280.     MOVE.W    D0,$DFF096
  281.     MOVE.W    #300,D0
  282. mt_WaitDMA2
  283.     DBRA    D0,mt_WaitDMA2
  284.  
  285.     LEA    $DFF000,A5
  286.     LEA    mt_chan4temp(PC),A6
  287.     MOVE.L    n_loopstart(A6),$D0(A5)
  288.     MOVE.W    n_replen(A6),$D4(A5)
  289.     LEA    mt_chan3temp(PC),A6
  290.     MOVE.L    n_loopstart(A6),$C0(A5)
  291.     MOVE.W    n_replen(A6),$C4(A5)
  292.     LEA    mt_chan2temp(PC),A6
  293.     MOVE.L    n_loopstart(A6),$B0(A5)
  294.     MOVE.W    n_replen(A6),$B4(A5)
  295.     LEA    mt_chan1temp(PC),A6
  296.     MOVE.L    n_loopstart(A6),$A0(A5)
  297.     MOVE.W    n_replen(A6),$A4(A5)
  298.  
  299. mt_dskip
  300.     ADD.W    #16,mt_PatternPos
  301.     MOVE.B    mt_PattDelTime,D0
  302.     BEQ.S    mt_dskc
  303.     MOVE.B    D0,mt_PattDelTime2
  304.     CLR.B    mt_PattDelTime
  305. mt_dskc    TST.B    mt_PattDelTime2
  306.     BEQ.S    mt_dska
  307.     SUBQ.B    #1,mt_PattDelTime2
  308.     BEQ.S    mt_dska
  309.     SUB.W    #16,mt_PatternPos
  310. mt_dska    TST.B    mt_PBreakFlag
  311.     BEQ.S    mt_nnpysk
  312.     SF    mt_PBreakFlag
  313.     MOVEQ    #0,D0
  314.     MOVE.B    mt_PBreakPos(PC),D0
  315.     CLR.B    mt_PBreakPos
  316.     LSL.W    #4,D0
  317.     MOVE.W    D0,mt_PatternPos
  318. mt_nnpysk
  319.     CMP.W    #1024,mt_PatternPos
  320.     BLO.S    mt_NoNewPosYet
  321. mt_NextPosition    
  322.     MOVEQ    #0,D0
  323.     MOVE.B    mt_PBreakPos(PC),D0
  324.     LSL.W    #4,D0
  325.     MOVE.W    D0,mt_PatternPos
  326.     CLR.B    mt_PBreakPos
  327.     CLR.B    mt_PosJumpFlag
  328.     ADDQ.B    #1,mt_SongPos
  329.     AND.B    #$7F,mt_SongPos
  330.     MOVE.B    mt_SongPos(PC),D1
  331.     MOVE.L    mt_SongDataPtr(PC),A0
  332.     CMP.B    950(A0),D1
  333.     BLO.S    mt_NoNewPosYet
  334.     CLR.B    mt_SongPos
  335. mt_NoNewPosYet    
  336.     TST.B    mt_PosJumpFlag
  337.     BNE.S    mt_NextPosition
  338.     MOVEM.L    (SP)+,D0-D4/A0-A6
  339.     RTS
  340.  
  341. mt_CheckEfx
  342.     BSR    mt_UpdateFunk
  343.     MOVE.W    n_cmd(A6),D0
  344.     AND.W    #$0FFF,D0
  345.     BEQ.S    mt_PerNop
  346.     MOVE.B    n_cmd(A6),D0
  347.     AND.B    #$0F,D0
  348.     BEQ.S    mt_Arpeggio
  349.     CMP.B    #1,D0
  350.     BEQ    mt_PortaUp
  351.     CMP.B    #2,D0
  352.     BEQ    mt_PortaDown
  353.     CMP.B    #3,D0
  354.     BEQ    mt_TonePortamento
  355.     CMP.B    #4,D0
  356.     BEQ    mt_Vibrato
  357.     CMP.B    #5,D0
  358.     BEQ    mt_TonePlusVolSlide
  359.     CMP.B    #6,D0
  360.     BEQ    mt_VibratoPlusVolSlide
  361.     CMP.B    #$E,D0
  362.     BEQ    mt_E_Commands
  363. SetBack    MOVE.W    n_period(A6),6(A5)
  364.     CMP.B    #7,D0
  365.     BEQ    mt_Tremolo
  366.     CMP.B    #$A,D0
  367.     BEQ    mt_VolumeSlide
  368. mt_Return2
  369.     RTS
  370.  
  371. mt_PerNop
  372.     MOVE.W    n_period(A6),6(A5)
  373.     RTS
  374.  
  375. mt_Arpeggio
  376.     MOVEQ    #0,D0
  377.     MOVE.B    mt_counter(PC),D0
  378.     DIVS    #3,D0
  379.     SWAP    D0
  380.     CMP.W    #0,D0
  381.     BEQ.S    mt_Arpeggio2
  382.     CMP.W    #2,D0
  383.     BEQ.S    mt_Arpeggio1
  384.     MOVEQ    #0,D0
  385.     MOVE.B    n_cmdlo(A6),D0
  386.     LSR.B    #4,D0
  387.     BRA.S    mt_Arpeggio3
  388.  
  389. mt_Arpeggio1
  390.     MOVEQ    #0,D0
  391.     MOVE.B    n_cmdlo(A6),D0
  392.     AND.B    #15,D0
  393.     BRA.S    mt_Arpeggio3
  394.  
  395. mt_Arpeggio2
  396.     MOVE.W    n_period(A6),D2
  397.     BRA.S    mt_Arpeggio4
  398.  
  399. mt_Arpeggio3
  400.     ASL.W    #1,D0
  401.     MOVEQ    #0,D1
  402.     MOVE.B    n_finetune(A6),D1
  403.     MULU    #36*2,D1
  404.     LEA    mt_PeriodTable(PC),A0
  405.     ADD.L    D1,A0
  406.     MOVEQ    #0,D1
  407.     MOVE.W    n_period(A6),D1
  408.     MOVEQ    #36,D7
  409. mt_arploop
  410.     MOVE.W    (A0,D0.W),D2
  411.     CMP.W    (A0),D1
  412.     BHS.S    mt_Arpeggio4
  413.     ADDQ.L    #2,A0
  414.     DBRA    D7,mt_arploop
  415.     RTS
  416.  
  417. mt_Arpeggio4
  418.     MOVE.W    D2,6(A5)
  419.     RTS
  420.  
  421. mt_FinePortaUp
  422.     TST.B    mt_counter
  423.     BNE.S    mt_Return2
  424.     MOVE.B    #$0F,mt_LowMask
  425. mt_PortaUp
  426.     MOVEQ    #0,D0
  427.     MOVE.B    n_cmdlo(A6),D0
  428.     AND.B    mt_LowMask(PC),D0
  429.     MOVE.B    #$FF,mt_LowMask
  430.     SUB.W    D0,n_period(A6)
  431.     MOVE.W    n_period(A6),D0
  432.     AND.W    #$0FFF,D0
  433.     CMP.W    #113,D0
  434.     BPL.S    mt_PortaUskip
  435.     AND.W    #$F000,n_period(A6)
  436.     OR.W    #113,n_period(A6)
  437. mt_PortaUskip
  438.     MOVE.W    n_period(A6),D0
  439.     AND.W    #$0FFF,D0
  440.     MOVE.W    D0,6(A5)
  441.     RTS    
  442.  
  443. mt_FinePortaDown
  444.     TST.B    mt_counter
  445.     BNE    mt_Return2
  446.     MOVE.B    #$0F,mt_LowMask
  447. mt_PortaDown
  448.     CLR.W    D0
  449.     MOVE.B    n_cmdlo(A6),D0
  450.     AND.B    mt_LowMask(PC),D0
  451.     MOVE.B    #$FF,mt_LowMask
  452.     ADD.W    D0,n_period(A6)
  453.     MOVE.W    n_period(A6),D0
  454.     AND.W    #$0FFF,D0
  455.     CMP.W    #856,D0
  456.     BMI.S    mt_PortaDskip
  457.     AND.W    #$F000,n_period(A6)
  458.     OR.W    #856,n_period(A6)
  459. mt_PortaDskip
  460.     MOVE.W    n_period(A6),D0
  461.     AND.W    #$0FFF,D0
  462.     MOVE.W    D0,6(A5)
  463.     RTS
  464.  
  465. mt_SetTonePorta
  466.     MOVE.L    A0,-(SP)
  467.     MOVE.W    (A6),D2
  468.     AND.W    #$0FFF,D2
  469.     MOVEQ    #0,D0
  470.     MOVE.B    n_finetune(A6),D0
  471.     MULU    #37*2,D0
  472.     LEA    mt_PeriodTable(PC),A0
  473.     ADD.L    D0,A0
  474.     MOVEQ    #0,D0
  475. mt_StpLoop
  476.     CMP.W    (A0,D0.W),D2
  477.     BHS.S    mt_StpFound
  478.     ADDQ.W    #2,D0
  479.     CMP.W    #37*2,D0
  480.     BLO.S    mt_StpLoop
  481.     MOVEQ    #35*2,D0
  482. mt_StpFound
  483.     MOVE.B    n_finetune(A6),D2
  484.     AND.B    #8,D2
  485.     BEQ.S    mt_StpGoss
  486.     TST.W    D0
  487.     BEQ.S    mt_StpGoss
  488.     SUBQ.W    #2,D0
  489. mt_StpGoss
  490.     MOVE.W    (A0,D0.W),D2
  491.     MOVE.L    (SP)+,A0
  492.     MOVE.W    D2,n_wantedperiod(A6)
  493.     MOVE.W    n_period(A6),D0
  494.     CLR.B    n_toneportdirec(A6)
  495.     CMP.W    D0,D2
  496.     BEQ.S    mt_ClearTonePorta
  497.     BGE    mt_Return2
  498.     MOVE.B    #1,n_toneportdirec(A6)
  499.     RTS
  500.  
  501. mt_ClearTonePorta
  502.     CLR.W    n_wantedperiod(A6)
  503.     RTS
  504.  
  505. mt_TonePortamento
  506.     MOVE.B    n_cmdlo(A6),D0
  507.     BEQ.S    mt_TonePortNoChange
  508.     MOVE.B    D0,n_toneportspeed(A6)
  509.     CLR.B    n_cmdlo(A6)
  510. mt_TonePortNoChange
  511.     TST.W    n_wantedperiod(A6)
  512.     BEQ    mt_Return2
  513.     MOVEQ    #0,D0
  514.     MOVE.B    n_toneportspeed(A6),D0
  515.     TST.B    n_toneportdirec(A6)
  516.     BNE.S    mt_TonePortaUp
  517. mt_TonePortaDown
  518.     ADD.W    D0,n_period(A6)
  519.     MOVE.W    n_wantedperiod(A6),D0
  520.     CMP.W    n_period(A6),D0
  521.     BGT.S    mt_TonePortaSetPer
  522.     MOVE.W    n_wantedperiod(A6),n_period(A6)
  523.     CLR.W    n_wantedperiod(A6)
  524.     BRA.S    mt_TonePortaSetPer
  525.  
  526. mt_TonePortaUp
  527.     SUB.W    D0,n_period(A6)
  528.     MOVE.W    n_wantedperiod(A6),D0
  529.     CMP.W    n_period(A6),D0
  530.     BLT.S    mt_TonePortaSetPer
  531.     MOVE.W    n_wantedperiod(A6),n_period(A6)
  532.     CLR.W    n_wantedperiod(A6)
  533.  
  534. mt_TonePortaSetPer
  535.     MOVE.W    n_period(A6),D2
  536.     MOVE.B    n_glissfunk(A6),D0
  537.     AND.B    #$0F,D0
  538.     BEQ.S    mt_GlissSkip
  539.     MOVEQ    #0,D0
  540.     MOVE.B    n_finetune(A6),D0
  541.     MULU    #36*2,D0
  542.     LEA    mt_PeriodTable(PC),A0
  543.     ADD.L    D0,A0
  544.     MOVEQ    #0,D0
  545. mt_GlissLoop
  546.     CMP.W    (A0,D0.W),D2
  547.     BHS.S    mt_GlissFound
  548.     ADDQ.W    #2,D0
  549.     CMP.W    #36*2,D0
  550.     BLO.S    mt_GlissLoop
  551.     MOVEQ    #35*2,D0
  552. mt_GlissFound
  553.     MOVE.W    (A0,D0.W),D2
  554. mt_GlissSkip
  555.     MOVE.W    D2,6(A5) ; Set period
  556.     RTS
  557.  
  558. mt_Vibrato
  559.     MOVE.B    n_cmdlo(A6),D0
  560.     BEQ.S    mt_Vibrato2
  561.     MOVE.B    n_vibratocmd(A6),D2
  562.     AND.B    #$0F,D0
  563.     BEQ.S    mt_vibskip
  564.     AND.B    #$F0,D2
  565.     OR.B    D0,D2
  566. mt_vibskip
  567.     MOVE.B    n_cmdlo(A6),D0
  568.     AND.B    #$F0,D0
  569.     BEQ.S    mt_vibskip2
  570.     AND.B    #$0F,D2
  571.     OR.B    D0,D2
  572. mt_vibskip2
  573.     MOVE.B    D2,n_vibratocmd(A6)
  574. mt_Vibrato2
  575.     MOVE.B    n_vibratopos(A6),D0
  576.     LEA    mt_VibratoTable(PC),A4
  577.     LSR.W    #2,D0
  578.     AND.W    #$001F,D0
  579.     MOVEQ    #0,D2
  580.     MOVE.B    n_wavecontrol(A6),D2
  581.     AND.B    #$03,D2
  582.     BEQ.S    mt_vib_sine
  583.     LSL.B    #3,D0
  584.     CMP.B    #1,D2
  585.     BEQ.S    mt_vib_rampdown
  586.     MOVE.B    #255,D2
  587.     BRA.S    mt_vib_set
  588. mt_vib_rampdown
  589.     TST.B    n_vibratopos(A6)
  590.     BPL.S    mt_vib_rampdown2
  591.     MOVE.B    #255,D2
  592.     SUB.B    D0,D2
  593.     BRA.S    mt_vib_set
  594. mt_vib_rampdown2
  595.     MOVE.B    D0,D2
  596.     BRA.S    mt_vib_set
  597. mt_vib_sine
  598.     MOVE.B    0(A4,D0.W),D2
  599. mt_vib_set
  600.     MOVE.B    n_vibratocmd(A6),D0
  601.     AND.W    #15,D0
  602.     MULU    D0,D2
  603.     LSR.W    #7,D2
  604.     MOVE.W    n_period(A6),D0
  605.     TST.B    n_vibratopos(A6)
  606.     BMI.S    mt_VibratoNeg
  607.     ADD.W    D2,D0
  608.     BRA.S    mt_Vibrato3
  609. mt_VibratoNeg
  610.     SUB.W    D2,D0
  611. mt_Vibrato3
  612.     MOVE.W    D0,6(A5)
  613.     MOVE.B    n_vibratocmd(A6),D0
  614.     LSR.W    #2,D0
  615.     AND.W    #$003C,D0
  616.     ADD.B    D0,n_vibratopos(A6)
  617.     RTS
  618.  
  619. mt_TonePlusVolSlide
  620.     BSR    mt_TonePortNoChange
  621.     BRA    mt_VolumeSlide
  622.  
  623. mt_VibratoPlusVolSlide
  624.     BSR.S    mt_Vibrato2
  625.     BRA    mt_VolumeSlide
  626.  
  627. mt_Tremolo
  628.     MOVE.B    n_cmdlo(A6),D0
  629.     BEQ.S    mt_Tremolo2
  630.     MOVE.B    n_tremolocmd(A6),D2
  631.     AND.B    #$0F,D0
  632.     BEQ.S    mt_treskip
  633.     AND.B    #$F0,D2
  634.     OR.B    D0,D2
  635. mt_treskip
  636.     MOVE.B    n_cmdlo(A6),D0
  637.     AND.B    #$F0,D0
  638.     BEQ.S    mt_treskip2
  639.     AND.B    #$0F,D2
  640.     OR.B    D0,D2
  641. mt_treskip2
  642.     MOVE.B    D2,n_tremolocmd(A6)
  643. mt_Tremolo2
  644.     MOVE.B    n_tremolopos(A6),D0
  645.     LEA    mt_VibratoTable(PC),A4
  646.     LSR.W    #2,D0
  647.     AND.W    #$001F,D0
  648.     MOVEQ    #0,D2
  649.     MOVE.B    n_wavecontrol(A6),D2
  650.     LSR.B    #4,D2
  651.     AND.B    #$03,D2
  652.     BEQ.S    mt_tre_sine
  653.     LSL.B    #3,D0
  654.     CMP.B    #1,D2
  655.     BEQ.S    mt_tre_rampdown
  656.     MOVE.B    #255,D2
  657.     BRA.S    mt_tre_set
  658. mt_tre_rampdown
  659.     TST.B    n_vibratopos(A6)
  660.     BPL.S    mt_tre_rampdown2
  661.     MOVE.B    #255,D2
  662.     SUB.B    D0,D2
  663.     BRA.S    mt_tre_set
  664. mt_tre_rampdown2
  665.     MOVE.B    D0,D2
  666.     BRA.S    mt_tre_set
  667. mt_tre_sine
  668.     MOVE.B    0(A4,D0.W),D2
  669. mt_tre_set
  670.     MOVE.B    n_tremolocmd(A6),D0
  671.     AND.W    #15,D0
  672.     MULU    D0,D2
  673.     LSR.W    #6,D2
  674.     MOVEQ    #0,D0
  675.     MOVE.B    n_volume(A6),D0
  676.     TST.B    n_tremolopos(A6)
  677.     BMI.S    mt_TremoloNeg
  678.     ADD.W    D2,D0
  679.     BRA.S    mt_Tremolo3
  680. mt_TremoloNeg
  681.     SUB.W    D2,D0
  682. mt_Tremolo3
  683.     BPL.S    mt_TremoloSkip
  684.     CLR.W    D0
  685. mt_TremoloSkip
  686.     CMP.W    #$40,D0
  687.     BLS.S    mt_TremoloOk
  688.     MOVE.W    #$40,D0
  689. mt_TremoloOk
  690.     MOVE.W    D0,8(A5)
  691.     MOVE.B    n_tremolocmd(A6),D0
  692.     LSR.W    #2,D0
  693.     AND.W    #$003C,D0
  694.     ADD.B    D0,n_tremolopos(A6)
  695.     RTS
  696.  
  697. mt_SampleOffset
  698.     MOVEQ    #0,D0
  699.     MOVE.B    n_cmdlo(A6),D0
  700.     BEQ.S    mt_sononew
  701.     MOVE.B    D0,n_sampleoffset(A6)
  702. mt_sononew
  703.     MOVE.B    n_sampleoffset(A6),D0
  704.     LSL.W    #7,D0
  705.     CMP.W    n_length(A6),D0
  706.     BGE.S    mt_sofskip
  707.     SUB.W    D0,n_length(A6)
  708.     LSL.W    #1,D0
  709.     ADD.L    D0,n_start(A6)
  710.     RTS
  711. mt_sofskip
  712.     MOVE.W    #$0001,n_length(A6)
  713.     RTS
  714.  
  715. mt_VolumeSlide
  716.     MOVEQ    #0,D0
  717.     MOVE.B    n_cmdlo(A6),D0
  718.     LSR.B    #4,D0
  719.     TST.B    D0
  720.     BEQ.S    mt_VolSlideDown
  721. mt_VolSlideUp
  722.     ADD.B    D0,n_volume(A6)
  723.     CMP.B    #$40,n_volume(A6)
  724.     BMI.S    mt_vsuskip
  725.     MOVE.B    #$40,n_volume(A6)
  726. mt_vsuskip
  727.     MOVE.B    n_volume(A6),D0
  728.     MOVE.W    D0,8(A5)
  729.     RTS
  730.  
  731. mt_VolSlideDown
  732.     MOVEQ    #0,D0
  733.     MOVE.B    n_cmdlo(A6),D0
  734.     AND.B    #$0F,D0
  735. mt_VolSlideDown2
  736.     SUB.B    D0,n_volume(A6)
  737.     BPL.S    mt_vsdskip
  738.     CLR.B    n_volume(A6)
  739. mt_vsdskip
  740.     MOVE.B    n_volume(A6),D0
  741.     MOVE.W    D0,8(A5)
  742.     RTS
  743.  
  744. mt_PositionJump
  745.     MOVE.B    n_cmdlo(A6),D0
  746.     SUBQ.B    #1,D0
  747.     MOVE.B    D0,mt_SongPos
  748. mt_pj2    CLR.B    mt_PBreakPos
  749.     ST     mt_PosJumpFlag
  750.     RTS
  751.  
  752. mt_VolumeChange
  753.     MOVEQ    #0,D0
  754.     MOVE.B    n_cmdlo(A6),D0
  755.     CMP.B    #$40,D0
  756.     BLS.S    mt_VolumeOk
  757.     MOVEQ    #$40,D0
  758. mt_VolumeOk
  759.     MOVE.B    D0,n_volume(A6)
  760.     MOVE.W    D0,8(A5)
  761.     RTS
  762.  
  763. mt_PatternBreak
  764.     MOVEQ    #0,D0
  765.     MOVE.B    n_cmdlo(A6),D0
  766.     MOVE.L    D0,D2
  767.     LSR.B    #4,D0
  768.     MULU    #10,D0
  769.     AND.B    #$0F,D2
  770.     ADD.B    D2,D0
  771.     CMP.B    #63,D0
  772.     BHI.S    mt_pj2
  773.     MOVE.B    D0,mt_PBreakPos
  774.     ST    mt_PosJumpFlag
  775.     RTS
  776.  
  777. mt_SetSpeed
  778.     MOVE.B    3(A6),D0
  779.     BEQ    mt_Return2
  780.     CLR.B    mt_counter
  781.     MOVE.B    D0,mt_speed
  782.     RTS
  783.  
  784. mt_CheckMoreEfx
  785.     BSR    mt_UpdateFunk
  786.     MOVE.B    2(A6),D0
  787.     AND.B    #$0F,D0
  788.     CMP.B    #$9,D0
  789.     BEQ    mt_SampleOffset
  790.     CMP.B    #$B,D0
  791.     BEQ    mt_PositionJump
  792.     CMP.B    #$D,D0
  793.     BEQ.S    mt_PatternBreak
  794.     CMP.B    #$E,D0
  795.     BEQ.S    mt_E_Commands
  796.     CMP.B    #$F,D0
  797.     BEQ.S    mt_SetSpeed
  798.     CMP.B    #$C,D0
  799.     BEQ    mt_VolumeChange
  800.     BRA    mt_PerNop
  801.  
  802. mt_E_Commands
  803.     MOVE.B    n_cmdlo(A6),D0
  804.     AND.B    #$F0,D0
  805.     LSR.B    #4,D0
  806.     BEQ.S    mt_FilterOnOff
  807.     CMP.B    #1,D0
  808.     BEQ    mt_FinePortaUp
  809.     CMP.B    #2,D0
  810.     BEQ    mt_FinePortaDown
  811.     CMP.B    #3,D0
  812.     BEQ.S    mt_SetGlissControl
  813.     CMP.B    #4,D0
  814.     BEQ    mt_SetVibratoControl
  815.     CMP.B    #5,D0
  816.     BEQ    mt_SetFineTune
  817.     CMP.B    #6,D0
  818.     BEQ    mt_JumpLoop
  819.     CMP.B    #7,D0
  820.     BEQ    mt_SetTremoloControl
  821.     CMP.B    #9,D0
  822.     BEQ    mt_RetrigNote
  823.     CMP.B    #$A,D0
  824.     BEQ    mt_VolumeFineUp
  825.     CMP.B    #$B,D0
  826.     BEQ    mt_VolumeFineDown
  827.     CMP.B    #$C,D0
  828.     BEQ    mt_NoteCut
  829.     CMP.B    #$D,D0
  830.     BEQ    mt_NoteDelay
  831.     CMP.B    #$E,D0
  832.     BEQ    mt_PatternDelay
  833.     CMP.B    #$F,D0
  834.     BEQ    mt_FunkIt
  835.     RTS
  836.  
  837. mt_FilterOnOff
  838.     MOVE.B    n_cmdlo(A6),D0
  839.     AND.B    #1,D0
  840.     ASL.B    #1,D0
  841.     AND.B    #$FD,$BFE001
  842.     OR.B    D0,$BFE001
  843.     RTS    
  844.  
  845. mt_SetGlissControl
  846.     MOVE.B    n_cmdlo(A6),D0
  847.     AND.B    #$0F,D0
  848.     AND.B    #$F0,n_glissfunk(A6)
  849.     OR.B    D0,n_glissfunk(A6)
  850.     RTS
  851.  
  852. mt_SetVibratoControl
  853.     MOVE.B    n_cmdlo(A6),D0
  854.     AND.B    #$0F,D0
  855.     AND.B    #$F0,n_wavecontrol(A6)
  856.     OR.B    D0,n_wavecontrol(A6)
  857.     RTS
  858.  
  859. mt_SetFineTune
  860.     MOVE.B    n_cmdlo(A6),D0
  861.     AND.B    #$0F,D0
  862.     MOVE.B    D0,n_finetune(A6)
  863.     RTS
  864.  
  865. mt_JumpLoop
  866.     TST.B    mt_counter
  867.     BNE    mt_Return2
  868.     MOVE.B    n_cmdlo(A6),D0
  869.     AND.B    #$0F,D0
  870.     BEQ.S    mt_SetLoop
  871.     TST.B    n_loopcount(A6)
  872.     BEQ.S    mt_jumpcnt
  873.     SUBQ.B    #1,n_loopcount(A6)
  874.     BEQ    mt_Return2
  875. mt_jmploop    MOVE.B    n_pattpos(A6),mt_PBreakPos
  876.     ST    mt_PBreakFlag
  877.     RTS
  878.  
  879. mt_jumpcnt
  880.     MOVE.B    D0,n_loopcount(A6)
  881.     BRA.S    mt_jmploop
  882.  
  883. mt_SetLoop
  884.     MOVE.W    mt_PatternPos(PC),D0
  885.     LSR.W    #4,D0
  886.     MOVE.B    D0,n_pattpos(A6)
  887.     RTS
  888.  
  889. mt_SetTremoloControl
  890.     MOVE.B    n_cmdlo(A6),D0
  891.     AND.B    #$0F,D0
  892.     LSL.B    #4,D0
  893.     AND.B    #$0F,n_wavecontrol(A6)
  894.     OR.B    D0,n_wavecontrol(A6)
  895.     RTS
  896.  
  897. mt_RetrigNote
  898.     MOVE.L    D1,-(SP)
  899.     MOVEQ    #0,D0
  900.     MOVE.B    n_cmdlo(A6),D0
  901.     AND.B    #$0F,D0
  902.     BEQ.S    mt_rtnend
  903.     MOVEQ    #0,D1
  904.     MOVE.B    mt_counter(PC),D1
  905.     BNE.S    mt_rtnskp
  906.     MOVE.W    (A6),D1
  907.     AND.W    #$0FFF,D1
  908.     BNE.S    mt_rtnend
  909.     MOVEQ    #0,D1
  910.     MOVE.B    mt_counter(PC),D1
  911. mt_rtnskp
  912.     DIVU    D0,D1
  913.     SWAP    D1
  914.     TST.W    D1
  915.     BNE.S    mt_rtnend
  916. mt_DoRetrig
  917.     MOVE.W    n_dmabit(A6),$DFF096    ; Channel DMA off
  918.     MOVE.L    n_start(A6),(A5)    ; Set sampledata pointer
  919.     MOVE.W    n_length(A6),4(A5)    ; Set length
  920.     MOVE.W    #300,D0
  921. mt_rtnloop1
  922.     DBRA    D0,mt_rtnloop1
  923.     MOVE.W    n_dmabit(A6),D0
  924.     BSET    #15,D0
  925.     MOVE.W    D0,$DFF096
  926.     MOVE.W    #300,D0
  927. mt_rtnloop2
  928.     DBRA    D0,mt_rtnloop2
  929.     MOVE.L    n_loopstart(A6),(A5)
  930.     MOVE.L    n_replen(A6),4(A5)
  931. mt_rtnend
  932.     MOVE.L    (SP)+,D1
  933.     RTS
  934.  
  935. mt_VolumeFineUp
  936.     TST.B    mt_counter
  937.     BNE    mt_Return2
  938.     MOVEQ    #0,D0
  939.     MOVE.B    n_cmdlo(A6),D0
  940.     AND.B    #$F,D0
  941.     BRA    mt_VolSlideUp
  942.  
  943. mt_VolumeFineDown
  944.     TST.B    mt_counter
  945.     BNE    mt_Return2
  946.     MOVEQ    #0,D0
  947.     MOVE.B    n_cmdlo(A6),D0
  948.     AND.B    #$0F,D0
  949.     BRA    mt_VolSlideDown2
  950.  
  951. mt_NoteCut
  952.     MOVEQ    #0,D0
  953.     MOVE.B    n_cmdlo(A6),D0
  954.     AND.B    #$0F,D0
  955.     CMP.B    mt_counter(PC),D0
  956.     BNE    mt_Return2
  957.     CLR.B    n_volume(A6)
  958.     MOVE.W    #0,8(A5)
  959.     RTS
  960.  
  961. mt_NoteDelay
  962.     MOVEQ    #0,D0
  963.     MOVE.B    n_cmdlo(A6),D0
  964.     AND.B    #$0F,D0
  965.     CMP.B    mt_counter,D0
  966.     BNE    mt_Return2
  967.     MOVE.W    (A6),D0
  968.     BEQ    mt_Return2
  969.     MOVE.L    D1,-(SP)
  970.     BRA    mt_DoRetrig
  971.  
  972. mt_PatternDelay
  973.     TST.B    mt_counter
  974.     BNE    mt_Return2
  975.     MOVEQ    #0,D0
  976.     MOVE.B    n_cmdlo(A6),D0
  977.     AND.B    #$0F,D0
  978.     TST.B    mt_PattDelTime2
  979.     BNE    mt_Return2
  980.     ADDQ.B    #1,D0
  981.     MOVE.B    D0,mt_PattDelTime
  982.     RTS
  983.  
  984. mt_FunkIt
  985.     TST.B    mt_counter
  986.     BNE    mt_Return2
  987.     MOVE.B    n_cmdlo(A6),D0
  988.     AND.B    #$0F,D0
  989.     LSL.B    #4,D0
  990.     AND.B    #$0F,n_glissfunk(A6)
  991.     OR.B    D0,n_glissfunk(A6)
  992.     TST.B    D0
  993.     BEQ    mt_Return2
  994. mt_UpdateFunk
  995.     MOVEM.L    A0/D1,-(SP)
  996.     MOVEQ    #0,D0
  997.     MOVE.B    n_glissfunk(A6),D0
  998.     LSR.B    #4,D0
  999.     BEQ.S    mt_funkend
  1000.     LEA    mt_FunkTable(PC),A0
  1001.     MOVE.B    (A0,D0.W),D0
  1002.     ADD.B    D0,n_funkoffset(A6)
  1003.     BTST    #7,n_funkoffset(A6)
  1004.     BEQ.S    mt_funkend
  1005.     CLR.B    n_funkoffset(A6)
  1006.  
  1007.     MOVE.L    n_loopstart(A6),D0
  1008.     MOVEQ    #0,D1
  1009.     MOVE.W    n_replen(A6),D1
  1010.     ADD.L    D1,D0
  1011.     ADD.L    D1,D0
  1012.     MOVE.L    n_wavestart(A6),A0
  1013.     ADDQ.L    #1,A0
  1014.     CMP.L    D0,A0
  1015.     BLO.S    mt_funkok
  1016.     MOVE.L    n_loopstart(A6),A0
  1017. mt_funkok
  1018.     MOVE.L    A0,n_wavestart(A6)
  1019.     MOVEQ    #-1,D0
  1020.     SUB.B    (A0),D0
  1021.     MOVE.B    D0,(A0)
  1022. mt_funkend
  1023.     MOVEM.L    (SP)+,A0/D1
  1024.     RTS
  1025.  
  1026.  
  1027. mt_FunkTable dc.b 0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128
  1028.  
  1029. mt_VibratoTable    
  1030.     dc.b   0, 24, 49, 74, 97,120,141,161
  1031.     dc.b 180,197,212,224,235,244,250,253
  1032.     dc.b 255,253,250,244,235,224,212,197
  1033.     dc.b 180,161,141,120, 97, 74, 49, 24
  1034.  
  1035. mt_PeriodTable
  1036. ; Tuning 0, Normal
  1037.     dc.w    856,808,762,720,678,640,604,570,538,508,480,453
  1038.     dc.w    428,404,381,360,339,320,302,285,269,254,240,226
  1039.     dc.w    214,202,190,180,170,160,151,143,135,127,120,113
  1040. ; Tuning 1
  1041.     dc.w    850,802,757,715,674,637,601,567,535,505,477,450
  1042.     dc.w    425,401,379,357,337,318,300,284,268,253,239,225
  1043.     dc.w    213,201,189,179,169,159,150,142,134,126,119,113
  1044. ; Tuning 2
  1045.     dc.w    844,796,752,709,670,632,597,563,532,502,474,447
  1046.     dc.w    422,398,376,355,335,316,298,282,266,251,237,224
  1047.     dc.w    211,199,188,177,167,158,149,141,133,125,118,112
  1048. ; Tuning 3
  1049.     dc.w    838,791,746,704,665,628,592,559,528,498,470,444
  1050.     dc.w    419,395,373,352,332,314,296,280,264,249,235,222
  1051.     dc.w    209,198,187,176,166,157,148,140,132,125,118,111
  1052. ; Tuning 4
  1053.     dc.w    832,785,741,699,660,623,588,555,524,495,467,441
  1054.     dc.w    416,392,370,350,330,312,294,278,262,247,233,220
  1055.     dc.w    208,196,185,175,165,156,147,139,131,124,117,110
  1056. ; Tuning 5
  1057.     dc.w    826,779,736,694,655,619,584,551,520,491,463,437
  1058.     dc.w    413,390,368,347,328,309,292,276,260,245,232,219
  1059.     dc.w    206,195,184,174,164,155,146,138,130,123,116,109
  1060. ; Tuning 6
  1061.     dc.w    820,774,730,689,651,614,580,547,516,487,460,434
  1062.     dc.w    410,387,365,345,325,307,290,274,258,244,230,217
  1063.     dc.w    205,193,183,172,163,154,145,137,129,122,115,109
  1064. ; Tuning 7
  1065.     dc.w    814,768,725,684,646,610,575,543,513,484,457,431
  1066.     dc.w    407,384,363,342,323,305,288,272,256,242,228,216
  1067.     dc.w    204,192,181,171,161,152,144,136,128,121,114,108
  1068. ; Tuning -8
  1069.     dc.w    907,856,808,762,720,678,640,604,570,538,508,480
  1070.     dc.w    453,428,404,381,360,339,320,302,285,269,254,240
  1071.     dc.w    226,214,202,190,180,170,160,151,143,135,127,120
  1072. ; Tuning -7
  1073.     dc.w    900,850,802,757,715,675,636,601,567,535,505,477
  1074.     dc.w    450,425,401,379,357,337,318,300,284,268,253,238
  1075.     dc.w    225,212,200,189,179,169,159,150,142,134,126,119
  1076. ; Tuning -6
  1077.     dc.w    894,844,796,752,709,670,632,597,563,532,502,474
  1078.     dc.w    447,422,398,376,355,335,316,298,282,266,251,237
  1079.     dc.w    223,211,199,188,177,167,158,149,141,133,125,118
  1080. ; Tuning -5
  1081.     dc.w    887,838,791,746,704,665,628,592,559,528,498,470
  1082.     dc.w    444,419,395,373,352,332,314,296,280,264,249,235
  1083.     dc.w    222,209,198,187,176,166,157,148,140,132,125,118
  1084. ; Tuning -4
  1085.     dc.w    881,832,785,741,699,660,623,588,555,524,494,467
  1086.     dc.w    441,416,392,370,350,330,312,294,278,262,247,233
  1087.     dc.w    220,208,196,185,175,165,156,147,139,131,123,117
  1088. ; Tuning -3
  1089.     dc.w    875,826,779,736,694,655,619,584,551,520,491,463
  1090.     dc.w    437,413,390,368,347,328,309,292,276,260,245,232
  1091.     dc.w    219,206,195,184,174,164,155,146,138,130,123,116
  1092. ; Tuning -2
  1093.     dc.w    868,820,774,730,689,651,614,580,547,516,487,460
  1094.     dc.w    434,410,387,365,345,325,307,290,274,258,244,230
  1095.     dc.w    217,205,193,183,172,163,154,145,137,129,122,115
  1096. ; Tuning -1
  1097.     dc.w    862,814,768,725,684,646,610,575,543,513,484,457
  1098.     dc.w    431,407,384,363,342,323,305,288,272,256,242,228
  1099.     dc.w    216,203,192,181,171,161,152,144,136,128,121,114
  1100.  
  1101. mt_chan1temp    dc.l    0,0,0,0,0,$00010000,0,  0,0,0,0
  1102. mt_chan2temp    dc.l    0,0,0,0,0,$00020000,0,  0,0,0,0
  1103. mt_chan3temp    dc.l    0,0,0,0,0,$00040000,0,  0,0,0,0
  1104. mt_chan4temp    dc.l    0,0,0,0,0,$00080000,0,  0,0,0,0
  1105.  
  1106. mt_SampleStarts    dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1107.         dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1108.  
  1109. mt_SongDataPtr    dc.l 0
  1110.  
  1111. mt_speed    dc.b 6
  1112. mt_counter    dc.b 0
  1113. mt_SongPos    dc.b 0
  1114. mt_PBreakPos    dc.b 0
  1115. mt_PosJumpFlag    dc.b 0
  1116. mt_PBreakFlag    dc.b 0
  1117. mt_LowMask    dc.b 0
  1118. mt_PattDelTime    dc.b 0
  1119. mt_PattDelTime2    dc.b 0,0
  1120.  
  1121. mt_PatternPos    dc.w 0
  1122. mt_DMACONtemp    dc.w 0
  1123.  
  1124. ;/* End of File */
  1125.