summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Couriersud <couriersud@users.noreply.github.com>2009-09-06 14:54:10 +0000
committer Couriersud <couriersud@users.noreply.github.com>2009-09-06 14:54:10 +0000
commitac6238dc595dcbd9823c304c61acb8fd20d4bea2 (patch)
tree661ff03397372e9e893b6ae4b88428f89a6a9f53 /src
parent872eabafb23b88deae2b9f78ff3aad32be95dcd6 (diff)
DSO_TASK_END now builds it's own dependence list.
- now simply DSO_TASK_END() ends a task - updated drivers accordingly - fixed dependence on disc_sys.c in sound.mak
Diffstat (limited to 'src')
-rw-r--r--src/emu/sound/disc_sys.c63
-rw-r--r--src/emu/sound/discrete.c7
-rw-r--r--src/emu/sound/discrete.h17
-rw-r--r--src/emu/sound/sound.mak1
-rw-r--r--src/mame/audio/dkong.c11
-rw-r--r--src/mame/audio/galaxian.c4
6 files changed, 82 insertions, 21 deletions
diff --git a/src/emu/sound/disc_sys.c b/src/emu/sound/disc_sys.c
index 05b10df3f16..ebecab2d6e7 100644
--- a/src/emu/sound/disc_sys.c
+++ b/src/emu/sound/disc_sys.c
@@ -29,13 +29,70 @@ struct dso_wavelog_context
char name[32];
};
+
+/*************************************
+ *
+ * Task node (main task execution)
+ *
+ *************************************/
+
+static DISCRETE_START( dso_task )
+{
+ discrete_task_context *task = (discrete_task_context *) node->context;
+ int inputnum;
+ linked_list_entry *node_entry;
+ linked_list_entry *step_entry;
+
+ /* Determine, which nodes in the task are referenced in the main task
+ * and add them to the list of nodes to be buffered for further processing
+ */
+ for (node_entry = task->list; node_entry != NULL; node_entry = node_entry->next)
+ {
+ node_description *node = (node_description *) node_entry->ptr;
+ int found = 0;
+
+ for (step_entry = node->info->step_list; step_entry != NULL; step_entry = step_entry->next)
+ {
+ node_description *snode = (node_description *) step_entry->ptr;
+
+ /* loop over all active inputs */
+ for (inputnum = 0; inputnum < snode->active_inputs; inputnum++)
+ {
+ int inputnode = snode->block->input_node[inputnum];
+ if IS_VALUE_A_NODE(inputnode)
+ {
+ if (NODE_DEFAULT_NODE(node->block->node) == NODE_DEFAULT_NODE(inputnode))
+ {
+ int i;
+ found = 0;
+ for (i = 0; i < task->numbuffered; i++)
+ if (task->nodes[i] == inputnode)
+ found = 1;
+ if (!found)
+ {
+ if (task->numbuffered >= DISCRETE_MAX_TASK_OUTPUTS)
+ fatalerror("dso_task_start - Number of maximum buffered nodes exceeded");
+
+ discrete_log(node->info, "dso_task_start - buffering %d(%d) in task %p referenced by %d", NODE_INDEX(inputnode), NODE_CHILD_NODE_NUM(inputnode), task, NODE_INDEX(snode->node));
+ task->node_buf[task->numbuffered] = auto_alloc_array(node->info->device->machine, double, 2048);
+ task->dest[task->numbuffered] = (double **) &snode->input[inputnum];
+ task->nodes[task->numbuffered] = inputnode;
+ task->numbuffered++;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
static DISCRETE_STEP( dso_task )
{
- discrete_task_context *ctx = (discrete_task_context *) node->context;
+ discrete_task_context *task = (discrete_task_context *) node->context;
int i;
- for (i = 0; i < ctx->numbuffered; i++)
- *(ctx->ptr[i]++) = DISCRETE_INPUT(i);
+ for (i = 0; i < task->numbuffered; i++)
+ *(task->ptr[i]++) = **task->dest[i]; //DISCRETE_INPUT(i);
}
static DISCRETE_RESET( dso_task )
diff --git a/src/emu/sound/discrete.c b/src/emu/sound/discrete.c
index 6134a9b5d2c..fc591c0de6a 100644
--- a/src/emu/sound/discrete.c
+++ b/src/emu/sound/discrete.c
@@ -180,7 +180,7 @@ static const discrete_module module_list[] =
/* parallel modules */
{ DSO_TASK_START ,"DSO_TASK_START" , 0 ,0 ,NULL ,NULL ,NULL ,NULL },
- { DSO_TASK_END ,"DSO_TASK_END" , 0 ,0 ,dso_task_reset ,dso_task_step ,NULL ,NULL },
+ { DSO_TASK_END ,"DSO_TASK_END" , 0 ,0 ,dso_task_reset ,dso_task_step ,dso_task_start ,NULL },
{ DSO_TASK_SYNC ,"DSO_TASK_SYNC" , 0 ,0 ,NULL ,NULL ,NULL ,NULL },
/* nop */
@@ -832,6 +832,9 @@ static void init_nodes(discrete_info *info, linked_list_entry *block_list, const
if (task_node_list_ptr == NULL)
fatalerror("init_nodes() - NO DISCRETE_START_TASK.");
task = auto_alloc_clear(info->device->machine, discrete_task_context);
+#if 1
+ task->numbuffered = 0;
+#else
task->numbuffered = node->active_inputs;
{
int i;
@@ -841,6 +844,7 @@ static void init_nodes(discrete_info *info, linked_list_entry *block_list, const
task->dest[i] = (double **) &node->input[i];
}
}
+#endif
task->list = task_node_list;
linked_list_add(info, &task_list_ptr, task);
node->context = task;
@@ -906,7 +910,6 @@ static void init_nodes(discrete_info *info, linked_list_entry *block_list, const
}
-
/*************************************
*
* Find and attach all input nodes
diff --git a/src/emu/sound/discrete.h b/src/emu/sound/discrete.h
index 5aa243cf092..a029d537bd9 100644
--- a/src/emu/sound/discrete.h
+++ b/src/emu/sound/discrete.h
@@ -3678,10 +3678,11 @@ struct _discrete_task_context
{
linked_list_entry *list;
- int numbuffered;
- double *ptr[DISCRETE_MAX_TASK_OUTPUTS];
- double *node_buf[DISCRETE_MAX_TASK_OUTPUTS];
- double **dest[DISCRETE_MAX_TASK_OUTPUTS];
+ int numbuffered;
+ double *ptr[DISCRETE_MAX_TASK_OUTPUTS];
+ double *node_buf[DISCRETE_MAX_TASK_OUTPUTS];
+ int nodes[DISCRETE_MAX_TASK_OUTPUTS];
+ double **dest[DISCRETE_MAX_TASK_OUTPUTS];
};
@@ -4414,12 +4415,8 @@ enum
/* parallel tasks */
-#define DISCRETE_TASK_START() { NODE_SPECIAL, DSO_TASK_START, 0, { 0 }, { 0 }, NULL, "DISCRETE_TASK_START" },
-#define DISCRETE_TASK_END(BNODE1) { NODE_SPECIAL, DSO_TASK_END , 1, { BNODE1 }, { BNODE1 }, NULL, "DISCRETE_TASK_END" },
-#define DISCRETE_TASK_END2(BNODE1,BNODE2) { NODE_SPECIAL, DSO_TASK_END , 2, { BNODE1,BNODE2 }, { BNODE1,BNODE2 }, NULL, "DISCRETE_TASK_END2" },
-#define DISCRETE_TASK_END3(BNODE1,BNODE2,BNODE3) { NODE_SPECIAL, DSO_TASK_END , 3, { BNODE1,BNODE2,BNODE3 }, { BNODE1,BNODE2,BNODE3 }, NULL, "DISCRETE_TASK_END3" },
-#define DISCRETE_TASK_END4(BNODE1,BNODE2,BNODE3,BNODE4) { NODE_SPECIAL, DSO_TASK_END , 4, { BNODE1,BNODE2,BNODE3,BNODE4 }, { BNODE1,BNODE2,BNODE3,BNODE4 }, NULL, "DISCRETE_TASK_END4" },
-#define DISCRETE_TASK_END5(BNODE1,BNODE2,BNODE3,BNODE4,BNODE5) { NODE_SPECIAL, DSO_TASK_END , 5, { BNODE1,BNODE2,BNODE3,BNODE4,BNODE5 }, { BNODE1,BNODE2,BNODE3,BNODE4,BNODE5 }, NULL, "DISCRETE_TASK_END5" },
+#define DISCRETE_TASK_START() { NODE_SPECIAL, DSO_TASK_START,0, { 0 }, { 0 }, NULL, "DISCRETE_TASK_START" },
+#define DISCRETE_TASK_END() { NODE_SPECIAL, DSO_TASK_END , 1, { 0 }, { 0 }, NULL, "DISCRETE_TASK_END" },
//#define DISCRETE_TASK_SYNC() { NODE_SPECIAL, DSO_TASK_SYNC, 0, { 0 }, { 0 }, NULL, "DISCRETE_TASK_SYNC" },
/* output */
diff --git a/src/emu/sound/sound.mak b/src/emu/sound/sound.mak
index b4681f3e618..05058e12e60 100644
--- a/src/emu/sound/sound.mak
+++ b/src/emu/sound/sound.mak
@@ -78,6 +78,7 @@ endif
$(SOUNDOBJ)/discrete.o: $(SOUNDSRC)/discrete.c \
$(SOUNDSRC)/discrete.h \
$(SOUNDSRC)/disc_dev.c \
+ $(SOUNDSRC)/disc_sys.c \
$(SOUNDSRC)/disc_flt.c \
$(SOUNDSRC)/disc_inp.c \
$(SOUNDSRC)/disc_mth.c \
diff --git a/src/mame/audio/dkong.c b/src/mame/audio/dkong.c
index 9356d108863..5742e621787 100644
--- a/src/mame/audio/dkong.c
+++ b/src/mame/audio/dkong.c
@@ -384,7 +384,7 @@ static DISCRETE_SOUND_START(dkong2b)
DISCRETE_RCINTEGRATE(NODE_22,NODE_20,DK_R5, RES_2_PARALLEL(DK_R4+DK_R3,DK_R6),0,DK_C19,DK_SUP_V,DISC_RC_INTEGRATE_TYPE1)
DISCRETE_MULTIPLY(DS_OUT_SOUND0,1,NODE_22,DK_R3/R_SERIES(DK_R3,DK_R4))
- DISCRETE_TASK_END(DS_OUT_SOUND0)
+ DISCRETE_TASK_END()
/************************************************/
/* Jump */
@@ -418,7 +418,7 @@ static DISCRETE_SOUND_START(dkong2b)
DISCRETE_RCINTEGRATE(NODE_39,NODE_38,DK_R27, RES_2_PARALLEL(DK_R28,DK_R26+DK_R25),0,DK_C16,DK_SUP_V,DISC_RC_INTEGRATE_TYPE1)
DISCRETE_MULTIPLY(DS_OUT_SOUND1,1,NODE_39,DK_R25/(DK_R26+DK_R25))
- DISCRETE_TASK_END(DS_OUT_SOUND1)
+ DISCRETE_TASK_END()
/************************************************/
/* Walk */
@@ -444,7 +444,7 @@ static DISCRETE_SOUND_START(dkong2b)
/* Filter and divide - omitted C22 */
DISCRETE_CRFILTER(NODE_61, 1, NODE_60, DK_R15+DK_R16, DK_C23)
DISCRETE_MULTIPLY(DS_OUT_SOUND2, 1, NODE_61, DK_R15/(DK_R15+DK_R16))
- DISCRETE_TASK_END(DS_OUT_SOUND2)
+ DISCRETE_TASK_END()
/************************************************/
/* DAC */
@@ -474,7 +474,7 @@ static DISCRETE_SOUND_START(dkong2b)
#else
DISCRETE_MULTIPLY(DS_OUT_DAC, 1, NODE_73, DS_ADJ_DAC)
#endif
- DISCRETE_TASK_END(DS_OUT_DAC)
+ DISCRETE_TASK_END()
/************************************************/
/* Amplifier */
@@ -493,6 +493,9 @@ static DISCRETE_SOUND_START(dkong2b)
DISCRETE_OUTPUT(NODE_288, 32767.0/5.0 * 10)
#else
DISCRETE_OUTPUT(NODE_296, 32767.0/5.0 * 3.41)
+ /* Test */
+ //DISCRETE_CSVLOG2(NODE_296, NODE_288)
+ //DISCRETE_WAVELOG1(NODE_296, 32767.0/5.0 * 3.41)
#endif
DISCRETE_SOUND_END
diff --git a/src/mame/audio/galaxian.c b/src/mame/audio/galaxian.c
index edf03d2b616..f73e6cbde5b 100644
--- a/src/mame/audio/galaxian.c
+++ b/src/mame/audio/galaxian.c
@@ -308,7 +308,7 @@ static DISCRETE_SOUND_START(galaxian)
DISCRETE_BITS_DECODE(NODE_133, NODE_132, 0, 3, TTL_OUT) /* QA-QD 74393 */
/* End of this task */
- DISCRETE_TASK_END5(NODE_120, NODE_SUB(133,0),NODE_SUB(133,1),NODE_SUB(133,2),NODE_SUB(133,3))
+ DISCRETE_TASK_END()
/* Group Hit and Fire */
@@ -355,7 +355,7 @@ static DISCRETE_SOUND_START(galaxian)
DISCRETE_RCDISC5(NODE_182, NODE_181, NODE_171, (GAL_R41), GAL_C25)
/* End of task */
- DISCRETE_TASK_END2(NODE_157, NODE_182)
+ DISCRETE_TASK_END()
/************************************************/
/* FINAL MIX */