prime/asm/musyx/snd_service.s

216 lines
12 KiB
ArmAsm

.include "macros.inc"
.section .data, "wa"
.balign 8
.global sndSintab
sndSintab:
.2byte 0, 6, 12, 18, 25, 31, 37, 43, 50, 56, 62, 69, 75, 81, 87, 94
.2byte 100, 106, 113, 119, 125, 131, 138, 144, 150, 157, 163, 169, 175, 182, 188, 194
.2byte 200, 207, 213, 219, 226, 232, 238, 244, 251, 257, 263, 269, 276, 282, 288, 295
.2byte 301, 307, 313, 320, 326, 332, 338, 345, 351, 357, 363, 370, 376, 382, 388, 395
.2byte 401, 407, 413, 420, 426, 432, 438, 445, 451, 457, 463, 470, 476, 482, 488, 495
.2byte 501, 507, 513, 520, 526, 532, 538, 545, 551, 557, 563, 569, 576, 582, 588, 594
.2byte 601, 607, 613, 619, 625, 632, 638, 644, 650, 656, 663, 669, 675, 681, 687, 694
.2byte 700, 706, 712, 718, 725, 731, 737, 743, 749, 755, 762, 768, 774, 780, 786, 792
.2byte 799, 805, 811, 817, 823, 829, 836, 842, 848, 854, 860, 866, 872, 879, 885, 891
.2byte 897, 903, 909, 915, 921, 928, 934, 940, 946, 952, 958, 964, 970, 976, 983, 989
.2byte 995, 1001, 1007, 1013, 1019, 1025, 1031, 1037, 1043, 1050, 1056, 1062, 1068, 1074, 1080, 1086
.2byte 1092, 1098, 1104, 1110, 1116, 1122, 1128, 1134, 1140, 1146, 1152, 1158, 1164, 1170, 1176, 1182
.2byte 1189, 1195, 1201, 1207, 1213, 1219, 1225, 1231, 1237, 1243, 1248, 1254, 1260, 1266, 1272, 1278
.2byte 1284, 1290, 1296, 1302, 1308, 1314, 1320, 1326, 1332, 1338, 1344, 1350, 1356, 1362, 1368, 1373
.2byte 1379, 1385, 1391, 1397, 1403, 1409, 1415, 1421, 1427, 1433, 1438, 1444, 1450, 1456, 1462, 1468
.2byte 1474, 1479, 1485, 1491, 1497, 1503, 1509, 1515, 1520, 1526, 1532, 1538, 1544, 1550, 1555, 1561
.2byte 1567, 1573, 1579, 1584, 1590, 1596, 1602, 1608, 1613, 1619, 1625, 1631, 1636, 1642, 1648, 1654
.2byte 1659, 1665, 1671, 1677, 1682, 1688, 1694, 1699, 1705, 1711, 1717, 1722, 1728, 1734, 1739, 1745
.2byte 1751, 1756, 1762, 1768, 1773, 1779, 1785, 1790, 1796, 1802, 1807, 1813, 1819, 1824, 1830, 1835
.2byte 1841, 1847, 1852, 1858, 1864, 1869, 1875, 1880, 1886, 1891, 1897, 1903, 1908, 1914, 1919, 1925
.2byte 1930, 1936, 1941, 1947, 1952, 1958, 1964, 1969, 1975, 1980, 1986, 1991, 1997, 2002, 2007, 2013
.2byte 2018, 2024, 2029, 2035, 2040, 2046, 2051, 2057, 2062, 2067, 2073, 2078, 2084, 2089, 2094, 2100
.2byte 2105, 2111, 2116, 2121, 2127, 2132, 2138, 2143, 2148, 2154, 2159, 2164, 2170, 2175, 2180, 2186
.2byte 2191, 2196, 2201, 2207, 2212, 2217, 2223, 2228, 2233, 2238, 2244, 2249, 2254, 2259, 2265, 2270
.2byte 2275, 2280, 2286, 2291, 2296, 2301, 2306, 2312, 2317, 2322, 2327, 2332, 2337, 2343, 2348, 2353
.2byte 2358, 2363, 2368, 2373, 2379, 2384, 2389, 2394, 2399, 2404, 2409, 2414, 2419, 2424, 2429, 2434
.2byte 2439, 2445, 2450, 2455, 2460, 2465, 2470, 2475, 2480, 2485, 2490, 2495, 2500, 2505, 2510, 2515
.2byte 2519, 2524, 2529, 2534, 2539, 2544, 2549, 2554, 2559, 2564, 2569, 2574, 2578, 2583, 2588, 2593
.2byte 2598, 2603, 2608, 2613, 2617, 2622, 2627, 2632, 2637, 2641, 2646, 2651, 2656, 2661, 2665, 2670
.2byte 2675, 2680, 2684, 2689, 2694, 2699, 2703, 2708, 2713, 2717, 2722, 2727, 2732, 2736, 2741, 2746
.2byte 2750, 2755, 2760, 2764, 2769, 2773, 2778, 2783, 2787, 2792, 2796, 2801, 2806, 2810, 2815, 2819
.2byte 2824, 2828, 2833, 2837, 2842, 2847, 2851, 2856, 2860, 2865, 2869, 2874, 2878, 2882, 2887, 2891
.2byte 2896, 2900, 2905, 2909, 2914, 2918, 2922, 2927, 2931, 2936, 2940, 2944, 2949, 2953, 2957, 2962
.2byte 2966, 2970, 2975, 2979, 2983, 2988, 2992, 2996, 3000, 3005, 3009, 3013, 3018, 3022, 3026, 3030
.2byte 3034, 3039, 3043, 3047, 3051, 3055, 3060, 3064, 3068, 3072, 3076, 3080, 3085, 3089, 3093, 3097
.2byte 3101, 3105, 3109, 3113, 3117, 3121, 3126, 3130, 3134, 3138, 3142, 3146, 3150, 3154, 3158, 3162
.2byte 3166, 3170, 3174, 3178, 3182, 3186, 3190, 3193, 3197, 3201, 3205, 3209, 3213, 3217, 3221, 3225
.2byte 3229, 3232, 3236, 3240, 3244, 3248, 3252, 3255, 3259, 3263, 3267, 3271, 3274, 3278, 3282, 3286
.2byte 3289, 3293, 3297, 3301, 3304, 3308, 3312, 3315, 3319, 3323, 3326, 3330, 3334, 3337, 3341, 3345
.2byte 3348, 3352, 3356, 3359, 3363, 3366, 3370, 3373, 3377, 3381, 3384, 3388, 3391, 3395, 3398, 3402
.2byte 3405, 3409, 3412, 3416, 3419, 3423, 3426, 3429, 3433, 3436, 3440, 3443, 3447, 3450, 3453, 3457
.2byte 3460, 3463, 3467, 3470, 3473, 3477, 3480, 3483, 3487, 3490, 3493, 3497, 3500, 3503, 3506, 3510
.2byte 3513, 3516, 3519, 3522, 3526, 3529, 3532, 3535, 3538, 3541, 3545, 3548, 3551, 3554, 3557, 3560
.2byte 3563, 3566, 3570, 3573, 3576, 3579, 3582, 3585, 3588, 3591, 3594, 3597, 3600, 3603, 3606, 3609
.2byte 3612, 3615, 3618, 3621, 3624, 3627, 3629, 3632, 3635, 3638, 3641, 3644, 3647, 3650, 3652, 3655
.2byte 3658, 3661, 3664, 3667, 3669, 3672, 3675, 3678, 3680, 3683, 3686, 3689, 3691, 3694, 3697, 3700
.2byte 3702, 3705, 3708, 3710, 3713, 3716, 3718, 3721, 3723, 3726, 3729, 3731, 3734, 3736, 3739, 3742
.2byte 3744, 3747, 3749, 3752, 3754, 3757, 3759, 3762, 3764, 3767, 3769, 3772, 3774, 3776, 3779, 3781
.2byte 3784, 3786, 3789, 3791, 3793, 3796, 3798, 3800, 3803, 3805, 3807, 3810, 3812, 3814, 3816, 3819
.2byte 3821, 3823, 3826, 3828, 3830, 3832, 3834, 3837, 3839, 3841, 3843, 3845, 3848, 3850, 3852, 3854
.2byte 3856, 3858, 3860, 3862, 3864, 3867, 3869, 3871, 3873, 3875, 3877, 3879, 3881, 3883, 3885, 3887
.2byte 3889, 3891, 3893, 3895, 3897, 3899, 3900, 3902, 3904, 3906, 3908, 3910, 3912, 3914, 3915, 3917
.2byte 3919, 3921, 3923, 3925, 3926, 3928, 3930, 3932, 3933, 3935, 3937, 3939, 3940, 3942, 3944, 3945
.2byte 3947, 3949, 3950, 3952, 3954, 3955, 3957, 3959, 3960, 3962, 3963, 3965, 3967, 3968, 3970, 3971
.2byte 3973, 3974, 3976, 3977, 3979, 3980, 3982, 3983, 3985, 3986, 3988, 3989, 3990, 3992, 3993, 3995
.2byte 3996, 3997, 3999, 4000, 4001, 4003, 4004, 4005, 4007, 4008, 4009, 4011, 4012, 4013, 4014, 4016
.2byte 4017, 4018, 4019, 4020, 4022, 4023, 4024, 4025, 4026, 4027, 4029, 4030, 4031, 4032, 4033, 4034
.2byte 4035, 4036, 4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044, 4045, 4046, 4047, 4048, 4049, 4050
.2byte 4051, 4052, 4053, 4054, 4055, 4056, 4057, 4057, 4058, 4059, 4060, 4061, 4062, 4062, 4063, 4064
.2byte 4065, 4065, 4066, 4067, 4068, 4068, 4069, 4070, 4071, 4071, 4072, 4073, 4073, 4074, 4075, 4075
.2byte 4076, 4076, 4077, 4078, 4078, 4079, 4079, 4080, 4080, 4081, 4081, 4082, 4082, 4083, 4083, 4084
.2byte 4084, 4085, 4085, 4086, 4086, 4087, 4087, 4087, 4088, 4088, 4089, 4089, 4089, 4090, 4090, 4090
.2byte 4091, 4091, 4091, 4091, 4092, 4092, 4092, 4092, 4093, 4093, 4093, 4093, 4094, 4094, 4094, 4094
.2byte 4094, 4094, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095
.skip 8
.section .sdata, "wa"
.balign 8
.global last_rnd
last_rnd:
.4byte 1
.skip 4
.section .text, "ax"
.global sndRand
sndRand:
/* 803B2DA0 003AFD00 3C 60 A8 35 */ lis r3, 0xA8351D63@ha
/* 803B2DA4 003AFD04 80 8D A0 10 */ lwz r4, last_rnd@sda21(r13)
/* 803B2DA8 003AFD08 38 03 1D 63 */ addi r0, r3, 0xA8351D63@l
/* 803B2DAC 003AFD0C 7C 04 01 D6 */ mullw r0, r4, r0
/* 803B2DB0 003AFD10 90 0D A0 10 */ stw r0, last_rnd@sda21(r13)
/* 803B2DB4 003AFD14 54 03 D4 3E */ rlwinm r3, r0, 0x1a, 0x10, 0x1f
/* 803B2DB8 003AFD18 4E 80 00 20 */ blr
.global sndSin
sndSin:
/* 803B2DBC 003AFD1C 54 60 05 3E */ clrlwi r0, r3, 0x14
/* 803B2DC0 003AFD20 28 00 04 00 */ cmplwi r0, 0x400
/* 803B2DC4 003AFD24 40 80 00 18 */ bge lbl_803B2DDC
/* 803B2DC8 003AFD28 3C 60 80 3F */ lis r3, sndSintab@ha
/* 803B2DCC 003AFD2C 54 00 0B FC */ rlwinm r0, r0, 1, 0xf, 0x1e
/* 803B2DD0 003AFD30 38 63 42 78 */ addi r3, r3, sndSintab@l
/* 803B2DD4 003AFD34 7C 63 02 AE */ lhax r3, r3, r0
/* 803B2DD8 003AFD38 4E 80 00 20 */ blr
lbl_803B2DDC:
/* 803B2DDC 003AFD3C 28 00 08 00 */ cmplwi r0, 0x800
/* 803B2DE0 003AFD40 40 80 00 20 */ bge lbl_803B2E00
/* 803B2DE4 003AFD44 54 00 05 BE */ clrlwi r0, r0, 0x16
/* 803B2DE8 003AFD48 3C 60 80 3F */ lis r3, sndSintab@ha
/* 803B2DEC 003AFD4C 20 00 03 FF */ subfic r0, r0, 0x3ff
/* 803B2DF0 003AFD50 54 00 08 3C */ slwi r0, r0, 1
/* 803B2DF4 003AFD54 38 63 42 78 */ addi r3, r3, sndSintab@l
/* 803B2DF8 003AFD58 7C 63 02 AE */ lhax r3, r3, r0
/* 803B2DFC 003AFD5C 4E 80 00 20 */ blr
lbl_803B2E00:
/* 803B2E00 003AFD60 28 00 0C 00 */ cmplwi r0, 0xc00
/* 803B2E04 003AFD64 40 80 00 20 */ bge lbl_803B2E24
/* 803B2E08 003AFD68 3C 60 80 3F */ lis r3, sndSintab@ha
/* 803B2E0C 003AFD6C 54 00 0D 7C */ rlwinm r0, r0, 1, 0x15, 0x1e
/* 803B2E10 003AFD70 38 63 42 78 */ addi r3, r3, sndSintab@l
/* 803B2E14 003AFD74 7C 03 02 AE */ lhax r0, r3, r0
/* 803B2E18 003AFD78 7C 00 00 D0 */ neg r0, r0
/* 803B2E1C 003AFD7C 7C 03 07 34 */ extsh r3, r0
/* 803B2E20 003AFD80 4E 80 00 20 */ blr
lbl_803B2E24:
/* 803B2E24 003AFD84 54 00 05 BE */ clrlwi r0, r0, 0x16
/* 803B2E28 003AFD88 3C 60 80 3F */ lis r3, sndSintab@ha
/* 803B2E2C 003AFD8C 20 00 03 FF */ subfic r0, r0, 0x3ff
/* 803B2E30 003AFD90 54 00 08 3C */ slwi r0, r0, 1
/* 803B2E34 003AFD94 38 63 42 78 */ addi r3, r3, sndSintab@l
/* 803B2E38 003AFD98 7C 03 02 AE */ lhax r0, r3, r0
/* 803B2E3C 003AFD9C 7C 00 00 D0 */ neg r0, r0
/* 803B2E40 003AFDA0 7C 03 07 34 */ extsh r3, r0
/* 803B2E44 003AFDA4 4E 80 00 20 */ blr
.global sndBSearch
sndBSearch:
/* 803B2E48 003AFDA8 94 21 FF D0 */ stwu r1, -0x30(r1)
/* 803B2E4C 003AFDAC 7C 08 02 A6 */ mflr r0
/* 803B2E50 003AFDB0 90 01 00 34 */ stw r0, 0x34(r1)
/* 803B2E54 003AFDB4 39 61 00 30 */ addi r11, r1, 0x30
/* 803B2E58 003AFDB8 4B FD 6C 19 */ bl _savegpr_24
/* 803B2E5C 003AFDBC 2C 05 00 00 */ cmpwi r5, 0
/* 803B2E60 003AFDC0 7C 78 1B 78 */ mr r24, r3
/* 803B2E64 003AFDC4 7C 99 23 78 */ mr r25, r4
/* 803B2E68 003AFDC8 7C DA 33 78 */ mr r26, r6
/* 803B2E6C 003AFDCC 7C FB 3B 78 */ mr r27, r7
/* 803B2E70 003AFDD0 41 82 00 60 */ beq lbl_803B2ED0
/* 803B2E74 003AFDD4 3B E0 00 01 */ li r31, 1
/* 803B2E78 003AFDD8 7C BE 2B 78 */ mr r30, r5
lbl_803B2E7C:
/* 803B2E7C 003AFDDC 7C 1F F2 14 */ add r0, r31, r30
/* 803B2E80 003AFDE0 7F 6C DB 78 */ mr r12, r27
/* 803B2E84 003AFDE4 7C 1D 0E 70 */ srawi r29, r0, 1
/* 803B2E88 003AFDE8 7F 03 C3 78 */ mr r3, r24
/* 803B2E8C 003AFDEC 38 1D FF FF */ addi r0, r29, -1
/* 803B2E90 003AFDF0 7C 1A 01 D6 */ mullw r0, r26, r0
/* 803B2E94 003AFDF4 7F 99 02 14 */ add r28, r25, r0
/* 803B2E98 003AFDF8 7F 84 E3 78 */ mr r4, r28
/* 803B2E9C 003AFDFC 7D 89 03 A6 */ mtctr r12
/* 803B2EA0 003AFE00 4E 80 04 21 */ bctrl
/* 803B2EA4 003AFE04 2C 03 00 00 */ cmpwi r3, 0
/* 803B2EA8 003AFE08 40 82 00 0C */ bne lbl_803B2EB4
/* 803B2EAC 003AFE0C 7F 83 E3 78 */ mr r3, r28
/* 803B2EB0 003AFE10 48 00 00 24 */ b lbl_803B2ED4
lbl_803B2EB4:
/* 803B2EB4 003AFE14 40 80 00 08 */ bge lbl_803B2EBC
/* 803B2EB8 003AFE18 3B DD FF FF */ addi r30, r29, -1
lbl_803B2EBC:
/* 803B2EBC 003AFE1C 54 60 0F FF */ rlwinm. r0, r3, 1, 0x1f, 0x1f
/* 803B2EC0 003AFE20 40 82 00 08 */ bne lbl_803B2EC8
/* 803B2EC4 003AFE24 3B FD 00 01 */ addi r31, r29, 1
lbl_803B2EC8:
/* 803B2EC8 003AFE28 7C 1F F0 00 */ cmpw r31, r30
/* 803B2ECC 003AFE2C 40 81 FF B0 */ ble lbl_803B2E7C
lbl_803B2ED0:
/* 803B2ED0 003AFE30 38 60 00 00 */ li r3, 0
lbl_803B2ED4:
/* 803B2ED4 003AFE34 39 61 00 30 */ addi r11, r1, 0x30
/* 803B2ED8 003AFE38 4B FD 6B E5 */ bl _restgpr_24
/* 803B2EDC 003AFE3C 80 01 00 34 */ lwz r0, 0x34(r1)
/* 803B2EE0 003AFE40 7C 08 03 A6 */ mtlr r0
/* 803B2EE4 003AFE44 38 21 00 30 */ addi r1, r1, 0x30
/* 803B2EE8 003AFE48 4E 80 00 20 */ blr
.global sndConvertMs
sndConvertMs:
/* 803B2EEC 003AFE4C 80 03 00 00 */ lwz r0, 0(r3)
/* 803B2EF0 003AFE50 54 00 40 2E */ slwi r0, r0, 8
/* 803B2EF4 003AFE54 90 03 00 00 */ stw r0, 0(r3)
/* 803B2EF8 003AFE58 4E 80 00 20 */ blr
.global sndConvertTicks
sndConvertTicks:
/* 803B2EFC 003AFE5C 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 803B2F00 003AFE60 7C 08 02 A6 */ mflr r0
/* 803B2F04 003AFE64 90 01 00 14 */ stw r0, 0x14(r1)
/* 803B2F08 003AFE68 93 E1 00 0C */ stw r31, 0xc(r1)
/* 803B2F0C 003AFE6C 7C 7F 1B 78 */ mr r31, r3
/* 803B2F10 003AFE70 7C 83 23 78 */ mr r3, r4
/* 803B2F14 003AFE74 4B FE 5D D1 */ bl synthGetTicksPerSecond
/* 803B2F18 003AFE78 80 1F 00 00 */ lwz r0, 0(r31)
/* 803B2F1C 003AFE7C 54 00 80 1E */ slwi r0, r0, 0x10
/* 803B2F20 003AFE80 7C 00 1B 96 */ divwu r0, r0, r3
/* 803B2F24 003AFE84 1C 00 03 E8 */ mulli r0, r0, 0x3e8
/* 803B2F28 003AFE88 54 00 D9 7E */ srwi r0, r0, 5
/* 803B2F2C 003AFE8C 90 1F 00 00 */ stw r0, 0(r31)
/* 803B2F30 003AFE90 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 803B2F34 003AFE94 80 01 00 14 */ lwz r0, 0x14(r1)
/* 803B2F38 003AFE98 7C 08 03 A6 */ mtlr r0
/* 803B2F3C 003AFE9C 38 21 00 10 */ addi r1, r1, 0x10
/* 803B2F40 003AFEA0 4E 80 00 20 */ blr
.global sndConvert2Ms
sndConvert2Ms:
/* 803B2F44 003AFEA4 54 63 C2 3E */ srwi r3, r3, 8
/* 803B2F48 003AFEA8 4E 80 00 20 */ blr