trunk/src/emu/netlist/devices/nld_7493.c
| r0 | r26499 | |
| 1 | /* |
| 2 | * nld_7493.c |
| 3 | * |
| 4 | */ |
| 5 | |
| 6 | #include "nld_7493.h" |
| 7 | |
| 8 | NETLIB_START(nic7493) |
| 9 | { |
| 10 | register_sub(A, "A"); |
| 11 | register_sub(B, "B"); |
| 12 | register_sub(C, "C"); |
| 13 | register_sub(D, "D"); |
| 14 | |
| 15 | register_subalias("CLKA", A.m_I); |
| 16 | register_subalias("CLKB", B.m_I); |
| 17 | register_input("R1", m_R1); |
| 18 | register_input("R2", m_R2); |
| 19 | |
| 20 | register_subalias("QA", A.m_Q); |
| 21 | register_subalias("QB", B.m_Q); |
| 22 | register_subalias("QC", C.m_Q); |
| 23 | register_subalias("QD", D.m_Q); |
| 24 | |
| 25 | register_link_internal(C, C.m_I, B.m_Q, netlist_input_t::STATE_INP_HL); |
| 26 | register_link_internal(D, D.m_I, C.m_Q, netlist_input_t::STATE_INP_HL); |
| 27 | } |
| 28 | |
| 29 | NETLIB_START(nic7493ff) |
| 30 | { |
| 31 | register_input("CLK", m_I, netlist_input_t::STATE_INP_HL); |
| 32 | register_output("Q", m_Q); |
| 33 | } |
| 34 | |
| 35 | NETLIB_UPDATE(nic7493ff) |
| 36 | { |
| 37 | if (m_reset == 0) |
| 38 | OUTLOGIC(m_Q, !m_Q.net().new_Q(), NLTIME_FROM_NS(18)); |
| 39 | } |
| 40 | |
| 41 | NETLIB_UPDATE(nic7493) |
| 42 | { |
| 43 | netlist_sig_t r = INPLOGIC(m_R1) & INPLOGIC(m_R2); |
| 44 | |
| 45 | if (r) |
| 46 | { |
| 47 | //printf("%s reset\n", name()); |
| 48 | A.m_reset = B.m_reset = C.m_reset = D.m_reset = 1; |
| 49 | A.m_I.inactivate(); |
| 50 | B.m_I.inactivate(); |
| 51 | OUTLOGIC(A.m_Q, 0, NLTIME_FROM_NS(40)); |
| 52 | OUTLOGIC(B.m_Q, 0, NLTIME_FROM_NS(40)); |
| 53 | OUTLOGIC(C.m_Q, 0, NLTIME_FROM_NS(40)); |
| 54 | OUTLOGIC(D.m_Q, 0, NLTIME_FROM_NS(40)); |
| 55 | } |
| 56 | else |
| 57 | { |
| 58 | A.m_reset = B.m_reset = C.m_reset = D.m_reset = 0; |
| 59 | A.m_I.activate_hl(); |
| 60 | B.m_I.activate_hl(); |
| 61 | //printf("%s enable\n", name()); |
| 62 | } |
| 63 | } |
trunk/src/emu/netlist/devices/nld_7493.h
| r0 | r26499 | |
| 1 | // license:GPL-2.0+ |
| 2 | // copyright-holders:Couriersud |
| 3 | /* |
| 4 | * nld_7493.h |
| 5 | * |
| 6 | * DM7493: Quad 2-Input NAND Gates |
| 7 | * |
| 8 | * +--------------+ |
| 9 | * B |1 ++ 14| A |
| 10 | * R01 |2 13| NC |
| 11 | * R02 |3 12| QA |
| 12 | * NC |4 7493 11| QD |
| 13 | * VCC |5 10| GND |
| 14 | * NC |6 9| QB |
| 15 | * NC |7 8| QC |
| 16 | * +--------------+ |
| 17 | * |
| 18 | * Counter Sequence |
| 19 | * |
| 20 | * +-------++----+----+----+----+ |
| 21 | * | COUNT || QD | QC | QB | QA | |
| 22 | * +=======++====+====+====+====+ |
| 23 | * | 0 || 0 | 0 | 0 | 0 | |
| 24 | * | 1 || 0 | 0 | 0 | 1 | |
| 25 | * | 2 || 0 | 0 | 1 | 0 | |
| 26 | * | 3 || 0 | 0 | 1 | 1 | |
| 27 | * | 4 || 0 | 1 | 0 | 0 | |
| 28 | * | 5 || 0 | 1 | 0 | 1 | |
| 29 | * | 6 || 0 | 1 | 1 | 0 | |
| 30 | * | 7 || 0 | 1 | 1 | 1 | |
| 31 | * | 8 || 1 | 0 | 0 | 0 | |
| 32 | * | 9 || 1 | 0 | 0 | 1 | |
| 33 | * | 10 || 1 | 0 | 1 | 0 | |
| 34 | * | 11 || 1 | 0 | 1 | 1 | |
| 35 | * | 12 || 1 | 1 | 0 | 0 | |
| 36 | * | 13 || 1 | 1 | 0 | 1 | |
| 37 | * | 14 || 1 | 1 | 1 | 0 | |
| 38 | * | 15 || 1 | 1 | 1 | 1 | |
| 39 | * +-------++----+----+----+----+ |
| 40 | * |
| 41 | * Reset Count Function table |
| 42 | * |
| 43 | * +-----+-----++----+----+----+----+ |
| 44 | * | R01 | R01 || QD | QC | QB | QA | |
| 45 | * +=====+=====++====+====+====+====+ |
| 46 | * | 1 | 1 || 0 | 0 | 0 | 0 | |
| 47 | * | 0 | X || COUNT | |
| 48 | * | X | 0 || COUNT | |
| 49 | * +-----+-----++----+----+----+----+ |
| 50 | * |
| 51 | * Naming conventions follow National Semiconductor datasheet |
| 52 | * |
| 53 | */ |
| 54 | |
| 55 | #ifndef NLD_7493_H_ |
| 56 | #define NLD_7493_H_ |
| 57 | |
| 58 | #include "../nl_base.h" |
| 59 | |
| 60 | #define TTL_7493(_name, _CLKA, _CLKB, _R1, _R2) \ |
| 61 | NET_REGISTER_DEV(nic7493, _name) \ |
| 62 | NET_CONNECT(_name, CLKA, _CLKA) \ |
| 63 | NET_CONNECT(_name, CLKB, _CLKB) \ |
| 64 | NET_CONNECT(_name, R1, _R1) \ |
| 65 | NET_CONNECT(_name, R2, _R2) |
| 66 | |
| 67 | NETLIB_SUBDEVICE(nic7493ff, |
| 68 | netlist_ttl_input_t m_I; |
| 69 | netlist_ttl_output_t m_Q; |
| 70 | |
| 71 | UINT8 m_reset; |
| 72 | ); |
| 73 | |
| 74 | NETLIB_DEVICE(nic7493, |
| 75 | netlist_ttl_input_t m_R1; |
| 76 | netlist_ttl_input_t m_R2; |
| 77 | |
| 78 | NETLIB_NAME(nic7493ff) A; |
| 79 | NETLIB_NAME(nic7493ff) B; |
| 80 | NETLIB_NAME(nic7493ff) C; |
| 81 | NETLIB_NAME(nic7493ff) D; |
| 82 | ); |
| 83 | |
| 84 | #endif /* NLD_7493_H_ */ |
trunk/src/emu/netlist/devices/net_lib.c
| r26498 | r26499 | |
| 509 | 509 | OUTLOGIC(m_Q[i], (m_cnt >> i) & 1, delay[i]); |
| 510 | 510 | } |
| 511 | 511 | #endif |
| 512 | | #if !USE_OLD7493 |
| 513 | | NETLIB_START(nic7493) |
| 514 | | { |
| 515 | | register_sub(A, "A"); |
| 516 | | register_sub(B, "B"); |
| 517 | | register_sub(C, "C"); |
| 518 | | register_sub(D, "D"); |
| 519 | 512 | |
| 520 | | register_subalias("CLKA", A.m_I); |
| 521 | | register_subalias("CLKB", B.m_I); |
| 522 | | register_input("R1", m_R1); |
| 523 | | register_input("R2", m_R2); |
| 524 | | |
| 525 | | register_subalias("QA", A.m_Q); |
| 526 | | register_subalias("QB", B.m_Q); |
| 527 | | register_subalias("QC", C.m_Q); |
| 528 | | register_subalias("QD", D.m_Q); |
| 529 | | |
| 530 | | register_link_internal(C, C.m_I, B.m_Q, netlist_input_t::STATE_INP_HL); |
| 531 | | register_link_internal(D, D.m_I, C.m_Q, netlist_input_t::STATE_INP_HL); |
| 532 | | } |
| 533 | | |
| 534 | | NETLIB_START(nic7493ff) |
| 535 | | { |
| 536 | | register_input("CLK", m_I, netlist_input_t::STATE_INP_HL); |
| 537 | | register_output("Q", m_Q); |
| 538 | | } |
| 539 | | |
| 540 | | NETLIB_UPDATE(nic7493ff) |
| 541 | | { |
| 542 | | if (m_reset == 0) |
| 543 | | OUTLOGIC(m_Q, !m_Q.net().new_Q(), NLTIME_FROM_NS(18)); |
| 544 | | } |
| 545 | | |
| 546 | | NETLIB_UPDATE(nic7493) |
| 547 | | { |
| 548 | | netlist_sig_t r = INPLOGIC(m_R1) & INPLOGIC(m_R2); |
| 549 | | |
| 550 | | if (r) |
| 551 | | { |
| 552 | | //printf("%s reset\n", name()); |
| 553 | | A.m_reset = B.m_reset = C.m_reset = D.m_reset = 1; |
| 554 | | A.m_I.inactivate(); |
| 555 | | B.m_I.inactivate(); |
| 556 | | OUTLOGIC(A.m_Q, 0, NLTIME_FROM_NS(40)); |
| 557 | | OUTLOGIC(B.m_Q, 0, NLTIME_FROM_NS(40)); |
| 558 | | OUTLOGIC(C.m_Q, 0, NLTIME_FROM_NS(40)); |
| 559 | | OUTLOGIC(D.m_Q, 0, NLTIME_FROM_NS(40)); |
| 560 | | } |
| 561 | | else |
| 562 | | { |
| 563 | | A.m_reset = B.m_reset = C.m_reset = D.m_reset = 0; |
| 564 | | A.m_I.activate_hl(); |
| 565 | | B.m_I.activate_hl(); |
| 566 | | //printf("%s enable\n", name()); |
| 567 | | } |
| 568 | | } |
| 569 | | #else |
| 570 | | |
| 571 | | NETLIB_START(nic7493) |
| 572 | | { |
| 573 | | m_cnt = 0; |
| 574 | | |
| 575 | | register_input("CLKA", m_CLK, netlist_input_t::STATE_INP_HL); |
| 576 | | register_input("CLKB", m_CLKB, netlist_input_t::STATE_INP_HL); |
| 577 | | register_input("R1", m_R1); |
| 578 | | register_input("R2", m_R2); |
| 579 | | |
| 580 | | register_output("QA", m_QA); |
| 581 | | register_output("QB", m_QB); |
| 582 | | register_output("QC", m_QC); |
| 583 | | register_output("QD", m_QD); |
| 584 | | } |
| 585 | | |
| 586 | | NETLIB_UPDATE(nic7493) |
| 587 | | { |
| 588 | | //UINT8 old_clk = m_lastclk; |
| 589 | | //m_lastclk = INPLOGIC(m_clk); |
| 590 | | |
| 591 | | //printf("%s %d %d %d %d %d %d\n", name(), m_cnt, old_clk, m_QA.Q(), m_QB.Q(), m_QC.Q(), m_QD.Q()); |
| 592 | | if (INPLOGIC(m_R1) & INPLOGIC(m_R2)) |
| 593 | | { |
| 594 | | if (m_cnt > 0) |
| 595 | | { |
| 596 | | m_cnt = 0; |
| 597 | | OUTLOGIC(m_QA, 0, NLTIME_FROM_NS(40)); |
| 598 | | OUTLOGIC(m_QB, 0, NLTIME_FROM_NS(40)); |
| 599 | | OUTLOGIC(m_QC, 0, NLTIME_FROM_NS(40)); |
| 600 | | OUTLOGIC(m_QD, 0, NLTIME_FROM_NS(40)); |
| 601 | | } |
| 602 | | m_CLK.inactivate(); |
| 603 | | } |
| 604 | | //else if (old_clk & !m_lastclk) |
| 605 | | else { |
| 606 | | m_CLK.activate_hl(); |
| 607 | | if (INP_HL(m_CLK)) |
| 608 | | { |
| 609 | | m_cnt++; |
| 610 | | m_cnt &= 0x0f; |
| 611 | | update_outputs(); |
| 612 | | } |
| 613 | | } |
| 614 | | } |
| 615 | | |
| 616 | | NETLIB_FUNC_VOID(nic7493, update_outputs, (void)) |
| 617 | | { |
| 618 | | if (m_cnt & 1) |
| 619 | | OUTLOGIC(m_QA, 1, NLTIME_FROM_NS(16)); |
| 620 | | else |
| 621 | | { |
| 622 | | OUTLOGIC(m_QA, 0, NLTIME_FROM_NS(16)); |
| 623 | | switch (m_cnt) |
| 624 | | { |
| 625 | | case 0x00: |
| 626 | | OUTLOGIC(m_QD, 0, NLTIME_FROM_NS(70)); |
| 627 | | OUTLOGIC(m_QC, 0, NLTIME_FROM_NS(48)); |
| 628 | | OUTLOGIC(m_QB, 0, NLTIME_FROM_NS(34)); |
| 629 | | break; |
| 630 | | case 0x02: |
| 631 | | case 0x06: |
| 632 | | case 0x0A: |
| 633 | | case 0x0E: |
| 634 | | OUTLOGIC(m_QB, 1, NLTIME_FROM_NS(34)); |
| 635 | | break; |
| 636 | | case 0x04: |
| 637 | | case 0x0C: |
| 638 | | OUTLOGIC(m_QC, 1, NLTIME_FROM_NS(48)); |
| 639 | | OUTLOGIC(m_QB, 0, NLTIME_FROM_NS(34)); |
| 640 | | break; |
| 641 | | case 0x08: |
| 642 | | OUTLOGIC(m_QD, 1, NLTIME_FROM_NS(70)); |
| 643 | | OUTLOGIC(m_QC, 0, NLTIME_FROM_NS(48)); |
| 644 | | OUTLOGIC(m_QB, 0, NLTIME_FROM_NS(34)); |
| 645 | | break; |
| 646 | | } |
| 647 | | } |
| 648 | | } |
| 649 | | #endif |
| 650 | | |
| 651 | 513 | NETLIB_START(nic74107Asub) |
| 652 | 514 | { |
| 653 | 515 | register_input("CLK", m_clk, netlist_input_t::STATE_INP_HL); |
trunk/src/emu/netlist/devices/net_lib.h
| r26498 | r26499 | |
| 65 | 65 | #include "nld_7430.h" |
| 66 | 66 | #include "nld_7474.h" |
| 67 | 67 | #include "nld_7486.h" |
| 68 | #include "nld_7493.h" |
| 68 | 69 | |
| 69 | 70 | #include "nld_NE555.h" |
| 70 | 71 | |
| 71 | 72 | #include "nld_log.h" |
| 72 | 73 | |
| 73 | 74 | // this is a bad hack |
| 74 | | #define USE_OLD7493 (0) |
| 75 | 75 | |
| 76 | 76 | // ---------------------------------------------------------------------------------------- |
| 77 | 77 | // Special chips |
| r26498 | r26499 | |
| 140 | 140 | NET_CONNECT(_name, R91, _R91) \ |
| 141 | 141 | NET_CONNECT(_name, R92, _R92) |
| 142 | 142 | |
| 143 | | #define TTL_7493(_name, _CLKA, _CLKB, _R1, _R2) \ |
| 144 | | NET_REGISTER_DEV(nic7493, _name) \ |
| 145 | | NET_CONNECT(_name, CLKA, _CLKA) \ |
| 146 | | NET_CONNECT(_name, CLKB, _CLKB) \ |
| 147 | | NET_CONNECT(_name, R1, _R1) \ |
| 148 | | NET_CONNECT(_name, R2, _R2) |
| 149 | | |
| 150 | 143 | #define TTL_74107A(_name, _CLK, _J, _K, _CLRQ) \ |
| 151 | 144 | NET_REGISTER_DEV(nic74107A, _name) \ |
| 152 | 145 | NET_CONNECT(_name, CLK, _CLK) \ |
| r26498 | r26499 | |
| 315 | 308 | }; |
| 316 | 309 | |
| 317 | 310 | |
| 318 | | NETLIB_SUBDEVICE(nic7493ff, |
| 319 | | netlist_ttl_input_t m_I; |
| 320 | | netlist_ttl_output_t m_Q; |
| 321 | | |
| 322 | | UINT8 m_reset; |
| 323 | | ); |
| 324 | | |
| 325 | | #if !USE_OLD7493 |
| 326 | | NETLIB_DEVICE(nic7493, |
| 327 | | netlist_ttl_input_t m_R1; |
| 328 | | netlist_ttl_input_t m_R2; |
| 329 | | |
| 330 | | NETLIB_NAME(nic7493ff) A; |
| 331 | | NETLIB_NAME(nic7493ff) B; |
| 332 | | NETLIB_NAME(nic7493ff) C; |
| 333 | | NETLIB_NAME(nic7493ff) D; |
| 334 | | ); |
| 335 | | |
| 336 | | #else |
| 337 | | NETLIB_DEVICE(nic7493, |
| 338 | | netlist_ttl_input_t m_CLK; |
| 339 | | netlist_ttl_input_t m_CLKB; /* dummy ! */ |
| 340 | | netlist_ttl_input_t m_R1; |
| 341 | | netlist_ttl_input_t m_R2; |
| 342 | | |
| 343 | | netlist_ttl_output_t m_QA; |
| 344 | | netlist_ttl_output_t m_QB; |
| 345 | | netlist_ttl_output_t m_QC; |
| 346 | | netlist_ttl_output_t m_QD; |
| 347 | | |
| 348 | | UINT8 m_cnt; |
| 349 | | ATTR_HOT void update_outputs(); |
| 350 | | ); |
| 351 | | #endif |
| 352 | | |
| 353 | 311 | NETLIB_DEVICE(nic7490, |
| 354 | 312 | ATTR_HOT void update_outputs(); |
| 355 | 313 | |