home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Assembler / dse-src5.dms / in.adf / replay10.s < prev    next >
Encoding:
Text File  |  1990-05-07  |  7.7 KB  |  536 lines

  1. ;*********************************
  2. ;* SoundTracker VI - Playroutine *
  3. ;*                               *
  4. ;* Improved by Unknown of D.O.C  *
  5. ;* for SoundTracker IV and VI... *
  6. ;*********************************
  7.  
  8. mt_speed=$1f4
  9.  
  10. bsr.s    mt_init
  11. move.w    #$4000,$dff09a
  12. move.l    $00006c,mt_oldirq+2
  13. move.l    #mt_newirq,$00006c
  14. move.w    #$c000,$dff09a
  15.  
  16. mt_wait:
  17. btst    #6,$bfe001
  18. bne.s    mt_wait
  19.  
  20. move.w    #$000f,$dff096
  21. move.w    #$4000,$dff09a
  22. move.l    mt_oldirq+2,$00006c
  23. move.w    #$c000,$dff09a
  24. clr.l    d0
  25. rts
  26.  
  27. mt_init:
  28. move.l    #mt_snd1,mt_sample1
  29. move.l    #mt_snd2,mt_sample2
  30. move.l    #mt_snd3,mt_sample3
  31. move.l    #mt_snd4,mt_sample4
  32. move.l    #mt_snd5,mt_sample5
  33. move.l    #mt_snd6,mt_sample6
  34. move.l    #mt_snd7,mt_sample7
  35. move.l    #mt_snd8,mt_sample8
  36. move.l    #mt_snd9,mt_sample9
  37. move.l    #mt_snda,mt_sample10
  38. move.l    #mt_sndb,mt_sample11
  39. move.l    #mt_sndc,mt_sample12
  40. move.l    #mt_sndd,mt_sample13
  41. move.l    #mt_snde,mt_sample14
  42. move.l    #mt_sndf,mt_sample15
  43. move.l    #mt_sample1,a0
  44. clr.l    d0
  45. mt_clear:
  46. move.l    (a0,d0),a1
  47. clr.l    (a1)
  48. addq    #4,d0
  49. cmp.l    #$3c,d0
  50. bne.s    mt_clear
  51.  
  52. move.w    #0,$dff0a8
  53. move.w    #0,$dff0b8
  54. move.w    #0,$dff0c8
  55. move.w    #0,$dff0d8
  56. clr.l    mt_partnrplay
  57. clr.l    mt_partnote
  58. clr.l    mt_partpoint
  59.  
  60. move.b    mt_muzakdata+$1d6,mt_maxpart+1
  61. move.b    mt_muzakdata+$1d7,mt_kn1+1
  62. rts
  63.  
  64. mt_newirq:
  65. movem.l    d0-d7/a0-a6,-(a7)
  66. bsr.s    mt_music
  67. movem.l    (a7)+,d0-d7/a0-a6
  68. mt_oldirq:
  69. jmp    $000000
  70.  
  71. mt_music:
  72. addq.l    #1,mt_counter
  73. mt_cool:
  74. cmp.l    #6,mt_counter
  75. bne.s    mt_notsix
  76. clr.l    mt_counter
  77. bra    mt_rout2
  78.  
  79. mt_notsix:
  80. lea    mt_aud1temp,a6
  81. tst.b    3(a6)
  82. beq.s    mt_arp1
  83. move.l    #$dff0a0,a5        
  84. bsr.s    mt_arprout
  85.  
  86. mt_arp1:
  87. lea    mt_aud2temp,a6
  88. tst.b    3(a6)
  89. beq.s    mt_arp2
  90. move.l    #$dff0b0,a5
  91. bsr.s    mt_arprout
  92.  
  93. mt_arp2:
  94. lea    mt_aud3temp,a6
  95. tst.b    3(a6)
  96. beq.s    mt_arp3
  97. move.l    #$dff0c0,a5
  98. bsr.s    mt_arprout
  99.  
  100. mt_arp3:
  101. lea    mt_aud4temp,a6
  102. tst.b    3(a6)
  103. beq.s    mt_arp4
  104. move.l    #$dff0d0,a5
  105. bra.s    mt_arprout
  106. mt_arp4:
  107. rts
  108.  
  109. mt_arprout:
  110. tst.w    24(a6)
  111. beq.s    mt_noslide
  112.  
  113. clr.w    d0
  114. move.b    25(a6),d0
  115. lsr.b    #4,d0
  116. tst.b    d0
  117. beq.s    mt_voldwn2
  118. bsr    mt_pushvol1
  119. bra.s    mt_noslide
  120.  
  121. mt_voldwn2:
  122. clr.w    d0
  123. move.b    25(a6),d0
  124. bsr    mt_pushvol2
  125.  
  126. mt_noslide:
  127. move.b    2(a6),d0
  128. and.b    #$0f,d0
  129. tst.b    d0
  130. beq    mt_arpegrt
  131. cmp.b    #3,d0
  132. beq    mt_arpegrt
  133. cmp.b    #4,d0
  134. beq    mt_arpegrt
  135. cmp.b    #5,d0
  136. beq    mt_arpegrt
  137. cmp.b    #1,d0
  138. beq.s    mt_portup
  139. cmp.b    #6,d0
  140. beq.s    mt_portup
  141. cmp.b    #7,d0
  142. beq.s    mt_portup
  143. cmp.b    #8,d0
  144. beq.s    mt_portup
  145. cmp.b    #2,d0
  146. beq.s    mt_portdwn
  147. cmp.b    #9,d0
  148. beq.s    mt_portdwn
  149. cmp.b    #10,d0
  150. beq.s    mt_portdwn
  151. cmp.b    #11,d0
  152. beq.s    mt_portdwn
  153. cmp.b    #13,d0
  154. beq.s    mt_volup
  155. rts
  156.  
  157. mt_portup:
  158. clr.w    d0
  159. move.b    3(a6),d0
  160. sub.w    d0,22(a6)
  161. cmp.w    #$71,22(a6)
  162. bpl.s    mt_ok1
  163. move.w    #$71,22(a6)
  164. mt_ok1:
  165. move.w    22(a6),6(a5)
  166. rts
  167.  
  168. mt_portdwn:
  169. clr.w    d0
  170. move.b    3(a6),d0
  171. add.w    d0,22(a6)
  172. cmp.w    #$358,22(a6)
  173. bmi.s    mt_ok2
  174. move.w    #$358,22(a6)
  175. mt_ok2:
  176. move.w    22(a6),6(a5)
  177. rts
  178.  
  179. mt_volup:
  180. clr.w    d0
  181. move.b    3(a6),d0
  182. lsr.b    #4,d0
  183. tst.b    d0
  184. beq.s    mt_voldwn
  185. mt_pushvol1:
  186. add.w    d0,$12(a6)
  187. cmp.w    #$40,$12(a6)
  188. bmi.s    mt_ok3
  189. move.w    #$40,$12(a6)
  190. mt_ok3:
  191. move.w    $12(a6),8(a5)
  192. rts
  193.  
  194. mt_voldwn:
  195. clr.w    d0
  196. move.b    3(a6),d0
  197. mt_pushvol2:
  198. and.b    #$0f,d0
  199. sub.w    d0,$12(a6)
  200. bpl.s    mt_ok4
  201. clr.w    $12(a6)
  202. mt_ok4:
  203. move.w    $12(a6),8(a5)
  204. rts
  205.  
  206. mt_arpegrt:
  207. cmp.l    #1,mt_counter
  208. beq.s    mt_loop2
  209. cmp.l    #2,mt_counter
  210. beq.s    mt_loop3
  211. cmp.l    #3,mt_counter
  212. beq.s    mt_loop4
  213. cmp.l    #4,mt_counter
  214. beq.s    mt_loop2
  215. cmp.l    #5,mt_counter
  216. beq.s    mt_loop3
  217. rts
  218.  
  219. mt_loop2:
  220. clr.l    d0
  221. move.b    3(a6),d0
  222. lsr.b    #4,d0
  223. bra.s    mt_cont
  224.  
  225. mt_loop3:
  226. clr.l    d0
  227. move.b    3(a6),d0
  228. and.b    #$0f,d0
  229. bra.s    mt_cont
  230.  
  231. mt_loop4:
  232. move.w    16(a6),d2
  233. bra.s    mt_endpart
  234.  
  235. mt_cont:
  236. lsl.w    #1,d0
  237. clr.l    d1
  238. move.w    16(a6),d1
  239. lea    mt_arpeggio,a0
  240. mt_loop5:
  241. move.w    (a0,d0),d2
  242. cmp.w    (a0),d1
  243. beq.s    mt_endpart
  244. addq.l    #2,a0
  245. bra.s    mt_loop5
  246.  
  247. mt_endpart:
  248. move.w    d2,6(a5)
  249. rts
  250.  
  251. mt_rout2:
  252. lea    mt_muzakdata,a0
  253. move.l    a0,a3
  254. add.l    #$0c,a3
  255. move.l    a0,a2
  256. add.l    #$1d8,a2
  257. add.l    #$258,a0
  258. move.l    mt_partnrplay,d0
  259. clr.l    d1
  260. move.b    (a2,d0),d1
  261. mulu    #$0400,d1
  262. add.l    mt_partnote,d1
  263. move.l    d1,mt_partpoint
  264. clr.w    mt_dmacon
  265.  
  266. move.l    #$dff0a0,a5
  267. lea    mt_aud1temp,a6
  268. bsr    mt_playit
  269.  
  270. move.l    #$dff0b0,a5
  271. lea    mt_aud2temp,a6
  272. bsr    mt_playit
  273.  
  274. move.l    #$dff0c0,a5
  275. lea    mt_aud3temp,a6
  276. bsr    mt_playit
  277.  
  278. move.l    #$dff0d0,a5
  279. lea    mt_aud4temp,a6
  280. bsr    mt_playit
  281.  
  282. move.l    #mt_speed,d0
  283. mt_rls:
  284. dbf    d0,mt_rls
  285.  
  286. move.l    #$8000,d0
  287. add.w    mt_dmacon,d0
  288. move.w    d0,$dff096
  289.  
  290. move.l    #mt_aud4temp,a6
  291. cmp.w    #1,14(a6)
  292. bne.s    mt_voice3
  293. move.l    10(a6),$dff0d0
  294. move.w    #1,$dff0d4
  295. mt_voice3:
  296. move.l    #mt_aud3temp,a6
  297. cmp.w    #1,14(a6)
  298. bne.s    mt_voice2
  299. move.l    10(a6),$dff0c0
  300. move.w    #1,$dff0c4
  301. mt_voice2:
  302. move.l    #mt_aud2temp,a6
  303. cmp.w    #1,14(a6)
  304. bne.s    mt_voice1
  305. move.l    10(a6),$dff0b0
  306. move.w    #1,$dff0b4
  307. mt_voice1:
  308. move.l    #mt_aud1temp,a6
  309. cmp.w    #1,14(a6)
  310. bne.s    mt_voice0
  311. move.l    10(a6),$dff0a0
  312. move.w    #1,$dff0a4
  313.  
  314. mt_voice0:
  315. move.l    mt_partnote,d0
  316. add.l    #$10,d0
  317. move.l    d0,mt_partnote
  318. cmp.l    #$400,d0
  319. bne.s    mt_stop
  320. clr.l    mt_partnote
  321. addq.l    #1,mt_partnrplay
  322. clr.l    d0
  323. move.w    mt_maxpart,d0
  324. move.l    mt_partnrplay,d1
  325. cmp.l    d0,d1
  326. bne.s    mt_stop
  327. clr.l    mt_partnrplay
  328. mt_stop:
  329. rts
  330.  
  331. mt_playit:
  332. move.l    (a0,d1),(a6)
  333. addq.l    #4,d1
  334. clr.l    d2
  335. move.b    2(a6),d2
  336. and.b    #$f0,d2
  337. lsr.b    #4,d2
  338. tst.b    d2
  339. beq.s    mt_nosamplechange
  340.  
  341. clr.l    d3
  342. lea    mt_samples,a1
  343. move.l    d2,d4
  344. mulu    #4,d2
  345. mulu    #$1e,d4
  346. move.l    (a1,d2),4(a6)
  347. move.w    (a3,d4),8(a6)
  348. move.w    2(a3,d4),18(a6)
  349. move.w    4(a3,d4),d3
  350. tst.w    d3
  351. beq.s    mt_displace
  352. move.l    4(a6),d2
  353. add.l    d3,d2
  354. move.l    d2,4(a6)
  355. move.l    d2,10(a6)
  356. move.w    6(a3,d4),8(a6)
  357. move.w    6(a3,d4),14(a6)
  358. move.w    18(a6),8(a5)
  359. bra.s    mt_nosamplechange
  360. mt_displace:
  361. move.l    4(a6),d2
  362. add.l    d3,d2
  363. move.l    d2,10(a6)
  364. move.w    6(a3,d4),14(a6)
  365. move.w    18(a6),8(a5)
  366. mt_nosamplechange:
  367. tst.w    (a6)
  368. beq.s    mt_retrout
  369. move.w    (a6),16(a6)
  370. move.w    20(a6),$dff096
  371. move.l    4(a6),(a5)
  372. move.w    8(a6),4(a5)
  373. move.w    (a6),6(a5)
  374. move.w    20(a6),d0
  375. or.w    d0,mt_dmacon
  376.  
  377. mt_retrout:
  378. move.w    20(a6),d0
  379. lsl.w    #4,d0
  380. add.w    20(a6),d0
  381. move.w    d0,$dff09e
  382.  
  383. tst.w    (a6)
  384. beq.s    mt_nonewper
  385. move.w    (a6),22(a6)
  386.  
  387. mt_nonewper:
  388. move.b    2(a6),d0
  389. and.b    #$0f,d0
  390. cmp.b    #14,d0
  391. bne.s    mt_noset
  392. move.w    2(a6),24(a6)
  393. rts
  394.  
  395. mt_noset:
  396. tst.b    3(a6)
  397. bne.s    mt_noclr
  398. clr.w    24(a6)
  399. mt_noclr:
  400. cmp.b    #3,d0
  401. beq.s    mt_modvol
  402. cmp.b    #6,d0
  403. beq.s    mt_modvol
  404. cmp.b    #9,d0
  405. beq.s    mt_modvol
  406. cmp.b    #4,d0
  407. beq.s    mt_modper
  408. cmp.b    #7,d0
  409. beq.s    mt_modper
  410. cmp.b    #10,d0
  411. beq.s    mt_modper
  412. cmp.b    #5,d0
  413. beq.s    mt_modvolper
  414. cmp.b    #8,d0
  415. beq.s    mt_modvolper
  416. cmp.b    #11,d0
  417. beq.s    mt_modvolper
  418. cmp.b    #15,d0
  419. beq.s    mt_chgspeed
  420. cmp.b    #12,d0
  421. bne.s    mt_nochnge
  422. move.b    3(a6),8(a5)
  423. mt_nochnge:
  424. rts
  425.  
  426. mt_chgspeed:
  427. move.b    3(a6),d0
  428. and.b    #$0f,d0
  429. beq.s    mt_nochnge
  430. clr.l    mt_counter
  431. move.b    d0,mt_cool+5
  432. rts
  433.  
  434. mt_modvol:
  435. move.w    20(a6),d0
  436. bra.s    mt_push
  437.  
  438. mt_modper:
  439. move.w    20(a6),d0
  440. lsl.w    #4,d0
  441. bra.s    mt_push
  442.  
  443. mt_modvolper:
  444. move.w    20(a6),d0
  445. lsl.w    #4,d0
  446. add.w    20(a6),d0
  447.  
  448. mt_push:
  449. add.w    #$8000,d0
  450. move.w    d0,$dff09e
  451. rts
  452.  
  453. mt_aud1temp:
  454. dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
  455. dc.w $0000,$0000,$0001,$0000,$0000
  456. mt_aud2temp:
  457. dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
  458. dc.w $0000,$0000,$0002,$0000,$0000
  459. mt_aud3temp:
  460. dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
  461. dc.w $0000,$0000,$0004,$0000,$0000
  462. mt_aud4temp:
  463. dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
  464. dc.w $0000,$0000,$0008,$0000,$0000
  465. mt_partnote:
  466. dc.l 0
  467. mt_partnrplay:
  468. dc.l 0
  469. mt_counter:
  470. dc.l 0
  471. mt_partpoint:
  472. dc.l 0
  473. mt_samples:
  474. dc.w $0000,$0000
  475. mt_sample1:
  476. dc.l 0
  477. mt_sample2:
  478. dc.l 0
  479. mt_sample3:
  480. dc.l 0
  481. mt_sample4:
  482. dc.l 0
  483. mt_sample5:
  484. dc.l 0
  485. mt_sample6:
  486. dc.l 0
  487. mt_sample7:
  488. dc.l 0
  489. mt_sample8:
  490. dc.l 0
  491. mt_sample9:
  492. dc.l 0
  493. mt_sample10:
  494. dc.l 0
  495. mt_sample11:
  496. dc.l 0
  497. mt_sample12:
  498. dc.l 0
  499. mt_sample13:
  500. dc.l 0
  501. mt_sample14:
  502. dc.l 0
  503. mt_sample15:
  504. dc.l 0
  505. mt_maxpart:
  506. dc.w $0000
  507. mt_kn1:
  508. dc.w $0000
  509. mt_dmacon:
  510. dc.w $0000
  511.  
  512. mt_arpeggio:
  513. dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c
  514. dc.w $023a,$021a,$01fc,$01e0,$01c5,$01ac,$0194,$017d
  515. dc.w $0168,$0153,$0140,$012e,$011d,$010d,$00fe,$00f0
  516. dc.w $00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097
  517. dc.w $008f,$0087,$007f,$0078,$0071,$0000,$0000,$0000
  518.  
  519. mt_snd1:    blk.b    2,0
  520. mt_snd2:    blk.b    2,0
  521. mt_snd3:    blk.b    2,0
  522. mt_snd4:    blk.b    2,0
  523. mt_snd5:    blk.b    2,0
  524. mt_snd6:    blk.b    2,0
  525. mt_snd7:    blk.b    2,0
  526. mt_snd8:    blk.b    2,0
  527. mt_snd9:    blk.b    2,0
  528. mt_snda:    blk.b    2,0
  529. mt_sndb:    blk.b    2,0
  530. mt_sndc:    blk.b    2,0
  531. mt_sndd:    blk.b    2,0
  532. mt_snde:    blk.b    2,0
  533. mt_sndf:    blk.b    2,0
  534.  
  535. mt_muzakdata:    blk.b    2,0
  536.