MusyX: Correct global variable locations, and move synth_dbtab to C

This commit is contained in:
Phillip Stephens 2022-04-09 01:51:35 -07:00
parent 40babd0f65
commit 7f90b8de58
Signed by: Antidote
GPG Key ID: F8BEE4C83DACA60D
15 changed files with 966 additions and 1151 deletions

View File

@ -137,8 +137,8 @@ func_80389A58:
_savegpr_20:
/* 80389A60 003869C0 92 8B FF D0 */ stw r20, -0x30(r11)
.global func_80389A64
func_80389A64:
.global _savegpr_21
_savegpr_21:
/* 80389A64 003869C4 92 AB FF D4 */ stw r21, -0x2c(r11)
.global _savegpr_22

View File

@ -101,7 +101,7 @@ ReverbSTDCreate:
/* 803B5280 003B21E0 DB 21 00 40 */ stfd f25, 0x40(r1)
/* 803B5284 003B21E4 F3 21 00 48 */ psq_st f25, 72(r1), 0, qr0
/* 803B5288 003B21E8 39 61 00 40 */ addi r11, r1, 0x40
/* 803B528C 003B21EC 4B FD 47 D9 */ bl func_80389A64
/* 803B528C 003B21EC 4B FD 47 D9 */ bl _savegpr_21
/* 803B5290 003B21F0 FF 20 08 90 */ fmr f25, f1
/* 803B5294 003B21F4 C0 C2 D6 90 */ lfs f6, lbl_805AF3B0@sda21(r2)
/* 803B5298 003B21F8 FF 80 10 90 */ fmr f28, f2

View File

@ -540,9 +540,9 @@ lbl_803B347C:
/* 803B34E4 003B0444 40 81 00 08 */ ble lbl_803B34EC
/* 803B34E8 003B0448 38 80 03 FF */ li r4, 0x3ff
lbl_803B34EC:
/* 803B34EC 003B044C 3C 60 80 3F */ lis r3, lbl_803F39A4@ha
/* 803B34EC 003B044C 3C 60 80 3F */ lis r3, dspScale2IndexTab@ha
/* 803B34F0 003B0450 80 0D AF 54 */ lwz r0, dspVoice@sda21(r13)
/* 803B34F4 003B0454 38 63 39 A4 */ addi r3, r3, lbl_803F39A4@l
/* 803B34F4 003B0454 38 63 39 A4 */ addi r3, r3, dspScale2IndexTab@l
/* 803B34F8 003B0458 7C 83 20 AE */ lbzx r4, r3, r4
/* 803B34FC 003B045C 7C 60 FA 14 */ add r3, r0, r31
/* 803B3500 003B0460 20 04 00 C1 */ subfic r0, r4, 0xc1

View File

@ -60,15 +60,19 @@ salMessageCallback:
.section .data, "wa"
.global lbl_803F3FA8
lbl_803F3FA8:
.global dspSRCCycles
dspSRCCycles:
# ROM: 0x3F0FA8
.4byte 0x0BAE0BAE
.4byte 0x045B0CE4
.4byte 0x0CE4045B
.4byte 0x0E740E74
.4byte 0x045B0000
.4byte 0
.2byte 0x0BAE
.2byte 0x0BAE
.2byte 0x045B
.2byte 0x0CE4
.2byte 0x0CE4
.2byte 0x045B
.2byte 0x0E74
.2byte 0x0E74
.2byte 0x045B
.balign 8
.section .rodata
@ -2567,17 +2571,17 @@ lbl_803ACFF4:
lbl_803AD034:
/* 803AD034 003A9F94 1C 84 00 06 */ mulli r4, r4, 6
/* 803AD038 003A9F98 A0 13 00 08 */ lhz r0, 8(r19)
/* 803AD03C 003A9F9C 3C 60 80 3F */ lis r3, lbl_803F3FA8@ha
/* 803AD03C 003A9F9C 3C 60 80 3F */ lis r3, dspSRCCycles@ha
/* 803AD040 003A9FA0 54 00 08 3C */ slwi r0, r0, 1
/* 803AD044 003A9FA4 38 63 3F A8 */ addi r3, r3, lbl_803F3FA8@l
/* 803AD044 003A9FA4 38 63 3F A8 */ addi r3, r3, dspSRCCycles@l
/* 803AD048 003A9FA8 7C 63 22 14 */ add r3, r3, r4
/* 803AD04C 003A9FAC 7C 03 02 2E */ lhzx r0, r3, r0
/* 803AD050 003A9FB0 7E F7 02 14 */ add r23, r23, r0
/* 803AD054 003A9FB4 48 00 00 20 */ b lbl_803AD074
lbl_803AD058:
/* 803AD058 003A9FB8 A0 93 00 08 */ lhz r4, 8(r19)
/* 803AD05C 003A9FBC 3C 60 80 3F */ lis r3, lbl_803F3FA8@ha
/* 803AD060 003A9FC0 38 03 3F A8 */ addi r0, r3, lbl_803F3FA8@l
/* 803AD05C 003A9FBC 3C 60 80 3F */ lis r3, dspSRCCycles@ha
/* 803AD060 003A9FC0 38 03 3F A8 */ addi r0, r3, dspSRCCycles@l
/* 803AD064 003A9FC4 54 83 08 3C */ slwi r3, r4, 1
/* 803AD068 003A9FC8 7C 60 1A 14 */ add r3, r0, r3
/* 803AD06C 003A9FCC A0 03 00 0C */ lhz r0, 0xc(r3)

