trunk/src/emu/cpu/z80/tlcs_z80.c
| r31068 | r31069 | |
| 1 | | /***************************************************************************** |
| 2 | | * |
| 3 | | * tlcs_z80.c |
| 4 | | * TOSHIBA TLCS Z80 emulation |
| 5 | | */ |
| 6 | | |
| 7 | | #include "emu.h" |
| 8 | | #include "z80.h" |
| 9 | | #include "machine/z80ctc.h" |
| 10 | | #include "machine/z80pio.h" |
| 11 | | #include "machine/z80dart.h" |
| 12 | | |
| 13 | | //TODO: These interfaces should default to DEVCB_NULL pointers and |
| 14 | | // the actual callbacks should be provided by the driver that instantiates the TLCS-Z80 CPU. |
| 15 | | // We need methods for the driver to provide these interface configurations to the CPU core. |
| 16 | | // something like: |
| 17 | | // m_tlcsz80->set_internal_ctc_interface (ctc_intf); |
| 18 | | // m_tlcsz80->set_internal_pio_interface (pio_intf); |
| 19 | | // m_tlcsz80->set_internal_sio_interface (sio_intf); |
| 20 | | |
| 21 | | /* Daisy Chaining */ |
| 22 | | |
| 23 | | #ifdef UNUSED |
| 24 | | static const z80_daisy_config tlcsz80_daisy_chain[] = |
| 25 | | { |
| 26 | | { TLCSZ80_INTERNAL_CTC_TAG }, |
| 27 | | { TLCSZ80_INTERNAL_PIO_TAG }, |
| 28 | | { TLCSZ80_INTERNAL_SIO_TAG }, |
| 29 | | { NULL } |
| 30 | | }; |
| 31 | | #endif |
| 32 | | |
| 33 | | static ADDRESS_MAP_START( tlcs_z80_internal_io_map, AS_IO, 8, tlcs_z80_device ) |
| 34 | | AM_RANGE(0x10, 0x13) AM_DEVREADWRITE(TLCSZ80_INTERNAL_CTC_TAG, z80ctc_device, read, write) |
| 35 | | AM_RANGE(0x18, 0x1B) AM_DEVREADWRITE(TLCSZ80_INTERNAL_SIO_TAG, z80sio0_device, cd_ba_r, cd_ba_w) |
| 36 | | AM_RANGE(0x1C, 0x1F) AM_DEVREADWRITE(TLCSZ80_INTERNAL_PIO_TAG, z80pio_device, read, write) |
| 37 | | // AM_RANGE(0xF0, 0xF0) TODO: Watchdog Timer: Stand-by mode Register |
| 38 | | // AM_RANGE(0xF1, 0xF1) TODO: Watchdog Timer: command Register |
| 39 | | // AM_RANGE(0xF4, 0xF4) TODO: Daisy chain interrupt precedence Register |
| 40 | | ADDRESS_MAP_END |
| 41 | | |
| 42 | | //This is wrong! |
| 43 | | //We should use the same clock as declared in the TLCS_Z80 instantiation in the driver that uses it. |
| 44 | | #define TLCS_Z80_CLOCK 8000000 |
| 45 | | |
| 46 | | static MACHINE_CONFIG_FRAGMENT( tlcs_z80 ) |
| 47 | | MCFG_DEVICE_ADD(TLCSZ80_INTERNAL_CTC_TAG, Z80CTC, TLCS_Z80_CLOCK) |
| 48 | | MCFG_Z80CTC_INTR_CB(INPUTLINE(DEVICE_SELF, INPUT_LINE_IRQ0)) |
| 49 | | |
| 50 | | MCFG_Z80SIO0_ADD(TLCSZ80_INTERNAL_SIO_TAG, TLCS_Z80_CLOCK, 0, 0, 0, 0) |
| 51 | | MCFG_Z80DART_OUT_INT_CB(INPUTLINE(DEVICE_SELF, INPUT_LINE_IRQ0)) |
| 52 | | |
| 53 | | MCFG_DEVICE_ADD(TLCSZ80_INTERNAL_PIO_TAG, Z80PIO, TLCS_Z80_CLOCK) |
| 54 | | MCFG_Z80PIO_OUT_INT_CB(INPUTLINE(DEVICE_SELF, INPUT_LINE_IRQ0)) |
| 55 | | MACHINE_CONFIG_END |
| 56 | | |
| 57 | | tlcs_z80_device::tlcs_z80_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 58 | | : z80_device(mconfig, TLCS_Z80, "TLCS-Z80", tag, owner, clock, "tlcs_z80", __FILE__), |
| 59 | | m_z80ctc(*this, TLCSZ80_INTERNAL_CTC_TAG), |
| 60 | | m_io_space_config( "io", ENDIANNESS_LITTLE, 8, 8, 0, ADDRESS_MAP_NAME( tlcs_z80_internal_io_map ) ) |
| 61 | | { } |
| 62 | | |
| 63 | | |
| 64 | | WRITE_LINE_MEMBER( tlcs_z80_device::ctc_trg0 ) { m_z80ctc->trg0(state ? 0 : 1); } |
| 65 | | WRITE_LINE_MEMBER( tlcs_z80_device::ctc_trg1 ) { m_z80ctc->trg1(state ? 0 : 1); } |
| 66 | | WRITE_LINE_MEMBER( tlcs_z80_device::ctc_trg2 ) { m_z80ctc->trg2(state ? 0 : 1); } |
| 67 | | WRITE_LINE_MEMBER( tlcs_z80_device::ctc_trg3 ) { m_z80ctc->trg3(state ? 0 : 1); } |
| 68 | | |
| 69 | | |
| 70 | | machine_config_constructor tlcs_z80_device::device_mconfig_additions() const |
| 71 | | { |
| 72 | | return MACHINE_CONFIG_NAME( tlcs_z80 ); |
| 73 | | } |
| 74 | | |
| 75 | | const device_type TLCS_Z80 = &device_creator<tlcs_z80_device>; |
trunk/src/emu/cpu/z80/tmpz84c015.c
| r0 | r31069 | |
| 1 | /*************************************************************************** |
| 2 | |
| 3 | Toshiba TMPZ84C015, TLCS-Z80 ASSP Family |
| 4 | Z80 CPU, SIO, CTC, CGC(6/8MHz), PIO, WDT |
| 5 | |
| 6 | TODO: |
| 7 | - SIO configuration, or should that be up to the driver? |
| 8 | - CGC (clock generator/controller) |
| 9 | - WDT (watchdog timer) |
| 10 | |
| 11 | ***************************************************************************/ |
| 12 | |
| 13 | #include "tmpz84c015.h" |
| 14 | |
| 15 | const device_type TMPZ84C015 = &device_creator<tmpz84c015_device>; |
| 16 | |
| 17 | static ADDRESS_MAP_START( tmpz84c015_internal_io_map, AS_IO, 8, tmpz84c015_device ) |
| 18 | AM_RANGE(0x10, 0x13) AM_MIRROR(0xff00) AM_DEVREADWRITE("ctc", z80ctc_device, read, write) |
| 19 | AM_RANGE(0x18, 0x1b) AM_MIRROR(0xff00) AM_DEVREADWRITE("sio", z80dart_device, ba_cd_r, ba_cd_w) |
| 20 | AM_RANGE(0x1c, 0x1f) AM_MIRROR(0xff00) AM_DEVREADWRITE("pio", z80pio_device, read_alt, write_alt) |
| 21 | AM_RANGE(0xf4, 0xf4) AM_MIRROR(0xff00) AM_WRITE(irq_priority_w) |
| 22 | ADDRESS_MAP_END |
| 23 | |
| 24 | |
| 25 | tmpz84c015_device::tmpz84c015_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 26 | : z80_device(mconfig, TMPZ84C015, "TMPZ84C015", tag, owner, clock, "tmpz84c015", __FILE__), |
| 27 | m_ctc(*this, "ctc"), |
| 28 | m_sio(*this, "sio"), |
| 29 | m_pio(*this, "pio"), |
| 30 | m_io_space_config( "io", ENDIANNESS_LITTLE, 8, 16, 0, ADDRESS_MAP_NAME( tmpz84c015_internal_io_map ) ), |
| 31 | m_irq_priority(-1) // ! |
| 32 | { |
| 33 | } |
| 34 | |
| 35 | |
| 36 | //------------------------------------------------- |
| 37 | // device_start - device-specific startup |
| 38 | //------------------------------------------------- |
| 39 | |
| 40 | void tmpz84c015_device::device_start() |
| 41 | { |
| 42 | z80_device::device_start(); |
| 43 | } |
| 44 | |
| 45 | |
| 46 | //------------------------------------------------- |
| 47 | // device_reset - device-specific reset |
| 48 | //------------------------------------------------- |
| 49 | |
| 50 | void tmpz84c015_device::device_reset() |
| 51 | { |
| 52 | irq_priority_w(*m_io, 0, 0); |
| 53 | z80_device::device_reset(); |
| 54 | } |
| 55 | |
| 56 | |
| 57 | //------------------------------------------------- |
| 58 | // device_post_load - device-specific post-load |
| 59 | //------------------------------------------------- |
| 60 | |
| 61 | void tmpz84c015_device::device_post_load() |
| 62 | { |
| 63 | // reinit irq priority |
| 64 | UINT8 prio = m_irq_priority; |
| 65 | m_irq_priority = -1; |
| 66 | irq_priority_w(*m_io, 0, prio); |
| 67 | } |
| 68 | |
| 69 | |
| 70 | /* CPU interface */ |
| 71 | WRITE8_MEMBER(tmpz84c015_device::irq_priority_w) |
| 72 | { |
| 73 | data &= 7; |
| 74 | |
| 75 | if (data > 5) |
| 76 | { |
| 77 | logerror("tmpz84c015: irq_priority_w undefined state %X\n", data); |
| 78 | data &= 3; // guess |
| 79 | } |
| 80 | |
| 81 | if (m_irq_priority != data) |
| 82 | { |
| 83 | static const char *dev[3] = { "ctc", "sio", "pio" }; |
| 84 | static const int prio[6][3] = |
| 85 | { |
| 86 | { 0, 1, 2 }, // 0: ctc -> sio -> pio -> ext |
| 87 | { 1, 0, 2 }, // 1: sio -> ctc -> pio -> ext |
| 88 | { 0, 2, 1 }, // 2: ctc -> pio -> sio -> ext |
| 89 | { 2, 1, 0 }, // 3: pio -> sio -> ctc -> ext |
| 90 | { 2, 0, 1 }, // 4: pio -> ctc -> sio -> ext |
| 91 | { 1, 2, 0 } // 5: sio -> pio -> ctc -> ext |
| 92 | }; |
| 93 | |
| 94 | // reconfigure first 3 entries in daisy chain |
| 95 | const char *daisy[4] = { dev[prio[data][0]], dev[prio[data][1]], dev[prio[data][2]], NULL }; |
| 96 | m_daisy.init(this, (const z80_daisy_config *)daisy); |
| 97 | |
| 98 | m_irq_priority = data; |
| 99 | } |
| 100 | } |
| 101 | |
| 102 | static MACHINE_CONFIG_FRAGMENT( tmpz84c015 ) |
| 103 | |
| 104 | /* basic machine hardware */ |
| 105 | MCFG_DEVICE_ADD("ctc", Z80CTC, DERIVED_CLOCK(1,1) ) |
| 106 | MCFG_Z80CTC_INTR_CB(INPUTLINE(DEVICE_SELF, INPUT_LINE_IRQ0)) |
| 107 | |
| 108 | MCFG_Z80SIO0_ADD("sio", DERIVED_CLOCK(1,1), 0, 0, 0, 0) |
| 109 | MCFG_Z80DART_OUT_INT_CB(INPUTLINE(DEVICE_SELF, INPUT_LINE_IRQ0)) |
| 110 | |
| 111 | MCFG_DEVICE_ADD("pio", Z80PIO, DERIVED_CLOCK(1,1) ) |
| 112 | MCFG_Z80PIO_OUT_INT_CB(INPUTLINE(DEVICE_SELF, INPUT_LINE_IRQ0)) |
| 113 | MACHINE_CONFIG_END |
| 114 | |
| 115 | machine_config_constructor tmpz84c015_device::device_mconfig_additions() const |
| 116 | { |
| 117 | return MACHINE_CONFIG_NAME( tmpz84c015 ); |
| 118 | } |
trunk/src/emu/cpu/z80/tmpz84c011.h
| r31068 | r31069 | |
| 48 | 48 | public: |
| 49 | 49 | tmpz84c011_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32); |
| 50 | 50 | |
| 51 | // static configuration helpers |
| 51 | 52 | template<class _Object> static devcb_base & set_outportsa_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_outportsa.set_callback(object); } |
| 52 | 53 | template<class _Object> static devcb_base & set_outportsb_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_outportsb.set_callback(object); } |
| 53 | 54 | template<class _Object> static devcb_base & set_outportsc_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_outportsc.set_callback(object); } |
| r31068 | r31069 | |
| 60 | 61 | template<class _Object> static devcb_base & set_inportsd_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_inportsd.set_callback(object); } |
| 61 | 62 | template<class _Object> static devcb_base & set_inportse_cb(device_t &device, _Object object) { return downcast<tmpz84c011_device &>(device).m_inportse.set_callback(object); } |
| 62 | 63 | |
| 64 | // devices/pointers |
| 65 | required_device<z80ctc_device> m_ctc; |
| 66 | |
| 63 | 67 | DECLARE_READ8_MEMBER(tmpz84c011_pa_r); |
| 64 | 68 | DECLARE_READ8_MEMBER(tmpz84c011_pb_r); |
| 65 | 69 | DECLARE_READ8_MEMBER(tmpz84c011_pc_r); |
| r31068 | r31069 | |
| 99 | 103 | } |
| 100 | 104 | |
| 101 | 105 | private: |
| 106 | // internal state |
| 102 | 107 | UINT8 m_pio_dir[5]; |
| 103 | 108 | UINT8 m_pio_latch[5]; |
| 104 | 109 | |
| 105 | | devcb_write8 m_outportsa; |
| 106 | | devcb_write8 m_outportsb; |
| 107 | | devcb_write8 m_outportsc; |
| 108 | | devcb_write8 m_outportsd; |
| 109 | | devcb_write8 m_outportse; |
| 110 | // callbacks |
| 111 | devcb_write8 m_outportsa; |
| 112 | devcb_write8 m_outportsb; |
| 113 | devcb_write8 m_outportsc; |
| 114 | devcb_write8 m_outportsd; |
| 115 | devcb_write8 m_outportse; |
| 110 | 116 | |
| 111 | | devcb_read8 m_inportsa; |
| 112 | | devcb_read8 m_inportsb; |
| 113 | | devcb_read8 m_inportsc; |
| 114 | | devcb_read8 m_inportsd; |
| 115 | | devcb_read8 m_inportse; |
| 117 | devcb_read8 m_inportsa; |
| 118 | devcb_read8 m_inportsb; |
| 119 | devcb_read8 m_inportsc; |
| 120 | devcb_read8 m_inportsd; |
| 121 | devcb_read8 m_inportse; |
| 116 | 122 | }; |
| 117 | 123 | |
| 118 | 124 | extern const device_type TMPZ84C011; |
trunk/src/emu/cpu/z80/tmpz84c015.h
| r0 | r31069 | |
| 1 | /*************************************************************************** |
| 2 | |
| 3 | Toshiba TMPZ84C015, TLCS-Z80 ASSP Family |
| 4 | Z80 CPU, SIO, CTC, CGC(6/8MHz), PIO, WDT |
| 5 | |
| 6 | ***************************************************************************/ |
| 7 | |
| 8 | #include "emu.h" |
| 9 | #include "z80.h" |
| 10 | #include "machine/z80dart.h" |
| 11 | #include "machine/z80ctc.h" |
| 12 | #include "machine/z80pio.h" |
| 13 | |
| 14 | // If an external daisy chain is used, insert this before your own device tags: |
| 15 | #define TMPZ84C015_DAISY_INTERNAL { "ctc" }, { "sio" }, { "pio" } |
| 16 | |
| 17 | // NOTE: for callbacks, see machine/z80dart.h, machine/z80ctc.h, machine/z80pio.h |
| 18 | |
| 19 | |
| 20 | class tmpz84c015_device : public z80_device |
| 21 | { |
| 22 | public: |
| 23 | tmpz84c015_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32); |
| 24 | |
| 25 | // devices/pointers |
| 26 | required_device<z80ctc_device> m_ctc; |
| 27 | required_device<z80dart_device> m_sio; |
| 28 | required_device<z80pio_device> m_pio; |
| 29 | |
| 30 | DECLARE_WRITE8_MEMBER(irq_priority_w); |
| 31 | |
| 32 | protected: |
| 33 | // device-level overrides |
| 34 | virtual machine_config_constructor device_mconfig_additions() const; |
| 35 | virtual void device_start(); |
| 36 | virtual void device_reset(); |
| 37 | virtual void device_post_load(); |
| 38 | |
| 39 | const address_space_config m_io_space_config; |
| 40 | |
| 41 | const address_space_config *memory_space_config(address_spacenum spacenum) const |
| 42 | { |
| 43 | switch (spacenum) |
| 44 | { |
| 45 | case AS_IO: return &m_io_space_config; |
| 46 | default: return z80_device::memory_space_config(spacenum); |
| 47 | } |
| 48 | } |
| 49 | |
| 50 | private: |
| 51 | UINT8 m_irq_priority; |
| 52 | }; |
| 53 | |
| 54 | extern const device_type TMPZ84C015; |
trunk/src/emu/cpu/z80/z80.h
| r31068 | r31069 | |
| 4 | 4 | #define __Z80_H__ |
| 5 | 5 | |
| 6 | 6 | #include "z80daisy.h" |
| 7 | | #include "machine/z80ctc.h" |
| 8 | 7 | |
| 9 | | #define TLCSZ80_INTERNAL_CTC_TAG "tlcsz80_int_ctc" |
| 10 | | #define TLCSZ80_INTERNAL_PIO_TAG "tlcsz80_int_pio" |
| 11 | | #define TLCSZ80_INTERNAL_SIO_TAG "tlcsz80_int_sio" |
| 12 | | |
| 13 | 8 | enum |
| 14 | 9 | { |
| 15 | 10 | NSC800_RSTA = INPUT_LINE_IRQ0 + 1, |
| r31068 | r31069 | |
| 306 | 301 | |
| 307 | 302 | extern const device_type NSC800; |
| 308 | 303 | |
| 309 | | class tlcs_z80_device : public z80_device |
| 310 | | { |
| 311 | | public: |
| 312 | | tlcs_z80_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32); |
| 313 | 304 | |
| 314 | | required_device<z80ctc_device> m_z80ctc; |
| 315 | | |
| 316 | | DECLARE_WRITE8_MEMBER( ctc_w ); |
| 317 | | DECLARE_WRITE_LINE_MEMBER( ctc_trg0 ); |
| 318 | | DECLARE_WRITE_LINE_MEMBER( ctc_trg1 ); |
| 319 | | DECLARE_WRITE_LINE_MEMBER( ctc_trg2 ); |
| 320 | | DECLARE_WRITE_LINE_MEMBER( ctc_trg3 ); |
| 321 | | |
| 322 | | protected: |
| 323 | | virtual machine_config_constructor device_mconfig_additions() const; |
| 324 | | |
| 325 | | const address_space_config m_io_space_config; |
| 326 | | |
| 327 | | const address_space_config *memory_space_config(address_spacenum spacenum) const |
| 328 | | { |
| 329 | | switch (spacenum) |
| 330 | | { |
| 331 | | case AS_IO: return &m_io_space_config; |
| 332 | | default: return z80_device::memory_space_config(spacenum); |
| 333 | | } |
| 334 | | } |
| 335 | | }; |
| 336 | | |
| 337 | | |
| 338 | | |
| 339 | | extern const device_type TLCS_Z80; |
| 340 | | |
| 341 | | |
| 342 | | |
| 343 | 305 | #endif /* __Z80_H__ */ |
trunk/src/mess/drivers/pve500.c
| r31068 | r31069 | |
| 15 | 15 | */ |
| 16 | 16 | |
| 17 | 17 | #include "emu.h" |
| 18 | | #include "cpu/z80/z80.h" |
| 19 | | #include "machine/z80ctc.h" |
| 20 | | #include "machine/z80dart.h" |
| 18 | #include "cpu/z80/tmpz84c015.h" |
| 21 | 19 | #include "pve500.lh" |
| 22 | 20 | |
| 23 | 21 | #define IO_EXPANDER_PORTA 0 |
| r31068 | r31069 | |
| 49 | 47 | |
| 50 | 48 | virtual void machine_start(); |
| 51 | 49 | virtual void machine_reset(); |
| 52 | | required_device<tlcs_z80_device> m_maincpu; |
| 53 | | required_device<tlcs_z80_device> m_subcpu; |
| 50 | required_device<tmpz84c015_device> m_maincpu; |
| 51 | required_device<tmpz84c015_device> m_subcpu; |
| 54 | 52 | UINT8 io_SEL, io_LD, io_LE, io_SC, io_KY; |
| 55 | 53 | }; |
| 56 | 54 | |
| 57 | 55 | |
| 58 | 56 | static const z80_daisy_config maincpu_daisy_chain[] = |
| 59 | 57 | { |
| 58 | TMPZ84C015_DAISY_INTERNAL, |
| 60 | 59 | { "external_ctc" }, |
| 61 | 60 | { "external_sio" }, |
| 62 | 61 | { NULL } |
| r31068 | r31069 | |
| 64 | 63 | |
| 65 | 64 | |
| 66 | 65 | static ADDRESS_MAP_START(maincpu_io, AS_IO, 8, pve500_state) |
| 66 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 67 | 67 | AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("external_sio", z80sio0_device, cd_ba_r, cd_ba_w) |
| 68 | 68 | AM_RANGE(0x08, 0x0B) AM_DEVREADWRITE("external_ctc", z80ctc_device, read, write) |
| 69 | 69 | ADDRESS_MAP_END |
| r31068 | r31069 | |
| 196 | 196 | READ8_MEMBER(pve500_state::dualport_ram_left_r) |
| 197 | 197 | { |
| 198 | 198 | //printf("dualport_ram: Left READ\n"); |
| 199 | | m_subcpu->ctc_trg1(1); //(INT_Right) |
| 199 | m_subcpu->m_ctc->trg1(1); //(INT_Right) |
| 200 | 200 | return dualport_7FE_data; |
| 201 | 201 | } |
| 202 | 202 | |
| r31068 | r31069 | |
| 204 | 204 | { |
| 205 | 205 | //printf("dualport_ram: Left WRITE\n"); |
| 206 | 206 | dualport_7FF_data = data; |
| 207 | | m_subcpu->ctc_trg1(0); //(INT_Right) |
| 207 | m_subcpu->m_ctc->trg1(0); //(INT_Right) |
| 208 | 208 | } |
| 209 | 209 | |
| 210 | 210 | READ8_MEMBER(pve500_state::dualport_ram_right_r) |
| 211 | 211 | { |
| 212 | 212 | //printf("dualport_ram: Right READ\n"); |
| 213 | | m_maincpu->ctc_trg1(1); //(INT_Left) |
| 213 | m_maincpu->m_ctc->trg1(1); //(INT_Left) |
| 214 | 214 | return dualport_7FF_data; |
| 215 | 215 | } |
| 216 | 216 | |
| r31068 | r31069 | |
| 218 | 218 | { |
| 219 | 219 | //printf("dualport_ram: Right WRITE\n"); |
| 220 | 220 | dualport_7FE_data = data; |
| 221 | | m_maincpu->ctc_trg1(0); //(INT_Left) |
| 221 | m_maincpu->m_ctc->trg1(0); //(INT_Left) |
| 222 | 222 | } |
| 223 | 223 | |
| 224 | 224 | READ8_MEMBER(pve500_state::io_expander_r) |
| r31068 | r31069 | |
| 283 | 283 | } |
| 284 | 284 | |
| 285 | 285 | static MACHINE_CONFIG_START( pve500, pve500_state ) |
| 286 | | MCFG_CPU_ADD("maincpu", TLCS_Z80, XTAL_12MHz / 2) /* TMPZ84C015BF-6 (TOSHIBA TLCS-Z80) */ |
| 286 | MCFG_CPU_ADD("maincpu", TMPZ84C015, XTAL_12MHz / 2) /* TMPZ84C015BF-6 */ |
| 287 | 287 | MCFG_CPU_PROGRAM_MAP(maincpu_prg) |
| 288 | 288 | MCFG_CPU_IO_MAP(maincpu_io) |
| 289 | 289 | MCFG_CPU_CONFIG(maincpu_daisy_chain) |
| r31068 | r31069 | |
| 294 | 294 | MCFG_Z80SIO0_ADD("external_sio", XTAL_12MHz / 2, 0, 0, 0, 0) |
| 295 | 295 | MCFG_Z80DART_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) |
| 296 | 296 | |
| 297 | | MCFG_CPU_ADD("subcpu", TLCS_Z80, XTAL_12MHz / 2) /* TMPZ84C015BF-6 (TOSHIBA TLCS-Z80) */ |
| 297 | MCFG_CPU_ADD("subcpu", TMPZ84C015, XTAL_12MHz / 2) /* TMPZ84C015BF-6 */ |
| 298 | 298 | MCFG_CPU_PROGRAM_MAP(subcpu_prg) |
| 299 | 299 | |
| 300 | 300 | /* TODO: |