diff --git a/src/devices/cpu/powerpc/ppc.h b/src/devices/cpu/powerpc/ppc.h index b25283c4666..caf3e2b3862 100644 --- a/src/devices/cpu/powerpc/ppc.h +++ b/src/devices/cpu/powerpc/ppc.h @@ -757,6 +757,17 @@ public: ppc604_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); }; +class ppc740_device : public ppc_device +{ +public: + ppc740_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; + +class ppc750_device : public ppc_device +{ +public: + ppc750_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; class ppc4xx_device : public ppc_device { @@ -812,5 +823,7 @@ DECLARE_DEVICE_TYPE(MPC8240, mpc8240_device) DECLARE_DEVICE_TYPE(PPC403GA, ppc403ga_device) DECLARE_DEVICE_TYPE(PPC403GCX, ppc403gcx_device) DECLARE_DEVICE_TYPE(PPC405GP, ppc405gp_device) +DECLARE_DEVICE_TYPE(PPC740, ppc740_device) +DECLARE_DEVICE_TYPE(PPC750, ppc750_device) #endif // MAME_CPU_POWERPC_PPC_H diff --git a/src/devices/cpu/powerpc/ppccom.cpp b/src/devices/cpu/powerpc/ppccom.cpp index 274c339269e..f72faa59f66 100644 --- a/src/devices/cpu/powerpc/ppccom.cpp +++ b/src/devices/cpu/powerpc/ppccom.cpp @@ -205,6 +205,8 @@ DEFINE_DEVICE_TYPE(MPC8240, mpc8240_device, "mpc8240", "IBM PowerPC MPC82 DEFINE_DEVICE_TYPE(PPC403GA, ppc403ga_device, "ppc403ga", "IBM PowerPC 403GA") DEFINE_DEVICE_TYPE(PPC403GCX, ppc403gcx_device, "ppc403gcx", "IBM PowerPC 403GCX") DEFINE_DEVICE_TYPE(PPC405GP, ppc405gp_device, "ppc405gp", "IBM PowerPC 405GP") +DEFINE_DEVICE_TYPE(PPC740, ppc740_device, "ppc740", "IBM PowerPC 740") +DEFINE_DEVICE_TYPE(PPC750, ppc750_device, "ppc750", "IBM PowerPC 750") ppc_device::ppc_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, int address_bits, int data_bits, powerpc_flavor flavor, uint32_t cap, uint32_t tb_divisor, address_map_constructor internal_map) @@ -288,6 +290,16 @@ ppc604_device::ppc604_device(const machine_config &mconfig, const char *tag, dev { } +ppc740_device::ppc740_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : ppc_device(mconfig, PPC740, tag, owner, clock, 32, 64, PPC_MODEL_740, PPCCAP_OEA | PPCCAP_VEA | PPCCAP_FPU | PPCCAP_MISALIGNED | PPCCAP_604_MMU | PPCCAP_750_TLB , 4, address_map_constructor()) +{ +} + +ppc750_device::ppc750_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : ppc_device(mconfig, PPC750, tag, owner, clock, 32, 64, PPC_MODEL_750, PPCCAP_OEA | PPCCAP_VEA | PPCCAP_FPU | PPCCAP_MISALIGNED | PPCCAP_604_MMU | PPCCAP_750_TLB, 4, address_map_constructor()) +{ +} + void ppc4xx_device::internal_ppc4xx(address_map &map) { map(0x40000000, 0x4000000f).rw(FUNC(ppc4xx_device::ppc4xx_spu_r), FUNC(ppc4xx_device::ppc4xx_spu_w)); diff --git a/src/devices/cpu/powerpc/ppccom.h b/src/devices/cpu/powerpc/ppccom.h index 918ca62a4c4..e92143e8fa7 100644 --- a/src/devices/cpu/powerpc/ppccom.h +++ b/src/devices/cpu/powerpc/ppccom.h @@ -64,7 +64,7 @@ #define PPCCAP_MFIOC 0x40 /* TRUE if we have memory-forced I/O controller interface accesses */ #define PPCCAP_601BAT 0x80 /* TRUE if we're doing 601-style BATs (unified I/D, different bit layout) */ #define PPCCAP_604_MMU 0x100 /* TRUE if we have 604-class MMU features */ - +#define PPCCAP_750_TLB 0x200 /* TRUE if we have the extended 740/750 series TLB */ /* exception types */ enum diff --git a/src/mame/apple/imacg3.cpp b/src/mame/apple/imacg3.cpp index 7bf0bbab2ed..42796fb7358 100644 --- a/src/mame/apple/imacg3.cpp +++ b/src/mame/apple/imacg3.cpp @@ -37,7 +37,7 @@ public: imac_state(const machine_config &mconfig, device_type type, const char *tag); - required_device m_maincpu; + required_device m_maincpu; required_device m_mpc106; required_device m_cuda; required_device m_macadb; @@ -114,7 +114,8 @@ void imac_state::imac_map(address_map &map) void imac_state::imac(machine_config &config) { - PPC604(config, m_maincpu, 66000000); // actually PPC750 + PPC740(config, m_maincpu, 66000000); // actually 233 MHz + m_maincpu->ppcdrc_set_options(PPCDRC_COMPATIBLE_OPTIONS); m_maincpu->set_addrmap(AS_PROGRAM, &imac_state::imac_map); PCI_ROOT(config, "pci", 0); diff --git a/src/mame/apple/pippin.cpp b/src/mame/apple/pippin.cpp index db7f54026c9..558ffdfecfa 100644 --- a/src/mame/apple/pippin.cpp +++ b/src/mame/apple/pippin.cpp @@ -67,7 +67,7 @@ public: pippin_state(const machine_config &mconfig, device_type type, const char *tag); - required_device m_maincpu; + required_device m_maincpu; required_device m_aspen; required_device m_cuda; required_device m_macadb; @@ -166,6 +166,7 @@ void pippin_state::pippin(machine_config &config) { /* basic machine hardware */ PPC603(config, m_maincpu, 66000000); + m_maincpu->ppcdrc_set_options(PPCDRC_COMPATIBLE_OPTIONS); m_maincpu->set_addrmap(AS_PROGRAM, &pippin_state::pippin_map); PCI_ROOT(config, "pci", 0); diff --git a/src/mame/apple/powermacg3.cpp b/src/mame/apple/powermacg3.cpp index 45564c81941..e61797139aa 100644 --- a/src/mame/apple/powermacg3.cpp +++ b/src/mame/apple/powermacg3.cpp @@ -36,7 +36,7 @@ public: pwrmacg3_state(const machine_config &mconfig, device_type type, const char *tag); - required_device m_maincpu; + required_device m_maincpu; required_device m_mpc106; required_device m_cuda; required_device m_macadb; @@ -121,7 +121,8 @@ void pwrmacg3_state::pwrmacg3_map(address_map &map) void pwrmacg3_state::pwrmacg3(machine_config &config) { - PPC604(config, m_maincpu, 66000000); // actually PPC750 + PPC740(config, m_maincpu, 66000000); // actually 233 MHz + m_maincpu->ppcdrc_set_options(PPCDRC_COMPATIBLE_OPTIONS); m_maincpu->set_addrmap(AS_PROGRAM, &pwrmacg3_state::pwrmacg3_map); PCI_ROOT(config, "pci", 0);