home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Misc / LIONSSOUNDUTILSPACK.DMS / in.adf / sources / BLUE-playroutine.s < prev    next >
Encoding:
Text File  |  1989-03-06  |  8.7 KB  |  462 lines

  1. *** playroutine ***
  2.  
  3. songlen:    equ    0
  4. smp1len:    equ    0
  5. smp2len:    equ    0
  6. smp3len:    equ    0
  7. smp4len:    equ    0
  8. smp5len:    equ    0
  9. smp6len:    equ    0
  10. smp7len:    equ    0
  11. smp8len:    equ    0
  12. smp9len:    equ    0
  13. smpAlen:    equ    0
  14. smpBlen:    equ    0
  15. smpClen:    equ    0
  16. smpDlen:    equ    0
  17. smpElen:    equ    0
  18. smpFlen:    equ    0
  19. tempo:        equ    0
  20.  
  21.         bsr.s    mt_init
  22.  
  23. mt_wait:    btst    #$a,$dff016        
  24.         bne.s    mt_wait1
  25.         not.b    mt_onoff-v(a5)
  26.         bne.s    mt_wait1
  27.         move.w    #$f,$dff096
  28. mt_wait1:    btst    #$a,$dff016
  29.         beq.s    mt_wait1
  30.         btst    #6,$bfe001
  31.         bne.s    mt_wait
  32.  
  33. mt_end:        move.b    #$1,$bfdd00
  34.         move.w    #$f,$dff096
  35.         move.w    #$4000,$dff09a
  36.         move.l    mt_oldirq(pc),$78.w
  37.         move.w    #$c000,$dff09a
  38.         moveq    #0,d0
  39.         rts
  40.  
  41. mt_init:    lea    v(pc),a5
  42.         lea    smp1data-v(a5),a0
  43.         lea    mt_samples-v(a5),a1
  44.         lea    mt_smplentab-v(a5),a2
  45.         moveq    #14,d0
  46. mt_initloop:    move.l    a0,(a1)+
  47.         clr.l    (a0)
  48.         adda.w    (a2)+,a0
  49.         dbf    d0,mt_initloop
  50.  
  51.         move.w    #$f,$dff096
  52.         clr.w    $dff0a8
  53.         clr.w    $dff0b8
  54.         clr.w    $dff0c8
  55.         clr.w    $dff0d8
  56.         clr.w    mt_partnrplay-v(a5)
  57.         clr.w    mt_partnote-v(a5)
  58.  
  59.         move.b    songdata+$1d6-v(a5),mt_maxpart+1-v(a5)
  60.         tst.w    mt_speed-v(a5)
  61.         bne.s    mt_init1
  62.         move.b    songdata+$1d7-v(a5),mt_speed+1-v(a5)
  63. mt_init1:    cmp.w    #30,mt_speed-v(a5)
  64.         bcs.s    mt_init2
  65.         cmp.w    #210,mt_speed-v(a5)
  66.         bls.s    mt_init_end
  67. mt_init2:    move.w    #122,mt_speed-v(a5)
  68. mt_init_end:    st    mt_onoff-v(a5)
  69.         move.w    #$4000,$dff09a
  70.         move.l    $78.w,mt_oldirq-v(a5)
  71.         lea    mt_newirq-v(a5),a0
  72.         move.l    a0,$78.w
  73.         move.w    #$c000,$dff09a
  74.         bsr    mt_speedset1
  75.         move.b    #$11,$bfde00
  76.         move.b    #$81,$bfdd00
  77.         rts
  78.  
  79. mt_newirq:    movem.l    d0-d7/a0-a6,-(a7)
  80.         lea    $dff000,a0
  81.         move.w    $1c(a0),d0
  82.         btst    #$e,d0
  83.         beq.s    mt_newirq_end
  84.         lea    v(pc),a5
  85.         tst.w    mt_onoff-v(a5)
  86.         beq.s    mt_newirq_end
  87.         move.w    $1e(a0),d0
  88.         btst    #13,d0
  89.         beq.s    mt_newirq_end
  90.         move.b    $bfdd00,d0
  91.         bclr    #7,d0
  92.         move.l    4.w,a6
  93.         move.l    240(a6),a6
  94.         or.b    d0,41(a6)
  95.         btst    #0,d0
  96.         beq.s    mt_newirq_end
  97.         bsr.s    mt_music
  98. mt_newirq_end:    movem.l    (a7)+,d0-d7/a0-a6
  99.         dc.w    $4ef9
  100. mt_oldirq:    dc.l    0
  101.  
  102. mt_music:    addq.w    #1,mt_counter-v(a5)
  103.         cmp.w    #6,mt_counter-v(a5)
  104.         bne.s    mt_notsix
  105.         clr.w    mt_counter-v(a5)
  106.         bra    mt_rout2
  107.  
  108. mt_notsix:    lea    mt_aud1temp-v(a5),a6
  109.         tst.b    3(a6)
  110.         beq.s    mt_arp1
  111.         lea    $dff0a0,a4
  112.         bsr.s    mt_arprout
  113. mt_arp1:    lea    mt_aud2temp-v(a5),a6
  114.         tst.b    3(a6)
  115.         beq.s    mt_arp2
  116.         lea    $dff0b0,a4
  117.         bsr.s    mt_arprout
  118. mt_arp2:    lea    mt_aud3temp-v(a5),a6
  119.         tst.b    3(a6)
  120.         beq.s    mt_arp3
  121.         lea    $dff0c0,a4
  122.         bsr.s    mt_arprout
  123. mt_arp3:    lea    mt_aud4temp-v(a5),a6
  124.         tst.b    3(a6)
  125.         beq    mt_stop
  126.         lea    $dff0d0,a4
  127.  
  128. mt_arprout:    tst.w    24(a6)
  129.         beq.s    mt_noslide
  130.         clr.w    d0
  131.         move.b    25(a6),d0
  132.         lsr.b    #4,d0
  133.         tst.b    d0
  134.         beq.s    mt_voldwn2
  135.         bsr    mt_pushvol1
  136.         bra.s    mt_noslide
  137.  
  138. mt_voldwn2:    clr.w    d0
  139.         move.b    25(a6),d0
  140.         bsr    mt_pushvol2
  141.  
  142. mt_noslide:    move.b    2(a6),d0
  143.         and.b    #$f,d0
  144.         tst.b    d0
  145.         beq    mt_arpegrt
  146.         cmp.b    #1,d0
  147.         beq.s    mt_portup
  148.         cmp.b    #2,d0
  149.         beq.s    mt_portdwn
  150.         cmp.b    #5,d0
  151.         bls    mt_arpegrt
  152.         cmp.b    #8,d0
  153.         bls.s    mt_portup
  154.         cmp.b    #11,d0
  155.         bls.s    mt_portdwn
  156.         cmp.b    #13,d0
  157.         beq.s    mt_volup
  158.         rts
  159.  
  160. mt_portup:    clr.w    d0
  161.         move.b    3(a6),d0
  162.         sub.w    d0,22(a6)
  163.         cmp.w    #$71,22(a6)
  164.         bcc.s    mt_ok1
  165.         move.w    #$71,22(a6)
  166. mt_ok1:        move.w    22(a6),6(a4)
  167.         rts
  168.  
  169. mt_portdwn:    clr.w    d0
  170.         move.b    3(a6),d0
  171.         add.w    d0,22(a6)
  172.         cmp.w    #$358,22(a6)
  173.         bls.s    mt_ok2
  174.         move.w    #$358,22(a6)
  175. mt_ok2:        move.w    22(a6),6(a4)
  176.         rts
  177.  
  178. mt_volup:    clr.w    d0
  179.         move.b    3(a6),d0
  180.         lsr.b    #4,d0
  181.         tst.b    d0
  182.         beq.s    mt_voldwn
  183. mt_pushvol1:    add.w    d0,$12(a6)
  184.         cmp.w    #$40,$12(a6)
  185.         bls.s    mt_ok3
  186.         move.w    #$40,$12(a6)
  187. mt_ok3:        move.w    $12(a6),8(a4)
  188.         rts
  189.  
  190. mt_voldwn:    clr.w    d0
  191.         move.b    3(a6),d0
  192. mt_pushvol2:    and.b    #$f,d0
  193.         sub.w    d0,$12(a6)
  194.         bcc.s    mt_ok4
  195.         clr.w    $12(a6)
  196. mt_ok4:        move.w    $12(a6),8(a4)
  197.         rts
  198.  
  199. mt_arpegrt:    cmp.w    #1,mt_counter-v(a5)
  200.         beq.s    mt_loop2
  201.         cmp.w    #2,mt_counter-v(a5)
  202.         beq.s    mt_loop3
  203.         cmp.w    #3,mt_counter-v(a5)
  204.         beq.s    mt_loop4
  205.         cmp.w    #4,mt_counter-v(a5)
  206.         beq.s    mt_loop2
  207.         cmp.w    #5,mt_counter-v(a5)
  208.         beq.s    mt_loop3
  209.         rts
  210.  
  211. mt_loop2:    moveq    #0,d0
  212.         move.b    3(a6),d0
  213.         lsr.b    #4,d0
  214.         bra.s    mt_cont
  215. mt_loop3:    moveq    #0,d0
  216.         move.b    3(a6),d0
  217.         and.b    #$f,d0
  218.         bra.s    mt_cont
  219. mt_loop4:    move.w    16(a6),d2
  220.         bra.s    mt_endpart
  221. mt_cont:    lsl.w    #1,d0
  222.         moveq    #0,d1
  223.         move.w    16(a6),d1
  224.         lea    mt_arpeggio-v(a5),a0
  225. mt_loop5:    move.w    (a0,d0.w),d2
  226.         cmp.w    (a0),d1
  227.         beq.s    mt_endpart
  228.         addq.l    #2,a0
  229.         bra.s    mt_loop5
  230.  
  231. mt_endpart:    move.w    d2,6(a4)
  232.         rts
  233.  
  234. mt_rout2:    lea    songdata-v(a5),a0
  235.         lea    12(a0),a3
  236.         lea    $1d8(a0),a2
  237.         add.w    #$258,a0
  238.         move.w    mt_partnrplay-v(a5),d0
  239.         move.b    (a2,d0.w),d1
  240.         lsl.w    #8,d1
  241.         lsl.w    #2,d1
  242.         add.w    mt_partnote-v(a5),d1
  243.         clr.w    mt_dmacon-v(a5)
  244.  
  245.         lea    $dff0a0,a4
  246.         lea    mt_aud1temp-v(a5),a6
  247.         bsr    mt_playit
  248.  
  249.         lea    $dff0b0,a4
  250.         lea    mt_aud2temp-v(a5),a6
  251.         bsr    mt_playit
  252.  
  253.         lea    $dff0c0,a4
  254.         lea    mt_aud3temp-v(a5),a6
  255.         bsr    mt_playit
  256.  
  257.         lea    $dff0d0,a4
  258.         lea    mt_aud4temp-v(a5),a6
  259.         bsr    mt_playit
  260.  
  261.         move.w    #$1f4,d0
  262. mt_rls:        dbf    d0,mt_rls
  263.  
  264.         move.w    #$8000,d0
  265.         add.w    mt_dmacon-v(a5),d0
  266.         move.w    d0,$dff096
  267.  
  268.         lea    mt_aud4temp-v(a5),a6
  269.         cmp.w    #1,14(a6)
  270.         bne.s    mt_voice3
  271.         move.l    10(a6),$dff0d0
  272.         move.w    14(a6),$dff0d4
  273. mt_voice3:    lea    mt_aud3temp-v(a5),a6
  274.         cmp.w    #1,14(a6)
  275.         bne.s    mt_voice2
  276.         move.l    10(a6),$dff0c0
  277.         move.w    14(a6),$dff0c4
  278. mt_voice2:    lea    mt_aud2temp-v(a5),a6
  279.         cmp.w    #1,14(a6)
  280.         bne.s    mt_voice1
  281.         move.l    10(a6),$dff0b0
  282.         move.w    14(a6),$dff0b4
  283. mt_voice1:    lea    mt_aud1temp-v(a5),a6
  284.         cmp.w    #1,14(a6)
  285.         bne.s    mt_voice0
  286.         move.l    10(a6),$dff0a0
  287.         move.w    14(a6),$dff0a4
  288. mt_voice0:    add.w    #$10,mt_partnote-v(a5)
  289.         cmp.w    #$400,mt_partnote-v(a5)
  290.         bne.s    mt_stop
  291.         clr.w    mt_partnote-v(a5)
  292.         addq.w    #1,mt_partnrplay-v(a5)
  293.         and.w    #$7f,mt_partnrplay-v(a5)
  294.         move.w    mt_maxpart-v(a5),d0
  295.         sub.w    mt_partnrplay-v(a5),d0
  296.         bne.s    mt_stop
  297.         clr.w    mt_partnrplay-v(a5)
  298. mt_stop:    rts
  299.  
  300. mt_playit:    move.l    (a0,d1.w),(a6)
  301.         addq.w    #4,d1
  302.         moveq    #0,d2
  303.         move.b    2(a6),d2
  304.         and.b    #$f0,d2
  305.         lsr.b    #4,d2
  306.         tst.b    d2
  307.         beq.s    mt_nosamplechange
  308.         moveq    #0,d3
  309.         lea    mt_samples-4(pc),a1
  310.         move.l    d2,d4
  311.         lsl.l    #2,d2
  312.         mulu    #$1e,d4
  313.         move.l    (a1,d2),4(a6)
  314.         move.w    (a3,d4),8(a6)
  315.         move.w    2(a3,d4),18(a6)
  316.         move.w    18(a6),8(a4)
  317.         move.w    4(a3,d4),d3
  318.         add.l    4(a6),d3
  319.         move.l    d3,10(a6)
  320.         move.w    6(a3,d4),14(a6)
  321.         cmp.w    #1,14(a6)
  322.         beq.s    mt_nosamplechange
  323.         move.l    10(a6),4(a6)
  324.         move.w    14(a6),8(a6)
  325.  
  326. mt_nosamplechange:
  327.         tst.w    (a6)
  328.         beq.s    mt_retrout
  329.         move.w    (a6),16(a6)
  330.         move.w    20(a6),$dff096
  331.         move.l    4(a6),(a4)
  332.         move.w    8(a6),4(a4)
  333.         move.w    (a6),6(a4)
  334.         move.w    20(a6),d0
  335.         or.w    d0,mt_dmacon-v(a5)
  336.  
  337. mt_retrout:    move.w    20(a6),d0
  338.         lsl.w    #4,d0
  339.         add.w    20(a6),d0
  340.         move.w    d0,$dff09e
  341.         tst.w    (a6)
  342.         beq.s    mt_nonewper
  343.         move.w    (a6),22(a6)
  344. mt_nonewper:    move.b    2(a6),d0
  345.         and.b    #$f,d0
  346.         cmp.b    #$e,d0
  347.         bne.s    mt_noset
  348.         move.w    2(a6),24(a6)
  349.         rts
  350. mt_noset:    tst.b    3(a6)
  351.         bne.s    mt_noclr
  352.         clr.w    24(a6)
  353. mt_noclr:    cmp.b    #3,d0
  354.         beq    mt_modvol
  355.         cmp.b    #6,d0
  356.         beq    mt_modvol
  357.         cmp.b    #9,d0
  358.         beq    mt_modvol
  359.         cmp.b    #4,d0
  360.         beq    mt_modper
  361.         cmp.b    #7,d0
  362.         beq    mt_modper
  363.         cmp.b    #10,d0
  364.         beq    mt_modper
  365.         cmp.b    #5,d0
  366.         beq    mt_modvolper
  367.         cmp.b    #8,d0
  368.         beq    mt_modvolper
  369.         cmp.b    #11,d0
  370.         beq    mt_modvolper
  371.         cmp.b    #15,d0
  372.         beq.s    mt_speedset
  373.         cmp.b    #12,d0
  374.         bne.s    mt_nochnge
  375.         move.b    3(a6),8(a4)
  376. mt_nochnge:    rts
  377.  
  378. mt_speedset:    cmp.b    #30,$3(a6)
  379.         bcs.s    mt_speedslide
  380.         cmp.b    #227,$3(a6)
  381.         bcc.s    mt_speedslide
  382.         cmp.b    #210,$3(a6)
  383.         bhi.s    mt_speedsetend
  384.         move.b    3(a6),mt_speed+1-v(a5)
  385. mt_speedset1:    move.l    #$1b1200,d0
  386.         divu    mt_speed-v(a5),d0
  387.         move.b    d0,$bfd400
  388.         lsr.w    #8,d0
  389.         move.b    d0,$bfd500
  390. mt_speedsetend:    rts
  391.  
  392. mt_speedslide:    move.w    mt_speed-v(a5),d0
  393.         add.b    3(a6),d0
  394.         cmp.b    #30,d0
  395.         bcc.s    mt_speedset2
  396.         move.w    #30,mt_speed-v(a5)
  397.         bra.s    mt_speedset1
  398. mt_speedset2:    cmp.b    #210,d0
  399.         bls.s    mt_speedset3
  400.         move.w    #210,mt_speed-v(a5)
  401.         bra.s    mt_speedset1
  402. mt_speedset3:    move.b    d0,mt_speed+1-v(a5)
  403.         bra.s    mt_speedset1
  404.  
  405. mt_modvol:    move.w    20(a6),d0
  406.         bra.s    mt_push
  407.  
  408. mt_modper:    move.w    20(a6),d0
  409.         lsl.w    #4,d0
  410.         bra.s    mt_push
  411.  
  412. mt_modvolper:    move.w    20(a6),d0
  413.         lsl.w    #4,d0
  414.         add.w    20(a6),d0
  415.  
  416. mt_push:    add.w    #$8000,d0
  417.         move.w    d0,$dff09e
  418.         rts
  419.  
  420. v:
  421. mt_aud1temp:    dc.w    0,0,0,0,0,0,0,0,0,0,1,0,0
  422. mt_aud2temp:    dc.w    0,0,0,0,0,0,0,0,0,0,2,0,0
  423. mt_aud3temp:    dc.w    0,0,0,0,0,0,0,0,0,0,4,0,0
  424. mt_aud4temp:    dc.w    0,0,0,0,0,0,0,0,0,0,8,0,0
  425. mt_partnote:    dc.w    0
  426. mt_partnrplay:    dc.w    0
  427. mt_counter:    dc.w    0
  428. mt_samples:    blk.l    15,0
  429. mt_maxpart:    dc.w    0
  430. mt_dmacon:    dc.w    0
  431. mt_onoff:    dc.w    0
  432. mt_speed:    dc.w    tempo
  433. mt_smplentab:    dc.w    smp1len,smp2len,smp3len,smp4len
  434.         dc.w    smp5len,smp6len,smp7len,smp8len
  435.         dc.w    smp9len,smpAlen,smpBlen,smpClen
  436.         dc.w    smpDlen,smpElen,smpFlen
  437.  
  438. mt_arpeggio:
  439. dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c
  440. dc.w $023a,$021a,$01fc,$01e0,$01c5,$01ac,$0194,$017d
  441. dc.w $0168,$0153,$0140,$012e,$011d,$010d,$00fe,$00f0
  442. dc.w $00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097
  443. dc.w $008f,$0087,$007f,$0078,$0071
  444.  
  445. songdata:    blk.b    songlen
  446. smp1data:    blk.b    smp1len
  447. smp2data:    blk.b    smp2len
  448. smp3data:    blk.b    smp3len
  449. smp4data:    blk.b    smp4len
  450. smp5data:    blk.b    smp5len
  451. smp6data:    blk.b    smp6len
  452. smp7data:    blk.b    smp7len
  453. smp8data:    blk.b    smp8len
  454. smp9data:    blk.b    smp9len
  455. smpAdata:    blk.b    smpAlen
  456. smpBdata:    blk.b    smpBlen
  457. smpCdata:    blk.b    smpClen
  458. smpDdata:    blk.b    smpDlen
  459. smpEdata:    blk.b    smpElen
  460. smpFdata:    blk.b    smpFlen
  461.         dc.l    0
  462.