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

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