From b7853755e48bf28a33afdf50942e124ae19d0015 Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 14 Dec 2024 12:52:14 +0100 Subject: m6502: add g65sc02 subtypes --- src/devices/bus/bbc/internal/stl4m32.cpp | 2 +- src/devices/bus/bbc/tube/tube_6502.cpp | 4 ++-- src/devices/bus/c64/fcc.cpp | 2 +- src/devices/bus/c64/fcc.h | 2 +- src/devices/bus/isa/finalchs.cpp | 2 +- src/devices/bus/isa/finalchs.h | 2 +- src/devices/cpu/m6502/m65sc02.cpp | 28 +++++++++++++++++++++++++--- src/devices/cpu/m6502/m65sc02.h | 30 ++++++++++++++++++++++++------ src/mame/acorn/bbc.cpp | 2 +- src/mame/atari/lynx.cpp | 2 +- src/mame/atari/lynx_m.cpp | 4 ++-- src/mame/commodore/clcd.cpp | 12 +++++++----- src/mame/fidelity/excel.cpp | 2 +- src/mame/funworld/funworld.cpp | 4 ++-- src/mame/funworld/snookr10.cpp | 2 +- src/mame/hegenerglaser/mondial.cpp | 2 +- src/mame/hegenerglaser/mondial2.cpp | 2 +- src/mame/hegenerglaser/risc.cpp | 2 +- src/mame/hegenerglaser/smondial.cpp | 2 +- src/mame/novag/const.cpp | 2 +- src/mame/skeleton/textelcomp.cpp | 4 ++-- 21 files changed, 78 insertions(+), 36 deletions(-) diff --git a/src/devices/bus/bbc/internal/stl4m32.cpp b/src/devices/bus/bbc/internal/stl4m32.cpp index c875f69b0a4..c6d8903a91a 100644 --- a/src/devices/bus/bbc/internal/stl4m32.cpp +++ b/src/devices/bus/bbc/internal/stl4m32.cpp @@ -59,7 +59,7 @@ ROM_END void bbc_stl4m32_device::device_add_mconfig(machine_config &config) { - //M65SC02(config.replace(), m_maincpu, DERIVED_CLOCK(1, 4)); + //G65SC02(config.replace(), m_maincpu, DERIVED_CLOCK(1, 4)); /* 5 x 32K rom sockets */ BBC_ROMSLOT32(config, m_rom[4], bbc_rom_devices, nullptr); diff --git a/src/devices/bus/bbc/tube/tube_6502.cpp b/src/devices/bus/bbc/tube/tube_6502.cpp index 8cb22337e40..1334a8506e9 100644 --- a/src/devices/bus/bbc/tube/tube_6502.cpp +++ b/src/devices/bus/bbc/tube/tube_6502.cpp @@ -130,7 +130,7 @@ ROM_END void bbc_tube_6502_device::device_add_mconfig(machine_config &config) { - M65SC02(config, m_maincpu, 12_MHz_XTAL / 4); // G65SC02 + G65SC02(config, m_maincpu, 12_MHz_XTAL / 4); // G65SC02 m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_6502_device::tube_6502_mem); TUBE(config, m_ula); @@ -155,7 +155,7 @@ void bbc_tube_6502e_device::device_add_mconfig(machine_config &config) { bbc_tube_6502_device::device_add_mconfig(config); - M65SC02(config.replace(), m_maincpu, 12_MHz_XTAL / 4); // G65SC02 + G65SC02(config.replace(), m_maincpu, 12_MHz_XTAL / 4); // G65SC02 m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_6502e_device::tube_6502e_mem); m_ram->set_default_size("256K").set_default_value(0); diff --git a/src/devices/bus/c64/fcc.cpp b/src/devices/bus/c64/fcc.cpp index 484716a0056..96b0c172c12 100644 --- a/src/devices/bus/c64/fcc.cpp +++ b/src/devices/bus/c64/fcc.cpp @@ -42,7 +42,7 @@ void c64_final_chesscard_device::c64_fcc_map(address_map &map) void c64_final_chesscard_device::device_add_mconfig(machine_config &config) { - M65SC02(config, m_maincpu, 5_MHz_XTAL); + G65SC02(config, m_maincpu, 5_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &c64_final_chesscard_device::c64_fcc_map); GENERIC_LATCH_8(config, m_mainlatch).data_pending_callback().set(FUNC(c64_final_chesscard_device::mainlatch_int)); diff --git a/src/devices/bus/c64/fcc.h b/src/devices/bus/c64/fcc.h index dffa04c29a0..453603d96f2 100644 --- a/src/devices/bus/c64/fcc.h +++ b/src/devices/bus/c64/fcc.h @@ -48,7 +48,7 @@ protected: virtual void c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2) override; private: - required_device m_maincpu; + required_device m_maincpu; required_device m_mainlatch; required_device m_sublatch; diff --git a/src/devices/bus/isa/finalchs.cpp b/src/devices/bus/isa/finalchs.cpp index 2ee3b169371..6fb49bbf5c6 100644 --- a/src/devices/bus/isa/finalchs.cpp +++ b/src/devices/bus/isa/finalchs.cpp @@ -123,7 +123,7 @@ ioport_constructor isa8_finalchs_device::device_input_ports() const void isa8_finalchs_device::device_add_mconfig(machine_config &config) { - M65SC02(config, m_maincpu, 5_MHz_XTAL); + G65SC02(config, m_maincpu, 5_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &isa8_finalchs_device::finalchs_mem); GENERIC_LATCH_8(config, m_mainlatch); diff --git a/src/devices/bus/isa/finalchs.h b/src/devices/bus/isa/finalchs.h index b7977b901e1..ba515d59b7d 100644 --- a/src/devices/bus/isa/finalchs.h +++ b/src/devices/bus/isa/finalchs.h @@ -35,7 +35,7 @@ protected: virtual ioport_constructor device_input_ports() const override ATTR_COLD; private: - required_device m_maincpu; + required_device m_maincpu; required_device m_mainlatch; required_device m_sublatch; diff --git a/src/devices/cpu/m6502/m65sc02.cpp b/src/devices/cpu/m6502/m65sc02.cpp index b9245b5fe13..4bea3ff8113 100644 --- a/src/devices/cpu/m6502/m65sc02.cpp +++ b/src/devices/cpu/m6502/m65sc02.cpp @@ -6,14 +6,36 @@ Rockwell-class 65c02 with internal static registers, making clock stoppable? + TODO: + - none of the CPU type differences are currently emulated (eg. BE pin, ML pin), + are any of them meaningful to MAME? + ***************************************************************************/ #include "emu.h" #include "m65sc02.h" -DEFINE_DEVICE_TYPE(M65SC02, m65sc02_device, "m65sc02", "GTE G65SC02") +DEFINE_DEVICE_TYPE(G65SC02, g65sc02_device, "g65sc02", "GTE G65SC02") +DEFINE_DEVICE_TYPE(G65SC12, g65sc12_device, "g65sc12", "GTE G65SC12") +DEFINE_DEVICE_TYPE(G65SC102, g65sc102_device, "g65sc102", "GTE G65SC102") +DEFINE_DEVICE_TYPE(G65SC112, g65sc112_device, "g65sc112", "GTE G65SC112") + +g65sc02_device::g65sc02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + r65c02_device(mconfig, G65SC02, tag, owner, clock) +{ +} + +g65sc12_device::g65sc12_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + r65c02_device(mconfig, G65SC12, tag, owner, clock) +{ +} + +g65sc102_device::g65sc102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + r65c02_device(mconfig, G65SC102, tag, owner, clock) +{ +} -m65sc02_device::m65sc02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - r65c02_device(mconfig, M65SC02, tag, owner, clock) +g65sc112_device::g65sc112_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + r65c02_device(mconfig, G65SC112, tag, owner, clock) { } diff --git a/src/devices/cpu/m6502/m65sc02.h b/src/devices/cpu/m6502/m65sc02.h index 686411c0b22..147709ea265 100644 --- a/src/devices/cpu/m6502/m65sc02.h +++ b/src/devices/cpu/m6502/m65sc02.h @@ -13,17 +13,35 @@ #include "r65c02.h" -class m65sc02_device : public r65c02_device { +class g65sc02_device : public r65c02_device { public: - m65sc02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + g65sc02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; + +class g65sc12_device : public r65c02_device { +public: + g65sc12_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; + +class g65sc102_device : public r65c02_device { +public: + g65sc102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; + +class g65sc112_device : public r65c02_device { +public: + g65sc112_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); }; enum { - M65SC02_IRQ_LINE = m6502_device::IRQ_LINE, - M65SC02_NMI_LINE = m6502_device::NMI_LINE, - M65SC02_SET_OVERFLOW = m6502_device::V_LINE + G65SC02_IRQ_LINE = m6502_device::IRQ_LINE, + G65SC02_NMI_LINE = m6502_device::NMI_LINE, + G65SC02_SET_OVERFLOW = m6502_device::V_LINE }; -DECLARE_DEVICE_TYPE(M65SC02, m65sc02_device) +DECLARE_DEVICE_TYPE(G65SC02, g65sc02_device) +DECLARE_DEVICE_TYPE(G65SC12, g65sc12_device) +DECLARE_DEVICE_TYPE(G65SC102, g65sc102_device) +DECLARE_DEVICE_TYPE(G65SC112, g65sc112_device) #endif // MAME_CPU_M6502_M65SC02_H diff --git a/src/mame/acorn/bbc.cpp b/src/mame/acorn/bbc.cpp index 59c81910d97..55e3dd153c2 100644 --- a/src/mame/acorn/bbc.cpp +++ b/src/mame/acorn/bbc.cpp @@ -1624,7 +1624,7 @@ void bbcbp_state::econx25(machine_config &config) void bbcm_state::bbcm(machine_config &config) { /* basic machine hardware */ - M65SC02(config, m_maincpu, 16_MHz_XTAL / 8); + G65SC12(config, m_maincpu, 16_MHz_XTAL / 8); m_maincpu->set_addrmap(AS_PROGRAM, &bbcm_state::bbcm_mem); m_maincpu->set_addrmap(AS_OPCODES, &bbcm_state::bbcm_fetch); m_maincpu->set_periodic_int(FUNC(bbc_state::bbcb_keyscan), attotime::from_hz(1000)); /* scan keyboard */ diff --git a/src/mame/atari/lynx.cpp b/src/mame/atari/lynx.cpp index 473e96dbfbf..a74149d90fe 100644 --- a/src/mame/atari/lynx.cpp +++ b/src/mame/atari/lynx.cpp @@ -78,7 +78,7 @@ void lynx_state::sound_cb() void lynx_state::lynx(machine_config &config) { /* basic machine hardware */ - M65SC02(config, m_maincpu, XTAL(16'000'000) / 4); /* vti core, integrated in vlsi, stz, but not bbr bbs */ + G65SC02(config, m_maincpu, XTAL(16'000'000) / 4); /* vti core, integrated in vlsi, stz, but not bbr bbs */ m_maincpu->set_addrmap(AS_PROGRAM, &lynx_state::cpu_map); config.set_maximum_quantum(attotime::from_hz(60)); diff --git a/src/mame/atari/lynx_m.cpp b/src/mame/atari/lynx_m.cpp index cacb368fa94..c1ae51a6a81 100644 --- a/src/mame/atari/lynx_m.cpp +++ b/src/mame/atari/lynx_m.cpp @@ -1227,7 +1227,7 @@ void lynx_state::interrupt_set(u8 line) void lynx_state::interrupt_update() { - m_maincpu->set_input_line(M65SC02_IRQ_LINE, (m_mikey.interrupt == 0) ? CLEAR_LINE : ASSERT_LINE); + m_maincpu->set_input_line(G65SC02_IRQ_LINE, (m_mikey.interrupt == 0) ? CLEAR_LINE : ASSERT_LINE); } @@ -1877,7 +1877,7 @@ void lynx_state::machine_reset() m_mikey.interrupt = 0; m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); - m_maincpu->set_input_line(M65SC02_IRQ_LINE, CLEAR_LINE); + m_maincpu->set_input_line(G65SC02_IRQ_LINE, CLEAR_LINE); m_suzy = SUZY(); m_mikey = MIKEY(); diff --git a/src/mame/commodore/clcd.cpp b/src/mame/commodore/clcd.cpp index b3e41efafe4..b7b0396bd0b 100644 --- a/src/mame/commodore/clcd.cpp +++ b/src/mame/commodore/clcd.cpp @@ -13,10 +13,11 @@ #include "emu.h" + #include "bus/cbmiec/cbmiec.h" #include "bus/centronics/ctronics.h" #include "bus/rs232/rs232.h" -#include "cpu/m6502/m65c02.h" +#include "cpu/m6502/m65sc02.h" #include "machine/6522via.h" #include "machine/bankdev.h" #include "machine/input_merger.h" @@ -25,6 +26,7 @@ #include "machine/ram.h" #include "machine/nvram.h" #include "sound/spkrdev.h" + #include "emupal.h" #include "screen.h" #include "speaker.h" @@ -538,7 +540,7 @@ public: void clcd_banked_mem(address_map &map) ATTR_COLD; void clcd_mem(address_map &map) ATTR_COLD; private: - required_device m_maincpu; + required_device m_maincpu; required_device m_acia; required_device m_via0; required_device m_rtc; @@ -717,10 +719,10 @@ INPUT_PORTS_END void clcd_state::clcd(machine_config &config) { /* basic machine hardware */ - M65C02(config, m_maincpu, 1000000); + G65SC102(config, m_maincpu, 1000000); m_maincpu->set_addrmap(AS_PROGRAM, &clcd_state::clcd_mem); - INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline("maincpu", m65c02_device::IRQ_LINE); + INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline("maincpu", g65sc102_device::IRQ_LINE); via6522_device &via0(R65C22(config, "via0", 1000000)); via0.writepa_handler().set(FUNC(clcd_state::via0_pa_w)); @@ -823,4 +825,4 @@ ROM_END /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -COMP( 1985, clcd, 0, 0, clcd, clcd, clcd_state, empty_init, "Commodore Business Machines", "LCD (Prototype)", 0 ) +COMP( 1985, clcd, 0, 0, clcd, clcd, clcd_state, empty_init, "Commodore Business Machines", "LCD (prototype)", 0 ) diff --git a/src/mame/fidelity/excel.cpp b/src/mame/fidelity/excel.cpp index 3b2c0e63ec6..c0e38ae96bb 100644 --- a/src/mame/fidelity/excel.cpp +++ b/src/mame/fidelity/excel.cpp @@ -460,7 +460,7 @@ INPUT_PORTS_END void excel_state::fexcel(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, 12_MHz_XTAL/4); // G65SC102P-3, 12.0M ceramic resonator + G65SC102(config, m_maincpu, 12_MHz_XTAL/4); // G65SC102P-3, 12.0M ceramic resonator m_maincpu->set_addrmap(AS_PROGRAM, &excel_state::fexcel_map); auto &irq_clock(CLOCK(config, "irq_clock", 600)); // from 556 timer (22nF, 102K, 1K), ideal frequency is 600Hz diff --git a/src/mame/funworld/funworld.cpp b/src/mame/funworld/funworld.cpp index 6cb43963af1..442381fa68b 100644 --- a/src/mame/funworld/funworld.cpp +++ b/src/mame/funworld/funworld.cpp @@ -3306,7 +3306,7 @@ void lunapark_state::machine_reset() void funworld_state::fw1stpal(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, CPU_CLOCK); // 2 MHz. + G65SC02(config, m_maincpu, CPU_CLOCK); // 2 MHz. m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::funworld_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -3470,7 +3470,7 @@ void intergames_state::intrgmes(machine_config &config) { fw1stpal(config); - M65SC02(config.replace(), m_maincpu, CPU_CLOCK); // 2 MHz. + G65SC02(config.replace(), m_maincpu, CPU_CLOCK); // 2 MHz. m_maincpu->set_addrmap(AS_PROGRAM, &intergames_state::intergames_map); //m_maincpu->set_periodic_int(FUNC(intergames_state::nmi_line_pulse), attotime::from_hz(60)); diff --git a/src/mame/funworld/snookr10.cpp b/src/mame/funworld/snookr10.cpp index ef67c73c607..6ade37a0fb5 100644 --- a/src/mame/funworld/snookr10.cpp +++ b/src/mame/funworld/snookr10.cpp @@ -1037,7 +1037,7 @@ GFXDECODE_END void snookr10_state::snookr10(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, XTAL(16'000'000) / 8); // 2 MHz (1.999 MHz measured) + G65SC02(config, m_maincpu, XTAL(16'000'000) / 8); // 2 MHz (1.999 MHz measured) m_maincpu->set_addrmap(AS_PROGRAM, &snookr10_state::snookr10_map); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); diff --git a/src/mame/hegenerglaser/mondial.cpp b/src/mame/hegenerglaser/mondial.cpp index 0395f4fde7c..a4c134f669b 100644 --- a/src/mame/hegenerglaser/mondial.cpp +++ b/src/mame/hegenerglaser/mondial.cpp @@ -166,7 +166,7 @@ INPUT_PORTS_END void mondial_state::mondial(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, 2'000'000); + G65SC02(config, m_maincpu, 2'000'000); m_maincpu->set_addrmap(AS_PROGRAM, &mondial_state::mondial_mem); const attotime irq_period = attotime::from_hz(2'000'000 / 0x1000); diff --git a/src/mame/hegenerglaser/mondial2.cpp b/src/mame/hegenerglaser/mondial2.cpp index 5b77c18e8fd..b3c7bf81b42 100644 --- a/src/mame/hegenerglaser/mondial2.cpp +++ b/src/mame/hegenerglaser/mondial2.cpp @@ -175,7 +175,7 @@ INPUT_PORTS_END void mondial2_state::mondial2(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, 2_MHz_XTAL); + G65SC02(config, m_maincpu, 2_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &mondial2_state::mondial2_mem); const attotime nmi_period = attotime::from_hz(2_MHz_XTAL / 0x1000); diff --git a/src/mame/hegenerglaser/risc.cpp b/src/mame/hegenerglaser/risc.cpp index 8e81bc87fab..4a7618108c3 100644 --- a/src/mame/hegenerglaser/risc.cpp +++ b/src/mame/hegenerglaser/risc.cpp @@ -145,7 +145,7 @@ INPUT_PORTS_END void risc_state::mrisc(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, 10_MHz_XTAL / 4); + G65SC02(config, m_maincpu, 10_MHz_XTAL / 4); m_maincpu->set_addrmap(AS_PROGRAM, &risc_state::mrisc_mem); const attotime irq_period = attotime::from_hz(10_MHz_XTAL / 0x4000); diff --git a/src/mame/hegenerglaser/smondial.cpp b/src/mame/hegenerglaser/smondial.cpp index 7b26c98209e..21c65fe6695 100644 --- a/src/mame/hegenerglaser/smondial.cpp +++ b/src/mame/hegenerglaser/smondial.cpp @@ -279,7 +279,7 @@ INPUT_PORTS_END void smondialb_state::smondialb(machine_config &config) { // basic machine hardware - M65SC02(config, m_maincpu, 4_MHz_XTAL); + G65SC02(config, m_maincpu, 4_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &smondialb_state::smondialb_mem); const attotime nmi_period = attotime::from_hz(4_MHz_XTAL / 0x2000); diff --git a/src/mame/novag/const.cpp b/src/mame/novag/const.cpp index 2d31e44bf73..b6b6ee0c172 100644 --- a/src/mame/novag/const.cpp +++ b/src/mame/novag/const.cpp @@ -402,7 +402,7 @@ void const_state::nconst36(machine_config &config) nconst(config); // basic machine hardware - M65SC02(config.replace(), m_maincpu, 7.2_MHz_XTAL/2); + G65SC02(config.replace(), m_maincpu, 7.2_MHz_XTAL/2); m_maincpu->set_addrmap(AS_PROGRAM, &const_state::const_map); subdevice("irq_clock")->set_clock(7.2_MHz_XTAL/2 / 0x2000); // ~439Hz (pulse width same as nconst) diff --git a/src/mame/skeleton/textelcomp.cpp b/src/mame/skeleton/textelcomp.cpp index 852bffae17f..6055be8e45e 100644 --- a/src/mame/skeleton/textelcomp.cpp +++ b/src/mame/skeleton/textelcomp.cpp @@ -325,10 +325,10 @@ INPUT_PORTS_END void textelcomp_state::textelcomp(machine_config &config) { - M65SC02(config, m_maincpu, 3.6864_MHz_XTAL / 2); // G65SC02P-2 (clock not verified) + G65SC02(config, m_maincpu, 3.6864_MHz_XTAL / 2); // G65SC02P-2 (clock not verified) m_maincpu->set_addrmap(AS_PROGRAM, &textelcomp_state::mem_map); - INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, m65sc02_device::IRQ_LINE); + INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, g65sc02_device::IRQ_LINE); via6522_device &via0(R65C22(config, "via0", 3.6864_MHz_XTAL / 2)); // G65SC22P-2 via0.irq_handler().set("mainirq", FUNC(input_merger_device::in_w<0>)); -- cgit v1.2.3