View File

@ -54,8 +54,8 @@ lbl_805AF320:
.section .data, "wa"
.global lbl_803F3FC0
lbl_803F3FC0:
.global musyx_vol_tab
musyx_vol_tab:
# ROM: 0x3F0FC0
.4byte 0
.4byte 0x380000FD
@ -186,10 +186,12 @@ lbl_803F3FC0:
.4byte 0x3F7B3DF3
.4byte 0x3F800000
.4byte 0x3F800000
pan_tab:
.4byte 0
.4byte 0x3F3538EF
.4byte 0x3F800000
.4byte 0x3F800000
pan_tab_dpl2:
.4byte 0x3F133333
.4byte 0x3F3538EF
.4byte 0x3F800000
@ -229,18 +231,18 @@ salCalcVolume:
/* 803AE174 003AB0D4 DA 81 00 50 */ stfd f20, 0x50(r1)
/* 803AE178 003AB0D8 F2 81 00 58 */ psq_st f20, 88(r1), 0, qr0
/* 803AE17C 003AB0DC 39 61 00 50 */ addi r11, r1, 0x50
/* 803AE180 003AB0E0 4B FD B8 E5 */ bl func_80389A64
/* 803AE180 003AB0E0 4B FD B8 E5 */ bl _savegpr_21
/* 803AE184 003AB0E4 54 60 06 3F */ clrlwi. r0, r3, 0x18
/* 803AE188 003AB0E8 3C 60 80 3F */ lis r3, lbl_803F3DA4@ha
/* 803AE18C 003AB0EC 3B E3 3D A4 */ addi r31, r3, lbl_803F3DA4@l
/* 803AE188 003AB0E8 3C 60 80 3F */ lis r3, dspDLSVolTab@ha
/* 803AE18C 003AB0EC 3B E3 3D A4 */ addi r31, r3, dspDLSVolTab@l
/* 803AE190 003AB0F0 FE C0 08 90 */ fmr f22, f1
/* 803AE194 003AB0F4 3C 60 80 3F */ lis r3, lbl_803F3FC0@ha
/* 803AE194 003AB0F4 3C 60 80 3F */ lis r3, musyx_vol_tab@ha
/* 803AE198 003AB0F8 FF E0 10 90 */ fmr f31, f2
/* 803AE19C 003AB0FC FE A0 18 90 */ fmr f21, f3
/* 803AE1A0 003AB100 7C 99 23 78 */ mr r25, r4
/* 803AE1A4 003AB104 7C FA 3B 78 */ mr r26, r7
/* 803AE1A8 003AB108 7D 1B 43 78 */ mr r27, r8
/* 803AE1AC 003AB10C 3B C3 3F C0 */ addi r30, r3, lbl_803F3FC0@l
/* 803AE1AC 003AB10C 3B C3 3F C0 */ addi r30, r3, musyx_vol_tab@l
/* 803AE1B0 003AB110 40 82 00 08 */ bne lbl_803AE1B8
/* 803AE1B4 003AB114 3B FE 00 00 */ addi r31, r30, 0
lbl_803AE1B8:
@ -501,7 +503,7 @@ lbl_803AE58C:
/* 803AE5A0 003AB500 C0 02 D5 D4 */ lfs f0, lbl_805AF2F4@sda21(r2)
/* 803AE5A4 003AB504 90 61 00 1C */ stw r3, 0x1c(r1)
/* 803AE5A8 003AB508 54 64 10 3A */ slwi r4, r3, 2
/* 803AE5AC 003AB50C 3B 7E 02 04 */ addi r27, r30, 0x204
/* 803AE5AC 003AB50C 3B 7E 02 04 */ addi r27, r30, pan_tab - musyx_vol_tab
/* 803AE5B0 003AB510 56 F7 10 3A */ slwi r23, r23, 2
/* 803AE5B4 003AB514 90 01 00 18 */ stw r0, 0x18(r1)
/* 803AE5B8 003AB518 7C 7F 22 14 */ add r3, r31, r4
@ -532,7 +534,7 @@ lbl_803AE58C:
/* 803AE61C 003AB57C ED 4B 02 B2 */ fmuls f10, f11, f10
/* 803AE620 003AB580 57 A0 10 3A */ slwi r0, r29, 2
/* 803AE624 003AB584 EC D8 01 72 */ fmuls f6, f24, f5
/* 803AE628 003AB588 38 7E 02 14 */ addi r3, r30, 0x214
/* 803AE628 003AB588 38 7E 02 14 */ addi r3, r30, pan_tab_dpl2 - musyx_vol_tab
/* 803AE62C 003AB58C EC BB 00 F2 */ fmuls f5, f27, f3
/* 803AE630 003AB590 57 84 10 3A */ slwi r4, r28, 2
/* 803AE634 003AB594 EC 6A 48 2A */ fadds f3, f10, f9

