diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/netlist/devices/nld_74125.cpp | 2 | ||||
-rw-r--r-- | src/lib/netlist/devices/nld_roms.cpp | 72 | ||||
-rw-r--r-- | src/lib/netlist/nltypes.h | 83 |
3 files changed, 81 insertions, 76 deletions
diff --git a/src/lib/netlist/devices/nld_74125.cpp b/src/lib/netlist/devices/nld_74125.cpp index 92a800d7038..4a8f7960ff8 100644 --- a/src/lib/netlist/devices/nld_74125.cpp +++ b/src/lib/netlist/devices/nld_74125.cpp @@ -76,7 +76,7 @@ namespace netlist nld_power_pins m_power_pins; }; - struct desc_74125 + struct desc_74125 : public desc_base { using invert_g = desc_const<1>; using ts_off_on = time_ns<11>; diff --git a/src/lib/netlist/devices/nld_roms.cpp b/src/lib/netlist/devices/nld_roms.cpp index 12791b37401..fd4e046833f 100644 --- a/src/lib/netlist/devices/nld_roms.cpp +++ b/src/lib/netlist/devices/nld_roms.cpp @@ -31,17 +31,18 @@ namespace netlist NETLIB_CONSTRUCTOR(generic_prom) , m_enabled(*this, "m_enabled", true) , m_A(*this, 0, "A{}", NETLIB_DELEGATE(generic_prom, addr)) - , m_CEQ(*this, 1, D::chip_enable_mask ^ static_cast<size_t>(0xffff), pstring("CE{}"), + , m_CEQ(*this, 1, + D::chip_enable_mask::value ^ static_cast<size_t>(0xffff), pstring("CE{}"), std::array<nldelegate, 3>{ NETLIB_DELEGATE(generic_prom, ce<0>), NETLIB_DELEGATE(generic_prom, ce<1>), NETLIB_DELEGATE(generic_prom, ce<2>)}) - , m_O(*this, D::data_name_offset, "O{}") + , m_O(*this, D::data_name_offset::value, "O{}") , m_ROM(*this, "ROM") , m_power_pins(*this) { } - using data_type = typename plib::least_type_for_bits<D::data_width>::type; + using data_type = typename plib::least_type_for_bits<D::data_width::value>::type; private: @@ -49,9 +50,10 @@ namespace netlist inline NETLIB_HANDLERI(ce) { using cet = typename D::chip_enable_time; - m_enabled = (m_CEQ() == D::chip_enable_mask); + m_enabled = (m_CEQ() == D::chip_enable_mask::value); const auto delay = m_enabled ? D::access_time::value() : cet::value(N); - const data_type o = m_enabled ? m_ROM[m_A()] : (1 << D::data_width) - 1; // FIXME tristate ! + const data_type o = m_enabled ? m_ROM[m_A()] : + (1 << D::data_width::value) - 1; // FIXME tristate ! m_O.push(o, delay); } @@ -72,27 +74,27 @@ namespace netlist } state_var<bool> m_enabled; - object_array_t<logic_input_t, D::address_width> m_A; - object_array_t<logic_input_t, D::chip_enable_inputs> m_CEQ; - object_array_t<typename D::output_type, D::data_width> m_O; + object_array_t<logic_input_t, D::address_width::value> m_A; + object_array_t<logic_input_t, D::chip_enable_inputs::value> m_CEQ; + object_array_t<typename D::output_type, D::data_width::value> m_O; - param_rom_t<uint8_t, D::address_width, D::data_width> m_ROM; + param_rom_t<uint8_t, D::address_width::value, D::data_width::value> m_ROM; nld_power_pins m_power_pins; }; - struct desc_82S126 + struct desc_82S126 : public desc_base { - static constexpr const size_t address_width = 8; - static constexpr const size_t data_width = 4; - static constexpr const size_t data_name_offset = 1; // O1, O2, .. - static constexpr const size_t chip_enable_inputs = 2; + using address_width = desc_const<8>; + using data_width = desc_const<4>; + using data_name_offset = desc_const<1>; // O1, O2, .. + using chip_enable_inputs = desc_const<2>; // MATCH_MASK : all 0 ==> all bits inverted - static constexpr const size_t chip_enable_mask = 0x00; + using chip_enable_mask = desc_const<0x00>; - using chip_enable_time = times_ns2<25, 25>; - using access_time = time_ns<40>; + using chip_enable_time = times_ns2<25, 25>; + using access_time = time_ns<40>; - using output_type = logic_output_t; + using output_type = logic_output_t; }; struct desc_74S287 : public desc_82S126 @@ -102,37 +104,37 @@ namespace netlist static constexpr const size_t data_name_offset = 0; // O0, O1, .. }; - struct desc_82S123 + struct desc_82S123 : public desc_base { // FIXME: tristate outputs, add 82S23 (open collector) - static constexpr const size_t address_width = 5; - static constexpr const size_t data_width = 8; - static constexpr const size_t data_name_offset = 1; // O1, O2, .. - static constexpr const size_t chip_enable_inputs = 1; + using address_width = desc_const<5>; + using data_width = desc_const<8>; + using data_name_offset = desc_const<1>; // O1, O2, .. + using chip_enable_inputs = desc_const<1>; // MATCH_MASK : all 0 ==> all bits inverted - static constexpr const size_t chip_enable_mask = 0x00; + using chip_enable_mask = desc_const<0x00>; - using chip_enable_time = times_ns1<35>; - using access_time = time_ns<45>; + using chip_enable_time = times_ns1<35>; + using access_time = time_ns<45>; - using output_type = logic_output_t; + using output_type = logic_output_t; }; - struct desc_2716 + struct desc_2716 : public desc_base { // FIXME: tristate outputs - static constexpr const size_t address_width = 11; - static constexpr const size_t data_width = 8; - static constexpr const size_t data_name_offset = 0; // O0, O1, .. + using address_width = desc_const<11>; + using data_width = desc_const<8>; + using data_name_offset = desc_const<0>; // O0, O1, .. - static constexpr const size_t chip_enable_inputs = 2; + using chip_enable_inputs = desc_const<2>; // MATCH_MASK : all 0 ==> all bits inverted - static constexpr const size_t chip_enable_mask = 0x00; + using chip_enable_mask = desc_const<0x00>; using chip_enable_time = times_ns2<450, 100>; //CE, OE - using access_time = time_ns<450>; + using access_time = time_ns<450>; - using output_type = logic_output_t; + using output_type = logic_output_t; }; diff --git a/src/lib/netlist/nltypes.h b/src/lib/netlist/nltypes.h index 2e1a4227177..7b45155ccfe 100644 --- a/src/lib/netlist/nltypes.h +++ b/src/lib/netlist/nltypes.h @@ -162,54 +162,57 @@ namespace netlist template <typename T> inline constexpr netlist_time NLTIME_FROM_US(T &&t) noexcept { return netlist_time::from_usec(t); } template <typename T> inline constexpr netlist_time NLTIME_FROM_MS(T &&t) noexcept { return netlist_time::from_msec(t); } - /// \brief: used to hold one static netlist_time value - /// - template<netlist_time::internal_type value0> - struct times_ns1 + struct desc_base { - static constexpr netlist_time value(std::size_t N = 0) + /// \brief: used to hold one static netlist_time value + /// + template<netlist_time::internal_type value0> + struct times_ns1 { - plib::unused_var(N); - return NLTIME_FROM_NS(value0); - } - }; + static constexpr netlist_time value(std::size_t N = 0) + { + plib::unused_var(N); + return NLTIME_FROM_NS(value0); + } + }; - template <netlist_time::internal_type value0> - using time_ns = times_ns1<value0>; + template <netlist_time::internal_type value0> + using time_ns = times_ns1<value0>; - /// \brief: used to hold two static netlist_time values - /// - template<netlist_time::internal_type value0, - netlist_time::internal_type value1> - struct times_ns2 - { - static constexpr netlist_time value(std::size_t N) + /// \brief: used to hold two static netlist_time values + /// + template<netlist_time::internal_type value0, + netlist_time::internal_type value1> + struct times_ns2 { - return NLTIME_FROM_NS(N == 0 ? value0 : value1); - } - }; + static constexpr netlist_time value(std::size_t N) + { + return NLTIME_FROM_NS(N == 0 ? value0 : value1); + } + }; - /// \brief: used to hold two static netlist_time values - /// - template<netlist_time::internal_type value0, - netlist_time::internal_type value1, - netlist_time::internal_type value2> - struct times_ns3 - { - static constexpr netlist_time value(std::size_t N) + /// \brief: used to hold two static netlist_time values + /// + template<netlist_time::internal_type value0, + netlist_time::internal_type value1, + netlist_time::internal_type value2> + struct times_ns3 { - return NLTIME_FROM_NS(N == 0 ? value0 : - N == 1 ? value1 : - value2); - } - }; + static constexpr netlist_time value(std::size_t N) + { + return NLTIME_FROM_NS(N == 0 ? value0 : + N == 1 ? value1 : + value2); + } + }; - /// \brief: used define a constant in device description struct - /// - /// See the 74125 implementation - /// - template <std::size_t V> - using desc_const = std::integral_constant<std::size_t, V>; + /// \brief: used define a constant in device description struct + /// + /// See the 74125 implementation + /// + template <std::size_t V> + using desc_const = std::integral_constant<std::size_t, V>; + }; } // namespace netlist |