trunk/src/emu/netlist/devices/net_lib.c
| r31065 | r31066 | |
| 101 | 101 | ENTRY(gnd, GND, "-") |
| 102 | 102 | ENTRY(switch2, SWITCH2, "-") |
| 103 | 103 | ENTRY(nicRSFF, NETDEV_RSFF, "+S,R") |
| 104 | ENTRY(4020, CD_4020, "+IP,RESET,VDD,VSS") |
| 105 | //ENTRY(4066, CD_4066, "+A,B") |
| 104 | 106 | ENTRY(7400, TTL_7400_NAND, "+A,B") |
| 105 | 107 | ENTRY(7402, TTL_7402_NOR, "+A,B") |
| 106 | 108 | ENTRY(7404, TTL_7404_INVERT, "+A") |
| r31065 | r31066 | |
| 127 | 129 | ENTRY(SN74LS629, SN74LS629, "CAP") |
| 128 | 130 | ENTRY(9316, TTL_9316, "+CLK,ENP,ENT,CLRQ,LOADQ,A,B,C,D") |
| 129 | 131 | ENTRY(NE555, NE555, "-") |
| 130 | | ENTRY(4066_dip, CD_4066_DIP, "-") |
| 132 | ENTRY(4020_dip, CD_4020_DIP, "-") |
| 133 | ENTRY(4066_dip, CD_4066_DIP, "-") |
| 131 | 134 | ENTRY(7400_dip, TTL_7400_DIP, "-") |
| 132 | 135 | ENTRY(7402_dip, TTL_7402_DIP, "-") |
| 133 | 136 | ENTRY(7404_dip, TTL_7404_DIP, "-") |
trunk/src/emu/netlist/devices/nld_4020.c
| r0 | r31066 | |
| 1 | /* |
| 2 | * nld_4020.c |
| 3 | * |
| 4 | */ |
| 5 | |
| 6 | #include "nld_4020.h" |
| 7 | |
| 8 | NETLIB_START(4020) |
| 9 | { |
| 10 | register_sub(sub, "sub"); |
| 11 | |
| 12 | register_input("RESET", m_RESET); |
| 13 | register_subalias("IP", sub.m_IP); |
| 14 | register_subalias("Q1", sub.m_Q[0]); |
| 15 | register_subalias("Q4", sub.m_Q[3]); |
| 16 | register_subalias("Q5", sub.m_Q[4]); |
| 17 | register_subalias("Q6", sub.m_Q[5]); |
| 18 | register_subalias("Q7", sub.m_Q[6]); |
| 19 | register_subalias("Q8", sub.m_Q[7]); |
| 20 | register_subalias("Q9", sub.m_Q[8]); |
| 21 | register_subalias("Q10", sub.m_Q[9]); |
| 22 | register_subalias("Q11", sub.m_Q[10]); |
| 23 | register_subalias("Q12", sub.m_Q[11]); |
| 24 | register_subalias("Q13", sub.m_Q[12]); |
| 25 | register_subalias("Q14", sub.m_Q[13]); |
| 26 | register_subalias("VDD", m_supply.m_vdd); |
| 27 | register_subalias("VSS", m_supply.m_vss); |
| 28 | } |
| 29 | |
| 30 | NETLIB_RESET(4020) |
| 31 | { |
| 32 | sub.do_reset(); |
| 33 | } |
| 34 | |
| 35 | |
| 36 | NETLIB_START(4020_sub) |
| 37 | { |
| 38 | register_input("IP", m_IP); |
| 39 | |
| 40 | register_output("Q1", m_Q[0]); |
| 41 | register_output("Q4", m_Q[3]); |
| 42 | register_output("Q5", m_Q[4]); |
| 43 | register_output("Q6", m_Q[5]); |
| 44 | register_output("Q7", m_Q[6]); |
| 45 | register_output("Q8", m_Q[8]); |
| 46 | register_output("Q9", m_Q[8]); |
| 47 | register_output("Q10", m_Q[9]); |
| 48 | register_output("Q11", m_Q[10]); |
| 49 | register_output("Q12", m_Q[11]); |
| 50 | register_output("Q13", m_Q[12]); |
| 51 | register_output("Q14", m_Q[13]); |
| 52 | |
| 53 | save(NAME(m_cnt)); |
| 54 | } |
| 55 | |
| 56 | NETLIB_RESET(4020_sub) |
| 57 | { |
| 58 | m_IP.set_state(netlist_input_t::STATE_INP_HL); |
| 59 | m_cnt = 0; |
| 60 | } |
| 61 | |
| 62 | NETLIB_UPDATE(4020_sub) |
| 63 | { |
| 64 | UINT8 cnt = m_cnt; |
| 65 | cnt = ( cnt + 1) & 0x3fff; |
| 66 | update_outputs(cnt); |
| 67 | m_cnt = cnt; |
| 68 | } |
| 69 | |
| 70 | NETLIB_UPDATE(4020) |
| 71 | { |
| 72 | |
| 73 | if (INPLOGIC(m_RESET)) |
| 74 | { |
| 75 | sub.m_cnt = 0; |
| 76 | static const netlist_time reset_time = netlist_time::from_nsec(140); |
| 77 | OUTLOGIC(sub.m_Q[0], 0, reset_time); |
| 78 | for (int i=3; i<14; i++) |
| 79 | OUTLOGIC(sub.m_Q[i], 0, reset_time); |
| 80 | } |
| 81 | |
| 82 | } |
| 83 | |
| 84 | inline NETLIB_FUNC_VOID(4020_sub, update_outputs, (const UINT16 cnt)) |
| 85 | { |
| 86 | const netlist_time out_delayQ1 = netlist_time::from_nsec(180); |
| 87 | const netlist_time out_delayQn = netlist_time::from_nsec(100); |
| 88 | |
| 89 | OUTLOGIC(m_Q[0], 0, out_delayQ1); |
| 90 | for (int i=3; i<14; i++) |
| 91 | OUTLOGIC(m_Q[i], (cnt >> i) & 1, out_delayQn); |
| 92 | } |
| 93 | |
| 94 | NETLIB_START(4020_dip) |
| 95 | { |
| 96 | NETLIB_NAME(4020)::start(); |
| 97 | |
| 98 | /* +--------------+ |
| 99 | * Q12 |1 ++ 16| VDD |
| 100 | * Q13 |2 15| Q11 |
| 101 | * Q14 |3 14| Q10 |
| 102 | * Q6 |4 4020 13| Q8 |
| 103 | * Q5 |5 12| Q9 |
| 104 | * Q7 |6 11| RESET |
| 105 | * Q4 |7 10| IP (Input pulses) |
| 106 | * VSS |8 9| Q1 |
| 107 | * +--------------+ |
| 108 | */ |
| 109 | |
| 110 | register_subalias("1", sub.m_Q[11]); |
| 111 | register_subalias("2", sub.m_Q[12]); |
| 112 | register_subalias("3", sub.m_Q[13]); |
| 113 | register_subalias("4", sub.m_Q[5]); |
| 114 | register_subalias("5", sub.m_Q[4]); |
| 115 | register_subalias("6", sub.m_Q[6]); |
| 116 | register_subalias("7", sub.m_Q[3]); |
| 117 | register_subalias("8", m_supply.m_vss); |
| 118 | |
| 119 | register_subalias("9", sub.m_Q[1]); |
| 120 | register_subalias("10", sub.m_IP); |
| 121 | register_subalias("11", m_RESET); |
| 122 | register_subalias("12", sub.m_Q[8]); |
| 123 | register_subalias("13", sub.m_Q[7]); |
| 124 | register_subalias("14", sub.m_Q[9]); |
| 125 | register_subalias("15", sub.m_Q[10]); |
| 126 | register_subalias("16", m_supply.m_vdd); |
| 127 | } |
| 128 | |
| 129 | NETLIB_UPDATE(4020_dip) |
| 130 | { |
| 131 | NETLIB_NAME(4020)::update(); |
| 132 | } |
| 133 | |
| 134 | NETLIB_RESET(4020_dip) |
| 135 | { |
| 136 | NETLIB_NAME(4020)::reset(); |
| 137 | } |
trunk/src/emu/netlist/devices/nld_4020.h
| r0 | r31066 | |
| 1 | // license:GPL-2.0+ |
| 2 | // copyright-holders:Couriersud |
| 3 | /* |
| 4 | * nld_4020.h |
| 5 | * |
| 6 | * CD4020: CMOS Ripple-Carry Binary Counters/Dividers |
| 7 | * |
| 8 | * +--------------+ |
| 9 | * Q12 |1 ++ 16| VDD |
| 10 | * Q13 |2 15| Q11 |
| 11 | * Q14 |3 14| Q10 |
| 12 | * Q6 |4 4020 13| Q8 |
| 13 | * Q5 |5 12| Q9 |
| 14 | * Q7 |6 11| RESET |
| 15 | * Q4 |7 10| IP (Input pulses) |
| 16 | * VSS |8 9| Q1 |
| 17 | * +--------------+ |
| 18 | * |
| 19 | * |
| 20 | * Naming conventions follow Texas Instruments datasheet |
| 21 | * |
| 22 | * FIXME: Timing depends on VDD-VSS |
| 23 | * This needs a cmos d-a/a-d proxy implementation. |
| 24 | * |
| 25 | */ |
| 26 | |
| 27 | #ifndef NLD_4020_H_ |
| 28 | #define NLD_4020_H_ |
| 29 | |
| 30 | #include "../nl_base.h" |
| 31 | #include "nld_cmos.h" |
| 32 | |
| 33 | #define CD_4020(_name, _IP, _RESET, _VDD, _VSS) \ |
| 34 | NET_REGISTER_DEV(4020, _name) \ |
| 35 | NET_CONNECT(_name, IP, _IP) \ |
| 36 | NET_CONNECT(_name, RESET, _RESET) \ |
| 37 | NET_CONNECT(_name, VDD, _VDD) \ |
| 38 | NET_CONNECT(_name, VSS, _VSS) |
| 39 | |
| 40 | #define CD_4020_DIP(_name) \ |
| 41 | NET_REGISTER_DEV(4020_dip, _name) |
| 42 | |
| 43 | NETLIB_SUBDEVICE(4020_sub, |
| 44 | ATTR_HOT void update_outputs(const UINT16 cnt); |
| 45 | |
| 46 | netlist_ttl_input_t m_IP; |
| 47 | |
| 48 | netlist_state_t<UINT16> m_cnt; |
| 49 | |
| 50 | netlist_ttl_output_t m_Q[14]; |
| 51 | ); |
| 52 | |
| 53 | NETLIB_DEVICE(4020, |
| 54 | NETLIB_NAME(4020_sub) sub; |
| 55 | NETLIB_NAME(vdd_vss) m_supply; |
| 56 | netlist_ttl_input_t m_RESET; |
| 57 | ); |
| 58 | |
| 59 | NETLIB_DEVICE_DERIVED(4020_dip, 4020, |
| 60 | ); |
| 61 | |
| 62 | #endif /* NLD_4020_H_ */ |