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

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