summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2017-05-27 22:13:52 +0200
committer couriersud <couriersud@gmx.org>2017-05-27 22:17:35 +0200
commit0a2d4a256da6f5858e3fcdbd45e150536a9d3a56 (patch)
treea9b5f1e467f2817a8bb217ab96cab384eeb68a57
parente110d9a2df8f3000504a855e1382deb994f4b4e0 (diff)
Fix issues identified by Vas and LordKale4:
- made local netlists in Cheeky Mouse static - replace stdlib rand by 16 bit galois lfsr (nw)
-rw-r--r--src/lib/netlist/devices/nlid_proxy.cpp1
-rw-r--r--src/lib/netlist/plib/pfunction.cpp3
-rw-r--r--src/lib/netlist/plib/pfunction.h12
-rw-r--r--src/mame/audio/nl_cheekyms.cpp4
4 files changed, 16 insertions, 4 deletions
diff --git a/src/lib/netlist/devices/nlid_proxy.cpp b/src/lib/netlist/devices/nlid_proxy.cpp
index c71e9f2919e..4c3ec6f67aa 100644
--- a/src/lib/netlist/devices/nlid_proxy.cpp
+++ b/src/lib/netlist/devices/nlid_proxy.cpp
@@ -121,6 +121,7 @@ namespace netlist
f = true;
}
}
+ //FIXME: Use power terminals!
if (!f)
log().warning(MW_1_NO_POWER_TERMINALS_ON_DEVICE_1, out_proxied->device().name());
else
diff --git a/src/lib/netlist/plib/pfunction.cpp b/src/lib/netlist/plib/pfunction.cpp
index 42f767ef562..a1cfb8f3366 100644
--- a/src/lib/netlist/plib/pfunction.cpp
+++ b/src/lib/netlist/plib/pfunction.cpp
@@ -12,7 +12,6 @@
#include <cmath>
#include <stack>
-#include <stdlib.h>
namespace plib {
@@ -204,7 +203,7 @@ double pfunction::evaluate(const std::vector<double> &values)
OP(SIN, 0, std::sin(ST2));
OP(COS, 0, std::cos(ST2));
case RAND:
- stack[ptr++] = static_cast<double>(rand()) / static_cast<double>(RAND_MAX);
+ stack[ptr++] = lfsr_random();
break;
case PUSH_INPUT:
stack[ptr++] = values[static_cast<unsigned>(rc.m_param)];
diff --git a/src/lib/netlist/plib/pfunction.h b/src/lib/netlist/plib/pfunction.h
index 50e279cf034..58f47904b62 100644
--- a/src/lib/netlist/plib/pfunction.h
+++ b/src/lib/netlist/plib/pfunction.h
@@ -44,6 +44,7 @@ namespace plib {
};
public:
pfunction()
+ : m_lfsr(0xACE1u)
{
}
@@ -79,7 +80,18 @@ namespace plib {
void compile_postfix(const std::vector<pstring> &inputs,
const std::vector<pstring> &cmds, const pstring &expr);
+ double lfsr_random()
+ {
+ std::uint16_t lsb = m_lfsr & 1;
+ m_lfsr >>= 1;
+ if (lsb)
+ m_lfsr ^= 0xB400u; // taps 15, 13, 12, 10
+ return static_cast<double>(m_lfsr) / static_cast<double>(0xffffu);
+ }
+
std::vector<rpn_inst> m_precompiled; //!< precompiled expression
+
+ std::uint16_t m_lfsr; //!< lfsr used for generating random numbers
};
diff --git a/src/mame/audio/nl_cheekyms.cpp b/src/mame/audio/nl_cheekyms.cpp
index cb93a6b6b72..6caaf71d610 100644
--- a/src/mame/audio/nl_cheekyms.cpp
+++ b/src/mame/audio/nl_cheekyms.cpp
@@ -41,7 +41,7 @@
* there is nothing to amplify currently.
*/
-NETLIST_START(cheekyms_schematics)
+static NETLIST_START(cheekyms_schematics)
// Shared chips
TTL_7404_DIP(IC1)
@@ -239,7 +239,7 @@ NETLIST_END()
*
*/
-NETLIST_START(NOISE)
+static NETLIST_START(NOISE)
CS(FC, 0)
PARAM(FC.FUNC, "0.0000001 rand *")