View File

@ -37,28 +37,28 @@ lbl_803F41F8:
lbl_803F4208:
# ROM: 0x3F1208
.4byte 0x803B2A78
.4byte 0x803B2A80
.4byte 0x803B2A88
.4byte 0x803B2A90
.4byte 0x803B2A98
.4byte 0x803B2AA0
.4byte 0x803B2AA8
.4byte 0x803B2AB0
.4byte 0x803B2AB8
.4byte lbl_803B2A78
.4byte lbl_803B2A80
.4byte lbl_803B2A88
.4byte lbl_803B2A90
.4byte lbl_803B2A98
.4byte lbl_803B2AA0
.4byte lbl_803B2AA8
.4byte lbl_803B2AB0
.4byte lbl_803B2AB8
lbl_803F422C:
# ROM: 0x3F122C
.4byte 0x803B2AF8
.4byte 0x803B2B00
.4byte 0x803B2B08
.4byte 0x803B2B10
.4byte 0x803B2B18
.4byte 0x803B2B20
.4byte 0x803B2B28
.4byte 0x803B2B30
.4byte 0x803B2B38
.4byte lbl_803B2AF8
.4byte lbl_803B2B00
.4byte lbl_803B2B08
.4byte lbl_803B2B10
.4byte lbl_803B2B18
.4byte lbl_803B2B20
.4byte lbl_803B2B28
.4byte lbl_803B2B30
.4byte lbl_803B2B38
lbl_803F4250:
@ -2062,22 +2062,31 @@ inpTranslateExCtrl:
/* 803B2A6C 003AF9CC 7C 04 00 2E */ lwzx r0, r4, r0
/* 803B2A70 003AF9D0 7C 09 03 A6 */ mtctr r0
/* 803B2A74 003AF9D4 4E 80 04 20 */ bctr
lbl_803B2A78:
/* 803B2A78 003AF9D8 38 60 00 80 */ li r3, 0x80
/* 803B2A7C 003AF9DC 4E 80 00 20 */ blr
lbl_803B2A80:
/* 803B2A80 003AF9E0 38 60 00 82 */ li r3, 0x82
/* 803B2A84 003AF9E4 4E 80 00 20 */ blr
lbl_803B2A88:
/* 803B2A88 003AF9E8 38 60 00 A0 */ li r3, 0xa0
/* 803B2A8C 003AF9EC 4E 80 00 20 */ blr
lbl_803B2A90:
/* 803B2A90 003AF9F0 38 60 00 A1 */ li r3, 0xa1
/* 803B2A94 003AF9F4 4E 80 00 20 */ blr
lbl_803B2A98:
/* 803B2A98 003AF9F8 38 60 00 83 */ li r3, 0x83
/* 803B2A9C 003AF9FC 4E 80 00 20 */ blr
lbl_803B2AA0:
/* 803B2AA0 003AFA00 38 60 00 84 */ li r3, 0x84
/* 803B2AA4 003AFA04 4E 80 00 20 */ blr
lbl_803B2AA8:
/* 803B2AA8 003AFA08 38 60 00 A2 */ li r3, 0xa2
/* 803B2AAC 003AFA0C 4E 80 00 20 */ blr
lbl_803B2AB0:
/* 803B2AB0 003AFA10 38 60 00 A3 */ li r3, 0xa3
/* 803B2AB4 003AFA14 4E 80 00 20 */ blr
lbl_803B2AB8:
/* 803B2AB8 003AFA18 38 60 00 A4 */ li r3, 0xa4
/* 803B2ABC 003AFA1C 4E 80 00 20 */ blr
@ -2097,22 +2106,31 @@ inpGetExCtrl:
/* 803B2AEC 003AFA4C 7C 05 00 2E */ lwzx r0, r5, r0
/* 803B2AF0 003AFA50 7C 09 03 A6 */ mtctr r0
/* 803B2AF4 003AFA54 4E 80 04 20 */ bctr
lbl_803B2AF8:
/* 803B2AF8 003AFA58 38 C0 00 80 */ li r6, 0x80
/* 803B2AFC 003AFA5C 48 00 00 40 */ b lbl_803B2B3C
lbl_803B2B00:
/* 803B2B00 003AFA60 38 C0 00 82 */ li r6, 0x82
/* 803B2B04 003AFA64 48 00 00 38 */ b lbl_803B2B3C
lbl_803B2B08:
/* 803B2B08 003AFA68 38 C0 00 A0 */ li r6, 0xa0
/* 803B2B0C 003AFA6C 48 00 00 30 */ b lbl_803B2B3C
lbl_803B2B10:
/* 803B2B10 003AFA70 38 C0 00 A1 */ li r6, 0xa1
/* 803B2B14 003AFA74 48 00 00 28 */ b lbl_803B2B3C
lbl_803B2B18:
/* 803B2B18 003AFA78 38 C0 00 83 */ li r6, 0x83
/* 803B2B1C 003AFA7C 48 00 00 20 */ b lbl_803B2B3C
lbl_803B2B20:
/* 803B2B20 003AFA80 38 C0 00 84 */ li r6, 0x84
/* 803B2B24 003AFA84 48 00 00 18 */ b lbl_803B2B3C
lbl_803B2B28:
/* 803B2B28 003AFA88 38 C0 00 A2 */ li r6, 0xa2
/* 803B2B2C 003AFA8C 48 00 00 10 */ b lbl_803B2B3C
lbl_803B2B30:
/* 803B2B30 003AFA90 38 C0 00 A3 */ li r6, 0xa3
/* 803B2B34 003AFA94 48 00 00 08 */ b lbl_803B2B3C
lbl_803B2B38:
/* 803B2B38 003AFA98 38 C0 00 A4 */ li r6, 0xa4
lbl_803B2B3C:
/* 803B2B3C 003AFA9C 54 C0 06 3E */ clrlwi r0, r6, 0x18

