|
|
1.1 root 1: .long
2: .dc.l codeend-_music_dspcode
3: _music_dspcode::
4: .dsp
5: .org $f1b140
6:
7: S_LE .ccdef $14 ; PL
8: U_LE .ccdef $04 ; CC
9: S_GT .ccdef $18 ; MI
10: U_GT .ccdef $08 ; CS
11:
12: S_LT .ccdef $15 ; PL+NE
13: U_LT .ccdef $05 ; CC+NE
14:
15: FP .equr r14
16: scratch .equr r10
17: scratch2 .equr r11
18: RETURNVALUE .equr r29
19: RETURNPOINT .equr r28
20: MATH_A .equr r27
21: MATH_B .equr r26
22: MATH_C .equr r25
23: MATH_RTS .equr r24
24: MATH_SIGN .equr r23
25:
26: movei #codestart,scratch
27: jump T,(scratch)
28: nop
29:
30:
31: GPU_IMUL:
32: move MATH_A,MATH_SIGN
33: xor MATH_B,MATH_SIGN
34: abs MATH_A
35: abs MATH_B
36: move MATH_A,MATH_C
37: mult MATH_B,MATH_C
38: move MATH_B,scratch2
39: shrq #16,scratch2
40: mult MATH_A,scratch2
41: shlq #16,scratch2
42: add scratch2,MATH_C
43: move MATH_A,scratch2
44: shrq #16,scratch2
45: mult MATH_B,scratch2
46: shlq #16,scratch2
47: add scratch2, MATH_C
48: btst #31,MATH_SIGN
49: jump EQ,(MATH_RTS)
50: nop
51: jump T,(MATH_RTS)
52: neg MATH_C
53:
54: ;===========================================================================
55: ;
56: _M_WriteOutSamples:
57: ;
58: ;===========================================================================
59:
60: sw_source .equr r16
61: sw_samples .equr r17
62: sw_dest .equr r18
63: sw_sample .equr r19
64: sw_combined .equr r20
65: sw_zero .equr r21
66: sw_looppoint .equr r22
67:
68: .extern _musictime
69:
70: load (FP),sw_samples
71:
72: moveq #0,sw_zero
73:
74: movei #_musictime,scratch2
75: load (scratch2),sw_dest
76:
77: shlq #1,sw_dest
78: movei #$1fff,scratch
79: and scratch,sw_dest
80: movei #$1f0000,scratch
81: add scratch,sw_dest ; sw_dest = externbuffer[sfxtime*2]
82:
83: movei #_internal_buffer,sw_source
84: movei #satloop,sw_looppoint
85:
86: load (sw_source),sw_sample ; delay slotted
87: satloop:
88: store sw_zero,(sw_source)
89: sharq #8,sw_sample
90: addq #4,sw_source
91: sat16s sw_sample
92:
93: storew sw_sample,(sw_dest)
94: addqmod #2,sw_dest
95:
96: subq #1,sw_samples
97: jump NE,(sw_looppoint)
98: load (sw_source),sw_sample ; delay slot
99:
100: jump T,(RETURNPOINT)
101: nop
102:
103: ;===========================================================================
104:
105: ;====================
106: _M_PaintSingleChannel::
107: ;3 dag registers 8 register variables
108: ;localoffset:0 regoffset:4 argoffset:4
109: ;====================
110: ps_channel .equr r15
111: ps_samples .equr r16
112: ps_dest .equr r17
113: ps_source .equr r18
114: ps_sourcefrac .equr r19
115: ps_sourcestep .equr r20
116: ps_vol .equr r21
117: ps_data .equr r24
118: ps_looppoint .equr r25
119: ps_128 .equr r26
120: ps_ffff .equr r27
121:
122: load (FP),ps_channel
123: load (FP+1),ps_samples
124: movei #_internal_buffer,ps_dest
125:
126: load (FP+2), scratch ; get new
127: shlq #2, scratch
128: add scratch, ps_dest
129:
130: load (ps_channel+1),ps_source
131: load (ps_channel+4),ps_sourcefrac
132: load (ps_channel+3),ps_sourcestep
133: load (ps_channel+2),ps_vol
134:
135: shrq #1, ps_vol
136:
137: movei #addloop,ps_looppoint
138: movei #128,ps_128
139: movei #$ffff,ps_ffff
140:
141: loadb (ps_source),ps_data ; delay slotted
142: addloop:
143: add ps_sourcestep,ps_sourcefrac
144: move ps_sourcefrac,scratch
145: sub ps_128,ps_data
146: shrq #16,scratch
147: imult ps_vol,ps_data
148:
149: load (ps_dest),scratch2
150: and ps_ffff,ps_sourcefrac
151: add ps_data,scratch2
152: add scratch,ps_source
153: store scratch2,(ps_dest)
154:
155: subq #1,ps_samples
156: addqt #4,ps_dest
157: jump NE,(ps_looppoint)
158: loadb (ps_source),ps_data ; delay slot
159:
160: store ps_source,(ps_channel+1)
161: jump T,(RETURNPOINT)
162: store ps_sourcefrac,(ps_channel+4) ; delay slot
163:
164:
165: codestart:
166:
167: ;====================
168: _M_PaintMusic::
169: ;6 dag registers 3 register variables
170: ;localoffset:4 regoffset:4 argoffset:44
171: ;====================
172: movei #44,scratch
173: sub scratch,FP
174:
175: movei #_samplecount,r0
176: load (r0),r0
177: movei #8192,r1
178: add r1,r0
179: move r0,r17 ;(actual_endtime)
180:
181: movei #L43,r0
182: jump T,(r0)
183: nop
184:
185: L42:
186:
187: movei #_musictime,r0
188: load (r0),r0
189: movei #_next_eventtime,r1
190: load (r1),r1
191: cmp r0,r1
192: movei #L45,scratch
193: jump NE,(scratch)
194: nop
195:
196: movei #_next_eventtime,r0
197: load (r0),r1
198: movei #_music,r2
199: load (r2),r3
200: loadb (r3),r4
201: movei #_samples_per_midiclock,r5
202: load (r5),r5
203: move r4,MATH_A
204: movei #L60,MATH_RTS
205: movei #GPU_IMUL,scratch
206: jump T,(scratch)
207: move r5,MATH_B ; delay slot
208: L60:
209: move MATH_C,r4
210: add r4,r1
211: store r1,(r0)
212: move r3,r0
213: addq #1,r0
214: store r0,(r2)
215:
216: L45:
217:
218: movei #_next_eventtime,r0
219: load (r0),r0
220: cmp r17,r0 ;(actual_endtime)
221: movei #L47,scratch
222: jump EQ,(scratch)
223: nop
224: jump MI,(scratch)
225: nop
226:
227: move r17,r16 ;(actual_endtime)(stop_time)
228:
229: movei #L48,r0
230: jump T,(r0)
231: nop
232:
233: L47:
234:
235: movei #_next_eventtime,r0
236: load (r0),r0
237: move r0,r16 ;(stop_time)
238:
239: L48:
240:
241: movei #256,r0
242: move r0,r15 ;(samples)
243:
244: movei #L50,r0
245: jump T,(r0)
246: nop
247:
248: L49:
249:
250: movei #_musictime,r0
251: load (r0),r0
252: move r16,r1 ;(stop_time)
253: sub r0,r1
254: cmp r1,r15 ;(samples)
255: movei #L52,scratch
256: jump EQ,(scratch)
257: nop
258: jump MI,(scratch)
259: nop
260:
261: movei #_musictime,r0
262: load (r0),r0
263: move r16,r1 ;(stop_time)
264: sub r0,r1
265: move r1,r15 ;(samples)
266:
267: L52:
268:
269: store r15,(FP) ; arg[] ;(samples)
270: movei #_M_PaintUnsatSound,r0
271: store r28,(FP+1) ; push ;(RETURNPOINT)
272: store r17,(FP+2) ; push ;(actual_endtime)
273: store r16,(FP+3) ; push ;(stop_time)
274: movei #L61,RETURNPOINT
275: jump T,(r0)
276: store r15,(FP+4) ; delay slot push ;(samples)
277: L61:
278: load (FP+2),r17 ; pop ;(actual_endtime)
279: load (FP+3),r16 ; pop ;(stop_time)
280: load (FP+4),r15 ; pop ;(samples)
281: load (FP+1), RETURNPOINT ; pop
282:
283: store r15,(FP) ; arg[] ;(samples)
284: movei #_M_WriteOutSamples,r0
285: store r28,(FP+1) ; push ;(RETURNPOINT)
286: store r17,(FP+2) ; push ;(actual_endtime)
287: store r16,(FP+3) ; push ;(stop_time)
288: movei #L62,RETURNPOINT
289: jump T,(r0)
290: store r15,(FP+4) ; delay slot push ;(samples)
291: L62:
292: load (FP+2),r17 ; pop ;(actual_endtime)
293: load (FP+3),r16 ; pop ;(stop_time)
294: load (FP+4),r15 ; pop ;(samples)
295: load (FP+1), RETURNPOINT ; pop
296:
297: movei #_musictime,r0
298: load (r0),r1
299: add r15,r1 ;(samples)
300: store r1,(r0)
301:
302: L50:
303:
304: movei #_musictime,r0
305: load (r0),r0
306: cmp r0,r16 ;(stop_time)
307: movei #L49,scratch
308: jump NE,(scratch)
309: nop
310:
311: movei #_music,r0
312: load (r0),r0
313: movei #_music_end,r1
314: load (r1),r1
315: cmp r0,r1
316: movei #L54,scratch
317: jump NE,(scratch)
318: nop
319:
320: movei #_music,r0
321: movei #_music_start,r1
322: load (r1),r1
323: store r1,(r0)
324: load (r0),r0
325: moveq #0,r1
326: cmp r0,r1
327: movei #L56,scratch
328: jump EQ,(scratch)
329: nop
330:
331: movei #_music,r0
332: load (r0),r1
333: addq #1,r1
334: store r1,(r0)
335:
336: L56:
337:
338: L54:
339:
340: movei #_musictime,r0
341: load (r0),r0
342: movei #_next_eventtime,r1
343: load (r1),r1
344: cmp r0,r1
345: movei #L58,scratch
346: jump NE,(scratch)
347: nop
348: movei #_M_GetEvent,r0
349: store r28,(FP+1) ; push ;(RETURNPOINT)
350: store r17,(FP+2) ; push ;(actual_endtime)
351: store r16,(FP+3) ; push ;(stop_time)
352: movei #L63,RETURNPOINT
353: jump T,(r0)
354: store r15,(FP+4) ; delay slot push ;(samples)
355: L63:
356: load (FP+2),r17 ; pop ;(actual_endtime)
357: load (FP+3),r16 ; pop ;(stop_time)
358: load (FP+4),r15 ; pop ;(samples)
359: load (FP+1), RETURNPOINT ; pop
360: moveq #0,r0
361: cmp r29,r0 ;(RETURNVALUE)
362: movei #L58,scratch
363: jump EQ,(scratch)
364: nop
365:
366: movei #L44,r0
367: jump T,(r0)
368: nop
369:
370: L58:
371:
372: L43:
373:
374: movei #_musictime,r0
375: load (r0),r0
376: cmp r0,r17 ;(actual_endtime)
377: movei #L42,scratch
378: jump NE,(scratch)
379: nop
380:
381: L44:
382:
383:
384: L41:
385: movei #44,scratch
386: jump T,(RETURNPOINT)
387: add scratch,FP ; delay slot
388:
389: ;====================
390: _M_GetEvent::
391: ;6 dag registers 2 register variables
392: ;localoffset:8 regoffset:12 argoffset:48
393: ;====================
394: movei #48,scratch
395: sub scratch,FP
396:
397: movei #_music,r0
398: load (r0),r1
399: loadb (r1),r2
400: move r2,r15 ;(cmd)
401: moveq #28,r2
402: move r15,r3 ;(cmd)
403: moveq #15,r4
404: move r3,r5
405: and r4,r5
406: move r5,r4
407: move r2,MATH_A
408: movei #L83,MATH_RTS
409: movei #GPU_IMUL,scratch
410: jump T,(scratch)
411: move r4,MATH_B ; delay slot
412: L83:
413: move MATH_C,r2
414: movei #_music_channels,r4
415: add r4,r2
416: move r2,r16 ;(ch)
417: movei #240,r2
418: and r2,r3
419: move r3,r2
420: move r2,r15 ;(cmd)
421: addq #1,r1
422: store r1,(r0)
423: move r15,r0 ;(cmd)
424: movei #48,r1
425: cmp r0,r1
426: movei #L65,scratch
427: jump NE,(scratch)
428: nop
429:
430: movei #_samples_per_midiclock,r0
431: movei #_music,r1
432: load (r1),r2
433: loadb (r2),r3
434: shlq #24,r3
435: store r3,(r0)
436: load (r0),r3
437: move r2,r4
438: addq #1,r4
439: loadb (r4),r4
440: shlq #16,r4
441: add r4,r3
442: store r3,(r0)
443: load (r0),r3
444: move r2,r4
445: addq #2,r4
446: loadb (r4),r4
447: shlq #8,r4
448: add r4,r3
449: store r3,(r0)
450: load (r0),r3
451: move r2,r4
452: addq #3,r4
453: loadb (r4),r4
454: add r4,r3
455: store r3,(r0)
456: move r2,r0
457: addq #4,r0
458: store r0,(r1)
459:
460: movei #L66,r0
461: jump T,(r0)
462: nop
463:
464: L65:
465:
466: move r15,r0 ;(cmd)
467: moveq #16,r1
468: cmp r0,r1
469: movei #L67,scratch
470: jump NE,(scratch)
471: nop
472:
473: move FP,r0
474: addq #8,r0 ; &instrument
475: movei #_music,r1
476: load (r1),r2
477: loadb (r2),r3
478: store r3,(r0)
479: addq #1,r2
480: store r2,(r1)
481: load (r0),r0
482: shlq #2,r0
483: movei #_instruments,r1
484: add r1,r0
485: load (r0),r0
486: store r0,(r16) ;(ch)
487:
488: move r16,r0 ;(ch)
489: addq #8,r0
490: movei #_music,r1
491: load (r1),r1
492: loadb (r1),r1
493: movei #_sfxvolume,r2
494: load (r2),r2
495: move r1,MATH_A
496: movei #L84,MATH_RTS
497: movei #GPU_IMUL,scratch
498: jump T,(scratch)
499: move r2,MATH_B ; delay slot
500: L84:
501: move MATH_C,r1
502: store r1,(r0)
503:
504: movei #_music,r0
505: load (r0),r1
506: moveq #1,r2
507: add r2,r1
508: store r1,(r0)
509: load (r0),r1
510: add r2,r1
511: store r1,(r0)
512: move r16,r1 ;(ch)
513: addq #12,r1
514: load (r0),r0
515: loadb (r0),r3
516: shlq #16,r3
517: move r0,r4
518: add r2,r4
519: loadb (r4),r2
520: shlq #8,r2
521: add r2,r3
522: addq #2,r0
523: loadb (r0),r0
524: move r3,r2
525: add r0,r2
526: store r2,(r1)
527:
528: movei #_music,r0
529: load (r0),r1
530: addq #3,r1
531: store r1,(r0)
532: move r16,r0 ;(ch)
533: addq #4,r0
534: load (r16),r1 ;(ch)
535: addq #28,r1
536: store r1,(r0)
537:
538: move r16,r0 ;(ch)
539: addq #16,r0
540: moveq #0,r1
541: store r1,(r0)
542:
543: move r16,r0 ;(ch)
544: addq #20,r0
545: moveq #0,r1
546: store r1,(r0)
547:
548: store r16,(FP) ; arg[] ;(ch)
549: movei #_musictime,r0
550: load (r0),r0
551: or r0,scratch ; scoreboard bug
552: store r0,(FP+1) ; arg[]
553: movei #_M_CalculateEndTime,r0
554: store r28,(FP+3) ; push ;(RETURNPOINT)
555: store r16,(FP+4) ; push ;(ch)
556: movei #L85,RETURNPOINT
557: jump T,(r0)
558: store r15,(FP+5) ; delay slot push ;(cmd)
559: L85:
560: load (FP+4),r16 ; pop ;(ch)
561: load (FP+5),r15 ; pop ;(cmd)
562: load (FP+3), RETURNPOINT ; pop
563:
564: movei #L68,r0
565: jump T,(r0)
566: nop
567:
568: L67:
569:
570: move r15,r0 ;(cmd)
571: movei #32,r1
572: cmp r0,r1
573: movei #L69,scratch
574: jump NE,(scratch)
575: nop
576:
577: move r16,r0 ;(ch)
578: addq #24,r0
579: moveq #0,r1
580: store r1,(r0)
581:
582: movei #L70,r0
583: jump T,(r0)
584: nop
585:
586: L69:
587:
588: move r15,r0 ;(cmd)
589: movei #64,r1
590: cmp r0,r1
591: movei #L71,scratch
592: jump NE,(scratch)
593: nop
594:
595: move r16,r0 ;(ch)
596: addq #8,r0
597: movei #_music,r1
598: load (r1),r1
599: loadb (r1),r1
600: movei #_sfxvolume,r2
601: load (r2),r2
602: move r1,MATH_A
603: movei #L86,MATH_RTS
604: movei #GPU_IMUL,scratch
605: jump T,(scratch)
606: move r2,MATH_B ; delay slot
607: L86:
608: move MATH_C,r1
609: store r1,(r0)
610:
611: movei #_music,r0
612: load (r0),r1
613: addq #2,r1
614: store r1,(r0)
615:
616: movei #L72,r0
617: jump T,(r0)
618: nop
619:
620: L71:
621:
622: move r15,r0 ;(cmd)
623: movei #80,r1
624: cmp r0,r1
625: movei #L73,scratch
626: jump NE,(scratch)
627: nop
628:
629: move r16,r0 ;(ch)
630: addq #12,r0
631: movei #_music,r1
632: load (r1),r1
633: loadb (r1),r2
634: shlq #16,r2
635: move r1,r3
636: addq #1,r3
637: loadb (r3),r3
638: shlq #8,r3
639: add r3,r2
640: addq #2,r1
641: loadb (r1),r1
642: add r1,r2
643: store r2,(r0)
644:
645: movei #_music,r0
646: load (r0),r1
647: addq #3,r1
648: store r1,(r0)
649: move r16,r0 ;(ch)
650: addq #24,r0
651: load (r0),r0
652: movei #_musictime,r1
653: load (r1),r1
654: cmp r0,r1
655: movei #L74,scratch
656: jump CC,(scratch)
657: nop
658:
659: store r16,(FP) ; arg[] ;(ch)
660: movei #_musictime,r0
661: load (r0),r0
662: or r0,scratch ; scoreboard bug
663: store r0,(FP+1) ; arg[]
664: movei #_M_CalculateEndTime,r0
665: store r28,(FP+3) ; push ;(RETURNPOINT)
666: store r16,(FP+4) ; push ;(ch)
667: movei #L87,RETURNPOINT
668: jump T,(r0)
669: store r15,(FP+5) ; delay slot push ;(cmd)
670: L87:
671: load (FP+4),r16 ; pop ;(ch)
672: load (FP+5),r15 ; pop ;(cmd)
673: load (FP+3), RETURNPOINT ; pop
674:
675: movei #L74,r0
676: jump T,(r0)
677: nop
678:
679: L73:
680:
681: move r15,r0 ;(cmd)
682: moveq #0,r1
683: cmp r0,r1
684: movei #L77,scratch
685: jump NE,(scratch)
686: nop
687:
688: movei #L78,r0
689: jump T,(r0)
690: nop
691:
692: L77:
693:
694: moveq #1,r0
695: move r0,RETURNVALUE
696:
697: movei #L64,r0
698: jump T,(r0)
699: nop
700:
701: L78:
702:
703: L74:
704:
705: L72:
706:
707: L70:
708:
709: L68:
710:
711: L66:
712:
713: movei #_music,r0
714: load (r0),r0
715: movei #_music_end,r1
716: load (r1),r1
717: cmp r0,r1
718: movei #L79,scratch
719: jump NE,(scratch)
720: nop
721:
722: movei #_music,r0
723: movei #_music_start,r1
724: load (r1),r1
725: store r1,(r0)
726: load (r0),r0
727: moveq #0,r1
728: cmp r0,r1
729: movei #L81,scratch
730: jump NE,(scratch)
731: nop
732:
733: moveq #1,r0
734: move r0,RETURNVALUE
735:
736: movei #L64,r0
737: jump T,(r0)
738: nop
739:
740: L81:
741:
742: L79:
743:
744: moveq #0,r0
745: move r0,RETURNVALUE
746:
747: L64:
748: movei #48,scratch
749: jump T,(RETURNPOINT)
750: add scratch,FP ; delay slot
751:
752: ;====================
753: _M_PaintUnsatSound::
754: ;5 dag registers 4 register variables
755: ;localoffset:12 regoffset:12 argoffset:52
756: ;====================
757: movei #52,scratch
758: sub scratch,FP
759:
760: movei #_music_channels,r0
761: move r0,r16 ;(chan)
762: movei #_musictime,r0
763: load (r0),r0
764: load (FP+13),r1 ; local samples
765: add r1,r0
766: move r0,r18 ;(endtime)
767:
768: movei #L90,r0
769: jump T,(r0)
770: nop
771:
772: L89:
773:
774: movei #_musictime,r0
775: load (r0),r0
776: move r0,r15 ;(channeltime)
777: move r16,r0 ;(chan)
778: addq #24,r0
779: load (r0),r0
780: move r15,r1 ;(channeltime)
781: cmp r0,r1
782: movei #L93,scratch
783: jump CC,(scratch)
784: nop
785:
786: movei #L96,r0
787: jump T,(r0)
788: nop
789:
790: L95:
791:
792: move r16,r0 ;(chan)
793: addq #24,r0
794: load (r0),r0
795: move r18,r1 ;(endtime)
796: cmp r0,r1
797: movei #L98,scratch
798: jump EQ,(scratch)
799: nop
800: jump CS,(scratch)
801: nop
802:
803: move r16,r0 ;(chan)
804: addq #24,r0
805: load (r0),r0
806: move r0,r17 ;(stoptime)
807:
808: movei #L99,r0
809: jump T,(r0)
810: nop
811:
812: L98:
813:
814: move r18,r17 ;(endtime)(stoptime)
815:
816: L99:
817:
818: store r16,(FP) ; arg[] ;(chan)
819: move r17,r0 ;(stoptime)
820: sub r15,r0 ;(channeltime)
821: or r0,scratch ; scoreboard bug
822: store r0,(FP+1) ; arg[]
823: movei #_musictime,r0
824: load (r0),r0
825: move r15,r1 ;(channeltime)
826: sub r0,r1
827: or r1,scratch ; scoreboard bug
828: store r1,(FP+2) ; arg[]
829: movei #_M_PaintSingleChannel,r0
830: store r28,(FP+3) ; push ;(RETURNPOINT)
831: store r18,(FP+4) ; push ;(endtime)
832: store r17,(FP+5) ; push ;(stoptime)
833: store r16,(FP+6) ; push ;(chan)
834: movei #L104,RETURNPOINT
835: jump T,(r0)
836: store r15,(FP+7) ; delay slot push ;(channeltime)
837: L104:
838: load (FP+4),r18 ; pop ;(endtime)
839: load (FP+5),r17 ; pop ;(stoptime)
840: load (FP+6),r16 ; pop ;(chan)
841: load (FP+7),r15 ; pop ;(channeltime)
842: load (FP+3), RETURNPOINT ; pop
843:
844: move r17,r15 ;(stoptime)(channeltime)
845: move r16,r0 ;(chan)
846: addq #24,r0
847: load (r0),r0
848: move r15,r1 ;(channeltime)
849: cmp r0,r1
850: movei #L100,scratch
851: jump NE,(scratch)
852: nop
853:
854: load (r16),r0 ;(chan)
855: addq #12,r0
856: load (r0),r0
857: moveq #2,r1
858: and r1,r0
859: moveq #0,r1
860: cmp r0,r1
861: movei #L102,scratch
862: jump EQ,(scratch)
863: nop
864:
865: moveq #4,r0
866: move r16,r1 ;(chan)
867: add r0,r1
868: load (r1),r2
869: load (r16),r3 ;(chan)
870: move r3,r4
871: addq #8,r4
872: load (r4),r4
873: add r0,r3
874: load (r3),r0
875: move r4,r3
876: sub r0,r3
877: move r2,r0
878: sub r3,r0
879: store r0,(r1)
880:
881: store r16,(FP) ; arg[] ;(chan)
882: or r15,scratch ; scoreboard bug ;(channeltime)
883: store r15,(FP+1) ; arg[] ;(channeltime)
884: movei #_M_CalculateEndTime,r0
885: store r28,(FP+3) ; push ;(RETURNPOINT)
886: store r18,(FP+4) ; push ;(endtime)
887: store r17,(FP+5) ; push ;(stoptime)
888: store r16,(FP+6) ; push ;(chan)
889: movei #L105,RETURNPOINT
890: jump T,(r0)
891: store r15,(FP+7) ; delay slot push ;(channeltime)
892: L105:
893: load (FP+4),r18 ; pop ;(endtime)
894: load (FP+5),r17 ; pop ;(stoptime)
895: load (FP+6),r16 ; pop ;(chan)
896: load (FP+7),r15 ; pop ;(channeltime)
897: load (FP+3), RETURNPOINT ; pop
898:
899: movei #L103,r0
900: jump T,(r0)
901: nop
902:
903: L102:
904:
905: move r18,r15 ;(endtime)(channeltime)
906:
907: L103:
908:
909: L100:
910:
911: L96:
912:
913: cmp r15,r18 ;(channeltime)(endtime)
914: movei #L95,scratch
915: jump NE,(scratch)
916: nop
917:
918: L93:
919:
920: move r16,r0 ;(chan)
921: addq #28,r0
922: move r0,r16 ;(chan)
923:
924: L90:
925:
926: move r16,r0 ;(chan)
927: movei #_music_channels+280,r1
928: cmp r0,r1
929: movei #L89,scratch
930: jump NE,(scratch)
931: nop
932:
933:
934: L88:
935: movei #52,scratch
936: jump T,(RETURNPOINT)
937: add scratch,FP ; delay slot
938:
939: ;====================
940: _M_CalculateEndTime::
941: ;6 dag registers 1 register variables
942: ;localoffset:0 regoffset:0 argoffset:0
943: ;====================
944:
945: load (FP),r0 ; local channel
946: move r0,r1
947: addq #4,r1
948: load (r1),r1
949: load (r0),r2
950: addq #28,r2
951: sub r2,r1
952: move r1,r15 ;(samples_left)
953: load (r0),r0
954: addq #12,r0
955: load (r0),r0
956: moveq #2,r1
957: and r1,r0
958: moveq #0,r1
959: cmp r0,r1
960: movei #L107,scratch
961: jump EQ,(scratch)
962: nop
963:
964: load (FP),r0 ; local channel
965: load (r0),r0
966: addq #8,r0
967: load (r0),r0
968: sub r15,r0 ;(samples_left)
969: shlq #15,r0
970: move r0,r15 ;(samples_left)
971:
972: movei #L108,r0
973: jump T,(r0)
974: nop
975:
976: L107:
977:
978: load (FP),r0 ; local channel
979: load (r0),r0
980: load (r0),r0
981: sub r15,r0 ;(samples_left)
982: shlq #15,r0
983: move r0,r15 ;(samples_left)
984:
985: L108:
986:
987: load (FP),r0 ; local channel
988: move r0,r1
989: addq #24,r1
990: load (FP+1),r2 ; local t
991: move r15,r3 ;(samples_left)
992: move r0,r4
993: addq #16,r4
994: load (r4),r4
995: moveq #1,r5
996: sha r5,r4
997: sub r4,r3
998: addq #12,r0
999: load (r0),r0
1000: add r5,r0
1001: sha r5,r0
1002: div r0,r3
1003: move r2,r0
1004: add r3,r0
1005: store r0,(r1)
1006:
1007:
1008: L106:
1009: jump T,(RETURNPOINT)
1010: nop ; delay slot
1011:
1012: ;=======================
1013:
1014: .long
1015: _internal_buffer::
1016: .dc.l 0
1017: .dc.l 0
1018: .dc.l 0
1019: .dc.l 0
1020: .dc.l 0
1021: .dc.l 0
1022: .dc.l 0
1023: .dc.l 0
1024: .dc.l 0
1025: .dc.l 0
1026: .dc.l 0
1027: .dc.l 0
1028: .dc.l 0
1029: .dc.l 0
1030: .dc.l 0
1031: .dc.l 0
1032: .dc.l 0
1033: .dc.l 0
1034: .dc.l 0
1035: .dc.l 0
1036: .dc.l 0
1037: .dc.l 0
1038: .dc.l 0
1039: .dc.l 0
1040: .dc.l 0
1041: .dc.l 0
1042: .dc.l 0
1043: .dc.l 0
1044: .dc.l 0
1045: .dc.l 0
1046: .dc.l 0
1047: .dc.l 0
1048: .dc.l 0
1049: .dc.l 0
1050: .dc.l 0
1051: .dc.l 0
1052: .dc.l 0
1053: .dc.l 0
1054: .dc.l 0
1055: .dc.l 0
1056: .dc.l 0
1057: .dc.l 0
1058: .dc.l 0
1059: .dc.l 0
1060: .dc.l 0
1061: .dc.l 0
1062: .dc.l 0
1063: .dc.l 0
1064: .dc.l 0
1065: .dc.l 0
1066: .dc.l 0
1067: .dc.l 0
1068: .dc.l 0
1069: .dc.l 0
1070: .dc.l 0
1071: .dc.l 0
1072: .dc.l 0
1073: .dc.l 0
1074: .dc.l 0
1075: .dc.l 0
1076: .dc.l 0
1077: .dc.l 0
1078: .dc.l 0
1079: .dc.l 0
1080: .dc.l 0
1081: .dc.l 0
1082: .dc.l 0
1083: .dc.l 0
1084: .dc.l 0
1085: .dc.l 0
1086: .dc.l 0
1087: .dc.l 0
1088: .dc.l 0
1089: .dc.l 0
1090: .dc.l 0
1091: .dc.l 0
1092: .dc.l 0
1093: .dc.l 0
1094: .dc.l 0
1095: .dc.l 0
1096: .dc.l 0
1097: .dc.l 0
1098: .dc.l 0
1099: .dc.l 0
1100: .dc.l 0
1101: .dc.l 0
1102: .dc.l 0
1103: .dc.l 0
1104: .dc.l 0
1105: .dc.l 0
1106: .dc.l 0
1107: .dc.l 0
1108: .dc.l 0
1109: .dc.l 0
1110: .dc.l 0
1111: .dc.l 0
1112: .dc.l 0
1113: .dc.l 0
1114: .dc.l 0
1115: .dc.l 0
1116: .dc.l 0
1117: .dc.l 0
1118: .dc.l 0
1119: .dc.l 0
1120: .dc.l 0
1121: .dc.l 0
1122: .dc.l 0
1123: .dc.l 0
1124: .dc.l 0
1125: .dc.l 0
1126: .dc.l 0
1127: .dc.l 0
1128: .dc.l 0
1129: .dc.l 0
1130: .dc.l 0
1131: .dc.l 0
1132: .dc.l 0
1133: .dc.l 0
1134: .dc.l 0
1135: .dc.l 0
1136: .dc.l 0
1137: .dc.l 0
1138: .dc.l 0
1139: .dc.l 0
1140: .dc.l 0
1141: .dc.l 0
1142: .dc.l 0
1143: .dc.l 0
1144: .dc.l 0
1145: .dc.l 0
1146: .dc.l 0
1147: .dc.l 0
1148: .dc.l 0
1149: .dc.l 0
1150: .dc.l 0
1151: .dc.l 0
1152: .dc.l 0
1153: .dc.l 0
1154: .dc.l 0
1155: .dc.l 0
1156: .dc.l 0
1157: .dc.l 0
1158: .dc.l 0
1159: .dc.l 0
1160: .dc.l 0
1161: .dc.l 0
1162: .dc.l 0
1163: .dc.l 0
1164: .dc.l 0
1165: .dc.l 0
1166: .dc.l 0
1167: .dc.l 0
1168: .dc.l 0
1169: .dc.l 0
1170: .dc.l 0
1171: .dc.l 0
1172: .dc.l 0
1173: .dc.l 0
1174: .dc.l 0
1175: .dc.l 0
1176: .dc.l 0
1177: .dc.l 0
1178: .dc.l 0
1179: .dc.l 0
1180: .dc.l 0
1181: .dc.l 0
1182: .dc.l 0
1183: .dc.l 0
1184: .dc.l 0
1185: .dc.l 0
1186: .dc.l 0
1187: .dc.l 0
1188: .dc.l 0
1189: .dc.l 0
1190: .dc.l 0
1191: .dc.l 0
1192: .dc.l 0
1193: .dc.l 0
1194: .dc.l 0
1195: .dc.l 0
1196: .dc.l 0
1197: .dc.l 0
1198: .dc.l 0
1199: .dc.l 0
1200: .dc.l 0
1201: .dc.l 0
1202: .dc.l 0
1203: .dc.l 0
1204: .dc.l 0
1205: .dc.l 0
1206: .dc.l 0
1207: .dc.l 0
1208: .dc.l 0
1209: .dc.l 0
1210: .dc.l 0
1211: .dc.l 0
1212: .dc.l 0
1213: .dc.l 0
1214: .dc.l 0
1215: .dc.l 0
1216: .dc.l 0
1217: .dc.l 0
1218: .dc.l 0
1219: .dc.l 0
1220: .dc.l 0
1221: .dc.l 0
1222: .dc.l 0
1223: .dc.l 0
1224: .dc.l 0
1225: .dc.l 0
1226: .dc.l 0
1227: .dc.l 0
1228: .dc.l 0
1229: .dc.l 0
1230: .dc.l 0
1231: .dc.l 0
1232: .dc.l 0
1233: .dc.l 0
1234: .dc.l 0
1235: .dc.l 0
1236: .dc.l 0
1237: .dc.l 0
1238: .dc.l 0
1239: .dc.l 0
1240: .dc.l 0
1241: .dc.l 0
1242: .dc.l 0
1243: .dc.l 0
1244: .dc.l 0
1245: .dc.l 0
1246: .dc.l 0
1247: .dc.l 0
1248: .dc.l 0
1249: .dc.l 0
1250: .dc.l 0
1251: .dc.l 0
1252: .dc.l 0
1253: .dc.l 0
1254: .dc.l 0
1255: .dc.l 0
1256: .dc.l 0
1257: .dc.l 0
1258: .dc.l 0
1259: .dc.l 0
1260: .dc.l 0
1261: .dc.l 0
1262: .dc.l 0
1263: .dc.l 0
1264: .dc.l 0
1265: .dc.l 0
1266: .dc.l 0
1267: .dc.l 0
1268: .dc.l 0
1269: .dc.l 0
1270: .dc.l 0
1271: .dc.l 0
1272: .extern _M_WriteOutSamples
1273: .extern _samples_per_midiclock
1274: .extern _music_end
1275: .extern _music_start
1276: .extern _music
1277: .extern _next_eventtime
1278: .extern _musictime
1279: .extern _music_channels
1280: .extern _instruments
1281: .extern _samplecount
1282: .extern _sfxvolume
1283: .extern _M_PaintSingleChannel
1284:
1285: .phrase
1286: .68000
1287: codeend:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.