home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format 26 / af026.adf / PlayRoutines / playeriv.S < prev    next >
Text File  |  1991-07-09  |  9KB  |  567 lines

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