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

  1. *
  2. *        - SoundTracker pro playroutine -
  3. *
  4. *  To use this playroutine you have to take the following steps:
  5. *
  6. *  -    At the end of this source you will see labels named
  7. *    song,sample1,sample2,...,sample15, followed by 
  8. *    blk.b $.
  9. *    Fill in the length in bytes of the songdata and the samples
  10. *    behind the $-sign
  11. *    If you don't use one of the samples set its length to zero
  12. *
  13. *  -    Assemble the source
  14. *
  15. *  -    Load the song and the samples with the ri command:
  16. *    SEKA>ri
  17. *    FILENAME>songname
  18. *    START>song
  19. *    END>
  20. *    SEKA>ri
  21. *    FILENAME>sample1
  22. *    START>sample1
  23. *    END>
  24. *    SEKA>
  25. *        etc...
  26. *
  27. *  -    Write the object file with the wo command.
  28. *
  29. *        READY !
  30. *    (make sure you load the samples into chip mem)
  31. *
  32. *    To all who want to use this playroutine as part of their
  33. *    own program:
  34. *
  35. *    Because Soundtracker pro uses speeds with a resolution of 1/4
  36. *    the subroutine 'playmusic' must be called four times per
  37. *    display build-up.
  38. *    You should spread these four times evenly,so for PAL-mode
  39. *    this would mean the vertical blanking area and raster lines
  40. *    $4f,$9e and $ed
  41. *
  42. *    If you don't use speeds of 1/4 or 3/4 you can call the routine
  43. *    twice during the vertical blanking period,and twice at raster
  44. *    line $9e.
  45. *
  46. *    If you don't use speeds of 1/4,1/2 or 3/4 you can call the
  47. *    routine four times during the vertical blanking period,
  48. *    or any other raster line
  49. *    Only one of these four times will the notes actually be played
  50. *    so your interupt code can still be fast.
  51. *
  52. *    Before playing the music you must call 'initmusic'
  53.  
  54.  
  55.  
  56. start:    bsr    initmusic
  57.     move.l    $6c,a0
  58.     move.l    $2230,a1
  59.     move.l    #level3int,$6c
  60. waitforbutton:
  61.     btst    #10,$dff016            ; RIGHT button
  62.     bne    waitforbutton
  63.     move.l    a0,$6c
  64.     move.l    a1,$2230
  65.     move.w    #$000f,$dff096            ; DMA off
  66.     rts
  67.  
  68. ********    actually you should use graphicsbase+$32
  69. ********    instead of $2230.
  70.  
  71. initmusic:
  72.     move.w    #$0400,label72
  73.     clr.l    d0
  74.     move.b    song+$1d7,d0
  75.     cmp.b    #64,d0
  76.     bgt    lengthok
  77.     mulu    #$10,d0
  78.     move.w    d0,label72
  79. lengthok:
  80.     move.l    #6,label64
  81.     clr.w    label66
  82.     clr.l    label68
  83.     clr.l    label69
  84.     lea    $dff0a8,a0
  85.     clr.w    (a0)
  86.     clr.w    $10(a0)
  87.     clr.w    $20(a0)
  88.     clr.w    $30(a0)
  89.  
  90.     lea    label73,a0
  91.     move.l    #15,d0
  92. clearloop:
  93.     move.l    (a0)+,a1
  94.     clr.l    (a1)
  95.     dbf    d0,clearloop
  96.     rts
  97.  
  98. coplist:
  99.     dc.w $0180,0
  100.     dc.w $4f01,$ff00
  101.     dc.w $009a,$8010
  102.     dc.w $009c,$8010
  103.  
  104.     dc.w $5001,$ff00
  105.     dc.w $0180,$0800
  106.     dc.w $5101,$ff00
  107.     dc.w $0180,$0c00
  108.     dc.w $5201,$ff00
  109.     dc.w $0180,$0f00
  110.     dc.w $5301,$ff00
  111.     dc.w $0180,$0c00
  112.     dc.w $5401,$ff00
  113.     dc.w $0180,$0800
  114.     dc.w $5501,$ff00
  115.     dc.w $0180,0
  116.  
  117.  
  118.     dc.w $9e01,$ff00
  119.     dc.w $009a,$8010
  120.     dc.w $009c,$8010
  121.  
  122.     dc.w $9f01,$ff00
  123.     dc.w $0180,$0555
  124.     dc.w $a001,$ff00
  125.     dc.w $0180,$0999
  126.     dc.w $a101,$ff00
  127.     dc.w $0180,$0ccc
  128.     dc.w $a201,$ff00
  129.     dc.w $0180,$0999
  130.     dc.w $a301,$ff00
  131.     dc.w $0180,$0555
  132.     dc.w $a401,$ff00
  133.     dc.w $0180,0
  134.  
  135.  
  136.     dc.w $ed01,$ff00
  137.     dc.w $009a,$8010
  138.     dc.w $009c,$8010
  139.  
  140.     dc.w $ee01,$ff00
  141.     dc.w $0180,$0008
  142.     dc.w $ef01,$ff00
  143.     dc.w $0180,$000b
  144.     dc.w $f001,$ff00
  145.     dc.w $0180,$000f
  146.     dc.w $f101,$ff00
  147.     dc.w $0180,$000b
  148.     dc.w $f201,$ff00
  149.     dc.w $0180,$0008
  150.     dc.w $f301,$ff00
  151.     dc.w $0180,0
  152.     dc.w $ffff,$fffe
  153.  
  154. level3int:
  155.     move.l    #coplist,$2230
  156.     MOVEM.L D0-D1/A0-A1/A5-A6,-(A7)
  157.     LEA     $00DFF000,A0
  158.     MOVE.L    $00000004,A6        
  159.     MOVE.W    $001C(A0),D1
  160.     BTST    #$0E,D1
  161.     BEQ     level3end
  162.     AND.W   $001E(A0),D1
  163.     BTST    #$06,D1
  164.     BEQ     blitternotfinished
  165.     MOVEM.L $009C(A6),A1/A5
  166.     PEA     -$0024(A6)
  167.     JMP     (A5)
  168. blitternotfinished:
  169.     BTST    #$05,D1
  170.     BEQ    noblank
  171.     MOVEM.L    D0-D7/A0-A6,-(A7)
  172.     bsr    playmusic
  173.     MOVEM.L    (A7)+,D0-D7/A0-A6
  174.     MOVEM.L    $0090(A6),A1/A5
  175.     PEA    -$0024(A6)
  176.     JMP    (A5)
  177. noblank:BTST    #$04,D1
  178.     BEQ    level3end
  179.     MOVEM.L    D0-D7/A0-A6,-(A7)
  180.     bsr    playmusic
  181.     movem.l    (a7)+,d0-d7/a0-a6
  182.     MOVEM.L    $0084(A6),A1/A5
  183.     PEA    -$0024(A6)
  184.     JMP    (A5)
  185. level3end:
  186.     MOVEM.L (A7)+,D0-D1/A0-A1/A5-A6
  187.     RTE
  188.  
  189.  
  190. playmusic:
  191.     subq.w    #1,label64
  192.     bpl    label1
  193.     move.w    #3,label64
  194.     bra    label2
  195. label1:    rts
  196. label2:    tst.w    label70
  197.     bne    label3
  198.     bsr    label38
  199. label3:    addq.w    #1,label70
  200.     move.w    label70,d0
  201.     cmp.w    label65,d0
  202.     blt.s    label4
  203.     clr.w    label70
  204.     move.w    label66,d0
  205.     add.w    d0,label64
  206.     bra.L    label35
  207. label4:    lea    label74,a6
  208.     move.l    #$dff0a0,a5
  209.     bsr    label10
  210.     tst.b    3(a6)
  211.     beq.s    label5
  212.     bsr.s    label9
  213. label5:    lea    label75,a6
  214.     move.l    #$dff0b0,a5
  215.     bsr    label10
  216.     tst.b    3(a6)
  217.     beq.s    label6
  218.     bsr.s    label9
  219. label6:    lea    label76,a6
  220.     move.l    #$dff0c0,a5
  221.     bsr    label10
  222.     tst.b    3(a6)
  223.     beq.s    label7
  224.     bsr.s    label9
  225. label7:    lea    label77,a6
  226.     move.l    #$dff0d0,a5
  227.     bsr    label10
  228.     tst.b    3(a6)
  229.     beq.s    label8
  230.     bsr.s    label9
  231. label8:    bra.L    label44
  232. label9:    move.b    2(a6),d0
  233.     and.b    #$0f,d0
  234.     tst.b    d0
  235.     beq.L    label28
  236.     cmp.b    #1,d0
  237.     beq    label17
  238.     cmp.b    #2,d0
  239.     beq    label21
  240.     rts
  241. label10:btst    #2,26(a6)
  242.     bne    label16
  243.     btst    #3,26(a6)
  244.     bne    label20
  245.     rts
  246. label11:move.b    3(a6),19(a6)
  247.     rts
  248. label12:and.w    #$00ff,d0
  249.     mulu    label67,d0
  250.     lsr.l    #6,d0
  251.     move.w    d0,8(a5)
  252.     rts
  253. label13:move.b    3(a6),d0
  254.     lsr.w    #4,d0
  255.     and.w    #$f,d0
  256.     cmp.w    #2,d0
  257.     blt    label14
  258.     move.w    d0,label65
  259.     move.b    3(a6),d0
  260.     and.w    #$3,d0
  261.     move.w    d0,label66
  262. label14:rts
  263. label15:move.b    3(a6),d0
  264.     and.b    #$01,d0
  265.     lsl.b    #1,d0
  266.     eor.b    #2,d0
  267.     and.b    #$fd,$bfe001
  268.     or.b    d0,$bfe001
  269.     rts
  270. label16:clr.w    d0
  271.     move.b    24(a6),d0
  272.     bra    label18
  273. label17:and.b    #%11110000,26(a6)
  274.     clr.w    d0
  275.     move.b    3(a6),d0
  276. label18:sub.w    d0,22(a6)
  277.     cmp.w    #$71,22(a6)
  278.     bpl.s    label19
  279.     move.w    #$71,22(a6)
  280. label19:move.w    22(a6),6(a5)
  281.     rts
  282. label20:clr.w    d0
  283.     move.b    24(a6),d0
  284.     bra    label22
  285. label21:and.b    #%11110000,26(a6)
  286.     clr.w    d0
  287.     move.b    3(a6),d0
  288. label22:add.w    d0,22(a6)
  289.     cmp.w    #$358,22(a6)
  290.     bmi.s    label23
  291.     move.w    #$358,22(a6)
  292. label23:move.w    22(a6),6(a5)
  293.     rts
  294. label24:clr.w    d0
  295.     move.b    3(a6),d0
  296. label25:move.w    d0,d2
  297.     lsr.b    #4,d0
  298.     and.b    #$0f,d2
  299.     add.w    d2,18(a6)
  300.     sub.w    d0,18(a6)
  301.     bmi    label27
  302.     cmp.w    #$40,18(a6)
  303.     ble    label26
  304.     move.w    #$40,18(a6)
  305. label26:rts
  306. label27:clr.w    18(a6)
  307.     rts
  308. label28:cmp.w    #1,label70
  309.     beq.s    label29
  310.     cmp.w    #2,label70
  311.     beq.s    label30
  312.     cmp.w    #3,label70
  313.     beq.s    label31
  314.     cmp.w    #4,label70
  315.     beq.s    label29
  316.     cmp.w    #5,label70
  317.     beq.s    label30
  318.     rts
  319. label29:clr.l    d0
  320.     move.b    3(a6),d0
  321.     lsr.b    #4,d0
  322.     bra.s    label32
  323. label30:clr.l    d0
  324.     move.b    3(a6),d0
  325.     and.b    #$0f,d0
  326.     bra.s    label32
  327. label31:move.w    16(a6),d2
  328.     bra.s    label34
  329. label32:lsl.w    #1,d0
  330.     move.w    16(a6),d3
  331.     lea    label78,a0
  332. label33:move.w    (a0,d0),d2
  333.     cmp.w    (a0)+,d3
  334.     bne    label33
  335. label34:move.w    d2,6(a5)
  336.     rts
  337. label35:lea    song,a0
  338.     move.l    a0,a3
  339.     add.l    #$0c,a3
  340.     move.l    a0,a2
  341.     add.l    #$1d8,a2
  342.     add.l    #$258,a0 
  343.     move.l    label69,d0
  344.     clr.l    d1
  345.     move.b    (a2,d0),d1
  346.     mulu    label72,d1
  347.     add.l    label68,d1
  348.     clr.w    label71
  349.     move.l    #$dff0a0,a5
  350.     lea    label74,a6
  351.     bsr.L    label45
  352.     move.l    #$dff0b0,a5
  353.     lea    label75,a6
  354.     bsr.L    label45
  355.     move.l    #$dff0c0,a5
  356.     lea    label76,a6
  357.     bsr.L    label45
  358.     move.l    #$dff0d0,a5
  359.     lea    label77,a6
  360.     bsr.L    label45
  361.     move.b    label77+27,d0
  362.     beq    label36
  363.     bsr    label61
  364. label36:bsr    label59
  365.     move.l #$1f4,d0
  366. label37:dbf    d0,label37
  367.     move.w    label71,d0
  368.     or.w    #$8000,d0
  369.     move.w    d0,$dff096
  370.     bra     label43
  371. label38:lea    label77,a6
  372.     tst.w    (a6)
  373.     beq    label39
  374.     move.w    14(a6),$dff0d4
  375.     cmp.w   #1,14(a6)
  376.     beq    label39
  377.     move.l    10(a6),$dff0d0
  378. label39:lea    label76,a6
  379.     tst.w    (a6)
  380.     beq    label40
  381.     move.w    14(a6),$dff0c4
  382.     cmp.w   #1,14(a6)
  383.     beq    label40
  384.     move.l    10(a6),$dff0c0
  385. label40:lea    label75,a6
  386.     tst.w    (a6)
  387.     beq    label41
  388.     move.w    14(a6),$dff0b4
  389.     cmp.w   #1,14(a6)
  390.     beq    label41 
  391.     move.l    10(a6),$dff0b0
  392. label41:lea    label74,a6
  393.     tst.w    (a6)
  394.     beq    label42
  395.     move.w    14(a6),$dff0a4
  396.     cmp.w   #1,14(a6)
  397.     beq    label42
  398.     move.l    10(a6),$dff0a0
  399. label42:rts
  400. label43:move.l    label68,d0
  401.     add.l    #$10,d0
  402.     move.l    d0,label68
  403.     cmp.w    label72,d0
  404.     bne.s    label44
  405.     clr.l    label68
  406.     addq.l    #1,label69
  407.     clr.l    d0
  408.     move.b    song+$1d6,d0
  409.     move.l    label69,d1
  410.     cmp.l    d0,d1
  411.     blt.s    label44
  412.     clr.l    label69
  413. label44:rts
  414. label45:move.l    (a0,d1),(a6)
  415.     addq.l    #4,d1
  416.     clr.l    d2
  417.     move.b    2(a6),d2 
  418.     lsr.b    #4,d2
  419.     tst.b    d2
  420.     beq.s    label46
  421.     clr.l    d3
  422.     lea    label73-4,a1
  423.     move.l    d2,d4 
  424.     mulu    #4,d2
  425.     mulu    #$1e,d4
  426.     move.l    (a1,d2),4(a6)
  427.     move.w    (a3,d4),8(a6)
  428.     move.w    2(a3,d4),18(a6)
  429.     clr.b    25(a6)
  430.     move.w    4(a3,d4),d3
  431.     move.l    4(a6),d2
  432.     add.l    d3,d2
  433.     move.l    d2,10(a6)
  434.     move.w    6(a3,d4),14(a6)
  435. label46:tst.w    (a6)
  436.     beq.s    label47
  437.     move.w    (a6),16(a6)
  438.     move.w    (a6),22(a6)
  439.     and.b    #%11110000,26(a6)
  440.     move.w    20(a6),$dff096
  441.     move.l    4(a6),(a5)
  442.     move.w    8(a6),4(a5)
  443.     move.w    (a6),6(a5)
  444.     move.w    20(a6),d0
  445.     or.w    d0,label71
  446. label47:move.w    20(a6),d0
  447.     lsl.w    #4,d0
  448.     add.w    20(a6),d0
  449.     move.w    d0,$dff09e
  450.     bsr    label49
  451.     clr.w    d0
  452.     move.b    25(a6),d0
  453.     beq    label48
  454.     bsr    label25
  455. label48:btst    #0,26(a6)
  456.     bne    label16
  457.     btst    #1,26(a6)
  458.     bne    label20
  459.     rts
  460. label49:move.b    2(a6),d0
  461.     and.b    #$0f,d0
  462.     cmp.b    #3,d0
  463.     beq    label51
  464.     cmp.b    #4,d0
  465.     beq    label52
  466.     cmp.b    #5,d0
  467.     beq    label53
  468.     cmp.b    #6,d0
  469.     beq    label54
  470.     cmp.b    #7,d0
  471.     beq    label57
  472.     cmp.b    #8,d0
  473.     beq    label60
  474.     cmp.b    #9,d0
  475.     beq    label17
  476.     cmp.b    #$a,d0
  477.     beq    label21
  478.     cmp.b    #$b,d0
  479.     beq    label50
  480.     cmp.b    #$c,d0
  481.     beq    label11
  482.     cmp.b    #$d,d0
  483.     beq    label24
  484.     cmp.b    #$e,d0
  485.     beq    label15
  486.     cmp.b    #$f,d0
  487.     beq    label13
  488.     rts
  489. label50:move.b    3(a6),25(a6)
  490.     rts
  491. label51:move.b    #$0001,d0
  492.     bra    label55
  493. label52:move.b    #%0010,d0
  494.     bra    label55
  495. label53:move.b    #%0101,d0
  496.     bra    label55
  497. label54:move.b    #%1010,d0
  498. label55:and.b    #$f0,26(a6)
  499.     or.b    d0,26(a6)
  500.     move.b    3(a6),24(a6)
  501.     bne    label56
  502.     clr.b    26(a6)
  503. label56:rts
  504. label57:clr.w    d0
  505.     move.b    3(a6),d0
  506.     cmp.w    #$40,d0
  507.     ble    label58
  508.     move.w    #$40,d0
  509. label58:move.w    d0,label67
  510.     clr.b    label77+27
  511.     rts
  512. label59:move.l    #$dff0a0,a5
  513.     move.w    label74+18,d0
  514.     bsr    label12
  515.     move.l    #$dff0b0,a5
  516.     move.w    label75+18,d0
  517.     bsr    label12
  518.     move.l    #$dff0c0,a5
  519.     move.w    label76+18,d0
  520.     bsr    label12
  521.     move.l    #$dff0d0,a5
  522.     move.w    label77+18,d0
  523.     bsr    label12
  524.     rts
  525. label60:move.b    3(a6),label77+27
  526.     rts
  527. label61:clr.w    d0
  528.     move.b    label77+27,d0
  529.     move.w    d0,d2
  530.     lsr.b    #4,d0
  531.     and.b    #$0f,d2
  532.     add.w    d2,label67
  533.     sub.w    d0,label67
  534.     bmi    label63
  535.     cmp.w    #$40,label67
  536.     ble    label62
  537.     move.w    #$40,label67
  538. label62:rts
  539. label63:clr.w    label67
  540.     rts
  541. label64:dc.w 0
  542. label65:dc.w 6
  543. label66:dc.w 0
  544. label67:dc.w $40
  545. label68:dc.l 0
  546. label69:dc.l 0
  547. label70:dc.w 0
  548. label71:dc.w 0
  549. label72:dc.w $400
  550. label73:dc.l    sample1
  551.     dc.l    sample2
  552.     dc.l    sample3
  553.     dc.l    sample4
  554.     dc.l    sample5
  555.     dc.l    sample6
  556.     dc.l    sample7
  557.     dc.l    sample8
  558.     dc.l    sample9
  559.     dc.l    sample10
  560.     dc.l    sample11
  561.     dc.l    sample12
  562.     dc.l    sample13
  563.     dc.l    sample14
  564.     dc.l    sample15
  565. label74:dc.l 0,0,0,0
  566.     dc.w 0,0,1,0,0,0
  567. label75:dc.l 0,0,0,0
  568.     dc.w 0,0,2,0,0,0
  569. label76:dc.l 0,0,0,0
  570.     dc.w 0,0,4,0,0,0
  571. label77:dc.l 0,0,0,0
  572.     dc.w 0,0,8,0,0,0
  573. label78:dc.w $0358,$0328,$02FA,$02D0,$02A6,$0280,$025C,$023A
  574.     dc.w $021A,$01FC,$01E0,$01C5,$01AC,$0194,$017D,$0168
  575.     dc.w $0153,$0140,$012E,$011D,$010D,$00FE,$00F0,$00E2
  576.     dc.w $00D6,$00CA,$00BE,$00B4,$00AA,$00A0,$0097,$008F
  577.     dc.w $0087,$007F,$0078,$0071,$0000
  578. song:            blk.b    $
  579. even                ;
  580.     sample1:    blk.b    $
  581. even                ;
  582.     sample2:    blk.b    $
  583. even                ;
  584.     sample3:    blk.b    $
  585. even                ;
  586.     sample4:    blk.b    $
  587. even                ;
  588.     sample5:    blk.b    $
  589. even                ;
  590.     sample6:    blk.b    $
  591. even                ;
  592.     sample7:    blk.b    $
  593. even                ;
  594.     sample8:    blk.b    $
  595. even                ;
  596.     sample9:    blk.b    $
  597. even                ;
  598.     sample10:    blk.b    $
  599. even                ;
  600.     sample11:    blk.b    $
  601. even                ;
  602.     sample12:    blk.b    $
  603. even                ;
  604.     sample13:    blk.b    $
  605. even                ;
  606.     sample14:    blk.b    $
  607. even                ;
  608.     sample15:    blk.b    $
  609.  
  610.