home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / assembler-kurs / listings2 / music.s < prev    next >
Text File  |  1977-12-31  |  22KB  |  1,158 lines

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