View File

@ -1,5 +1,271 @@
.include "macros.inc"
.section .data
.global toneup_map
toneup_map:
# ROM: 0x3F0420
.4byte 0x3F800000
.4byte 0x3F879C80
.4byte 0x3F8FACD8
.4byte 0x3F9837F0
.4byte 0x3FA14518
.4byte 0x3FAADC08
.4byte 0x3FB504F8
.4byte 0x3FBFC888
.4byte 0x3FCB2FF8
.4byte 0x3FD74500
.4byte 0x3FE411F8
.4byte 0x3FF1A1C0
.4byte 0x40000004
.4byte 0x40079C80
.4byte 0x400FACD8
.4byte 0x401837F4
.4byte 0x4021451C
.4byte 0x402ADC0C
.4byte 0x403504F8
.4byte 0x403FC88C
.4byte 0x404B2FFC
.4byte 0x40574504
.4byte 0x406411F8
.4byte 0x4071A1C4
.4byte 0x40800004
.4byte 0x40879C80
.4byte 0x408FACDA
.4byte 0x409837F4
.4byte 0x40A1451C
.4byte 0x40AADC0E
.4byte 0x40B504F8
.4byte 0x40BFC88C
.4byte 0x40CB2FFC
.4byte 0x40D74504
.4byte 0x40E411F8
.4byte 0x40F1A1C6
.4byte 0x41000004
.4byte 0x41079C81
.4byte 0x410FACDB
.4byte 0x411837F5
.4byte 0x4121451D
.4byte 0x412ADC0E
.4byte 0x413504F9
.4byte 0x413FC88D
.4byte 0x414B2FFC
.4byte 0x41574504
.4byte 0x416411F8
.4byte 0x4171A1C7
.4byte 0x41800004
.4byte 0x41879C81
.4byte 0x418FACDB
.4byte 0x419837F5
.4byte 0x41A1451D
.4byte 0x41AADC0E
.4byte 0x41B504F9
.4byte 0x41BFC88D
.4byte 0x41CB2FFC
.4byte 0x41D74504
.4byte 0x41E411F8
.4byte 0x41F1A1C7
.4byte 0x42000004
.4byte 0x42079C81
.4byte 0x420FACDB
.4byte 0x421837F5
.4byte 0x4221451D
.4byte 0x422ADC0E
.4byte 0x423504F9
.4byte 0x423FC88D
.4byte 0x424B2FFC
.4byte 0x42574504
.4byte 0x426411F8
.4byte 0x4271A1C7
.4byte 0x42800004
.4byte 0x42879C81
.4byte 0x428FACDB
.4byte 0x429837F5
.4byte 0x42A1451D
.4byte 0x42AADC0E
.4byte 0x42B504F9
.4byte 0x42BFC88D
.4byte 0x42CB2FFC
.4byte 0x42D74504
.4byte 0x42E411F8
.4byte 0x42F1A1C7
.4byte 0x43000004
.4byte 0x43079C81
.4byte 0x430FACDB
.4byte 0x431837F5
.4byte 0x4321451D
.4byte 0x432ADC0E
.4byte 0x433504F9
.4byte 0x433FC88D
.4byte 0x434B2FFC
.4byte 0x43574504
.4byte 0x436411F8
.4byte 0x4371A1C7
.4byte 0x43800004
.4byte 0x43879C81
.4byte 0x438FACDB
.4byte 0x439837F5
.4byte 0x43A1451D
.4byte 0x43AADC0E
.4byte 0x43B504F9
.4byte 0x43BFC88D
.4byte 0x43CB2FFC
.4byte 0x43D74504
.4byte 0x43E411F8
.4byte 0x43F1A1C7
.4byte 0x44000004
.4byte 0x44079C81
.4byte 0x440FACDB
.4byte 0x441837F5
.4byte 0x4421451D
.4byte 0x442ADC0E
.4byte 0x443504F9
.4byte 0x443FC88D
.4byte 0x444B2FFC
.4byte 0x44574504
.4byte 0x446411F8
.4byte 0x4471A1C7
.4byte 0x44800004
.4byte 0x44879C81
.4byte 0x448FACDB
.4byte 0x449837F5
.4byte 0x44A1451D
.4byte 0x44AADC0E
.4byte 0x44B504F9
.4byte 0x44BFC88D
.global tonedown_tab
tonedown_tab:
# ROM: 0x3F0620
.4byte 0x3F800000
.4byte 0x3F71A1C0
.4byte 0x3F6411F0
.4byte 0x3F574500
.4byte 0x3F4B2FF0
.4byte 0x3F3FC880
.4byte 0x3F3504F0
.4byte 0x3F2ADC00
.4byte 0x3F214510
.4byte 0x3F1837F0
.4byte 0x3F0FACD0
.4byte 0x3F079C80
.4byte 0x3F000000
.4byte 0x3EF1A1C0
.4byte 0x3EE411E0
.4byte 0x3ED74500
.4byte 0x3ECB3000
.4byte 0x3EBFC880
.4byte 0x3EB504E0
.4byte 0x3EAADC00
.4byte 0x3EA14520
.4byte 0x3E9837E0
.4byte 0x3E8FACE0
.4byte 0x3E879C80
.4byte 0x3E800000
.4byte 0x3E71A1C0
.4byte 0x3E641200
.4byte 0x3E574500
.4byte 0x3E4B3000
.4byte 0x3E3FC880
.4byte 0x3E350500
.4byte 0x3E2ADC00
.4byte 0x3E214500
.4byte 0x3E183800
.4byte 0x3E0FACC0
.4byte 0x3E079C80
.4byte 0x3E000000
.4byte 0x3DF1A180
.4byte 0x3DE41200
.4byte 0x3DD74500
.4byte 0x3DCB3000
.4byte 0x3DBFC880
.4byte 0x3DB50500
.4byte 0x3DAADC00
.4byte 0x3DA14500
.4byte 0x3D983800
.4byte 0x3D8FAD00
.4byte 0x3D879C80
.4byte 0x3D800000
.4byte 0x3D71A200
.4byte 0x3D641200
.4byte 0x3D574500
.4byte 0x3D4B3000
.4byte 0x3D3FC900
.4byte 0x3D350500
.4byte 0x3D2ADC00
.4byte 0x3D214500
.4byte 0x3D183800
.4byte 0x3D0FAD00
.4byte 0x3D079C00
.4byte 0x3D000000
.4byte 0x3CF1A200
.4byte 0x3CE41200
.4byte 0x3CD74400
.4byte 0x3CCB3000
.4byte 0x3CBFC800
.4byte 0x3CB50400
.4byte 0x3CAADC00
.4byte 0x3CA14600
.4byte 0x3C983800
.4byte 0x3C8FAC00
.4byte 0x3C879C00
.4byte 0x3C800000
.4byte 0x3C71A000
.4byte 0x3C641000
.4byte 0x3C574400
.4byte 0x3C4B3000
.4byte 0x3C3FC800
.4byte 0x3C350400
.4byte 0x3C2ADC00
.4byte 0x3C214400
.4byte 0x3C183800
.4byte 0x3C0FAC00
.4byte 0x3C079C00
.4byte 0x3C000000
.4byte 0x3BF1A000
.4byte 0x3BE41000
.4byte 0x3BD74800
.4byte 0x3BCB3000
.4byte 0x3BBFC800
.4byte 0x3BB50800
.4byte 0x3BAAE000
.4byte 0x3BA14800
.4byte 0x3B983800
.4byte 0x3B8FB000
.4byte 0x3B87A000
.4byte 0x3B800000
.4byte 0x3B71A000
.4byte 0x3B641000
.4byte 0x3B574000
.4byte 0x3B4B3000
.4byte 0x3B3FD000
.4byte 0x3B350000
.4byte 0x3B2AE000
.4byte 0x3B214000
.4byte 0x3B183000
.4byte 0x3B0FB000
.4byte 0x3B07A000
.4byte 0x3B000000
.4byte 0x3AF1A000
.4byte 0x3AE42000
.4byte 0x3AD74000
.4byte 0x3ACB2000
.4byte 0x3ABFC000
.4byte 0x3AB50000
.4byte 0x3AAAE000
.4byte 0x3AA14000
.4byte 0x3A984000
.4byte 0x3A8FA000
.4byte 0x3A87A000
.4byte 0x3A800000
.4byte 0x3A71C000
.4byte 0x3A640000
.4byte 0x3A574000
.4byte 0x3A4B4000
.4byte 0x3A3FC000
.4byte 0x3A350000
.4byte 0x3A2AC000
.section .sdata2
.global lbl_805AF2B0
lbl_805AF2B0:
@ -66,16 +332,16 @@ lbl_803A914C:
/* 803A917C 003A60DC EC 20 08 28 */ fsubs f1, f0, f1
/* 803A9180 003A60E0 40 80 00 1C */ bge lbl_803A919C
/* 803A9184 003A60E4 7C 06 28 50 */ subf r0, r6, r5
/* 803A9188 003A60E8 3C 60 80 3F */ lis r3, lbl_803F3420@ha
/* 803A9188 003A60E8 3C 60 80 3F */ lis r3, toneup_map@ha
/* 803A918C 003A60EC 54 00 10 3A */ slwi r0, r0, 2
/* 803A9190 003A60F0 38 63 34 20 */ addi r3, r3, lbl_803F3420@l
/* 803A9190 003A60F0 38 63 34 20 */ addi r3, r3, toneup_map@l
/* 803A9194 003A60F4 7C 03 04 2E */ lfsx f0, r3, r0
/* 803A9198 003A60F8 48 00 00 18 */ b lbl_803A91B0
lbl_803A919C:
/* 803A919C 003A60FC 7C 05 30 50 */ subf r0, r5, r6
/* 803A91A0 003A6100 3C 60 80 3F */ lis r3, lbl_803F3620@ha
/* 803A91A0 003A6100 3C 60 80 3F */ lis r3, tonedown_tab@ha
/* 803A91A4 003A6104 54 00 10 3A */ slwi r0, r0, 2
/* 803A91A8 003A6108 38 63 36 20 */ addi r3, r3, lbl_803F3620@l
/* 803A91A8 003A6108 38 63 36 20 */ addi r3, r3, tonedown_tab@l
/* 803A91AC 003A610C 7C 03 04 2E */ lfsx f0, r3, r0
lbl_803A91B0:
/* 803A91B0 003A6110 EC 01 00 32 */ fmuls f0, f1, f0

