From 0a2d4a256da6f5858e3fcdbd45e150536a9d3a56 Mon Sep 17 00:00:00 2001 From: couriersud Date: Sat, 27 May 2017 22:13:52 +0200 Subject: [PATCH] Fix issues identified by Vas and LordKale4: - made local netlists in Cheeky Mouse static - replace stdlib rand by 16 bit galois lfsr (nw) --- src/lib/netlist/devices/nlid_proxy.cpp | 1 + src/lib/netlist/plib/pfunction.cpp | 3 +-- src/lib/netlist/plib/pfunction.h | 12 ++++++++++++ src/mame/audio/nl_cheekyms.cpp | 4 ++-- 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 #include -#include namespace plib { @@ -204,7 +203,7 @@ double pfunction::evaluate(const std::vector &values) OP(SIN, 0, std::sin(ST2)); OP(COS, 0, std::cos(ST2)); case RAND: - stack[ptr++] = static_cast(rand()) / static_cast(RAND_MAX); + stack[ptr++] = lfsr_random(); break; case PUSH_INPUT: stack[ptr++] = values[static_cast(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 &inputs, const std::vector &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(m_lfsr) / static_cast(0xffffu); + } + std::vector 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 *")