|
|
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.