home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / tangoint.lha / NT.S < prev    next >
Encoding:
Text File  |  1988-07-19  |  6.2 KB  |  378 lines

  1. ; ** NOISE TRACKER PLAY ROUTINE **
  2.  
  3. CYB_init:
  4.     lea    CYB_data,a0
  5.     add.l    #$03b8,a0
  6.     moveq    #$7f,d0
  7.     moveq    #0,d1
  8. CYB_init1:
  9.     move.l    d1,d2
  10.     subq.w    #1,d0
  11. CYB_init2:
  12.     move.b    (a0)+,d1
  13.     cmp.b    d2,d1
  14.     bgt.s    CYB_init1
  15.     dbf    d0,CYB_init2
  16.     addq.b    #1,d2
  17. CYB_init3:
  18.     lea    CYB_data,a0
  19.     lea    CYB_sample1(pc),a1
  20.     asl.l    #8,d2
  21.     asl.l    #2,d2
  22.     add.l    #$438,d2
  23.     add.l    a0,d2
  24.     moveq    #$1e,d0
  25. CYB_init4:
  26.     move.l    d2,(a1)+
  27.     moveq    #0,d1
  28.     move.w    42(a0),d1
  29.     asl.l    #1,d1
  30.     add.l    d1,d2
  31.     add.l    #$1e,a0
  32.     dbf    d0,CYB_init4
  33.     lea    CYB_sample1(PC),a0
  34.     moveq    #0,d0
  35. CYB_clear:
  36.     move.l    (a0,d0.w),a1
  37.     clr.l    (a1)
  38.     addq.w    #4,d0
  39.     cmp.w    #$7c,d0
  40.     bne.s    CYB_clear
  41.     clr.w    $dff0a8
  42.     clr.w    $dff0b8
  43.     clr.w    $dff0c8
  44.     clr.w    $dff0d8
  45.     clr.l    CYB_partnrplay
  46.     clr.l    CYB_partnote
  47.     clr.l    CYB_partpoint
  48.     move.b    CYB_data+$3b6,CYB_maxpart+1
  49.     rts
  50.     rts
  51. CYB_music:
  52.     addq.w    #1,CYB_counter
  53. CYB_cool:cmp.w    #6,CYB_counter
  54.     bne.s    CYB_notsix
  55.     clr.w    CYB_counter
  56.     bra    CYB_rout2
  57. CYB_notsix:
  58.     lea    CYB_aud1temp(PC),a6
  59.     tst.b    3(a6)
  60.     beq.s    CYB_arp1
  61.     lea    $dff0a0,a5        
  62.     bsr.s    CYB_arprout
  63. CYB_arp1:lea    CYB_aud2temp(PC),a6
  64.     tst.b    3(a6)
  65.     beq.s    CYB_arp2
  66.     lea    $dff0b0,a5
  67.     bsr.s    CYB_arprout
  68. CYB_arp2:lea    CYB_aud3temp(PC),a6
  69.     tst.b    3(a6)
  70.     beq.s    CYB_arp3
  71.     lea    $dff0c0,a5
  72.     bsr.s    CYB_arprout
  73. CYB_arp3:lea    CYB_aud4temp(PC),a6
  74.     tst.b    3(a6)
  75.     beq.s    CYB_arp4
  76.     lea    $dff0d0,a5
  77.     bra.s    CYB_arprout
  78. CYB_arp4:    rts
  79. CYB_arprout:
  80.     move.b    2(a6),d0
  81.     and.b    #$0f,d0
  82.     tst.b    d0
  83.     beq    CYB_arpegrt
  84.     cmp.b    #$01,d0
  85.     beq.s    CYB_portup
  86.     cmp.b    #$02,d0
  87.     beq.s    CYB_portdwn
  88.     cmp.b    #$0a,d0
  89.     beq.s    CYB_volslide
  90.     rts
  91. CYB_portup:
  92.     moveq    #0,d0
  93.     move.b    3(a6),d0
  94.     sub.w    d0,22(a6)
  95.     cmp.w    #$71,22(a6)
  96.     bpl.s    CYB_ok1
  97.     move.w    #$71,22(a6)
  98. CYB_ok1:    move.w    22(a6),6(a5)
  99.     rts
  100. CYB_portdwn:
  101.     moveq    #0,d0
  102.     move.b    3(a6),d0
  103.     add.w    d0,22(a6)
  104.     cmp.w    #$538,22(a6)
  105.     bmi.s    CYB_ok2
  106.     move.w    #$538,22(a6)
  107. CYB_ok2:    move.w    22(a6),6(a5)
  108.     rts
  109. CYB_volslide:
  110.     moveq    #0,d0
  111.     move.b    3(a6),d0
  112.     lsr.b    #4,d0
  113.     tst.b    d0
  114.     beq.s    CYB_voldwn
  115.     add.w    d0,18(a6)
  116.     cmp.w    #64,18(a6)
  117.     bmi.s    CYB_ok3
  118.     move.w    #64,18(a6)
  119. CYB_ok3:    move.w    18(a6),8(a5)
  120.     rts
  121. CYB_voldwn:
  122.     moveq    #0,d0
  123.     move.b    3(a6),d0
  124.     and.b    #$0f,d0
  125.     sub.w    d0,18(a6)
  126.     bpl.s    CYB_ok4
  127.     clr.w    18(a6)
  128. CYB_ok4:    move.w    18(a6),8(a5)
  129.     rts
  130. CYB_arpegrt:
  131.     move.w    CYB_counter(PC),d0
  132.     cmp.w    #1,d0
  133.     beq.s    CYB_loop2
  134.     cmp.w    #2,d0
  135.     beq.s    CYB_loop3
  136.     cmp.w    #3,d0
  137.     beq.s    CYB_loop4
  138.     cmp.w    #4,d0
  139.     beq.s    CYB_loop2
  140.     cmp.w    #5,d0
  141.     beq.s    CYB_loop3
  142.     rts
  143. CYB_loop2:
  144.     moveq    #0,d0
  145.     move.b    3(a6),d0
  146.     lsr.b    #4,d0
  147.     bra.s    CYB_cont
  148. CYB_loop3:
  149.     moveq    #$00,d0
  150.     move.b    3(a6),d0
  151.     and.b    #$0f,d0
  152.     bra.s    CYB_cont
  153. CYB_loop4:
  154.     move.w    16(a6),d2
  155.     bra.s    CYB_endpart
  156. CYB_cont:
  157.     add.w    d0,d0
  158.     moveq    #0,d1
  159.     move.w    16(a6),d1
  160.     and.w    #$fff,d1
  161.     lea    CYB_arpeggio(PC),a0
  162. CYB_loop5:
  163.     move.w    (a0,d0),d2
  164.     cmp.w    (a0),d1
  165.     beq.s    CYB_endpart
  166.     addq.l    #2,a0
  167.     bra.s    CYB_loop5
  168. CYB_endpart:
  169.     move.w    d2,6(a5)
  170.     rts
  171. CYB_rout2:
  172.     lea    CYB_data,a0
  173.     move.l    a0,a3
  174.     add.l    #$0c,a3
  175.     move.l    a0,a2
  176.     add.l    #$3b8,a2
  177.     add.l    #$43c,a0
  178.     move.l    CYB_partnrplay(PC),d0
  179.     moveq    #0,d1
  180.     move.b    (a2,d0),d1
  181.     asl.l    #8,d1
  182.     asl.l    #2,d1
  183.     add.l    CYB_partnote(PC),d1
  184.     move.l    d1,CYB_partpoint
  185.     clr.w    CYB_dmacon
  186.     lea    $dff0a0,a5
  187.     lea    CYB_aud1temp(PC),a6
  188.     bsr    CYB_playit
  189.     lea    $dff0b0,a5
  190.     lea    CYB_aud2temp(PC),a6
  191.     bsr    CYB_playit
  192.     lea    $dff0c0,a5
  193.     lea    CYB_aud3temp(PC),a6
  194.     bsr    CYB_playit
  195.     lea    $dff0d0,a5
  196.     lea    CYB_aud4temp(PC),a6
  197.     bsr    CYB_playit
  198.     move.w    #$01f4,d0
  199. CYB_rls:    dbf    d0,CYB_rls
  200.     move.w    #$8000,d0
  201.     or.w    CYB_dmacon,d0
  202.     move.w    d0,$dff096
  203.     lea    CYB_aud4temp(PC),a6
  204.     cmp.w    #1,14(a6)
  205.     bne.s    CYB_voice3
  206.     move.l    10(a6),$dff0d0
  207.     move.w    #1,$dff0d4
  208. CYB_voice3:
  209.     
  210.     lea    CYB_aud3temp(PC),a6
  211.     cmp.w    #1,14(a6)
  212.     bne.s    CYB_voice2
  213.     move.w    #1,$dff0c4
  214. CYB_voice2:
  215.     
  216.     lea    CYB_aud2temp(PC),a6
  217.     cmp.w    #1,14(a6)
  218.     bne.s    CYB_voice1
  219.     move.l    10(a6),$dff0b0
  220.     move.w    #1,$dff0b4
  221. CYB_voice1:
  222.     lea    CYB_aud1temp(PC),a6
  223.     cmp.w    #1,14(a6)
  224.     bne.s    CYB_voice0
  225.     move.l    10(a6),$dff0a0
  226.     move.w    #1,$dff0a4
  227. CYB_voice0:
  228.     move.l    CYB_partnote(PC),d0
  229.     add.l    #$10,d0
  230.     move.l    d0,CYB_partnote
  231.     cmp.l    #$400,d0
  232.     bne.s    CYB_stop
  233. CYB_higher:
  234.     clr.l    CYB_partnote
  235.     addq.l    #1,CYB_partnrplay
  236.     moveq    #0,d0
  237.     move.w    CYB_maxpart(PC),d0
  238.     move.l    CYB_partnrplay(PC),d1
  239.     cmp.l    d0,d1
  240.     bne.s    CYB_stop
  241.     clr.l    CYB_partnrplay
  242.     ;st    Pflag
  243. CYB_stop:tst.w    CYB_status
  244.     beq.s    CYB_stop2
  245.     clr.w    CYB_status
  246.     bra.s    CYB_higher
  247. CYB_stop2:
  248.     rts
  249. CYB_playit:
  250.     
  251.     move.l    (a0,d1.l),(a6)
  252.     addq.l    #4,d1
  253.     moveq    #0,d2
  254.     move.b    2(a6),d2
  255.     and.b    #$f0,d2
  256.     lsr.b    #4,d2
  257.     move.b    (a6),d0
  258.     and.b    #$f0,d0
  259.     or.b    d0,d2
  260.     tst.b    d2
  261.     beq.s    CYB_nosamplechange
  262.     moveq    #0,d3
  263.     lea    CYB_samples(PC),a1
  264.     move.l    d2,d4
  265.     asl.l    #2,d2
  266.     mulu    #$1e,d4
  267.     move.l    (a1,d2),4(a6)
  268.     move.w    (a3,d4.l),8(a6)
  269.     move.w    2(a3,d4.l),18(a6)
  270.     move.w    4(a3,d4.l),d3
  271.     tst.w    d3
  272.     beq.s    CYB_displace
  273.     move.l    4(a6),d2
  274.     add.l    d3,d2
  275.     move.l    d2,4(a6)
  276.     move.l    d2,10(a6)
  277.     move.w    6(a3,d4.l),8(a6)
  278.     move.w    6(a3,d4.l),14(a6)
  279.     move.w    18(a6),8(a5)
  280.     bra.s    CYB_nosamplechange
  281. CYB_displace:
  282.     move.l    4(a6),d2
  283.     add.l    d3,d2
  284.     move.l    d2,10(a6)
  285.     move.w    6(a3,d4.l),14(a6)
  286.     move.w    18(a6),8(a5)
  287. CYB_nosamplechange:
  288.     move.w    (a6),d0
  289.     and.w    #$fff,d0
  290.     tst.w    d0
  291.     beq.s    CYB_retrout
  292.     move.w    (a6),16(a6)
  293.     move.w    20(a6),$dff096
  294.     move.l    4(a6),(a5)
  295.     move.w    8(a6),4(a5)
  296.     move.w    (a6),d0
  297.     and.w    #$fff,d0
  298.     move.w    d0,6(a5)
  299.     move.w    20(a6),d0
  300.     or.w    d0,CYB_dmacon
  301. CYB_retrout:
  302.     tst.w    (a6)
  303.     beq.s    CYB_nonewper
  304.     move.w    (a6),22(a6)
  305. CYB_nonewper:
  306.     move.b    2(a6),d0
  307.     and.b    #$0f,d0
  308.     cmp.b    #$0b,d0
  309.     beq.s    CYB_posjmp
  310.     cmp.b    #$0c,d0
  311.     beq.s    CYB_setvol
  312.     cmp.b    #$0d,d0
  313.     beq.s    CYB_break
  314.     cmp.b    #$0e,d0
  315.     beq.s    CYB_setfil
  316.     cmp.b    #$0f,d0
  317.     beq.s    CYB_setspeed
  318.     rts
  319. CYB_posjmp:
  320.     not.w    CYB_status
  321.     moveq    #0,d0
  322.     move.b    3(a6),d0
  323.     subq.b    #1,d0
  324.     move.l    d0,CYB_partnrplay
  325.     rts
  326. CYB_setvol:
  327.     move.b    3(a6),8(a5)
  328.     rts
  329. CYB_break:
  330.     not.w    CYB_status
  331.     rts
  332. CYB_setfil:
  333.     moveq    #0,d0
  334.     move.b    3(a6),d0
  335.     and.b    #1,d0
  336.     rol.b    #1,d0
  337.     and.b    #$fd,$bfe001
  338.     or.b    d0,$bfe001
  339.     rts
  340. CYB_setspeed:
  341.     move.b    3(a6),d0
  342.     and.b    #$0f,d0
  343.     beq.s    CYB_back
  344.     clr.w    CYB_counter
  345.     move.b    d0,CYB_cool+3
  346. CYB_back:    rts
  347. CYB_aud1temp:
  348.     dcb.w    10,0
  349.     dc.w    1
  350.     dcb.w    2,0
  351. CYB_aud2temp:
  352.     dcb.w    10,0
  353.     dc.w    2
  354.     dcb.w    2,0
  355. CYB_aud3temp:
  356.     dcb.w    10,0
  357.     dc.w    4
  358.     dcb.w    2,0
  359. CYB_aud4temp:
  360.     dcb.w    10,0
  361.     dc.w    8
  362.     dcb.w    2,0
  363. CYB_partnote:    dc.l    0
  364. CYB_partnrplay:    dc.l    0
  365. CYB_counter:    dc.w    0
  366. CYB_partpoint:    dc.l    0
  367. CYB_samples:    dc.l    0
  368. CYB_sample1:    dcb.l    31,0
  369. CYB_maxpart:    dc.w    0
  370. CYB_dmacon:    dc.w    0
  371. CYB_status:    dc.w    0
  372. CYB_arpeggio:
  373.     dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c
  374.     dc.w $023a,$021a,$01fc,$01e0,$01c5,$01ac,$0194,$017d
  375.     dc.w $0168,$0153,$0140,$012e,$011d,$010d,$00fe,$00f0
  376.     dc.w $00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097
  377.     dc.w $008f,$0087,$007f,$0078,$0071,$0000,$0000,$0000
  378.