From 178e9fee20c508ca3c1125c2f211c43c8c848f6e Mon Sep 17 00:00:00 2001 From: arbee Date: Thu, 26 Dec 2024 15:49:15 -0500 Subject: apple/cuda.cpp: Updates [Doug Brown, R. Belmont] - Set initial I2C data line state to high so systems with no I2C devices don't hang the 6805 - Use the correct Cuda 2.38 for mactv - Hook up power key properly so System 7.1 and 7.5 don't give spurious power down warnings when pressing modifier keys - Hook up Cuda NMI generation so Command-Power drops into MiniBug apple/maclc3.cpp: Set LC520/LC550 harddisk to SCSI ID 0 as the restore CD for those systems hard-codes the ID [R. Belmont] --- src/mame/apple/cuda.cpp | 21 ++++++++++++++------- src/mame/apple/cuda.h | 9 ++++++--- src/mame/apple/maclc.cpp | 6 +++++- src/mame/apple/maclc3.cpp | 6 ++++-- src/mame/apple/macquadra605.cpp | 2 ++ src/mame/apple/macquadra630.cpp | 2 ++ 6 files changed, 33 insertions(+), 13 deletions(-) diff --git a/src/mame/apple/cuda.cpp b/src/mame/apple/cuda.cpp index 6d2d21ba29a..54835ecaed5 100644 --- a/src/mame/apple/cuda.cpp +++ b/src/mame/apple/cuda.cpp @@ -86,6 +86,7 @@ void cuda_device::device_add_mconfig(machine_config &config) m_maincpu->write_p<1>().set(FUNC(cuda_device::pb_w)); m_maincpu->write_p<2>().set(FUNC(cuda_device::pc_w)); m_maincpu->set_pullups<1>(0xc0); // pull-ups on port B bits 6 & 7 (DFAC/I2C SDA & SCL) + m_maincpu->set_pullups<2>(0x04); // pull-up on port C bit 2 (NMI) } const tiny_rom_entry *cuda_device::device_rom_region() const @@ -101,6 +102,7 @@ cuda_device::cuda_device(const machine_config &mconfig, device_type type, const : device_t(mconfig, type, tag, owner, clock), device_nvram_interface(mconfig, *this), write_reset(*this), + write_nmi(*this), write_linechange(*this), write_via_clock(*this), write_via_data(*this), @@ -110,8 +112,8 @@ cuda_device::cuda_device(const machine_config &mconfig, device_type type, const m_maincpu(*this, "cudamcu"), m_default_nvram(*this, "defaultnv"), m_treq(0), m_byteack(0), m_tip(0), m_via_data(0), m_last_adb(0), - m_iic_sda(0), m_last_adb_time(0), m_cuda_controls_power(false), m_adb_in(false), - m_reset_line(0), m_adb_dtime(0), m_pram_loaded(false) + m_iic_sda(1), m_last_adb_time(0), m_cuda_controls_power(false), m_adb_in(false), m_adb_power(false), + m_reset_line(0), m_nmi_line(0), m_adb_dtime(0), m_pram_loaded(false) { std::fill(std::begin(m_disk_pram), std::end(m_disk_pram), 0); } @@ -124,6 +126,7 @@ void cuda_device::device_start() save_item(NAME(m_via_data)); save_item(NAME(m_adb_in)); save_item(NAME(m_reset_line)); + save_item(NAME(m_nmi_line)); save_item(NAME(m_adb_dtime)); save_item(NAME(m_pram_loaded)); save_item(NAME(m_disk_pram)); @@ -196,7 +199,7 @@ void cuda_device::pb_w(u8 data) void cuda_device::pc_w(u8 data) { - if ((data & 8) != m_reset_line) + if (BIT(data, 3) != m_reset_line) { LOGMASKED(LOG_HOSTCOMM, "680x0 reset: %d -> %d (PC=%x)\n", m_reset_line, BIT(data, 3), m_maincpu->pc()); // falling edge, should reset the machine too @@ -246,6 +249,12 @@ void cuda_device::pc_w(u8 data) } } } + + if ((!BIT(data, 2)) != m_nmi_line) + { + m_nmi_line = !BIT(data, 2); + write_nmi(m_nmi_line); + } } u8 cuda_device::pa_r() @@ -261,10 +270,8 @@ u8 cuda_device::pa_r() rv = 0x02 | 0x01; // pull-up + PFW } - if (m_adb_in) - { - rv |= 0x40; - } + rv |= (m_adb_in) ? 0x40 : 0; + rv |= (m_adb_power) ? 0 : 0x04; return rv; } diff --git a/src/mame/apple/cuda.h b/src/mame/apple/cuda.h index 43f9368f87c..1a37011659e 100644 --- a/src/mame/apple/cuda.h +++ b/src/mame/apple/cuda.h @@ -30,13 +30,15 @@ public: void set_byteack(u8 val) { m_byteack = val; } u8 get_via_data() { return m_via_data; } void set_via_data(u8 dat) { m_via_data = dat; } - void set_adb_line(int linestate) { m_adb_in = (linestate == ASSERT_LINE) ? true : false; } + void set_adb_line(int linestate) { m_adb_in = (linestate == ASSERT_LINE); } + void set_adb_power(int linestate) { m_adb_power = (linestate == ASSERT_LINE); } void set_iic_sda(u8 data) { m_iic_sda = (data & 1); } int get_adb_dtime() { return m_adb_dtime; } int rom_offset; auto reset_callback() { return write_reset.bind(); } + auto nmi_callback() { return write_nmi.bind(); } auto linechange_callback() { return write_linechange.bind(); } auto via_clock_callback() { return write_via_clock.bind(); } auto via_data_callback() { return write_via_data.bind(); } @@ -44,7 +46,7 @@ public: auto iic_sda_callback() { return write_iic_sda.bind(); } auto dfac_latch_callback() { return write_dfac_latch.bind(); } - devcb_write_line write_reset, write_linechange, write_via_clock, write_via_data; + devcb_write_line write_reset, write_nmi, write_linechange, write_via_clock, write_via_data; devcb_write_line write_iic_scl, write_iic_sda, write_dfac_latch; protected: @@ -70,7 +72,8 @@ private: u64 m_last_adb_time; bool m_cuda_controls_power; bool m_adb_in; - s32 m_reset_line; + bool m_adb_power; + s32 m_reset_line, m_nmi_line; s32 m_adb_dtime; u8 m_disk_pram[0x100]{}; bool m_pram_loaded; diff --git a/src/mame/apple/maclc.cpp b/src/mame/apple/maclc.cpp index 754c1b3a849..1e2717a6758 100644 --- a/src/mame/apple/maclc.cpp +++ b/src/mame/apple/maclc.cpp @@ -480,7 +480,9 @@ void maclc_state::maccclas(machine_config &config) m_cuda->linechange_callback().set(m_macadb, FUNC(macadb_device::adb_linechange_w)); m_cuda->via_clock_callback().set(m_v8, FUNC(v8_device::cb1_w)); m_cuda->via_data_callback().set(m_v8, FUNC(v8_device::cb2_w)); + m_cuda->nmi_callback().set_inputline(m_maincpu, M68K_IRQ_7); m_macadb->adb_data_callback().set(m_cuda, FUNC(cuda_device::set_adb_line)); + m_macadb->adb_power_callback().set(m_cuda, FUNC(cuda_device::set_adb_power)); config.set_perfect_quantum(m_maincpu); SPICE(config.replace(), m_v8, C15M); @@ -518,12 +520,14 @@ void maclc_state::mactv(machine_config &config) config.device_remove("fdc"); CUDA_V2XX(config, m_cuda, XTAL(32'768)); - m_cuda->set_default_bios_tag("341s0788"); // TODO: 0789 freezes during boot, possible VIA bug or 6522/6523 difference? + m_cuda->set_default_bios_tag("341s0789"); m_cuda->reset_callback().set(FUNC(maclc_state::egret_reset_w)); m_cuda->linechange_callback().set(m_macadb, FUNC(macadb_device::adb_linechange_w)); m_cuda->via_clock_callback().set(m_v8, FUNC(v8_device::cb1_w)); m_cuda->via_data_callback().set(m_v8, FUNC(v8_device::cb2_w)); + m_cuda->nmi_callback().set_inputline(m_maincpu, M68K_IRQ_7); m_macadb->adb_data_callback().set(m_cuda, FUNC(cuda_device::set_adb_line)); + m_macadb->adb_power_callback().set(m_cuda, FUNC(cuda_device::set_adb_power)); config.set_perfect_quantum(m_maincpu); TINKERBELL(config.replace(), m_v8, C15M); diff --git a/src/mame/apple/maclc3.cpp b/src/mame/apple/maclc3.cpp index 077e8eb8c10..2c28aaebcae 100644 --- a/src/mame/apple/maclc3.cpp +++ b/src/mame/apple/maclc3.cpp @@ -263,7 +263,7 @@ void macvail_state::maclc3_base(machine_config &config) m_ram->set_extra_options("8M,16M,32M,48M,64M,80M"); NSCSI_BUS(config, "scsi"); - NSCSI_CONNECTOR(config, "scsi:0", mac_scsi_devices, nullptr); + NSCSI_CONNECTOR(config, "scsi:0", mac_scsi_devices, "harddisk"); NSCSI_CONNECTOR(config, "scsi:1", mac_scsi_devices, nullptr); NSCSI_CONNECTOR(config, "scsi:2", mac_scsi_devices, nullptr); NSCSI_CONNECTOR(config, "scsi:3").option_set("cdrom", NSCSI_CDROM_APPLE).machine_config( @@ -274,7 +274,7 @@ void macvail_state::maclc3_base(machine_config &config) }); NSCSI_CONNECTOR(config, "scsi:4", mac_scsi_devices, nullptr); NSCSI_CONNECTOR(config, "scsi:5", mac_scsi_devices, nullptr); - NSCSI_CONNECTOR(config, "scsi:6", mac_scsi_devices, "harddisk"); + NSCSI_CONNECTOR(config, "scsi:6", mac_scsi_devices, nullptr); NSCSI_CONNECTOR(config, "scsi:7").option_set("ncr5380", NCR53C80).machine_config([this](device_t *device) { ncr53c80_device &adapter = downcast(*device); @@ -384,7 +384,9 @@ void macvail_state::maclc520(machine_config &config) m_cuda->iic_scl_callback().set(m_omega, FUNC(omega_device::clock_write)); m_cuda->iic_sda_callback().set(m_omega, FUNC(omega_device::data_write)); m_cuda->dfac_latch_callback().set(m_omega, FUNC(omega_device::latch_write)); + m_cuda->nmi_callback().set_inputline(m_maincpu, M68K_IRQ_7); m_macadb->adb_data_callback().set(m_cuda, FUNC(cuda_device::set_adb_line)); + m_macadb->adb_power_callback().set(m_cuda, FUNC(cuda_device::set_adb_power)); config.set_perfect_quantum(m_maincpu); m_sonora->pb3_callback().set(m_cuda, FUNC(cuda_device::get_treq)); diff --git a/src/mame/apple/macquadra605.cpp b/src/mame/apple/macquadra605.cpp index a59db98ea16..ca036edaeaa 100644 --- a/src/mame/apple/macquadra605.cpp +++ b/src/mame/apple/macquadra605.cpp @@ -213,7 +213,9 @@ void quadra605_state::macqd605(machine_config &config) m_cuda->linechange_callback().set(m_macadb, FUNC(macadb_device::adb_linechange_w)); m_cuda->via_clock_callback().set(m_primetime, FUNC(primetime_device::cb1_w)); m_cuda->via_data_callback().set(m_primetime, FUNC(primetime_device::cb2_w)); + m_cuda->nmi_callback().set_inputline(m_maincpu, M68K_IRQ_7); m_macadb->adb_data_callback().set(m_cuda, FUNC(cuda_device::set_adb_line)); + m_macadb->adb_power_callback().set(m_cuda, FUNC(cuda_device::set_adb_power)); config.set_perfect_quantum(m_maincpu); m_primetime->pb3_callback().set(m_cuda, FUNC(cuda_device::get_treq)); diff --git a/src/mame/apple/macquadra630.cpp b/src/mame/apple/macquadra630.cpp index a04a559c05a..a14662bebde 100644 --- a/src/mame/apple/macquadra630.cpp +++ b/src/mame/apple/macquadra630.cpp @@ -176,7 +176,9 @@ void quadra630_state::macqd630(machine_config &config) m_cuda->linechange_callback().set(m_macadb, FUNC(macadb_device::adb_linechange_w)); m_cuda->via_clock_callback().set(m_primetimeii, FUNC(primetime_device::cb1_w)); m_cuda->via_data_callback().set(m_primetimeii, FUNC(primetime_device::cb2_w)); + m_cuda->nmi_callback().set_inputline(m_maincpu, M68K_IRQ_7); m_macadb->adb_data_callback().set(m_cuda, FUNC(cuda_device::set_adb_line)); + m_macadb->adb_power_callback().set(m_cuda, FUNC(cuda_device::set_adb_power)); config.set_perfect_quantum(m_maincpu); input_merger_device &sda_merger(INPUT_MERGER_ALL_HIGH(config, "sda")); -- cgit v1.2.3