home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 3 / CDPDIII.bin / pd / commodities / superdark / blankers / replay.s < prev    next >
Text File  |  1993-02-20  |  23KB  |  1,209 lines

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