View File

@ -208,9 +208,9 @@ lbl_803A9460:
/* 803A9464 003A63C4 28 04 00 00 */ cmplwi r4, 0
/* 803A9468 003A63C8 41 82 00 58 */ beq lbl_803A94C0
/* 803A946C 003A63CC 38 A0 00 03 */ li r5, 3
/* 803A9470 003A63D0 3C 80 80 3F */ lis r4, lbl_803F3820@ha
/* 803A9470 003A63D0 3C 80 80 3F */ lis r4, dspAttenuationTab@ha
/* 803A9474 003A63D4 98 A3 00 01 */ stb r5, 1(r3)
/* 803A9478 003A63D8 38 A4 38 20 */ addi r5, r4, lbl_803F3820@l
/* 803A9478 003A63D8 38 A4 38 20 */ addi r5, r4, dspAttenuationTab@l
/* 803A947C 003A63DC 38 80 00 00 */ li r4, 0
/* 803A9480 003A63E0 A0 C3 00 1C */ lhz r6, 0x1c(r3)
/* 803A9484 003A63E4 54 C6 80 1E */ slwi r6, r6, 0x10
@ -289,8 +289,8 @@ lbl_803A956C:
/* 803A957C 003A64DC 28 00 00 01 */ cmplwi r0, 1
/* 803A9580 003A64E0 40 82 00 24 */ bne lbl_803A95A4
/* 803A9584 003A64E4 80 1F 00 08 */ lwz r0, 8(r31)
/* 803A9588 003A64E8 3C 60 80 3F */ lis r3, lbl_803F39A4@ha
/* 803A958C 003A64EC 38 63 39 A4 */ addi r3, r3, lbl_803F39A4@l
/* 803A9588 003A64E8 3C 60 80 3F */ lis r3, dspScale2IndexTab@ha
/* 803A958C 003A64EC 38 63 39 A4 */ addi r3, r3, dspScale2IndexTab@l
/* 803A9590 003A64F0 7C 00 AE 70 */ srawi r0, r0, 0x15
/* 803A9594 003A64F4 7C 03 00 AE */ lbzx r0, r3, r0
/* 803A9598 003A64F8 20 00 00 C1 */ subfic r0, r0, 0xc1
@ -389,8 +389,8 @@ lbl_803A96D0:
/* 803A96E0 003A6640 28 00 00 01 */ cmplwi r0, 1
/* 803A96E4 003A6644 40 82 00 24 */ bne lbl_803A9708
/* 803A96E8 003A6648 80 1F 00 08 */ lwz r0, 8(r31)
/* 803A96EC 003A664C 3C 60 80 3F */ lis r3, lbl_803F39A4@ha
/* 803A96F0 003A6650 38 63 39 A4 */ addi r3, r3, lbl_803F39A4@l
/* 803A96EC 003A664C 3C 60 80 3F */ lis r3, dspScale2IndexTab@ha
/* 803A96F0 003A6650 38 63 39 A4 */ addi r3, r3, dspScale2IndexTab@l
/* 803A96F4 003A6654 7C 00 AE 70 */ srawi r0, r0, 0x15
/* 803A96F8 003A6658 7C 03 00 AE */ lbzx r0, r3, r0
/* 803A96FC 003A665C 20 00 00 C1 */ subfic r0, r0, 0xc1
@ -510,9 +510,9 @@ lbl_803A9860:
/* 803A9890 003A67F0 48 00 00 48 */ b lbl_803A98D8
lbl_803A9894:
/* 803A9894 003A67F4 81 03 00 0C */ lwz r8, 0xc(r3)
/* 803A9898 003A67F8 3C C0 80 3F */ lis r6, lbl_803F3820@ha
/* 803A9898 003A67F8 3C C0 80 3F */ lis r6, dspAttenuationTab@ha
/* 803A989C 003A67FC 80 E3 00 10 */ lwz r7, 0x10(r3)
/* 803A98A0 003A6800 38 C6 38 20 */ addi r6, r6, lbl_803F3820@l
/* 803A98A0 003A6800 38 C6 38 20 */ addi r6, r6, dspAttenuationTab@l
/* 803A98A4 003A6804 7C E8 3A 14 */ add r7, r8, r7
/* 803A98A8 003A6808 90 E3 00 0C */ stw r7, 0xc(r3)
/* 803A98AC 003A680C 80 E3 00 0C */ lwz r7, 0xc(r3)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,17 @@
#ifndef MUSYX_DSP_IMPORT_H
#define MUSYX_DSP_IMPORT_H
#include "types.h"
#ifdef __cplusplus
extern "C" {
#endif
extern u16 dspAttenuationTab[194];
extern u8 dspScale2IndexTab[1024];
extern float dspDLSVolTab[129];
#ifdef __cplusplus
}
#endif
#endif

