diff --git a/____osAiDeviceBusy_8c.html b/____osAiDeviceBusy_8c.html index 50b8e016b7..ed0d14a0a6 100644 --- a/____osAiDeviceBusy_8c.html +++ b/____osAiDeviceBusy_8c.html @@ -120,7 +120,7 @@

Here is the caller graph for this function:
-
+
diff --git a/____osAiDeviceBusy_8c_aa9e8840bd3019cfee79abcb10f96ae55_icgraph.map b/____osAiDeviceBusy_8c_aa9e8840bd3019cfee79abcb10f96ae55_icgraph.map index 228be2f42d..fa3185bab8 100644 --- a/____osAiDeviceBusy_8c_aa9e8840bd3019cfee79abcb10f96ae55_icgraph.map +++ b/____osAiDeviceBusy_8c_aa9e8840bd3019cfee79abcb10f96ae55_icgraph.map @@ -1,4 +1,9 @@ - - + + + + + + + diff --git a/____osAiDeviceBusy_8c_aa9e8840bd3019cfee79abcb10f96ae55_icgraph.md5 b/____osAiDeviceBusy_8c_aa9e8840bd3019cfee79abcb10f96ae55_icgraph.md5 index e12bb7d5ad..1f463e448c 100644 --- a/____osAiDeviceBusy_8c_aa9e8840bd3019cfee79abcb10f96ae55_icgraph.md5 +++ b/____osAiDeviceBusy_8c_aa9e8840bd3019cfee79abcb10f96ae55_icgraph.md5 @@ -1 +1 @@ -de7f720c59014a64e8d9006ba986b27d \ No newline at end of file +997473c00ce6cd337c8d941b7a7b9f61 \ No newline at end of file diff --git a/____osAiDeviceBusy_8c_aa9e8840bd3019cfee79abcb10f96ae55_icgraph.svg b/____osAiDeviceBusy_8c_aa9e8840bd3019cfee79abcb10f96ae55_icgraph.svg index 93acfd3403..945e3018fd 100644 --- a/____osAiDeviceBusy_8c_aa9e8840bd3019cfee79abcb10f96ae55_icgraph.svg +++ b/____osAiDeviceBusy_8c_aa9e8840bd3019cfee79abcb10f96ae55_icgraph.svg @@ -4,17 +4,63 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + __osAiDeviceBusy - + Node1 - -__osAiDeviceBusy + +__osAiDeviceBusy @@ -22,16 +68,133 @@ Node2 - -osAiSetNextBuffer + +osAiSetNextBuffer Node1->Node2 - - + + + + +Node3 + + +create_next_audio_frame_task + + + + + +Node2->Node3 + + + + + +Node4 + + +thread4_audio + + + + + +Node3->Node4 + + + + + +Node5 + + +thread3_video + + + + + +Node4->Node5 + + + + +Node6 + + +thread1_idle + + + + + +Node5->Node6 + + + + + +Node7 + + +main_func + + + + + +Node6->Node7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/____osAiDeviceBusy_8c_aa9e8840bd3019cfee79abcb10f96ae55_icgraph_org.svg b/____osAiDeviceBusy_8c_aa9e8840bd3019cfee79abcb10f96ae55_icgraph_org.svg new file mode 100644 index 0000000000..cdcbca332d --- /dev/null +++ b/____osAiDeviceBusy_8c_aa9e8840bd3019cfee79abcb10f96ae55_icgraph_org.svg @@ -0,0 +1,112 @@ + + + + + + +__osAiDeviceBusy + + + +Node1 + + +__osAiDeviceBusy + + + + + +Node2 + + +osAiSetNextBuffer + + + + + +Node1->Node2 + + + + + +Node3 + + +create_next_audio_frame_task + + + + + +Node2->Node3 + + + + + +Node4 + + +thread4_audio + + + + + +Node3->Node4 + + + + + +Node5 + + +thread3_video + + + + + +Node4->Node5 + + + + + +Node6 + + +thread1_idle + + + + + +Node5->Node6 + + + + + +Node7 + + +main_func + + + + + +Node6->Node7 + + + + + diff --git a/abi_8h__dep__incl.map b/abi_8h__dep__incl.map index 9345e9cdac..7eeec1b01e 100644 --- a/abi_8h__dep__incl.map +++ b/abi_8h__dep__incl.map @@ -1,52 +1,52 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/abi_8h__dep__incl.md5 b/abi_8h__dep__incl.md5 index e9cbf856e2..8e132f5787 100644 --- a/abi_8h__dep__incl.md5 +++ b/abi_8h__dep__incl.md5 @@ -1 +1 @@ -d1ad3257d7083c5ff31e2a2764e97582 \ No newline at end of file +3351fe1d8068ae4395cadb5a8a9540c5 \ No newline at end of file diff --git a/abi_8h__dep__incl.svg b/abi_8h__dep__incl.svg index 6e5354fb66..1ccfad2155 100644 --- a/abi_8h__dep__incl.svg +++ b/abi_8h__dep__incl.svg @@ -46,7 +46,7 @@ if (edges && edges.length) { @@ -54,13 +54,13 @@ var sectionId = 'dynsection-0'; include/PR/abi.h - + Node1 - -include/PR/abi.h + +include/PR/abi.h @@ -68,975 +68,981 @@ var sectionId = 'dynsection-0'; Node2 - -src/audio/synthesis.c + +src/audio/synthesis.c Node1->Node2 - - + + Node3 - -src/audio/synthesis.h + +src/audio/synthesis.h Node1->Node3 - - + + - - -Node6 - - -include/PR/libaudio.h + + +Node7 + + +include/PR/libaudio.h - - -Node1->Node6 - - + + +Node1->Node7 + + Node239 - -include/PR/mbi.h + +include/PR/mbi.h - + Node1->Node239 - - + + - + Node3->Node2 - - + + Node4 - -src/audio/heap.c + +src/audio/heap.c Node3->Node4 - - + + Node5 - -src/audio/load.c + +src/audio/load.c Node3->Node5 - - + + - - -Node7 - - -include/ultra64.h + + +Node6 + + +src/audio/port_eu.c - - -Node6->Node7 - - - - - -Node7->Node2 - - - - - -Node7->Node4 - - - - - -Node7->Node5 - - + + +Node3->Node6 + + Node8 - - -src/audio/effects.c + + +include/ultra64.h Node7->Node8 - - + + + + + +Node8->Node2 + + + + + +Node8->Node4 + + + + + +Node8->Node5 + + + + + +Node8->Node6 + + Node9 - - -src/audio/external.c + + +src/audio/effects.c - + -Node7->Node9 - - +Node8->Node9 + + Node10 - - -src/audio/internal.h + + +src/audio/external.c - - -Node7->Node10 - - + + +Node8->Node10 + + - + -Node14 - - -src/audio/playback.c +Node11 + + +src/audio/internal.h - - -Node7->Node14 - - + + +Node8->Node11 + + Node15 - - -src/audio/seqplayer.c + + +src/audio/playback.c - - -Node7->Node15 - - + + +Node8->Node15 + + - + -Node19 - - -src/audio/port_eu.c +Node16 + + +src/audio/seqplayer.c - - -Node7->Node19 - - + + +Node8->Node16 + + Node23 - -src/camera.c + +src/camera.c - - -Node7->Node23 - - + + +Node8->Node23 + + Node24 - -src/code_800029B0.c + +src/code_800029B0.c - - -Node7->Node24 - - + + +Node8->Node24 + + Node25 - -src/code_800029B0.h + +src/code_800029B0.h - - -Node7->Node25 - - + + +Node8->Node25 + + Node26 - -src/code_80005FD0.c + +src/code_80005FD0.c - - -Node7->Node26 - - + + +Node8->Node26 + + Node27 - -src/code_8001F980.c + +src/code_8001F980.c - - -Node7->Node27 - - + + +Node8->Node27 + + Node28 - -src/code_80057C60.c + +src/code_80057C60.c - - -Node7->Node28 - - + + +Node8->Node28 + + Node29 - -src/code_8006E9C0.c + +src/code_8006E9C0.c - - -Node7->Node29 - - + + +Node8->Node29 + + Node30 - -src/code_80071F00.c + +src/code_80071F00.c - - -Node7->Node30 - - + + +Node8->Node30 + + Node31 - -src/code_8008C1D0.c + +src/code_8008C1D0.c - - -Node7->Node31 - - + + +Node8->Node31 + + Node33 - -src/code_80091750.c + +src/code_80091750.c - - -Node7->Node33 - - + + +Node8->Node33 + + Node34 - -src/debug/all_variables.h + +src/debug/all_variables.h - - -Node7->Node34 - - + + +Node8->Node34 + + Node35 - -src/debug/debug.inc.c + +src/debug/debug.inc.c - - -Node7->Node35 - - + + +Node8->Node35 + + Node36 - -src/debug/debug.c + +src/debug/debug.c - - -Node7->Node36 - - + + +Node8->Node36 + + Node37 - -src/ending/ceremony -_and_credits.c + +src/ending/ceremony +_and_credits.c - - -Node7->Node37 - - + + +Node8->Node37 + + Node38 - -src/ending/code_80280000.c + +src/ending/code_80280000.c - - -Node7->Node38 - - + + +Node8->Node38 + + Node39 - -src/ending/code_80281780.c + +src/ending/code_80281780.c - - -Node7->Node39 - - + + +Node8->Node39 + + Node53 - -src/code_80004740.c + +src/code_80004740.c - - -Node7->Node53 - - + + +Node8->Node53 + + Node54 - -src/code_8003DC40.c + +src/code_8003DC40.c - - -Node7->Node54 - - + + +Node8->Node54 + + Node55 - -src/code_80086E70.c + +src/code_80086E70.c - - -Node7->Node55 - - + + +Node8->Node55 + + Node56 - -src/code_80091440.h + +src/code_80091440.h - - -Node7->Node56 - - + + +Node8->Node56 + + Node57 - -src/code_800AF9B0.c + +src/code_800AF9B0.c - - -Node7->Node57 - - + + +Node8->Node57 + + Node58 - -src/code_800B45E0.c + +src/code_800B45E0.c - - -Node7->Node58 - - + + +Node8->Node58 + + Node59 - -src/crash_screen.c + +src/crash_screen.c - - -Node7->Node59 - - + + +Node8->Node59 + + Node60 - -src/crash_screen.h + +src/crash_screen.h - - -Node7->Node60 - - + + +Node8->Node60 + + Node61 - -src/debug/crash_screen -_enhancement.c + +src/debug/crash_screen +_enhancement.c - - -Node7->Node61 - - + + +Node8->Node61 + + Node62 - -src/data/data_800E45C0.c + +src/data/data_800E45C0.c - - -Node7->Node62 - - + + +Node8->Node62 + + Node63 - -src/data/data_800E8700.c + +src/data/data_800E8700.c - - -Node7->Node63 - - + + +Node8->Node63 + + Node64 - -src/data/data_800E8700.h + +src/data/data_800E8700.h - - -Node7->Node64 - - + + +Node8->Node64 + + Node65 - -src/data/framebuffers.c + +src/data/framebuffers.c - - -Node7->Node65 - - + + +Node8->Node65 + + Node66 - -src/data/gfx_output -_buffer.c + +src/data/gfx_output +_buffer.c - - -Node7->Node66 - - + + +Node8->Node66 + + Node67 - -src/debug/crash_screen -_enhancement.h + +src/debug/crash_screen +_enhancement.h - - -Node7->Node67 - - + + +Node8->Node67 + + Node68 - -src/ending/camera_junk.c + +src/ending/camera_junk.c - - -Node7->Node68 - - + + +Node8->Node68 + + Node69 - -src/ending/code_80281C40.c + +src/ending/code_80281C40.c - - -Node7->Node69 - - + + +Node8->Node69 + + Node70 - -src/ending/podium_ceremony -_actors.c + +src/ending/podium_ceremony +_actors.c - - -Node7->Node70 - - + + +Node8->Node70 + + Node71 - -src/gbiMacro.c + +src/gbiMacro.c - - -Node7->Node71 - - - - - -Node10->Node2 - - + + +Node8->Node71 + + - + -Node10->Node3 - - +Node11->Node2 + + - - -Node10->Node5 - - - - - -Node10->Node8 - - + + +Node11->Node3 + + - + -Node10->Node14 - - +Node11->Node5 + + + + + +Node11->Node9 + + - + -Node10->Node15 - - +Node11->Node15 + + - - -Node25->Node9 - - + + +Node11->Node16 + + - + +Node25->Node10 + + + + + Node25->Node23 - - + + - + Node25->Node24 - - + + - + Node25->Node26 - - + + - + Node25->Node27 - - + + - + Node25->Node28 - - + + - + Node25->Node29 - - + + - + Node25->Node30 - - + + - + Node25->Node31 - - + + - + Node25->Node33 - - + + - + Node25->Node34 - - + + - + Node25->Node37 - - + + - + Node25->Node38 - - + + - + Node25->Node39 - - + + - + Node34->Node35 - - + + - + Node35->Node36 - - + + - + Node56->Node30 - - + + - + Node56->Node34 - - + + - + Node60->Node59 - - + + - + Node60->Node61 - - + + - + Node64->Node28 - - + + - + Node64->Node63 - - + + - + Node67->Node61 - - + + - - -Node239->Node7 - - + + +Node239->Node8 + + Node240 - -include/PR/gu.h + +include/PR/gu.h - + Node239->Node240 - - + + - - -Node240->Node7 - - + + +Node240->Node8 + + - + Node240->Node38 - - + + - + Node240->Node69 - - + + - + Node240->Node70 - - + + - + Node240->Node71 - - + + diff --git a/abi_8h__dep__incl_org.svg b/abi_8h__dep__incl_org.svg index f716f284f7..f53fd2ebdd 100644 --- a/abi_8h__dep__incl_org.svg +++ b/abi_8h__dep__incl_org.svg @@ -4,17 +4,17 @@ - + include/PR/abi.h - + Node1 - -include/PR/abi.h + +include/PR/abi.h @@ -22,975 +22,981 @@ Node2 - -src/audio/synthesis.c + +src/audio/synthesis.c Node1->Node2 - - + + Node3 - -src/audio/synthesis.h + +src/audio/synthesis.h Node1->Node3 - - + + - - -Node6 - - -include/PR/libaudio.h + + +Node7 + + +include/PR/libaudio.h - - -Node1->Node6 - - + + +Node1->Node7 + + Node239 - -include/PR/mbi.h + +include/PR/mbi.h - + Node1->Node239 - - + + - + Node3->Node2 - - + + Node4 - -src/audio/heap.c + +src/audio/heap.c Node3->Node4 - - + + Node5 - -src/audio/load.c + +src/audio/load.c Node3->Node5 - - + + - - -Node7 - - -include/ultra64.h + + +Node6 + + +src/audio/port_eu.c - - -Node6->Node7 - - - - - -Node7->Node2 - - - - - -Node7->Node4 - - - - - -Node7->Node5 - - + + +Node3->Node6 + + Node8 - - -src/audio/effects.c + + +include/ultra64.h Node7->Node8 - - + + + + + +Node8->Node2 + + + + + +Node8->Node4 + + + + + +Node8->Node5 + + + + + +Node8->Node6 + + Node9 - - -src/audio/external.c + + +src/audio/effects.c - + -Node7->Node9 - - +Node8->Node9 + + Node10 - - -src/audio/internal.h + + +src/audio/external.c - - -Node7->Node10 - - + + +Node8->Node10 + + - + -Node14 - - -src/audio/playback.c +Node11 + + +src/audio/internal.h - - -Node7->Node14 - - + + +Node8->Node11 + + Node15 - - -src/audio/seqplayer.c + + +src/audio/playback.c - - -Node7->Node15 - - + + +Node8->Node15 + + - + -Node19 - - -src/audio/port_eu.c +Node16 + + +src/audio/seqplayer.c - - -Node7->Node19 - - + + +Node8->Node16 + + Node23 - -src/camera.c + +src/camera.c - - -Node7->Node23 - - + + +Node8->Node23 + + Node24 - -src/code_800029B0.c + +src/code_800029B0.c - - -Node7->Node24 - - + + +Node8->Node24 + + Node25 - -src/code_800029B0.h + +src/code_800029B0.h - - -Node7->Node25 - - + + +Node8->Node25 + + Node26 - -src/code_80005FD0.c + +src/code_80005FD0.c - - -Node7->Node26 - - + + +Node8->Node26 + + Node27 - -src/code_8001F980.c + +src/code_8001F980.c - - -Node7->Node27 - - + + +Node8->Node27 + + Node28 - -src/code_80057C60.c + +src/code_80057C60.c - - -Node7->Node28 - - + + +Node8->Node28 + + Node29 - -src/code_8006E9C0.c + +src/code_8006E9C0.c - - -Node7->Node29 - - + + +Node8->Node29 + + Node30 - -src/code_80071F00.c + +src/code_80071F00.c - - -Node7->Node30 - - + + +Node8->Node30 + + Node31 - -src/code_8008C1D0.c + +src/code_8008C1D0.c - - -Node7->Node31 - - + + +Node8->Node31 + + Node33 - -src/code_80091750.c + +src/code_80091750.c - - -Node7->Node33 - - + + +Node8->Node33 + + Node34 - -src/debug/all_variables.h + +src/debug/all_variables.h - - -Node7->Node34 - - + + +Node8->Node34 + + Node35 - -src/debug/debug.inc.c + +src/debug/debug.inc.c - - -Node7->Node35 - - + + +Node8->Node35 + + Node36 - -src/debug/debug.c + +src/debug/debug.c - - -Node7->Node36 - - + + +Node8->Node36 + + Node37 - -src/ending/ceremony -_and_credits.c + +src/ending/ceremony +_and_credits.c - - -Node7->Node37 - - + + +Node8->Node37 + + Node38 - -src/ending/code_80280000.c + +src/ending/code_80280000.c - - -Node7->Node38 - - + + +Node8->Node38 + + Node39 - -src/ending/code_80281780.c + +src/ending/code_80281780.c - - -Node7->Node39 - - + + +Node8->Node39 + + Node53 - -src/code_80004740.c + +src/code_80004740.c - - -Node7->Node53 - - + + +Node8->Node53 + + Node54 - -src/code_8003DC40.c + +src/code_8003DC40.c - - -Node7->Node54 - - + + +Node8->Node54 + + Node55 - -src/code_80086E70.c + +src/code_80086E70.c - - -Node7->Node55 - - + + +Node8->Node55 + + Node56 - -src/code_80091440.h + +src/code_80091440.h - - -Node7->Node56 - - + + +Node8->Node56 + + Node57 - -src/code_800AF9B0.c + +src/code_800AF9B0.c - - -Node7->Node57 - - + + +Node8->Node57 + + Node58 - -src/code_800B45E0.c + +src/code_800B45E0.c - - -Node7->Node58 - - + + +Node8->Node58 + + Node59 - -src/crash_screen.c + +src/crash_screen.c - - -Node7->Node59 - - + + +Node8->Node59 + + Node60 - -src/crash_screen.h + +src/crash_screen.h - - -Node7->Node60 - - + + +Node8->Node60 + + Node61 - -src/debug/crash_screen -_enhancement.c + +src/debug/crash_screen +_enhancement.c - - -Node7->Node61 - - + + +Node8->Node61 + + Node62 - -src/data/data_800E45C0.c + +src/data/data_800E45C0.c - - -Node7->Node62 - - + + +Node8->Node62 + + Node63 - -src/data/data_800E8700.c + +src/data/data_800E8700.c - - -Node7->Node63 - - + + +Node8->Node63 + + Node64 - -src/data/data_800E8700.h + +src/data/data_800E8700.h - - -Node7->Node64 - - + + +Node8->Node64 + + Node65 - -src/data/framebuffers.c + +src/data/framebuffers.c - - -Node7->Node65 - - + + +Node8->Node65 + + Node66 - -src/data/gfx_output -_buffer.c + +src/data/gfx_output +_buffer.c - - -Node7->Node66 - - + + +Node8->Node66 + + Node67 - -src/debug/crash_screen -_enhancement.h + +src/debug/crash_screen +_enhancement.h - - -Node7->Node67 - - + + +Node8->Node67 + + Node68 - -src/ending/camera_junk.c + +src/ending/camera_junk.c - - -Node7->Node68 - - + + +Node8->Node68 + + Node69 - -src/ending/code_80281C40.c + +src/ending/code_80281C40.c - - -Node7->Node69 - - + + +Node8->Node69 + + Node70 - -src/ending/podium_ceremony -_actors.c + +src/ending/podium_ceremony +_actors.c - - -Node7->Node70 - - + + +Node8->Node70 + + Node71 - -src/gbiMacro.c + +src/gbiMacro.c - - -Node7->Node71 - - - - - -Node10->Node2 - - + + +Node8->Node71 + + - + -Node10->Node3 - - +Node11->Node2 + + - - -Node10->Node5 - - - - - -Node10->Node8 - - + + +Node11->Node3 + + - + -Node10->Node14 - - +Node11->Node5 + + + + + +Node11->Node9 + + - + -Node10->Node15 - - +Node11->Node15 + + - - -Node25->Node9 - - + + +Node11->Node16 + + - + +Node25->Node10 + + + + + Node25->Node23 - - + + - + Node25->Node24 - - + + - + Node25->Node26 - - + + - + Node25->Node27 - - + + - + Node25->Node28 - - + + - + Node25->Node29 - - + + - + Node25->Node30 - - + + - + Node25->Node31 - - + + - + Node25->Node33 - - + + - + Node25->Node34 - - + + - + Node25->Node37 - - + + - + Node25->Node38 - - + + - + Node25->Node39 - - + + - + Node34->Node35 - - + + - + Node35->Node36 - - + + - + Node56->Node30 - - + + - + Node56->Node34 - - + + - + Node60->Node59 - - + + - + Node60->Node61 - - + + - + Node64->Node28 - - + + - + Node64->Node63 - - + + - + Node67->Node61 - - + + - - -Node239->Node7 - - + + +Node239->Node8 + + Node240 - -include/PR/gu.h + +include/PR/gu.h - + Node239->Node240 - - + + - - -Node240->Node7 - - + + +Node240->Node8 + + - + Node240->Node38 - - + + - + Node240->Node69 - - + + - + Node240->Node70 - - + + - + Node240->Node71 - - + + diff --git a/abi_8h_source.html b/abi_8h_source.html index 1b97009beb..6403eab1db 100644 --- a/abi_8h_source.html +++ b/abi_8h_source.html @@ -143,919 +143,922 @@
56 
57 #define A_ADDMIXER 4
58 #define A_RESAMPLE_ZOH 6
-
59 #define A_DMEMMOVE2 16
-
60 #define A_DOWNSAMPLE_HALF 17
-
61 #define A_ENVSETUP1 18
-
62 #define A_ENVMIXER 19
-
63 #define A_LOADBUFF 20
-
64 #define A_SAVEBUFF 21
-
65 #define A_ENVSETUP2 22
-
66 #define A_S8DEC 23
-
67 #define A_HILOGAIN 24
-
68 #define A_UNK_25 25
-
69 #define A_DUPLICATE 26
-
70 #define A_FILTER 27
-
71 
-
72 #endif
-
73 
-
74 #define ACMD_SIZE 32
-
75 /*
-
76  * Audio flags
-
77  */
-
78 
-
79 #define A_INIT 0x01
-
80 #define A_CONTINUE 0x00
-
81 #define A_LOOP 0x02
-
82 #define A_OUT 0x02
-
83 #define A_LEFT 0x02
-
84 #define A_RIGHT 0x00
-
85 #define A_VOL 0x04
-
86 #define A_RATE 0x00
-
87 #define A_AUX 0x08
-
88 #define A_NOAUX 0x00
-
89 #define A_MAIN 0x00
-
90 #define A_MIX 0x10
-
91 
-
92 /*
-
93  * BEGIN C-specific section: (typedef's)
-
94  */
-
95 #if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
-
96 
-
97 /*
-
98  * Data Structures.
-
99  */
-
100 
-
101 typedef struct {
-
102  unsigned int cmd:8;
-
103  unsigned int flags:8;
-
104  unsigned int gain:16;
-
105  unsigned int addr;
-
106 } Aadpcm;
-
107 
-
108 typedef struct {
-
109  unsigned int cmd:8;
-
110  unsigned int flags:8;
-
111  unsigned int gain:16;
-
112  unsigned int addr;
-
113 } Apolef;
-
114 
-
115 typedef struct {
-
116  unsigned int cmd:8;
-
117  unsigned int flags:8;
-
118  unsigned int pad1:16;
-
119  unsigned int addr;
-
120 } Aenvelope;
-
121 
-
122 typedef struct {
-
123  unsigned int cmd:8;
-
124  unsigned int pad1:8;
-
125  unsigned int dmem:16;
-
126  unsigned int pad2:16;
-
127  unsigned int count:16;
-
128 } Aclearbuff;
-
129 
-
130 typedef struct {
-
131  unsigned int cmd:8;
-
132  unsigned int pad1:8;
-
133  unsigned int pad2:16;
-
134  unsigned int inL:16;
-
135  unsigned int inR:16;
-
136 } Ainterleave;
-
137 
-
138 typedef struct {
-
139  unsigned int cmd:8;
-
140  unsigned int pad1:24;
-
141  unsigned int addr;
-
142 } Aloadbuff;
-
143 
-
144 typedef struct {
-
145  unsigned int cmd:8;
-
146  unsigned int flags:8;
-
147  unsigned int pad1:16;
-
148  unsigned int addr;
-
149 } Aenvmixer;
-
150 
-
151 typedef struct {
-
152  unsigned int cmd:8;
-
153  unsigned int flags:8;
-
154  unsigned int gain:16;
-
155  unsigned int dmemi:16;
-
156  unsigned int dmemo:16;
-
157 } Amixer;
-
158 
-
159 typedef struct {
-
160  unsigned int cmd:8;
-
161  unsigned int flags:8;
-
162  unsigned int dmem2:16;
-
163  unsigned int addr;
-
164 } Apan;
-
165 
-
166 typedef struct {
-
167  unsigned int cmd:8;
-
168  unsigned int flags:8;
-
169  unsigned int pitch:16;
-
170  unsigned int addr;
-
171 } Aresample;
-
172 
-
173 typedef struct {
-
174  unsigned int cmd:8;
-
175  unsigned int flags:8;
-
176  unsigned int pad1:16;
-
177  unsigned int addr;
-
178 } Areverb;
-
179 
-
180 typedef struct {
-
181  unsigned int cmd:8;
-
182  unsigned int pad1:24;
-
183  unsigned int addr;
-
184 } Asavebuff;
-
185 
-
186 typedef struct {
-
187  unsigned int cmd:8;
-
188  unsigned int pad1:24;
-
189  unsigned int pad2:2;
-
190  unsigned int number:4;
-
191  unsigned int base:24;
-
192 } Asegment;
-
193 
-
194 typedef struct {
-
195  unsigned int cmd:8;
-
196  unsigned int flags:8;
-
197  unsigned int dmemin:16;
-
198  unsigned int dmemout:16;
-
199  unsigned int count:16;
-
200 } Asetbuff;
-
201 
-
202 typedef struct {
-
203  unsigned int cmd:8;
-
204  unsigned int flags:8;
-
205  unsigned int vol:16;
-
206  unsigned int voltgt:16;
-
207  unsigned int volrate:16;
-
208 } Asetvol;
-
209 
-
210 typedef struct {
-
211  unsigned int cmd:8;
-
212  unsigned int pad1:8;
-
213  unsigned int dmemin:16;
-
214  unsigned int dmemout:16;
-
215  unsigned int count:16;
-
216 } Admemmove;
-
217 
-
218 typedef struct {
-
219  unsigned int cmd:8;
-
220  unsigned int pad1:8;
-
221  unsigned int count:16;
-
222  unsigned int addr;
-
223 } Aloadadpcm;
-
224 
-
225 typedef struct {
-
226  unsigned int cmd:8;
-
227  unsigned int pad1:8;
-
228  unsigned int pad2:16;
-
229  unsigned int addr;
-
230 } Asetloop;
-
231 
-
232 /*
-
233  * Generic Acmd Packet
-
234  */
-
235 
-
236 typedef struct {
-
237  uintptr_t w0;
-
238  uintptr_t w1;
-
239 } Awords;
-
240 
-
241 typedef union {
-
242  Awords words;
-
243 #if IS_BIG_ENDIAN && !IS_64_BIT
-
244  Aadpcm adpcm;
-
245  Apolef polef;
-
246  Aclearbuff clearbuff;
-
247  Aenvelope envelope;
-
248  Ainterleave interleave;
-
249  Aloadbuff loadbuff;
-
250  Aenvmixer envmixer;
-
251  Aresample resample;
-
252  Areverb reverb;
-
253  Asavebuff savebuff;
-
254  Asegment segment;
-
255  Asetbuff setbuff;
-
256  Asetvol setvol;
-
257  Admemmove dmemmove;
-
258  Aloadadpcm loadadpcm;
-
259  Amixer mixer;
-
260  Asetloop setloop;
-
261 #endif
-
262  long long int force_union_align; /* dummy, force alignment */
-
263 } Acmd;
-
264 
-
265 /*
-
266  * ADPCM State
-
267  */
-
268 typedef short ADPCM_STATE[16];
-
269 
-
270 /*
-
271  * Pole filter state
-
272  */
-
273 typedef short POLEF_STATE[4];
-
274 
-
275 /*
-
276  * Resampler state
-
277  */
-
278 typedef short RESAMPLE_STATE[16];
-
279 
-
280 /*
-
281  * Resampler constants
-
282  */
-
283 #define UNITY_PITCH 0x8000
-
284 #define MAX_RATIO 1.99996 /* within .03 cents of +1 octave */
-
285 
-
286 /*
-
287  * Enveloper/Mixer state
-
288  */
-
289 typedef short ENVMIX_STATE[40];
-
290 
-
291 /*
-
292  * Macros to assemble the audio command list
-
293  */
-
294 
-
295 /*
-
296  * Info about parameters:
-
297  *
-
298  * A "count" in the following macros is always measured in bytes.
-
299  *
-
300  * All volumes/gains are in Q1.15 signed fixed point numbers:
-
301  * 0x8000 is the minimum volume (-100%), negating the audio curve.
-
302  * 0x0000 is silent.
-
303  * 0x7fff is maximum volume (99.997%).
-
304  *
-
305  * All DRAM addresses refer to segmented addresses. A segment table shall
-
306  * first be set up by calling aSegment for each segment. When a DRAM
-
307  * address is later used as parameter, the 8 high bits will be an index
-
308  * to the segment table and the lower 24 bits are added to the base address
-
309  * stored in the segment table for this entry. The result is the physical address.
-
310  * With the newer rsp audio code, this segment table is not used. The address is
-
311  * used directly instead.
-
312  *
-
313  * Transfers to/from DRAM are executed using DMA and hence follow these restrictions:
-
314  * All DRAM addresses should be aligned by 8 bytes, or they will be
-
315  * rounded down to the nearest multiple of 8 bytes.
-
316  * All DRAM lengths should be aligned by 8 bytes, or they will be
-
317  * rounded up to the nearest multiple of 8 bytes.
-
318  */
-
319 
-
320 /*
-
321  * Decompresses ADPCM data.
-
322  * Possible flags: A_INIT and A_LOOP.
-
323  *
-
324  * First set up internal data in DMEM:
-
325  * aLoadADPCM(cmd++, nEntries * 16, physicalAddressOfBook)
-
326  * aSetLoop(cmd++, physicalAddressOfLoopState) (if A_LOOP is set)
-
327  *
-
328  * Then before this command, call:
-
329  * aSetBuffer(cmd++, 0, in, out, count)
-
330  *
-
331  * Note: count will be rounded up to the nearest multiple of 32 bytes.
-
332  *
-
333  * ADPCM decompression works on a block of 16 (uncompressed) samples.
-
334  * The previous 2 samples and 9 bytes of input are decompressed to
-
335  * 16 new samples using the code book previously loaded.
-
336  *
-
337  * Before the algorithm starts, the previous 16 samples are loaded according to flag:
-
338  * A_INIT: all zeros
-
339  * A_LOOP: the address set by aSetLoop
-
340  * no flags: the DRAM address in the s parameter
-
341  * These 16 samples are immediately copied to the destination address.
-
342  *
-
343  * The result of "count" bytes will be written after these 16 initial samples.
-
344  * The last 16 samples written to the destination will also be written to
-
345  * the state address in DRAM.
-
346  */
-
347 #define aADPCMdec(pkt, f, s) \
-
348 { \
-
349  Acmd *_a = (Acmd *)pkt; \
-
350  \
-
351  _a->words.w0 = _SHIFTL(A_ADPCM, 24, 8) | _SHIFTL(f, 16, 8); \
-
352  _a->words.w1 = (uintptr_t)(s); \
-
353 }
-
354 
-
355 /*
-
356  * Not used in SM64.
-
357  */
-
358 #define aPoleFilter(pkt, f, g, s) \
-
359 { \
-
360  Acmd *_a = (Acmd *)pkt; \
-
361  \
-
362  _a->words.w0 = (_SHIFTL(A_POLEF, 24, 8) | _SHIFTL(f, 16, 8) | \
-
363  _SHIFTL(g, 0, 16)); \
-
364  _a->words.w1 = (uintptr_t)(s); \
-
365 }
-
366 
-
367 /*
-
368  * Clears DMEM data, where d is address and c is count, by writing zeros.
-
369  *
-
370  * Note: c is rounded up to the nearest multiple of 16 bytes.
-
371  */
-
372 #define aClearBuffer(pkt, d, c) \
-
373 { \
-
374  Acmd *_a = (Acmd *)pkt; \
-
375  \
-
376  _a->words.w0 = _SHIFTL(A_CLEARBUFF, 24, 8) | _SHIFTL(d, 0, 24); \
-
377  _a->words.w1 = (uintptr_t)(c); \
-
378 }
-
379 
-
380 /*
-
381  * Mixes an envelope with mono sound into 2 or 4 channels.
-
382  * Possible flags: A_INIT, A_AUX (indicates that 4 channels should be used).
-
383  *
-
384  * Before this command, call:
-
385  * aSetBuffer(cmd++, 0, inBuf, dryLeft, count)
-
386  * aSetBuffer(cmd++, A_AUX, dryRight, wetLeft, wetRight)
-
387  *
-
388  * The first time (A_INIT is set), volume also needs to be set:
-
389  * aSetVolume(cmd++, A_VOL | A_LEFT, initialVolumeLeft, 0, 0)
-
390  * aSetVolume(cmd++, A_VOL | A_RIGHT, initialVolumeRight, 0, 0)
-
391  * aSetVolume32(cmd++, A_RATE | A_LEFT, targetVolumeLeft, rampLeft)
-
392  * aSetVolume32(cmd++, A_RATE | A_RIGHT, targetVolumeRight, rampRight)
-
393  * aSetVolume(cmd++, A_AUX, dryVolume, 0, wetVolume)
-
394  *
-
395  * This command will now mix samples in inBuf into the destination buffers (dry and wet),
-
396  * but with the volume increased (or decreased) from initial volumes to target volumes,
-
397  * with the specified ramp rate. Once the target volume is reached, the volume stays
-
398  * at that level. Before the samples are finally mixed (added) into the destination
-
399  * buffers (dry and wet), the volume is changed according to dryVolume and wetVolume.
-
400  *
-
401  * Note: count will be rounded up to the nearest multiple of 16 bytes.
-
402  * Note: the wet channels are used for reverb.
-
403  *
-
404  */
-
405 #define aEnvMixer(pkt, f, s) \
-
406 { \
-
407  Acmd *_a = (Acmd *)pkt; \
-
408  \
-
409  _a->words.w0 = _SHIFTL(A_ENVMIXER, 24, 8) | _SHIFTL(f, 16, 8); \
-
410  _a->words.w1 = (uintptr_t)(s); \
-
411 }
-
412 
-
413 /*
-
414  * Interleaves two mono channels into stereo.
-
415  *
-
416  * First call:
-
417  * aSetBuffer(cmd++, 0, 0, output, count)
-
418  *
-
419  * The count refers to the size of each input. Hence 2 * count bytes will be written out.
-
420  * A left sample will be placed before the right sample.
-
421  *
-
422  * Note: count will be rounded up to the nearest multiple of 16 bytes.
-
423  */
-
424 #define aInterleave(pkt, l, r) \
-
425 { \
-
426  Acmd *_a = (Acmd *)pkt; \
-
427  \
-
428  _a->words.w0 = _SHIFTL(A_INTERLEAVE, 24, 8); \
-
429  _a->words.w1 = _SHIFTL(l, 16, 16) | _SHIFTL(r, 0, 16); \
-
430 }
-
431 
-
432 /*
-
433  * Loads a buffer from DRAM to DMEM.
-
434  *
-
435  * First call:
-
436  * aSetBuffer(cmd++, 0, in, 0, count)
-
437  *
-
438  * The in parameter to aSetBuffer is the destination in DMEM and the
-
439  * s parameter to this command is the source in DRAM.
-
440  */
-
441 #define aLoadBuffer(pkt, s) \
-
442 { \
-
443  Acmd *_a = (Acmd *)pkt; \
-
444  \
-
445  _a->words.w0 = _SHIFTL(A_LOADBUFF, 24, 8); \
-
446  _a->words.w1 = (uintptr_t)(s); \
-
447 }
-
448 
-
449 /*
-
450  * Mixes audio.
-
451  * Possible flags: no flags used, although parameter present.
-
452  *
-
453  * First call:
-
454  * aSetBuffer(cmd++, 0, 0, 0, count)
-
455  *
-
456  * Input and output addresses are taken from the i and o parameters.
-
457  * The volume with which the input is changed is taken from the g parameter.
-
458  * After the volume of the input samples have been changed, the result
-
459  * is added to the output.
-
460  *
-
461  * Note: count will be rounded up to the nearest multiple of 32 bytes.
-
462  */
-
463 #define aMix(pkt, f, g, i, o) \
-
464 { \
-
465  Acmd *_a = (Acmd *)pkt; \
-
466  \
-
467  _a->words.w0 = (_SHIFTL(A_MIXER, 24, 8) | _SHIFTL(f, 16, 8) | \
-
468  _SHIFTL(g, 0, 16)); \
-
469  _a->words.w1 = _SHIFTL(i,16, 16) | _SHIFTL(o, 0, 16); \
-
470 }
-
471 
-
472 // Not present in the audio microcode.
-
473 #define aPan(pkt, f, d, s) \
-
474 { \
-
475  Acmd *_a = (Acmd *)pkt; \
-
476  \
-
477  _a->words.w0 = (_SHIFTL(A_PAN, 24, 8) | _SHIFTL(f, 16, 8) | \
-
478  _SHIFTL(d, 0, 16)); \
-
479  _a->words.w1 = (uintptr_t)(s); \
-
480 }
-
481 
-
482 /*
-
483  * Resamples audio.
-
484  * Possible flags: A_INIT, A_OUT? (not used in SM64).
-
485  *
-
486  * First call:
-
487  * aSetBuffer(cmd++, 0, in, out, count)
-
488  *
-
489  * This command resamples the audio using the given frequency ratio (pitch)
-
490  * using a filter that uses a window of 4 source samples. This can be used
-
491  * either for just resampling audio to be able to be played back at a different
-
492  * sample rate, or to change the pitch if the result is played back at
-
493  * the same sample rate as the input.
-
494  *
-
495  * The frequency ratio is given in UQ1.15 fixed point format.
-
496  * For no change in frequency, use pitch 0x8000.
-
497  * For 1 octave up or downsampling to (roughly) half number of samples, use pitch 0xffff.
-
498  * For 1 octave down or upsampling to double as many samples, use pitch 0x4000.
-
499  *
-
500  * Note: count represents the number of output sample bytes and is rounded up to
-
501  * the nearest multiple of 16 bytes.
-
502  *
-
503  * The state consists of the four following source samples when the algorithm stopped as
-
504  * well as a fractional position, and is initialized to all zeros if A_INIT is given.
-
505  * Otherwise it is loaded from DRAM at address s.
-
506  *
-
507  * The algorithm starts by writing the four source samples from the state (or zero)
-
508  * to just before the input address given. It then creates one output sample by examining
-
509  * the four next source samples and then moving the source position zero or more
-
510  * samples forward. The first output sample (when A_INIT is given) is always 0.
-
511  *
-
512  * When "count" bytes have been written, the following four source samples
-
513  * are written to the state in DRAM as well as a fractional position.
-
514  */
-
515 #define aResample(pkt, f, p, s) \
-
516 { \
-
517  Acmd *_a = (Acmd *)pkt; \
-
518  \
-
519  _a->words.w0 = (_SHIFTL(A_RESAMPLE, 24, 8) | _SHIFTL(f, 16, 8) |\
-
520  _SHIFTL(p, 0, 16)); \
-
521  _a->words.w1 = (uintptr_t)(s); \
-
522 }
-
523 
-
524 /*
-
525  * Stores a buffer in DMEM to DRAM.
-
526  *
-
527  * First call:
-
528  * aSetBuffer(cmd++, 0, 0, out, count)
-
529  *
-
530  * The out parameter to aSetBuffer is the source in DMEM and the
-
531  * s parameter to this command is the destination in DRAM.
-
532  */
-
533 #define aSaveBuffer(pkt, s) \
-
534 { \
-
535  Acmd *_a = (Acmd *)pkt; \
-
536  \
-
537  _a->words.w0 = _SHIFTL(A_SAVEBUFF, 24, 8); \
-
538  _a->words.w1 = (uintptr_t)(s); \
-
539 }
-
540 
-
541 /*
-
542  * Sets up an entry in the segment table.
-
543  *
-
544  * The s parameter is a segment index, 0 to 15.
-
545  * The b parameter is the base offset.
-
546  */
-
547 #define aSegment(pkt, s, b) \
-
548 { \
-
549  Acmd *_a = (Acmd *)pkt; \
-
550  \
-
551  _a->words.w0 = _SHIFTL(A_SEGMENT, 24, 8); \
-
552  _a->words.w1 = _SHIFTL(s, 24, 8) | _SHIFTL(b, 0, 24); \
-
553 }
-
554 
-
555 /*
-
556  * Sets internal DMEM buffer addresses used for later commands.
-
557  * See each command for how to use aSetBuffer.
-
558  */
-
559 #define aSetBuffer(pkt, f, i, o, c) \
-
560 { \
-
561  Acmd *_a = (Acmd *)pkt; \
-
562  \
-
563  _a->words.w0 = (_SHIFTL(A_SETBUFF, 24, 8) | _SHIFTL(f, 16, 8) | \
-
564  _SHIFTL(i, 0, 16)); \
-
565  _a->words.w1 = _SHIFTL(o, 16, 16) | _SHIFTL(c, 0, 16); \
-
566 }
-
567 
-
568 /*
-
569  * Sets internal volume parameters.
-
570  * See aEnvMixer for more info.
-
571  */
-
572 #define aSetVolume(pkt, f, v, t, r) \
-
573 { \
-
574  Acmd *_a = (Acmd *)pkt; \
-
575  \
-
576  _a->words.w0 = (_SHIFTL(A_SETVOL, 24, 8) | _SHIFTL(f, 16, 16) | \
-
577  _SHIFTL(v, 0, 16)); \
-
578  _a->words.w1 = _SHIFTL(t, 16, 16) | _SHIFTL(r, 0, 16); \
-
579 }
-
580 
-
581 /*
-
582  * Sets the address to ADPCM loop state.
-
583  *
-
584  * The a parameter is a DRAM address.
-
585  * See aADPCMdec for more info.
-
586  */
-
587 #define aSetLoop(pkt, a) \
-
588 { \
-
589  Acmd *_a = (Acmd *)pkt; \
-
590  _a->words.w0 = _SHIFTL(A_SETLOOP, 24, 8); \
-
591  _a->words.w1 = (uintptr_t)(a); \
-
592 }
-
593 
-
594 /*
-
595  * Copies memory in DMEM.
-
596  *
-
597  * Copies c bytes from address i to address o.
-
598  *
-
599  * Note: count is rounded up to the nearest multiple of 16 bytes.
-
600  *
-
601  * Note: This acts as memcpy where 16 bytes are moved at a time, therefore
-
602  * if input and output overlap, output address should be less than input address.
-
603  */
-
604 #define aDMEMMove(pkt, i, o, c) \
-
605 { \
-
606  Acmd *_a = (Acmd *)pkt; \
-
607  \
-
608  _a->words.w0 = _SHIFTL(A_DMEMMOVE, 24, 8) | _SHIFTL(i, 0, 24); \
-
609  _a->words.w1 = _SHIFTL(o, 16, 16) | _SHIFTL(c, 0, 16); \
-
610 }
-
611 
-
612 /*
-
613  * Loads ADPCM book from DRAM into DMEM.
-
614  *
-
615  * This command loads ADPCM table entries from DRAM to DMEM.
-
616  *
-
617  * The count parameter c should be a multiple of 16 bytes.
-
618  * The d parameter is a DRAM address.
-
619  */
-
620 #define aLoadADPCM(pkt, c, d) \
-
621 { \
-
622  Acmd *_a = (Acmd *)pkt; \
-
623  \
-
624  _a->words.w0 = _SHIFTL(A_LOADADPCM, 24, 8) | _SHIFTL(c, 0, 24); \
-
625  _a->words.w1 = (uintptr_t) (d); \
-
626 }
-
627 
-
628 // This is a version of aSetVolume which takes a single 32-bit parameter
-
629 // instead of two 16-bit ones. According to AziAudio, it is used to set
-
630 // ramping values when neither bit 4 nor bit 8 is set in the flags parameter.
-
631 // It does not appear in the official abi.h header.
-
632 /*
-
633  * Sets internal volume parameters.
-
634  * See aEnvMixer for more info.
-
635  */
-
636 #define aSetVolume32(pkt, f, v, tr) \
-
637 { \
-
638  Acmd *_a = (Acmd *)pkt; \
-
639  \
-
640  _a->words.w0 = (_SHIFTL(A_SETVOL, 24, 8) | _SHIFTL(f, 16, 16) | \
-
641  _SHIFTL(v, 0, 16)); \
-
642  _a->words.w1 = (uintptr_t)(tr); \
-
643 }
-
644 
-
645 #if defined(VERSION_SH) || defined(VERSION_US) || defined (VERSION_EU)
-
646 #undef aLoadBuffer
-
647 #undef aSaveBuffer
-
648 #undef aMix
-
649 #undef aEnvMixer
-
650 #undef aInterleave
-
651 
-
652 // New or modified operations in the new audio microcode below
-
653 
-
679 #define aS8Dec(pkt, f, s) \
-
680 { \
-
681  Acmd *_a = (Acmd *)pkt; \
-
682  \
-
683  _a->words.w0 = _SHIFTL(A_S8DEC, 24, 8) | _SHIFTL(f, 16, 8); \
-
684  _a->words.w1 = (uintptr_t)(s); \
-
685 }
-
686 
-
687 /*
-
688  * Mix two tracks by simple clamped addition.
-
689  *
-
690  * s: DMEM source track 1
-
691  * d: DMEM source track 2 and destination
-
692  * c: number of bytes to write
-
693  *
-
694  * Note: count is first rounded down to the nearest multiple of 16 bytes
-
695  * and then rounded up to the nearest multiple of 64 bytes.
-
696  */
-
697 #define aAddMixer(pkt, s, d, c) \
-
698 { \
-
699  Acmd *_a = (Acmd *)pkt; \
-
700  \
-
701  _a->words.w0 = (_SHIFTL(A_ADDMIXER, 24, 8) | \
-
702  _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(0x7fff, 0, 16)); \
-
703  _a->words.w1 = (_SHIFTL(s, 16, 16) | _SHIFTL(d, 0, 16)); \
-
704 }
-
705 
-
706 /*
-
707  * Loads a buffer from DRAM to DMEM.
-
708  *
-
709  * s: DRAM source
-
710  * d: DMEM destination
-
711  * c: number of bytes to copy (rounded down to 16 byte alignment)
-
712  */
-
713 #define aLoadBuffer(pkt, s, d, c) \
-
714 { \
-
715  Acmd *_a = (Acmd *)pkt; \
-
716  \
-
717  _a->words.w0 = _SHIFTL(A_LOADBUFF, 24, 8) | \
-
718  _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(d, 0, 16); \
-
719  _a->words.w1 = (uintptr_t)(s); \
-
720 }
-
721 
-
722 /*
-
723  * Stores a buffer from DMEM to DRAM.
-
724  *
-
725  * s: DMEM source
-
726  * d: DRAM destination
-
727  * c: number of bytes to copy (rounded down to 16 byte alignment)
-
728  */
-
729 #define aSaveBuffer(pkt, s, d, c) \
-
730 { \
-
731  Acmd *_a = (Acmd *)pkt; \
-
732  \
-
733  _a->words.w0 = _SHIFTL(A_SAVEBUFF, 24, 8) | \
-
734  _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(s, 0, 16); \
-
735  _a->words.w1 = (uintptr_t)(d); \
-
736 }
-
737 
-
738 /*
-
739  * Duplicates 128 bytes of data a number of times.
-
740  *
-
741  * 128 bytes are read from source DMEM address s.
-
742  * Then c identical copies of these bytes are written to DMEM address d.
-
743  */
-
744 #define aDuplicate(pkt, s, d, c) \
-
745 { \
-
746  Acmd *_a = (Acmd *)pkt; \
-
747  \
-
748  _a->words.w0 = (_SHIFTL(A_DUPLICATE, 24, 8) | \
-
749  _SHIFTL(c, 16, 8) | _SHIFTL(s, 0, 16)); \
-
750  _a->words.w1 = (_SHIFTL(d, 16, 16) | _SHIFTL(0x80, 0, 16)); \
-
751 }
-
752 
-
753 /*
-
754  * Copies memory in DMEM, second version.
-
755  *
-
756  * Copies t * c bytes from address i to address o.
-
757  *
-
758  * Note: count is first rounded up to the nearest multiple of 32 bytes,
-
759  * before the multiplication by t.
-
760  *
-
761  * Note: This acts as memcpy where 32 bytes are moved at a time, therefore
-
762  * if input and output overlap, output address should be less than input address.
-
763  *
-
764  * Not used in SM64.
-
765  */
-
766 #define aDMEMMove2(pkt, t, i, o, c) \
-
767 { \
-
768  Acmd *_a = (Acmd *)pkt; \
-
769  \
-
770  _a->words.w0 = _SHIFTL(A_DMEMMOVE2, 24, 8) | \
-
771  _SHIFTL(t, 16, 8) | _SHIFTL(i, 0, 16); \
-
772  _a->words.w1 = _SHIFTL(o, 16, 16) | _SHIFTL(c, 0, 16); \
-
773 }
-
774 
-
775 /*
-
776  * Fast resample.
-
777  *
-
778  * Before this command, call:
-
779  * aSetBuffer(cmd++, 0, in, out, count)
-
780  *
-
781  * This works like the other resample command but just takes the "nearest" sample,
-
782  * instead of a function of the four nearest samples.
-
783  *
-
784  * Initially the current position is calculated as (in << 16) + startFract.
-
785  * For every sample to create, the value is simply taken from the sample
-
786  * at address ((position >> 17) << 1). Then the current position is incremented
-
787  * by (pitch << 2).
-
788  *
-
789  * Note: count represents the number of output bytes to create, and is
-
790  * rounded up to the nearest multiple of 8 bytes.
-
791  */
-
792 #define aResampleZoh(pkt, pitch, startFract) \
-
793 { \
-
794  Acmd *_a = (Acmd *)pkt; \
-
795  \
-
796  _a->words.w0 = (_SHIFTL(A_RESAMPLE_ZOH, 24, 8) | \
-
797  _SHIFTL(pitch, 0, 16)); \
-
798  _a->words.w1 = _SHIFTL(startFract, 0, 16); \
-
799 }
-
800 
-
801 /*
-
802  * Fast downsampling by taking every other sample, discarding others.
-
803  *
-
804  * Note: nSamples refers to the number of output samples to create, and
-
805  * is first rounded up to the nearest multiple of 8.
-
806  */
-
807 #define aDownsampleHalf(pkt, nSamples, i, o) \
-
808 { \
-
809  Acmd *_a = (Acmd *)pkt; \
-
810  \
-
811  _a->words.w0 = (_SHIFTL(A_DOWNSAMPLE_HALF, 24, 8) | \
-
812  _SHIFTL(nSamples, 0, 16)); \
-
813  _a->words.w1 = _SHIFTL(i, 16, 16) | _SHIFTL(o, 0, 16); \
-
814 }
-
815 
-
816 /*
-
817  * Mixes audio.
-
818  *
-
819  * Input and output addresses are taken from the i and o parameters.
-
820  * The volume with which the input is changed is taken from the g parameter.
-
821  * After the volume of the input samples have been changed, the result
-
822  * is added to the output.
-
823  *
-
824  * Note: count is first rounded down to the nearest multiple of 16 bytes
-
825  * and then rounded up to the nearest multiple of 32 bytes.
-
826  */
-
827 #define aMix(pkt, g, i, o, c) \
-
828 { \
-
829  Acmd *_a = (Acmd *)pkt; \
-
830  \
-
831  _a->words.w0 = (_SHIFTL(A_MIXER, 24, 8) | \
-
832  _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(g, 0, 16)); \
-
833  _a->words.w1 = _SHIFTL(i, 16, 16) | _SHIFTL(o, 0, 16); \
-
834 }
-
835 
-
836 /*
-
837  * See aEnvMixer for more info.
-
838  */
-
839 #define aEnvSetup1(pkt, initialVolReverb, rampReverb, rampLeft, rampRight) \
-
840 { \
-
841  Acmd *_a = (Acmd *)pkt; \
-
842  \
-
843  _a->words.w0 = (_SHIFTL(A_ENVSETUP1, 24, 8) | \
-
844  _SHIFTL(initialVolReverb, 16, 8) | \
-
845  _SHIFTL(rampReverb, 0, 16)); \
-
846  _a->words.w1 = _SHIFTL(rampLeft, 16, 16) | \
-
847  _SHIFTL(rampRight, 0, 16); \
-
848 }
-
849 
-
850 /*
-
851  * See aEnvMixer for more info.
-
852  */
-
853 #define aEnvSetup2(pkt, initialVolLeft, initialVolRight) \
-
854 { \
-
855  Acmd *_a = (Acmd *)pkt; \
-
856  \
-
857  _a->words.w0 = _SHIFTL(A_ENVSETUP2, 24, 8); \
-
858  _a->words.w1 = _SHIFTL(initialVolLeft, 16, 16) | \
-
859  _SHIFTL(initialVolRight, 0, 16); \
-
860 }
-
861 
-
862 /*
-
863  * Mixes an envelope with mono sound into 4 channels.
-
864  *
-
865  * To allow for many parameters, a sequence of aEnvSetup1, aEnvSetup2,
-
866  * aEnvMixer shall always be called.
-
867  *
-
868  * The function works in blocks of 8 samples.
-
869  * However, nSamples is rounded up to the nearest multiple of 16 samples.
-
870  *
-
871  * For each sample in a block:
-
872  * 1. sampleLeft = in * volLeft * (negLeft ? -1 : 1)
-
873  * 2. sampleRight = in * volRight * (negRight ? -1 : 1)
-
874  * 3. dryLeft += sampleLeft
-
875  * 4. dryRight += sampleRight
-
876  * 5. if swapReverb: swap sampleLeft and sampleRight
-
877  * 6. wetLeft += sampleLeft * volReverb
-
878  * 7. wetRight += sampleRight * volReverb
-
879  *
-
880  * After each block, all vol variables are added by their corresponding
-
881  * ramp value.
-
882  *
-
883  * Each volume variable is treated as a UQ0.16 number. Make sure
-
884  * the ramp additions don't overflow, or wrapping will occur.
-
885  * The initialVolReverb parameter is only 8 bits, but will be left
-
886  * shifted 8 bits by the rsp.
-
887  */
-
888 #define aEnvMixer(pkt, inBuf, nSamples, swapReverb, negLeft, negRight, \
-
889  dryLeft, dryRight, wetLeft, wetRight) \
-
890 { \
-
891  Acmd *_a = (Acmd *)pkt; \
-
892  \
-
893  _a->words.w0 = (_SHIFTL(A_ENVMIXER, 24, 8) | \
-
894  _SHIFTL((inBuf) >> 4, 16, 8) | \
-
895  _SHIFTL(nSamples, 8, 8)) | \
-
896  _SHIFTL(swapReverb, 2, 1) | _SHIFTL(negLeft, 1, 1) |\
-
897  _SHIFTL(negRight, 0, 1); \
-
898  _a->words.w1 = _SHIFTL((dryLeft) >> 4, 24, 8) | \
-
899  _SHIFTL((dryRight) >> 4, 16, 8) | \
-
900  _SHIFTL((wetLeft) >> 4, 8, 8) | \
-
901  _SHIFTL((wetRight) >> 4, 0, 8); \
-
902 }
-
903 
-
904 /*
-
905  * Interleaves two mono channels into stereo.
-
906  *
-
907  * The count refers to the size of each input. Hence 2 * count bytes
-
908  * will be written out.
-
909  *
-
910  * A left sample will be placed before the right sample.
-
911  * All addresses (output, left, right) are DMEM addresses.
-
912  *
-
913  * Note: count will be rounded up to the nearest multiple of 8 bytes.
-
914  * The previous version of this function rounded up to the nearest
-
915  * multiple of 16 bytes.
-
916  */
-
917 #define aInterleave(pkt, o, l, r, c) \
-
918 { \
-
919  Acmd *_a = (Acmd *)pkt; \
-
920  \
-
921  _a->words.w0 = _SHIFTL(A_INTERLEAVE, 24, 8) | \
-
922  _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(o, 0, 16); \
-
923  _a->words.w1 = _SHIFTL(l, 16, 16) | _SHIFTL(r, 0, 16); \
-
924 }
-
925 
-
926 /*
-
927  * Linear filter function.
-
928  *
-
929  * Calculates out[i] = sum all elements in the vector in[i..i-7] * filter[0..7],
-
930  * where "*" represents dot multiplication. The input/output contains s16
-
931  * samples and filter contains Q1.15 signed fixed point numbers.
-
932  * Every result sample is rounded and clamped.
-
933  *
-
934  * First initiate by calling with the flag f set to 2, countOrBuf contains
-
935  * the length in bytes that shall be processed in the next call. The addr
-
936  * parameter shall contain the DRAM address to the filter table (16 bytes).
-
937  * The count will be rounded up to the nearest multiple of 16 bytes.
-
938  *
-
939  * The aFilter function shall then be called in direct succession, with flag
-
940  * set to either 0 or 1. The countOrBuf parameter shall contain the DMEM
-
941  * address for the input/output. The addr parameter shall contain the DRAM
-
942  * address for the state, containing the last previous 8 input samples.
-
943  * The state is always written to upon exit, but is only read at entry if
-
944  * the flag is 0 (otherwise all-zero samples are used instead).
-
945  */
-
946 #define aFilter(pkt, f, countOrBuf, addr) \
-
947 { \
-
948  Acmd *_a = (Acmd *)pkt; \
-
949  \
-
950  _a->words.w0 = _SHIFTL(A_FILTER, 24, 8) | _SHIFTL((f), 16, 8) | \
-
951  _SHIFTL((countOrBuf), 0, 16); \
-
952  _a->words.w1 = (uintptr_t)(addr); \
-
953 }
-
954 
-
955 /*
-
956  * Modifies the volume of samples using a simple UQ4.4 gain multiplier.
-
957  *
-
958  * Performs the following:
-
959  *
-
960  * 1. Count c is rounded up to 32 byte alignment
-
961  * 2. g is a u8 that contains a UQ4.4 number
-
962  * 3. Modify each sample s, so that s = clamp_s16(s * g >> 4)
-
963  */
-
964 #define aHiLoGain(pkt, g, buflen, i) \
-
965 { \
-
966  Acmd *_a = (Acmd *)pkt; \
-
967  \
-
968  _a->words.w0 = _SHIFTL(A_HILOGAIN, 24, 8) | \
-
969  _SHIFTL((g), 16, 8) | _SHIFTL((buflen), 0, 16); \
-
970  _a->words.w1 = _SHIFTL((i), 16, 16); \
-
971 }
-
972 
-
973 /*
-
974  * Performs the following:
-
975  *
-
976  * 1. Count c is rounded up to 64 byte alignment
-
977  * 2. f is added to i
-
978  * 3. i and o are from now treated as s16 pointers
-
979  * 4. 32 s16 samples are loaded from i to tbl
-
980  * 5. for (u32 idx = 0; idx * sizeof(s16) < c; idx++)
-
981  * o[idx] = clamp_s16((s32)o[idx] * (s32)tbl[idx % 32]);
-
982  */
-
983 #define aUnknown25(pkt, f, c, o, i) \
-
984 { \
-
985  Acmd *_a = (Acmd *)pkt; \
-
986  \
-
987  _a->words.w0 = (_SHIFTL(A_UNK_25, 24, 8) | \
-
988  _SHIFTL((f), 16, 8) | _SHIFTL((c), 0, 16)); \
-
989  _a->words.w1 = _SHIFTL((o), 16, 16) | _SHIFTL((i), 0, 16); \
-
990 }
-
991 
-
992 #endif
-
993 
-
994 #endif /* _LANGUAGE_C */
-
995 
-
996 #endif /* !_ABI_H_ */
+
59 #define A_SEGMENT 7
+
60 #define A_DMEMMOVE2 16
+
61 #define A_DOWNSAMPLE_HALF 17
+
62 #define A_ENVSETUP1 18
+
63 #define A_ENVMIXER 19
+
64 #define A_LOADBUFF 20
+
65 #define A_SAVEBUFF 21
+
66 #define A_ENVSETUP2 22
+
67 #define A_S8DEC 23
+
68 #define A_HILOGAIN 24
+
69 #define A_UNK_25 25
+
70 #define A_DUPLICATE 26
+
71 #define A_FILTER 27
+
72 
+
73 #endif
+
74 
+
75 #define ACMD_SIZE 32
+
76 /*
+
77  * Audio flags
+
78  */
+
79 
+
80 #define A_INIT 0x01
+
81 #define A_CONTINUE 0x00
+
82 #define A_LOOP 0x02
+
83 #define A_OUT 0x02
+
84 #define A_LEFT 0x02
+
85 #define A_RIGHT 0x00
+
86 #define A_VOL 0x04
+
87 #define A_RATE 0x00
+
88 #define A_AUX 0x08
+
89 #define A_NOAUX 0x00
+
90 #define A_MAIN 0x00
+
91 #define A_MIX 0x10
+
92 
+
93 /*
+
94  * BEGIN C-specific section: (typedef's)
+
95  */
+
96 #if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
+
97 
+
98 /*
+
99  * Data Structures.
+
100  */
+
101 
+
102 typedef struct {
+
103  unsigned int cmd:8;
+
104  unsigned int flags:8;
+
105  unsigned int gain:16;
+
106  unsigned int addr;
+
107 } Aadpcm;
+
108 
+
109 typedef struct {
+
110  unsigned int cmd:8;
+
111  unsigned int flags:8;
+
112  unsigned int gain:16;
+
113  unsigned int addr;
+
114 } Apolef;
+
115 
+
116 typedef struct {
+
117  unsigned int cmd:8;
+
118  unsigned int flags:8;
+
119  unsigned int pad1:16;
+
120  unsigned int addr;
+
121 } Aenvelope;
+
122 
+
123 typedef struct {
+
124  unsigned int cmd:8;
+
125  unsigned int pad1:8;
+
126  unsigned int dmem:16;
+
127  unsigned int pad2:16;
+
128  unsigned int count:16;
+
129 } Aclearbuff;
+
130 
+
131 typedef struct {
+
132  unsigned int cmd:8;
+
133  unsigned int pad1:8;
+
134  unsigned int pad2:16;
+
135  unsigned int inL:16;
+
136  unsigned int inR:16;
+
137 } Ainterleave;
+
138 
+
139 typedef struct {
+
140  unsigned int cmd:8;
+
141  unsigned int pad1:24;
+
142  unsigned int addr;
+
143 } Aloadbuff;
+
144 
+
145 typedef struct {
+
146  unsigned int cmd:8;
+
147  unsigned int flags:8;
+
148  unsigned int pad1:16;
+
149  unsigned int addr;
+
150 } Aenvmixer;
+
151 
+
152 typedef struct {
+
153  unsigned int cmd:8;
+
154  unsigned int flags:8;
+
155  unsigned int gain:16;
+
156  unsigned int dmemi:16;
+
157  unsigned int dmemo:16;
+
158 } Amixer;
+
159 
+
160 typedef struct {
+
161  unsigned int cmd:8;
+
162  unsigned int flags:8;
+
163  unsigned int dmem2:16;
+
164  unsigned int addr;
+
165 } Apan;
+
166 
+
167 typedef struct {
+
168  unsigned int cmd:8;
+
169  unsigned int flags:8;
+
170  unsigned int pitch:16;
+
171  unsigned int addr;
+
172 } Aresample;
+
173 
+
174 typedef struct {
+
175  unsigned int cmd:8;
+
176  unsigned int flags:8;
+
177  unsigned int pad1:16;
+
178  unsigned int addr;
+
179 } Areverb;
+
180 
+
181 typedef struct {
+
182  unsigned int cmd:8;
+
183  unsigned int pad1:24;
+
184  unsigned int addr;
+
185 } Asavebuff;
+
186 
+
187 typedef struct {
+
188  unsigned int cmd:8;
+
189  unsigned int pad1:24;
+
190  unsigned int pad2:2;
+
191  unsigned int number:4;
+
192  unsigned int base:24;
+
193 } Asegment;
+
194 
+
195 typedef struct {
+
196  unsigned int cmd:8;
+
197  unsigned int flags:8;
+
198  unsigned int dmemin:16;
+
199  unsigned int dmemout:16;
+
200  unsigned int count:16;
+
201 } Asetbuff;
+
202 
+
203 typedef struct {
+
204  unsigned int cmd:8;
+
205  unsigned int flags:8;
+
206  unsigned int vol:16;
+
207  unsigned int voltgt:16;
+
208  unsigned int volrate:16;
+
209 } Asetvol;
+
210 
+
211 typedef struct {
+
212  unsigned int cmd:8;
+
213  unsigned int pad1:8;
+
214  unsigned int dmemin:16;
+
215  unsigned int dmemout:16;
+
216  unsigned int count:16;
+
217 } Admemmove;
+
218 
+
219 typedef struct {
+
220  unsigned int cmd:8;
+
221  unsigned int pad1:8;
+
222  unsigned int count:16;
+
223  unsigned int addr;
+
224 } Aloadadpcm;
+
225 
+
226 typedef struct {
+
227  unsigned int cmd:8;
+
228  unsigned int pad1:8;
+
229  unsigned int pad2:16;
+
230  unsigned int addr;
+
231 } Asetloop;
+
232 
+
233 /*
+
234  * Generic Acmd Packet
+
235  */
+
236 
+
237 typedef struct {
+
238  uintptr_t w0;
+
239  uintptr_t w1;
+
240 } Awords;
+
241 
+
242 typedef union {
+
243  Awords words;
+
244 #if IS_BIG_ENDIAN && !IS_64_BIT
+
245  Aadpcm adpcm;
+
246  Apolef polef;
+
247  Aclearbuff clearbuff;
+
248  Aenvelope envelope;
+
249  Ainterleave interleave;
+
250  Aloadbuff loadbuff;
+
251  Aenvmixer envmixer;
+
252  Aresample resample;
+
253  Areverb reverb;
+
254  Asavebuff savebuff;
+
255  Asegment segment;
+
256  Asetbuff setbuff;
+
257  Asetvol setvol;
+
258  Admemmove dmemmove;
+
259  Aloadadpcm loadadpcm;
+
260  Amixer mixer;
+
261  Asetloop setloop;
+
262 #endif
+
263  long long int force_union_align; /* dummy, force alignment */
+
264 } Acmd;
+
265 
+
266 /*
+
267  * ADPCM State
+
268  */
+
269 typedef short ADPCM_STATE[16];
+
270 
+
271 /*
+
272  * Pole filter state
+
273  */
+
274 typedef short POLEF_STATE[4];
+
275 
+
276 /*
+
277  * Resampler state
+
278  */
+
279 typedef short RESAMPLE_STATE[16];
+
280 
+
281 /*
+
282  * Resampler constants
+
283  */
+
284 #define UNITY_PITCH 0x8000
+
285 #define MAX_RATIO 1.99996 /* within .03 cents of +1 octave */
+
286 
+
287 /*
+
288  * Enveloper/Mixer state
+
289  */
+
290 typedef short ENVMIX_STATE[40];
+
291 
+
292 /*
+
293  * Macros to assemble the audio command list
+
294  */
+
295 
+
296 /*
+
297  * Info about parameters:
+
298  *
+
299  * A "count" in the following macros is always measured in bytes.
+
300  *
+
301  * All volumes/gains are in Q1.15 signed fixed point numbers:
+
302  * 0x8000 is the minimum volume (-100%), negating the audio curve.
+
303  * 0x0000 is silent.
+
304  * 0x7fff is maximum volume (99.997%).
+
305  *
+
306  * All DRAM addresses refer to segmented addresses. A segment table shall
+
307  * first be set up by calling aSegment for each segment. When a DRAM
+
308  * address is later used as parameter, the 8 high bits will be an index
+
309  * to the segment table and the lower 24 bits are added to the base address
+
310  * stored in the segment table for this entry. The result is the physical address.
+
311  * With the newer rsp audio code, this segment table is not used. The address is
+
312  * used directly instead.
+
313  *
+
314  * Transfers to/from DRAM are executed using DMA and hence follow these restrictions:
+
315  * All DRAM addresses should be aligned by 8 bytes, or they will be
+
316  * rounded down to the nearest multiple of 8 bytes.
+
317  * All DRAM lengths should be aligned by 8 bytes, or they will be
+
318  * rounded up to the nearest multiple of 8 bytes.
+
319  */
+
320 
+
321 /*
+
322  * Decompresses ADPCM data.
+
323  * Possible flags: A_INIT and A_LOOP.
+
324  *
+
325  * First set up internal data in DMEM:
+
326  * aLoadADPCM(cmd++, nEntries * 16, physicalAddressOfBook)
+
327  * aSetLoop(cmd++, physicalAddressOfLoopState) (if A_LOOP is set)
+
328  *
+
329  * Then before this command, call:
+
330  * aSetBuffer(cmd++, 0, in, out, count)
+
331  *
+
332  * Note: count will be rounded up to the nearest multiple of 32 bytes.
+
333  *
+
334  * ADPCM decompression works on a block of 16 (uncompressed) samples.
+
335  * The previous 2 samples and 9 bytes of input are decompressed to
+
336  * 16 new samples using the code book previously loaded.
+
337  *
+
338  * Before the algorithm starts, the previous 16 samples are loaded according to flag:
+
339  * A_INIT: all zeros
+
340  * A_LOOP: the address set by aSetLoop
+
341  * no flags: the DRAM address in the s parameter
+
342  * These 16 samples are immediately copied to the destination address.
+
343  *
+
344  * The result of "count" bytes will be written after these 16 initial samples.
+
345  * The last 16 samples written to the destination will also be written to
+
346  * the state address in DRAM.
+
347  */
+
348 #define aADPCMdec(pkt, f, s) \
+
349 { \
+
350  Acmd *_a = (Acmd *)pkt; \
+
351  \
+
352  _a->words.w0 = _SHIFTL(A_ADPCM, 24, 8) | _SHIFTL(f, 16, 8); \
+
353  _a->words.w1 = (uintptr_t)(s); \
+
354 }
+
355 
+
356 /*
+
357  * Not used in SM64.
+
358  */
+
359 #define aPoleFilter(pkt, f, g, s) \
+
360 { \
+
361  Acmd *_a = (Acmd *)pkt; \
+
362  \
+
363  _a->words.w0 = (_SHIFTL(A_POLEF, 24, 8) | _SHIFTL(f, 16, 8) | \
+
364  _SHIFTL(g, 0, 16)); \
+
365  _a->words.w1 = (uintptr_t)(s); \
+
366 }
+
367 
+
368 /*
+
369  * Clears DMEM data, where d is address and c is count, by writing zeros.
+
370  *
+
371  * Note: c is rounded up to the nearest multiple of 16 bytes.
+
372  */
+
373 #define aClearBuffer(pkt, d, c) \
+
374 { \
+
375  Acmd *_a = (Acmd *)pkt; \
+
376  \
+
377  _a->words.w0 = _SHIFTL(A_CLEARBUFF, 24, 8) | _SHIFTL(d, 0, 24); \
+
378  _a->words.w1 = (uintptr_t)(c); \
+
379 }
+
380 
+
381 /*
+
382  * Mixes an envelope with mono sound into 2 or 4 channels.
+
383  * Possible flags: A_INIT, A_AUX (indicates that 4 channels should be used).
+
384  *
+
385  * Before this command, call:
+
386  * aSetBuffer(cmd++, 0, inBuf, dryLeft, count)
+
387  * aSetBuffer(cmd++, A_AUX, dryRight, wetLeft, wetRight)
+
388  *
+
389  * The first time (A_INIT is set), volume also needs to be set:
+
390  * aSetVolume(cmd++, A_VOL | A_LEFT, initialVolumeLeft, 0, 0)
+
391  * aSetVolume(cmd++, A_VOL | A_RIGHT, initialVolumeRight, 0, 0)
+
392  * aSetVolume32(cmd++, A_RATE | A_LEFT, targetVolumeLeft, rampLeft)
+
393  * aSetVolume32(cmd++, A_RATE | A_RIGHT, targetVolumeRight, rampRight)
+
394  * aSetVolume(cmd++, A_AUX, dryVolume, 0, wetVolume)
+
395  *
+
396  * This command will now mix samples in inBuf into the destination buffers (dry and wet),
+
397  * but with the volume increased (or decreased) from initial volumes to target volumes,
+
398  * with the specified ramp rate. Once the target volume is reached, the volume stays
+
399  * at that level. Before the samples are finally mixed (added) into the destination
+
400  * buffers (dry and wet), the volume is changed according to dryVolume and wetVolume.
+
401  *
+
402  * Note: count will be rounded up to the nearest multiple of 16 bytes.
+
403  * Note: the wet channels are used for reverb.
+
404  *
+
405  */
+
406 #define aEnvMixer(pkt, f, s) \
+
407 { \
+
408  Acmd *_a = (Acmd *)pkt; \
+
409  \
+
410  _a->words.w0 = _SHIFTL(A_ENVMIXER, 24, 8) | _SHIFTL(f, 16, 8); \
+
411  _a->words.w1 = (uintptr_t)(s); \
+
412 }
+
413 
+
414 /*
+
415  * Interleaves two mono channels into stereo.
+
416  *
+
417  * First call:
+
418  * aSetBuffer(cmd++, 0, 0, output, count)
+
419  *
+
420  * The count refers to the size of each input. Hence 2 * count bytes will be written out.
+
421  * A left sample will be placed before the right sample.
+
422  *
+
423  * Note: count will be rounded up to the nearest multiple of 16 bytes.
+
424  */
+
425 #define aInterleave(pkt, l, r) \
+
426 { \
+
427  Acmd *_a = (Acmd *)pkt; \
+
428  \
+
429  _a->words.w0 = _SHIFTL(A_INTERLEAVE, 24, 8); \
+
430  _a->words.w1 = _SHIFTL(l, 16, 16) | _SHIFTL(r, 0, 16); \
+
431 }
+
432 
+
433 /*
+
434  * Loads a buffer from DRAM to DMEM.
+
435  *
+
436  * First call:
+
437  * aSetBuffer(cmd++, 0, in, 0, count)
+
438  *
+
439  * The in parameter to aSetBuffer is the destination in DMEM and the
+
440  * s parameter to this command is the source in DRAM.
+
441  */
+
442 #define aLoadBuffer(pkt, s) \
+
443 { \
+
444  Acmd *_a = (Acmd *)pkt; \
+
445  \
+
446  _a->words.w0 = _SHIFTL(A_LOADBUFF, 24, 8); \
+
447  _a->words.w1 = (uintptr_t)(s); \
+
448 }
+
449 
+
450 /*
+
451  * Mixes audio.
+
452  * Possible flags: no flags used, although parameter present.
+
453  *
+
454  * First call:
+
455  * aSetBuffer(cmd++, 0, 0, 0, count)
+
456  *
+
457  * Input and output addresses are taken from the i and o parameters.
+
458  * The volume with which the input is changed is taken from the g parameter.
+
459  * After the volume of the input samples have been changed, the result
+
460  * is added to the output.
+
461  *
+
462  * Note: count will be rounded up to the nearest multiple of 32 bytes.
+
463  */
+
464 #define aMix(pkt, f, g, i, o) \
+
465 { \
+
466  Acmd *_a = (Acmd *)pkt; \
+
467  \
+
468  _a->words.w0 = (_SHIFTL(A_MIXER, 24, 8) | _SHIFTL(f, 16, 8) | \
+
469  _SHIFTL(g, 0, 16)); \
+
470  _a->words.w1 = _SHIFTL(i,16, 16) | _SHIFTL(o, 0, 16); \
+
471 }
+
472 
+
473 // Not present in the audio microcode.
+
474 #define aPan(pkt, f, d, s) \
+
475 { \
+
476  Acmd *_a = (Acmd *)pkt; \
+
477  \
+
478  _a->words.w0 = (_SHIFTL(A_PAN, 24, 8) | _SHIFTL(f, 16, 8) | \
+
479  _SHIFTL(d, 0, 16)); \
+
480  _a->words.w1 = (uintptr_t)(s); \
+
481 }
+
482 
+
483 /*
+
484  * Resamples audio.
+
485  * Possible flags: A_INIT, A_OUT? (not used in SM64).
+
486  *
+
487  * First call:
+
488  * aSetBuffer(cmd++, 0, in, out, count)
+
489  *
+
490  * This command resamples the audio using the given frequency ratio (pitch)
+
491  * using a filter that uses a window of 4 source samples. This can be used
+
492  * either for just resampling audio to be able to be played back at a different
+
493  * sample rate, or to change the pitch if the result is played back at
+
494  * the same sample rate as the input.
+
495  *
+
496  * The frequency ratio is given in UQ1.15 fixed point format.
+
497  * For no change in frequency, use pitch 0x8000.
+
498  * For 1 octave up or downsampling to (roughly) half number of samples, use pitch 0xffff.
+
499  * For 1 octave down or upsampling to double as many samples, use pitch 0x4000.
+
500  *
+
501  * Note: count represents the number of output sample bytes and is rounded up to
+
502  * the nearest multiple of 16 bytes.
+
503  *
+
504  * The state consists of the four following source samples when the algorithm stopped as
+
505  * well as a fractional position, and is initialized to all zeros if A_INIT is given.
+
506  * Otherwise it is loaded from DRAM at address s.
+
507  *
+
508  * The algorithm starts by writing the four source samples from the state (or zero)
+
509  * to just before the input address given. It then creates one output sample by examining
+
510  * the four next source samples and then moving the source position zero or more
+
511  * samples forward. The first output sample (when A_INIT is given) is always 0.
+
512  *
+
513  * When "count" bytes have been written, the following four source samples
+
514  * are written to the state in DRAM as well as a fractional position.
+
515  */
+
516 #define aResample(pkt, f, p, s) \
+
517 { \
+
518  Acmd *_a = (Acmd *)pkt; \
+
519  \
+
520  _a->words.w0 = (_SHIFTL(A_RESAMPLE, 24, 8) | _SHIFTL(f, 16, 8) |\
+
521  _SHIFTL(p, 0, 16)); \
+
522  _a->words.w1 = (uintptr_t)(s); \
+
523 }
+
524 
+
525 /*
+
526  * Stores a buffer in DMEM to DRAM.
+
527  *
+
528  * First call:
+
529  * aSetBuffer(cmd++, 0, 0, out, count)
+
530  *
+
531  * The out parameter to aSetBuffer is the source in DMEM and the
+
532  * s parameter to this command is the destination in DRAM.
+
533  */
+
534 #define aSaveBuffer(pkt, s) \
+
535 { \
+
536  Acmd *_a = (Acmd *)pkt; \
+
537  \
+
538  _a->words.w0 = _SHIFTL(A_SAVEBUFF, 24, 8); \
+
539  _a->words.w1 = (uintptr_t)(s); \
+
540 }
+
541 
+
542 /*
+
543  * Sets up an entry in the segment table.
+
544  *
+
545  * The s parameter is a segment index, 0 to 15.
+
546  * The b parameter is the base offset.
+
547  */
+
548 #define aSegment(pkt, s, b) \
+
549 { \
+
550  Acmd *_a = (Acmd *)pkt; \
+
551  \
+
552  _a->words.w0 = _SHIFTL(A_SEGMENT, 24, 8); \
+
553  _a->words.w1 = _SHIFTL(s, 24, 8) | _SHIFTL(b, 0, 24); \
+
554 }
+
555 
+
556 /*
+
557  * Sets internal DMEM buffer addresses used for later commands.
+
558  * See each command for how to use aSetBuffer.
+
559  */
+
560 #define aSetBuffer(pkt, f, i, o, c) \
+
561 { \
+
562  Acmd *_a = (Acmd *)pkt; \
+
563  \
+
564  _a->words.w0 = (_SHIFTL(A_SETBUFF, 24, 8) | _SHIFTL(f, 16, 8) | \
+
565  _SHIFTL(i, 0, 16)); \
+
566  _a->words.w1 = _SHIFTL(o, 16, 16) | _SHIFTL(c, 0, 16); \
+
567 }
+
568 
+
569 /*
+
570  * Sets internal volume parameters.
+
571  * See aEnvMixer for more info.
+
572  */
+
573 #define aSetVolume(pkt, f, v, t, r) \
+
574 { \
+
575  Acmd *_a = (Acmd *)pkt; \
+
576  \
+
577  _a->words.w0 = (_SHIFTL(A_SETVOL, 24, 8) | _SHIFTL(f, 16, 16) | \
+
578  _SHIFTL(v, 0, 16)); \
+
579  _a->words.w1 = _SHIFTL(t, 16, 16) | _SHIFTL(r, 0, 16); \
+
580 }
+
581 
+
582 /*
+
583  * Sets the address to ADPCM loop state.
+
584  *
+
585  * The a parameter is a DRAM address.
+
586  * See aADPCMdec for more info.
+
587  */
+
588 #define aSetLoop(pkt, a) \
+
589 { \
+
590  Acmd *_a = (Acmd *)pkt; \
+
591  _a->words.w0 = _SHIFTL(A_SETLOOP, 24, 8); \
+
592  _a->words.w1 = (uintptr_t)(a); \
+
593 }
+
594 
+
595 /*
+
596  * Copies memory in DMEM.
+
597  *
+
598  * Copies c bytes from address i to address o.
+
599  *
+
600  * Note: count is rounded up to the nearest multiple of 16 bytes.
+
601  *
+
602  * Note: This acts as memcpy where 16 bytes are moved at a time, therefore
+
603  * if input and output overlap, output address should be less than input address.
+
604  */
+
605 #define aDMEMMove(pkt, i, o, c) \
+
606 { \
+
607  Acmd *_a = (Acmd *)pkt; \
+
608  \
+
609  _a->words.w0 = _SHIFTL(A_DMEMMOVE, 24, 8) | _SHIFTL(i, 0, 24); \
+
610  _a->words.w1 = _SHIFTL(o, 16, 16) | _SHIFTL(c, 0, 16); \
+
611 }
+
612 
+
613 /*
+
614  * Loads ADPCM book from DRAM into DMEM.
+
615  *
+
616  * This command loads ADPCM table entries from DRAM to DMEM.
+
617  *
+
618  * The count parameter c should be a multiple of 16 bytes.
+
619  * The d parameter is a DRAM address.
+
620  */
+
621 #define aLoadADPCM(pkt, c, d) \
+
622 { \
+
623  Acmd *_a = (Acmd *)pkt; \
+
624  \
+
625  _a->words.w0 = _SHIFTL(A_LOADADPCM, 24, 8) | _SHIFTL(c, 0, 24); \
+
626  _a->words.w1 = (uintptr_t) (d); \
+
627 }
+
628 
+
629 // This is a version of aSetVolume which takes a single 32-bit parameter
+
630 // instead of two 16-bit ones. According to AziAudio, it is used to set
+
631 // ramping values when neither bit 4 nor bit 8 is set in the flags parameter.
+
632 // It does not appear in the official abi.h header.
+
633 /*
+
634  * Sets internal volume parameters.
+
635  * See aEnvMixer for more info.
+
636  */
+
637 #define aSetVolume32(pkt, f, v, tr) \
+
638 { \
+
639  Acmd *_a = (Acmd *)pkt; \
+
640  \
+
641  _a->words.w0 = (_SHIFTL(A_SETVOL, 24, 8) | _SHIFTL(f, 16, 16) | \
+
642  _SHIFTL(v, 0, 16)); \
+
643  _a->words.w1 = (uintptr_t)(tr); \
+
644 }
+
645 
+
646 #if defined(VERSION_SH) || defined(VERSION_US) || defined (VERSION_EU)
+
647 #undef aLoadBuffer
+
648 #undef aSaveBuffer
+
649 #undef aMix
+
650 #undef aEnvMixer
+
651 // #undef aInterleave
+
652 
+
653 // New or modified operations in the new audio microcode below
+
654 
+
680 #define aS8Dec(pkt, f, s) \
+
681 { \
+
682  Acmd *_a = (Acmd *)pkt; \
+
683  \
+
684  _a->words.w0 = _SHIFTL(A_S8DEC, 24, 8) | _SHIFTL(f, 16, 8); \
+
685  _a->words.w1 = (uintptr_t)(s); \
+
686 }
+
687 
+
688 /*
+
689  * Mix two tracks by simple clamped addition.
+
690  *
+
691  * s: DMEM source track 1
+
692  * d: DMEM source track 2 and destination
+
693  * c: number of bytes to write
+
694  *
+
695  * Note: count is first rounded down to the nearest multiple of 16 bytes
+
696  * and then rounded up to the nearest multiple of 64 bytes.
+
697  */
+
698 #define aAddMixer(pkt, s, d, c) \
+
699 { \
+
700  Acmd *_a = (Acmd *)pkt; \
+
701  \
+
702  _a->words.w0 = (_SHIFTL(A_ADDMIXER, 24, 8) | \
+
703  _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(0x7fff, 0, 16)); \
+
704  _a->words.w1 = (_SHIFTL(s, 16, 16) | _SHIFTL(d, 0, 16)); \
+
705 }
+
706 
+
707 /*
+
708  * Loads a buffer from DRAM to DMEM.
+
709  *
+
710  * s: DRAM source
+
711  * d: DMEM destination
+
712  * c: number of bytes to copy (rounded down to 16 byte alignment)
+
713  */
+
714 #define aLoadBuffer(pkt, s, d, c) \
+
715 { \
+
716  Acmd *_a = (Acmd *)pkt; \
+
717  \
+
718  _a->words.w0 = _SHIFTL(A_LOADBUFF, 24, 8) | \
+
719  _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(d, 0, 16); \
+
720  _a->words.w1 = (uintptr_t)(s); \
+
721 }
+
722 
+
723 /*
+
724  * Stores a buffer from DMEM to DRAM.
+
725  *
+
726  * s: DMEM source
+
727  * d: DRAM destination
+
728  * c: number of bytes to copy (rounded down to 16 byte alignment)
+
729  */
+
730 #define aSaveBuffer(pkt, s, d, c) \
+
731 { \
+
732  Acmd *_a = (Acmd *)pkt; \
+
733  \
+
734  _a->words.w0 = _SHIFTL(A_SAVEBUFF, 24, 8) | \
+
735  _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(s, 0, 16); \
+
736  _a->words.w1 = (uintptr_t)(d); \
+
737 }
+
738 
+
739 /*
+
740  * Duplicates 128 bytes of data a number of times.
+
741  *
+
742  * 128 bytes are read from source DMEM address s.
+
743  * Then c identical copies of these bytes are written to DMEM address d.
+
744  */
+
745 #define aDuplicate(pkt, s, d, c) \
+
746 { \
+
747  Acmd *_a = (Acmd *)pkt; \
+
748  \
+
749  _a->words.w0 = (_SHIFTL(A_DUPLICATE, 24, 8) | \
+
750  _SHIFTL(c, 16, 8) | _SHIFTL(s, 0, 16)); \
+
751  _a->words.w1 = (_SHIFTL(d, 16, 16) | _SHIFTL(0x80, 0, 16)); \
+
752 }
+
753 
+
754 /*
+
755  * Copies memory in DMEM, second version.
+
756  *
+
757  * Copies t * c bytes from address i to address o.
+
758  *
+
759  * Note: count is first rounded up to the nearest multiple of 32 bytes,
+
760  * before the multiplication by t.
+
761  *
+
762  * Note: This acts as memcpy where 32 bytes are moved at a time, therefore
+
763  * if input and output overlap, output address should be less than input address.
+
764  *
+
765  * Not used in SM64.
+
766  */
+
767 #define aDMEMMove2(pkt, t, i, o, c) \
+
768 { \
+
769  Acmd *_a = (Acmd *)pkt; \
+
770  \
+
771  _a->words.w0 = _SHIFTL(A_DMEMMOVE2, 24, 8) | \
+
772  _SHIFTL(t, 16, 8) | _SHIFTL(i, 0, 16); \
+
773  _a->words.w1 = _SHIFTL(o, 16, 16) | _SHIFTL(c, 0, 16); \
+
774 }
+
775 
+
776 /*
+
777  * Fast resample.
+
778  *
+
779  * Before this command, call:
+
780  * aSetBuffer(cmd++, 0, in, out, count)
+
781  *
+
782  * This works like the other resample command but just takes the "nearest" sample,
+
783  * instead of a function of the four nearest samples.
+
784  *
+
785  * Initially the current position is calculated as (in << 16) + startFract.
+
786  * For every sample to create, the value is simply taken from the sample
+
787  * at address ((position >> 17) << 1). Then the current position is incremented
+
788  * by (pitch << 2).
+
789  *
+
790  * Note: count represents the number of output bytes to create, and is
+
791  * rounded up to the nearest multiple of 8 bytes.
+
792  */
+
793 #define aResampleZoh(pkt, pitch, startFract) \
+
794 { \
+
795  Acmd *_a = (Acmd *)pkt; \
+
796  \
+
797  _a->words.w0 = (_SHIFTL(A_RESAMPLE_ZOH, 24, 8) | \
+
798  _SHIFTL(pitch, 0, 16)); \
+
799  _a->words.w1 = _SHIFTL(startFract, 0, 16); \
+
800 }
+
801 
+
802 /*
+
803  * Fast downsampling by taking every other sample, discarding others.
+
804  *
+
805  * Note: nSamples refers to the number of output samples to create, and
+
806  * is first rounded up to the nearest multiple of 8.
+
807  */
+
808 #define aDownsampleHalf(pkt, nSamples, i, o) \
+
809 { \
+
810  Acmd *_a = (Acmd *)pkt; \
+
811  \
+
812  _a->words.w0 = (_SHIFTL(A_DOWNSAMPLE_HALF, 24, 8) | \
+
813  _SHIFTL(nSamples, 0, 16)); \
+
814  _a->words.w1 = _SHIFTL(i, 16, 16) | _SHIFTL(o, 0, 16); \
+
815 }
+
816 
+
817 /*
+
818  * Mixes audio.
+
819  *
+
820  * Input and output addresses are taken from the i and o parameters.
+
821  * The volume with which the input is changed is taken from the g parameter.
+
822  * After the volume of the input samples have been changed, the result
+
823  * is added to the output.
+
824  *
+
825  * Note: count is first rounded down to the nearest multiple of 16 bytes
+
826  * and then rounded up to the nearest multiple of 32 bytes.
+
827  */
+
828 #define aMix(pkt, g, i, o, c) \
+
829 { \
+
830  Acmd *_a = (Acmd *)pkt; \
+
831  \
+
832  _a->words.w0 = (_SHIFTL(A_MIXER, 24, 8) | \
+
833  _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(g, 0, 16)); \
+
834  _a->words.w1 = _SHIFTL(i, 16, 16) | _SHIFTL(o, 0, 16); \
+
835 }
+
836 
+
837 /*
+
838  * See aEnvMixer for more info.
+
839  */
+
840 #define aEnvSetup1(pkt, initialVolReverb, rampReverb, rampLeft, rampRight) \
+
841 { \
+
842  Acmd *_a = (Acmd *)pkt; \
+
843  \
+
844  _a->words.w0 = (_SHIFTL(A_ENVSETUP1, 24, 8) | \
+
845  _SHIFTL(initialVolReverb, 16, 8) | \
+
846  _SHIFTL(rampReverb, 0, 16)); \
+
847  _a->words.w1 = _SHIFTL(rampLeft, 16, 16) | \
+
848  _SHIFTL(rampRight, 0, 16); \
+
849 }
+
850 
+
851 /*
+
852  * See aEnvMixer for more info.
+
853  */
+
854 #define aEnvSetup2(pkt, initialVolLeft, initialVolRight) \
+
855 { \
+
856  Acmd *_a = (Acmd *)pkt; \
+
857  \
+
858  _a->words.w0 = _SHIFTL(A_ENVSETUP2, 24, 8); \
+
859  _a->words.w1 = _SHIFTL(initialVolLeft, 16, 16) | \
+
860  _SHIFTL(initialVolRight, 0, 16); \
+
861 }
+
862 
+
863 /*
+
864  * Mixes an envelope with mono sound into 4 channels.
+
865  *
+
866  * To allow for many parameters, a sequence of aEnvSetup1, aEnvSetup2,
+
867  * aEnvMixer shall always be called.
+
868  *
+
869  * The function works in blocks of 8 samples.
+
870  * However, nSamples is rounded up to the nearest multiple of 16 samples.
+
871  *
+
872  * For each sample in a block:
+
873  * 1. sampleLeft = in * volLeft * (negLeft ? -1 : 1)
+
874  * 2. sampleRight = in * volRight * (negRight ? -1 : 1)
+
875  * 3. dryLeft += sampleLeft
+
876  * 4. dryRight += sampleRight
+
877  * 5. if swapReverb: swap sampleLeft and sampleRight
+
878  * 6. wetLeft += sampleLeft * volReverb
+
879  * 7. wetRight += sampleRight * volReverb
+
880  *
+
881  * After each block, all vol variables are added by their corresponding
+
882  * ramp value.
+
883  *
+
884  * Each volume variable is treated as a UQ0.16 number. Make sure
+
885  * the ramp additions don't overflow, or wrapping will occur.
+
886  * The initialVolReverb parameter is only 8 bits, but will be left
+
887  * shifted 8 bits by the rsp.
+
888  */
+
889 #define aEnvMixer(pkt, inBuf, nSamples, swapReverb, negLeft, negRight, \
+
890  dryLeft, dryRight, wetLeft, wetRight) \
+
891 { \
+
892  Acmd *_a = (Acmd *)pkt; \
+
893  \
+
894  _a->words.w0 = (_SHIFTL(A_ENVMIXER, 24, 8) | \
+
895  _SHIFTL((inBuf) >> 4, 16, 8) | \
+
896  _SHIFTL(nSamples, 8, 8)) | \
+
897  _SHIFTL(swapReverb, 2, 1) | _SHIFTL(negLeft, 1, 1) |\
+
898  _SHIFTL(negRight, 0, 1); \
+
899  _a->words.w1 = _SHIFTL((dryLeft) >> 4, 24, 8) | \
+
900  _SHIFTL((dryRight) >> 4, 16, 8) | \
+
901  _SHIFTL((wetLeft) >> 4, 8, 8) | \
+
902  _SHIFTL((wetRight) >> 4, 0, 8); \
+
903 }
+
904 
+
905 /*
+
906  * Interleaves two mono channels into stereo.
+
907  *
+
908  * The count refers to the size of each input. Hence 2 * count bytes
+
909  * will be written out.
+
910  *
+
911  * A left sample will be placed before the right sample.
+
912  * All addresses (output, left, right) are DMEM addresses.
+
913  *
+
914  * Note: count will be rounded up to the nearest multiple of 8 bytes.
+
915  * The previous version of this function rounded up to the nearest
+
916  * multiple of 16 bytes.
+
917  */
+
918 /*
+
919 #define aInterleave(pkt, o, l, r, c) \
+
920 { \
+
921  Acmd *_a = (Acmd *)pkt; \
+
922  \
+
923  _a->words.w0 = _SHIFTL(A_INTERLEAVE, 24, 8) | \
+
924  _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(o, 0, 16); \
+
925  _a->words.w1 = _SHIFTL(l, 16, 16) | _SHIFTL(r, 0, 16); \
+
926 }
+
927 */
+
928 
+
929 /*
+
930  * Linear filter function.
+
931  *
+
932  * Calculates out[i] = sum all elements in the vector in[i..i-7] * filter[0..7],
+
933  * where "*" represents dot multiplication. The input/output contains s16
+
934  * samples and filter contains Q1.15 signed fixed point numbers.
+
935  * Every result sample is rounded and clamped.
+
936  *
+
937  * First initiate by calling with the flag f set to 2, countOrBuf contains
+
938  * the length in bytes that shall be processed in the next call. The addr
+
939  * parameter shall contain the DRAM address to the filter table (16 bytes).
+
940  * The count will be rounded up to the nearest multiple of 16 bytes.
+
941  *
+
942  * The aFilter function shall then be called in direct succession, with flag
+
943  * set to either 0 or 1. The countOrBuf parameter shall contain the DMEM
+
944  * address for the input/output. The addr parameter shall contain the DRAM
+
945  * address for the state, containing the last previous 8 input samples.
+
946  * The state is always written to upon exit, but is only read at entry if
+
947  * the flag is 0 (otherwise all-zero samples are used instead).
+
948  */
+
949 #define aFilter(pkt, f, countOrBuf, addr) \
+
950 { \
+
951  Acmd *_a = (Acmd *)pkt; \
+
952  \
+
953  _a->words.w0 = _SHIFTL(A_FILTER, 24, 8) | _SHIFTL((f), 16, 8) | \
+
954  _SHIFTL((countOrBuf), 0, 16); \
+
955  _a->words.w1 = (uintptr_t)(addr); \
+
956 }
+
957 
+
958 /*
+
959  * Modifies the volume of samples using a simple UQ4.4 gain multiplier.
+
960  *
+
961  * Performs the following:
+
962  *
+
963  * 1. Count c is rounded up to 32 byte alignment
+
964  * 2. g is a u8 that contains a UQ4.4 number
+
965  * 3. Modify each sample s, so that s = clamp_s16(s * g >> 4)
+
966  */
+
967 #define aHiLoGain(pkt, g, buflen, i) \
+
968 { \
+
969  Acmd *_a = (Acmd *)pkt; \
+
970  \
+
971  _a->words.w0 = _SHIFTL(A_HILOGAIN, 24, 8) | \
+
972  _SHIFTL((g), 16, 8) | _SHIFTL((buflen), 0, 16); \
+
973  _a->words.w1 = _SHIFTL((i), 16, 16); \
+
974 }
+
975 
+
976 /*
+
977  * Performs the following:
+
978  *
+
979  * 1. Count c is rounded up to 64 byte alignment
+
980  * 2. f is added to i
+
981  * 3. i and o are from now treated as s16 pointers
+
982  * 4. 32 s16 samples are loaded from i to tbl
+
983  * 5. for (u32 idx = 0; idx * sizeof(s16) < c; idx++)
+
984  * o[idx] = clamp_s16((s32)o[idx] * (s32)tbl[idx % 32]);
+
985  */
+
986 #define aUnknown25(pkt, f, c, o, i) \
+
987 { \
+
988  Acmd *_a = (Acmd *)pkt; \
+
989  \
+
990  _a->words.w0 = (_SHIFTL(A_UNK_25, 24, 8) | \
+
991  _SHIFTL((f), 16, 8) | _SHIFTL((c), 0, 16)); \
+
992  _a->words.w1 = _SHIFTL((o), 16, 16) | _SHIFTL((i), 0, 16); \
+
993 }
+
994 
+
995 #endif
+
996 
+
997 #endif /* _LANGUAGE_C */
+
998 
+
999 #endif /* !_ABI_H_ */
diff --git a/code__80071F00_8h_a4283cbf896ea7ca31653640f6dd237af_icgraph.map b/code__80071F00_8h_a4283cbf896ea7ca31653640f6dd237af_icgraph.map index 8cba656cb0..c45211354d 100644 --- a/code__80071F00_8h_a4283cbf896ea7ca31653640f6dd237af_icgraph.map +++ b/code__80071F00_8h_a4283cbf896ea7ca31653640f6dd237af_icgraph.map @@ -1,52 +1,52 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - diff --git a/code__80071F00_8h_a4283cbf896ea7ca31653640f6dd237af_icgraph.md5 b/code__80071F00_8h_a4283cbf896ea7ca31653640f6dd237af_icgraph.md5 index 0478b8a106..010f4883a4 100644 --- a/code__80071F00_8h_a4283cbf896ea7ca31653640f6dd237af_icgraph.md5 +++ b/code__80071F00_8h_a4283cbf896ea7ca31653640f6dd237af_icgraph.md5 @@ -1 +1 @@ -59dbc5918f6367e8b668d1efaac67042 \ No newline at end of file +12058a4609a9138113773431b8b1d8b0 \ No newline at end of file diff --git a/code__80071F00_8h_a4283cbf896ea7ca31653640f6dd237af_icgraph.svg b/code__80071F00_8h_a4283cbf896ea7ca31653640f6dd237af_icgraph.svg index d4f2bcc421..d28244294a 100644 --- a/code__80071F00_8h_a4283cbf896ea7ca31653640f6dd237af_icgraph.svg +++ b/code__80071F00_8h_a4283cbf896ea7ca31653640f6dd237af_icgraph.svg @@ -4,7 +4,7 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + adsr_update - + Node1 - -adsr_update + +adsr_update @@ -22,31 +68,163 @@ Node2 - -process_notes + +process_notes Node1->Node2 - - + + Node3 - -process_sequences + +process_sequences Node2->Node3 - - + + + + +Node4 + + +synthesis_execute + + + + + +Node3->Node4 + + + + + +Node5 + + +create_next_audio_frame_task + + + + + +Node4->Node5 + + + + + +Node6 + + +thread4_audio + + + + + +Node5->Node6 + + + + + +Node7 + + +thread3_video + + + + +Node6->Node7 + + + + + +Node8 + + +thread1_idle + + + + + +Node7->Node8 + + + + + +Node9 + + +main_func + + + + + +Node8->Node9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/effects_8c_a6201aa1f5129a2ef87c4d34a0cc935dc_icgraph_org.svg b/effects_8c_a6201aa1f5129a2ef87c4d34a0cc935dc_icgraph_org.svg new file mode 100644 index 0000000000..7af0381216 --- /dev/null +++ b/effects_8c_a6201aa1f5129a2ef87c4d34a0cc935dc_icgraph_org.svg @@ -0,0 +1,142 @@ + + + + + + +adsr_update + + + +Node1 + + +adsr_update + + + + + +Node2 + + +process_notes + + + + + +Node1->Node2 + + + + + +Node3 + + +process_sequences + + + + + +Node2->Node3 + + + + + +Node4 + + +synthesis_execute + + + + + +Node3->Node4 + + + + + +Node5 + + +create_next_audio_frame_task + + + + + +Node4->Node5 + + + + + +Node6 + + +thread4_audio + + + + + +Node5->Node6 + + + + + +Node7 + + +thread3_video + + + + + +Node6->Node7 + + + + + +Node8 + + +thread1_idle + + + + + +Node7->Node8 + + + + + +Node9 + + +main_func + + + + + +Node8->Node9 + + + + + diff --git a/effects_8c_a845808744962457cb36c3867fdf2457e_icgraph.map b/effects_8c_a845808744962457cb36c3867fdf2457e_icgraph.map index 89ab256dca..8d8f2982c5 100644 --- a/effects_8c_a845808744962457cb36c3867fdf2457e_icgraph.map +++ b/effects_8c_a845808744962457cb36c3867fdf2457e_icgraph.map @@ -1,6 +1,12 @@ - - - - + + + + + + + + + + diff --git a/effects_8c_a845808744962457cb36c3867fdf2457e_icgraph.md5 b/effects_8c_a845808744962457cb36c3867fdf2457e_icgraph.md5 index 47ce77ce78..809718c9e9 100644 --- a/effects_8c_a845808744962457cb36c3867fdf2457e_icgraph.md5 +++ b/effects_8c_a845808744962457cb36c3867fdf2457e_icgraph.md5 @@ -1 +1 @@ -75c4aaad6f1408e9ce59e0db500fd83e \ No newline at end of file +9478b493a5f861f9a8fe5b74944e69e5 \ No newline at end of file diff --git a/effects_8c_a845808744962457cb36c3867fdf2457e_icgraph.svg b/effects_8c_a845808744962457cb36c3867fdf2457e_icgraph.svg index 7a9ecbc0a0..4cfa22c557 100644 --- a/effects_8c_a845808744962457cb36c3867fdf2457e_icgraph.svg +++ b/effects_8c_a845808744962457cb36c3867fdf2457e_icgraph.svg @@ -46,7 +46,7 @@ if (edges && edges.length) { @@ -54,14 +54,14 @@ var sectionId = 'dynsection-3'; get_portamento_freq_scale - + Node1 - -get_portamento_freq -_scale + +get_portamento_freq +_scale @@ -69,46 +69,136 @@ var sectionId = 'dynsection-3'; Node2 - -note_vibrato_update + +note_vibrato_update Node1->Node2 - - + + Node3 - -process_notes + +process_notes Node2->Node3 - - + + Node4 - -process_sequences + +process_sequences Node3->Node4 - - + + + + + +Node5 + + +synthesis_execute + + + + + +Node4->Node5 + + + + + +Node6 + + +create_next_audio_frame_task + + + + + +Node5->Node6 + + + + + +Node7 + + +thread4_audio + + + + + +Node6->Node7 + + + + + +Node8 + + +thread3_video + + + + + +Node7->Node8 + + + + + +Node9 + + +thread1_idle + + + + + +Node8->Node9 + + + + + +Node10 + + +main_func + + + + + +Node9->Node10 + + diff --git a/effects_8c_a845808744962457cb36c3867fdf2457e_icgraph_org.svg b/effects_8c_a845808744962457cb36c3867fdf2457e_icgraph_org.svg index a0109d7e58..ce32c5706b 100644 --- a/effects_8c_a845808744962457cb36c3867fdf2457e_icgraph_org.svg +++ b/effects_8c_a845808744962457cb36c3867fdf2457e_icgraph_org.svg @@ -4,18 +4,18 @@ - + get_portamento_freq_scale - + Node1 - -get_portamento_freq -_scale + +get_portamento_freq +_scale @@ -23,46 +23,136 @@ Node2 - -note_vibrato_update + +note_vibrato_update Node1->Node2 - - + + Node3 - -process_notes + +process_notes Node2->Node3 - - + + Node4 - -process_sequences + +process_sequences Node3->Node4 - - + + + + + +Node5 + + +synthesis_execute + + + + + +Node4->Node5 + + + + + +Node6 + + +create_next_audio_frame_task + + + + + +Node5->Node6 + + + + + +Node7 + + +thread4_audio + + + + + +Node6->Node7 + + + + + +Node8 + + +thread3_video + + + + + +Node7->Node8 + + + + + +Node9 + + +thread1_idle + + + + + +Node8->Node9 + + + + + +Node10 + + +main_func + + + + + +Node9->Node10 + + diff --git a/effects_8c_a928724b2f42c619cfb4bba62ffce4855_icgraph.map b/effects_8c_a928724b2f42c619cfb4bba62ffce4855_icgraph.map index 77d64a8745..59ce4ea51c 100644 --- a/effects_8c_a928724b2f42c619cfb4bba62ffce4855_icgraph.map +++ b/effects_8c_a928724b2f42c619cfb4bba62ffce4855_icgraph.map @@ -1,7 +1,13 @@ - - - - - + + + + + + + + + + + diff --git a/effects_8c_a928724b2f42c619cfb4bba62ffce4855_icgraph.md5 b/effects_8c_a928724b2f42c619cfb4bba62ffce4855_icgraph.md5 index 7558082526..be0e026ecf 100644 --- a/effects_8c_a928724b2f42c619cfb4bba62ffce4855_icgraph.md5 +++ b/effects_8c_a928724b2f42c619cfb4bba62ffce4855_icgraph.md5 @@ -1 +1 @@ -511f85dfdadbdcd5edb728c6bc2ac713 \ No newline at end of file +03d64c4196949f9f2e019edbf15df3a0 \ No newline at end of file diff --git a/effects_8c_a928724b2f42c619cfb4bba62ffce4855_icgraph.svg b/effects_8c_a928724b2f42c619cfb4bba62ffce4855_icgraph.svg index a347b06dec..c3664584bd 100644 --- a/effects_8c_a928724b2f42c619cfb4bba62ffce4855_icgraph.svg +++ b/effects_8c_a928724b2f42c619cfb4bba62ffce4855_icgraph.svg @@ -46,7 +46,7 @@ if (edges && edges.length) { @@ -54,13 +54,13 @@ var sectionId = 'dynsection-6'; get_vibrato_pitch_change - + Node1 - -get_vibrato_pitch_change + +get_vibrato_pitch_change @@ -68,61 +68,151 @@ var sectionId = 'dynsection-6'; Node2 - -get_vibrato_freq_scale + +get_vibrato_freq_scale Node1->Node2 - - + + Node3 - -note_vibrato_update + +note_vibrato_update Node2->Node3 - - + + Node4 - -process_notes + +process_notes Node3->Node4 - - + + Node5 - -process_sequences + +process_sequences Node4->Node5 - - + + + + + +Node6 + + +synthesis_execute + + + + + +Node5->Node6 + + + + + +Node7 + + +create_next_audio_frame_task + + + + + +Node6->Node7 + + + + + +Node8 + + +thread4_audio + + + + + +Node7->Node8 + + + + + +Node9 + + +thread3_video + + + + + +Node8->Node9 + + + + + +Node10 + + +thread1_idle + + + + + +Node9->Node10 + + + + + +Node11 + + +main_func + + + + + +Node10->Node11 + + diff --git a/effects_8c_a928724b2f42c619cfb4bba62ffce4855_icgraph_org.svg b/effects_8c_a928724b2f42c619cfb4bba62ffce4855_icgraph_org.svg index 876cae4120..796c094237 100644 --- a/effects_8c_a928724b2f42c619cfb4bba62ffce4855_icgraph_org.svg +++ b/effects_8c_a928724b2f42c619cfb4bba62ffce4855_icgraph_org.svg @@ -4,17 +4,17 @@ - + get_vibrato_pitch_change - + Node1 - -get_vibrato_pitch_change + +get_vibrato_pitch_change @@ -22,61 +22,151 @@ Node2 - -get_vibrato_freq_scale + +get_vibrato_freq_scale Node1->Node2 - - + + Node3 - -note_vibrato_update + +note_vibrato_update Node2->Node3 - - + + Node4 - -process_notes + +process_notes Node3->Node4 - - + + Node5 - -process_sequences + +process_sequences Node4->Node5 - - + + + + + +Node6 + + +synthesis_execute + + + + + +Node5->Node6 + + + + + +Node7 + + +create_next_audio_frame_task + + + + + +Node6->Node7 + + + + + +Node8 + + +thread4_audio + + + + + +Node7->Node8 + + + + + +Node9 + + +thread3_video + + + + + +Node8->Node9 + + + + + +Node10 + + +thread1_idle + + + + + +Node9->Node10 + + + + + +Node11 + + +main_func + + + + + +Node10->Node11 + + diff --git a/effects_8c_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.map b/effects_8c_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.map index 42bb19ce1c..e79c66eed3 100644 --- a/effects_8c_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.map +++ b/effects_8c_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.map @@ -1,6 +1,12 @@ - - - - + + + + + + + + + + diff --git a/effects_8c_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.md5 b/effects_8c_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.md5 index 68aea85e17..a06805f753 100644 --- a/effects_8c_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.md5 +++ b/effects_8c_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.md5 @@ -1 +1 @@ -acc630fadd8b6d793e2c070b61e56af2 \ No newline at end of file +4befd9e80b933542a0cc4edbbcb82a95 \ No newline at end of file diff --git a/effects_8c_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.svg b/effects_8c_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.svg index f76501f1a6..ce9292ece7 100644 --- a/effects_8c_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.svg +++ b/effects_8c_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.svg @@ -46,7 +46,7 @@ if (edges && edges.length) { @@ -54,13 +54,13 @@ var sectionId = 'dynsection-5'; get_vibrato_freq_scale - + Node1 - -get_vibrato_freq_scale + +get_vibrato_freq_scale @@ -68,46 +68,136 @@ var sectionId = 'dynsection-5'; Node2 - -note_vibrato_update + +note_vibrato_update Node1->Node2 - - + + Node3 - -process_notes + +process_notes Node2->Node3 - - + + Node4 - -process_sequences + +process_sequences Node3->Node4 - - + + + + + +Node5 + + +synthesis_execute + + + + + +Node4->Node5 + + + + + +Node6 + + +create_next_audio_frame_task + + + + + +Node5->Node6 + + + + + +Node7 + + +thread4_audio + + + + + +Node6->Node7 + + + + + +Node8 + + +thread3_video + + + + + +Node7->Node8 + + + + + +Node9 + + +thread1_idle + + + + + +Node8->Node9 + + + + + +Node10 + + +main_func + + + + + +Node9->Node10 + + diff --git a/effects_8c_aa411cc3ba6223d8ee256d8e9861546e9_icgraph_org.svg b/effects_8c_aa411cc3ba6223d8ee256d8e9861546e9_icgraph_org.svg index 401f83ce03..dda1a30057 100644 --- a/effects_8c_aa411cc3ba6223d8ee256d8e9861546e9_icgraph_org.svg +++ b/effects_8c_aa411cc3ba6223d8ee256d8e9861546e9_icgraph_org.svg @@ -4,17 +4,17 @@ - + get_vibrato_freq_scale - + Node1 - -get_vibrato_freq_scale + +get_vibrato_freq_scale @@ -22,46 +22,136 @@ Node2 - -note_vibrato_update + +note_vibrato_update Node1->Node2 - - + + Node3 - -process_notes + +process_notes Node2->Node3 - - + + Node4 - -process_sequences + +process_sequences Node3->Node4 - - + + + + + +Node5 + + +synthesis_execute + + + + + +Node4->Node5 + + + + + +Node6 + + +create_next_audio_frame_task + + + + + +Node5->Node6 + + + + + +Node7 + + +thread4_audio + + + + + +Node6->Node7 + + + + + +Node8 + + +thread3_video + + + + + +Node7->Node8 + + + + + +Node9 + + +thread1_idle + + + + + +Node8->Node9 + + + + + +Node10 + + +main_func + + + + + +Node9->Node10 + + diff --git a/effects_8c_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.map b/effects_8c_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.map index 65725f6f21..bca72c5137 100644 --- a/effects_8c_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.map +++ b/effects_8c_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.map @@ -1,5 +1,11 @@ - - - + + + + + + + + + diff --git a/effects_8c_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.md5 b/effects_8c_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.md5 index a65d565ce8..fa672b97a8 100644 --- a/effects_8c_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.md5 +++ b/effects_8c_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.md5 @@ -1 +1 @@ -b699bab839721725429bd3e8917e639b \ No newline at end of file +596923cf7da668282776b61f1d34a636 \ No newline at end of file diff --git a/effects_8c_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.svg b/effects_8c_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.svg index f379d093ce..e0a435e15a 100644 --- a/effects_8c_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.svg +++ b/effects_8c_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.svg @@ -4,17 +4,63 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + note_vibrato_update - + Node1 - -note_vibrato_update + +note_vibrato_update @@ -22,31 +68,163 @@ Node2 - -process_notes + +process_notes Node1->Node2 - - + + Node3 - -process_sequences + +process_sequences Node2->Node3 - - + + + + +Node4 + + +synthesis_execute + + + + + +Node3->Node4 + + + + + +Node5 + + +create_next_audio_frame_task + + + + + +Node4->Node5 + + + + + +Node6 + + +thread4_audio + + + + + +Node5->Node6 + + + + + +Node7 + + +thread3_video + + + + +Node6->Node7 + + + + + +Node8 + + +thread1_idle + + + + + +Node7->Node8 + + + + + +Node9 + + +main_func + + + + + +Node8->Node9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/effects_8c_ab80cf39e4b3e31a75657ba722018d9b9_icgraph_org.svg b/effects_8c_ab80cf39e4b3e31a75657ba722018d9b9_icgraph_org.svg new file mode 100644 index 0000000000..7833a1b536 --- /dev/null +++ b/effects_8c_ab80cf39e4b3e31a75657ba722018d9b9_icgraph_org.svg @@ -0,0 +1,142 @@ + + + + + + +note_vibrato_update + + + +Node1 + + +note_vibrato_update + + + + + +Node2 + + +process_notes + + + + + +Node1->Node2 + + + + + +Node3 + + +process_sequences + + + + + +Node2->Node3 + + + + + +Node4 + + +synthesis_execute + + + + + +Node3->Node4 + + + + + +Node5 + + +create_next_audio_frame_task + + + + + +Node4->Node5 + + + + + +Node6 + + +thread4_audio + + + + + +Node5->Node6 + + + + + +Node7 + + +thread3_video + + + + + +Node6->Node7 + + + + + +Node8 + + +thread1_idle + + + + + +Node7->Node8 + + + + + +Node9 + + +main_func + + + + + +Node8->Node9 + + + + + diff --git a/effects_8c_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.map b/effects_8c_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.map index 4fdeb34851..5ac998af62 100644 --- a/effects_8c_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.map +++ b/effects_8c_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.map @@ -1,4 +1,10 @@ - - + + + + + + + + diff --git a/effects_8c_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.md5 b/effects_8c_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.md5 index bfa91569d1..58775175f3 100644 --- a/effects_8c_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.md5 +++ b/effects_8c_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.md5 @@ -1 +1 @@ -1ffd40b6702e50a38b20e0f0efbd6d3c \ No newline at end of file +ec37cdc4a82c1e8fe699f548016f0223 \ No newline at end of file diff --git a/effects_8c_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.svg b/effects_8c_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.svg index 442c7e5477..1a26fd157a 100644 --- a/effects_8c_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.svg +++ b/effects_8c_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.svg @@ -4,18 +4,64 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sequence_player_process_sound - + Node1 - -sequence_player_process -_sound + +sequence_player_process +_sound @@ -23,16 +69,148 @@ Node2 - -process_sequences + +process_sequences Node1->Node2 - - + + + + +Node3 + + +synthesis_execute + + + + + +Node2->Node3 + + + + + +Node4 + + +create_next_audio_frame_task + + + + + +Node3->Node4 + + + + + +Node5 + + +thread4_audio + + + + + +Node4->Node5 + + + + + +Node6 + + +thread3_video + + + + +Node5->Node6 + + + + + +Node7 + + +thread1_idle + + + + + +Node6->Node7 + + + + + +Node8 + + +main_func + + + + + +Node7->Node8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/effects_8c_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph_org.svg b/effects_8c_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph_org.svg new file mode 100644 index 0000000000..85f33351da --- /dev/null +++ b/effects_8c_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph_org.svg @@ -0,0 +1,128 @@ + + + + + + +sequence_player_process_sound + + + +Node1 + + +sequence_player_process +_sound + + + + + +Node2 + + +process_sequences + + + + + +Node1->Node2 + + + + + +Node3 + + +synthesis_execute + + + + + +Node2->Node3 + + + + + +Node4 + + +create_next_audio_frame_task + + + + + +Node3->Node4 + + + + + +Node5 + + +thread4_audio + + + + + +Node4->Node5 + + + + + +Node6 + + +thread3_video + + + + + +Node5->Node6 + + + + + +Node7 + + +thread1_idle + + + + + +Node6->Node7 + + + + + +Node8 + + +main_func + + + + + +Node7->Node8 + + + + + diff --git a/effects_8c_ad233b78e677de7deb61ad8146e56298a_icgraph.map b/effects_8c_ad233b78e677de7deb61ad8146e56298a_icgraph.map index 4bd12bc292..76f32a6ea3 100644 --- a/effects_8c_ad233b78e677de7deb61ad8146e56298a_icgraph.map +++ b/effects_8c_ad233b78e677de7deb61ad8146e56298a_icgraph.map @@ -1,5 +1,11 @@ - - - + + + + + + + + + diff --git a/effects_8c_ad233b78e677de7deb61ad8146e56298a_icgraph.md5 b/effects_8c_ad233b78e677de7deb61ad8146e56298a_icgraph.md5 index cf288ca664..087c159f38 100644 --- a/effects_8c_ad233b78e677de7deb61ad8146e56298a_icgraph.md5 +++ b/effects_8c_ad233b78e677de7deb61ad8146e56298a_icgraph.md5 @@ -1 +1 @@ -a22c5cce2c70d6a98750ce07a92ca701 \ No newline at end of file +e2e02b8f8214721a8bc6e2fd38838dd9 \ No newline at end of file diff --git a/effects_8c_ad233b78e677de7deb61ad8146e56298a_icgraph.svg b/effects_8c_ad233b78e677de7deb61ad8146e56298a_icgraph.svg index d4550d16b2..763a2f51f3 100644 --- a/effects_8c_ad233b78e677de7deb61ad8146e56298a_icgraph.svg +++ b/effects_8c_ad233b78e677de7deb61ad8146e56298a_icgraph.svg @@ -4,18 +4,64 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sequence_channel_process_sound - + Node1 - -sequence_channel_process -_sound + +sequence_channel_process +_sound @@ -23,32 +69,164 @@ Node2 - -sequence_player_process -_sound + +sequence_player_process +_sound Node1->Node2 - - + + Node3 - -process_sequences + +process_sequences Node2->Node3 - - + + + + +Node4 + + +synthesis_execute + + + + + +Node3->Node4 + + + + + +Node5 + + +create_next_audio_frame_task + + + + + +Node4->Node5 + + + + + +Node6 + + +thread4_audio + + + + + +Node5->Node6 + + + + + +Node7 + + +thread3_video + + + + +Node6->Node7 + + + + + +Node8 + + +thread1_idle + + + + + +Node7->Node8 + + + + + +Node9 + + +main_func + + + + + +Node8->Node9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/effects_8c_ad233b78e677de7deb61ad8146e56298a_icgraph_org.svg b/effects_8c_ad233b78e677de7deb61ad8146e56298a_icgraph_org.svg new file mode 100644 index 0000000000..a3514b4038 --- /dev/null +++ b/effects_8c_ad233b78e677de7deb61ad8146e56298a_icgraph_org.svg @@ -0,0 +1,144 @@ + + + + + + +sequence_channel_process_sound + + + +Node1 + + +sequence_channel_process +_sound + + + + + +Node2 + + +sequence_player_process +_sound + + + + + +Node1->Node2 + + + + + +Node3 + + +process_sequences + + + + + +Node2->Node3 + + + + + +Node4 + + +synthesis_execute + + + + + +Node3->Node4 + + + + + +Node5 + + +create_next_audio_frame_task + + + + + +Node4->Node5 + + + + + +Node6 + + +thread4_audio + + + + + +Node5->Node6 + + + + + +Node7 + + +thread3_video + + + + + +Node6->Node7 + + + + + +Node8 + + +thread1_idle + + + + + +Node7->Node8 + + + + + +Node9 + + +main_func + + + + + +Node8->Node9 + + + + + diff --git a/effects_8c_ae1b1e83a3d593efb77b595f6c14f1c75_icgraph.map b/effects_8c_ae1b1e83a3d593efb77b595f6c14f1c75_icgraph.map index cd12523ff2..284a1b2891 100644 --- a/effects_8c_ae1b1e83a3d593efb77b595f6c14f1c75_icgraph.map +++ b/effects_8c_ae1b1e83a3d593efb77b595f6c14f1c75_icgraph.map @@ -1,12 +1,18 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/effects_8c_ae1b1e83a3d593efb77b595f6c14f1c75_icgraph.md5 b/effects_8c_ae1b1e83a3d593efb77b595f6c14f1c75_icgraph.md5 index 2ec73793d0..a015ea29a4 100644 --- a/effects_8c_ae1b1e83a3d593efb77b595f6c14f1c75_icgraph.md5 +++ b/effects_8c_ae1b1e83a3d593efb77b595f6c14f1c75_icgraph.md5 @@ -1 +1 @@ -dc923581609d1bccecf8599aed8c5acb \ No newline at end of file +6715970ee59648111df99b4db135358d \ No newline at end of file diff --git a/effects_8c_ae1b1e83a3d593efb77b595f6c14f1c75_icgraph.svg b/effects_8c_ae1b1e83a3d593efb77b595f6c14f1c75_icgraph.svg index fa330005f9..44d1d1cf7f 100644 --- a/effects_8c_ae1b1e83a3d593efb77b595f6c14f1c75_icgraph.svg +++ b/effects_8c_ae1b1e83a3d593efb77b595f6c14f1c75_icgraph.svg @@ -46,7 +46,7 @@ if (edges && edges.length) { @@ -54,13 +54,13 @@ var sectionId = 'dynsection-1'; adsr_init - + Node1 - -adsr_init + +adsr_init @@ -68,145 +68,235 @@ var sectionId = 'dynsection-1'; Node2 - -note_init + +note_init Node1->Node2 - - + + Node3 - -note_init_for_layer + +note_init_for_layer Node2->Node3 - - + + Node4 - -alloc_note_from_disabled + +alloc_note_from_disabled Node3->Node4 - - + + - - -Node10 - - -process_notes + + +Node16 + + +process_notes - - -Node3->Node10 - - + + +Node3->Node16 + + Node5 - -alloc_note + +alloc_note Node4->Node5 - - + + Node6 - -seq_channel_layer_process -_script + +seq_channel_layer_process +_script Node5->Node6 - - + + Node7 - -sequence_channel_process -_script + +sequence_channel_process +_script Node6->Node7 - - + + Node8 - -sequence_player_process -_sequence + +sequence_player_process +_sequence Node7->Node8 - - + + Node9 - -process_sequences + +process_sequences Node8->Node9 - - + + + + + +Node10 + + +synthesis_execute + + + + + +Node9->Node10 + + - + + +Node11 + + +create_next_audio_frame_task + + + + -Node10->Node9 - - +Node10->Node11 + + + + + +Node12 + + +thread4_audio + + + + + +Node11->Node12 + + + + + +Node13 + + +thread3_video + + + + + +Node12->Node13 + + + + + +Node14 + + +thread1_idle + + + + + +Node13->Node14 + + + + + +Node15 + + +main_func + + + + + +Node14->Node15 + + + + + +Node16->Node9 + + diff --git a/effects_8c_ae1b1e83a3d593efb77b595f6c14f1c75_icgraph_org.svg b/effects_8c_ae1b1e83a3d593efb77b595f6c14f1c75_icgraph_org.svg index da88cbecef..a4bf1edf2e 100644 --- a/effects_8c_ae1b1e83a3d593efb77b595f6c14f1c75_icgraph_org.svg +++ b/effects_8c_ae1b1e83a3d593efb77b595f6c14f1c75_icgraph_org.svg @@ -4,17 +4,17 @@ - + adsr_init - + Node1 - -adsr_init + +adsr_init @@ -22,145 +22,235 @@ Node2 - -note_init + +note_init Node1->Node2 - - + + Node3 - -note_init_for_layer + +note_init_for_layer Node2->Node3 - - + + Node4 - -alloc_note_from_disabled + +alloc_note_from_disabled Node3->Node4 - - + + - - -Node10 - - -process_notes + + +Node16 + + +process_notes - - -Node3->Node10 - - + + +Node3->Node16 + + Node5 - -alloc_note + +alloc_note Node4->Node5 - - + + Node6 - -seq_channel_layer_process -_script + +seq_channel_layer_process +_script Node5->Node6 - - + + Node7 - -sequence_channel_process -_script + +sequence_channel_process +_script Node6->Node7 - - + + Node8 - -sequence_player_process -_sequence + +sequence_player_process +_sequence Node7->Node8 - - + + Node9 - -process_sequences + +process_sequences Node8->Node9 - - + + + + + +Node10 + + +synthesis_execute + + + + + +Node9->Node10 + + - + + +Node11 + + +create_next_audio_frame_task + + + + -Node10->Node9 - - +Node10->Node11 + + + + + +Node12 + + +thread4_audio + + + + + +Node11->Node12 + + + + + +Node13 + + +thread3_video + + + + + +Node12->Node13 + + + + + +Node14 + + +thread1_idle + + + + + +Node13->Node14 + + + + + +Node15 + + +main_func + + + + + +Node14->Node15 + + + + + +Node16->Node9 + + diff --git a/effects_8h.html b/effects_8h.html index 7528b9e70c..12b8884272 100644 --- a/effects_8h.html +++ b/effects_8h.html @@ -458,7 +458,7 @@

Here is the caller graph for this function:
-
+
diff --git a/effects_8h_a25e39b4b3790d36958bb854307d5f9d7_icgraph.map b/effects_8h_a25e39b4b3790d36958bb854307d5f9d7_icgraph.map index 33400434ee..2c9b648d3e 100644 --- a/effects_8h_a25e39b4b3790d36958bb854307d5f9d7_icgraph.map +++ b/effects_8h_a25e39b4b3790d36958bb854307d5f9d7_icgraph.map @@ -1,8 +1,14 @@ - - - - - - + + + + + + + + + + + + diff --git a/effects_8h_a25e39b4b3790d36958bb854307d5f9d7_icgraph.md5 b/effects_8h_a25e39b4b3790d36958bb854307d5f9d7_icgraph.md5 index c0c86a0d21..0e95e0bcbd 100644 --- a/effects_8h_a25e39b4b3790d36958bb854307d5f9d7_icgraph.md5 +++ b/effects_8h_a25e39b4b3790d36958bb854307d5f9d7_icgraph.md5 @@ -1 +1 @@ -a9868cdd3d8d269193606cab2851c3a5 \ No newline at end of file +8842b561ec0af88904147aa76392d4a3 \ No newline at end of file diff --git a/effects_8h_a25e39b4b3790d36958bb854307d5f9d7_icgraph.svg b/effects_8h_a25e39b4b3790d36958bb854307d5f9d7_icgraph.svg index 5e20fe4305..bd3a7b39d4 100644 --- a/effects_8h_a25e39b4b3790d36958bb854307d5f9d7_icgraph.svg +++ b/effects_8h_a25e39b4b3790d36958bb854307d5f9d7_icgraph.svg @@ -46,7 +46,7 @@ if (edges && edges.length) { @@ -54,13 +54,13 @@ var sectionId = 'dynsection-7'; note_vibrato_init - + Node1 - -note_vibrato_init + +note_vibrato_init @@ -68,85 +68,175 @@ var sectionId = 'dynsection-7'; Node2 - -process_notes + +process_notes Node1->Node2 - - + + - - -Node4 - - -seq_channel_layer_process -_script + + +Node10 + + +seq_channel_layer_process +_script - - -Node1->Node4 - - + + +Node1->Node10 + + Node3 - -process_sequences + +process_sequences Node2->Node3 - - + + + + + +Node4 + + +synthesis_execute + + + + + +Node3->Node4 + + Node5 - - -sequence_channel_process -_script + + +create_next_audio_frame_task Node4->Node5 - - + + Node6 - - -sequence_player_process -_sequence + + +thread4_audio Node5->Node6 - - + + - + + +Node7 + + +thread3_video + + + + -Node6->Node3 - - +Node6->Node7 + + + + + +Node8 + + +thread1_idle + + + + + +Node7->Node8 + + + + + +Node9 + + +main_func + + + + + +Node8->Node9 + + + + + +Node11 + + +sequence_channel_process +_script + + + + + +Node10->Node11 + + + + + +Node12 + + +sequence_player_process +_sequence + + + + + +Node11->Node12 + + + + + +Node12->Node3 + + diff --git a/effects_8h_a25e39b4b3790d36958bb854307d5f9d7_icgraph_org.svg b/effects_8h_a25e39b4b3790d36958bb854307d5f9d7_icgraph_org.svg index 2fb1a7e7fa..1eef5cff43 100644 --- a/effects_8h_a25e39b4b3790d36958bb854307d5f9d7_icgraph_org.svg +++ b/effects_8h_a25e39b4b3790d36958bb854307d5f9d7_icgraph_org.svg @@ -4,17 +4,17 @@ - + note_vibrato_init - + Node1 - -note_vibrato_init + +note_vibrato_init @@ -22,85 +22,175 @@ Node2 - -process_notes + +process_notes Node1->Node2 - - - - - -Node4 - - -seq_channel_layer_process -_script + + + + + +Node10 + + +seq_channel_layer_process +_script - - -Node1->Node4 - - + + +Node1->Node10 + + Node3 - -process_sequences + +process_sequences Node2->Node3 - - + + + + + +Node4 + + +synthesis_execute + + + + + +Node3->Node4 + + Node5 - - -sequence_channel_process -_script + + +create_next_audio_frame_task Node4->Node5 - - + + Node6 - - -sequence_player_process -_sequence + + +thread4_audio Node5->Node6 - - + + + + + +Node7 + + +thread3_video + - + + -Node6->Node3 - - +Node6->Node7 + + + + + +Node8 + + +thread1_idle + + + + + +Node7->Node8 + + + + + +Node9 + + +main_func + + + + + +Node8->Node9 + + + + + +Node11 + + +sequence_channel_process +_script + + + + + +Node10->Node11 + + + + + +Node12 + + +sequence_player_process +_sequence + + + + + +Node11->Node12 + + + + + +Node12->Node3 + + diff --git a/effects_8h_a6201aa1f5129a2ef87c4d34a0cc935dc_icgraph.map b/effects_8h_a6201aa1f5129a2ef87c4d34a0cc935dc_icgraph.map index 14bb9c7866..83bc7acfc6 100644 --- a/effects_8h_a6201aa1f5129a2ef87c4d34a0cc935dc_icgraph.map +++ b/effects_8h_a6201aa1f5129a2ef87c4d34a0cc935dc_icgraph.map @@ -1,5 +1,11 @@ - - - + + + + + + + + + diff --git a/effects_8h_a6201aa1f5129a2ef87c4d34a0cc935dc_icgraph.md5 b/effects_8h_a6201aa1f5129a2ef87c4d34a0cc935dc_icgraph.md5 index 3b2c2b0807..08102f071f 100644 --- a/effects_8h_a6201aa1f5129a2ef87c4d34a0cc935dc_icgraph.md5 +++ b/effects_8h_a6201aa1f5129a2ef87c4d34a0cc935dc_icgraph.md5 @@ -1 +1 @@ -76a4b42f263ee143f8f4f14479f7af36 \ No newline at end of file +2943ca9db014c915ee1b729d62e207c9 \ No newline at end of file diff --git a/effects_8h_a6201aa1f5129a2ef87c4d34a0cc935dc_icgraph.svg b/effects_8h_a6201aa1f5129a2ef87c4d34a0cc935dc_icgraph.svg index ba8717adc6..8d29d94ac9 100644 --- a/effects_8h_a6201aa1f5129a2ef87c4d34a0cc935dc_icgraph.svg +++ b/effects_8h_a6201aa1f5129a2ef87c4d34a0cc935dc_icgraph.svg @@ -4,17 +4,63 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + adsr_update - + Node1 - -adsr_update + +adsr_update @@ -22,31 +68,163 @@ Node2 - -process_notes + +process_notes Node1->Node2 - - + + Node3 - -process_sequences + +process_sequences Node2->Node3 - - + + + + +Node4 + + +synthesis_execute + + + + + +Node3->Node4 + + + + + +Node5 + + +create_next_audio_frame_task + + + + + +Node4->Node5 + + + + + +Node6 + + +thread4_audio + + + + + +Node5->Node6 + + + + + +Node7 + + +thread3_video + + + + +Node6->Node7 + + + + + +Node8 + + +thread1_idle + + + + + +Node7->Node8 + + + + + +Node9 + + +main_func + + + + + +Node8->Node9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/effects_8h_a6201aa1f5129a2ef87c4d34a0cc935dc_icgraph_org.svg b/effects_8h_a6201aa1f5129a2ef87c4d34a0cc935dc_icgraph_org.svg new file mode 100644 index 0000000000..7af0381216 --- /dev/null +++ b/effects_8h_a6201aa1f5129a2ef87c4d34a0cc935dc_icgraph_org.svg @@ -0,0 +1,142 @@ + + + + + + +adsr_update + + + +Node1 + + +adsr_update + + + + + +Node2 + + +process_notes + + + + + +Node1->Node2 + + + + + +Node3 + + +process_sequences + + + + + +Node2->Node3 + + + + + +Node4 + + +synthesis_execute + + + + + +Node3->Node4 + + + + + +Node5 + + +create_next_audio_frame_task + + + + + +Node4->Node5 + + + + + +Node6 + + +thread4_audio + + + + + +Node5->Node6 + + + + + +Node7 + + +thread3_video + + + + + +Node6->Node7 + + + + + +Node8 + + +thread1_idle + + + + + +Node7->Node8 + + + + + +Node9 + + +main_func + + + + + +Node8->Node9 + + + + + diff --git a/effects_8h_a845808744962457cb36c3867fdf2457e_icgraph.map b/effects_8h_a845808744962457cb36c3867fdf2457e_icgraph.map index 89ab256dca..8d8f2982c5 100644 --- a/effects_8h_a845808744962457cb36c3867fdf2457e_icgraph.map +++ b/effects_8h_a845808744962457cb36c3867fdf2457e_icgraph.map @@ -1,6 +1,12 @@ - - - - + + + + + + + + + + diff --git a/effects_8h_a845808744962457cb36c3867fdf2457e_icgraph.md5 b/effects_8h_a845808744962457cb36c3867fdf2457e_icgraph.md5 index 47ce77ce78..809718c9e9 100644 --- a/effects_8h_a845808744962457cb36c3867fdf2457e_icgraph.md5 +++ b/effects_8h_a845808744962457cb36c3867fdf2457e_icgraph.md5 @@ -1 +1 @@ -75c4aaad6f1408e9ce59e0db500fd83e \ No newline at end of file +9478b493a5f861f9a8fe5b74944e69e5 \ No newline at end of file diff --git a/effects_8h_a845808744962457cb36c3867fdf2457e_icgraph.svg b/effects_8h_a845808744962457cb36c3867fdf2457e_icgraph.svg index 1f39e46c37..6a616de796 100644 --- a/effects_8h_a845808744962457cb36c3867fdf2457e_icgraph.svg +++ b/effects_8h_a845808744962457cb36c3867fdf2457e_icgraph.svg @@ -46,7 +46,7 @@ if (edges && edges.length) { @@ -54,14 +54,14 @@ var sectionId = 'dynsection-3'; get_portamento_freq_scale - + Node1 - -get_portamento_freq -_scale + +get_portamento_freq +_scale @@ -69,46 +69,136 @@ var sectionId = 'dynsection-3'; Node2 - -note_vibrato_update + +note_vibrato_update Node1->Node2 - - + + Node3 - -process_notes + +process_notes Node2->Node3 - - + + Node4 - -process_sequences + +process_sequences Node3->Node4 - - + + + + + +Node5 + + +synthesis_execute + + + + + +Node4->Node5 + + + + + +Node6 + + +create_next_audio_frame_task + + + + + +Node5->Node6 + + + + + +Node7 + + +thread4_audio + + + + + +Node6->Node7 + + + + + +Node8 + + +thread3_video + + + + + +Node7->Node8 + + + + + +Node9 + + +thread1_idle + + + + + +Node8->Node9 + + + + + +Node10 + + +main_func + + + + + +Node9->Node10 + + diff --git a/effects_8h_a845808744962457cb36c3867fdf2457e_icgraph_org.svg b/effects_8h_a845808744962457cb36c3867fdf2457e_icgraph_org.svg index a0109d7e58..ce32c5706b 100644 --- a/effects_8h_a845808744962457cb36c3867fdf2457e_icgraph_org.svg +++ b/effects_8h_a845808744962457cb36c3867fdf2457e_icgraph_org.svg @@ -4,18 +4,18 @@ - + get_portamento_freq_scale - + Node1 - -get_portamento_freq -_scale + +get_portamento_freq +_scale @@ -23,46 +23,136 @@ Node2 - -note_vibrato_update + +note_vibrato_update Node1->Node2 - - + + Node3 - -process_notes + +process_notes Node2->Node3 - - + + Node4 - -process_sequences + +process_sequences Node3->Node4 - - + + + + + +Node5 + + +synthesis_execute + + + + + +Node4->Node5 + + + + + +Node6 + + +create_next_audio_frame_task + + + + + +Node5->Node6 + + + + + +Node7 + + +thread4_audio + + + + + +Node6->Node7 + + + + + +Node8 + + +thread3_video + + + + + +Node7->Node8 + + + + + +Node9 + + +thread1_idle + + + + + +Node8->Node9 + + + + + +Node10 + + +main_func + + + + + +Node9->Node10 + + diff --git a/effects_8h_a928724b2f42c619cfb4bba62ffce4855_icgraph.map b/effects_8h_a928724b2f42c619cfb4bba62ffce4855_icgraph.map index 77d64a8745..59ce4ea51c 100644 --- a/effects_8h_a928724b2f42c619cfb4bba62ffce4855_icgraph.map +++ b/effects_8h_a928724b2f42c619cfb4bba62ffce4855_icgraph.map @@ -1,7 +1,13 @@ - - - - - + + + + + + + + + + + diff --git a/effects_8h_a928724b2f42c619cfb4bba62ffce4855_icgraph.md5 b/effects_8h_a928724b2f42c619cfb4bba62ffce4855_icgraph.md5 index 7558082526..be0e026ecf 100644 --- a/effects_8h_a928724b2f42c619cfb4bba62ffce4855_icgraph.md5 +++ b/effects_8h_a928724b2f42c619cfb4bba62ffce4855_icgraph.md5 @@ -1 +1 @@ -511f85dfdadbdcd5edb728c6bc2ac713 \ No newline at end of file +03d64c4196949f9f2e019edbf15df3a0 \ No newline at end of file diff --git a/effects_8h_a928724b2f42c619cfb4bba62ffce4855_icgraph.svg b/effects_8h_a928724b2f42c619cfb4bba62ffce4855_icgraph.svg index 91e71c4db2..7659b704c8 100644 --- a/effects_8h_a928724b2f42c619cfb4bba62ffce4855_icgraph.svg +++ b/effects_8h_a928724b2f42c619cfb4bba62ffce4855_icgraph.svg @@ -46,7 +46,7 @@ if (edges && edges.length) { @@ -54,13 +54,13 @@ var sectionId = 'dynsection-6'; get_vibrato_pitch_change - + Node1 - -get_vibrato_pitch_change + +get_vibrato_pitch_change @@ -68,61 +68,151 @@ var sectionId = 'dynsection-6'; Node2 - -get_vibrato_freq_scale + +get_vibrato_freq_scale Node1->Node2 - - + + Node3 - -note_vibrato_update + +note_vibrato_update Node2->Node3 - - + + Node4 - -process_notes + +process_notes Node3->Node4 - - + + Node5 - -process_sequences + +process_sequences Node4->Node5 - - + + + + + +Node6 + + +synthesis_execute + + + + + +Node5->Node6 + + + + + +Node7 + + +create_next_audio_frame_task + + + + + +Node6->Node7 + + + + + +Node8 + + +thread4_audio + + + + + +Node7->Node8 + + + + + +Node9 + + +thread3_video + + + + + +Node8->Node9 + + + + + +Node10 + + +thread1_idle + + + + + +Node9->Node10 + + + + + +Node11 + + +main_func + + + + + +Node10->Node11 + + diff --git a/effects_8h_a928724b2f42c619cfb4bba62ffce4855_icgraph_org.svg b/effects_8h_a928724b2f42c619cfb4bba62ffce4855_icgraph_org.svg index 876cae4120..796c094237 100644 --- a/effects_8h_a928724b2f42c619cfb4bba62ffce4855_icgraph_org.svg +++ b/effects_8h_a928724b2f42c619cfb4bba62ffce4855_icgraph_org.svg @@ -4,17 +4,17 @@ - + get_vibrato_pitch_change - + Node1 - -get_vibrato_pitch_change + +get_vibrato_pitch_change @@ -22,61 +22,151 @@ Node2 - -get_vibrato_freq_scale + +get_vibrato_freq_scale Node1->Node2 - - + + Node3 - -note_vibrato_update + +note_vibrato_update Node2->Node3 - - + + Node4 - -process_notes + +process_notes Node3->Node4 - - + + Node5 - -process_sequences + +process_sequences Node4->Node5 - - + + + + + +Node6 + + +synthesis_execute + + + + + +Node5->Node6 + + + + + +Node7 + + +create_next_audio_frame_task + + + + + +Node6->Node7 + + + + + +Node8 + + +thread4_audio + + + + + +Node7->Node8 + + + + + +Node9 + + +thread3_video + + + + + +Node8->Node9 + + + + + +Node10 + + +thread1_idle + + + + + +Node9->Node10 + + + + + +Node11 + + +main_func + + + + + +Node10->Node11 + + diff --git a/effects_8h_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.map b/effects_8h_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.map index 42bb19ce1c..e79c66eed3 100644 --- a/effects_8h_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.map +++ b/effects_8h_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.map @@ -1,6 +1,12 @@ - - - - + + + + + + + + + + diff --git a/effects_8h_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.md5 b/effects_8h_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.md5 index 68aea85e17..a06805f753 100644 --- a/effects_8h_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.md5 +++ b/effects_8h_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.md5 @@ -1 +1 @@ -acc630fadd8b6d793e2c070b61e56af2 \ No newline at end of file +4befd9e80b933542a0cc4edbbcb82a95 \ No newline at end of file diff --git a/effects_8h_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.svg b/effects_8h_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.svg index d8e8d2614e..be5de3dae3 100644 --- a/effects_8h_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.svg +++ b/effects_8h_aa411cc3ba6223d8ee256d8e9861546e9_icgraph.svg @@ -46,7 +46,7 @@ if (edges && edges.length) { @@ -54,13 +54,13 @@ var sectionId = 'dynsection-5'; get_vibrato_freq_scale - + Node1 - -get_vibrato_freq_scale + +get_vibrato_freq_scale @@ -68,46 +68,136 @@ var sectionId = 'dynsection-5'; Node2 - -note_vibrato_update + +note_vibrato_update Node1->Node2 - - + + Node3 - -process_notes + +process_notes Node2->Node3 - - + + Node4 - -process_sequences + +process_sequences Node3->Node4 - - + + + + + +Node5 + + +synthesis_execute + + + + + +Node4->Node5 + + + + + +Node6 + + +create_next_audio_frame_task + + + + + +Node5->Node6 + + + + + +Node7 + + +thread4_audio + + + + + +Node6->Node7 + + + + + +Node8 + + +thread3_video + + + + + +Node7->Node8 + + + + + +Node9 + + +thread1_idle + + + + + +Node8->Node9 + + + + + +Node10 + + +main_func + + + + + +Node9->Node10 + + diff --git a/effects_8h_aa411cc3ba6223d8ee256d8e9861546e9_icgraph_org.svg b/effects_8h_aa411cc3ba6223d8ee256d8e9861546e9_icgraph_org.svg index 401f83ce03..dda1a30057 100644 --- a/effects_8h_aa411cc3ba6223d8ee256d8e9861546e9_icgraph_org.svg +++ b/effects_8h_aa411cc3ba6223d8ee256d8e9861546e9_icgraph_org.svg @@ -4,17 +4,17 @@ - + get_vibrato_freq_scale - + Node1 - -get_vibrato_freq_scale + +get_vibrato_freq_scale @@ -22,46 +22,136 @@ Node2 - -note_vibrato_update + +note_vibrato_update Node1->Node2 - - + + Node3 - -process_notes + +process_notes Node2->Node3 - - + + Node4 - -process_sequences + +process_sequences Node3->Node4 - - + + + + + +Node5 + + +synthesis_execute + + + + + +Node4->Node5 + + + + + +Node6 + + +create_next_audio_frame_task + + + + + +Node5->Node6 + + + + + +Node7 + + +thread4_audio + + + + + +Node6->Node7 + + + + + +Node8 + + +thread3_video + + + + + +Node7->Node8 + + + + + +Node9 + + +thread1_idle + + + + + +Node8->Node9 + + + + + +Node10 + + +main_func + + + + + +Node9->Node10 + + diff --git a/effects_8h_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.map b/effects_8h_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.map index 65725f6f21..bca72c5137 100644 --- a/effects_8h_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.map +++ b/effects_8h_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.map @@ -1,5 +1,11 @@ - - - + + + + + + + + + diff --git a/effects_8h_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.md5 b/effects_8h_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.md5 index a65d565ce8..fa672b97a8 100644 --- a/effects_8h_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.md5 +++ b/effects_8h_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.md5 @@ -1 +1 @@ -b699bab839721725429bd3e8917e639b \ No newline at end of file +596923cf7da668282776b61f1d34a636 \ No newline at end of file diff --git a/effects_8h_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.svg b/effects_8h_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.svg index f379d093ce..6ebcd4c9ae 100644 --- a/effects_8h_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.svg +++ b/effects_8h_ab80cf39e4b3e31a75657ba722018d9b9_icgraph.svg @@ -4,17 +4,63 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + note_vibrato_update - + Node1 - -note_vibrato_update + +note_vibrato_update @@ -22,31 +68,163 @@ Node2 - -process_notes + +process_notes Node1->Node2 - - + + Node3 - -process_sequences + +process_sequences Node2->Node3 - - + + + + +Node4 + + +synthesis_execute + + + + + +Node3->Node4 + + + + + +Node5 + + +create_next_audio_frame_task + + + + + +Node4->Node5 + + + + + +Node6 + + +thread4_audio + + + + + +Node5->Node6 + + + + + +Node7 + + +thread3_video + + + + +Node6->Node7 + + + + + +Node8 + + +thread1_idle + + + + + +Node7->Node8 + + + + + +Node9 + + +main_func + + + + + +Node8->Node9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/effects_8h_ab80cf39e4b3e31a75657ba722018d9b9_icgraph_org.svg b/effects_8h_ab80cf39e4b3e31a75657ba722018d9b9_icgraph_org.svg new file mode 100644 index 0000000000..7833a1b536 --- /dev/null +++ b/effects_8h_ab80cf39e4b3e31a75657ba722018d9b9_icgraph_org.svg @@ -0,0 +1,142 @@ + + + + + + +note_vibrato_update + + + +Node1 + + +note_vibrato_update + + + + + +Node2 + + +process_notes + + + + + +Node1->Node2 + + + + + +Node3 + + +process_sequences + + + + + +Node2->Node3 + + + + + +Node4 + + +synthesis_execute + + + + + +Node3->Node4 + + + + + +Node5 + + +create_next_audio_frame_task + + + + + +Node4->Node5 + + + + + +Node6 + + +thread4_audio + + + + + +Node5->Node6 + + + + + +Node7 + + +thread3_video + + + + + +Node6->Node7 + + + + + +Node8 + + +thread1_idle + + + + + +Node7->Node8 + + + + + +Node9 + + +main_func + + + + + +Node8->Node9 + + + + + diff --git a/effects_8h_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.map b/effects_8h_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.map index 4fdeb34851..5ac998af62 100644 --- a/effects_8h_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.map +++ b/effects_8h_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.map @@ -1,4 +1,10 @@ - - + + + + + + + + diff --git a/effects_8h_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.md5 b/effects_8h_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.md5 index bfa91569d1..58775175f3 100644 --- a/effects_8h_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.md5 +++ b/effects_8h_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.md5 @@ -1 +1 @@ -1ffd40b6702e50a38b20e0f0efbd6d3c \ No newline at end of file +ec37cdc4a82c1e8fe699f548016f0223 \ No newline at end of file diff --git a/effects_8h_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.svg b/effects_8h_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.svg index 442c7e5477..805c88fe82 100644 --- a/effects_8h_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.svg +++ b/effects_8h_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph.svg @@ -4,18 +4,64 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sequence_player_process_sound - + Node1 - -sequence_player_process -_sound + +sequence_player_process +_sound @@ -23,16 +69,148 @@ Node2 - -process_sequences + +process_sequences Node1->Node2 - - + + + + +Node3 + + +synthesis_execute + + + + + +Node2->Node3 + + + + + +Node4 + + +create_next_audio_frame_task + + + + + +Node3->Node4 + + + + + +Node5 + + +thread4_audio + + + + + +Node4->Node5 + + + + + +Node6 + + +thread3_video + + + + +Node5->Node6 + + + + + +Node7 + + +thread1_idle + + + + + +Node6->Node7 + + + + + +Node8 + + +main_func + + + + + +Node7->Node8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/effects_8h_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph_org.svg b/effects_8h_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph_org.svg new file mode 100644 index 0000000000..85f33351da --- /dev/null +++ b/effects_8h_ac6b3be4c7d0c4a4f7f02153b12d59d38_icgraph_org.svg @@ -0,0 +1,128 @@ + + + + + + +sequence_player_process_sound + + + +Node1 + + +sequence_player_process +_sound + + + + + +Node2 + + +process_sequences + + + + + +Node1->Node2 + + + + + +Node3 + + +synthesis_execute + + + + + +Node2->Node3 + + + + + +Node4 + + +create_next_audio_frame_task + + + + + +Node3->Node4 + + + + + +Node5 + + +thread4_audio + + + + + +Node4->Node5 + + + + + +Node6 + + +thread3_video + + + + + +Node5->Node6 + + + + + +Node7 + + +thread1_idle + + + + + +Node6->Node7 + + + + + +Node8 + + +main_func + + + + + +Node7->Node8 + + + + + diff --git a/effects_8h_ad233b78e677de7deb61ad8146e56298a_icgraph.map b/effects_8h_ad233b78e677de7deb61ad8146e56298a_icgraph.map index 4bd12bc292..76f32a6ea3 100644 --- a/effects_8h_ad233b78e677de7deb61ad8146e56298a_icgraph.map +++ b/effects_8h_ad233b78e677de7deb61ad8146e56298a_icgraph.map @@ -1,5 +1,11 @@ - - - + + + + + + + + + diff --git a/effects_8h_ad233b78e677de7deb61ad8146e56298a_icgraph.md5 b/effects_8h_ad233b78e677de7deb61ad8146e56298a_icgraph.md5 index cf288ca664..087c159f38 100644 --- a/effects_8h_ad233b78e677de7deb61ad8146e56298a_icgraph.md5 +++ b/effects_8h_ad233b78e677de7deb61ad8146e56298a_icgraph.md5 @@ -1 +1 @@ -a22c5cce2c70d6a98750ce07a92ca701 \ No newline at end of file +e2e02b8f8214721a8bc6e2fd38838dd9 \ No newline at end of file diff --git a/effects_8h_ad233b78e677de7deb61ad8146e56298a_icgraph.svg b/effects_8h_ad233b78e677de7deb61ad8146e56298a_icgraph.svg index d4550d16b2..58b8e16dd8 100644 --- a/effects_8h_ad233b78e677de7deb61ad8146e56298a_icgraph.svg +++ b/effects_8h_ad233b78e677de7deb61ad8146e56298a_icgraph.svg @@ -4,18 +4,64 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sequence_channel_process_sound - + Node1 - -sequence_channel_process -_sound + +sequence_channel_process +_sound @@ -23,32 +69,164 @@ Node2 - -sequence_player_process -_sound + +sequence_player_process +_sound Node1->Node2 - - + + Node3 - -process_sequences + +process_sequences Node2->Node3 - - + + + + +Node4 + + +synthesis_execute + + + + + +Node3->Node4 + + + + + +Node5 + + +create_next_audio_frame_task + + + + + +Node4->Node5 + + + + + +Node6 + + +thread4_audio + + + + + +Node5->Node6 + + + + + +Node7 + + +thread3_video + + + + +Node6->Node7 + + + + + +Node8 + + +thread1_idle + + + + + +Node7->Node8 + + + + + +Node9 + + +main_func + + + + + +Node8->Node9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/effects_8h_ad233b78e677de7deb61ad8146e56298a_icgraph_org.svg b/effects_8h_ad233b78e677de7deb61ad8146e56298a_icgraph_org.svg new file mode 100644 index 0000000000..a3514b4038 --- /dev/null +++ b/effects_8h_ad233b78e677de7deb61ad8146e56298a_icgraph_org.svg @@ -0,0 +1,144 @@ + + + + + + +sequence_channel_process_sound + + + +Node1 + + +sequence_channel_process +_sound + + + + + +Node2 + + +sequence_player_process +_sound + + + + + +Node1->Node2 + + + + + +Node3 + + +process_sequences + + + + + +Node2->Node3 + + + + + +Node4 + + +synthesis_execute + + + + + +Node3->Node4 + + + + + +Node5 + + +create_next_audio_frame_task + + + + + +Node4->Node5 + + + + + +Node6 + + +thread4_audio + + + + + +Node5->Node6 + + + + + +Node7 + + +thread3_video + + + + + +Node6->Node7 + + + + + +Node8 + + +thread1_idle + + + + + +Node7->Node8 + + + + + +Node9 + + +main_func + + + + + +Node8->Node9 + + + + + diff --git a/external_8h_source.html b/external_8h_source.html index 4c9a706d4e..e2d0f657a9 100644 --- a/external_8h_source.html +++ b/external_8h_source.html @@ -515,7 +515,7 @@
s16 Vec3s[3]
Definition: common_structs.h:8
struct Unk_800E9F7C D_800E9F7C[4]
Definition: external.c:86
void func_800CB2C4(void)
Definition: external.c:4048
-
void func_800CBC24(void)
Definition: port_eu.c:277
+
void func_800CBC24(void)
Definition: port_eu.c:259
void func_800C5CB8(void)
Definition: external.c:2336
u8 D_800E9F2C[8]
Definition: external.c:72
void func_800C41CC(u8, struct Unk_80191420 *)
Definition: external.c:1545
@@ -532,7 +532,7 @@
void func_800C92CC(u8, u32)
Definition: external.c:3418
void func_800CA984(u8)
Definition: external.c:3860
void func_800CA270(void)
Definition: external.c:3731
-
OSMesgQueue * D_800EA3B4
Definition: port_eu.c:28
+
OSMesgQueue * D_800EA3B4
Definition: port_eu.c:32
void func_800CA2B8(u8)
Definition: external.c:3739
s32 D_800E9E14[4]
Definition: external.c:49
u8 D_800E9DA0
Definition: external.c:39
@@ -584,7 +584,7 @@
void func_800CA0B8(void)
Definition: external.c:3685
u8 D_800EA1DC
Definition: external.c:199
void func_800CB134(void)
Definition: external.c:4004
-
OSMesgQueue * D_800EA3B0
Definition: port_eu.c:27
+
OSMesgQueue * D_800EA3B0
Definition: port_eu.c:31
void func_800C76C0(u8)
Definition: external.c:2878
void func_800C284C(u8, u8, u8, u16)
s32 D_800E9E34[8]
Definition: external.c:51
diff --git a/gbi_8h__dep__incl.md5 b/gbi_8h__dep__incl.md5 index 96799c4f7f..5e9e122059 100644 --- a/gbi_8h__dep__incl.md5 +++ b/gbi_8h__dep__incl.md5 @@ -1 +1 @@ -351b4427a149ad9c68d5af1963267139 \ No newline at end of file +343da4181e61f6ae3e223a34c40003c5 \ No newline at end of file diff --git a/gbi_8h__dep__incl.svg b/gbi_8h__dep__incl.svg index 5e77f05dc6..f10d697852 100644 --- a/gbi_8h__dep__incl.svg +++ b/gbi_8h__dep__incl.svg @@ -919,48 +919,48 @@ var sectionId = 'dynsection-1'; - + -Node46 +Node47 src/audio/seqplayer.c - + -Node36->Node46 +Node36->Node47 - + -Node49 +Node48 src/audio/synthesis.c - + -Node36->Node49 +Node36->Node48 - + -Node51 +Node46 src/audio/port_eu.c - + -Node36->Node51 +Node36->Node46 @@ -1072,15 +1072,15 @@ var sectionId = 'dynsection-1'; - + -Node40->Node46 +Node40->Node47 - + -Node40->Node49 +Node40->Node48 diff --git a/gbi_8h__dep__incl_org.svg b/gbi_8h__dep__incl_org.svg index 8d38941ced..9c1ba88110 100644 --- a/gbi_8h__dep__incl_org.svg +++ b/gbi_8h__dep__incl_org.svg @@ -873,48 +873,48 @@ - + -Node46 +Node47 src/audio/seqplayer.c - + -Node36->Node46 +Node36->Node47 - + -Node49 +Node48 src/audio/synthesis.c - + -Node36->Node49 +Node36->Node48 - + -Node51 +Node46 src/audio/port_eu.c - + -Node36->Node51 +Node36->Node46 @@ -1026,15 +1026,15 @@ - + -Node40->Node46 +Node40->Node47 - + -Node40->Node49 +Node40->Node48 diff --git a/globals_c.html b/globals_c.html index 3d8c38d34d..f17d77d0d8 100644 --- a/globals_c.html +++ b/globals_c.html @@ -309,8 +309,8 @@

- c -

diff --git a/globals_defs_s.html b/globals_defs_s.html index a83642dbcd..949aa4bf76 100644 --- a/globals_defs_s.html +++ b/globals_defs_s.html @@ -90,6 +90,9 @@

- s -