View File

@ -168,6 +168,7 @@ MUSYX_FILES :=\
$(BUILD_DIR)/asm/musyx/synth_ac.o\
$(BUILD_DIR)/asm/musyx/synth_adsr.o\
$(BUILD_DIR)/asm/musyx/synth_vsamples.o\
$(BUILD_DIR)/src/musyx/synth_dbtab.o\
$(BUILD_DIR)/asm/musyx/s_data.o\
$(BUILD_DIR)/asm/musyx/hw_dspctrl.o\
$(BUILD_DIR)/asm/musyx/hw_volconv.o\

View File

@ -1,4 +1,4 @@
#include "src/musyx/dsp_import.h"
#include "musyx/dsp_import.h"
#ifdef __cplusplus
extern "C" {

112
src/musyx/synth_dbtab.c Normal file
View File

@ -0,0 +1,112 @@
#include "musyx/synth_dbtab.h"
#ifdef __cplusplus
extern "C" {
#endif
u16 dspAttenuationTab[194] = {
0x7FFF, 0x78D6, 0x7213, 0x6BB1, 0x65AB, 0x5FFB, 0x5A9D, 0x558B, 0x50C2, 0x4C3E, 0x47FA, 0x43F3, 0x4026, 0x3C8F, 0x392C, 0x35F9,
0x32F4, 0x301B, 0x2D6A, 0x2ADF, 0x2879, 0x2636, 0x2412, 0x220E, 0x2026, 0x1E5A, 0x1CA7, 0x1B0D, 0x1989, 0x181C, 0x16C2, 0x157C,
0x1449, 0x1326, 0x1214, 0x1111, 0x101D, 0x0F36, 0x0E5C, 0x0D8E, 0x0CCC, 0x0C15, 0x0B68, 0x0AC5, 0x0A2A, 0x0999, 0x090F, 0x088D,
0x0813, 0x079F, 0x0732, 0x06CB, 0x066A, 0x060E, 0x05B7, 0x0565, 0x0518, 0x04CF, 0x048A, 0x0449, 0x040C, 0x03D2, 0x039B, 0x0367,
0x0337, 0x0309, 0x02DD, 0x02B4, 0x028D, 0x0269, 0x0246, 0x0226, 0x0207, 0x01EA, 0x01CE, 0x01B4, 0x019C, 0x0185, 0x016F, 0x015B,
0x0147, 0x0135, 0x0124, 0x0113, 0x0104, 0x00F5, 0x00E7, 0x00DA, 0x00CE, 0x00C3, 0x00B8, 0x00AD, 0x00A4, 0x009B, 0x0092, 0x008A,
0x0082, 0x007B, 0x0074, 0x006D, 0x0067, 0x0061, 0x005C, 0x0057, 0x0052, 0x004D, 0x0049, 0x0045, 0x0041, 0x003D, 0x003A, 0x0037,
0x0033, 0x0031, 0x002E, 0x002B, 0x0029, 0x0026, 0x0024, 0x0022, 0x0020, 0x001E, 0x001D, 0x001B, 0x001A, 0x0018, 0x0017, 0x0015,
0x0014, 0x0013, 0x0012, 0x0011, 0x0010, 0x000F, 0x000E, 0x000D, 0x000D, 0x000C, 0x000B, 0x000A, 0x000A, 0x0009, 0x0009, 0x0008,
0x0008, 0x0007, 0x0007, 0x0006, 0x0006, 0x0006, 0x0005, 0x0005, 0x0005, 0x0004, 0x0004, 0x0004, 0x0004, 0x0003, 0x0003, 0x0003,
0x0003, 0x0003, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000,
};
u8 dspScale2IndexTab[1024] = {
0xC1, 0x78, 0x6C, 0x65, 0x60, 0x5C, 0x59, 0x57, 0x54, 0x52, 0x50, 0x4F, 0x4D, 0x4C, 0x4B, 0x49,
0x48, 0x47, 0x46, 0x45, 0x44, 0x44, 0x43, 0x42, 0x41, 0x40, 0x40, 0x3F, 0x3F, 0x3E, 0x3D, 0x3D,
0x3C, 0x3C, 0x3B, 0x3B, 0x3A, 0x3A, 0x39, 0x39, 0x38, 0x38, 0x37, 0x37, 0x37, 0x36, 0x36, 0x36,
0x35, 0x35, 0x34, 0x34, 0x34, 0x33, 0x33, 0x33, 0x32, 0x32, 0x32, 0x32, 0x31, 0x31, 0x31, 0x30,
0x30, 0x30, 0x30, 0x2F, 0x2F, 0x2F, 0x2F, 0x2E, 0x2E, 0x2E, 0x2E, 0x2D, 0x2D, 0x2D, 0x2D, 0x2C,
0x2C, 0x2C, 0x2C, 0x2C, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x29, 0x29,
0x29, 0x29, 0x29, 0x29, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x24, 0x24,
0x24, 0x24, 0x24, 0x24, 0x24, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x22, 0x22, 0x22,
0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
0x1F, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1D, 0x1D, 0x1D, 0x1D,
0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
0x1C, 0x1C, 0x1C, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A,
0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x19, 0x19, 0x19, 0x19,
0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x14, 0x14, 0x14, 0x14, 0x14,
0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x13,
0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
0x13, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
0x10, 0x10, 0x10, 0x10, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0E, 0x0E, 0x0E,
0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
0x0D, 0x0D, 0x0D, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C,
0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
0x09, 0x09, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
float dspDLSVolTab[129] = {
0.000000, 0.000062, 0.000248, 0.000558, 0.000992, 0.001550, 0.002232, 0.003038,
0.003968, 0.005022, 0.006200, 0.007502, 0.008928, 0.010478, 0.012152, 0.013950,
0.015872, 0.017918, 0.020088, 0.022382, 0.024800, 0.027342, 0.030008, 0.032798,
0.035712, 0.038750, 0.041912, 0.045198, 0.048608, 0.052142, 0.055800, 0.059582,
0.063488, 0.067518, 0.071672, 0.075950, 0.080352, 0.084878, 0.089528, 0.094302,
0.099200, 0.104222, 0.109368, 0.114638, 0.120032, 0.125550, 0.131192, 0.136958,
0.142848, 0.148862, 0.155000, 0.161262, 0.167648, 0.174158, 0.180792, 0.187550,
0.194432, 0.201438, 0.208568, 0.215822, 0.223200, 0.230702, 0.238328, 0.246078,
0.253953, 0.261951, 0.270073, 0.278319, 0.286689, 0.295183, 0.303801, 0.312543,
0.321409, 0.330399, 0.339513, 0.348751, 0.358113, 0.367599, 0.377209, 0.386943,
0.396801, 0.406783, 0.416889, 0.427119, 0.437473, 0.447951, 0.458553, 0.469279,
0.480129, 0.491103, 0.502201, 0.513423, 0.524769, 0.536239, 0.547833, 0.559551,
0.571393, 0.583359, 0.595449, 0.607663, 0.620001, 0.632463, 0.645049, 0.657759,
0.670593, 0.683551, 0.696633, 0.709839, 0.723169, 0.736623, 0.750202, 0.763904,
0.777730, 0.791680, 0.805754, 0.819952, 0.834274, 0.848720, 0.863290, 0.877984,
0.892802, 0.907744, 0.922810, 0.938000, 0.953314, 0.968752, 0.984314, 1.000000,
1.000000,
};
#ifdef __cplusplus
}
#endif